xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/doc/gcc.info (revision b7b7574d3bf8eeb51a1fa3977b59142ec6434a55)
1This is doc/gcc.info, produced by makeinfo version 4.12 from
2/space/rguenther/gcc-4.5.4/gcc-4.5.4/gcc/doc/gcc.texi.
3
4Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
51999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free
6Software Foundation, Inc.
7
8 Permission is granted to copy, distribute and/or modify this document
9under the terms of the GNU Free Documentation License, Version 1.2 or
10any later version published by the Free Software Foundation; with the
11Invariant Sections being "Funding Free Software", the Front-Cover Texts
12being (a) (see below), and with the Back-Cover Texts being (b) (see
13below).  A copy of the license is included in the section entitled "GNU
14Free Documentation License".
15
16 (a) The FSF's Front-Cover Text is:
17
18 A GNU Manual
19
20 (b) The FSF's Back-Cover Text is:
21
22 You have freedom to copy and modify this GNU Manual, like GNU
23software.  Copies published by the Free Software Foundation raise
24funds for GNU development.
25
26INFO-DIR-SECTION Software development
27START-INFO-DIR-ENTRY
28* gcc: (gcc).                  The GNU Compiler Collection.
29* g++: (gcc).                  The GNU C++ compiler.
30END-INFO-DIR-ENTRY
31 This file documents the use of the GNU compilers.
32
33 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
341999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free
35Software Foundation, Inc.
36
37 Permission is granted to copy, distribute and/or modify this document
38under the terms of the GNU Free Documentation License, Version 1.2 or
39any later version published by the Free Software Foundation; with the
40Invariant Sections being "Funding Free Software", the Front-Cover Texts
41being (a) (see below), and with the Back-Cover Texts being (b) (see
42below).  A copy of the license is included in the section entitled "GNU
43Free Documentation License".
44
45 (a) The FSF's Front-Cover Text is:
46
47 A GNU Manual
48
49 (b) The FSF's Back-Cover Text is:
50
51 You have freedom to copy and modify this GNU Manual, like GNU
52software.  Copies published by the Free Software Foundation raise
53funds for GNU development.
54
55
56
57File: gcc.info,  Node: Top,  Next: G++ and GCC,  Up: (DIR)
58
59Introduction
60************
61
62This manual documents how to use the GNU compilers, as well as their
63features and incompatibilities, and how to report bugs.  It corresponds
64to the compilers (GCC) version 4.5.4.  The internals of the GNU
65compilers, including how to port them to new targets and some
66information about how to write front ends for new languages, are
67documented in a separate manual.  *Note Introduction: (gccint)Top.
68
69* Menu:
70
71* G++ and GCC::     You can compile C or C++ programs.
72* Standards::       Language standards supported by GCC.
73* Invoking GCC::    Command options supported by `gcc'.
74* C Implementation:: How GCC implements the ISO C specification.
75* C Extensions::    GNU extensions to the C language family.
76* C++ Implementation:: How GCC implements the ISO C++ specification.
77* C++ Extensions::  GNU extensions to the C++ language.
78* Objective-C::     GNU Objective-C runtime features.
79* Compatibility::   Binary Compatibility
80* Gcov::            `gcov'---a test coverage program.
81* Trouble::         If you have trouble using GCC.
82* Bugs::            How, why and where to report bugs.
83* Service::         How to find suppliers of support for GCC.
84* Contributing::    How to contribute to testing and developing GCC.
85
86* Funding::         How to help assure funding for free software.
87* GNU Project::     The GNU Project and GNU/Linux.
88
89* Copying::         GNU General Public License says
90                    how you can copy and share GCC.
91* GNU Free Documentation License:: How you can copy and share this manual.
92* Contributors::    People who have contributed to GCC.
93
94* Option Index::    Index to command line options.
95* Keyword Index::   Index of concepts and symbol names.
96
97
98File: gcc.info,  Node: G++ and GCC,  Next: Standards,  Prev: Top,  Up: Top
99
1001 Programming Languages Supported by GCC
101****************************************
102
103GCC stands for "GNU Compiler Collection".  GCC is an integrated
104distribution of compilers for several major programming languages.
105These languages currently include C, C++, Objective-C, Objective-C++,
106Java, Fortran, and Ada.
107
108 The abbreviation "GCC" has multiple meanings in common use.  The
109current official meaning is "GNU Compiler Collection", which refers
110generically to the complete suite of tools.  The name historically stood
111for "GNU C Compiler", and this usage is still common when the emphasis
112is on compiling C programs.  Finally, the name is also used when
113speaking of the "language-independent" component of GCC: code shared
114among the compilers for all supported languages.
115
116 The language-independent component of GCC includes the majority of the
117optimizers, as well as the "back ends" that generate machine code for
118various processors.
119
120 The part of a compiler that is specific to a particular language is
121called the "front end".  In addition to the front ends that are
122integrated components of GCC, there are several other front ends that
123are maintained separately.  These support languages such as Pascal,
124Mercury, and COBOL.  To use these, they must be built together with GCC
125proper.
126
127 Most of the compilers for languages other than C have their own names.
128The C++ compiler is G++, the Ada compiler is GNAT, and so on.  When we
129talk about compiling one of those languages, we might refer to that
130compiler by its own name, or as GCC.  Either is correct.
131
132 Historically, compilers for many languages, including C++ and Fortran,
133have been implemented as "preprocessors" which emit another high level
134language such as C.  None of the compilers included in GCC are
135implemented this way; they all generate machine code directly.  This
136sort of preprocessor should not be confused with the "C preprocessor",
137which is an integral feature of the C, C++, Objective-C and
138Objective-C++ languages.
139
140
141File: gcc.info,  Node: Standards,  Next: Invoking GCC,  Prev: G++ and GCC,  Up: Top
142
1432 Language Standards Supported by GCC
144*************************************
145
146For each language compiled by GCC for which there is a standard, GCC
147attempts to follow one or more versions of that standard, possibly with
148some exceptions, and possibly with some extensions.
149
1502.1 C language
151==============
152
153GCC supports three versions of the C standard, although support for the
154most recent version is not yet complete.
155
156 The original ANSI C standard (X3.159-1989) was ratified in 1989 and
157published in 1990.  This standard was ratified as an ISO standard
158(ISO/IEC 9899:1990) later in 1990.  There were no technical differences
159between these publications, although the sections of the ANSI standard
160were renumbered and became clauses in the ISO standard.  This standard,
161in both its forms, is commonly known as "C89", or occasionally as
162"C90", from the dates of ratification.  The ANSI standard, but not the
163ISO standard, also came with a Rationale document.  To select this
164standard in GCC, use one of the options `-ansi', `-std=c90' or
165`-std=iso9899:1990'; to obtain all the diagnostics required by the
166standard, you should also specify `-pedantic' (or `-pedantic-errors' if
167you want them to be errors rather than warnings).  *Note Options
168Controlling C Dialect: C Dialect Options.
169
170 Errors in the 1990 ISO C standard were corrected in two Technical
171Corrigenda published in 1994 and 1996.  GCC does not support the
172uncorrected version.
173
174 An amendment to the 1990 standard was published in 1995.  This
175amendment added digraphs and `__STDC_VERSION__' to the language, but
176otherwise concerned the library.  This amendment is commonly known as
177"AMD1"; the amended standard is sometimes known as "C94" or "C95".  To
178select this standard in GCC, use the option `-std=iso9899:199409'
179(with, as for other standard versions, `-pedantic' to receive all
180required diagnostics).
181
182 A new edition of the ISO C standard was published in 1999 as ISO/IEC
1839899:1999, and is commonly known as "C99".  GCC has incomplete support
184for this standard version; see
185`http://gcc.gnu.org/gcc-4.5/c99status.html' for details.  To select this
186standard, use `-std=c99' or `-std=iso9899:1999'.  (While in
187development, drafts of this standard version were referred to as "C9X".)
188
189 Errors in the 1999 ISO C standard were corrected in three Technical
190Corrigenda published in 2001, 2004 and 2007.  GCC does not support the
191uncorrected version.
192
193 By default, GCC provides some extensions to the C language that on
194rare occasions conflict with the C standard.  *Note Extensions to the C
195Language Family: C Extensions.  Use of the `-std' options listed above
196will disable these extensions where they conflict with the C standard
197version selected.  You may also select an extended version of the C
198language explicitly with `-std=gnu90' (for C90 with GNU extensions) or
199`-std=gnu99' (for C99 with GNU extensions).  The default, if no C
200language dialect options are given, is `-std=gnu90'; this will change to
201`-std=gnu99' in some future release when the C99 support is complete.
202Some features that are part of the C99 standard are accepted as
203extensions in C90 mode.
204
205 The ISO C standard defines (in clause 4) two classes of conforming
206implementation.  A "conforming hosted implementation" supports the
207whole standard including all the library facilities; a "conforming
208freestanding implementation" is only required to provide certain
209library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>',
210and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; and in C99,
211also those in `<stdbool.h>' and `<stdint.h>'.  In addition, complex
212types, added in C99, are not required for freestanding implementations.
213The standard also defines two environments for programs, a
214"freestanding environment", required of all implementations and which
215may not have library facilities beyond those required of freestanding
216implementations, where the handling of program startup and termination
217are implementation-defined, and a "hosted environment", which is not
218required, in which all the library facilities are provided and startup
219is through a function `int main (void)' or `int main (int, char *[])'.
220An OS kernel would be a freestanding environment; a program using the
221facilities of an operating system would normally be in a hosted
222implementation.
223
224 GCC aims towards being usable as a conforming freestanding
225implementation, or as the compiler for a conforming hosted
226implementation.  By default, it will act as the compiler for a hosted
227implementation, defining `__STDC_HOSTED__' as `1' and presuming that
228when the names of ISO C functions are used, they have the semantics
229defined in the standard.  To make it act as a conforming freestanding
230implementation for a freestanding environment, use the option
231`-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not
232make assumptions about the meanings of function names from the standard
233library, with exceptions noted below.  To build an OS kernel, you may
234well still need to make your own arrangements for linking and startup.
235*Note Options Controlling C Dialect: C Dialect Options.
236
237 GCC does not provide the library facilities required only of hosted
238implementations, nor yet all the facilities required by C99 of
239freestanding implementations; to use the facilities of a hosted
240environment, you will need to find them elsewhere (for example, in the
241GNU C library).  *Note Standard Libraries: Standard Libraries.
242
243 Most of the compiler support routines used by GCC are present in
244`libgcc', but there are a few exceptions.  GCC requires the
245freestanding environment provide `memcpy', `memmove', `memset' and
246`memcmp'.  Finally, if `__builtin_trap' is used, and the target does
247not implement the `trap' pattern, then GCC will emit a call to `abort'.
248
249 For references to Technical Corrigenda, Rationale documents and
250information concerning the history of C that is available online, see
251`http://gcc.gnu.org/readings.html'
252
2532.2 C++ language
254================
255
256GCC supports the ISO C++ standard (1998) and contains experimental
257support for the upcoming ISO C++ standard (200x).
258
259 The original ISO C++ standard was published as the ISO standard
260(ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in
2612003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and
262C++03, respectively. GCC implements the majority of C++98 (`export' is
263a notable exception) and most of the changes in C++03.  To select this
264standard in GCC, use one of the options `-ansi' or `-std=c++98'; to
265obtain all the diagnostics required by the standard, you should also
266specify `-pedantic' (or `-pedantic-errors' if you want them to be
267errors rather than warnings).
268
269 The ISO C++ committee is working on a new ISO C++ standard, dubbed
270C++0x, that is intended to be published by 2009. C++0x contains several
271changes to the C++ language, some of which have been implemented in an
272experimental C++0x mode in GCC. The C++0x mode in GCC tracks the draft
273working paper for the C++0x standard; the latest working paper is
274available on the ISO C++ committee's web site at
275`http://www.open-std.org/jtc1/sc22/wg21/'. For information regarding
276the C++0x features available in the experimental C++0x mode, see
277`http://gcc.gnu.org/projects/cxx0x.html'. To select this standard in
278GCC, use the option `-std=c++0x'; to obtain all the diagnostics
279required by the standard, you should also specify `-pedantic' (or
280`-pedantic-errors' if you want them to be errors rather than warnings).
281
282 By default, GCC provides some extensions to the C++ language; *Note
283Options Controlling C++ Dialect: C++ Dialect Options.  Use of the
284`-std' option listed above will disable these extensions.  You may also
285select an extended version of the C++ language explicitly with
286`-std=gnu++98' (for C++98 with GNU extensions) or `-std=gnu++0x' (for
287C++0x with GNU extensions).  The default, if no C++ language dialect
288options are given, is `-std=gnu++98'.
289
2902.3 Objective-C and Objective-C++ languages
291===========================================
292
293There is no formal written standard for Objective-C or Objective-C++.
294The most authoritative manual is "Object-Oriented Programming and the
295Objective-C Language", available at a number of web sites:
296
297   *
298     `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/'
299     is a recent (and periodically updated) version;
300
301   * `http://objc.toodarkpark.net' is an older example;
302
303   * `http://www.gnustep.org' and `http://gcc.gnu.org/readings.html'
304     have additional useful information.
305
306 *Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
307conformance and compatibility of the Ada compiler.
308
309 *Note Standards: (gfortran)Standards, for details of standards
310supported by GNU Fortran.
311
312 *Note Compatibility with the Java Platform: (gcj)Compatibility, for
313details of compatibility between `gcj' and the Java Platform.
314
315
316File: gcc.info,  Node: Invoking GCC,  Next: C Implementation,  Prev: Standards,  Up: Top
317
3183 GCC Command Options
319*********************
320
321When you invoke GCC, it normally does preprocessing, compilation,
322assembly and linking.  The "overall options" allow you to stop this
323process at an intermediate stage.  For example, the `-c' option says
324not to run the linker.  Then the output consists of object files output
325by the assembler.
326
327 Other options are passed on to one stage of processing.  Some options
328control the preprocessor and others the compiler itself.  Yet other
329options control the assembler and linker; most of these are not
330documented here, since you rarely need to use any of them.
331
332 Most of the command line options that you can use with GCC are useful
333for C programs; when an option is only useful with another language
334(usually C++), the explanation says so explicitly.  If the description
335for a particular option does not mention a source language, you can use
336that option with all supported languages.
337
338 *Note Compiling C++ Programs: Invoking G++, for a summary of special
339options for compiling C++ programs.
340
341 The `gcc' program accepts options and file names as operands.  Many
342options have multi-letter names; therefore multiple single-letter
343options may _not_ be grouped: `-dv' is very different from `-d -v'.
344
345 You can mix options and other arguments.  For the most part, the order
346you use doesn't matter.  Order does matter when you use several options
347of the same kind; for example, if you specify `-L' more than once, the
348directories are searched in the order specified.  Also, the placement
349of the `-l' option is significant.
350
351 Many options have long names starting with `-f' or with `-W'--for
352example, `-fmove-loop-invariants', `-Wformat' and so on.  Most of these
353have both positive and negative forms; the negative form of `-ffoo'
354would be `-fno-foo'.  This manual documents only one of these two
355forms, whichever one is not the default.
356
357 *Note Option Index::, for an index to GCC's options.
358
359* Menu:
360
361* Option Summary::      Brief list of all options, without explanations.
362* Overall Options::     Controlling the kind of output:
363                        an executable, object files, assembler files,
364                        or preprocessed source.
365* Invoking G++::        Compiling C++ programs.
366* C Dialect Options::   Controlling the variant of C language compiled.
367* C++ Dialect Options:: Variations on C++.
368* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
369                        and Objective-C++.
370* Language Independent Options:: Controlling how diagnostics should be
371                        formatted.
372* Warning Options::     How picky should the compiler be?
373* Debugging Options::   Symbol tables, measurements, and debugging dumps.
374* Optimize Options::    How much optimization?
375* Preprocessor Options:: Controlling header files and macro definitions.
376                         Also, getting dependency information for Make.
377* Assembler Options::   Passing options to the assembler.
378* Link Options::        Specifying libraries and so on.
379* Directory Options::   Where to find header files and libraries.
380                        Where to find the compiler executable files.
381* Spec Files::          How to pass switches to sub-processes.
382* Target Options::      Running a cross-compiler, or an old version of GCC.
383* Submodel Options::    Specifying minor hardware or convention variations,
384                        such as 68010 vs 68020.
385* Code Gen Options::    Specifying conventions for function calls, data layout
386                        and register usage.
387* Environment Variables:: Env vars that affect GCC.
388* Precompiled Headers:: Compiling a header once, and using it many times.
389
390
391File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC
392
3933.1 Option Summary
394==================
395
396Here is a summary of all the options, grouped by type.  Explanations are
397in the following sections.
398
399_Overall Options_
400     *Note Options Controlling the Kind of Output: Overall Options.
401          -c  -S  -E  -o FILE  -combine  -no-canonical-prefixes
402          -pipe  -pass-exit-codes
403          -x LANGUAGE  -v  -###  --help[=CLASS[,...]]  --target-help
404          --version -wrapper@FILE -fplugin=FILE -fplugin-arg-NAME=ARG
405
406_C Language Options_
407     *Note Options Controlling C Dialect: C Dialect Options.
408          -ansi  -std=STANDARD  -fgnu89-inline
409          -aux-info FILENAME
410          -fno-asm  -fno-builtin  -fno-builtin-FUNCTION
411          -fhosted  -ffreestanding -fopenmp -fms-extensions
412          -trigraphs  -no-integrated-cpp  -traditional  -traditional-cpp
413          -fallow-single-precision  -fcond-mismatch -flax-vector-conversions
414          -fsigned-bitfields  -fsigned-char
415          -funsigned-bitfields  -funsigned-char
416
417_C++ Language Options_
418     *Note Options Controlling C++ Dialect: C++ Dialect Options.
419          -fabi-version=N  -fno-access-control  -fcheck-new
420          -fconserve-space  -ffriend-injection
421          -fno-elide-constructors
422          -fno-enforce-eh-specs
423          -ffor-scope  -fno-for-scope  -fno-gnu-keywords
424          -fno-implicit-templates
425          -fno-implicit-inline-templates
426          -fno-implement-inlines  -fms-extensions
427          -fno-nonansi-builtins  -fno-operator-names
428          -fno-optional-diags  -fpermissive
429          -fno-pretty-templates
430          -frepo  -fno-rtti  -fstats  -ftemplate-depth=N
431          -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++
432          -fno-default-inline  -fvisibility-inlines-hidden
433          -fvisibility-ms-compat
434          -Wabi  -Wconversion-null  -Wctor-dtor-privacy
435          -Wnon-virtual-dtor  -Wreorder
436          -Weffc++  -Wstrict-null-sentinel
437          -Wno-non-template-friend  -Wold-style-cast
438          -Woverloaded-virtual  -Wno-pmf-conversions
439          -Wsign-promo
440
441_Objective-C and Objective-C++ Language Options_
442     *Note Options Controlling Objective-C and Objective-C++ Dialects:
443     Objective-C and Objective-C++ Dialect Options.
444          -fconstant-string-class=CLASS-NAME
445          -fgnu-runtime  -fnext-runtime
446          -fno-nil-receivers
447          -fobjc-call-cxx-cdtors
448          -fobjc-direct-dispatch
449          -fobjc-exceptions
450          -fobjc-gc
451          -freplace-objc-classes
452          -fzero-link
453          -gen-decls
454          -Wassign-intercept
455          -Wno-protocol  -Wselector
456          -Wstrict-selector-match
457          -Wundeclared-selector
458
459_Language Independent Options_
460     *Note Options to Control Diagnostic Messages Formatting: Language
461     Independent Options.
462          -fmessage-length=N
463          -fdiagnostics-show-location=[once|every-line]
464          -fdiagnostics-show-option
465
466_Warning Options_
467     *Note Options to Request or Suppress Warnings: Warning Options.
468          -fsyntax-only  -pedantic  -pedantic-errors
469          -w  -Wextra  -Wall  -Waddress  -Waggregate-return  -Warray-bounds
470          -Wno-attributes -Wno-builtin-macro-redefined
471          -Wc++-compat -Wc++0x-compat -Wcast-align  -Wcast-qual
472          -Wchar-subscripts -Wclobbered  -Wcomment
473          -Wconversion  -Wcoverage-mismatch  -Wno-deprecated
474          -Wno-deprecated-declarations -Wdisabled-optimization
475          -Wno-div-by-zero -Wempty-body  -Wenum-compare -Wno-endif-labels
476          -Werror  -Werror=*
477          -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2
478          -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral
479          -Wformat-security  -Wformat-y2k
480          -Wframe-larger-than=LEN -Wjump-misses-init -Wignored-qualifiers
481          -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int
482          -Winit-self  -Winline
483          -Wno-int-to-pointer-cast -Wno-invalid-offsetof
484          -Winvalid-pch -Wlarger-than=LEN  -Wunsafe-loop-optimizations
485          -Wlogical-op -Wlong-long
486          -Wmain  -Wmissing-braces  -Wmissing-field-initializers
487          -Wmissing-format-attribute  -Wmissing-include-dirs
488          -Wmissing-noreturn  -Wno-mudflap
489          -Wno-multichar  -Wnonnull  -Wno-overflow
490          -Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded
491          -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format
492          -Wpointer-arith  -Wno-pointer-to-int-cast
493          -Wredundant-decls
494          -Wreturn-type  -Wsequence-point  -Wshadow
495          -Wsign-compare  -Wsign-conversion  -Wstack-protector
496          -Wstrict-aliasing -Wstrict-aliasing=n
497          -Wstrict-overflow -Wstrict-overflow=N
498          -Wswitch  -Wswitch-default  -Wswitch-enum -Wsync-nand
499          -Wsystem-headers  -Wtrigraphs  -Wtype-limits  -Wundef  -Wuninitialized
500          -Wunknown-pragmas  -Wno-pragmas
501          -Wunsuffixed-float-constants  -Wunused  -Wunused-function
502          -Wunused-label  -Wunused-parameter -Wno-unused-result -Wunused-value  -Wunused-variable
503          -Wvariadic-macros -Wvla
504          -Wvolatile-register-var  -Wwrite-strings
505
506_C and Objective-C-only Warning Options_
507          -Wbad-function-cast  -Wmissing-declarations
508          -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
509          -Wold-style-declaration  -Wold-style-definition
510          -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion
511          -Wdeclaration-after-statement -Wpointer-sign
512
513_Debugging Options_
514     *Note Options for Debugging Your Program or GCC: Debugging Options.
515          -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
516          -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST
517          -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links
518          -fdump-translation-unit[-N]
519          -fdump-class-hierarchy[-N]
520          -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline
521          -fdump-statistics
522          -fdump-tree-all
523          -fdump-tree-original[-N]
524          -fdump-tree-optimized[-N]
525          -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias
526          -fdump-tree-ch
527          -fdump-tree-ssa[-N] -fdump-tree-pre[-N]
528          -fdump-tree-ccp[-N] -fdump-tree-dce[-N]
529          -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N]
530          -fdump-tree-dom[-N]
531          -fdump-tree-dse[-N]
532          -fdump-tree-phiprop[-N]
533          -fdump-tree-phiopt[-N]
534          -fdump-tree-forwprop[-N]
535          -fdump-tree-copyrename[-N]
536          -fdump-tree-nrv -fdump-tree-vect
537          -fdump-tree-sink
538          -fdump-tree-sra[-N]
539          -fdump-tree-forwprop[-N]
540          -fdump-tree-fre[-N]
541          -fdump-tree-vrp[-N]
542          -ftree-vectorizer-verbose=N
543          -fdump-tree-storeccp[-N]
544          -fdump-final-insns=FILE
545          -fcompare-debug[=OPTS]  -fcompare-debug-second
546          -feliminate-dwarf2-dups -feliminate-unused-debug-types
547          -feliminate-unused-debug-symbols -femit-class-debug-always
548          -fenable-icf-debug
549          -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs
550          -frandom-seed=STRING -fsched-verbose=N
551          -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose
552          -ftest-coverage  -ftime-report -fvar-tracking
553          -fvar-tracking-assignments  -fvar-tracking-assignments-toggle
554          -g  -gLEVEL  -gtoggle  -gcoff  -gdwarf-VERSION
555          -ggdb  -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf
556          -gvms  -gxcoff  -gxcoff+
557          -fno-merge-debug-strings -fno-dwarf2-cfi-asm
558          -fdebug-prefix-map=OLD=NEW
559          -femit-struct-debug-baseonly -femit-struct-debug-reduced
560          -femit-struct-debug-detailed[=SPEC-LIST]
561          -p  -pg  -print-file-name=LIBRARY  -print-libgcc-file-name
562          -print-multi-directory  -print-multi-lib  -print-multi-os-directory
563          -print-prog-name=PROGRAM  -print-search-dirs  -Q
564          -print-sysroot -print-sysroot-headers-suffix
565          -save-temps -save-temps=cwd -save-temps=obj -time[=FILE]
566
567_Optimization Options_
568     *Note Options that Control Optimization: Optimize Options.
569          -falign-functions[=N] -falign-jumps[=N]
570          -falign-labels[=N] -falign-loops[=N] -fassociative-math
571          -fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize
572          -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves
573          -fcheck-data-deps -fconserve-stack -fcprop-registers -fcrossjumping
574          -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules -fcx-limited-range
575          -fdata-sections -fdce -fdce
576          -fdelayed-branch -fdelete-null-pointer-checks -fdse -fdse
577          -fearly-inlining -fipa-sra -fexpensive-optimizations -ffast-math
578          -ffinite-math-only -ffloat-store -fexcess-precision=STYLE
579          -fforward-propagate -ffunction-sections
580          -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm
581          -fgcse-sm -fif-conversion -fif-conversion2 -findirect-inlining
582          -finline-functions -finline-functions-called-once -finline-limit=N
583          -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg -fipa-pta
584          -fipa-pure-const -fipa-reference -fipa-struct-reorg
585          -fipa-type-escape -fira-algorithm=ALGORITHM
586          -fira-region=REGION -fira-coalesce
587          -fira-loop-pressure -fno-ira-share-save-slots
588          -fno-ira-share-spill-slots -fira-verbose=N
589          -fivopts -fkeep-inline-functions -fkeep-static-consts
590          -floop-block -floop-interchange -floop-strip-mine -fgraphite-identity
591          -floop-parallelize-all -flto -flto-compression-level -flto-report -fltrans
592          -fltrans-output-list -fmerge-all-constants -fmerge-constants -fmodulo-sched
593          -fmodulo-sched-allow-regmoves -fmove-loop-invariants -fmudflap
594          -fmudflapir -fmudflapth -fno-branch-count-reg -fno-default-inline
595          -fno-defer-pop -fno-function-cse -fno-guess-branch-probability
596          -fno-inline -fno-math-errno -fno-peephole -fno-peephole2
597          -fno-sched-interblock -fno-sched-spec -fno-signed-zeros
598          -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss
599          -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls
600          -fpeel-loops -fpredictive-commoning -fprefetch-loop-arrays
601          -fprofile-correction -fprofile-dir=PATH -fprofile-generate
602          -fprofile-generate=PATH
603          -fprofile-use -fprofile-use=PATH -fprofile-values
604          -freciprocal-math -fregmove -frename-registers -freorder-blocks
605          -freorder-blocks-and-partition -freorder-functions
606          -frerun-cse-after-loop -freschedule-modulo-scheduled-loops
607          -frounding-math -fsched2-use-superblocks -fsched-pressure
608          -fsched-spec-load -fsched-spec-load-dangerous
609          -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N]
610          -fsched-group-heuristic -fsched-critical-path-heuristic
611          -fsched-spec-insn-heuristic -fsched-rank-heuristic
612          -fsched-last-insn-heuristic -fsched-dep-count-heuristic
613          -fschedule-insns -fschedule-insns2 -fsection-anchors
614          -fselective-scheduling -fselective-scheduling2
615          -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops
616          -fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller
617          -fsplit-wide-types -fstack-protector -fstack-protector-all
618          -fstrict-aliasing -fstrict-overflow -fthread-jumps -ftracer
619          -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copy-prop
620          -ftree-copyrename -ftree-dce
621          -ftree-dominator-opts -ftree-dse -ftree-forwprop -ftree-fre -ftree-loop-im
622          -ftree-phiprop -ftree-loop-distribution
623          -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize
624          -ftree-parallelize-loops=N -ftree-pre -ftree-pta -ftree-reassoc
625          -ftree-sink -ftree-sra -ftree-switch-conversion
626          -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp
627          -funit-at-a-time -funroll-all-loops -funroll-loops
628          -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops
629          -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb
630          -fwhole-program -fwhopr -fwpa -fuse-linker-plugin
631          --param NAME=VALUE
632          -O  -O0  -O1  -O2  -O3  -Os
633
634_Preprocessor Options_
635     *Note Options Controlling the Preprocessor: Preprocessor Options.
636          -AQUESTION=ANSWER
637          -A-QUESTION[=ANSWER]
638          -C  -dD  -dI  -dM  -dN
639          -DMACRO[=DEFN]  -E  -H
640          -idirafter DIR
641          -include FILE  -imacros FILE
642          -iprefix FILE  -iwithprefix DIR
643          -iwithprefixbefore DIR  -isystem DIR
644          -imultilib DIR -isysroot DIR
645          -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc
646          -P  -fworking-directory  -remap
647          -trigraphs  -undef  -UMACRO  -Wp,OPTION
648          -Xpreprocessor OPTION
649
650_Assembler Option_
651     *Note Passing Options to the Assembler: Assembler Options.
652          -Wa,OPTION  -Xassembler OPTION
653
654_Linker Options_
655     *Note Options for Linking: Link Options.
656          OBJECT-FILE-NAME  -lLIBRARY
657          -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic
658          -s  -static  -static-libgcc  -static-libstdc++ -shared
659          -shared-libgcc  -symbolic
660          -T SCRIPT  -Wl,OPTION  -Xlinker OPTION
661          -u SYMBOL
662
663_Directory Options_
664     *Note Options for Directory Search: Directory Options.
665          -BPREFIX  -IDIR  -iquoteDIR  -LDIR
666          -specs=FILE  -I- --sysroot=DIR
667
668_Target Options_
669     *Note Target Options::.
670          -V VERSION  -b MACHINE
671
672_Machine Dependent Options_
673     *Note Hardware Models and Configurations: Submodel Options.
674
675     _ARC Options_
676          -EB  -EL
677          -mmangle-cpu  -mcpu=CPU  -mtext=TEXT-SECTION
678          -mdata=DATA-SECTION  -mrodata=READONLY-DATA-SECTION
679
680     _ARM Options_
681          -mapcs-frame  -mno-apcs-frame
682          -mabi=NAME
683          -mapcs-stack-check  -mno-apcs-stack-check
684          -mapcs-float  -mno-apcs-float
685          -mapcs-reentrant  -mno-apcs-reentrant
686          -msched-prolog  -mno-sched-prolog
687          -mlittle-endian  -mbig-endian  -mwords-little-endian
688          -mfloat-abi=NAME  -msoft-float  -mhard-float  -mfpe
689          -mfp16-format=NAME
690          -mthumb-interwork  -mno-thumb-interwork
691          -mcpu=NAME  -march=NAME  -mfpu=NAME
692          -mstructure-size-boundary=N
693          -mabort-on-noreturn
694          -mlong-calls  -mno-long-calls
695          -msingle-pic-base  -mno-single-pic-base
696          -mpic-register=REG
697          -mnop-fun-dllimport
698          -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns
699          -mpoke-function-name
700          -mthumb  -marm
701          -mtpcs-frame  -mtpcs-leaf-frame
702          -mcaller-super-interworking  -mcallee-super-interworking
703          -mtp=NAME
704          -mword-relocations
705          -mfix-cortex-m3-ldrd
706
707     _AVR Options_
708          -mmcu=MCU  -mno-interrupts
709          -mcall-prologues  -mtiny-stack  -mint8
710
711     _Blackfin Options_
712          -mcpu=CPU[-SIREVISION]
713          -msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
714          -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly
715          -mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library
716          -mno-id-shared-library  -mshared-library-id=N
717          -mleaf-id-shared-library  -mno-leaf-id-shared-library
718          -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls
719          -mfast-fp -minline-plt -mmulticore  -mcorea  -mcoreb  -msdram
720          -micplb
721
722     _CRIS Options_
723          -mcpu=CPU  -march=CPU  -mtune=CPU
724          -mmax-stack-frame=N  -melinux-stacksize=N
725          -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
726          -mstack-align  -mdata-align  -mconst-align
727          -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
728          -melf  -maout  -melinux  -mlinux  -sim  -sim2
729          -mmul-bug-workaround  -mno-mul-bug-workaround
730
731     _CRX Options_
732          -mmac -mpush-args
733
734     _Darwin Options_
735          -all_load  -allowable_client  -arch  -arch_errors_fatal
736          -arch_only  -bind_at_load  -bundle  -bundle_loader
737          -client_name  -compatibility_version  -current_version
738          -dead_strip
739          -dependency-file  -dylib_file  -dylinker_install_name
740          -dynamic  -dynamiclib  -exported_symbols_list
741          -filelist  -flat_namespace  -force_cpusubtype_ALL
742          -force_flat_namespace  -headerpad_max_install_names
743          -iframework
744          -image_base  -init  -install_name  -keep_private_externs
745          -multi_module  -multiply_defined  -multiply_defined_unused
746          -noall_load   -no_dead_strip_inits_and_terms
747          -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit
748          -pagezero_size  -prebind  -prebind_all_twolevel_modules
749          -private_bundle  -read_only_relocs  -sectalign
750          -sectobjectsymbols  -whyload  -seg1addr
751          -sectcreate  -sectobjectsymbols  -sectorder
752          -segaddr -segs_read_only_addr -segs_read_write_addr
753          -seg_addr_table  -seg_addr_table_filename  -seglinkedit
754          -segprot  -segs_read_only_addr  -segs_read_write_addr
755          -single_module  -static  -sub_library  -sub_umbrella
756          -twolevel_namespace  -umbrella  -undefined
757          -unexported_symbols_list  -weak_reference_mismatches
758          -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION
759          -mkernel -mone-byte-bool
760
761     _DEC Alpha Options_
762          -mno-fp-regs  -msoft-float  -malpha-as  -mgas
763          -mieee  -mieee-with-inexact  -mieee-conformant
764          -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
765          -mtrap-precision=MODE  -mbuild-constants
766          -mcpu=CPU-TYPE  -mtune=CPU-TYPE
767          -mbwx  -mmax  -mfix  -mcix
768          -mfloat-vax  -mfloat-ieee
769          -mexplicit-relocs  -msmall-data  -mlarge-data
770          -msmall-text  -mlarge-text
771          -mmemory-latency=TIME
772
773     _DEC Alpha/VMS Options_
774          -mvms-return-codes -mdebug-main=PREFIX -mmalloc64
775
776     _FR30 Options_
777          -msmall-model -mno-lsim
778
779     _FRV Options_
780          -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
781          -mhard-float  -msoft-float
782          -malloc-cc  -mfixed-cc  -mdword  -mno-dword
783          -mdouble  -mno-double
784          -mmedia  -mno-media  -mmuladd  -mno-muladd
785          -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic
786          -mlinked-fp  -mlong-calls  -malign-labels
787          -mlibrary-pic  -macc-4  -macc-8
788          -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
789          -moptimize-membar -mno-optimize-membar
790          -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
791          -mvliw-branch  -mno-vliw-branch
792          -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
793          -mno-nested-cond-exec  -mtomcat-stats
794          -mTLS -mtls
795          -mcpu=CPU
796
797     _GNU/Linux Options_
798          -muclibc
799
800     _H8/300 Options_
801          -mrelax  -mh  -ms  -mn  -mint32  -malign-300
802
803     _HPPA Options_
804          -march=ARCHITECTURE-TYPE
805          -mbig-switch  -mdisable-fpregs  -mdisable-indexing
806          -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
807          -mfixed-range=REGISTER-RANGE
808          -mjump-in-delay -mlinker-opt -mlong-calls
809          -mlong-load-store  -mno-big-switch  -mno-disable-fpregs
810          -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
811          -mno-jump-in-delay  -mno-long-load-store
812          -mno-portable-runtime  -mno-soft-float
813          -mno-space-regs  -msoft-float  -mpa-risc-1-0
814          -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
815          -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
816          -munix=UNIX-STD  -nolibdld  -static  -threads
817
818     _i386 and x86-64 Options_
819          -mtune=CPU-TYPE  -march=CPU-TYPE
820          -mfpmath=UNIT
821          -masm=DIALECT  -mno-fancy-math-387
822          -mno-fp-ret-in-387  -msoft-float
823          -mno-wide-multiply  -mrtd  -malign-double
824          -mpreferred-stack-boundary=NUM
825          -mincoming-stack-boundary=NUM
826          -mcld -mcx16 -msahf -mmovbe -mcrc32 -mrecip
827          -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx
828          -maes -mpclmul -mfused-madd
829          -msse4a -m3dnow -mpopcnt -mabm -mfma4 -mxop -mlwp
830          -mthreads  -mno-align-stringops  -minline-all-stringops
831          -minline-stringops-dynamically -mstringop-strategy=ALG
832          -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
833          -m96bit-long-double  -mregparm=NUM  -msseregparm
834          -mveclibabi=TYPE -mpc32 -mpc64 -mpc80 -mstackrealign
835          -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs
836          -mcmodel=CODE-MODEL -mabi=NAME
837          -m32  -m64 -mlarge-data-threshold=NUM
838          -msse2avx
839
840     _i386 and x86-64 Windows Options_
841          -mconsole -mcygwin -mno-cygwin -mdll
842          -mnop-fun-dllimport -mthread -municode -mwin32 -mwindows
843          -fno-set-stack-executable
844
845     _IA-64 Options_
846          -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
847          -mvolatile-asm-stop  -mregister-names  -msdata -mno-sdata
848          -mconstant-gp  -mauto-pic  -mfused-madd
849          -minline-float-divide-min-latency
850          -minline-float-divide-max-throughput
851          -mno-inline-float-divide
852          -minline-int-divide-min-latency
853          -minline-int-divide-max-throughput
854          -mno-inline-int-divide
855          -minline-sqrt-min-latency -minline-sqrt-max-throughput
856          -mno-inline-sqrt
857          -mdwarf2-asm -mearly-stop-bits
858          -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE
859          -mtune=CPU-TYPE -milp32 -mlp64
860          -msched-br-data-spec -msched-ar-data-spec -msched-control-spec
861          -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec
862          -msched-spec-ldc -msched-spec-control-ldc
863          -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns
864          -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path
865          -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost
866          -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS
867
868     _IA-64/VMS Options_
869          -mvms-return-codes -mdebug-main=PREFIX -mmalloc64
870
871     _LM32 Options_
872          -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled
873          -msign-extend-enabled -muser-enabled
874
875     _M32R/D Options_
876          -m32r2 -m32rx -m32r
877          -mdebug
878          -malign-loops -mno-align-loops
879          -missue-rate=NUMBER
880          -mbranch-cost=NUMBER
881          -mmodel=CODE-SIZE-MODEL-TYPE
882          -msdata=SDATA-TYPE
883          -mno-flush-func -mflush-func=NAME
884          -mno-flush-trap -mflush-trap=NUMBER
885          -G NUM
886
887     _M32C Options_
888          -mcpu=CPU -msim -memregs=NUMBER
889
890     _M680x0 Options_
891          -march=ARCH  -mcpu=CPU  -mtune=TUNE
892          -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
893          -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
894          -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020
895          -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort
896          -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
897          -malign-int  -mstrict-align  -msep-data  -mno-sep-data
898          -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
899          -mxgot -mno-xgot
900
901     _M68hc1x Options_
902          -m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12
903          -mauto-incdec  -minmax  -mlong-calls  -mshort
904          -msoft-reg-count=COUNT
905
906     _MCore Options_
907          -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
908          -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
909          -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
910          -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
911          -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
912
913     _MeP Options_
914          -mabsdiff -mall-opts -maverage -mbased=N -mbitops
915          -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2
916          -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax
917          -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf
918          -mtiny=N
919
920     _MIPS Options_
921          -EL  -EB  -march=ARCH  -mtune=ARCH
922          -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2
923          -mips64  -mips64r2
924          -mips16  -mno-mips16  -mflip-mips16
925          -minterlink-mips16  -mno-interlink-mips16
926          -mabi=ABI  -mabicalls  -mno-abicalls
927          -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot
928          -mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float
929          -msingle-float  -mdouble-float  -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
930          -mfpu=FPU-TYPE
931          -msmartmips  -mno-smartmips
932          -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx
933          -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc
934          -mlong64  -mlong32  -msym32  -mno-sym32
935          -GNUM  -mlocal-sdata  -mno-local-sdata
936          -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
937          -membedded-data  -mno-embedded-data
938          -muninit-const-in-rodata  -mno-uninit-const-in-rodata
939          -mcode-readable=SETTING
940          -msplit-addresses  -mno-split-addresses
941          -mexplicit-relocs  -mno-explicit-relocs
942          -mcheck-zero-division  -mno-check-zero-division
943          -mdivide-traps  -mdivide-breaks
944          -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
945          -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp
946          -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
947          -mfix-r10000 -mno-fix-r10000  -mfix-vr4120  -mno-fix-vr4120
948          -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1
949          -mflush-func=FUNC  -mno-flush-func
950          -mbranch-cost=NUM  -mbranch-likely  -mno-branch-likely
951          -mfp-exceptions -mno-fp-exceptions
952          -mvr4130-align -mno-vr4130-align -msynci -mno-synci
953          -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address
954
955     _MMIX Options_
956          -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
957          -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
958          -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
959          -mno-base-addresses  -msingle-exit  -mno-single-exit
960
961     _MN10300 Options_
962          -mmult-bug  -mno-mult-bug
963          -mam33  -mno-am33
964          -mam33-2  -mno-am33-2
965          -mreturn-pointer-on-d0
966          -mno-crt0  -mrelax
967
968     _PDP-11 Options_
969          -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
970          -mbcopy  -mbcopy-builtin  -mint32  -mno-int16
971          -mint16  -mno-int32  -mfloat32  -mno-float64
972          -mfloat64  -mno-float32  -mabshi  -mno-abshi
973          -mbranch-expensive  -mbranch-cheap
974          -msplit  -mno-split  -munix-asm  -mdec-asm
975
976     _picoChip Options_
977          -mae=AE_TYPE -mvliw-lookahead=N
978          -msymbol-as-address -mno-inefficient-warnings
979
980     _PowerPC Options_ See RS/6000 and PowerPC Options.
981
982     _RS/6000 and PowerPC Options_
983          -mcpu=CPU-TYPE
984          -mtune=CPU-TYPE
985          -mpower  -mno-power  -mpower2  -mno-power2
986          -mpowerpc  -mpowerpc64  -mno-powerpc
987          -maltivec  -mno-altivec
988          -mpowerpc-gpopt  -mno-powerpc-gpopt
989          -mpowerpc-gfxopt  -mno-powerpc-gfxopt
990          -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb -mpopcntd -mno-popcntd
991          -mfprnd  -mno-fprnd
992          -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp
993          -mnew-mnemonics  -mold-mnemonics
994          -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
995          -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
996          -malign-power  -malign-natural
997          -msoft-float  -mhard-float  -mmultiple  -mno-multiple
998          -msingle-float -mdouble-float -msimple-fpu
999          -mstring  -mno-string  -mupdate  -mno-update
1000          -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
1001          -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
1002          -mstrict-align  -mno-strict-align  -mrelocatable
1003          -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
1004          -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
1005          -mdynamic-no-pic  -maltivec -mswdiv
1006          -mprioritize-restricted-insns=PRIORITY
1007          -msched-costly-dep=DEPENDENCE_TYPE
1008          -minsert-sched-nops=SCHEME
1009          -mcall-sysv  -mcall-netbsd
1010          -maix-struct-return  -msvr4-struct-return
1011          -mabi=ABI-TYPE -msecure-plt -mbss-plt
1012          -misel -mno-isel
1013          -misel=yes  -misel=no
1014          -mspe -mno-spe
1015          -mspe=yes  -mspe=no
1016          -mpaired
1017          -mgen-cell-microcode -mwarn-cell-microcode
1018          -mvrsave -mno-vrsave
1019          -mmulhw -mno-mulhw
1020          -mdlmzb -mno-dlmzb
1021          -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double
1022          -mprototype  -mno-prototype
1023          -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
1024          -msdata=OPT  -mvxworks  -G NUM  -pthread
1025
1026     _RX Options_
1027          -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu
1028          -mcpu= -patch=
1029          -mbig-endian-data -mlittle-endian-data
1030          -msmall-data
1031          -msim  -mno-sim
1032          -mas100-syntax -mno-as100-syntax
1033          -mrelax
1034          -mmax-constant-size=
1035          -mint-register=
1036          -msave-acc-in-interrupts
1037
1038     _S/390 and zSeries Options_
1039          -mtune=CPU-TYPE  -march=CPU-TYPE
1040          -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp
1041          -mlong-double-64 -mlong-double-128
1042          -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack
1043          -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle
1044          -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
1045          -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd
1046          -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard
1047
1048     _Score Options_
1049          -meb -mel
1050          -mnhwloop
1051          -muls
1052          -mmac
1053          -mscore5 -mscore5u -mscore7 -mscore7d
1054
1055     _SH Options_
1056          -m1  -m2  -m2e
1057          -m2a-nofpu -m2a-single-only -m2a-single -m2a
1058          -m3  -m3e
1059          -m4-nofpu  -m4-single-only  -m4-single  -m4
1060          -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al
1061          -m5-64media  -m5-64media-nofpu
1062          -m5-32media  -m5-32media-nofpu
1063          -m5-compact  -m5-compact-nofpu
1064          -mb  -ml  -mdalign  -mrelax
1065          -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave
1066          -mieee  -mbitops  -misize  -minline-ic_invalidate -mpadstruct  -mspace
1067          -mprefergot  -musermode -multcost=NUMBER -mdiv=STRATEGY
1068          -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE
1069          -madjust-unroll -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed
1070          -minvalid-symbols
1071
1072     _SPARC Options_
1073          -mcpu=CPU-TYPE
1074          -mtune=CPU-TYPE
1075          -mcmodel=CODE-MODEL
1076          -m32  -m64  -mapp-regs  -mno-app-regs
1077          -mfaster-structs  -mno-faster-structs
1078          -mfpu  -mno-fpu  -mhard-float  -msoft-float
1079          -mhard-quad-float  -msoft-quad-float
1080          -mimpure-text  -mno-impure-text  -mlittle-endian
1081          -mstack-bias  -mno-stack-bias
1082          -munaligned-doubles  -mno-unaligned-doubles
1083          -mv8plus  -mno-v8plus  -mvis  -mno-vis
1084          -threads -pthreads -pthread
1085
1086     _SPU Options_
1087          -mwarn-reloc -merror-reloc
1088          -msafe-dma -munsafe-dma
1089          -mbranch-hints
1090          -msmall-mem -mlarge-mem -mstdmain
1091          -mfixed-range=REGISTER-RANGE
1092          -mea32 -mea64
1093          -maddress-space-conversion -mno-address-space-conversion
1094          -mcache-size=CACHE-SIZE
1095          -matomic-updates -mno-atomic-updates
1096
1097     _System V Options_
1098          -Qy  -Qn  -YP,PATHS  -Ym,DIR
1099
1100     _V850 Options_
1101          -mlong-calls  -mno-long-calls  -mep  -mno-ep
1102          -mprolog-function  -mno-prolog-function  -mspace
1103          -mtda=N  -msda=N  -mzda=N
1104          -mapp-regs  -mno-app-regs
1105          -mdisable-callt  -mno-disable-callt
1106          -mv850e1
1107          -mv850e
1108          -mv850  -mbig-switch
1109
1110     _VAX Options_
1111          -mg  -mgnu  -munix
1112
1113     _VxWorks Options_
1114          -mrtp  -non-static  -Bstatic  -Bdynamic
1115          -Xbind-lazy  -Xbind-now
1116
1117     _x86-64 Options_ See i386 and x86-64 Options.
1118
1119     _Xstormy16 Options_
1120          -msim
1121
1122     _Xtensa Options_
1123          -mconst16 -mno-const16
1124          -mfused-madd  -mno-fused-madd
1125          -mserialize-volatile  -mno-serialize-volatile
1126          -mtext-section-literals  -mno-text-section-literals
1127          -mtarget-align  -mno-target-align
1128          -mlongcalls  -mno-longcalls
1129
1130     _zSeries Options_ See S/390 and zSeries Options.
1131
1132_Code Generation Options_
1133     *Note Options for Code Generation Conventions: Code Gen Options.
1134          -fcall-saved-REG  -fcall-used-REG
1135          -ffixed-REG  -fexceptions
1136          -fnon-call-exceptions  -funwind-tables
1137          -fasynchronous-unwind-tables
1138          -finhibit-size-directive  -finstrument-functions
1139          -finstrument-functions-exclude-function-list=SYM,SYM,...
1140          -finstrument-functions-exclude-file-list=FILE,FILE,...
1141          -fno-common  -fno-ident
1142          -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
1143          -fno-jump-tables
1144          -frecord-gcc-switches
1145          -freg-struct-return  -fshort-enums
1146          -fshort-double  -fshort-wchar
1147          -fverbose-asm  -fpack-struct[=N]  -fstack-check
1148          -fstack-limit-register=REG  -fstack-limit-symbol=SYM
1149          -fno-stack-limit  -fargument-alias  -fargument-noalias
1150          -fargument-noalias-global  -fargument-noalias-anything
1151          -fleading-underscore  -ftls-model=MODEL
1152          -ftrapv  -fwrapv  -fbounds-check
1153          -fvisibility
1154
1155
1156* Menu:
1157
1158* Overall Options::     Controlling the kind of output:
1159                        an executable, object files, assembler files,
1160                        or preprocessed source.
1161* C Dialect Options::   Controlling the variant of C language compiled.
1162* C++ Dialect Options:: Variations on C++.
1163* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
1164                        and Objective-C++.
1165* Language Independent Options:: Controlling how diagnostics should be
1166                        formatted.
1167* Warning Options::     How picky should the compiler be?
1168* Debugging Options::   Symbol tables, measurements, and debugging dumps.
1169* Optimize Options::    How much optimization?
1170* Preprocessor Options:: Controlling header files and macro definitions.
1171                         Also, getting dependency information for Make.
1172* Assembler Options::   Passing options to the assembler.
1173* Link Options::        Specifying libraries and so on.
1174* Directory Options::   Where to find header files and libraries.
1175                        Where to find the compiler executable files.
1176* Spec Files::          How to pass switches to sub-processes.
1177* Target Options::      Running a cross-compiler, or an old version of GCC.
1178
1179
1180File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
1181
11823.2 Options Controlling the Kind of Output
1183==========================================
1184
1185Compilation can involve up to four stages: preprocessing, compilation
1186proper, assembly and linking, always in that order.  GCC is capable of
1187preprocessing and compiling several files either into several assembler
1188input files, or into one assembler input file; then each assembler
1189input file produces an object file, and linking combines all the object
1190files (those newly compiled, and those specified as input) into an
1191executable file.
1192
1193 For any given input file, the file name suffix determines what kind of
1194compilation is done:
1195
1196`FILE.c'
1197     C source code which must be preprocessed.
1198
1199`FILE.i'
1200     C source code which should not be preprocessed.
1201
1202`FILE.ii'
1203     C++ source code which should not be preprocessed.
1204
1205`FILE.m'
1206     Objective-C source code.  Note that you must link with the
1207     `libobjc' library to make an Objective-C program work.
1208
1209`FILE.mi'
1210     Objective-C source code which should not be preprocessed.
1211
1212`FILE.mm'
1213`FILE.M'
1214     Objective-C++ source code.  Note that you must link with the
1215     `libobjc' library to make an Objective-C++ program work.  Note
1216     that `.M' refers to a literal capital M.
1217
1218`FILE.mii'
1219     Objective-C++ source code which should not be preprocessed.
1220
1221`FILE.h'
1222     C, C++, Objective-C or Objective-C++ header file to be turned into
1223     a precompiled header.
1224
1225`FILE.cc'
1226`FILE.cp'
1227`FILE.cxx'
1228`FILE.cpp'
1229`FILE.CPP'
1230`FILE.c++'
1231`FILE.C'
1232     C++ source code which must be preprocessed.  Note that in `.cxx',
1233     the last two letters must both be literally `x'.  Likewise, `.C'
1234     refers to a literal capital C.
1235
1236`FILE.mm'
1237`FILE.M'
1238     Objective-C++ source code which must be preprocessed.
1239
1240`FILE.mii'
1241     Objective-C++ source code which should not be preprocessed.
1242
1243`FILE.hh'
1244`FILE.H'
1245`FILE.hp'
1246`FILE.hxx'
1247`FILE.hpp'
1248`FILE.HPP'
1249`FILE.h++'
1250`FILE.tcc'
1251     C++ header file to be turned into a precompiled header.
1252
1253`FILE.f'
1254`FILE.for'
1255`FILE.ftn'
1256     Fixed form Fortran source code which should not be preprocessed.
1257
1258`FILE.F'
1259`FILE.FOR'
1260`FILE.fpp'
1261`FILE.FPP'
1262`FILE.FTN'
1263     Fixed form Fortran source code which must be preprocessed (with
1264     the traditional preprocessor).
1265
1266`FILE.f90'
1267`FILE.f95'
1268`FILE.f03'
1269`FILE.f08'
1270     Free form Fortran source code which should not be preprocessed.
1271
1272`FILE.F90'
1273`FILE.F95'
1274`FILE.F03'
1275`FILE.F08'
1276     Free form Fortran source code which must be preprocessed (with the
1277     traditional preprocessor).
1278
1279`FILE.ads'
1280     Ada source code file which contains a library unit declaration (a
1281     declaration of a package, subprogram, or generic, or a generic
1282     instantiation), or a library unit renaming declaration (a package,
1283     generic, or subprogram renaming declaration).  Such files are also
1284     called "specs".
1285
1286`FILE.adb'
1287     Ada source code file containing a library unit body (a subprogram
1288     or package body).  Such files are also called "bodies".
1289
1290`FILE.s'
1291     Assembler code.
1292
1293`FILE.S'
1294`FILE.sx'
1295     Assembler code which must be preprocessed.
1296
1297`OTHER'
1298     An object file to be fed straight into linking.  Any file name
1299     with no recognized suffix is treated this way.
1300
1301 You can specify the input language explicitly with the `-x' option:
1302
1303`-x LANGUAGE'
1304     Specify explicitly the LANGUAGE for the following input files
1305     (rather than letting the compiler choose a default based on the
1306     file name suffix).  This option applies to all following input
1307     files until the next `-x' option.  Possible values for LANGUAGE
1308     are:
1309          c  c-header  c-cpp-output
1310          c++  c++-header  c++-cpp-output
1311          objective-c  objective-c-header  objective-c-cpp-output
1312          objective-c++ objective-c++-header objective-c++-cpp-output
1313          assembler  assembler-with-cpp
1314          ada
1315          f77  f77-cpp-input f95  f95-cpp-input
1316          java
1317
1318`-x none'
1319     Turn off any specification of a language, so that subsequent files
1320     are handled according to their file name suffixes (as they are if
1321     `-x' has not been used at all).
1322
1323`-pass-exit-codes'
1324     Normally the `gcc' program will exit with the code of 1 if any
1325     phase of the compiler returns a non-success return code.  If you
1326     specify `-pass-exit-codes', the `gcc' program will instead return
1327     with numerically highest error produced by any phase that returned
1328     an error indication.  The C, C++, and Fortran frontends return 4,
1329     if an internal compiler error is encountered.
1330
1331 If you only want some of the stages of compilation, you can use `-x'
1332(or filename suffixes) to tell `gcc' where to start, and one of the
1333options `-c', `-S', or `-E' to say where `gcc' is to stop.  Note that
1334some combinations (for example, `-x cpp-output -E') instruct `gcc' to
1335do nothing at all.
1336
1337`-c'
1338     Compile or assemble the source files, but do not link.  The linking
1339     stage simply is not done.  The ultimate output is in the form of an
1340     object file for each source file.
1341
1342     By default, the object file name for a source file is made by
1343     replacing the suffix `.c', `.i', `.s', etc., with `.o'.
1344
1345     Unrecognized input files, not requiring compilation or assembly,
1346     are ignored.
1347
1348`-S'
1349     Stop after the stage of compilation proper; do not assemble.  The
1350     output is in the form of an assembler code file for each
1351     non-assembler input file specified.
1352
1353     By default, the assembler file name for a source file is made by
1354     replacing the suffix `.c', `.i', etc., with `.s'.
1355
1356     Input files that don't require compilation are ignored.
1357
1358`-E'
1359     Stop after the preprocessing stage; do not run the compiler
1360     proper.  The output is in the form of preprocessed source code,
1361     which is sent to the standard output.
1362
1363     Input files which don't require preprocessing are ignored.
1364
1365`-o FILE'
1366     Place output in file FILE.  This applies regardless to whatever
1367     sort of output is being produced, whether it be an executable file,
1368     an object file, an assembler file or preprocessed C code.
1369
1370     If `-o' is not specified, the default is to put an executable file
1371     in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its
1372     assembler file in `SOURCE.s', a precompiled header file in
1373     `SOURCE.SUFFIX.gch', and all preprocessed C source on standard
1374     output.
1375
1376`-v'
1377     Print (on standard error output) the commands executed to run the
1378     stages of compilation.  Also print the version number of the
1379     compiler driver program and of the preprocessor and the compiler
1380     proper.
1381
1382`-###'
1383     Like `-v' except the commands are not executed and all command
1384     arguments are quoted.  This is useful for shell scripts to capture
1385     the driver-generated command lines.
1386
1387`-pipe'
1388     Use pipes rather than temporary files for communication between the
1389     various stages of compilation.  This fails to work on some systems
1390     where the assembler is unable to read from a pipe; but the GNU
1391     assembler has no trouble.
1392
1393`-combine'
1394     If you are compiling multiple source files, this option tells the
1395     driver to pass all the source files to the compiler at once (for
1396     those languages for which the compiler can handle this).  This
1397     will allow intermodule analysis (IMA) to be performed by the
1398     compiler.  Currently the only language for which this is supported
1399     is C.  If you pass source files for multiple languages to the
1400     driver, using this option, the driver will invoke the compiler(s)
1401     that support IMA once each, passing each compiler all the source
1402     files appropriate for it.  For those languages that do not support
1403     IMA this option will be ignored, and the compiler will be invoked
1404     once for each source file in that language.  If you use this
1405     option in conjunction with `-save-temps', the compiler will
1406     generate multiple pre-processed files (one for each source file),
1407     but only one (combined) `.o' or `.s' file.
1408
1409`--help'
1410     Print (on the standard output) a description of the command line
1411     options understood by `gcc'.  If the `-v' option is also specified
1412     then `--help' will also be passed on to the various processes
1413     invoked by `gcc', so that they can display the command line options
1414     they accept.  If the `-Wextra' option has also been specified
1415     (prior to the `--help' option), then command line options which
1416     have no documentation associated with them will also be displayed.
1417
1418`--target-help'
1419     Print (on the standard output) a description of target-specific
1420     command line options for each tool.  For some targets extra
1421     target-specific information may also be printed.
1422
1423`--help={CLASS|[^]QUALIFIER}[,...]'
1424     Print (on the standard output) a description of the command line
1425     options understood by the compiler that fit into all specified
1426     classes and qualifiers.  These are the supported classes:
1427
1428    `optimizers'
1429          This will display all of the optimization options supported
1430          by the compiler.
1431
1432    `warnings'
1433          This will display all of the options controlling warning
1434          messages produced by the compiler.
1435
1436    `target'
1437          This will display target-specific options.  Unlike the
1438          `--target-help' option however, target-specific options of the
1439          linker and assembler will not be displayed.  This is because
1440          those tools do not currently support the extended `--help='
1441          syntax.
1442
1443    `params'
1444          This will display the values recognized by the `--param'
1445          option.
1446
1447    LANGUAGE
1448          This will display the options supported for LANGUAGE, where
1449          LANGUAGE is the name of one of the languages supported in this
1450          version of GCC.
1451
1452    `common'
1453          This will display the options that are common to all
1454          languages.
1455
1456     These are the supported qualifiers:
1457
1458    `undocumented'
1459          Display only those options which are undocumented.
1460
1461    `joined'
1462          Display options which take an argument that appears after an
1463          equal sign in the same continuous piece of text, such as:
1464          `--help=target'.
1465
1466    `separate'
1467          Display options which take an argument that appears as a
1468          separate word following the original option, such as: `-o
1469          output-file'.
1470
1471     Thus for example to display all the undocumented target-specific
1472     switches supported by the compiler the following can be used:
1473
1474          --help=target,undocumented
1475
1476     The sense of a qualifier can be inverted by prefixing it with the
1477     `^' character, so for example to display all binary warning
1478     options (i.e., ones that are either on or off and that do not take
1479     an argument), which have a description the following can be used:
1480
1481          --help=warnings,^joined,^undocumented
1482
1483     The argument to `--help=' should not consist solely of inverted
1484     qualifiers.
1485
1486     Combining several classes is possible, although this usually
1487     restricts the output by so much that there is nothing to display.
1488     One case where it does work however is when one of the classes is
1489     TARGET.  So for example to display all the target-specific
1490     optimization options the following can be used:
1491
1492          --help=target,optimizers
1493
1494     The `--help=' option can be repeated on the command line.  Each
1495     successive use will display its requested class of options,
1496     skipping those that have already been displayed.
1497
1498     If the `-Q' option appears on the command line before the
1499     `--help=' option, then the descriptive text displayed by `--help='
1500     is changed.  Instead of describing the displayed options, an
1501     indication is given as to whether the option is enabled, disabled
1502     or set to a specific value (assuming that the compiler knows this
1503     at the point where the `--help=' option is used).
1504
1505     Here is a truncated example from the ARM port of `gcc':
1506
1507            % gcc -Q -mabi=2 --help=target -c
1508            The following options are target specific:
1509            -mabi=                                2
1510            -mabort-on-noreturn                   [disabled]
1511            -mapcs                                [disabled]
1512
1513     The output is sensitive to the effects of previous command line
1514     options, so for example it is possible to find out which
1515     optimizations are enabled at `-O2' by using:
1516
1517          -Q -O2 --help=optimizers
1518
1519     Alternatively you can discover which binary optimizations are
1520     enabled by `-O3' by using:
1521
1522          gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1523          gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1524          diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1525
1526`-no-canonical-prefixes'
1527     Do not expand any symbolic links, resolve references to `/../' or
1528     `/./', or make the path absolute when generating a relative prefix.
1529
1530`--version'
1531     Display the version number and copyrights of the invoked GCC.
1532
1533`-wrapper'
1534     Invoke all subcommands under a wrapper program. It takes a single
1535     comma separated list as an argument, which will be used to invoke
1536     the wrapper:
1537
1538          gcc -c t.c -wrapper gdb,--args
1539
1540     This will invoke all subprograms of gcc under "gdb -args", thus
1541     cc1 invocation will be "gdb -args cc1 ...".
1542
1543`-fplugin=NAME.so'
1544     Load the plugin code in file NAME.so, assumed to be a shared
1545     object to be dlopen'd by the compiler.  The base name of the
1546     shared object file is used to identify the plugin for the purposes
1547     of argument parsing (See `-fplugin-arg-NAME-KEY=VALUE' below).
1548     Each plugin should define the callback functions specified in the
1549     Plugins API.
1550
1551`-fplugin-arg-NAME-KEY=VALUE'
1552     Define an argument called KEY with a value of VALUE for the plugin
1553     called NAME.
1554
1555`@FILE'
1556     Read command-line options from FILE.  The options read are
1557     inserted in place of the original @FILE option.  If FILE does not
1558     exist, or cannot be read, then the option will be treated
1559     literally, and not removed.
1560
1561     Options in FILE are separated by whitespace.  A whitespace
1562     character may be included in an option by surrounding the entire
1563     option in either single or double quotes.  Any character
1564     (including a backslash) may be included by prefixing the character
1565     to be included with a backslash.  The FILE may itself contain
1566     additional @FILE options; any such options will be processed
1567     recursively.
1568
1569
1570File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
1571
15723.3 Compiling C++ Programs
1573==========================
1574
1575C++ source files conventionally use one of the suffixes `.C', `.cc',
1576`.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use
1577`.hh', `.hpp', `.H', or (for shared template code) `.tcc'; and
1578preprocessed C++ files use the suffix `.ii'.  GCC recognizes files with
1579these names and compiles them as C++ programs even if you call the
1580compiler the same way as for compiling C programs (usually with the
1581name `gcc').
1582
1583 However, the use of `gcc' does not add the C++ library.  `g++' is a
1584program that calls GCC and treats `.c', `.h' and `.i' files as C++
1585source files instead of C source files unless `-x' is used, and
1586automatically specifies linking against the C++ library.  This program
1587is also useful when precompiling a C header file with a `.h' extension
1588for use in C++ compilations.  On many systems, `g++' is also installed
1589with the name `c++'.
1590
1591 When you compile C++ programs, you may specify many of the same
1592command-line options that you use for compiling programs in any
1593language; or command-line options meaningful for C and related
1594languages; or options that are meaningful only for C++ programs.  *Note
1595Options Controlling C Dialect: C Dialect Options, for explanations of
1596options for languages related to C.  *Note Options Controlling C++
1597Dialect: C++ Dialect Options, for explanations of options that are
1598meaningful only for C++ programs.
1599
1600
1601File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
1602
16033.4 Options Controlling C Dialect
1604=================================
1605
1606The following options control the dialect of C (or languages derived
1607from C, such as C++, Objective-C and Objective-C++) that the compiler
1608accepts:
1609
1610`-ansi'
1611     In C mode, this is equivalent to `-std=c90'. In C++ mode, it is
1612     equivalent to `-std=c++98'.
1613
1614     This turns off certain features of GCC that are incompatible with
1615     ISO C90 (when compiling C code), or of standard C++ (when
1616     compiling C++ code), such as the `asm' and `typeof' keywords, and
1617     predefined macros such as `unix' and `vax' that identify the type
1618     of system you are using.  It also enables the undesirable and
1619     rarely used ISO trigraph feature.  For the C compiler, it disables
1620     recognition of C++ style `//' comments as well as the `inline'
1621     keyword.
1622
1623     The alternate keywords `__asm__', `__extension__', `__inline__'
1624     and `__typeof__' continue to work despite `-ansi'.  You would not
1625     want to use them in an ISO C program, of course, but it is useful
1626     to put them in header files that might be included in compilations
1627     done with `-ansi'.  Alternate predefined macros such as `__unix__'
1628     and `__vax__' are also available, with or without `-ansi'.
1629
1630     The `-ansi' option does not cause non-ISO programs to be rejected
1631     gratuitously.  For that, `-pedantic' is required in addition to
1632     `-ansi'.  *Note Warning Options::.
1633
1634     The macro `__STRICT_ANSI__' is predefined when the `-ansi' option
1635     is used.  Some header files may notice this macro and refrain from
1636     declaring certain functions or defining certain macros that the
1637     ISO standard doesn't call for; this is to avoid interfering with
1638     any programs that might use these names for other things.
1639
1640     Functions that would normally be built in but do not have semantics
1641     defined by ISO C (such as `alloca' and `ffs') are not built-in
1642     functions when `-ansi' is used.  *Note Other built-in functions
1643     provided by GCC: Other Builtins, for details of the functions
1644     affected.
1645
1646`-std='
1647     Determine the language standard. *Note Language Standards
1648     Supported by GCC: Standards, for details of these standard
1649     versions.  This option is currently only supported when compiling
1650     C or C++.
1651
1652     The compiler can accept several base standards, such as `c90' or
1653     `c++98', and GNU dialects of those standards, such as `gnu90' or
1654     `gnu++98'.  By specifying a base standard, the compiler will
1655     accept all programs following that standard and those using GNU
1656     extensions that do not contradict it.  For example, `-std=c90'
1657     turns off certain features of GCC that are incompatible with ISO
1658     C90, such as the `asm' and `typeof' keywords, but not other GNU
1659     extensions that do not have a meaning in ISO C90, such as omitting
1660     the middle term of a `?:' expression. On the other hand, by
1661     specifying a GNU dialect of a standard, all features the compiler
1662     support are enabled, even when those features change the meaning
1663     of the base standard and some strict-conforming programs may be
1664     rejected.  The particular standard is used by `-pedantic' to
1665     identify which features are GNU extensions given that version of
1666     the standard. For example `-std=gnu90 -pedantic' would warn about
1667     C++ style `//' comments, while `-std=gnu99 -pedantic' would not.
1668
1669     A value for this option must be provided; possible values are
1670
1671    `c90'
1672    `c89'
1673    `iso9899:1990'
1674          Support all ISO C90 programs (certain GNU extensions that
1675          conflict with ISO C90 are disabled). Same as `-ansi' for C
1676          code.
1677
1678    `iso9899:199409'
1679          ISO C90 as modified in amendment 1.
1680
1681    `c99'
1682    `c9x'
1683    `iso9899:1999'
1684    `iso9899:199x'
1685          ISO C99.  Note that this standard is not yet fully supported;
1686          see `http://gcc.gnu.org/gcc-4.5/c99status.html' for more
1687          information.  The names `c9x' and `iso9899:199x' are
1688          deprecated.
1689
1690    `gnu90'
1691    `gnu89'
1692          GNU dialect of ISO C90 (including some C99 features). This is
1693          the default for C code.
1694
1695    `gnu99'
1696    `gnu9x'
1697          GNU dialect of ISO C99.  When ISO C99 is fully implemented in
1698          GCC, this will become the default.  The name `gnu9x' is
1699          deprecated.
1700
1701    `c++98'
1702          The 1998 ISO C++ standard plus amendments. Same as `-ansi' for
1703          C++ code.
1704
1705    `gnu++98'
1706          GNU dialect of `-std=c++98'.  This is the default for C++
1707          code.
1708
1709    `c++0x'
1710          The working draft of the upcoming ISO C++0x standard. This
1711          option enables experimental features that are likely to be
1712          included in C++0x. The working draft is constantly changing,
1713          and any feature that is enabled by this flag may be removed
1714          from future versions of GCC if it is not part of the C++0x
1715          standard.
1716
1717    `gnu++0x'
1718          GNU dialect of `-std=c++0x'. This option enables experimental
1719          features that may be removed in future versions of GCC.
1720
1721`-fgnu89-inline'
1722     The option `-fgnu89-inline' tells GCC to use the traditional GNU
1723     semantics for `inline' functions when in C99 mode.  *Note An
1724     Inline Function is As Fast As a Macro: Inline.  This option is
1725     accepted and ignored by GCC versions 4.1.3 up to but not including
1726     4.3.  In GCC versions 4.3 and later it changes the behavior of GCC
1727     in C99 mode.  Using this option is roughly equivalent to adding the
1728     `gnu_inline' function attribute to all inline functions (*note
1729     Function Attributes::).
1730
1731     The option `-fno-gnu89-inline' explicitly tells GCC to use the C99
1732     semantics for `inline' when in C99 or gnu99 mode (i.e., it
1733     specifies the default behavior).  This option was first supported
1734     in GCC 4.3.  This option is not supported in `-std=c90' or
1735     `-std=gnu90' mode.
1736
1737     The preprocessor macros `__GNUC_GNU_INLINE__' and
1738     `__GNUC_STDC_INLINE__' may be used to check which semantics are in
1739     effect for `inline' functions.  *Note Common Predefined Macros:
1740     (cpp)Common Predefined Macros.
1741
1742`-aux-info FILENAME'
1743     Output to the given filename prototyped declarations for all
1744     functions declared and/or defined in a translation unit, including
1745     those in header files.  This option is silently ignored in any
1746     language other than C.
1747
1748     Besides declarations, the file indicates, in comments, the origin
1749     of each declaration (source file and line), whether the
1750     declaration was implicit, prototyped or unprototyped (`I', `N' for
1751     new or `O' for old, respectively, in the first character after the
1752     line number and the colon), and whether it came from a declaration
1753     or a definition (`C' or `F', respectively, in the following
1754     character).  In the case of function definitions, a K&R-style list
1755     of arguments followed by their declarations is also provided,
1756     inside comments, after the declaration.
1757
1758`-fno-asm'
1759     Do not recognize `asm', `inline' or `typeof' as a keyword, so that
1760     code can use these words as identifiers.  You can use the keywords
1761     `__asm__', `__inline__' and `__typeof__' instead.  `-ansi' implies
1762     `-fno-asm'.
1763
1764     In C++, this switch only affects the `typeof' keyword, since `asm'
1765     and `inline' are standard keywords.  You may want to use the
1766     `-fno-gnu-keywords' flag instead, which has the same effect.  In
1767     C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects
1768     the `asm' and `typeof' keywords, since `inline' is a standard
1769     keyword in ISO C99.
1770
1771`-fno-builtin'
1772`-fno-builtin-FUNCTION'
1773     Don't recognize built-in functions that do not begin with
1774     `__builtin_' as prefix.  *Note Other built-in functions provided
1775     by GCC: Other Builtins, for details of the functions affected,
1776     including those which are not built-in functions when `-ansi' or
1777     `-std' options for strict ISO C conformance are used because they
1778     do not have an ISO standard meaning.
1779
1780     GCC normally generates special code to handle certain built-in
1781     functions more efficiently; for instance, calls to `alloca' may
1782     become single instructions that adjust the stack directly, and
1783     calls to `memcpy' may become inline copy loops.  The resulting
1784     code is often both smaller and faster, but since the function
1785     calls no longer appear as such, you cannot set a breakpoint on
1786     those calls, nor can you change the behavior of the functions by
1787     linking with a different library.  In addition, when a function is
1788     recognized as a built-in function, GCC may use information about
1789     that function to warn about problems with calls to that function,
1790     or to generate more efficient code, even if the resulting code
1791     still contains calls to that function.  For example, warnings are
1792     given with `-Wformat' for bad calls to `printf', when `printf' is
1793     built in, and `strlen' is known not to modify global memory.
1794
1795     With the `-fno-builtin-FUNCTION' option only the built-in function
1796     FUNCTION is disabled.  FUNCTION must not begin with `__builtin_'.
1797     If a function is named that is not built-in in this version of
1798     GCC, this option is ignored.  There is no corresponding
1799     `-fbuiltin-FUNCTION' option; if you wish to enable built-in
1800     functions selectively when using `-fno-builtin' or
1801     `-ffreestanding', you may define macros such as:
1802
1803          #define abs(n)          __builtin_abs ((n))
1804          #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1805
1806`-fhosted'
1807     Assert that compilation takes place in a hosted environment.  This
1808     implies `-fbuiltin'.  A hosted environment is one in which the
1809     entire standard library is available, and in which `main' has a
1810     return type of `int'.  Examples are nearly everything except a
1811     kernel.  This is equivalent to `-fno-freestanding'.
1812
1813`-ffreestanding'
1814     Assert that compilation takes place in a freestanding environment.
1815     This implies `-fno-builtin'.  A freestanding environment is one in
1816     which the standard library may not exist, and program startup may
1817     not necessarily be at `main'.  The most obvious example is an OS
1818     kernel.  This is equivalent to `-fno-hosted'.
1819
1820     *Note Language Standards Supported by GCC: Standards, for details
1821     of freestanding and hosted environments.
1822
1823`-fopenmp'
1824     Enable handling of OpenMP directives `#pragma omp' in C/C++ and
1825     `!$omp' in Fortran.  When `-fopenmp' is specified, the compiler
1826     generates parallel code according to the OpenMP Application
1827     Program Interface v3.0 `http://www.openmp.org/'.  This option
1828     implies `-pthread', and thus is only supported on targets that
1829     have support for `-pthread'.
1830
1831`-fms-extensions'
1832     Accept some non-standard constructs used in Microsoft header files.
1833
1834     Some cases of unnamed fields in structures and unions are only
1835     accepted with this option.  *Note Unnamed struct/union fields
1836     within structs/unions: Unnamed Fields, for details.
1837
1838`-trigraphs'
1839     Support ISO C trigraphs.  The `-ansi' option (and `-std' options
1840     for strict ISO C conformance) implies `-trigraphs'.
1841
1842`-no-integrated-cpp'
1843     Performs a compilation in two passes: preprocessing and compiling.
1844     This option allows a user supplied "cc1", "cc1plus", or "cc1obj"
1845     via the `-B' option.  The user supplied compilation step can then
1846     add in an additional preprocessing step after normal preprocessing
1847     but before compiling.  The default is to use the integrated cpp
1848     (internal cpp)
1849
1850     The semantics of this option will change if "cc1", "cc1plus", and
1851     "cc1obj" are merged.
1852
1853`-traditional'
1854`-traditional-cpp'
1855     Formerly, these options caused GCC to attempt to emulate a
1856     pre-standard C compiler.  They are now only supported with the
1857     `-E' switch.  The preprocessor continues to support a pre-standard
1858     mode.  See the GNU CPP manual for details.
1859
1860`-fcond-mismatch'
1861     Allow conditional expressions with mismatched types in the second
1862     and third arguments.  The value of such an expression is void.
1863     This option is not supported for C++.
1864
1865`-flax-vector-conversions'
1866     Allow implicit conversions between vectors with differing numbers
1867     of elements and/or incompatible element types.  This option should
1868     not be used for new code.
1869
1870`-funsigned-char'
1871     Let the type `char' be unsigned, like `unsigned char'.
1872
1873     Each kind of machine has a default for what `char' should be.  It
1874     is either like `unsigned char' by default or like `signed char' by
1875     default.
1876
1877     Ideally, a portable program should always use `signed char' or
1878     `unsigned char' when it depends on the signedness of an object.
1879     But many programs have been written to use plain `char' and expect
1880     it to be signed, or expect it to be unsigned, depending on the
1881     machines they were written for.  This option, and its inverse, let
1882     you make such a program work with the opposite default.
1883
1884     The type `char' is always a distinct type from each of `signed
1885     char' or `unsigned char', even though its behavior is always just
1886     like one of those two.
1887
1888`-fsigned-char'
1889     Let the type `char' be signed, like `signed char'.
1890
1891     Note that this is equivalent to `-fno-unsigned-char', which is the
1892     negative form of `-funsigned-char'.  Likewise, the option
1893     `-fno-signed-char' is equivalent to `-funsigned-char'.
1894
1895`-fsigned-bitfields'
1896`-funsigned-bitfields'
1897`-fno-signed-bitfields'
1898`-fno-unsigned-bitfields'
1899     These options control whether a bit-field is signed or unsigned,
1900     when the declaration does not use either `signed' or `unsigned'.
1901     By default, such a bit-field is signed, because this is
1902     consistent: the basic integer types such as `int' are signed types.
1903
1904
1905File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C and Objective-C++ Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
1906
19073.5 Options Controlling C++ Dialect
1908===================================
1909
1910This section describes the command-line options that are only meaningful
1911for C++ programs; but you can also use most of the GNU compiler options
1912regardless of what language your program is in.  For example, you might
1913compile a file `firstClass.C' like this:
1914
1915     g++ -g -frepo -O -c firstClass.C
1916
1917In this example, only `-frepo' is an option meant only for C++
1918programs; you can use the other options with any language supported by
1919GCC.
1920
1921 Here is a list of options that are _only_ for compiling C++ programs:
1922
1923`-fabi-version=N'
1924     Use version N of the C++ ABI.  Version 2 is the version of the C++
1925     ABI that first appeared in G++ 3.4.  Version 1 is the version of
1926     the C++ ABI that first appeared in G++ 3.2.  Version 0 will always
1927     be the version that conforms most closely to the C++ ABI
1928     specification.  Therefore, the ABI obtained using version 0 will
1929     change as ABI bugs are fixed.
1930
1931     The default is version 2.
1932
1933     Version 3 corrects an error in mangling a constant address as a
1934     template argument.
1935
1936     Version 4 implements a standard mangling for vector types.
1937
1938     See also `-Wabi'.
1939
1940`-fno-access-control'
1941     Turn off all access checking.  This switch is mainly useful for
1942     working around bugs in the access control code.
1943
1944`-fcheck-new'
1945     Check that the pointer returned by `operator new' is non-null
1946     before attempting to modify the storage allocated.  This check is
1947     normally unnecessary because the C++ standard specifies that
1948     `operator new' will only return `0' if it is declared `throw()',
1949     in which case the compiler will always check the return value even
1950     without this option.  In all other cases, when `operator new' has
1951     a non-empty exception specification, memory exhaustion is
1952     signalled by throwing `std::bad_alloc'.  See also `new (nothrow)'.
1953
1954`-fconserve-space'
1955     Put uninitialized or runtime-initialized global variables into the
1956     common segment, as C does.  This saves space in the executable at
1957     the cost of not diagnosing duplicate definitions.  If you compile
1958     with this flag and your program mysteriously crashes after
1959     `main()' has completed, you may have an object that is being
1960     destroyed twice because two definitions were merged.
1961
1962     This option is no longer useful on most targets, now that support
1963     has been added for putting variables into BSS without making them
1964     common.
1965
1966`-fno-deduce-init-list'
1967     Disable deduction of a template type parameter as
1968     std::initializer_list from a brace-enclosed initializer list, i.e.
1969
1970          template <class T> auto forward(T t) -> decltype (realfn (t))
1971          {
1972            return realfn (t);
1973          }
1974
1975          void f()
1976          {
1977            forward({1,2}); // call forward<std::initializer_list<int>>
1978          }
1979
1980     This option is present because this deduction is an extension to
1981     the current specification in the C++0x working draft, and there was
1982     some concern about potential overload resolution problems.
1983
1984`-ffriend-injection'
1985     Inject friend functions into the enclosing namespace, so that they
1986     are visible outside the scope of the class in which they are
1987     declared.  Friend functions were documented to work this way in
1988     the old Annotated C++ Reference Manual, and versions of G++ before
1989     4.1 always worked that way.  However, in ISO C++ a friend function
1990     which is not declared in an enclosing scope can only be found
1991     using argument dependent lookup.  This option causes friends to be
1992     injected as they were in earlier releases.
1993
1994     This option is for compatibility, and may be removed in a future
1995     release of G++.
1996
1997`-fno-elide-constructors'
1998     The C++ standard allows an implementation to omit creating a
1999     temporary which is only used to initialize another object of the
2000     same type.  Specifying this option disables that optimization, and
2001     forces G++ to call the copy constructor in all cases.
2002
2003`-fno-enforce-eh-specs'
2004     Don't generate code to check for violation of exception
2005     specifications at runtime.  This option violates the C++ standard,
2006     but may be useful for reducing code size in production builds,
2007     much like defining `NDEBUG'.  This does not give user code
2008     permission to throw exceptions in violation of the exception
2009     specifications; the compiler will still optimize based on the
2010     specifications, so throwing an unexpected exception will result in
2011     undefined behavior.
2012
2013`-ffor-scope'
2014`-fno-for-scope'
2015     If `-ffor-scope' is specified, the scope of variables declared in
2016     a for-init-statement is limited to the `for' loop itself, as
2017     specified by the C++ standard.  If `-fno-for-scope' is specified,
2018     the scope of variables declared in a for-init-statement extends to
2019     the end of the enclosing scope, as was the case in old versions of
2020     G++, and other (traditional) implementations of C++.
2021
2022     The default if neither flag is given to follow the standard, but
2023     to allow and give a warning for old-style code that would
2024     otherwise be invalid, or have different behavior.
2025
2026`-fno-gnu-keywords'
2027     Do not recognize `typeof' as a keyword, so that code can use this
2028     word as an identifier.  You can use the keyword `__typeof__'
2029     instead.  `-ansi' implies `-fno-gnu-keywords'.
2030
2031`-fno-implicit-templates'
2032     Never emit code for non-inline templates which are instantiated
2033     implicitly (i.e. by use); only emit code for explicit
2034     instantiations.  *Note Template Instantiation::, for more
2035     information.
2036
2037`-fno-implicit-inline-templates'
2038     Don't emit code for implicit instantiations of inline templates,
2039     either.  The default is to handle inlines differently so that
2040     compiles with and without optimization will need the same set of
2041     explicit instantiations.
2042
2043`-fno-implement-inlines'
2044     To save space, do not emit out-of-line copies of inline functions
2045     controlled by `#pragma implementation'.  This will cause linker
2046     errors if these functions are not inlined everywhere they are
2047     called.
2048
2049`-fms-extensions'
2050     Disable pedantic warnings about constructs used in MFC, such as
2051     implicit int and getting a pointer to member function via
2052     non-standard syntax.
2053
2054`-fno-nonansi-builtins'
2055     Disable built-in declarations of functions that are not mandated by
2056     ANSI/ISO C.  These include `ffs', `alloca', `_exit', `index',
2057     `bzero', `conjf', and other related functions.
2058
2059`-fno-operator-names'
2060     Do not treat the operator name keywords `and', `bitand', `bitor',
2061     `compl', `not', `or' and `xor' as synonyms as keywords.
2062
2063`-fno-optional-diags'
2064     Disable diagnostics that the standard says a compiler does not
2065     need to issue.  Currently, the only such diagnostic issued by G++
2066     is the one for a name having multiple meanings within a class.
2067
2068`-fpermissive'
2069     Downgrade some diagnostics about nonconformant code from errors to
2070     warnings.  Thus, using `-fpermissive' will allow some
2071     nonconforming code to compile.
2072
2073`-fno-pretty-templates'
2074     When an error message refers to a specialization of a function
2075     template, the compiler will normally print the signature of the
2076     template followed by the template arguments and any typedefs or
2077     typenames in the signature (e.g. `void f(T) [with T = int]' rather
2078     than `void f(int)') so that it's clear which template is involved.
2079     When an error message refers to a specialization of a class
2080     template, the compiler will omit any template arguments which match
2081     the default template arguments for that template.  If either of
2082     these behaviors make it harder to understand the error message
2083     rather than easier, using `-fno-pretty-templates' will disable
2084     them.
2085
2086`-frepo'
2087     Enable automatic template instantiation at link time.  This option
2088     also implies `-fno-implicit-templates'.  *Note Template
2089     Instantiation::, for more information.
2090
2091`-fno-rtti'
2092     Disable generation of information about every class with virtual
2093     functions for use by the C++ runtime type identification features
2094     (`dynamic_cast' and `typeid').  If you don't use those parts of
2095     the language, you can save some space by using this flag.  Note
2096     that exception handling uses the same information, but it will
2097     generate it as needed. The `dynamic_cast' operator can still be
2098     used for casts that do not require runtime type information, i.e.
2099     casts to `void *' or to unambiguous base classes.
2100
2101`-fstats'
2102     Emit statistics about front-end processing at the end of the
2103     compilation.  This information is generally only useful to the G++
2104     development team.
2105
2106`-ftemplate-depth=N'
2107     Set the maximum instantiation depth for template classes to N.  A
2108     limit on the template instantiation depth is needed to detect
2109     endless recursions during template class instantiation.  ANSI/ISO
2110     C++ conforming programs must not rely on a maximum depth greater
2111     than 17 (changed to 1024 in C++0x).
2112
2113`-fno-threadsafe-statics'
2114     Do not emit the extra code to use the routines specified in the C++
2115     ABI for thread-safe initialization of local statics.  You can use
2116     this option to reduce code size slightly in code that doesn't need
2117     to be thread-safe.
2118
2119`-fuse-cxa-atexit'
2120     Register destructors for objects with static storage duration with
2121     the `__cxa_atexit' function rather than the `atexit' function.
2122     This option is required for fully standards-compliant handling of
2123     static destructors, but will only work if your C library supports
2124     `__cxa_atexit'.
2125
2126`-fno-use-cxa-get-exception-ptr'
2127     Don't use the `__cxa_get_exception_ptr' runtime routine.  This
2128     will cause `std::uncaught_exception' to be incorrect, but is
2129     necessary if the runtime routine is not available.
2130
2131`-fvisibility-inlines-hidden'
2132     This switch declares that the user does not attempt to compare
2133     pointers to inline methods where the addresses of the two functions
2134     were taken in different shared objects.
2135
2136     The effect of this is that GCC may, effectively, mark inline
2137     methods with `__attribute__ ((visibility ("hidden")))' so that
2138     they do not appear in the export table of a DSO and do not require
2139     a PLT indirection when used within the DSO.  Enabling this option
2140     can have a dramatic effect on load and link times of a DSO as it
2141     massively reduces the size of the dynamic export table when the
2142     library makes heavy use of templates.
2143
2144     The behavior of this switch is not quite the same as marking the
2145     methods as hidden directly, because it does not affect static
2146     variables local to the function or cause the compiler to deduce
2147     that the function is defined in only one shared object.
2148
2149     You may mark a method as having a visibility explicitly to negate
2150     the effect of the switch for that method.  For example, if you do
2151     want to compare pointers to a particular inline method, you might
2152     mark it as having default visibility.  Marking the enclosing class
2153     with explicit visibility will have no effect.
2154
2155     Explicitly instantiated inline methods are unaffected by this
2156     option as their linkage might otherwise cross a shared library
2157     boundary.  *Note Template Instantiation::.
2158
2159`-fvisibility-ms-compat'
2160     This flag attempts to use visibility settings to make GCC's C++
2161     linkage model compatible with that of Microsoft Visual Studio.
2162
2163     The flag makes these changes to GCC's linkage model:
2164
2165       1. It sets the default visibility to `hidden', like
2166          `-fvisibility=hidden'.
2167
2168       2. Types, but not their members, are not hidden by default.
2169
2170       3. The One Definition Rule is relaxed for types without explicit
2171          visibility specifications which are defined in more than one
2172          different shared object: those declarations are permitted if
2173          they would have been permitted when this option was not used.
2174
2175     In new code it is better to use `-fvisibility=hidden' and export
2176     those classes which are intended to be externally visible.
2177     Unfortunately it is possible for code to rely, perhaps
2178     accidentally, on the Visual Studio behavior.
2179
2180     Among the consequences of these changes are that static data
2181     members of the same type with the same name but defined in
2182     different shared objects will be different, so changing one will
2183     not change the other; and that pointers to function members
2184     defined in different shared objects may not compare equal.  When
2185     this flag is given, it is a violation of the ODR to define types
2186     with the same name differently.
2187
2188`-fno-weak'
2189     Do not use weak symbol support, even if it is provided by the
2190     linker.  By default, G++ will use weak symbols if they are
2191     available.  This option exists only for testing, and should not be
2192     used by end-users; it will result in inferior code and has no
2193     benefits.  This option may be removed in a future release of G++.
2194
2195`-nostdinc++'
2196     Do not search for header files in the standard directories
2197     specific to C++, but do still search the other standard
2198     directories.  (This option is used when building the C++ library.)
2199
2200 In addition, these optimization, warning, and code generation options
2201have meanings only for C++ programs:
2202
2203`-fno-default-inline'
2204     Do not assume `inline' for functions defined inside a class scope.
2205     *Note Options That Control Optimization: Optimize Options.  Note
2206     that these functions will have linkage like inline functions; they
2207     just won't be inlined by default.
2208
2209`-Wabi (C, Objective-C, C++ and Objective-C++ only)'
2210     Warn when G++ generates code that is probably not compatible with
2211     the vendor-neutral C++ ABI.  Although an effort has been made to
2212     warn about all such cases, there are probably some cases that are
2213     not warned about, even though G++ is generating incompatible code.
2214     There may also be cases where warnings are emitted even though the
2215     code that is generated will be compatible.
2216
2217     You should rewrite your code to avoid these warnings if you are
2218     concerned about the fact that code generated by G++ may not be
2219     binary compatible with code generated by other compilers.
2220
2221     The known incompatibilities in `-fabi-version=2' (the default)
2222     include:
2223
2224        * A template with a non-type template parameter of reference
2225          type is mangled incorrectly:
2226               extern int N;
2227               template <int &> struct S {};
2228               void n (S<N>) {2}
2229
2230          This is fixed in `-fabi-version=3'.
2231
2232        * SIMD vector types declared using `__attribute
2233          ((vector_size))' are mangled in a non-standard way that does
2234          not allow for overloading of functions taking vectors of
2235          different sizes.
2236
2237          The mangling is changed in `-fabi-version=4'.
2238
2239     The known incompatibilities in `-fabi-version=1' include:
2240
2241        * Incorrect handling of tail-padding for bit-fields.  G++ may
2242          attempt to pack data into the same byte as a base class.  For
2243          example:
2244
2245               struct A { virtual void f(); int f1 : 1; };
2246               struct B : public A { int f2 : 1; };
2247
2248          In this case, G++ will place `B::f2' into the same byte
2249          as`A::f1'; other compilers will not.  You can avoid this
2250          problem by explicitly padding `A' so that its size is a
2251          multiple of the byte size on your platform; that will cause
2252          G++ and other compilers to layout `B' identically.
2253
2254        * Incorrect handling of tail-padding for virtual bases.  G++
2255          does not use tail padding when laying out virtual bases.  For
2256          example:
2257
2258               struct A { virtual void f(); char c1; };
2259               struct B { B(); char c2; };
2260               struct C : public A, public virtual B {};
2261
2262          In this case, G++ will not place `B' into the tail-padding for
2263          `A'; other compilers will.  You can avoid this problem by
2264          explicitly padding `A' so that its size is a multiple of its
2265          alignment (ignoring virtual base classes); that will cause
2266          G++ and other compilers to layout `C' identically.
2267
2268        * Incorrect handling of bit-fields with declared widths greater
2269          than that of their underlying types, when the bit-fields
2270          appear in a union.  For example:
2271
2272               union U { int i : 4096; };
2273
2274          Assuming that an `int' does not have 4096 bits, G++ will make
2275          the union too small by the number of bits in an `int'.
2276
2277        * Empty classes can be placed at incorrect offsets.  For
2278          example:
2279
2280               struct A {};
2281
2282               struct B {
2283                 A a;
2284                 virtual void f ();
2285               };
2286
2287               struct C : public B, public A {};
2288
2289          G++ will place the `A' base class of `C' at a nonzero offset;
2290          it should be placed at offset zero.  G++ mistakenly believes
2291          that the `A' data member of `B' is already at offset zero.
2292
2293        * Names of template functions whose types involve `typename' or
2294          template template parameters can be mangled incorrectly.
2295
2296               template <typename Q>
2297               void f(typename Q::X) {}
2298
2299               template <template <typename> class Q>
2300               void f(typename Q<int>::X) {}
2301
2302          Instantiations of these templates may be mangled incorrectly.
2303
2304
2305     It also warns psABI related changes.  The known psABI changes at
2306     this point include:
2307
2308        * For SYSV/x86-64, when passing union with long double, it is
2309          changed to pass in memory as specified in psABI.  For example:
2310
2311               union U {
2312                 long double ld;
2313                 int i;
2314               };
2315
2316          `union U' will always be passed in memory.
2317
2318
2319`-Wctor-dtor-privacy (C++ and Objective-C++ only)'
2320     Warn when a class seems unusable because all the constructors or
2321     destructors in that class are private, and it has neither friends
2322     nor public static member functions.
2323
2324`-Wnon-virtual-dtor (C++ and Objective-C++ only)'
2325     Warn when a class has virtual functions and accessible non-virtual
2326     destructor, in which case it would be possible but unsafe to delete
2327     an instance of a derived class through a pointer to the base class.
2328     This warning is also enabled if -Weffc++ is specified.
2329
2330`-Wreorder (C++ and Objective-C++ only)'
2331     Warn when the order of member initializers given in the code does
2332     not match the order in which they must be executed.  For instance:
2333
2334          struct A {
2335            int i;
2336            int j;
2337            A(): j (0), i (1) { }
2338          };
2339
2340     The compiler will rearrange the member initializers for `i' and
2341     `j' to match the declaration order of the members, emitting a
2342     warning to that effect.  This warning is enabled by `-Wall'.
2343
2344 The following `-W...' options are not affected by `-Wall'.
2345
2346`-Weffc++ (C++ and Objective-C++ only)'
2347     Warn about violations of the following style guidelines from Scott
2348     Meyers' `Effective C++' book:
2349
2350        * Item 11:  Define a copy constructor and an assignment
2351          operator for classes with dynamically allocated memory.
2352
2353        * Item 12:  Prefer initialization to assignment in constructors.
2354
2355        * Item 14:  Make destructors virtual in base classes.
2356
2357        * Item 15:  Have `operator=' return a reference to `*this'.
2358
2359        * Item 23:  Don't try to return a reference when you must
2360          return an object.
2361
2362
2363     Also warn about violations of the following style guidelines from
2364     Scott Meyers' `More Effective C++' book:
2365
2366        * Item 6:  Distinguish between prefix and postfix forms of
2367          increment and decrement operators.
2368
2369        * Item 7:  Never overload `&&', `||', or `,'.
2370
2371
2372     When selecting this option, be aware that the standard library
2373     headers do not obey all of these guidelines; use `grep -v' to
2374     filter out those warnings.
2375
2376`-Wstrict-null-sentinel (C++ and Objective-C++ only)'
2377     Warn also about the use of an uncasted `NULL' as sentinel.  When
2378     compiling only with GCC this is a valid sentinel, as `NULL' is
2379     defined to `__null'.  Although it is a null pointer constant not a
2380     null pointer, it is guaranteed to be of the same size as a
2381     pointer.  But this use is not portable across different compilers.
2382
2383`-Wno-non-template-friend (C++ and Objective-C++ only)'
2384     Disable warnings when non-templatized friend functions are declared
2385     within a template.  Since the advent of explicit template
2386     specification support in G++, if the name of the friend is an
2387     unqualified-id (i.e., `friend foo(int)'), the C++ language
2388     specification demands that the friend declare or define an
2389     ordinary, nontemplate function.  (Section 14.5.3).  Before G++
2390     implemented explicit specification, unqualified-ids could be
2391     interpreted as a particular specialization of a templatized
2392     function.  Because this non-conforming behavior is no longer the
2393     default behavior for G++, `-Wnon-template-friend' allows the
2394     compiler to check existing code for potential trouble spots and is
2395     on by default.  This new compiler behavior can be turned off with
2396     `-Wno-non-template-friend' which keeps the conformant compiler code
2397     but disables the helpful warning.
2398
2399`-Wold-style-cast (C++ and Objective-C++ only)'
2400     Warn if an old-style (C-style) cast to a non-void type is used
2401     within a C++ program.  The new-style casts (`dynamic_cast',
2402     `static_cast', `reinterpret_cast', and `const_cast') are less
2403     vulnerable to unintended effects and much easier to search for.
2404
2405`-Woverloaded-virtual (C++ and Objective-C++ only)'
2406     Warn when a function declaration hides virtual functions from a
2407     base class.  For example, in:
2408
2409          struct A {
2410            virtual void f();
2411          };
2412
2413          struct B: public A {
2414            void f(int);
2415          };
2416
2417     the `A' class version of `f' is hidden in `B', and code like:
2418
2419          B* b;
2420          b->f();
2421
2422     will fail to compile.
2423
2424`-Wno-pmf-conversions (C++ and Objective-C++ only)'
2425     Disable the diagnostic for converting a bound pointer to member
2426     function to a plain pointer.
2427
2428`-Wsign-promo (C++ and Objective-C++ only)'
2429     Warn when overload resolution chooses a promotion from unsigned or
2430     enumerated type to a signed type, over a conversion to an unsigned
2431     type of the same size.  Previous versions of G++ would try to
2432     preserve unsignedness, but the standard mandates the current
2433     behavior.
2434
2435          struct A {
2436            operator int ();
2437            A& operator = (int);
2438          };
2439
2440          main ()
2441          {
2442            A a,b;
2443            a = b;
2444          }
2445
2446     In this example, G++ will synthesize a default `A& operator =
2447     (const A&);', while cfront will use the user-defined `operator ='.
2448
2449
2450File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Language Independent Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
2451
24523.6 Options Controlling Objective-C and Objective-C++ Dialects
2453==============================================================
2454
2455(NOTE: This manual does not describe the Objective-C and Objective-C++
2456languages themselves.  *Note Language Standards Supported by GCC:
2457Standards, for references.)
2458
2459 This section describes the command-line options that are only
2460meaningful for Objective-C and Objective-C++ programs, but you can also
2461use most of the language-independent GNU compiler options.  For
2462example, you might compile a file `some_class.m' like this:
2463
2464     gcc -g -fgnu-runtime -O -c some_class.m
2465
2466In this example, `-fgnu-runtime' is an option meant only for
2467Objective-C and Objective-C++ programs; you can use the other options
2468with any language supported by GCC.
2469
2470 Note that since Objective-C is an extension of the C language,
2471Objective-C compilations may also use options specific to the C
2472front-end (e.g., `-Wtraditional').  Similarly, Objective-C++
2473compilations may use C++-specific options (e.g., `-Wabi').
2474
2475 Here is a list of options that are _only_ for compiling Objective-C
2476and Objective-C++ programs:
2477
2478`-fconstant-string-class=CLASS-NAME'
2479     Use CLASS-NAME as the name of the class to instantiate for each
2480     literal string specified with the syntax `@"..."'.  The default
2481     class name is `NXConstantString' if the GNU runtime is being used,
2482     and `NSConstantString' if the NeXT runtime is being used (see
2483     below).  The `-fconstant-cfstrings' option, if also present, will
2484     override the `-fconstant-string-class' setting and cause `@"..."'
2485     literals to be laid out as constant CoreFoundation strings.
2486
2487`-fgnu-runtime'
2488     Generate object code compatible with the standard GNU Objective-C
2489     runtime.  This is the default for most types of systems.
2490
2491`-fnext-runtime'
2492     Generate output compatible with the NeXT runtime.  This is the
2493     default for NeXT-based systems, including Darwin and Mac OS X.
2494     The macro `__NEXT_RUNTIME__' is predefined if (and only if) this
2495     option is used.
2496
2497`-fno-nil-receivers'
2498     Assume that all Objective-C message dispatches (e.g., `[receiver
2499     message:arg]') in this translation unit ensure that the receiver
2500     is not `nil'.  This allows for more efficient entry points in the
2501     runtime to be used.  Currently, this option is only available in
2502     conjunction with the NeXT runtime on Mac OS X 10.3 and later.
2503
2504`-fobjc-call-cxx-cdtors'
2505     For each Objective-C class, check if any of its instance variables
2506     is a C++ object with a non-trivial default constructor.  If so,
2507     synthesize a special `- (id) .cxx_construct' instance method that
2508     will run non-trivial default constructors on any such instance
2509     variables, in order, and then return `self'.  Similarly, check if
2510     any instance variable is a C++ object with a non-trivial
2511     destructor, and if so, synthesize a special `- (void)
2512     .cxx_destruct' method that will run all such default destructors,
2513     in reverse order.
2514
2515     The `- (id) .cxx_construct' and/or `- (void) .cxx_destruct' methods
2516     thusly generated will only operate on instance variables declared
2517     in the current Objective-C class, and not those inherited from
2518     superclasses.  It is the responsibility of the Objective-C runtime
2519     to invoke all such methods in an object's inheritance hierarchy.
2520     The `- (id) .cxx_construct' methods will be invoked by the runtime
2521     immediately after a new object instance is allocated; the `-
2522     (void) .cxx_destruct' methods will be invoked immediately before
2523     the runtime deallocates an object instance.
2524
2525     As of this writing, only the NeXT runtime on Mac OS X 10.4 and
2526     later has support for invoking the `- (id) .cxx_construct' and `-
2527     (void) .cxx_destruct' methods.
2528
2529`-fobjc-direct-dispatch'
2530     Allow fast jumps to the message dispatcher.  On Darwin this is
2531     accomplished via the comm page.
2532
2533`-fobjc-exceptions'
2534     Enable syntactic support for structured exception handling in
2535     Objective-C, similar to what is offered by C++ and Java.  This
2536     option is unavailable in conjunction with the NeXT runtime on Mac
2537     OS X 10.2 and earlier.
2538
2539            @try {
2540              ...
2541                 @throw expr;
2542              ...
2543            }
2544            @catch (AnObjCClass *exc) {
2545              ...
2546                @throw expr;
2547              ...
2548                @throw;
2549              ...
2550            }
2551            @catch (AnotherClass *exc) {
2552              ...
2553            }
2554            @catch (id allOthers) {
2555              ...
2556            }
2557            @finally {
2558              ...
2559                @throw expr;
2560              ...
2561            }
2562
2563     The `@throw' statement may appear anywhere in an Objective-C or
2564     Objective-C++ program; when used inside of a `@catch' block, the
2565     `@throw' may appear without an argument (as shown above), in which
2566     case the object caught by the `@catch' will be rethrown.
2567
2568     Note that only (pointers to) Objective-C objects may be thrown and
2569     caught using this scheme.  When an object is thrown, it will be
2570     caught by the nearest `@catch' clause capable of handling objects
2571     of that type, analogously to how `catch' blocks work in C++ and
2572     Java.  A `@catch(id ...)' clause (as shown above) may also be
2573     provided to catch any and all Objective-C exceptions not caught by
2574     previous `@catch' clauses (if any).
2575
2576     The `@finally' clause, if present, will be executed upon exit from
2577     the immediately preceding `@try ... @catch' section.  This will
2578     happen regardless of whether any exceptions are thrown, caught or
2579     rethrown inside the `@try ... @catch' section, analogously to the
2580     behavior of the `finally' clause in Java.
2581
2582     There are several caveats to using the new exception mechanism:
2583
2584        * Although currently designed to be binary compatible with
2585          `NS_HANDLER'-style idioms provided by the `NSException'
2586          class, the new exceptions can only be used on Mac OS X 10.3
2587          (Panther) and later systems, due to additional functionality
2588          needed in the (NeXT) Objective-C runtime.
2589
2590        * As mentioned above, the new exceptions do not support handling
2591          types other than Objective-C objects.   Furthermore, when
2592          used from Objective-C++, the Objective-C exception model does
2593          not interoperate with C++ exceptions at this time.  This
2594          means you cannot `@throw' an exception from Objective-C and
2595          `catch' it in C++, or vice versa (i.e., `throw ... @catch').
2596
2597     The `-fobjc-exceptions' switch also enables the use of
2598     synchronization blocks for thread-safe execution:
2599
2600            @synchronized (ObjCClass *guard) {
2601              ...
2602            }
2603
2604     Upon entering the `@synchronized' block, a thread of execution
2605     shall first check whether a lock has been placed on the
2606     corresponding `guard' object by another thread.  If it has, the
2607     current thread shall wait until the other thread relinquishes its
2608     lock.  Once `guard' becomes available, the current thread will
2609     place its own lock on it, execute the code contained in the
2610     `@synchronized' block, and finally relinquish the lock (thereby
2611     making `guard' available to other threads).
2612
2613     Unlike Java, Objective-C does not allow for entire methods to be
2614     marked `@synchronized'.  Note that throwing exceptions out of
2615     `@synchronized' blocks is allowed, and will cause the guarding
2616     object to be unlocked properly.
2617
2618`-fobjc-gc'
2619     Enable garbage collection (GC) in Objective-C and Objective-C++
2620     programs.
2621
2622`-freplace-objc-classes'
2623     Emit a special marker instructing `ld(1)' not to statically link in
2624     the resulting object file, and allow `dyld(1)' to load it in at
2625     run time instead.  This is used in conjunction with the
2626     Fix-and-Continue debugging mode, where the object file in question
2627     may be recompiled and dynamically reloaded in the course of
2628     program execution, without the need to restart the program itself.
2629     Currently, Fix-and-Continue functionality is only available in
2630     conjunction with the NeXT runtime on Mac OS X 10.3 and later.
2631
2632`-fzero-link'
2633     When compiling for the NeXT runtime, the compiler ordinarily
2634     replaces calls to `objc_getClass("...")' (when the name of the
2635     class is known at compile time) with static class references that
2636     get initialized at load time, which improves run-time performance.
2637     Specifying the `-fzero-link' flag suppresses this behavior and
2638     causes calls to `objc_getClass("...")' to be retained.  This is
2639     useful in Zero-Link debugging mode, since it allows for individual
2640     class implementations to be modified during program execution.
2641
2642`-gen-decls'
2643     Dump interface declarations for all classes seen in the source
2644     file to a file named `SOURCENAME.decl'.
2645
2646`-Wassign-intercept (Objective-C and Objective-C++ only)'
2647     Warn whenever an Objective-C assignment is being intercepted by the
2648     garbage collector.
2649
2650`-Wno-protocol (Objective-C and Objective-C++ only)'
2651     If a class is declared to implement a protocol, a warning is
2652     issued for every method in the protocol that is not implemented by
2653     the class.  The default behavior is to issue a warning for every
2654     method not explicitly implemented in the class, even if a method
2655     implementation is inherited from the superclass.  If you use the
2656     `-Wno-protocol' option, then methods inherited from the superclass
2657     are considered to be implemented, and no warning is issued for
2658     them.
2659
2660`-Wselector (Objective-C and Objective-C++ only)'
2661     Warn if multiple methods of different types for the same selector
2662     are found during compilation.  The check is performed on the list
2663     of methods in the final stage of compilation.  Additionally, a
2664     check is performed for each selector appearing in a
2665     `@selector(...)'  expression, and a corresponding method for that
2666     selector has been found during compilation.  Because these checks
2667     scan the method table only at the end of compilation, these
2668     warnings are not produced if the final stage of compilation is not
2669     reached, for example because an error is found during compilation,
2670     or because the `-fsyntax-only' option is being used.
2671
2672`-Wstrict-selector-match (Objective-C and Objective-C++ only)'
2673     Warn if multiple methods with differing argument and/or return
2674     types are found for a given selector when attempting to send a
2675     message using this selector to a receiver of type `id' or `Class'.
2676     When this flag is off (which is the default behavior), the
2677     compiler will omit such warnings if any differences found are
2678     confined to types which share the same size and alignment.
2679
2680`-Wundeclared-selector (Objective-C and Objective-C++ only)'
2681     Warn if a `@selector(...)' expression referring to an undeclared
2682     selector is found.  A selector is considered undeclared if no
2683     method with that name has been declared before the
2684     `@selector(...)' expression, either explicitly in an `@interface'
2685     or `@protocol' declaration, or implicitly in an `@implementation'
2686     section.  This option always performs its checks as soon as a
2687     `@selector(...)' expression is found, while `-Wselector' only
2688     performs its checks in the final stage of compilation.  This also
2689     enforces the coding style convention that methods and selectors
2690     must be declared before being used.
2691
2692`-print-objc-runtime-info'
2693     Generate C header describing the largest structure that is passed
2694     by value, if any.
2695
2696
2697
2698File: gcc.info,  Node: Language Independent Options,  Next: Warning Options,  Prev: Objective-C and Objective-C++ Dialect Options,  Up: Invoking GCC
2699
27003.7 Options to Control Diagnostic Messages Formatting
2701=====================================================
2702
2703Traditionally, diagnostic messages have been formatted irrespective of
2704the output device's aspect (e.g. its width, ...).  The options described
2705below can be used to control the diagnostic messages formatting
2706algorithm, e.g. how many characters per line, how often source location
2707information should be reported.  Right now, only the C++ front end can
2708honor these options.  However it is expected, in the near future, that
2709the remaining front ends would be able to digest them correctly.
2710
2711`-fmessage-length=N'
2712     Try to format error messages so that they fit on lines of about N
2713     characters.  The default is 72 characters for `g++' and 0 for the
2714     rest of the front ends supported by GCC.  If N is zero, then no
2715     line-wrapping will be done; each error message will appear on a
2716     single line.
2717
2718`-fdiagnostics-show-location=once'
2719     Only meaningful in line-wrapping mode.  Instructs the diagnostic
2720     messages reporter to emit _once_ source location information; that
2721     is, in case the message is too long to fit on a single physical
2722     line and has to be wrapped, the source location won't be emitted
2723     (as prefix) again, over and over, in subsequent continuation
2724     lines.  This is the default behavior.
2725
2726`-fdiagnostics-show-location=every-line'
2727     Only meaningful in line-wrapping mode.  Instructs the diagnostic
2728     messages reporter to emit the same source location information (as
2729     prefix) for physical lines that result from the process of breaking
2730     a message which is too long to fit on a single line.
2731
2732`-fdiagnostics-show-option'
2733     This option instructs the diagnostic machinery to add text to each
2734     diagnostic emitted, which indicates which command line option
2735     directly controls that diagnostic, when such an option is known to
2736     the diagnostic machinery.
2737
2738`-Wcoverage-mismatch'
2739     Warn if feedback profiles do not match when using the
2740     `-fprofile-use' option.  If a source file was changed between
2741     `-fprofile-gen' and `-fprofile-use', the files with the profile
2742     feedback can fail to match the source file and GCC can not use the
2743     profile feedback information.  By default, GCC emits an error
2744     message in this case.  The option `-Wcoverage-mismatch' emits a
2745     warning instead of an error.  GCC does not use appropriate
2746     feedback profiles, so using this option can result in poorly
2747     optimized code.  This option is useful only in the case of very
2748     minor changes such as bug fixes to an existing code-base.
2749
2750
2751
2752File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Language Independent Options,  Up: Invoking GCC
2753
27543.8 Options to Request or Suppress Warnings
2755===========================================
2756
2757Warnings are diagnostic messages that report constructions which are
2758not inherently erroneous but which are risky or suggest there may have
2759been an error.
2760
2761 The following language-independent options do not enable specific
2762warnings but control the kinds of diagnostics produced by GCC.
2763
2764`-fsyntax-only'
2765     Check the code for syntax errors, but don't do anything beyond
2766     that.
2767
2768`-w'
2769     Inhibit all warning messages.
2770
2771`-Werror'
2772     Make all warnings into errors.
2773
2774`-Werror='
2775     Make the specified warning into an error.  The specifier for a
2776     warning is appended, for example `-Werror=switch' turns the
2777     warnings controlled by `-Wswitch' into errors.  This switch takes a
2778     negative form, to be used to negate `-Werror' for specific
2779     warnings, for example `-Wno-error=switch' makes `-Wswitch'
2780     warnings not be errors, even when `-Werror' is in effect.  You can
2781     use the `-fdiagnostics-show-option' option to have each
2782     controllable warning amended with the option which controls it, to
2783     determine what to use with this option.
2784
2785     Note that specifying `-Werror='FOO automatically implies `-W'FOO.
2786     However, `-Wno-error='FOO does not imply anything.
2787
2788`-Wfatal-errors'
2789     This option causes the compiler to abort compilation on the first
2790     error occurred rather than trying to keep going and printing
2791     further error messages.
2792
2793
2794 You can request many specific warnings with options beginning `-W',
2795for example `-Wimplicit' to request warnings on implicit declarations.
2796Each of these specific warning options also has a negative form
2797beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'.
2798This manual lists only one of the two forms, whichever is not the
2799default.  For further, language-specific options also refer to *note
2800C++ Dialect Options:: and *note Objective-C and Objective-C++ Dialect
2801Options::.
2802
2803`-pedantic'
2804     Issue all the warnings demanded by strict ISO C and ISO C++;
2805     reject all programs that use forbidden extensions, and some other
2806     programs that do not follow ISO C and ISO C++.  For ISO C, follows
2807     the version of the ISO C standard specified by any `-std' option
2808     used.
2809
2810     Valid ISO C and ISO C++ programs should compile properly with or
2811     without this option (though a rare few will require `-ansi' or a
2812     `-std' option specifying the required version of ISO C).  However,
2813     without this option, certain GNU extensions and traditional C and
2814     C++ features are supported as well.  With this option, they are
2815     rejected.
2816
2817     `-pedantic' does not cause warning messages for use of the
2818     alternate keywords whose names begin and end with `__'.  Pedantic
2819     warnings are also disabled in the expression that follows
2820     `__extension__'.  However, only system header files should use
2821     these escape routes; application programs should avoid them.
2822     *Note Alternate Keywords::.
2823
2824     Some users try to use `-pedantic' to check programs for strict ISO
2825     C conformance.  They soon find that it does not do quite what they
2826     want: it finds some non-ISO practices, but not all--only those for
2827     which ISO C _requires_ a diagnostic, and some others for which
2828     diagnostics have been added.
2829
2830     A feature to report any failure to conform to ISO C might be
2831     useful in some instances, but would require considerable
2832     additional work and would be quite different from `-pedantic'.  We
2833     don't have plans to support such a feature in the near future.
2834
2835     Where the standard specified with `-std' represents a GNU extended
2836     dialect of C, such as `gnu90' or `gnu99', there is a corresponding
2837     "base standard", the version of ISO C on which the GNU extended
2838     dialect is based.  Warnings from `-pedantic' are given where they
2839     are required by the base standard.  (It would not make sense for
2840     such warnings to be given only for features not in the specified
2841     GNU C dialect, since by definition the GNU dialects of C include
2842     all features the compiler supports with the given option, and
2843     there would be nothing to warn about.)
2844
2845`-pedantic-errors'
2846     Like `-pedantic', except that errors are produced rather than
2847     warnings.
2848
2849`-Wall'
2850     This enables all the warnings about constructions that some users
2851     consider questionable, and that are easy to avoid (or modify to
2852     prevent the warning), even in conjunction with macros.  This also
2853     enables some language-specific warnings described in *note C++
2854     Dialect Options:: and *note Objective-C and Objective-C++ Dialect
2855     Options::.
2856
2857     `-Wall' turns on the following warning flags:
2858
2859          -Waddress
2860          -Warray-bounds (only with `-O2')
2861          -Wc++0x-compat
2862          -Wchar-subscripts
2863          -Wenum-compare (in C/Objc; this is on by default in C++)
2864          -Wimplicit-int
2865          -Wimplicit-function-declaration
2866          -Wcomment
2867          -Wformat
2868          -Wmain (only for C/ObjC and unless `-ffreestanding')
2869          -Wmissing-braces
2870          -Wnonnull
2871          -Wparentheses
2872          -Wpointer-sign
2873          -Wreorder
2874          -Wreturn-type
2875          -Wsequence-point
2876          -Wsign-compare (only in C++)
2877          -Wstrict-aliasing
2878          -Wstrict-overflow=1
2879          -Wswitch
2880          -Wtrigraphs
2881          -Wuninitialized
2882          -Wunknown-pragmas
2883          -Wunused-function
2884          -Wunused-label
2885          -Wunused-value
2886          -Wunused-variable
2887          -Wvolatile-register-var
2888
2889     Note that some warning flags are not implied by `-Wall'.  Some of
2890     them warn about constructions that users generally do not consider
2891     questionable, but which occasionally you might wish to check for;
2892     others warn about constructions that are necessary or hard to
2893     avoid in some cases, and there is no simple way to modify the code
2894     to suppress the warning. Some of them are enabled by `-Wextra' but
2895     many of them must be enabled individually.
2896
2897`-Wextra'
2898     This enables some extra warning flags that are not enabled by
2899     `-Wall'. (This option used to be called `-W'.  The older name is
2900     still supported, but the newer name is more descriptive.)
2901
2902          -Wclobbered
2903          -Wempty-body
2904          -Wignored-qualifiers
2905          -Wmissing-field-initializers
2906          -Wmissing-parameter-type (C only)
2907          -Wold-style-declaration (C only)
2908          -Woverride-init
2909          -Wsign-compare
2910          -Wtype-limits
2911          -Wuninitialized
2912          -Wunused-parameter (only with `-Wunused' or `-Wall')
2913
2914     The option `-Wextra' also prints warning messages for the
2915     following cases:
2916
2917        * A pointer is compared against integer zero with `<', `<=',
2918          `>', or `>='.
2919
2920        * (C++ only) An enumerator and a non-enumerator both appear in a
2921          conditional expression.
2922
2923        * (C++ only) Ambiguous virtual bases.
2924
2925        * (C++ only) Subscripting an array which has been declared
2926          `register'.
2927
2928        * (C++ only) Taking the address of a variable which has been
2929          declared `register'.
2930
2931        * (C++ only) A base class is not initialized in a derived
2932          class' copy constructor.
2933
2934
2935`-Wchar-subscripts'
2936     Warn if an array subscript has type `char'.  This is a common cause
2937     of error, as programmers often forget that this type is signed on
2938     some machines.  This warning is enabled by `-Wall'.
2939
2940`-Wcomment'
2941     Warn whenever a comment-start sequence `/*' appears in a `/*'
2942     comment, or whenever a Backslash-Newline appears in a `//' comment.
2943     This warning is enabled by `-Wall'.
2944
2945`-Wformat'
2946     Check calls to `printf' and `scanf', etc., to make sure that the
2947     arguments supplied have types appropriate to the format string
2948     specified, and that the conversions specified in the format string
2949     make sense.  This includes standard functions, and others
2950     specified by format attributes (*note Function Attributes::), in
2951     the `printf', `scanf', `strftime' and `strfmon' (an X/Open
2952     extension, not in the C standard) families (or other
2953     target-specific families).  Which functions are checked without
2954     format attributes having been specified depends on the standard
2955     version selected, and such checks of functions without the
2956     attribute specified are disabled by `-ffreestanding' or
2957     `-fno-builtin'.
2958
2959     The formats are checked against the format features supported by
2960     GNU libc version 2.2.  These include all ISO C90 and C99 features,
2961     as well as features from the Single Unix Specification and some
2962     BSD and GNU extensions.  Other library implementations may not
2963     support all these features; GCC does not support warning about
2964     features that go beyond a particular library's limitations.
2965     However, if `-pedantic' is used with `-Wformat', warnings will be
2966     given about format features not in the selected standard version
2967     (but not for `strfmon' formats, since those are not in any version
2968     of the C standard).  *Note Options Controlling C Dialect: C
2969     Dialect Options.
2970
2971     Since `-Wformat' also checks for null format arguments for several
2972     functions, `-Wformat' also implies `-Wnonnull'.
2973
2974     `-Wformat' is included in `-Wall'.  For more control over some
2975     aspects of format checking, the options `-Wformat-y2k',
2976     `-Wno-format-extra-args', `-Wno-format-zero-length',
2977     `-Wformat-nonliteral', `-Wformat-security', and `-Wformat=2' are
2978     available, but are not included in `-Wall'.
2979
2980`-Wformat-y2k'
2981     If `-Wformat' is specified, also warn about `strftime' formats
2982     which may yield only a two-digit year.
2983
2984`-Wno-format-contains-nul'
2985     If `-Wformat' is specified, do not warn about format strings that
2986     contain NUL bytes.
2987
2988`-Wno-format-extra-args'
2989     If `-Wformat' is specified, do not warn about excess arguments to a
2990     `printf' or `scanf' format function.  The C standard specifies
2991     that such arguments are ignored.
2992
2993     Where the unused arguments lie between used arguments that are
2994     specified with `$' operand number specifications, normally
2995     warnings are still given, since the implementation could not know
2996     what type to pass to `va_arg' to skip the unused arguments.
2997     However, in the case of `scanf' formats, this option will suppress
2998     the warning if the unused arguments are all pointers, since the
2999     Single Unix Specification says that such unused arguments are
3000     allowed.
3001
3002`-Wno-format-zero-length (C and Objective-C only)'
3003     If `-Wformat' is specified, do not warn about zero-length formats.
3004     The C standard specifies that zero-length formats are allowed.
3005
3006`-Wformat-nonliteral'
3007     If `-Wformat' is specified, also warn if the format string is not a
3008     string literal and so cannot be checked, unless the format function
3009     takes its format arguments as a `va_list'.
3010
3011`-Wformat-security'
3012     If `-Wformat' is specified, also warn about uses of format
3013     functions that represent possible security problems.  At present,
3014     this warns about calls to `printf' and `scanf' functions where the
3015     format string is not a string literal and there are no format
3016     arguments, as in `printf (foo);'.  This may be a security hole if
3017     the format string came from untrusted input and contains `%n'.
3018     (This is currently a subset of what `-Wformat-nonliteral' warns
3019     about, but in future warnings may be added to `-Wformat-security'
3020     that are not included in `-Wformat-nonliteral'.)
3021
3022`-Wformat=2'
3023     Enable `-Wformat' plus format checks not included in `-Wformat'.
3024     Currently equivalent to `-Wformat -Wformat-nonliteral
3025     -Wformat-security -Wformat-y2k'.
3026
3027`-Wnonnull (C and Objective-C only)'
3028     Warn about passing a null pointer for arguments marked as
3029     requiring a non-null value by the `nonnull' function attribute.
3030
3031     `-Wnonnull' is included in `-Wall' and `-Wformat'.  It can be
3032     disabled with the `-Wno-nonnull' option.
3033
3034`-Winit-self (C, C++, Objective-C and Objective-C++ only)'
3035     Warn about uninitialized variables which are initialized with
3036     themselves.  Note this option can only be used with the
3037     `-Wuninitialized' option.
3038
3039     For example, GCC will warn about `i' being uninitialized in the
3040     following snippet only when `-Winit-self' has been specified:
3041          int f()
3042          {
3043            int i = i;
3044            return i;
3045          }
3046
3047`-Wimplicit-int (C and Objective-C only)'
3048     Warn when a declaration does not specify a type.  This warning is
3049     enabled by `-Wall'.
3050
3051`-Wimplicit-function-declaration (C and Objective-C only)'
3052     Give a warning whenever a function is used before being declared.
3053     In C99 mode (`-std=c99' or `-std=gnu99'), this warning is enabled
3054     by default and it is made into an error by `-pedantic-errors'.
3055     This warning is also enabled by `-Wall'.
3056
3057`-Wimplicit'
3058     Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'.
3059     This warning is enabled by `-Wall'.
3060
3061`-Wignored-qualifiers (C and C++ only)'
3062     Warn if the return type of a function has a type qualifier such as
3063     `const'.  For ISO C such a type qualifier has no effect, since the
3064     value returned by a function is not an lvalue.  For C++, the
3065     warning is only emitted for scalar types or `void'.  ISO C
3066     prohibits qualified `void' return types on function definitions,
3067     so such return types always receive a warning even without this
3068     option.
3069
3070     This warning is also enabled by `-Wextra'.
3071
3072`-Wmain'
3073     Warn if the type of `main' is suspicious.  `main' should be a
3074     function with external linkage, returning int, taking either zero
3075     arguments, two, or three arguments of appropriate types.  This
3076     warning is enabled by default in C++ and is enabled by either
3077     `-Wall' or `-pedantic'.
3078
3079`-Wmissing-braces'
3080     Warn if an aggregate or union initializer is not fully bracketed.
3081     In the following example, the initializer for `a' is not fully
3082     bracketed, but that for `b' is fully bracketed.
3083
3084          int a[2][2] = { 0, 1, 2, 3 };
3085          int b[2][2] = { { 0, 1 }, { 2, 3 } };
3086
3087     This warning is enabled by `-Wall'.
3088
3089`-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
3090     Warn if a user-supplied include directory does not exist.
3091
3092`-Wparentheses'
3093     Warn if parentheses are omitted in certain contexts, such as when
3094     there is an assignment in a context where a truth value is
3095     expected, or when operators are nested whose precedence people
3096     often get confused about.
3097
3098     Also warn if a comparison like `x<=y<=z' appears; this is
3099     equivalent to `(x<=y ? 1 : 0) <= z', which is a different
3100     interpretation from that of ordinary mathematical notation.
3101
3102     Also warn about constructions where there may be confusion to which
3103     `if' statement an `else' branch belongs.  Here is an example of
3104     such a case:
3105
3106          {
3107            if (a)
3108              if (b)
3109                foo ();
3110            else
3111              bar ();
3112          }
3113
3114     In C/C++, every `else' branch belongs to the innermost possible
3115     `if' statement, which in this example is `if (b)'.  This is often
3116     not what the programmer expected, as illustrated in the above
3117     example by indentation the programmer chose.  When there is the
3118     potential for this confusion, GCC will issue a warning when this
3119     flag is specified.  To eliminate the warning, add explicit braces
3120     around the innermost `if' statement so there is no way the `else'
3121     could belong to the enclosing `if'.  The resulting code would look
3122     like this:
3123
3124          {
3125            if (a)
3126              {
3127                if (b)
3128                  foo ();
3129                else
3130                  bar ();
3131              }
3132          }
3133
3134     This warning is enabled by `-Wall'.
3135
3136`-Wsequence-point'
3137     Warn about code that may have undefined semantics because of
3138     violations of sequence point rules in the C and C++ standards.
3139
3140     The C and C++ standards defines the order in which expressions in
3141     a C/C++ program are evaluated in terms of "sequence points", which
3142     represent a partial ordering between the execution of parts of the
3143     program: those executed before the sequence point, and those
3144     executed after it.  These occur after the evaluation of a full
3145     expression (one which is not part of a larger expression), after
3146     the evaluation of the first operand of a `&&', `||', `? :' or `,'
3147     (comma) operator, before a function is called (but after the
3148     evaluation of its arguments and the expression denoting the called
3149     function), and in certain other places.  Other than as expressed
3150     by the sequence point rules, the order of evaluation of
3151     subexpressions of an expression is not specified.  All these rules
3152     describe only a partial order rather than a total order, since,
3153     for example, if two functions are called within one expression
3154     with no sequence point between them, the order in which the
3155     functions are called is not specified.  However, the standards
3156     committee have ruled that function calls do not overlap.
3157
3158     It is not specified when between sequence points modifications to
3159     the values of objects take effect.  Programs whose behavior
3160     depends on this have undefined behavior; the C and C++ standards
3161     specify that "Between the previous and next sequence point an
3162     object shall have its stored value modified at most once by the
3163     evaluation of an expression.  Furthermore, the prior value shall
3164     be read only to determine the value to be stored.".  If a program
3165     breaks these rules, the results on any particular implementation
3166     are entirely unpredictable.
3167
3168     Examples of code with undefined behavior are `a = a++;', `a[n] =
3169     b[n++]' and `a[i++] = i;'.  Some more complicated cases are not
3170     diagnosed by this option, and it may give an occasional false
3171     positive result, but in general it has been found fairly effective
3172     at detecting this sort of problem in programs.
3173
3174     The standard is worded confusingly, therefore there is some debate
3175     over the precise meaning of the sequence point rules in subtle
3176     cases.  Links to discussions of the problem, including proposed
3177     formal definitions, may be found on the GCC readings page, at
3178     `http://gcc.gnu.org/readings.html'.
3179
3180     This warning is enabled by `-Wall' for C and C++.
3181
3182`-Wreturn-type'
3183     Warn whenever a function is defined with a return-type that
3184     defaults to `int'.  Also warn about any `return' statement with no
3185     return-value in a function whose return-type is not `void'
3186     (falling off the end of the function body is considered returning
3187     without a value), and about a `return' statement with an
3188     expression in a function whose return-type is `void'.
3189
3190     For C++, a function without return type always produces a
3191     diagnostic message, even when `-Wno-return-type' is specified.
3192     The only exceptions are `main' and functions defined in system
3193     headers.
3194
3195     This warning is enabled by `-Wall'.
3196
3197`-Wswitch'
3198     Warn whenever a `switch' statement has an index of enumerated type
3199     and lacks a `case' for one or more of the named codes of that
3200     enumeration.  (The presence of a `default' label prevents this
3201     warning.)  `case' labels outside the enumeration range also
3202     provoke warnings when this option is used (even if there is a
3203     `default' label).  This warning is enabled by `-Wall'.
3204
3205`-Wswitch-default'
3206     Warn whenever a `switch' statement does not have a `default' case.
3207
3208`-Wswitch-enum'
3209     Warn whenever a `switch' statement has an index of enumerated type
3210     and lacks a `case' for one or more of the named codes of that
3211     enumeration.  `case' labels outside the enumeration range also
3212     provoke warnings when this option is used.  The only difference
3213     between `-Wswitch' and this option is that this option gives a
3214     warning about an omitted enumeration code even if there is a
3215     `default' label.
3216
3217`-Wsync-nand (C and C++ only)'
3218     Warn when `__sync_fetch_and_nand' and `__sync_nand_and_fetch'
3219     built-in functions are used.  These functions changed semantics in
3220     GCC 4.4.
3221
3222`-Wtrigraphs'
3223     Warn if any trigraphs are encountered that might change the
3224     meaning of the program (trigraphs within comments are not warned
3225     about).  This warning is enabled by `-Wall'.
3226
3227`-Wunused-function'
3228     Warn whenever a static function is declared but not defined or a
3229     non-inline static function is unused.  This warning is enabled by
3230     `-Wall'.
3231
3232`-Wunused-label'
3233     Warn whenever a label is declared but not used.  This warning is
3234     enabled by `-Wall'.
3235
3236     To suppress this warning use the `unused' attribute (*note
3237     Variable Attributes::).
3238
3239`-Wunused-parameter'
3240     Warn whenever a function parameter is unused aside from its
3241     declaration.
3242
3243     To suppress this warning use the `unused' attribute (*note
3244     Variable Attributes::).
3245
3246`-Wno-unused-result'
3247     Do not warn if a caller of a function marked with attribute
3248     `warn_unused_result' (*note Variable Attributes::) does not use
3249     its return value. The default is `-Wunused-result'.
3250
3251`-Wunused-variable'
3252     Warn whenever a local variable or non-constant static variable is
3253     unused aside from its declaration.  This warning is enabled by
3254     `-Wall'.
3255
3256     To suppress this warning use the `unused' attribute (*note
3257     Variable Attributes::).
3258
3259`-Wunused-value'
3260     Warn whenever a statement computes a result that is explicitly not
3261     used. To suppress this warning cast the unused expression to
3262     `void'. This includes an expression-statement or the left-hand
3263     side of a comma expression that contains no side effects. For
3264     example, an expression such as `x[i,j]' will cause a warning, while
3265     `x[(void)i,j]' will not.
3266
3267     This warning is enabled by `-Wall'.
3268
3269`-Wunused'
3270     All the above `-Wunused' options combined.
3271
3272     In order to get a warning about an unused function parameter, you
3273     must either specify `-Wextra -Wunused' (note that `-Wall' implies
3274     `-Wunused'), or separately specify `-Wunused-parameter'.
3275
3276`-Wuninitialized'
3277     Warn if an automatic variable is used without first being
3278     initialized or if a variable may be clobbered by a `setjmp' call.
3279     In C++, warn if a non-static reference or non-static `const' member
3280     appears in a class without constructors.
3281
3282     If you want to warn about code which uses the uninitialized value
3283     of the variable in its own initializer, use the `-Winit-self'
3284     option.
3285
3286     These warnings occur for individual uninitialized or clobbered
3287     elements of structure, union or array variables as well as for
3288     variables which are uninitialized or clobbered as a whole.  They do
3289     not occur for variables or elements declared `volatile'.  Because
3290     these warnings depend on optimization, the exact variables or
3291     elements for which there are warnings will depend on the precise
3292     optimization options and version of GCC used.
3293
3294     Note that there may be no warning about a variable that is used
3295     only to compute a value that itself is never used, because such
3296     computations may be deleted by data flow analysis before the
3297     warnings are printed.
3298
3299     These warnings are made optional because GCC is not smart enough
3300     to see all the reasons why the code might be correct despite
3301     appearing to have an error.  Here is one example of how this can
3302     happen:
3303
3304          {
3305            int x;
3306            switch (y)
3307              {
3308              case 1: x = 1;
3309                break;
3310              case 2: x = 4;
3311                break;
3312              case 3: x = 5;
3313              }
3314            foo (x);
3315          }
3316
3317     If the value of `y' is always 1, 2 or 3, then `x' is always
3318     initialized, but GCC doesn't know this.  Here is another common
3319     case:
3320
3321          {
3322            int save_y;
3323            if (change_y) save_y = y, y = new_y;
3324            ...
3325            if (change_y) y = save_y;
3326          }
3327
3328     This has no bug because `save_y' is used only if it is set.
3329
3330     This option also warns when a non-volatile automatic variable
3331     might be changed by a call to `longjmp'.  These warnings as well
3332     are possible only in optimizing compilation.
3333
3334     The compiler sees only the calls to `setjmp'.  It cannot know
3335     where `longjmp' will be called; in fact, a signal handler could
3336     call it at any point in the code.  As a result, you may get a
3337     warning even when there is in fact no problem because `longjmp'
3338     cannot in fact be called at the place which would cause a problem.
3339
3340     Some spurious warnings can be avoided if you declare all the
3341     functions you use that never return as `noreturn'.  *Note Function
3342     Attributes::.
3343
3344     This warning is enabled by `-Wall' or `-Wextra'.
3345
3346`-Wunknown-pragmas'
3347     Warn when a #pragma directive is encountered which is not
3348     understood by GCC.  If this command line option is used, warnings
3349     will even be issued for unknown pragmas in system header files.
3350     This is not the case if the warnings were only enabled by the
3351     `-Wall' command line option.
3352
3353`-Wno-pragmas'
3354     Do not warn about misuses of pragmas, such as incorrect parameters,
3355     invalid syntax, or conflicts between pragmas.  See also
3356     `-Wunknown-pragmas'.
3357
3358`-Wstrict-aliasing'
3359     This option is only active when `-fstrict-aliasing' is active.  It
3360     warns about code which might break the strict aliasing rules that
3361     the compiler is using for optimization.  The warning does not
3362     catch all cases, but does attempt to catch the more common
3363     pitfalls.  It is included in `-Wall'.  It is equivalent to
3364     `-Wstrict-aliasing=3'
3365
3366`-Wstrict-aliasing=n'
3367     This option is only active when `-fstrict-aliasing' is active.  It
3368     warns about code which might break the strict aliasing rules that
3369     the compiler is using for optimization.  Higher levels correspond
3370     to higher accuracy (fewer false positives).  Higher levels also
3371     correspond to more effort, similar to the way -O works.
3372     `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=n', with
3373     n=3.
3374
3375     Level 1: Most aggressive, quick, least accurate.  Possibly useful
3376     when higher levels do not warn but -fstrict-aliasing still breaks
3377     the code, as it has very few false negatives.  However, it has
3378     many false positives.  Warns for all pointer conversions between
3379     possibly incompatible types, even if never dereferenced.  Runs in
3380     the frontend only.
3381
3382     Level 2: Aggressive, quick, not too precise.  May still have many
3383     false positives (not as many as level 1 though), and few false
3384     negatives (but possibly more than level 1).  Unlike level 1, it
3385     only warns when an address is taken.  Warns about incomplete
3386     types.  Runs in the frontend only.
3387
3388     Level 3 (default for `-Wstrict-aliasing'): Should have very few
3389     false positives and few false negatives.  Slightly slower than
3390     levels 1 or 2 when optimization is enabled.  Takes care of the
3391     common pun+dereference pattern in the frontend:
3392     `*(int*)&some_float'.  If optimization is enabled, it also runs in
3393     the backend, where it deals with multiple statement cases using
3394     flow-sensitive points-to information.  Only warns when the
3395     converted pointer is dereferenced.  Does not warn about incomplete
3396     types.
3397
3398`-Wstrict-overflow'
3399`-Wstrict-overflow=N'
3400     This option is only active when `-fstrict-overflow' is active.  It
3401     warns about cases where the compiler optimizes based on the
3402     assumption that signed overflow does not occur.  Note that it does
3403     not warn about all cases where the code might overflow: it only
3404     warns about cases where the compiler implements some optimization.
3405     Thus this warning depends on the optimization level.
3406
3407     An optimization which assumes that signed overflow does not occur
3408     is perfectly safe if the values of the variables involved are such
3409     that overflow never does, in fact, occur.  Therefore this warning
3410     can easily give a false positive: a warning about code which is not
3411     actually a problem.  To help focus on important issues, several
3412     warning levels are defined.  No warnings are issued for the use of
3413     undefined signed overflow when estimating how many iterations a
3414     loop will require, in particular when determining whether a loop
3415     will be executed at all.
3416
3417    `-Wstrict-overflow=1'
3418          Warn about cases which are both questionable and easy to
3419          avoid.  For example: `x + 1 > x'; with `-fstrict-overflow',
3420          the compiler will simplify this to `1'.  This level of
3421          `-Wstrict-overflow' is enabled by `-Wall'; higher levels are
3422          not, and must be explicitly requested.
3423
3424    `-Wstrict-overflow=2'
3425          Also warn about other cases where a comparison is simplified
3426          to a constant.  For example: `abs (x) >= 0'.  This can only be
3427          simplified when `-fstrict-overflow' is in effect, because
3428          `abs (INT_MIN)' overflows to `INT_MIN', which is less than
3429          zero.  `-Wstrict-overflow' (with no level) is the same as
3430          `-Wstrict-overflow=2'.
3431
3432    `-Wstrict-overflow=3'
3433          Also warn about other cases where a comparison is simplified.
3434          For example: `x + 1 > 1' will be simplified to `x > 0'.
3435
3436    `-Wstrict-overflow=4'
3437          Also warn about other simplifications not covered by the
3438          above cases.  For example: `(x * 10) / 5' will be simplified
3439          to `x * 2'.
3440
3441    `-Wstrict-overflow=5'
3442          Also warn about cases where the compiler reduces the
3443          magnitude of a constant involved in a comparison.  For
3444          example: `x + 2 > y' will be simplified to `x + 1 >= y'.
3445          This is reported only at the highest warning level because
3446          this simplification applies to many comparisons, so this
3447          warning level will give a very large number of false
3448          positives.
3449
3450`-Warray-bounds'
3451     This option is only active when `-ftree-vrp' is active (default
3452     for -O2 and above). It warns about subscripts to arrays that are
3453     always out of bounds. This warning is enabled by `-Wall'.
3454
3455`-Wno-div-by-zero'
3456     Do not warn about compile-time integer division by zero.  Floating
3457     point division by zero is not warned about, as it can be a
3458     legitimate way of obtaining infinities and NaNs.
3459
3460`-Wsystem-headers'
3461     Print warning messages for constructs found in system header files.
3462     Warnings from system headers are normally suppressed, on the
3463     assumption that they usually do not indicate real problems and
3464     would only make the compiler output harder to read.  Using this
3465     command line option tells GCC to emit warnings from system headers
3466     as if they occurred in user code.  However, note that using
3467     `-Wall' in conjunction with this option will _not_ warn about
3468     unknown pragmas in system headers--for that, `-Wunknown-pragmas'
3469     must also be used.
3470
3471`-Wfloat-equal'
3472     Warn if floating point values are used in equality comparisons.
3473
3474     The idea behind this is that sometimes it is convenient (for the
3475     programmer) to consider floating-point values as approximations to
3476     infinitely precise real numbers.  If you are doing this, then you
3477     need to compute (by analyzing the code, or in some other way) the
3478     maximum or likely maximum error that the computation introduces,
3479     and allow for it when performing comparisons (and when producing
3480     output, but that's a different problem).  In particular, instead
3481     of testing for equality, you would check to see whether the two
3482     values have ranges that overlap; and this is done with the
3483     relational operators, so equality comparisons are probably
3484     mistaken.
3485
3486`-Wtraditional (C and Objective-C only)'
3487     Warn about certain constructs that behave differently in
3488     traditional and ISO C.  Also warn about ISO C constructs that have
3489     no traditional C equivalent, and/or problematic constructs which
3490     should be avoided.
3491
3492        * Macro parameters that appear within string literals in the
3493          macro body.  In traditional C macro replacement takes place
3494          within string literals, but does not in ISO C.
3495
3496        * In traditional C, some preprocessor directives did not exist.
3497          Traditional preprocessors would only consider a line to be a
3498          directive if the `#' appeared in column 1 on the line.
3499          Therefore `-Wtraditional' warns about directives that
3500          traditional C understands but would ignore because the `#'
3501          does not appear as the first character on the line.  It also
3502          suggests you hide directives like `#pragma' not understood by
3503          traditional C by indenting them.  Some traditional
3504          implementations would not recognize `#elif', so it suggests
3505          avoiding it altogether.
3506
3507        * A function-like macro that appears without arguments.
3508
3509        * The unary plus operator.
3510
3511        * The `U' integer constant suffix, or the `F' or `L' floating
3512          point constant suffixes.  (Traditional C does support the `L'
3513          suffix on integer constants.)  Note, these suffixes appear in
3514          macros defined in the system headers of most modern systems,
3515          e.g. the `_MIN'/`_MAX' macros in `<limits.h>'.  Use of these
3516          macros in user code might normally lead to spurious warnings,
3517          however GCC's integrated preprocessor has enough context to
3518          avoid warning in these cases.
3519
3520        * A function declared external in one block and then used after
3521          the end of the block.
3522
3523        * A `switch' statement has an operand of type `long'.
3524
3525        * A non-`static' function declaration follows a `static' one.
3526          This construct is not accepted by some traditional C
3527          compilers.
3528
3529        * The ISO type of an integer constant has a different width or
3530          signedness from its traditional type.  This warning is only
3531          issued if the base of the constant is ten.  I.e. hexadecimal
3532          or octal values, which typically represent bit patterns, are
3533          not warned about.
3534
3535        * Usage of ISO string concatenation is detected.
3536
3537        * Initialization of automatic aggregates.
3538
3539        * Identifier conflicts with labels.  Traditional C lacks a
3540          separate namespace for labels.
3541
3542        * Initialization of unions.  If the initializer is zero, the
3543          warning is omitted.  This is done under the assumption that
3544          the zero initializer in user code appears conditioned on e.g.
3545          `__STDC__' to avoid missing initializer warnings and relies
3546          on default initialization to zero in the traditional C case.
3547
3548        * Conversions by prototypes between fixed/floating point values
3549          and vice versa.  The absence of these prototypes when
3550          compiling with traditional C would cause serious problems.
3551          This is a subset of the possible conversion warnings, for the
3552          full set use `-Wtraditional-conversion'.
3553
3554        * Use of ISO C style function definitions.  This warning
3555          intentionally is _not_ issued for prototype declarations or
3556          variadic functions because these ISO C features will appear
3557          in your code when using libiberty's traditional C
3558          compatibility macros, `PARAMS' and `VPARAMS'.  This warning
3559          is also bypassed for nested functions because that feature is
3560          already a GCC extension and thus not relevant to traditional
3561          C compatibility.
3562
3563`-Wtraditional-conversion (C and Objective-C only)'
3564     Warn if a prototype causes a type conversion that is different
3565     from what would happen to the same argument in the absence of a
3566     prototype.  This includes conversions of fixed point to floating
3567     and vice versa, and conversions changing the width or signedness
3568     of a fixed point argument except when the same as the default
3569     promotion.
3570
3571`-Wdeclaration-after-statement (C and Objective-C only)'
3572     Warn when a declaration is found after a statement in a block.
3573     This construct, known from C++, was introduced with ISO C99 and is
3574     by default allowed in GCC.  It is not supported by ISO C90 and was
3575     not supported by GCC versions before GCC 3.0.  *Note Mixed
3576     Declarations::.
3577
3578`-Wundef'
3579     Warn if an undefined identifier is evaluated in an `#if' directive.
3580
3581`-Wno-endif-labels'
3582     Do not warn whenever an `#else' or an `#endif' are followed by
3583     text.
3584
3585`-Wshadow'
3586     Warn whenever a local variable shadows another local variable,
3587     parameter or global variable or whenever a built-in function is
3588     shadowed.
3589
3590`-Wlarger-than=LEN'
3591     Warn whenever an object of larger than LEN bytes is defined.
3592
3593`-Wframe-larger-than=LEN'
3594     Warn if the size of a function frame is larger than LEN bytes.
3595     The computation done to determine the stack frame size is
3596     approximate and not conservative.  The actual requirements may be
3597     somewhat greater than LEN even if you do not get a warning.  In
3598     addition, any space allocated via `alloca', variable-length
3599     arrays, or related constructs is not included by the compiler when
3600     determining whether or not to issue a warning.
3601
3602`-Wunsafe-loop-optimizations'
3603     Warn if the loop cannot be optimized because the compiler could not
3604     assume anything on the bounds of the loop indices.  With
3605     `-funsafe-loop-optimizations' warn if the compiler made such
3606     assumptions.
3607
3608`-Wno-pedantic-ms-format (MinGW targets only)'
3609     Disables the warnings about non-ISO `printf' / `scanf' format
3610     width specifiers `I32', `I64', and `I' used on Windows targets
3611     depending on the MS runtime, when you are using the options
3612     `-Wformat' and `-pedantic' without gnu-extensions.
3613
3614`-Wpointer-arith'
3615     Warn about anything that depends on the "size of" a function type
3616     or of `void'.  GNU C assigns these types a size of 1, for
3617     convenience in calculations with `void *' pointers and pointers to
3618     functions.  In C++, warn also when an arithmetic operation involves
3619     `NULL'.  This warning is also enabled by `-pedantic'.
3620
3621`-Wtype-limits'
3622     Warn if a comparison is always true or always false due to the
3623     limited range of the data type, but do not warn for constant
3624     expressions.  For example, warn if an unsigned variable is
3625     compared against zero with `<' or `>='.  This warning is also
3626     enabled by `-Wextra'.
3627
3628`-Wbad-function-cast (C and Objective-C only)'
3629     Warn whenever a function call is cast to a non-matching type.  For
3630     example, warn if `int malloc()' is cast to `anything *'.
3631
3632`-Wc++-compat (C and Objective-C only)'
3633     Warn about ISO C constructs that are outside of the common subset
3634     of ISO C and ISO C++, e.g. request for implicit conversion from
3635     `void *' to a pointer to non-`void' type.
3636
3637`-Wc++0x-compat (C++ and Objective-C++ only)'
3638     Warn about C++ constructs whose meaning differs between ISO C++
3639     1998 and ISO C++ 200x, e.g., identifiers in ISO C++ 1998 that will
3640     become keywords in ISO C++ 200x.  This warning is enabled by
3641     `-Wall'.
3642
3643`-Wcast-qual'
3644     Warn whenever a pointer is cast so as to remove a type qualifier
3645     from the target type.  For example, warn if a `const char *' is
3646     cast to an ordinary `char *'.
3647
3648     Also warn when making a cast which introduces a type qualifier in
3649     an unsafe way.  For example, casting `char **' to `const char **'
3650     is unsafe, as in this example:
3651
3652            /* p is char ** value.  */
3653            const char **q = (const char **) p;
3654            /* Assignment of readonly string to const char * is OK.  */
3655            *q = "string";
3656            /* Now char** pointer points to read-only memory.  */
3657            **p = 'b';
3658
3659`-Wcast-align'
3660     Warn whenever a pointer is cast such that the required alignment
3661     of the target is increased.  For example, warn if a `char *' is
3662     cast to an `int *' on machines where integers can only be accessed
3663     at two- or four-byte boundaries.
3664
3665`-Wwrite-strings'
3666     When compiling C, give string constants the type `const
3667     char[LENGTH]' so that copying the address of one into a
3668     non-`const' `char *' pointer will get a warning.  These warnings
3669     will help you find at compile time code that can try to write into
3670     a string constant, but only if you have been very careful about
3671     using `const' in declarations and prototypes.  Otherwise, it will
3672     just be a nuisance. This is why we did not make `-Wall' request
3673     these warnings.
3674
3675     When compiling C++, warn about the deprecated conversion from
3676     string literals to `char *'.  This warning is enabled by default
3677     for C++ programs.
3678
3679`-Wclobbered'
3680     Warn for variables that might be changed by `longjmp' or `vfork'.
3681     This warning is also enabled by `-Wextra'.
3682
3683`-Wconversion'
3684     Warn for implicit conversions that may alter a value. This includes
3685     conversions between real and integer, like `abs (x)' when `x' is
3686     `double'; conversions between signed and unsigned, like `unsigned
3687     ui = -1'; and conversions to smaller types, like `sqrtf (M_PI)'.
3688     Do not warn for explicit casts like `abs ((int) x)' and `ui =
3689     (unsigned) -1', or if the value is not changed by the conversion
3690     like in `abs (2.0)'.  Warnings about conversions between signed
3691     and unsigned integers can be disabled by using
3692     `-Wno-sign-conversion'.
3693
3694     For C++, also warn for confusing overload resolution for
3695     user-defined conversions; and conversions that will never use a
3696     type conversion operator: conversions to `void', the same type, a
3697     base class or a reference to them. Warnings about conversions
3698     between signed and unsigned integers are disabled by default in
3699     C++ unless `-Wsign-conversion' is explicitly enabled.
3700
3701`-Wno-conversion-null (C++ and Objective-C++ only)'
3702     Do not warn for conversions between `NULL' and non-pointer types.
3703     `-Wconversion-null' is enabled by default.
3704
3705`-Wempty-body'
3706     Warn if an empty body occurs in an `if', `else' or `do while'
3707     statement.  This warning is also enabled by `-Wextra'.
3708
3709`-Wenum-compare'
3710     Warn about a comparison between values of different enum types. In
3711     C++ this warning is enabled by default.  In C this warning is
3712     enabled by `-Wall'.
3713
3714`-Wjump-misses-init (C, Objective-C only)'
3715     Warn if a `goto' statement or a `switch' statement jumps forward
3716     across the initialization of a variable, or jumps backward to a
3717     label after the variable has been initialized.  This only warns
3718     about variables which are initialized when they are declared.
3719     This warning is only supported for C and Objective C; in C++ this
3720     sort of branch is an error in any case.
3721
3722     `-Wjump-misses-init' is included in `-Wc++-compat'.  It can be
3723     disabled with the `-Wno-jump-misses-init' option.
3724
3725`-Wsign-compare'
3726     Warn when a comparison between signed and unsigned values could
3727     produce an incorrect result when the signed value is converted to
3728     unsigned.  This warning is also enabled by `-Wextra'; to get the
3729     other warnings of `-Wextra' without this warning, use `-Wextra
3730     -Wno-sign-compare'.
3731
3732`-Wsign-conversion'
3733     Warn for implicit conversions that may change the sign of an
3734     integer value, like assigning a signed integer expression to an
3735     unsigned integer variable. An explicit cast silences the warning.
3736     In C, this option is enabled also by `-Wconversion'.
3737
3738`-Waddress'
3739     Warn about suspicious uses of memory addresses. These include using
3740     the address of a function in a conditional expression, such as
3741     `void func(void); if (func)', and comparisons against the memory
3742     address of a string literal, such as `if (x == "abc")'.  Such uses
3743     typically indicate a programmer error: the address of a function
3744     always evaluates to true, so their use in a conditional usually
3745     indicate that the programmer forgot the parentheses in a function
3746     call; and comparisons against string literals result in unspecified
3747     behavior and are not portable in C, so they usually indicate that
3748     the programmer intended to use `strcmp'.  This warning is enabled
3749     by `-Wall'.
3750
3751`-Wlogical-op'
3752     Warn about suspicious uses of logical operators in expressions.
3753     This includes using logical operators in contexts where a bit-wise
3754     operator is likely to be expected.
3755
3756`-Waggregate-return'
3757     Warn if any functions that return structures or unions are defined
3758     or called.  (In languages where you can return an array, this also
3759     elicits a warning.)
3760
3761`-Wno-attributes'
3762     Do not warn if an unexpected `__attribute__' is used, such as
3763     unrecognized attributes, function attributes applied to variables,
3764     etc.  This will not stop errors for incorrect use of supported
3765     attributes.
3766
3767`-Wno-builtin-macro-redefined'
3768     Do not warn if certain built-in macros are redefined.  This
3769     suppresses warnings for redefinition of `__TIMESTAMP__',
3770     `__TIME__', `__DATE__', `__FILE__', and `__BASE_FILE__'.
3771
3772`-Wstrict-prototypes (C and Objective-C only)'
3773     Warn if a function is declared or defined without specifying the
3774     argument types.  (An old-style function definition is permitted
3775     without a warning if preceded by a declaration which specifies the
3776     argument types.)
3777
3778`-Wold-style-declaration (C and Objective-C only)'
3779     Warn for obsolescent usages, according to the C Standard, in a
3780     declaration. For example, warn if storage-class specifiers like
3781     `static' are not the first things in a declaration.  This warning
3782     is also enabled by `-Wextra'.
3783
3784`-Wold-style-definition (C and Objective-C only)'
3785     Warn if an old-style function definition is used.  A warning is
3786     given even if there is a previous prototype.
3787
3788`-Wmissing-parameter-type (C and Objective-C only)'
3789     A function parameter is declared without a type specifier in
3790     K&R-style functions:
3791
3792          void foo(bar) { }
3793
3794     This warning is also enabled by `-Wextra'.
3795
3796`-Wmissing-prototypes (C and Objective-C only)'
3797     Warn if a global function is defined without a previous prototype
3798     declaration.  This warning is issued even if the definition itself
3799     provides a prototype.  The aim is to detect global functions that
3800     fail to be declared in header files.
3801
3802`-Wmissing-declarations'
3803     Warn if a global function is defined without a previous
3804     declaration.  Do so even if the definition itself provides a
3805     prototype.  Use this option to detect global functions that are
3806     not declared in header files.  In C++, no warnings are issued for
3807     function templates, or for inline functions, or for functions in
3808     anonymous namespaces.
3809
3810`-Wmissing-field-initializers'
3811     Warn if a structure's initializer has some fields missing.  For
3812     example, the following code would cause such a warning, because
3813     `x.h' is implicitly zero:
3814
3815          struct s { int f, g, h; };
3816          struct s x = { 3, 4 };
3817
3818     This option does not warn about designated initializers, so the
3819     following modification would not trigger a warning:
3820
3821          struct s { int f, g, h; };
3822          struct s x = { .f = 3, .g = 4 };
3823
3824     This warning is included in `-Wextra'.  To get other `-Wextra'
3825     warnings without this one, use `-Wextra
3826     -Wno-missing-field-initializers'.
3827
3828`-Wmissing-noreturn'
3829     Warn about functions which might be candidates for attribute
3830     `noreturn'.  Note these are only possible candidates, not absolute
3831     ones.  Care should be taken to manually verify functions actually
3832     do not ever return before adding the `noreturn' attribute,
3833     otherwise subtle code generation bugs could be introduced.  You
3834     will not get a warning for `main' in hosted C environments.
3835
3836`-Wmissing-format-attribute'
3837     Warn about function pointers which might be candidates for `format'
3838     attributes.  Note these are only possible candidates, not absolute
3839     ones.  GCC will guess that function pointers with `format'
3840     attributes that are used in assignment, initialization, parameter
3841     passing or return statements should have a corresponding `format'
3842     attribute in the resulting type.  I.e. the left-hand side of the
3843     assignment or initialization, the type of the parameter variable,
3844     or the return type of the containing function respectively should
3845     also have a `format' attribute to avoid the warning.
3846
3847     GCC will also warn about function definitions which might be
3848     candidates for `format' attributes.  Again, these are only
3849     possible candidates.  GCC will guess that `format' attributes
3850     might be appropriate for any function that calls a function like
3851     `vprintf' or `vscanf', but this might not always be the case, and
3852     some functions for which `format' attributes are appropriate may
3853     not be detected.
3854
3855`-Wno-multichar'
3856     Do not warn if a multicharacter constant (`'FOOF'') is used.
3857     Usually they indicate a typo in the user's code, as they have
3858     implementation-defined values, and should not be used in portable
3859     code.
3860
3861`-Wnormalized=<none|id|nfc|nfkc>'
3862     In ISO C and ISO C++, two identifiers are different if they are
3863     different sequences of characters.  However, sometimes when
3864     characters outside the basic ASCII character set are used, you can
3865     have two different character sequences that look the same.  To
3866     avoid confusion, the ISO 10646 standard sets out some
3867     "normalization rules" which when applied ensure that two sequences
3868     that look the same are turned into the same sequence.  GCC can
3869     warn you if you are using identifiers which have not been
3870     normalized; this option controls that warning.
3871
3872     There are four levels of warning that GCC supports.  The default is
3873     `-Wnormalized=nfc', which warns about any identifier which is not
3874     in the ISO 10646 "C" normalized form, "NFC".  NFC is the
3875     recommended form for most uses.
3876
3877     Unfortunately, there are some characters which ISO C and ISO C++
3878     allow in identifiers that when turned into NFC aren't allowable as
3879     identifiers.  That is, there's no way to use these symbols in
3880     portable ISO C or C++ and have all your identifiers in NFC.
3881     `-Wnormalized=id' suppresses the warning for these characters.  It
3882     is hoped that future versions of the standards involved will
3883     correct this, which is why this option is not the default.
3884
3885     You can switch the warning off for all characters by writing
3886     `-Wnormalized=none'.  You would only want to do this if you were
3887     using some other normalization scheme (like "D"), because
3888     otherwise you can easily create bugs that are literally impossible
3889     to see.
3890
3891     Some characters in ISO 10646 have distinct meanings but look
3892     identical in some fonts or display methodologies, especially once
3893     formatting has been applied.  For instance `\u207F', "SUPERSCRIPT
3894     LATIN SMALL LETTER N", will display just like a regular `n' which
3895     has been placed in a superscript.  ISO 10646 defines the "NFKC"
3896     normalization scheme to convert all these into a standard form as
3897     well, and GCC will warn if your code is not in NFKC if you use
3898     `-Wnormalized=nfkc'.  This warning is comparable to warning about
3899     every identifier that contains the letter O because it might be
3900     confused with the digit 0, and so is not the default, but may be
3901     useful as a local coding convention if the programming environment
3902     is unable to be fixed to display these characters distinctly.
3903
3904`-Wno-deprecated'
3905     Do not warn about usage of deprecated features.  *Note Deprecated
3906     Features::.
3907
3908`-Wno-deprecated-declarations'
3909     Do not warn about uses of functions (*note Function Attributes::),
3910     variables (*note Variable Attributes::), and types (*note Type
3911     Attributes::) marked as deprecated by using the `deprecated'
3912     attribute.
3913
3914`-Wno-overflow'
3915     Do not warn about compile-time overflow in constant expressions.
3916
3917`-Woverride-init (C and Objective-C only)'
3918     Warn if an initialized field without side effects is overridden
3919     when using designated initializers (*note Designated Initializers:
3920     Designated Inits.).
3921
3922     This warning is included in `-Wextra'.  To get other `-Wextra'
3923     warnings without this one, use `-Wextra -Wno-override-init'.
3924
3925`-Wpacked'
3926     Warn if a structure is given the packed attribute, but the packed
3927     attribute has no effect on the layout or size of the structure.
3928     Such structures may be mis-aligned for little benefit.  For
3929     instance, in this code, the variable `f.x' in `struct bar' will be
3930     misaligned even though `struct bar' does not itself have the
3931     packed attribute:
3932
3933          struct foo {
3934            int x;
3935            char a, b, c, d;
3936          } __attribute__((packed));
3937          struct bar {
3938            char z;
3939            struct foo f;
3940          };
3941
3942`-Wpacked-bitfield-compat'
3943     The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' attribute
3944     on bit-fields of type `char'.  This has been fixed in GCC 4.4 but
3945     the change can lead to differences in the structure layout.  GCC
3946     informs you when the offset of such a field has changed in GCC 4.4.
3947     For example there is no longer a 4-bit padding between field `a'
3948     and `b' in this structure:
3949
3950          struct foo
3951          {
3952            char a:4;
3953            char b:8;
3954          } __attribute__ ((packed));
3955
3956     This warning is enabled by default.  Use
3957     `-Wno-packed-bitfield-compat' to disable this warning.
3958
3959`-Wpadded'
3960     Warn if padding is included in a structure, either to align an
3961     element of the structure or to align the whole structure.
3962     Sometimes when this happens it is possible to rearrange the fields
3963     of the structure to reduce the padding and so make the structure
3964     smaller.
3965
3966`-Wredundant-decls'
3967     Warn if anything is declared more than once in the same scope,
3968     even in cases where multiple declaration is valid and changes
3969     nothing.
3970
3971`-Wnested-externs (C and Objective-C only)'
3972     Warn if an `extern' declaration is encountered within a function.
3973
3974`-Winline'
3975     Warn if a function can not be inlined and it was declared as
3976     inline.  Even with this option, the compiler will not warn about
3977     failures to inline functions declared in system headers.
3978
3979     The compiler uses a variety of heuristics to determine whether or
3980     not to inline a function.  For example, the compiler takes into
3981     account the size of the function being inlined and the amount of
3982     inlining that has already been done in the current function.
3983     Therefore, seemingly insignificant changes in the source program
3984     can cause the warnings produced by `-Winline' to appear or
3985     disappear.
3986
3987`-Wno-invalid-offsetof (C++ and Objective-C++ only)'
3988     Suppress warnings from applying the `offsetof' macro to a non-POD
3989     type.  According to the 1998 ISO C++ standard, applying `offsetof'
3990     to a non-POD type is undefined.  In existing C++ implementations,
3991     however, `offsetof' typically gives meaningful results even when
3992     applied to certain kinds of non-POD types. (Such as a simple
3993     `struct' that fails to be a POD type only by virtue of having a
3994     constructor.)  This flag is for users who are aware that they are
3995     writing nonportable code and who have deliberately chosen to
3996     ignore the warning about it.
3997
3998     The restrictions on `offsetof' may be relaxed in a future version
3999     of the C++ standard.
4000
4001`-Wno-int-to-pointer-cast (C and Objective-C only)'
4002     Suppress warnings from casts to pointer type of an integer of a
4003     different size.
4004
4005`-Wno-pointer-to-int-cast (C and Objective-C only)'
4006     Suppress warnings from casts from a pointer to an integer type of a
4007     different size.
4008
4009`-Winvalid-pch'
4010     Warn if a precompiled header (*note Precompiled Headers::) is
4011     found in the search path but can't be used.
4012
4013`-Wlong-long'
4014     Warn if `long long' type is used.  This is enabled by either
4015     `-pedantic' or `-Wtraditional' in ISO C90 and C++98 modes.  To
4016     inhibit the warning messages, use `-Wno-long-long'.
4017
4018`-Wvariadic-macros'
4019     Warn if variadic macros are used in pedantic ISO C90 mode, or the
4020     GNU alternate syntax when in pedantic ISO C99 mode.  This is
4021     default.  To inhibit the warning messages, use
4022     `-Wno-variadic-macros'.
4023
4024`-Wvla'
4025     Warn if variable length array is used in the code.  `-Wno-vla'
4026     will prevent the `-pedantic' warning of the variable length array.
4027
4028`-Wvolatile-register-var'
4029     Warn if a register variable is declared volatile.  The volatile
4030     modifier does not inhibit all optimizations that may eliminate
4031     reads and/or writes to register variables.  This warning is
4032     enabled by `-Wall'.
4033
4034`-Wdisabled-optimization'
4035     Warn if a requested optimization pass is disabled.  This warning
4036     does not generally indicate that there is anything wrong with your
4037     code; it merely indicates that GCC's optimizers were unable to
4038     handle the code effectively.  Often, the problem is that your code
4039     is too big or too complex; GCC will refuse to optimize programs
4040     when the optimization itself is likely to take inordinate amounts
4041     of time.
4042
4043`-Wpointer-sign (C and Objective-C only)'
4044     Warn for pointer argument passing or assignment with different
4045     signedness.  This option is only supported for C and Objective-C.
4046     It is implied by `-Wall' and by `-pedantic', which can be disabled
4047     with `-Wno-pointer-sign'.
4048
4049`-Wstack-protector'
4050     This option is only active when `-fstack-protector' is active.  It
4051     warns about functions that will not be protected against stack
4052     smashing.
4053
4054`-Wno-mudflap'
4055     Suppress warnings about constructs that cannot be instrumented by
4056     `-fmudflap'.
4057
4058`-Woverlength-strings'
4059     Warn about string constants which are longer than the "minimum
4060     maximum" length specified in the C standard.  Modern compilers
4061     generally allow string constants which are much longer than the
4062     standard's minimum limit, but very portable programs should avoid
4063     using longer strings.
4064
4065     The limit applies _after_ string constant concatenation, and does
4066     not count the trailing NUL.  In C90, the limit was 509 characters;
4067     in C99, it was raised to 4095.  C++98 does not specify a normative
4068     minimum maximum, so we do not diagnose overlength strings in C++.
4069
4070     This option is implied by `-pedantic', and can be disabled with
4071     `-Wno-overlength-strings'.
4072
4073`-Wunsuffixed-float-constants (C and Objective-C only)'
4074     GCC will issue a warning for any floating constant that does not
4075     have a suffix.  When used together with `-Wsystem-headers' it will
4076     warn about such constants in system header files.  This can be
4077     useful when preparing code to use with the `FLOAT_CONST_DECIMAL64'
4078     pragma from the decimal floating-point extension to C99.
4079
4080
4081File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
4082
40833.9 Options for Debugging Your Program or GCC
4084=============================================
4085
4086GCC has various special options that are used for debugging either your
4087program or GCC:
4088
4089`-g'
4090     Produce debugging information in the operating system's native
4091     format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this
4092     debugging information.
4093
4094     On most systems that use stabs format, `-g' enables use of extra
4095     debugging information that only GDB can use; this extra information
4096     makes debugging work better in GDB but will probably make other
4097     debuggers crash or refuse to read the program.  If you want to
4098     control for certain whether to generate the extra information, use
4099     `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see
4100     below).
4101
4102     GCC allows you to use `-g' with `-O'.  The shortcuts taken by
4103     optimized code may occasionally produce surprising results: some
4104     variables you declared may not exist at all; flow of control may
4105     briefly move where you did not expect it; some statements may not
4106     be executed because they compute constant results or their values
4107     were already at hand; some statements may execute in different
4108     places because they were moved out of loops.
4109
4110     Nevertheless it proves possible to debug optimized output.  This
4111     makes it reasonable to use the optimizer for programs that might
4112     have bugs.
4113
4114     The following options are useful when GCC is generated with the
4115     capability for more than one debugging format.
4116
4117`-ggdb'
4118     Produce debugging information for use by GDB.  This means to use
4119     the most expressive format available (DWARF 2, stabs, or the
4120     native format if neither of those are supported), including GDB
4121     extensions if at all possible.
4122
4123`-gstabs'
4124     Produce debugging information in stabs format (if that is
4125     supported), without GDB extensions.  This is the format used by
4126     DBX on most BSD systems.  On MIPS, Alpha and System V Release 4
4127     systems this option produces stabs debugging output which is not
4128     understood by DBX or SDB.  On System V Release 4 systems this
4129     option requires the GNU assembler.
4130
4131`-feliminate-unused-debug-symbols'
4132     Produce debugging information in stabs format (if that is
4133     supported), for only symbols that are actually used.
4134
4135`-femit-class-debug-always'
4136     Instead of emitting debugging information for a C++ class in only
4137     one object file, emit it in all object files using the class.
4138     This option should be used only with debuggers that are unable to
4139     handle the way GCC normally emits debugging information for
4140     classes because using this option will increase the size of
4141     debugging information by as much as a factor of two.
4142
4143`-gstabs+'
4144     Produce debugging information in stabs format (if that is
4145     supported), using GNU extensions understood only by the GNU
4146     debugger (GDB).  The use of these extensions is likely to make
4147     other debuggers crash or refuse to read the program.
4148
4149`-gcoff'
4150     Produce debugging information in COFF format (if that is
4151     supported).  This is the format used by SDB on most System V
4152     systems prior to System V Release 4.
4153
4154`-gxcoff'
4155     Produce debugging information in XCOFF format (if that is
4156     supported).  This is the format used by the DBX debugger on IBM
4157     RS/6000 systems.
4158
4159`-gxcoff+'
4160     Produce debugging information in XCOFF format (if that is
4161     supported), using GNU extensions understood only by the GNU
4162     debugger (GDB).  The use of these extensions is likely to make
4163     other debuggers crash or refuse to read the program, and may cause
4164     assemblers other than the GNU assembler (GAS) to fail with an
4165     error.
4166
4167`-gdwarf-VERSION'
4168     Produce debugging information in DWARF format (if that is
4169     supported).  This is the format used by DBX on IRIX 6.  The value
4170     of VERSION may be either 2, 3 or 4; the default version is 2.
4171
4172     Note that with DWARF version 2 some ports require, and will always
4173     use, some non-conflicting DWARF 3 extensions in the unwind tables.
4174
4175     Version 4 may require GDB 7.0 and `-fvar-tracking-assignments' for
4176     maximum benefit.
4177
4178`-gstrict-dwarf'
4179     Disallow using extensions of later DWARF standard version than
4180     selected with `-gdwarf-VERSION'.  On most targets using
4181     non-conflicting DWARF extensions from later standard versions is
4182     allowed.
4183
4184`-gno-strict-dwarf'
4185     Allow using extensions of later DWARF standard version than
4186     selected with `-gdwarf-VERSION'.
4187
4188`-gvms'
4189     Produce debugging information in VMS debug format (if that is
4190     supported).  This is the format used by DEBUG on VMS systems.
4191
4192`-gLEVEL'
4193`-ggdbLEVEL'
4194`-gstabsLEVEL'
4195`-gcoffLEVEL'
4196`-gxcoffLEVEL'
4197`-gvmsLEVEL'
4198     Request debugging information and also use LEVEL to specify how
4199     much information.  The default level is 2.
4200
4201     Level 0 produces no debug information at all.  Thus, `-g0' negates
4202     `-g'.
4203
4204     Level 1 produces minimal information, enough for making backtraces
4205     in parts of the program that you don't plan to debug.  This
4206     includes descriptions of functions and external variables, but no
4207     information about local variables and no line numbers.
4208
4209     Level 3 includes extra information, such as all the macro
4210     definitions present in the program.  Some debuggers support macro
4211     expansion when you use `-g3'.
4212
4213     `-gdwarf-2' does not accept a concatenated debug level, because
4214     GCC used to support an option `-gdwarf' that meant to generate
4215     debug information in version 1 of the DWARF format (which is very
4216     different from version 2), and it would have been too confusing.
4217     That debug format is long obsolete, but the option cannot be
4218     changed now.  Instead use an additional `-gLEVEL' option to change
4219     the debug level for DWARF.
4220
4221`-gtoggle'
4222     Turn off generation of debug info, if leaving out this option
4223     would have generated it, or turn it on at level 2 otherwise.  The
4224     position of this argument in the command line does not matter, it
4225     takes effect after all other options are processed, and it does so
4226     only once, no matter how many times it is given.  This is mainly
4227     intended to be used with `-fcompare-debug'.
4228
4229`-fdump-final-insns[=FILE]'
4230     Dump the final internal representation (RTL) to FILE.  If the
4231     optional argument is omitted (or if FILE is `.'), the name of the
4232     dump file will be determined by appending `.gkd' to the
4233     compilation output file name.
4234
4235`-fcompare-debug[=OPTS]'
4236     If no error occurs during compilation, run the compiler a second
4237     time, adding OPTS and `-fcompare-debug-second' to the arguments
4238     passed to the second compilation.  Dump the final internal
4239     representation in both compilations, and print an error if they
4240     differ.
4241
4242     If the equal sign is omitted, the default `-gtoggle' is used.
4243
4244     The environment variable `GCC_COMPARE_DEBUG', if defined, non-empty
4245     and nonzero, implicitly enables `-fcompare-debug'.  If
4246     `GCC_COMPARE_DEBUG' is defined to a string starting with a dash,
4247     then it is used for OPTS, otherwise the default `-gtoggle' is used.
4248
4249     `-fcompare-debug=', with the equal sign but without OPTS, is
4250     equivalent to `-fno-compare-debug', which disables the dumping of
4251     the final representation and the second compilation, preventing
4252     even `GCC_COMPARE_DEBUG' from taking effect.
4253
4254     To verify full coverage during `-fcompare-debug' testing, set
4255     `GCC_COMPARE_DEBUG' to say `-fcompare-debug-not-overridden', which
4256     GCC will reject as an invalid option in any actual compilation
4257     (rather than preprocessing, assembly or linking).  To get just a
4258     warning, setting `GCC_COMPARE_DEBUG' to `-w%n-fcompare-debug not
4259     overridden' will do.
4260
4261`-fcompare-debug-second'
4262     This option is implicitly passed to the compiler for the second
4263     compilation requested by `-fcompare-debug', along with options to
4264     silence warnings, and omitting other options that would cause
4265     side-effect compiler outputs to files or to the standard output.
4266     Dump files and preserved temporary files are renamed so as to
4267     contain the `.gk' additional extension during the second
4268     compilation, to avoid overwriting those generated by the first.
4269
4270     When this option is passed to the compiler driver, it causes the
4271     _first_ compilation to be skipped, which makes it useful for little
4272     other than debugging the compiler proper.
4273
4274`-feliminate-dwarf2-dups'
4275     Compress DWARF2 debugging information by eliminating duplicated
4276     information about each symbol.  This option only makes sense when
4277     generating DWARF2 debugging information with `-gdwarf-2'.
4278
4279`-femit-struct-debug-baseonly'
4280     Emit debug information for struct-like types only when the base
4281     name of the compilation source file matches the base name of file
4282     in which the struct was defined.
4283
4284     This option substantially reduces the size of debugging
4285     information, but at significant potential loss in type information
4286     to the debugger.  See `-femit-struct-debug-reduced' for a less
4287     aggressive option.  See `-femit-struct-debug-detailed' for more
4288     detailed control.
4289
4290     This option works only with DWARF 2.
4291
4292`-femit-struct-debug-reduced'
4293     Emit debug information for struct-like types only when the base
4294     name of the compilation source file matches the base name of file
4295     in which the type was defined, unless the struct is a template or
4296     defined in a system header.
4297
4298     This option significantly reduces the size of debugging
4299     information, with some potential loss in type information to the
4300     debugger.  See `-femit-struct-debug-baseonly' for a more
4301     aggressive option.  See `-femit-struct-debug-detailed' for more
4302     detailed control.
4303
4304     This option works only with DWARF 2.
4305
4306`-femit-struct-debug-detailed[=SPEC-LIST]'
4307     Specify the struct-like types for which the compiler will generate
4308     debug information.  The intent is to reduce duplicate struct debug
4309     information between different object files within the same program.
4310
4311     This option is a detailed version of `-femit-struct-debug-reduced'
4312     and `-femit-struct-debug-baseonly', which will serve for most
4313     needs.
4314
4315     A specification has the syntax
4316     [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none')
4317
4318     The optional first word limits the specification to structs that
4319     are used directly (`dir:') or used indirectly (`ind:').  A struct
4320     type is used directly when it is the type of a variable, member.
4321     Indirect uses arise through pointers to structs.  That is, when
4322     use of an incomplete struct would be legal, the use is indirect.
4323     An example is `struct one direct; struct two * indirect;'.
4324
4325     The optional second word limits the specification to ordinary
4326     structs (`ord:') or generic structs (`gen:').  Generic structs are
4327     a bit complicated to explain.  For C++, these are non-explicit
4328     specializations of template classes, or non-template classes
4329     within the above.  Other programming languages have generics, but
4330     `-femit-struct-debug-detailed' does not yet implement them.
4331
4332     The third word specifies the source files for those structs for
4333     which the compiler will emit debug information.  The values `none'
4334     and `any' have the normal meaning.  The value `base' means that
4335     the base of name of the file in which the type declaration appears
4336     must match the base of the name of the main compilation file.  In
4337     practice, this means that types declared in `foo.c' and `foo.h'
4338     will have debug information, but types declared in other header
4339     will not.  The value `sys' means those types satisfying `base' or
4340     declared in system or compiler headers.
4341
4342     You may need to experiment to determine the best settings for your
4343     application.
4344
4345     The default is `-femit-struct-debug-detailed=all'.
4346
4347     This option works only with DWARF 2.
4348
4349`-fenable-icf-debug'
4350     Generate additional debug information to support identical code
4351     folding (ICF).  This option only works with DWARF version 2 or
4352     higher.
4353
4354`-fno-merge-debug-strings'
4355     Direct the linker to not merge together strings in the debugging
4356     information which are identical in different object files.
4357     Merging is not supported by all assemblers or linkers.  Merging
4358     decreases the size of the debug information in the output file at
4359     the cost of increasing link processing time.  Merging is enabled
4360     by default.
4361
4362`-fdebug-prefix-map=OLD=NEW'
4363     When compiling files in directory `OLD', record debugging
4364     information describing them as in `NEW' instead.
4365
4366`-fno-dwarf2-cfi-asm'
4367     Emit DWARF 2 unwind info as compiler generated `.eh_frame' section
4368     instead of using GAS `.cfi_*' directives.
4369
4370`-p'
4371     Generate extra code to write profile information suitable for the
4372     analysis program `prof'.  You must use this option when compiling
4373     the source files you want data about, and you must also use it when
4374     linking.
4375
4376`-pg'
4377     Generate extra code to write profile information suitable for the
4378     analysis program `gprof'.  You must use this option when compiling
4379     the source files you want data about, and you must also use it when
4380     linking.
4381
4382`-Q'
4383     Makes the compiler print out each function name as it is compiled,
4384     and print some statistics about each pass when it finishes.
4385
4386`-ftime-report'
4387     Makes the compiler print some statistics about the time consumed
4388     by each pass when it finishes.
4389
4390`-fmem-report'
4391     Makes the compiler print some statistics about permanent memory
4392     allocation when it finishes.
4393
4394`-fpre-ipa-mem-report'
4395
4396`-fpost-ipa-mem-report'
4397     Makes the compiler print some statistics about permanent memory
4398     allocation before or after interprocedural optimization.
4399
4400`-fprofile-arcs'
4401     Add code so that program flow "arcs" are instrumented.  During
4402     execution the program records how many times each branch and call
4403     is executed and how many times it is taken or returns.  When the
4404     compiled program exits it saves this data to a file called
4405     `AUXNAME.gcda' for each source file.  The data may be used for
4406     profile-directed optimizations (`-fbranch-probabilities'), or for
4407     test coverage analysis (`-ftest-coverage').  Each object file's
4408     AUXNAME is generated from the name of the output file, if
4409     explicitly specified and it is not the final executable, otherwise
4410     it is the basename of the source file.  In both cases any suffix
4411     is removed (e.g. `foo.gcda' for input file `dir/foo.c', or
4412     `dir/foo.gcda' for output file specified as `-o dir/foo.o').
4413     *Note Cross-profiling::.
4414
4415`--coverage'
4416     This option is used to compile and link code instrumented for
4417     coverage analysis.  The option is a synonym for `-fprofile-arcs'
4418     `-ftest-coverage' (when compiling) and `-lgcov' (when linking).
4419     See the documentation for those options for more details.
4420
4421        * Compile the source files with `-fprofile-arcs' plus
4422          optimization and code generation options.  For test coverage
4423          analysis, use the additional `-ftest-coverage' option.  You
4424          do not need to profile every source file in a program.
4425
4426        * Link your object files with `-lgcov' or `-fprofile-arcs' (the
4427          latter implies the former).
4428
4429        * Run the program on a representative workload to generate the
4430          arc profile information.  This may be repeated any number of
4431          times.  You can run concurrent instances of your program, and
4432          provided that the file system supports locking, the data
4433          files will be correctly updated.  Also `fork' calls are
4434          detected and correctly handled (double counting will not
4435          happen).
4436
4437        * For profile-directed optimizations, compile the source files
4438          again with the same optimization and code generation options
4439          plus `-fbranch-probabilities' (*note Options that Control
4440          Optimization: Optimize Options.).
4441
4442        * For test coverage analysis, use `gcov' to produce human
4443          readable information from the `.gcno' and `.gcda' files.
4444          Refer to the `gcov' documentation for further information.
4445
4446
4447     With `-fprofile-arcs', for each function of your program GCC
4448     creates a program flow graph, then finds a spanning tree for the
4449     graph.  Only arcs that are not on the spanning tree have to be
4450     instrumented: the compiler adds code to count the number of times
4451     that these arcs are executed.  When an arc is the only exit or
4452     only entrance to a block, the instrumentation code can be added to
4453     the block; otherwise, a new basic block must be created to hold
4454     the instrumentation code.
4455
4456`-ftest-coverage'
4457     Produce a notes file that the `gcov' code-coverage utility (*note
4458     `gcov'--a Test Coverage Program: Gcov.) can use to show program
4459     coverage.  Each source file's note file is called `AUXNAME.gcno'.
4460     Refer to the `-fprofile-arcs' option above for a description of
4461     AUXNAME and instructions on how to generate test coverage data.
4462     Coverage data will match the source files more closely, if you do
4463     not optimize.
4464
4465`-fdbg-cnt-list'
4466     Print the name and the counter upperbound for all debug counters.
4467
4468`-fdbg-cnt=COUNTER-VALUE-LIST'
4469     Set the internal debug counter upperbound. COUNTER-VALUE-LIST is a
4470     comma-separated list of NAME:VALUE pairs which sets the upperbound
4471     of each debug counter NAME to VALUE.  All debug counters have the
4472     initial upperbound of UINT_MAX, thus dbg_cnt() returns true always
4473     unless the upperbound is set by this option.  e.g. With
4474     -fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) will return true only
4475     for first 10 invocations and dbg_cnt(tail_call) will return false
4476     always.
4477
4478`-dLETTERS'
4479`-fdump-rtl-PASS'
4480     Says to make debugging dumps during compilation at times specified
4481     by LETTERS.  This is used for debugging the RTL-based passes of the
4482     compiler.  The file names for most of the dumps are made by
4483     appending a pass number and a word to the DUMPNAME, and the files
4484     are created in the directory of the output file.  DUMPNAME is
4485     generated from the name of the output file, if explicitly specified
4486     and it is not an executable, otherwise it is the basename of the
4487     source file. These switches may have different effects when `-E'
4488     is used for preprocessing.
4489
4490     Debug dumps can be enabled with a `-fdump-rtl' switch or some `-d'
4491     option LETTERS.  Here are the possible letters for use in PASS and
4492     LETTERS, and their meanings:
4493
4494    `-fdump-rtl-alignments'
4495          Dump after branch alignments have been computed.
4496
4497    `-fdump-rtl-asmcons'
4498          Dump after fixing rtl statements that have unsatisfied in/out
4499          constraints.
4500
4501    `-fdump-rtl-auto_inc_dec'
4502          Dump after auto-inc-dec discovery.  This pass is only run on
4503          architectures that have auto inc or auto dec instructions.
4504
4505    `-fdump-rtl-barriers'
4506          Dump after cleaning up the barrier instructions.
4507
4508    `-fdump-rtl-bbpart'
4509          Dump after partitioning hot and cold basic blocks.
4510
4511    `-fdump-rtl-bbro'
4512          Dump after block reordering.
4513
4514    `-fdump-rtl-btl1'
4515    `-fdump-rtl-btl2'
4516          `-fdump-rtl-btl1' and `-fdump-rtl-btl2' enable dumping after
4517          the two branch target load optimization passes.
4518
4519    `-fdump-rtl-bypass'
4520          Dump after jump bypassing and control flow optimizations.
4521
4522    `-fdump-rtl-combine'
4523          Dump after the RTL instruction combination pass.
4524
4525    `-fdump-rtl-compgotos'
4526          Dump after duplicating the computed gotos.
4527
4528    `-fdump-rtl-ce1'
4529    `-fdump-rtl-ce2'
4530    `-fdump-rtl-ce3'
4531          `-fdump-rtl-ce1', `-fdump-rtl-ce2', and `-fdump-rtl-ce3'
4532          enable dumping after the three if conversion passes.
4533
4534    `-fdump-rtl-cprop_hardreg'
4535          Dump after hard register copy propagation.
4536
4537    `-fdump-rtl-csa'
4538          Dump after combining stack adjustments.
4539
4540    `-fdump-rtl-cse1'
4541    `-fdump-rtl-cse2'
4542          `-fdump-rtl-cse1' and `-fdump-rtl-cse2' enable dumping after
4543          the two common sub-expression elimination passes.
4544
4545    `-fdump-rtl-dce'
4546          Dump after the standalone dead code elimination passes.
4547
4548    `-fdump-rtl-dbr'
4549          Dump after delayed branch scheduling.
4550
4551    `-fdump-rtl-dce1'
4552    `-fdump-rtl-dce2'
4553          `-fdump-rtl-dce1' and `-fdump-rtl-dce2' enable dumping after
4554          the two dead store elimination passes.
4555
4556    `-fdump-rtl-eh'
4557          Dump after finalization of EH handling code.
4558
4559    `-fdump-rtl-eh_ranges'
4560          Dump after conversion of EH handling range regions.
4561
4562    `-fdump-rtl-expand'
4563          Dump after RTL generation.
4564
4565    `-fdump-rtl-fwprop1'
4566    `-fdump-rtl-fwprop2'
4567          `-fdump-rtl-fwprop1' and `-fdump-rtl-fwprop2' enable dumping
4568          after the two forward propagation passes.
4569
4570    `-fdump-rtl-gcse1'
4571    `-fdump-rtl-gcse2'
4572          `-fdump-rtl-gcse1' and `-fdump-rtl-gcse2' enable dumping
4573          after global common subexpression elimination.
4574
4575    `-fdump-rtl-init-regs'
4576          Dump after the initialization of the registers.
4577
4578    `-fdump-rtl-initvals'
4579          Dump after the computation of the initial value sets.
4580
4581    `-fdump-rtl-into_cfglayout'
4582          Dump after converting to cfglayout mode.
4583
4584    `-fdump-rtl-ira'
4585          Dump after iterated register allocation.
4586
4587    `-fdump-rtl-jump'
4588          Dump after the second jump optimization.
4589
4590    `-fdump-rtl-loop2'
4591          `-fdump-rtl-loop2' enables dumping after the rtl loop
4592          optimization passes.
4593
4594    `-fdump-rtl-mach'
4595          Dump after performing the machine dependent reorganization
4596          pass, if that pass exists.
4597
4598    `-fdump-rtl-mode_sw'
4599          Dump after removing redundant mode switches.
4600
4601    `-fdump-rtl-rnreg'
4602          Dump after register renumbering.
4603
4604    `-fdump-rtl-outof_cfglayout'
4605          Dump after converting from cfglayout mode.
4606
4607    `-fdump-rtl-peephole2'
4608          Dump after the peephole pass.
4609
4610    `-fdump-rtl-postreload'
4611          Dump after post-reload optimizations.
4612
4613    `-fdump-rtl-pro_and_epilogue'
4614          Dump after generating the function pro and epilogues.
4615
4616    `-fdump-rtl-regmove'
4617          Dump after the register move pass.
4618
4619    `-fdump-rtl-sched1'
4620    `-fdump-rtl-sched2'
4621          `-fdump-rtl-sched1' and `-fdump-rtl-sched2' enable dumping
4622          after the basic block scheduling passes.
4623
4624    `-fdump-rtl-see'
4625          Dump after sign extension elimination.
4626
4627    `-fdump-rtl-seqabstr'
4628          Dump after common sequence discovery.
4629
4630    `-fdump-rtl-shorten'
4631          Dump after shortening branches.
4632
4633    `-fdump-rtl-sibling'
4634          Dump after sibling call optimizations.
4635
4636    `-fdump-rtl-split1'
4637    `-fdump-rtl-split2'
4638    `-fdump-rtl-split3'
4639    `-fdump-rtl-split4'
4640    `-fdump-rtl-split5'
4641          `-fdump-rtl-split1', `-fdump-rtl-split2',
4642          `-fdump-rtl-split3', `-fdump-rtl-split4' and
4643          `-fdump-rtl-split5' enable dumping after five rounds of
4644          instruction splitting.
4645
4646    `-fdump-rtl-sms'
4647          Dump after modulo scheduling.  This pass is only run on some
4648          architectures.
4649
4650    `-fdump-rtl-stack'
4651          Dump after conversion from GCC's "flat register file"
4652          registers to the x87's stack-like registers.  This pass is
4653          only run on x86 variants.
4654
4655    `-fdump-rtl-subreg1'
4656    `-fdump-rtl-subreg2'
4657          `-fdump-rtl-subreg1' and `-fdump-rtl-subreg2' enable dumping
4658          after the two subreg expansion passes.
4659
4660    `-fdump-rtl-unshare'
4661          Dump after all rtl has been unshared.
4662
4663    `-fdump-rtl-vartrack'
4664          Dump after variable tracking.
4665
4666    `-fdump-rtl-vregs'
4667          Dump after converting virtual registers to hard registers.
4668
4669    `-fdump-rtl-web'
4670          Dump after live range splitting.
4671
4672    `-fdump-rtl-regclass'
4673    `-fdump-rtl-subregs_of_mode_init'
4674    `-fdump-rtl-subregs_of_mode_finish'
4675    `-fdump-rtl-dfinit'
4676    `-fdump-rtl-dfinish'
4677          These dumps are defined but always produce empty files.
4678
4679    `-fdump-rtl-all'
4680          Produce all the dumps listed above.
4681
4682    `-dA'
4683          Annotate the assembler output with miscellaneous debugging
4684          information.
4685
4686    `-dD'
4687          Dump all macro definitions, at the end of preprocessing, in
4688          addition to normal output.
4689
4690    `-dH'
4691          Produce a core dump whenever an error occurs.
4692
4693    `-dm'
4694          Print statistics on memory usage, at the end of the run, to
4695          standard error.
4696
4697    `-dp'
4698          Annotate the assembler output with a comment indicating which
4699          pattern and alternative was used.  The length of each
4700          instruction is also printed.
4701
4702    `-dP'
4703          Dump the RTL in the assembler output as a comment before each
4704          instruction.  Also turns on `-dp' annotation.
4705
4706    `-dv'
4707          For each of the other indicated dump files
4708          (`-fdump-rtl-PASS'), dump a representation of the control
4709          flow graph suitable for viewing with VCG to `FILE.PASS.vcg'.
4710
4711    `-dx'
4712          Just generate RTL for a function instead of compiling it.
4713          Usually used with `-fdump-rtl-expand'.
4714
4715    `-dy'
4716          Dump debugging information during parsing, to standard error.
4717
4718`-fdump-noaddr'
4719     When doing debugging dumps, suppress address output.  This makes
4720     it more feasible to use diff on debugging dumps for compiler
4721     invocations with different compiler binaries and/or different text
4722     / bss / data / heap / stack / dso start locations.
4723
4724`-fdump-unnumbered'
4725     When doing debugging dumps, suppress instruction numbers and
4726     address output.  This makes it more feasible to use diff on
4727     debugging dumps for compiler invocations with different options,
4728     in particular with and without `-g'.
4729
4730`-fdump-unnumbered-links'
4731     When doing debugging dumps (see `-d' option above), suppress
4732     instruction numbers for the links to the previous and next
4733     instructions in a sequence.
4734
4735`-fdump-translation-unit (C++ only)'
4736`-fdump-translation-unit-OPTIONS (C++ only)'
4737     Dump a representation of the tree structure for the entire
4738     translation unit to a file.  The file name is made by appending
4739     `.tu' to the source file name, and the file is created in the same
4740     directory as the output file.  If the `-OPTIONS' form is used,
4741     OPTIONS controls the details of the dump as described for the
4742     `-fdump-tree' options.
4743
4744`-fdump-class-hierarchy (C++ only)'
4745`-fdump-class-hierarchy-OPTIONS (C++ only)'
4746     Dump a representation of each class's hierarchy and virtual
4747     function table layout to a file.  The file name is made by
4748     appending `.class' to the source file name, and the file is
4749     created in the same directory as the output file.  If the
4750     `-OPTIONS' form is used, OPTIONS controls the details of the dump
4751     as described for the `-fdump-tree' options.
4752
4753`-fdump-ipa-SWITCH'
4754     Control the dumping at various stages of inter-procedural analysis
4755     language tree to a file.  The file name is generated by appending a
4756     switch specific suffix to the source file name, and the file is
4757     created in the same directory as the output file.  The following
4758     dumps are possible:
4759
4760    `all'
4761          Enables all inter-procedural analysis dumps.
4762
4763    `cgraph'
4764          Dumps information about call-graph optimization, unused
4765          function removal, and inlining decisions.
4766
4767    `inline'
4768          Dump after function inlining.
4769
4770
4771`-fdump-statistics-OPTION'
4772     Enable and control dumping of pass statistics in a separate file.
4773     The file name is generated by appending a suffix ending in
4774     `.statistics' to the source file name, and the file is created in
4775     the same directory as the output file.  If the `-OPTION' form is
4776     used, `-stats' will cause counters to be summed over the whole
4777     compilation unit while `-details' will dump every event as the
4778     passes generate them.  The default with no option is to sum
4779     counters for each function compiled.
4780
4781`-fdump-tree-SWITCH'
4782`-fdump-tree-SWITCH-OPTIONS'
4783     Control the dumping at various stages of processing the
4784     intermediate language tree to a file.  The file name is generated
4785     by appending a switch specific suffix to the source file name, and
4786     the file is created in the same directory as the output file.  If
4787     the `-OPTIONS' form is used, OPTIONS is a list of `-' separated
4788     options that control the details of the dump.  Not all options are
4789     applicable to all dumps, those which are not meaningful will be
4790     ignored.  The following options are available
4791
4792    `address'
4793          Print the address of each node.  Usually this is not
4794          meaningful as it changes according to the environment and
4795          source file.  Its primary use is for tying up a dump file
4796          with a debug environment.
4797
4798    `asmname'
4799          If `DECL_ASSEMBLER_NAME' has been set for a given decl, use
4800          that in the dump instead of `DECL_NAME'.  Its primary use is
4801          ease of use working backward from mangled names in the
4802          assembly file.
4803
4804    `slim'
4805          Inhibit dumping of members of a scope or body of a function
4806          merely because that scope has been reached.  Only dump such
4807          items when they are directly reachable by some other path.
4808          When dumping pretty-printed trees, this option inhibits
4809          dumping the bodies of control structures.
4810
4811    `raw'
4812          Print a raw representation of the tree.  By default, trees are
4813          pretty-printed into a C-like representation.
4814
4815    `details'
4816          Enable more detailed dumps (not honored by every dump option).
4817
4818    `stats'
4819          Enable dumping various statistics about the pass (not honored
4820          by every dump option).
4821
4822    `blocks'
4823          Enable showing basic block boundaries (disabled in raw dumps).
4824
4825    `vops'
4826          Enable showing virtual operands for every statement.
4827
4828    `lineno'
4829          Enable showing line numbers for statements.
4830
4831    `uid'
4832          Enable showing the unique ID (`DECL_UID') for each variable.
4833
4834    `verbose'
4835          Enable showing the tree dump for each statement.
4836
4837    `eh'
4838          Enable showing the EH region number holding each statement.
4839
4840    `all'
4841          Turn on all options, except `raw', `slim', `verbose' and
4842          `lineno'.
4843
4844     The following tree dumps are possible:
4845    `original'
4846          Dump before any tree based optimization, to `FILE.original'.
4847
4848    `optimized'
4849          Dump after all tree based optimization, to `FILE.optimized'.
4850
4851    `gimple'
4852          Dump each function before and after the gimplification pass
4853          to a file.  The file name is made by appending `.gimple' to
4854          the source file name.
4855
4856    `cfg'
4857          Dump the control flow graph of each function to a file.  The
4858          file name is made by appending `.cfg' to the source file name.
4859
4860    `vcg'
4861          Dump the control flow graph of each function to a file in VCG
4862          format.  The file name is made by appending `.vcg' to the
4863          source file name.  Note that if the file contains more than
4864          one function, the generated file cannot be used directly by
4865          VCG.  You will need to cut and paste each function's graph
4866          into its own separate file first.
4867
4868    `ch'
4869          Dump each function after copying loop headers.  The file name
4870          is made by appending `.ch' to the source file name.
4871
4872    `ssa'
4873          Dump SSA related information to a file.  The file name is
4874          made by appending `.ssa' to the source file name.
4875
4876    `alias'
4877          Dump aliasing information for each function.  The file name
4878          is made by appending `.alias' to the source file name.
4879
4880    `ccp'
4881          Dump each function after CCP.  The file name is made by
4882          appending `.ccp' to the source file name.
4883
4884    `storeccp'
4885          Dump each function after STORE-CCP.  The file name is made by
4886          appending `.storeccp' to the source file name.
4887
4888    `pre'
4889          Dump trees after partial redundancy elimination.  The file
4890          name is made by appending `.pre' to the source file name.
4891
4892    `fre'
4893          Dump trees after full redundancy elimination.  The file name
4894          is made by appending `.fre' to the source file name.
4895
4896    `copyprop'
4897          Dump trees after copy propagation.  The file name is made by
4898          appending `.copyprop' to the source file name.
4899
4900    `store_copyprop'
4901          Dump trees after store copy-propagation.  The file name is
4902          made by appending `.store_copyprop' to the source file name.
4903
4904    `dce'
4905          Dump each function after dead code elimination.  The file
4906          name is made by appending `.dce' to the source file name.
4907
4908    `mudflap'
4909          Dump each function after adding mudflap instrumentation.  The
4910          file name is made by appending `.mudflap' to the source file
4911          name.
4912
4913    `sra'
4914          Dump each function after performing scalar replacement of
4915          aggregates.  The file name is made by appending `.sra' to the
4916          source file name.
4917
4918    `sink'
4919          Dump each function after performing code sinking.  The file
4920          name is made by appending `.sink' to the source file name.
4921
4922    `dom'
4923          Dump each function after applying dominator tree
4924          optimizations.  The file name is made by appending `.dom' to
4925          the source file name.
4926
4927    `dse'
4928          Dump each function after applying dead store elimination.
4929          The file name is made by appending `.dse' to the source file
4930          name.
4931
4932    `phiopt'
4933          Dump each function after optimizing PHI nodes into
4934          straightline code.  The file name is made by appending
4935          `.phiopt' to the source file name.
4936
4937    `forwprop'
4938          Dump each function after forward propagating single use
4939          variables.  The file name is made by appending `.forwprop' to
4940          the source file name.
4941
4942    `copyrename'
4943          Dump each function after applying the copy rename
4944          optimization.  The file name is made by appending
4945          `.copyrename' to the source file name.
4946
4947    `nrv'
4948          Dump each function after applying the named return value
4949          optimization on generic trees.  The file name is made by
4950          appending `.nrv' to the source file name.
4951
4952    `vect'
4953          Dump each function after applying vectorization of loops.
4954          The file name is made by appending `.vect' to the source file
4955          name.
4956
4957    `slp'
4958          Dump each function after applying vectorization of basic
4959          blocks.  The file name is made by appending `.slp' to the
4960          source file name.
4961
4962    `vrp'
4963          Dump each function after Value Range Propagation (VRP).  The
4964          file name is made by appending `.vrp' to the source file name.
4965
4966    `all'
4967          Enable all the available tree dumps with the flags provided
4968          in this option.
4969
4970`-ftree-vectorizer-verbose=N'
4971     This option controls the amount of debugging output the vectorizer
4972     prints.  This information is written to standard error, unless
4973     `-fdump-tree-all' or `-fdump-tree-vect' is specified, in which
4974     case it is output to the usual dump listing file, `.vect'.  For
4975     N=0 no diagnostic information is reported.  If N=1 the vectorizer
4976     reports each loop that got vectorized, and the total number of
4977     loops that got vectorized.  If N=2 the vectorizer also reports
4978     non-vectorized loops that passed the first analysis phase
4979     (vect_analyze_loop_form) - i.e. countable, inner-most, single-bb,
4980     single-entry/exit loops.  This is the same verbosity level that
4981     `-fdump-tree-vect-stats' uses.  Higher verbosity levels mean
4982     either more information dumped for each reported loop, or same
4983     amount of information reported for more loops: if N=3, vectorizer
4984     cost model information is reported.  If N=4, alignment related
4985     information is added to the reports.  If N=5, data-references
4986     related information (e.g. memory dependences, memory
4987     access-patterns) is added to the reports.  If N=6, the vectorizer
4988     reports also non-vectorized inner-most loops that did not pass the
4989     first analysis phase (i.e., may not be countable, or may have
4990     complicated control-flow).  If N=7, the vectorizer reports also
4991     non-vectorized nested loops.  If N=8, SLP related information is
4992     added to the reports.  For N=9, all the information the vectorizer
4993     generates during its analysis and transformation is reported.
4994     This is the same verbosity level that `-fdump-tree-vect-details'
4995     uses.
4996
4997`-frandom-seed=STRING'
4998     This option provides a seed that GCC uses when it would otherwise
4999     use random numbers.  It is used to generate certain symbol names
5000     that have to be different in every compiled file.  It is also used
5001     to place unique stamps in coverage data files and the object files
5002     that produce them.  You can use the `-frandom-seed' option to
5003     produce reproducibly identical object files.
5004
5005     The STRING should be different for every file you compile.
5006
5007`-fsched-verbose=N'
5008     On targets that use instruction scheduling, this option controls
5009     the amount of debugging output the scheduler prints.  This
5010     information is written to standard error, unless
5011     `-fdump-rtl-sched1' or `-fdump-rtl-sched2' is specified, in which
5012     case it is output to the usual dump listing file, `.sched1' or
5013     `.sched2' respectively.  However for N greater than nine, the
5014     output is always printed to standard error.
5015
5016     For N greater than zero, `-fsched-verbose' outputs the same
5017     information as `-fdump-rtl-sched1' and `-fdump-rtl-sched2'.  For N
5018     greater than one, it also output basic block probabilities,
5019     detailed ready list information and unit/insn info.  For N greater
5020     than two, it includes RTL at abort point, control-flow and regions
5021     info.  And for N over four, `-fsched-verbose' also includes
5022     dependence info.
5023
5024`-save-temps'
5025`-save-temps=cwd'
5026     Store the usual "temporary" intermediate files permanently; place
5027     them in the current directory and name them based on the source
5028     file.  Thus, compiling `foo.c' with `-c -save-temps' would produce
5029     files `foo.i' and `foo.s', as well as `foo.o'.  This creates a
5030     preprocessed `foo.i' output file even though the compiler now
5031     normally uses an integrated preprocessor.
5032
5033     When used in combination with the `-x' command line option,
5034     `-save-temps' is sensible enough to avoid over writing an input
5035     source file with the same extension as an intermediate file.  The
5036     corresponding intermediate file may be obtained by renaming the
5037     source file before using `-save-temps'.
5038
5039     If you invoke GCC in parallel, compiling several different source
5040     files that share a common base name in different subdirectories or
5041     the same source file compiled for multiple output destinations, it
5042     is likely that the different parallel compilers will interfere
5043     with each other, and overwrite the temporary files.  For instance:
5044
5045          gcc -save-temps -o outdir1/foo.o indir1/foo.c&
5046          gcc -save-temps -o outdir2/foo.o indir2/foo.c&
5047
5048     may result in `foo.i' and `foo.o' being written to simultaneously
5049     by both compilers.
5050
5051`-save-temps=obj'
5052     Store the usual "temporary" intermediate files permanently.  If the
5053     `-o' option is used, the temporary files are based on the object
5054     file.  If the `-o' option is not used, the `-save-temps=obj'
5055     switch behaves like `-save-temps'.
5056
5057     For example:
5058
5059          gcc -save-temps=obj -c foo.c
5060          gcc -save-temps=obj -c bar.c -o dir/xbar.o
5061          gcc -save-temps=obj foobar.c -o dir2/yfoobar
5062
5063     would create `foo.i', `foo.s', `dir/xbar.i', `dir/xbar.s',
5064     `dir2/yfoobar.i', `dir2/yfoobar.s', and `dir2/yfoobar.o'.
5065
5066`-time[=FILE]'
5067     Report the CPU time taken by each subprocess in the compilation
5068     sequence.  For C source files, this is the compiler proper and
5069     assembler (plus the linker if linking is done).
5070
5071     Without the specification of an output file, the output looks like
5072     this:
5073
5074          # cc1 0.12 0.01
5075          # as 0.00 0.01
5076
5077     The first number on each line is the "user time", that is time
5078     spent executing the program itself.  The second number is "system
5079     time", time spent executing operating system routines on behalf of
5080     the program.  Both numbers are in seconds.
5081
5082     With the specification of an output file, the output is appended
5083     to the named file, and it looks like this:
5084
5085          0.12 0.01 cc1 OPTIONS
5086          0.00 0.01 as OPTIONS
5087
5088     The "user time" and the "system time" are moved before the program
5089     name, and the options passed to the program are displayed, so that
5090     one can later tell what file was being compiled, and with which
5091     options.
5092
5093`-fvar-tracking'
5094     Run variable tracking pass.  It computes where variables are
5095     stored at each position in code.  Better debugging information is
5096     then generated (if the debugging information format supports this
5097     information).
5098
5099     It is enabled by default when compiling with optimization (`-Os',
5100     `-O', `-O2', ...), debugging information (`-g') and the debug info
5101     format supports it.
5102
5103`-fvar-tracking-assignments'
5104     Annotate assignments to user variables early in the compilation and
5105     attempt to carry the annotations over throughout the compilation
5106     all the way to the end, in an attempt to improve debug information
5107     while optimizing.  Use of `-gdwarf-4' is recommended along with it.
5108
5109     It can be enabled even if var-tracking is disabled, in which case
5110     annotations will be created and maintained, but discarded at the
5111     end.
5112
5113`-fvar-tracking-assignments-toggle'
5114     Toggle `-fvar-tracking-assignments', in the same way that
5115     `-gtoggle' toggles `-g'.
5116
5117`-print-file-name=LIBRARY'
5118     Print the full absolute name of the library file LIBRARY that
5119     would be used when linking--and don't do anything else.  With this
5120     option, GCC does not compile or link anything; it just prints the
5121     file name.
5122
5123`-print-multi-directory'
5124     Print the directory name corresponding to the multilib selected by
5125     any other switches present in the command line.  This directory is
5126     supposed to exist in `GCC_EXEC_PREFIX'.
5127
5128`-print-multi-lib'
5129     Print the mapping from multilib directory names to compiler
5130     switches that enable them.  The directory name is separated from
5131     the switches by `;', and each switch starts with an `@' instead of
5132     the `-', without spaces between multiple switches.  This is
5133     supposed to ease shell-processing.
5134
5135`-print-multi-os-directory'
5136     Print the path to OS libraries for the selected multilib, relative
5137     to some `lib' subdirectory.  If OS libraries are present in the
5138     `lib' subdirectory and no multilibs are used, this is usually just
5139     `.', if OS libraries are present in `libSUFFIX' sibling
5140     directories this prints e.g. `../lib64', `../lib' or `../lib32',
5141     or if OS libraries are present in `lib/SUBDIR' subdirectories it
5142     prints e.g. `amd64', `sparcv9' or `ev6'.
5143
5144`-print-prog-name=PROGRAM'
5145     Like `-print-file-name', but searches for a program such as `cpp'.
5146
5147`-print-libgcc-file-name'
5148     Same as `-print-file-name=libgcc.a'.
5149
5150     This is useful when you use `-nostdlib' or `-nodefaultlibs' but
5151     you do want to link with `libgcc.a'.  You can do
5152
5153          gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
5154
5155`-print-search-dirs'
5156     Print the name of the configured installation directory and a list
5157     of program and library directories `gcc' will search--and don't do
5158     anything else.
5159
5160     This is useful when `gcc' prints the error message `installation
5161     problem, cannot exec cpp0: No such file or directory'.  To resolve
5162     this you either need to put `cpp0' and the other compiler
5163     components where `gcc' expects to find them, or you can set the
5164     environment variable `GCC_EXEC_PREFIX' to the directory where you
5165     installed them.  Don't forget the trailing `/'.  *Note Environment
5166     Variables::.
5167
5168`-print-sysroot'
5169     Print the target sysroot directory that will be used during
5170     compilation.  This is the target sysroot specified either at
5171     configure time or using the `--sysroot' option, possibly with an
5172     extra suffix that depends on compilation options.  If no target
5173     sysroot is specified, the option prints nothing.
5174
5175`-print-sysroot-headers-suffix'
5176     Print the suffix added to the target sysroot when searching for
5177     headers, or give an error if the compiler is not configured with
5178     such a suffix--and don't do anything else.
5179
5180`-dumpmachine'
5181     Print the compiler's target machine (for example,
5182     `i686-pc-linux-gnu')--and don't do anything else.
5183
5184`-dumpversion'
5185     Print the compiler version (for example, `3.0')--and don't do
5186     anything else.
5187
5188`-dumpspecs'
5189     Print the compiler's built-in specs--and don't do anything else.
5190     (This is used when GCC itself is being built.)  *Note Spec Files::.
5191
5192`-feliminate-unused-debug-types'
5193     Normally, when producing DWARF2 output, GCC will emit debugging
5194     information for all types declared in a compilation unit,
5195     regardless of whether or not they are actually used in that
5196     compilation unit.  Sometimes this is useful, such as if, in the
5197     debugger, you want to cast a value to a type that is not actually
5198     used in your program (but is declared).  More often, however, this
5199     results in a significant amount of wasted space.  With this
5200     option, GCC will avoid producing debug symbol output for types
5201     that are nowhere used in the source file being compiled.
5202
5203
5204File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC
5205
52063.10 Options That Control Optimization
5207======================================
5208
5209These options control various sorts of optimizations.
5210
5211 Without any optimization option, the compiler's goal is to reduce the
5212cost of compilation and to make debugging produce the expected results.
5213Statements are independent: if you stop the program with a breakpoint
5214between statements, you can then assign a new value to any variable or
5215change the program counter to any other statement in the function and
5216get exactly the results you would expect from the source code.
5217
5218 Turning on optimization flags makes the compiler attempt to improve
5219the performance and/or code size at the expense of compilation time and
5220possibly the ability to debug the program.
5221
5222 The compiler performs optimization based on the knowledge it has of the
5223program.  Compiling multiple files at once to a single output file mode
5224allows the compiler to use information gained from all of the files
5225when compiling each of them.
5226
5227 Not all optimizations are controlled directly by a flag.  Only
5228optimizations that have a flag are listed in this section.
5229
5230 Most optimizations are only enabled if an `-O' level is set on the
5231command line.  Otherwise they are disabled, even if individual
5232optimization flags are specified.
5233
5234 Depending on the target and how GCC was configured, a slightly
5235different set of optimizations may be enabled at each `-O' level than
5236those listed here.  You can invoke GCC with `-Q --help=optimizers' to
5237find out the exact set of optimizations that are enabled at each level.
5238*Note Overall Options::, for examples.
5239
5240`-O'
5241`-O1'
5242     Optimize.  Optimizing compilation takes somewhat more time, and a
5243     lot more memory for a large function.
5244
5245     With `-O', the compiler tries to reduce code size and execution
5246     time, without performing any optimizations that take a great deal
5247     of compilation time.
5248
5249     `-O' turns on the following optimization flags:
5250          -fauto-inc-dec
5251          -fcprop-registers
5252          -fdce
5253          -fdefer-pop
5254          -fdelayed-branch
5255          -fdse
5256          -fguess-branch-probability
5257          -fif-conversion2
5258          -fif-conversion
5259          -fipa-pure-const
5260          -fipa-reference
5261          -fmerge-constants
5262          -fsplit-wide-types
5263          -ftree-builtin-call-dce
5264          -ftree-ccp
5265          -ftree-ch
5266          -ftree-copyrename
5267          -ftree-dce
5268          -ftree-dominator-opts
5269          -ftree-dse
5270          -ftree-forwprop
5271          -ftree-fre
5272          -ftree-phiprop
5273          -ftree-sra
5274          -ftree-pta
5275          -ftree-ter
5276          -funit-at-a-time
5277
5278     `-O' also turns on `-fomit-frame-pointer' on machines where doing
5279     so does not interfere with debugging.
5280
5281`-O2'
5282     Optimize even more.  GCC performs nearly all supported
5283     optimizations that do not involve a space-speed tradeoff.  As
5284     compared to `-O', this option increases both compilation time and
5285     the performance of the generated code.
5286
5287     `-O2' turns on all optimization flags specified by `-O'.  It also
5288     turns on the following optimization flags:
5289          -fthread-jumps
5290          -falign-functions  -falign-jumps
5291          -falign-loops  -falign-labels
5292          -fcaller-saves
5293          -fcrossjumping
5294          -fcse-follow-jumps  -fcse-skip-blocks
5295          -fdelete-null-pointer-checks
5296          -fexpensive-optimizations
5297          -fgcse  -fgcse-lm
5298          -finline-small-functions
5299          -findirect-inlining
5300          -fipa-sra
5301          -foptimize-sibling-calls
5302          -fpeephole2
5303          -fregmove
5304          -freorder-blocks  -freorder-functions
5305          -frerun-cse-after-loop
5306          -fsched-interblock  -fsched-spec
5307          -fschedule-insns  -fschedule-insns2
5308          -fstrict-aliasing -fstrict-overflow
5309          -ftree-switch-conversion
5310          -ftree-pre
5311          -ftree-vrp
5312
5313     Please note the warning under `-fgcse' about invoking `-O2' on
5314     programs that use computed gotos.
5315
5316`-O3'
5317     Optimize yet more.  `-O3' turns on all optimizations specified by
5318     `-O2' and also turns on the `-finline-functions',
5319     `-funswitch-loops', `-fpredictive-commoning',
5320     `-fgcse-after-reload', `-ftree-vectorize' and `-fipa-cp-clone'
5321     options.
5322
5323`-O0'
5324     Reduce compilation time and make debugging produce the expected
5325     results.  This is the default.
5326
5327`-Os'
5328     Optimize for size.  `-Os' enables all `-O2' optimizations that do
5329     not typically increase code size.  It also performs further
5330     optimizations designed to reduce code size.
5331
5332     `-Os' disables the following optimization flags:
5333          -falign-functions  -falign-jumps  -falign-loops
5334          -falign-labels  -freorder-blocks  -freorder-blocks-and-partition
5335          -fprefetch-loop-arrays  -ftree-vect-loop-version
5336
5337     If you use multiple `-O' options, with or without level numbers,
5338     the last such option is the one that is effective.
5339
5340 Options of the form `-fFLAG' specify machine-independent flags.  Most
5341flags have both positive and negative forms; the negative form of
5342`-ffoo' would be `-fno-foo'.  In the table below, only one of the forms
5343is listed--the one you typically will use.  You can figure out the
5344other form by either removing `no-' or adding it.
5345
5346 The following options control specific optimizations.  They are either
5347activated by `-O' options or are related to ones that are.  You can use
5348the following flags in the rare cases when "fine-tuning" of
5349optimizations to be performed is desired.
5350
5351`-fno-default-inline'
5352     Do not make member functions inline by default merely because they
5353     are defined inside the class scope (C++ only).  Otherwise, when
5354     you specify `-O', member functions defined inside class scope are
5355     compiled inline by default; i.e., you don't need to add `inline'
5356     in front of the member function name.
5357
5358`-fno-defer-pop'
5359     Always pop the arguments to each function call as soon as that
5360     function returns.  For machines which must pop arguments after a
5361     function call, the compiler normally lets arguments accumulate on
5362     the stack for several function calls and pops them all at once.
5363
5364     Disabled at levels `-O', `-O2', `-O3', `-Os'.
5365
5366`-fforward-propagate'
5367     Perform a forward propagation pass on RTL.  The pass tries to
5368     combine two instructions and checks if the result can be
5369     simplified.  If loop unrolling is active, two passes are performed
5370     and the second is scheduled after loop unrolling.
5371
5372     This option is enabled by default at optimization levels `-O',
5373     `-O2', `-O3', `-Os'.
5374
5375`-fomit-frame-pointer'
5376     Don't keep the frame pointer in a register for functions that
5377     don't need one.  This avoids the instructions to save, set up and
5378     restore frame pointers; it also makes an extra register available
5379     in many functions.  *It also makes debugging impossible on some
5380     machines.*
5381
5382     On some machines, such as the VAX, this flag has no effect, because
5383     the standard calling sequence automatically handles the frame
5384     pointer and nothing is saved by pretending it doesn't exist.  The
5385     machine-description macro `FRAME_POINTER_REQUIRED' controls
5386     whether a target machine supports this flag.  *Note Register
5387     Usage: (gccint)Registers.
5388
5389     Enabled at levels `-O', `-O2', `-O3', `-Os'.
5390
5391`-foptimize-sibling-calls'
5392     Optimize sibling and tail recursive calls.
5393
5394     Enabled at levels `-O2', `-O3', `-Os'.
5395
5396`-fno-inline'
5397     Don't pay attention to the `inline' keyword.  Normally this option
5398     is used to keep the compiler from expanding any functions inline.
5399     Note that if you are not optimizing, no functions can be expanded
5400     inline.
5401
5402`-finline-small-functions'
5403     Integrate functions into their callers when their body is smaller
5404     than expected function call code (so overall size of program gets
5405     smaller).  The compiler heuristically decides which functions are
5406     simple enough to be worth integrating in this way.
5407
5408     Enabled at level `-O2'.
5409
5410`-findirect-inlining'
5411     Inline also indirect calls that are discovered to be known at
5412     compile time thanks to previous inlining.  This option has any
5413     effect only when inlining itself is turned on by the
5414     `-finline-functions' or `-finline-small-functions' options.
5415
5416     Enabled at level `-O2'.
5417
5418`-finline-functions'
5419     Integrate all simple functions into their callers.  The compiler
5420     heuristically decides which functions are simple enough to be worth
5421     integrating in this way.
5422
5423     If all calls to a given function are integrated, and the function
5424     is declared `static', then the function is normally not output as
5425     assembler code in its own right.
5426
5427     Enabled at level `-O3'.
5428
5429`-finline-functions-called-once'
5430     Consider all `static' functions called once for inlining into their
5431     caller even if they are not marked `inline'.  If a call to a given
5432     function is integrated, then the function is not output as
5433     assembler code in its own right.
5434
5435     Enabled at levels `-O1', `-O2', `-O3' and `-Os'.
5436
5437`-fearly-inlining'
5438     Inline functions marked by `always_inline' and functions whose
5439     body seems smaller than the function call overhead early before
5440     doing `-fprofile-generate' instrumentation and real inlining pass.
5441     Doing so makes profiling significantly cheaper and usually
5442     inlining faster on programs having large chains of nested wrapper
5443     functions.
5444
5445     Enabled by default.
5446
5447`-fipa-sra'
5448     Perform interprocedural scalar replacement of aggregates, removal
5449     of unused parameters and replacement of parameters passed by
5450     reference by parameters passed by value.
5451
5452     Enabled at levels `-O2', `-O3' and `-Os'.
5453
5454`-finline-limit=N'
5455     By default, GCC limits the size of functions that can be inlined.
5456     This flag allows coarse control of this limit.  N is the size of
5457     functions that can be inlined in number of pseudo instructions.
5458
5459     Inlining is actually controlled by a number of parameters, which
5460     may be specified individually by using `--param NAME=VALUE'.  The
5461     `-finline-limit=N' option sets some of these parameters as follows:
5462
5463    `max-inline-insns-single'
5464          is set to N/2.
5465
5466    `max-inline-insns-auto'
5467          is set to N/2.
5468
5469     See below for a documentation of the individual parameters
5470     controlling inlining and for the defaults of these parameters.
5471
5472     _Note:_ there may be no value to `-finline-limit' that results in
5473     default behavior.
5474
5475     _Note:_ pseudo instruction represents, in this particular context,
5476     an abstract measurement of function's size.  In no way does it
5477     represent a count of assembly instructions and as such its exact
5478     meaning might change from one release to an another.
5479
5480`-fkeep-inline-functions'
5481     In C, emit `static' functions that are declared `inline' into the
5482     object file, even if the function has been inlined into all of its
5483     callers.  This switch does not affect functions using the `extern
5484     inline' extension in GNU C90.  In C++, emit any and all inline
5485     functions into the object file.
5486
5487`-fkeep-static-consts'
5488     Emit variables declared `static const' when optimization isn't
5489     turned on, even if the variables aren't referenced.
5490
5491     GCC enables this option by default.  If you want to force the
5492     compiler to check if the variable was referenced, regardless of
5493     whether or not optimization is turned on, use the
5494     `-fno-keep-static-consts' option.
5495
5496`-fmerge-constants'
5497     Attempt to merge identical constants (string constants and
5498     floating point constants) across compilation units.
5499
5500     This option is the default for optimized compilation if the
5501     assembler and linker support it.  Use `-fno-merge-constants' to
5502     inhibit this behavior.
5503
5504     Enabled at levels `-O', `-O2', `-O3', `-Os'.
5505
5506`-fmerge-all-constants'
5507     Attempt to merge identical constants and identical variables.
5508
5509     This option implies `-fmerge-constants'.  In addition to
5510     `-fmerge-constants' this considers e.g. even constant initialized
5511     arrays or initialized constant variables with integral or floating
5512     point types.  Languages like C or C++ require each variable,
5513     including multiple instances of the same variable in recursive
5514     calls, to have distinct locations, so using this option will
5515     result in non-conforming behavior.
5516
5517`-fmodulo-sched'
5518     Perform swing modulo scheduling immediately before the first
5519     scheduling pass.  This pass looks at innermost loops and reorders
5520     their instructions by overlapping different iterations.
5521
5522`-fmodulo-sched-allow-regmoves'
5523     Perform more aggressive SMS based modulo scheduling with register
5524     moves allowed.  By setting this flag certain anti-dependences
5525     edges will be deleted which will trigger the generation of
5526     reg-moves based on the life-range analysis.  This option is
5527     effective only with `-fmodulo-sched' enabled.
5528
5529`-fno-branch-count-reg'
5530     Do not use "decrement and branch" instructions on a count register,
5531     but instead generate a sequence of instructions that decrement a
5532     register, compare it against zero, then branch based upon the
5533     result.  This option is only meaningful on architectures that
5534     support such instructions, which include x86, PowerPC, IA-64 and
5535     S/390.
5536
5537     The default is `-fbranch-count-reg'.
5538
5539`-fno-function-cse'
5540     Do not put function addresses in registers; make each instruction
5541     that calls a constant function contain the function's address
5542     explicitly.
5543
5544     This option results in less efficient code, but some strange hacks
5545     that alter the assembler output may be confused by the
5546     optimizations performed when this option is not used.
5547
5548     The default is `-ffunction-cse'
5549
5550`-fno-zero-initialized-in-bss'
5551     If the target supports a BSS section, GCC by default puts
5552     variables that are initialized to zero into BSS.  This can save
5553     space in the resulting code.
5554
5555     This option turns off this behavior because some programs
5556     explicitly rely on variables going to the data section.  E.g., so
5557     that the resulting executable can find the beginning of that
5558     section and/or make assumptions based on that.
5559
5560     The default is `-fzero-initialized-in-bss'.
5561
5562`-fmudflap -fmudflapth -fmudflapir'
5563     For front-ends that support it (C and C++), instrument all risky
5564     pointer/array dereferencing operations, some standard library
5565     string/heap functions, and some other associated constructs with
5566     range/validity tests.  Modules so instrumented should be immune to
5567     buffer overflows, invalid heap use, and some other classes of C/C++
5568     programming errors.  The instrumentation relies on a separate
5569     runtime library (`libmudflap'), which will be linked into a
5570     program if `-fmudflap' is given at link time.  Run-time behavior
5571     of the instrumented program is controlled by the `MUDFLAP_OPTIONS'
5572     environment variable.  See `env MUDFLAP_OPTIONS=-help a.out' for
5573     its options.
5574
5575     Use `-fmudflapth' instead of `-fmudflap' to compile and to link if
5576     your program is multi-threaded.  Use `-fmudflapir', in addition to
5577     `-fmudflap' or `-fmudflapth', if instrumentation should ignore
5578     pointer reads.  This produces less instrumentation (and therefore
5579     faster execution) and still provides some protection against
5580     outright memory corrupting writes, but allows erroneously read
5581     data to propagate within a program.
5582
5583`-fthread-jumps'
5584     Perform optimizations where we check to see if a jump branches to a
5585     location where another comparison subsumed by the first is found.
5586     If so, the first branch is redirected to either the destination of
5587     the second branch or a point immediately following it, depending
5588     on whether the condition is known to be true or false.
5589
5590     Enabled at levels `-O2', `-O3', `-Os'.
5591
5592`-fsplit-wide-types'
5593     When using a type that occupies multiple registers, such as `long
5594     long' on a 32-bit system, split the registers apart and allocate
5595     them independently.  This normally generates better code for those
5596     types, but may make debugging more difficult.
5597
5598     Enabled at levels `-O', `-O2', `-O3', `-Os'.
5599
5600`-fcse-follow-jumps'
5601     In common subexpression elimination (CSE), scan through jump
5602     instructions when the target of the jump is not reached by any
5603     other path.  For example, when CSE encounters an `if' statement
5604     with an `else' clause, CSE will follow the jump when the condition
5605     tested is false.
5606
5607     Enabled at levels `-O2', `-O3', `-Os'.
5608
5609`-fcse-skip-blocks'
5610     This is similar to `-fcse-follow-jumps', but causes CSE to follow
5611     jumps which conditionally skip over blocks.  When CSE encounters a
5612     simple `if' statement with no else clause, `-fcse-skip-blocks'
5613     causes CSE to follow the jump around the body of the `if'.
5614
5615     Enabled at levels `-O2', `-O3', `-Os'.
5616
5617`-frerun-cse-after-loop'
5618     Re-run common subexpression elimination after loop optimizations
5619     has been performed.
5620
5621     Enabled at levels `-O2', `-O3', `-Os'.
5622
5623`-fgcse'
5624     Perform a global common subexpression elimination pass.  This pass
5625     also performs global constant and copy propagation.
5626
5627     _Note:_ When compiling a program using computed gotos, a GCC
5628     extension, you may get better runtime performance if you disable
5629     the global common subexpression elimination pass by adding
5630     `-fno-gcse' to the command line.
5631
5632     Enabled at levels `-O2', `-O3', `-Os'.
5633
5634`-fgcse-lm'
5635     When `-fgcse-lm' is enabled, global common subexpression
5636     elimination will attempt to move loads which are only killed by
5637     stores into themselves.  This allows a loop containing a
5638     load/store sequence to be changed to a load outside the loop, and
5639     a copy/store within the loop.
5640
5641     Enabled by default when gcse is enabled.
5642
5643`-fgcse-sm'
5644     When `-fgcse-sm' is enabled, a store motion pass is run after
5645     global common subexpression elimination.  This pass will attempt
5646     to move stores out of loops.  When used in conjunction with
5647     `-fgcse-lm', loops containing a load/store sequence can be changed
5648     to a load before the loop and a store after the loop.
5649
5650     Not enabled at any optimization level.
5651
5652`-fgcse-las'
5653     When `-fgcse-las' is enabled, the global common subexpression
5654     elimination pass eliminates redundant loads that come after stores
5655     to the same memory location (both partial and full redundancies).
5656
5657     Not enabled at any optimization level.
5658
5659`-fgcse-after-reload'
5660     When `-fgcse-after-reload' is enabled, a redundant load elimination
5661     pass is performed after reload.  The purpose of this pass is to
5662     cleanup redundant spilling.
5663
5664`-funsafe-loop-optimizations'
5665     If given, the loop optimizer will assume that loop indices do not
5666     overflow, and that the loops with nontrivial exit condition are not
5667     infinite.  This enables a wider range of loop optimizations even if
5668     the loop optimizer itself cannot prove that these assumptions are
5669     valid.  Using `-Wunsafe-loop-optimizations', the compiler will
5670     warn you if it finds this kind of loop.
5671
5672`-fcrossjumping'
5673     Perform cross-jumping transformation.  This transformation unifies
5674     equivalent code and save code size.  The resulting code may or may
5675     not perform better than without cross-jumping.
5676
5677     Enabled at levels `-O2', `-O3', `-Os'.
5678
5679`-fauto-inc-dec'
5680     Combine increments or decrements of addresses with memory accesses.
5681     This pass is always skipped on architectures that do not have
5682     instructions to support this.  Enabled by default at `-O' and
5683     higher on architectures that support this.
5684
5685`-fdce'
5686     Perform dead code elimination (DCE) on RTL.  Enabled by default at
5687     `-O' and higher.
5688
5689`-fdse'
5690     Perform dead store elimination (DSE) on RTL.  Enabled by default
5691     at `-O' and higher.
5692
5693`-fif-conversion'
5694     Attempt to transform conditional jumps into branch-less
5695     equivalents.  This include use of conditional moves, min, max, set
5696     flags and abs instructions, and some tricks doable by standard
5697     arithmetics.  The use of conditional execution on chips where it
5698     is available is controlled by `if-conversion2'.
5699
5700     Enabled at levels `-O', `-O2', `-O3', `-Os'.
5701
5702`-fif-conversion2'
5703     Use conditional execution (where available) to transform
5704     conditional jumps into branch-less equivalents.
5705
5706     Enabled at levels `-O', `-O2', `-O3', `-Os'.
5707
5708`-fdelete-null-pointer-checks'
5709     Assume that programs cannot safely dereference null pointers, and
5710     that no code or data element resides there.  This enables simple
5711     constant folding optimizations at all optimization levels.  In
5712     addition, other optimization passes in GCC use this flag to
5713     control global dataflow analyses that eliminate useless checks for
5714     null pointers; these assume that if a pointer is checked after it
5715     has already been dereferenced, it cannot be null.
5716
5717     Note however that in some environments this assumption is not true.
5718     Use `-fno-delete-null-pointer-checks' to disable this optimization
5719     for programs which depend on that behavior.
5720
5721     Some targets, especially embedded ones, disable this option at all
5722     levels.  Otherwise it is enabled at all levels: `-O0', `-O1',
5723     `-O2', `-O3', `-Os'.  Passes that use the information are enabled
5724     independently at different optimization levels.
5725
5726`-fexpensive-optimizations'
5727     Perform a number of minor optimizations that are relatively
5728     expensive.
5729
5730     Enabled at levels `-O2', `-O3', `-Os'.
5731
5732`-foptimize-register-move'
5733`-fregmove'
5734     Attempt to reassign register numbers in move instructions and as
5735     operands of other simple instructions in order to maximize the
5736     amount of register tying.  This is especially helpful on machines
5737     with two-operand instructions.
5738
5739     Note `-fregmove' and `-foptimize-register-move' are the same
5740     optimization.
5741
5742     Enabled at levels `-O2', `-O3', `-Os'.
5743
5744`-fira-algorithm=ALGORITHM'
5745     Use specified coloring algorithm for the integrated register
5746     allocator.  The ALGORITHM argument should be `priority' or `CB'.
5747     The first algorithm specifies Chow's priority coloring, the second
5748     one specifies Chaitin-Briggs coloring.  The second algorithm can
5749     be unimplemented for some architectures.  If it is implemented, it
5750     is the default because Chaitin-Briggs coloring as a rule generates
5751     a better code.
5752
5753`-fira-region=REGION'
5754     Use specified regions for the integrated register allocator.  The
5755     REGION argument should be one of `all', `mixed', or `one'.  The
5756     first value means using all loops as register allocation regions,
5757     the second value which is the default means using all loops except
5758     for loops with small register pressure as the regions, and third
5759     one means using all function as a single region.  The first value
5760     can give best result for machines with small size and irregular
5761     register set, the third one results in faster and generates decent
5762     code and the smallest size code, and the default value usually
5763     give the best results in most cases and for most architectures.
5764
5765`-fira-coalesce'
5766     Do optimistic register coalescing.  This option might be
5767     profitable for architectures with big regular register files.
5768
5769`-fira-loop-pressure'
5770     Use IRA to evaluate register pressure in loops for decision to move
5771     loop invariants.  Usage of this option usually results in
5772     generation of faster and smaller code on machines with big
5773     register files (>= 32 registers) but it can slow compiler down.
5774
5775     This option is enabled at level `-O3' for some targets.
5776
5777`-fno-ira-share-save-slots'
5778     Switch off sharing stack slots used for saving call used hard
5779     registers living through a call.  Each hard register will get a
5780     separate stack slot and as a result function stack frame will be
5781     bigger.
5782
5783`-fno-ira-share-spill-slots'
5784     Switch off sharing stack slots allocated for pseudo-registers.
5785     Each pseudo-register which did not get a hard register will get a
5786     separate stack slot and as a result function stack frame will be
5787     bigger.
5788
5789`-fira-verbose=N'
5790     Set up how verbose dump file for the integrated register allocator
5791     will be.  Default value is 5.  If the value is greater or equal to
5792     10, the dump file will be stderr as if the value were N minus 10.
5793
5794`-fdelayed-branch'
5795     If supported for the target machine, attempt to reorder
5796     instructions to exploit instruction slots available after delayed
5797     branch instructions.
5798
5799     Enabled at levels `-O', `-O2', `-O3', `-Os'.
5800
5801`-fschedule-insns'
5802     If supported for the target machine, attempt to reorder
5803     instructions to eliminate execution stalls due to required data
5804     being unavailable.  This helps machines that have slow floating
5805     point or memory load instructions by allowing other instructions
5806     to be issued until the result of the load or floating point
5807     instruction is required.
5808
5809     Enabled at levels `-O2', `-O3'.
5810
5811`-fschedule-insns2'
5812     Similar to `-fschedule-insns', but requests an additional pass of
5813     instruction scheduling after register allocation has been done.
5814     This is especially useful on machines with a relatively small
5815     number of registers and where memory load instructions take more
5816     than one cycle.
5817
5818     Enabled at levels `-O2', `-O3', `-Os'.
5819
5820`-fno-sched-interblock'
5821     Don't schedule instructions across basic blocks.  This is normally
5822     enabled by default when scheduling before register allocation, i.e.
5823     with `-fschedule-insns' or at `-O2' or higher.
5824
5825`-fno-sched-spec'
5826     Don't allow speculative motion of non-load instructions.  This is
5827     normally enabled by default when scheduling before register
5828     allocation, i.e.  with `-fschedule-insns' or at `-O2' or higher.
5829
5830`-fsched-pressure'
5831     Enable register pressure sensitive insn scheduling before the
5832     register allocation.  This only makes sense when scheduling before
5833     register allocation is enabled, i.e. with `-fschedule-insns' or at
5834     `-O2' or higher.  Usage of this option can improve the generated
5835     code and decrease its size by preventing register pressure
5836     increase above the number of available hard registers and as a
5837     consequence register spills in the register allocation.
5838
5839`-fsched-spec-load'
5840     Allow speculative motion of some load instructions.  This only
5841     makes sense when scheduling before register allocation, i.e. with
5842     `-fschedule-insns' or at `-O2' or higher.
5843
5844`-fsched-spec-load-dangerous'
5845     Allow speculative motion of more load instructions.  This only
5846     makes sense when scheduling before register allocation, i.e. with
5847     `-fschedule-insns' or at `-O2' or higher.
5848
5849`-fsched-stalled-insns'
5850`-fsched-stalled-insns=N'
5851     Define how many insns (if any) can be moved prematurely from the
5852     queue of stalled insns into the ready list, during the second
5853     scheduling pass.  `-fno-sched-stalled-insns' means that no insns
5854     will be moved prematurely, `-fsched-stalled-insns=0' means there
5855     is no limit on how many queued insns can be moved prematurely.
5856     `-fsched-stalled-insns' without a value is equivalent to
5857     `-fsched-stalled-insns=1'.
5858
5859`-fsched-stalled-insns-dep'
5860`-fsched-stalled-insns-dep=N'
5861     Define how many insn groups (cycles) will be examined for a
5862     dependency on a stalled insn that is candidate for premature
5863     removal from the queue of stalled insns.  This has an effect only
5864     during the second scheduling pass, and only if
5865     `-fsched-stalled-insns' is used.  `-fno-sched-stalled-insns-dep'
5866     is equivalent to `-fsched-stalled-insns-dep=0'.
5867     `-fsched-stalled-insns-dep' without a value is equivalent to
5868     `-fsched-stalled-insns-dep=1'.
5869
5870`-fsched2-use-superblocks'
5871     When scheduling after register allocation, do use superblock
5872     scheduling algorithm.  Superblock scheduling allows motion across
5873     basic block boundaries resulting on faster schedules.  This option
5874     is experimental, as not all machine descriptions used by GCC model
5875     the CPU closely enough to avoid unreliable results from the
5876     algorithm.
5877
5878     This only makes sense when scheduling after register allocation,
5879     i.e. with `-fschedule-insns2' or at `-O2' or higher.
5880
5881`-fsched-group-heuristic'
5882     Enable the group heuristic in the scheduler.  This heuristic favors
5883     the instruction that belongs to a schedule group.  This is enabled
5884     by default when scheduling is enabled, i.e. with `-fschedule-insns'
5885     or `-fschedule-insns2' or at `-O2' or higher.
5886
5887`-fsched-critical-path-heuristic'
5888     Enable the critical-path heuristic in the scheduler.  This
5889     heuristic favors instructions on the critical path.  This is
5890     enabled by default when scheduling is enabled, i.e. with
5891     `-fschedule-insns' or `-fschedule-insns2' or at `-O2' or higher.
5892
5893`-fsched-spec-insn-heuristic'
5894     Enable the speculative instruction heuristic in the scheduler.
5895     This heuristic favors speculative instructions with greater
5896     dependency weakness.  This is enabled by default when scheduling
5897     is enabled, i.e.  with `-fschedule-insns' or `-fschedule-insns2'
5898     or at `-O2' or higher.
5899
5900`-fsched-rank-heuristic'
5901     Enable the rank heuristic in the scheduler.  This heuristic favors
5902     the instruction belonging to a basic block with greater size or
5903     frequency.  This is enabled by default when scheduling is enabled,
5904     i.e.  with `-fschedule-insns' or `-fschedule-insns2' or at `-O2'
5905     or higher.
5906
5907`-fsched-last-insn-heuristic'
5908     Enable the last-instruction heuristic in the scheduler.  This
5909     heuristic favors the instruction that is less dependent on the
5910     last instruction scheduled.  This is enabled by default when
5911     scheduling is enabled, i.e. with `-fschedule-insns' or
5912     `-fschedule-insns2' or at `-O2' or higher.
5913
5914`-fsched-dep-count-heuristic'
5915     Enable the dependent-count heuristic in the scheduler.  This
5916     heuristic favors the instruction that has more instructions
5917     depending on it.  This is enabled by default when scheduling is
5918     enabled, i.e.  with `-fschedule-insns' or `-fschedule-insns2' or
5919     at `-O2' or higher.
5920
5921`-freschedule-modulo-scheduled-loops'
5922     The modulo scheduling comes before the traditional scheduling, if
5923     a loop was modulo scheduled we may want to prevent the later
5924     scheduling passes from changing its schedule, we use this option
5925     to control that.
5926
5927`-fselective-scheduling'
5928     Schedule instructions using selective scheduling algorithm.
5929     Selective scheduling runs instead of the first scheduler pass.
5930
5931`-fselective-scheduling2'
5932     Schedule instructions using selective scheduling algorithm.
5933     Selective scheduling runs instead of the second scheduler pass.
5934
5935`-fsel-sched-pipelining'
5936     Enable software pipelining of innermost loops during selective
5937     scheduling.  This option has no effect until one of
5938     `-fselective-scheduling' or `-fselective-scheduling2' is turned on.
5939
5940`-fsel-sched-pipelining-outer-loops'
5941     When pipelining loops during selective scheduling, also pipeline
5942     outer loops.  This option has no effect until
5943     `-fsel-sched-pipelining' is turned on.
5944
5945`-fcaller-saves'
5946     Enable values to be allocated in registers that will be clobbered
5947     by function calls, by emitting extra instructions to save and
5948     restore the registers around such calls.  Such allocation is done
5949     only when it seems to result in better code than would otherwise
5950     be produced.
5951
5952     This option is always enabled by default on certain machines,
5953     usually those which have no call-preserved registers to use
5954     instead.
5955
5956     Enabled at levels `-O2', `-O3', `-Os'.
5957
5958`-fconserve-stack'
5959     Attempt to minimize stack usage.  The compiler will attempt to use
5960     less stack space, even if that makes the program slower.  This
5961     option implies setting the `large-stack-frame' parameter to 100
5962     and the `large-stack-frame-growth' parameter to 400.
5963
5964`-ftree-reassoc'
5965     Perform reassociation on trees.  This flag is enabled by default
5966     at `-O' and higher.
5967
5968`-ftree-pre'
5969     Perform partial redundancy elimination (PRE) on trees.  This flag
5970     is enabled by default at `-O2' and `-O3'.
5971
5972`-ftree-forwprop'
5973     Perform forward propagation on trees.  This flag is enabled by
5974     default at `-O' and higher.
5975
5976`-ftree-fre'
5977     Perform full redundancy elimination (FRE) on trees.  The difference
5978     between FRE and PRE is that FRE only considers expressions that
5979     are computed on all paths leading to the redundant computation.
5980     This analysis is faster than PRE, though it exposes fewer
5981     redundancies.  This flag is enabled by default at `-O' and higher.
5982
5983`-ftree-phiprop'
5984     Perform hoisting of loads from conditional pointers on trees.  This
5985     pass is enabled by default at `-O' and higher.
5986
5987`-ftree-copy-prop'
5988     Perform copy propagation on trees.  This pass eliminates
5989     unnecessary copy operations.  This flag is enabled by default at
5990     `-O' and higher.
5991
5992`-fipa-pure-const'
5993     Discover which functions are pure or constant.  Enabled by default
5994     at `-O' and higher.
5995
5996`-fipa-reference'
5997     Discover which static variables do not escape cannot escape the
5998     compilation unit.  Enabled by default at `-O' and higher.
5999
6000`-fipa-struct-reorg'
6001     Perform structure reorganization optimization, that change C-like
6002     structures layout in order to better utilize spatial locality.
6003     This transformation is effective for programs containing arrays of
6004     structures.  Available in two compilation modes: profile-based
6005     (enabled with `-fprofile-generate') or static (which uses built-in
6006     heuristics).  Require `-fipa-type-escape' to provide the safety of
6007     this transformation.  It works only in whole program mode, so it
6008     requires `-fwhole-program' and `-combine' to be enabled.
6009     Structures considered `cold' by this transformation are not
6010     affected (see `--param struct-reorg-cold-struct-ratio=VALUE').
6011
6012     With this flag, the program debug info reflects a new structure
6013     layout.
6014
6015`-fipa-pta'
6016     Perform interprocedural pointer analysis.  This option is
6017     experimental and does not affect generated code.
6018
6019`-fipa-cp'
6020     Perform interprocedural constant propagation.  This optimization
6021     analyzes the program to determine when values passed to functions
6022     are constants and then optimizes accordingly.  This optimization
6023     can substantially increase performance if the application has
6024     constants passed to functions.  This flag is enabled by default at
6025     `-O2', `-Os' and `-O3'.
6026
6027`-fipa-cp-clone'
6028     Perform function cloning to make interprocedural constant
6029     propagation stronger.  When enabled, interprocedural constant
6030     propagation will perform function cloning when externally visible
6031     function can be called with constant arguments.  Because this
6032     optimization can create multiple copies of functions, it may
6033     significantly increase code size (see `--param
6034     ipcp-unit-growth=VALUE').  This flag is enabled by default at
6035     `-O3'.
6036
6037`-fipa-matrix-reorg'
6038     Perform matrix flattening and transposing.  Matrix flattening
6039     tries to replace an m-dimensional matrix with its equivalent
6040     n-dimensional matrix, where n < m.  This reduces the level of
6041     indirection needed for accessing the elements of the matrix. The
6042     second optimization is matrix transposing that attempts to change
6043     the order of the matrix's dimensions in order to improve cache
6044     locality.  Both optimizations need the `-fwhole-program' flag.
6045     Transposing is enabled only if profiling information is available.
6046
6047`-ftree-sink'
6048     Perform forward store motion  on trees.  This flag is enabled by
6049     default at `-O' and higher.
6050
6051`-ftree-ccp'
6052     Perform sparse conditional constant propagation (CCP) on trees.
6053     This pass only operates on local scalar variables and is enabled
6054     by default at `-O' and higher.
6055
6056`-ftree-switch-conversion'
6057     Perform conversion of simple initializations in a switch to
6058     initializations from a scalar array.  This flag is enabled by
6059     default at `-O2' and higher.
6060
6061`-ftree-dce'
6062     Perform dead code elimination (DCE) on trees.  This flag is
6063     enabled by default at `-O' and higher.
6064
6065`-ftree-builtin-call-dce'
6066     Perform conditional dead code elimination (DCE) for calls to
6067     builtin functions that may set `errno' but are otherwise
6068     side-effect free.  This flag is enabled by default at `-O2' and
6069     higher if `-Os' is not also specified.
6070
6071`-ftree-dominator-opts'
6072     Perform a variety of simple scalar cleanups (constant/copy
6073     propagation, redundancy elimination, range propagation and
6074     expression simplification) based on a dominator tree traversal.
6075     This also performs jump threading (to reduce jumps to jumps). This
6076     flag is enabled by default at `-O' and higher.
6077
6078`-ftree-dse'
6079     Perform dead store elimination (DSE) on trees.  A dead store is a
6080     store into a memory location which will later be overwritten by
6081     another store without any intervening loads.  In this case the
6082     earlier store can be deleted.  This flag is enabled by default at
6083     `-O' and higher.
6084
6085`-ftree-ch'
6086     Perform loop header copying on trees.  This is beneficial since it
6087     increases effectiveness of code motion optimizations.  It also
6088     saves one jump.  This flag is enabled by default at `-O' and
6089     higher.  It is not enabled for `-Os', since it usually increases
6090     code size.
6091
6092`-ftree-loop-optimize'
6093     Perform loop optimizations on trees.  This flag is enabled by
6094     default at `-O' and higher.
6095
6096`-ftree-loop-linear'
6097     Perform linear loop transformations on tree.  This flag can
6098     improve cache performance and allow further loop optimizations to
6099     take place.
6100
6101`-floop-interchange'
6102     Perform loop interchange transformations on loops.  Interchanging
6103     two nested loops switches the inner and outer loops.  For example,
6104     given a loop like:
6105          DO J = 1, M
6106            DO I = 1, N
6107              A(J, I) = A(J, I) * C
6108            ENDDO
6109          ENDDO
6110     loop interchange will transform the loop as if the user had
6111     written:
6112          DO I = 1, N
6113            DO J = 1, M
6114              A(J, I) = A(J, I) * C
6115            ENDDO
6116          ENDDO
6117     which can be beneficial when `N' is larger than the caches,
6118     because in Fortran, the elements of an array are stored in memory
6119     contiguously by column, and the original loop iterates over rows,
6120     potentially creating at each access a cache miss.  This
6121     optimization applies to all the languages supported by GCC and is
6122     not limited to Fortran.  To use this code transformation, GCC has
6123     to be configured with `--with-ppl' and `--with-cloog' to enable the
6124     Graphite loop transformation infrastructure.
6125
6126`-floop-strip-mine'
6127     Perform loop strip mining transformations on loops.  Strip mining
6128     splits a loop into two nested loops.  The outer loop has strides
6129     equal to the strip size and the inner loop has strides of the
6130     original loop within a strip.  The strip length can be changed
6131     using the `loop-block-tile-size' parameter.  For example, given a
6132     loop like:
6133          DO I = 1, N
6134            A(I) = A(I) + C
6135          ENDDO
6136     loop strip mining will transform the loop as if the user had
6137     written:
6138          DO II = 1, N, 51
6139            DO I = II, min (II + 50, N)
6140              A(I) = A(I) + C
6141            ENDDO
6142          ENDDO
6143     This optimization applies to all the languages supported by GCC
6144     and is not limited to Fortran.  To use this code transformation,
6145     GCC has to be configured with `--with-ppl' and `--with-cloog' to
6146     enable the Graphite loop transformation infrastructure.
6147
6148`-floop-block'
6149     Perform loop blocking transformations on loops.  Blocking strip
6150     mines each loop in the loop nest such that the memory accesses of
6151     the element loops fit inside caches.  The strip length can be
6152     changed using the `loop-block-tile-size' parameter.  For example,
6153     given a loop like:
6154          DO I = 1, N
6155            DO J = 1, M
6156              A(J, I) = B(I) + C(J)
6157            ENDDO
6158          ENDDO
6159     loop blocking will transform the loop as if the user had written:
6160          DO II = 1, N, 51
6161            DO JJ = 1, M, 51
6162              DO I = II, min (II + 50, N)
6163                DO J = JJ, min (JJ + 50, M)
6164                  A(J, I) = B(I) + C(J)
6165                ENDDO
6166              ENDDO
6167            ENDDO
6168          ENDDO
6169     which can be beneficial when `M' is larger than the caches,
6170     because the innermost loop will iterate over a smaller amount of
6171     data that can be kept in the caches.  This optimization applies to
6172     all the languages supported by GCC and is not limited to Fortran.
6173     To use this code transformation, GCC has to be configured with
6174     `--with-ppl' and `--with-cloog' to enable the Graphite loop
6175     transformation infrastructure.
6176
6177`-fgraphite-identity'
6178     Enable the identity transformation for graphite.  For every SCoP
6179     we generate the polyhedral representation and transform it back to
6180     gimple.  Using `-fgraphite-identity' we can check the costs or
6181     benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
6182     minimal optimizations are also performed by the code generator
6183     CLooG, like index splitting and dead code elimination in loops.
6184
6185`-floop-parallelize-all'
6186     Use the Graphite data dependence analysis to identify loops that
6187     can be parallelized.  Parallelize all the loops that can be
6188     analyzed to not contain loop carried dependences without checking
6189     that it is profitable to parallelize the loops.
6190
6191`-fcheck-data-deps'
6192     Compare the results of several data dependence analyzers.  This
6193     option is used for debugging the data dependence analyzers.
6194
6195`-ftree-loop-distribution'
6196     Perform loop distribution.  This flag can improve cache
6197     performance on big loop bodies and allow further loop
6198     optimizations, like parallelization or vectorization, to take
6199     place.  For example, the loop
6200          DO I = 1, N
6201            A(I) = B(I) + C
6202            D(I) = E(I) * F
6203          ENDDO
6204     is transformed to
6205          DO I = 1, N
6206             A(I) = B(I) + C
6207          ENDDO
6208          DO I = 1, N
6209             D(I) = E(I) * F
6210          ENDDO
6211
6212`-ftree-loop-im'
6213     Perform loop invariant motion on trees.  This pass moves only
6214     invariants that would be hard to handle at RTL level (function
6215     calls, operations that expand to nontrivial sequences of insns).
6216     With `-funswitch-loops' it also moves operands of conditions that
6217     are invariant out of the loop, so that we can use just trivial
6218     invariantness analysis in loop unswitching.  The pass also includes
6219     store motion.
6220
6221`-ftree-loop-ivcanon'
6222     Create a canonical counter for number of iterations in the loop
6223     for that determining number of iterations requires complicated
6224     analysis.  Later optimizations then may determine the number
6225     easily.  Useful especially in connection with unrolling.
6226
6227`-fivopts'
6228     Perform induction variable optimizations (strength reduction,
6229     induction variable merging and induction variable elimination) on
6230     trees.
6231
6232`-ftree-parallelize-loops=n'
6233     Parallelize loops, i.e., split their iteration space to run in n
6234     threads.  This is only possible for loops whose iterations are
6235     independent and can be arbitrarily reordered.  The optimization is
6236     only profitable on multiprocessor machines, for loops that are
6237     CPU-intensive, rather than constrained e.g. by memory bandwidth.
6238     This option implies `-pthread', and thus is only supported on
6239     targets that have support for `-pthread'.
6240
6241`-ftree-pta'
6242     Perform function-local points-to analysis on trees.  This flag is
6243     enabled by default at `-O' and higher.
6244
6245`-ftree-sra'
6246     Perform scalar replacement of aggregates.  This pass replaces
6247     structure references with scalars to prevent committing structures
6248     to memory too early.  This flag is enabled by default at `-O' and
6249     higher.
6250
6251`-ftree-copyrename'
6252     Perform copy renaming on trees.  This pass attempts to rename
6253     compiler temporaries to other variables at copy locations, usually
6254     resulting in variable names which more closely resemble the
6255     original variables.  This flag is enabled by default at `-O' and
6256     higher.
6257
6258`-ftree-ter'
6259     Perform temporary expression replacement during the SSA->normal
6260     phase.  Single use/single def temporaries are replaced at their
6261     use location with their defining expression.  This results in
6262     non-GIMPLE code, but gives the expanders much more complex trees
6263     to work on resulting in better RTL generation.  This is enabled by
6264     default at `-O' and higher.
6265
6266`-ftree-vectorize'
6267     Perform loop vectorization on trees. This flag is enabled by
6268     default at `-O3'.
6269
6270`-ftree-slp-vectorize'
6271     Perform basic block vectorization on trees. This flag is enabled
6272     by default at `-O3' and when `-ftree-vectorize' is enabled.
6273
6274`-ftree-vect-loop-version'
6275     Perform loop versioning when doing loop vectorization on trees.
6276     When a loop appears to be vectorizable except that data alignment
6277     or data dependence cannot be determined at compile time then
6278     vectorized and non-vectorized versions of the loop are generated
6279     along with runtime checks for alignment or dependence to control
6280     which version is executed.  This option is enabled by default
6281     except at level `-Os' where it is disabled.
6282
6283`-fvect-cost-model'
6284     Enable cost model for vectorization.
6285
6286`-ftree-vrp'
6287     Perform Value Range Propagation on trees.  This is similar to the
6288     constant propagation pass, but instead of values, ranges of values
6289     are propagated.  This allows the optimizers to remove unnecessary
6290     range checks like array bound checks and null pointer checks.
6291     This is enabled by default at `-O2' and higher.  Null pointer check
6292     elimination is only done if `-fdelete-null-pointer-checks' is
6293     enabled.
6294
6295`-ftracer'
6296     Perform tail duplication to enlarge superblock size.  This
6297     transformation simplifies the control flow of the function
6298     allowing other optimizations to do better job.
6299
6300`-funroll-loops'
6301     Unroll loops whose number of iterations can be determined at
6302     compile time or upon entry to the loop.  `-funroll-loops' implies
6303     `-frerun-cse-after-loop'.  This option makes code larger, and may
6304     or may not make it run faster.
6305
6306`-funroll-all-loops'
6307     Unroll all loops, even if their number of iterations is uncertain
6308     when the loop is entered.  This usually makes programs run more
6309     slowly.  `-funroll-all-loops' implies the same options as
6310     `-funroll-loops',
6311
6312`-fsplit-ivs-in-unroller'
6313     Enables expressing of values of induction variables in later
6314     iterations of the unrolled loop using the value in the first
6315     iteration.  This breaks long dependency chains, thus improving
6316     efficiency of the scheduling passes.
6317
6318     Combination of `-fweb' and CSE is often sufficient to obtain the
6319     same effect.  However in cases the loop body is more complicated
6320     than a single basic block, this is not reliable.  It also does not
6321     work at all on some of the architectures due to restrictions in
6322     the CSE pass.
6323
6324     This optimization is enabled by default.
6325
6326`-fvariable-expansion-in-unroller'
6327     With this option, the compiler will create multiple copies of some
6328     local variables when unrolling a loop which can result in superior
6329     code.
6330
6331`-fpredictive-commoning'
6332     Perform predictive commoning optimization, i.e., reusing
6333     computations (especially memory loads and stores) performed in
6334     previous iterations of loops.
6335
6336     This option is enabled at level `-O3'.
6337
6338`-fprefetch-loop-arrays'
6339     If supported by the target machine, generate instructions to
6340     prefetch memory to improve the performance of loops that access
6341     large arrays.
6342
6343     This option may generate better or worse code; results are highly
6344     dependent on the structure of loops within the source code.
6345
6346     Disabled at level `-Os'.
6347
6348`-fno-peephole'
6349`-fno-peephole2'
6350     Disable any machine-specific peephole optimizations.  The
6351     difference between `-fno-peephole' and `-fno-peephole2' is in how
6352     they are implemented in the compiler; some targets use one, some
6353     use the other, a few use both.
6354
6355     `-fpeephole' is enabled by default.  `-fpeephole2' enabled at
6356     levels `-O2', `-O3', `-Os'.
6357
6358`-fno-guess-branch-probability'
6359     Do not guess branch probabilities using heuristics.
6360
6361     GCC will use heuristics to guess branch probabilities if they are
6362     not provided by profiling feedback (`-fprofile-arcs').  These
6363     heuristics are based on the control flow graph.  If some branch
6364     probabilities are specified by `__builtin_expect', then the
6365     heuristics will be used to guess branch probabilities for the rest
6366     of the control flow graph, taking the `__builtin_expect' info into
6367     account.  The interactions between the heuristics and
6368     `__builtin_expect' can be complex, and in some cases, it may be
6369     useful to disable the heuristics so that the effects of
6370     `__builtin_expect' are easier to understand.
6371
6372     The default is `-fguess-branch-probability' at levels `-O', `-O2',
6373     `-O3', `-Os'.
6374
6375`-freorder-blocks'
6376     Reorder basic blocks in the compiled function in order to reduce
6377     number of taken branches and improve code locality.
6378
6379     Enabled at levels `-O2', `-O3'.
6380
6381`-freorder-blocks-and-partition'
6382     In addition to reordering basic blocks in the compiled function,
6383     in order to reduce number of taken branches, partitions hot and
6384     cold basic blocks into separate sections of the assembly and .o
6385     files, to improve paging and cache locality performance.
6386
6387     This optimization is automatically turned off in the presence of
6388     exception handling, for linkonce sections, for functions with a
6389     user-defined section attribute and on any architecture that does
6390     not support named sections.
6391
6392`-freorder-functions'
6393     Reorder functions in the object file in order to improve code
6394     locality.  This is implemented by using special subsections
6395     `.text.hot' for most frequently executed functions and
6396     `.text.unlikely' for unlikely executed functions.  Reordering is
6397     done by the linker so object file format must support named
6398     sections and linker must place them in a reasonable way.
6399
6400     Also profile feedback must be available in to make this option
6401     effective.  See `-fprofile-arcs' for details.
6402
6403     Enabled at levels `-O2', `-O3', `-Os'.
6404
6405`-fstrict-aliasing'
6406     Allow the compiler to assume the strictest aliasing rules
6407     applicable to the language being compiled.  For C (and C++), this
6408     activates optimizations based on the type of expressions.  In
6409     particular, an object of one type is assumed never to reside at
6410     the same address as an object of a different type, unless the
6411     types are almost the same.  For example, an `unsigned int' can
6412     alias an `int', but not a `void*' or a `double'.  A character type
6413     may alias any other type.
6414
6415     Pay special attention to code like this:
6416          union a_union {
6417            int i;
6418            double d;
6419          };
6420
6421          int f() {
6422            union a_union t;
6423            t.d = 3.0;
6424            return t.i;
6425          }
6426     The practice of reading from a different union member than the one
6427     most recently written to (called "type-punning") is common.  Even
6428     with `-fstrict-aliasing', type-punning is allowed, provided the
6429     memory is accessed through the union type.  So, the code above
6430     will work as expected.  *Note Structures unions enumerations and
6431     bit-fields implementation::.  However, this code might not:
6432          int f() {
6433            union a_union t;
6434            int* ip;
6435            t.d = 3.0;
6436            ip = &t.i;
6437            return *ip;
6438          }
6439
6440     Similarly, access by taking the address, casting the resulting
6441     pointer and dereferencing the result has undefined behavior, even
6442     if the cast uses a union type, e.g.:
6443          int f() {
6444            double d = 3.0;
6445            return ((union a_union *) &d)->i;
6446          }
6447
6448     The `-fstrict-aliasing' option is enabled at levels `-O2', `-O3',
6449     `-Os'.
6450
6451`-fstrict-overflow'
6452     Allow the compiler to assume strict signed overflow rules,
6453     depending on the language being compiled.  For C (and C++) this
6454     means that overflow when doing arithmetic with signed numbers is
6455     undefined, which means that the compiler may assume that it will
6456     not happen.  This permits various optimizations.  For example, the
6457     compiler will assume that an expression like `i + 10 > i' will
6458     always be true for signed `i'.  This assumption is only valid if
6459     signed overflow is undefined, as the expression is false if `i +
6460     10' overflows when using twos complement arithmetic.  When this
6461     option is in effect any attempt to determine whether an operation
6462     on signed numbers will overflow must be written carefully to not
6463     actually involve overflow.
6464
6465     This option also allows the compiler to assume strict pointer
6466     semantics: given a pointer to an object, if adding an offset to
6467     that pointer does not produce a pointer to the same object, the
6468     addition is undefined.  This permits the compiler to conclude that
6469     `p + u > p' is always true for a pointer `p' and unsigned integer
6470     `u'.  This assumption is only valid because pointer wraparound is
6471     undefined, as the expression is false if `p + u' overflows using
6472     twos complement arithmetic.
6473
6474     See also the `-fwrapv' option.  Using `-fwrapv' means that integer
6475     signed overflow is fully defined: it wraps.  When `-fwrapv' is
6476     used, there is no difference between `-fstrict-overflow' and
6477     `-fno-strict-overflow' for integers.  With `-fwrapv' certain types
6478     of overflow are permitted.  For example, if the compiler gets an
6479     overflow when doing arithmetic on constants, the overflowed value
6480     can still be used with `-fwrapv', but not otherwise.
6481
6482     The `-fstrict-overflow' option is enabled at levels `-O2', `-O3',
6483     `-Os'.
6484
6485`-falign-functions'
6486`-falign-functions=N'
6487     Align the start of functions to the next power-of-two greater than
6488     N, skipping up to N bytes.  For instance, `-falign-functions=32'
6489     aligns functions to the next 32-byte boundary, but
6490     `-falign-functions=24' would align to the next 32-byte boundary
6491     only if this can be done by skipping 23 bytes or less.
6492
6493     `-fno-align-functions' and `-falign-functions=1' are equivalent
6494     and mean that functions will not be aligned.
6495
6496     Some assemblers only support this flag when N is a power of two;
6497     in that case, it is rounded up.
6498
6499     If N is not specified or is zero, use a machine-dependent default.
6500
6501     Enabled at levels `-O2', `-O3'.
6502
6503`-falign-labels'
6504`-falign-labels=N'
6505     Align all branch targets to a power-of-two boundary, skipping up to
6506     N bytes like `-falign-functions'.  This option can easily make
6507     code slower, because it must insert dummy operations for when the
6508     branch target is reached in the usual flow of the code.
6509
6510     `-fno-align-labels' and `-falign-labels=1' are equivalent and mean
6511     that labels will not be aligned.
6512
6513     If `-falign-loops' or `-falign-jumps' are applicable and are
6514     greater than this value, then their values are used instead.
6515
6516     If N is not specified or is zero, use a machine-dependent default
6517     which is very likely to be `1', meaning no alignment.
6518
6519     Enabled at levels `-O2', `-O3'.
6520
6521`-falign-loops'
6522`-falign-loops=N'
6523     Align loops to a power-of-two boundary, skipping up to N bytes
6524     like `-falign-functions'.  The hope is that the loop will be
6525     executed many times, which will make up for any execution of the
6526     dummy operations.
6527
6528     `-fno-align-loops' and `-falign-loops=1' are equivalent and mean
6529     that loops will not be aligned.
6530
6531     If N is not specified or is zero, use a machine-dependent default.
6532
6533     Enabled at levels `-O2', `-O3'.
6534
6535`-falign-jumps'
6536`-falign-jumps=N'
6537     Align branch targets to a power-of-two boundary, for branch targets
6538     where the targets can only be reached by jumping, skipping up to N
6539     bytes like `-falign-functions'.  In this case, no dummy operations
6540     need be executed.
6541
6542     `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean
6543     that loops will not be aligned.
6544
6545     If N is not specified or is zero, use a machine-dependent default.
6546
6547     Enabled at levels `-O2', `-O3'.
6548
6549`-funit-at-a-time'
6550     This option is left for compatibility reasons. `-funit-at-a-time'
6551     has no effect, while `-fno-unit-at-a-time' implies
6552     `-fno-toplevel-reorder' and `-fno-section-anchors'.
6553
6554     Enabled by default.
6555
6556`-fno-toplevel-reorder'
6557     Do not reorder top-level functions, variables, and `asm'
6558     statements.  Output them in the same order that they appear in the
6559     input file.  When this option is used, unreferenced static
6560     variables will not be removed.  This option is intended to support
6561     existing code which relies on a particular ordering.  For new
6562     code, it is better to use attributes.
6563
6564     Enabled at level `-O0'.  When disabled explicitly, it also imply
6565     `-fno-section-anchors' that is otherwise enabled at `-O0' on some
6566     targets.
6567
6568`-fweb'
6569     Constructs webs as commonly used for register allocation purposes
6570     and assign each web individual pseudo register.  This allows the
6571     register allocation pass to operate on pseudos directly, but also
6572     strengthens several other optimization passes, such as CSE, loop
6573     optimizer and trivial dead code remover.  It can, however, make
6574     debugging impossible, since variables will no longer stay in a
6575     "home register".
6576
6577     Enabled by default with `-funroll-loops'.
6578
6579`-fwhole-program'
6580     Assume that the current compilation unit represents the whole
6581     program being compiled.  All public functions and variables with
6582     the exception of `main' and those merged by attribute
6583     `externally_visible' become static functions and in effect are
6584     optimized more aggressively by interprocedural optimizers.  While
6585     this option is equivalent to proper use of the `static' keyword for
6586     programs consisting of a single file, in combination with option
6587     `-combine', `-flto' or `-fwhopr' this flag can be used to compile
6588     many smaller scale programs since the functions and variables
6589     become local for the whole combined compilation unit, not for the
6590     single source file itself.
6591
6592     This option implies `-fwhole-file' for Fortran programs.
6593
6594`-flto'
6595     This option runs the standard link-time optimizer.  When invoked
6596     with source code, it generates GIMPLE (one of GCC's internal
6597     representations) and writes it to special ELF sections in the
6598     object file.  When the object files are linked together, all the
6599     function bodies are read from these ELF sections and instantiated
6600     as if they had been part of the same translation unit.
6601
6602     To use the link-timer optimizer, `-flto' needs to be specified at
6603     compile time and during the final link.  For example,
6604
6605          gcc -c -O2 -flto foo.c
6606          gcc -c -O2 -flto bar.c
6607          gcc -o myprog -flto -O2 foo.o bar.o
6608
6609     The first two invocations to GCC will save a bytecode
6610     representation of GIMPLE into special ELF sections inside `foo.o'
6611     and `bar.o'.  The final invocation will read the GIMPLE bytecode
6612     from `foo.o' and `bar.o', merge the two files into a single
6613     internal image, and compile the result as usual.  Since both
6614     `foo.o' and `bar.o' are merged into a single image, this causes
6615     all the inter-procedural analyses and optimizations in GCC to work
6616     across the two files as if they were a single one.  This means,
6617     for example, that the inliner will be able to inline functions in
6618     `bar.o' into functions in `foo.o' and vice-versa.
6619
6620     Another (simpler) way to enable link-time optimization is,
6621
6622          gcc -o myprog -flto -O2 foo.c bar.c
6623
6624     The above will generate bytecode for `foo.c' and `bar.c', merge
6625     them together into a single GIMPLE representation and optimize
6626     them as usual to produce `myprog'.
6627
6628     The only important thing to keep in mind is that to enable
6629     link-time optimizations the `-flto' flag needs to be passed to
6630     both the compile and the link commands.
6631
6632     Note that when a file is compiled with `-flto', the generated
6633     object file will be larger than a regular object file because it
6634     will contain GIMPLE bytecodes and the usual final code.  This
6635     means that object files with LTO information can be linked as a
6636     normal object file.  So, in the previous example, if the final
6637     link is done with
6638
6639          gcc -o myprog foo.o bar.o
6640
6641     The only difference will be that no inter-procedural optimizations
6642     will be applied to produce `myprog'.  The two object files `foo.o'
6643     and `bar.o' will be simply sent to the regular linker.
6644
6645     Additionally, the optimization flags used to compile individual
6646     files are not necessarily related to those used at link-time.  For
6647     instance,
6648
6649          gcc -c -O0 -flto foo.c
6650          gcc -c -O0 -flto bar.c
6651          gcc -o myprog -flto -O3 foo.o bar.o
6652
6653     This will produce individual object files with unoptimized
6654     assembler code, but the resulting binary `myprog' will be
6655     optimized at `-O3'.  Now, if the final binary is generated without
6656     `-flto', then `myprog' will not be optimized.
6657
6658     When producing the final binary with `-flto', GCC will only apply
6659     link-time optimizations to those files that contain bytecode.
6660     Therefore, you can mix and match object files and libraries with
6661     GIMPLE bytecodes and final object code.  GCC will automatically
6662     select which files to optimize in LTO mode and which files to link
6663     without further processing.
6664
6665     There are some code generation flags that GCC will preserve when
6666     generating bytecodes, as they need to be used during the final link
6667     stage.  Currently, the following options are saved into the GIMPLE
6668     bytecode files: `-fPIC', `-fcommon' and all the `-m' target flags.
6669
6670     At link time, these options are read-in and reapplied.  Note that
6671     the current implementation makes no attempt at recognizing
6672     conflicting values for these options.  If two or more files have a
6673     conflicting value (e.g., one file is compiled with `-fPIC' and
6674     another isn't), the compiler will simply use the last value read
6675     from the bytecode files.  It is recommended, then, that all the
6676     files participating in the same link be compiled with the same
6677     options.
6678
6679     Another feature of LTO is that it is possible to apply
6680     interprocedural optimizations on files written in different
6681     languages.  This requires some support in the language front end.
6682     Currently, the C, C++ and Fortran front ends are capable of
6683     emitting GIMPLE bytecodes, so something like this should work
6684
6685          gcc -c -flto foo.c
6686          g++ -c -flto bar.cc
6687          gfortran -c -flto baz.f90
6688          g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
6689
6690     Notice that the final link is done with `g++' to get the C++
6691     runtime libraries and `-lgfortran' is added to get the Fortran
6692     runtime libraries.  In general, when mixing languages in LTO mode,
6693     you should use the same link command used when mixing languages in
6694     a regular (non-LTO) compilation.  This means that if your build
6695     process was mixing languages before, all you need to add is
6696     `-flto' to all the compile and link commands.
6697
6698     If LTO encounters objects with C linkage declared with incompatible
6699     types in separate translation units to be linked together
6700     (undefined behavior according to ISO C99 6.2.7), a non-fatal
6701     diagnostic may be issued.  The behavior is still undefined at
6702     runtime.
6703
6704     If object files containing GIMPLE bytecode are stored in a library
6705     archive, say `libfoo.a', it is possible to extract and use them in
6706     an LTO link if you are using `gold' as the linker (which, in turn
6707     requires GCC to be configured with `--enable-gold').  To enable
6708     this feature, use the flag `-fuse-linker-plugin' at link-time:
6709
6710          gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
6711
6712     With the linker plugin enabled, `gold' will extract the needed
6713     GIMPLE files from `libfoo.a' and pass them on to the running GCC
6714     to make them part of the aggregated GIMPLE image to be optimized.
6715
6716     If you are not using `gold' and/or do not specify
6717     `-fuse-linker-plugin' then the objects inside `libfoo.a' will be
6718     extracted and linked as usual, but they will not participate in
6719     the LTO optimization process.
6720
6721     Link time optimizations do not require the presence of the whole
6722     program to operate.  If the program does not require any symbols to
6723     be exported, it is possible to combine `-flto' and `-fwhopr' with
6724     `-fwhole-program' to allow the interprocedural optimizers to use
6725     more aggressive assumptions which may lead to improved
6726     optimization opportunities.
6727
6728     Regarding portability: the current implementation of LTO makes no
6729     attempt at generating bytecode that can be ported between different
6730     types of hosts.  The bytecode files are versioned and there is a
6731     strict version check, so bytecode files generated in one version of
6732     GCC will not work with an older/newer version of GCC.
6733
6734     Link time optimization does not play well with generating debugging
6735     information.  Combining `-flto' or `-fwhopr' with `-g' is
6736     experimental.
6737
6738     This option is disabled by default.
6739
6740`-fwhopr'
6741     This option is identical in functionality to `-flto' but it
6742     differs in how the final link stage is executed.  Instead of
6743     loading all the function bodies in memory, the callgraph is
6744     analyzed and optimization decisions are made (whole program
6745     analysis or WPA). Once optimization decisions are made, the
6746     callgraph is partitioned and the different sections are compiled
6747     separately (local transformations or LTRANS).  This process allows
6748     optimizations on very large programs that otherwise would not fit
6749     in memory.  This option enables `-fwpa' and `-fltrans'
6750     automatically.
6751
6752     Disabled by default.
6753
6754     This option is experimental.
6755
6756`-fwpa'
6757     This is an internal option used by GCC when compiling with
6758     `-fwhopr'.  You should never need to use it.
6759
6760     This option runs the link-time optimizer in the
6761     whole-program-analysis (WPA) mode, which reads in summary
6762     information from all inputs and performs a whole-program analysis
6763     based on summary information only.  It generates object files for
6764     subsequent runs of the link-time optimizer where individual object
6765     files are optimized using both summary information from the WPA
6766     mode and the actual function bodies.  It then drives the LTRANS
6767     phase.
6768
6769     Disabled by default.
6770
6771`-fltrans'
6772     This is an internal option used by GCC when compiling with
6773     `-fwhopr'.  You should never need to use it.
6774
6775     This option runs the link-time optimizer in the
6776     local-transformation (LTRANS) mode, which reads in output from a
6777     previous run of the LTO in WPA mode.  In the LTRANS mode, LTO
6778     optimizes an object and produces the final assembly.
6779
6780     Disabled by default.
6781
6782`-fltrans-output-list=FILE'
6783     This is an internal option used by GCC when compiling with
6784     `-fwhopr'.  You should never need to use it.
6785
6786     This option specifies a file to which the names of LTRANS output
6787     files are written.  This option is only meaningful in conjunction
6788     with `-fwpa'.
6789
6790     Disabled by default.
6791
6792`-flto-compression-level=N'
6793     This option specifies the level of compression used for
6794     intermediate language written to LTO object files, and is only
6795     meaningful in conjunction with LTO mode (`-fwhopr', `-flto').
6796     Valid values are 0 (no compression) to 9 (maximum compression).
6797     Values outside this range are clamped to either 0 or 9.  If the
6798     option is not given, a default balanced compression setting is
6799     used.
6800
6801`-flto-report'
6802     Prints a report with internal details on the workings of the
6803     link-time optimizer.  The contents of this report vary from
6804     version to version, it is meant to be useful to GCC developers
6805     when processing object files in LTO mode (via `-fwhopr' or
6806     `-flto').
6807
6808     Disabled by default.
6809
6810`-fuse-linker-plugin'
6811     Enables the extraction of objects with GIMPLE bytecode information
6812     from library archives.  This option relies on features available
6813     only in `gold', so to use this you must configure GCC with
6814     `--enable-gold'.  See `-flto' for a description on the effect of
6815     this flag and how to use it.
6816
6817     Disabled by default.
6818
6819`-fcprop-registers'
6820     After register allocation and post-register allocation instruction
6821     splitting, we perform a copy-propagation pass to try to reduce
6822     scheduling dependencies and occasionally eliminate the copy.
6823
6824     Enabled at levels `-O', `-O2', `-O3', `-Os'.
6825
6826`-fprofile-correction'
6827     Profiles collected using an instrumented binary for multi-threaded
6828     programs may be inconsistent due to missed counter updates. When
6829     this option is specified, GCC will use heuristics to correct or
6830     smooth out such inconsistencies. By default, GCC will emit an
6831     error message when an inconsistent profile is detected.
6832
6833`-fprofile-dir=PATH'
6834     Set the directory to search the profile data files in to PATH.
6835     This option affects only the profile data generated by
6836     `-fprofile-generate', `-ftest-coverage', `-fprofile-arcs' and used
6837     by `-fprofile-use' and `-fbranch-probabilities' and its related
6838     options.  By default, GCC will use the current directory as PATH
6839     thus the profile data file will appear in the same directory as
6840     the object file.
6841
6842`-fprofile-generate'
6843`-fprofile-generate=PATH'
6844     Enable options usually used for instrumenting application to
6845     produce profile useful for later recompilation with profile
6846     feedback based optimization.  You must use `-fprofile-generate'
6847     both when compiling and when linking your program.
6848
6849     The following options are enabled: `-fprofile-arcs',
6850     `-fprofile-values', `-fvpt'.
6851
6852     If PATH is specified, GCC will look at the PATH to find the
6853     profile feedback data files. See `-fprofile-dir'.
6854
6855`-fprofile-use'
6856`-fprofile-use=PATH'
6857     Enable profile feedback directed optimizations, and optimizations
6858     generally profitable only with profile feedback available.
6859
6860     The following options are enabled: `-fbranch-probabilities',
6861     `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer'
6862
6863     By default, GCC emits an error message if the feedback profiles do
6864     not match the source code.  This error can be turned into a
6865     warning by using `-Wcoverage-mismatch'.  Note this may result in
6866     poorly optimized code.
6867
6868     If PATH is specified, GCC will look at the PATH to find the
6869     profile feedback data files. See `-fprofile-dir'.
6870
6871 The following options control compiler behavior regarding floating
6872point arithmetic.  These options trade off between speed and
6873correctness.  All must be specifically enabled.
6874
6875`-ffloat-store'
6876     Do not store floating point variables in registers, and inhibit
6877     other options that might change whether a floating point value is
6878     taken from a register or memory.
6879
6880     This option prevents undesirable excess precision on machines such
6881     as the 68000 where the floating registers (of the 68881) keep more
6882     precision than a `double' is supposed to have.  Similarly for the
6883     x86 architecture.  For most programs, the excess precision does
6884     only good, but a few programs rely on the precise definition of
6885     IEEE floating point.  Use `-ffloat-store' for such programs, after
6886     modifying them to store all pertinent intermediate computations
6887     into variables.
6888
6889`-fexcess-precision=STYLE'
6890     This option allows further control over excess precision on
6891     machines where floating-point registers have more precision than
6892     the IEEE `float' and `double' types and the processor does not
6893     support operations rounding to those types.  By default,
6894     `-fexcess-precision=fast' is in effect; this means that operations
6895     are carried out in the precision of the registers and that it is
6896     unpredictable when rounding to the types specified in the source
6897     code takes place.  When compiling C, if
6898     `-fexcess-precision=standard' is specified then excess precision
6899     will follow the rules specified in ISO C99; in particular, both
6900     casts and assignments cause values to be rounded to their semantic
6901     types (whereas `-ffloat-store' only affects assignments).  This
6902     option is enabled by default for C if a strict conformance option
6903     such as `-std=c99' is used.
6904
6905     `-fexcess-precision=standard' is not implemented for languages
6906     other than C, and has no effect if `-funsafe-math-optimizations'
6907     or `-ffast-math' is specified.  On the x86, it also has no effect
6908     if `-mfpmath=sse' or `-mfpmath=sse+387' is specified; in the
6909     former case, IEEE semantics apply without excess precision, and in
6910     the latter, rounding is unpredictable.
6911
6912`-ffast-math'
6913     Sets `-fno-math-errno', `-funsafe-math-optimizations',
6914     `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans'
6915     and `-fcx-limited-range'.
6916
6917     This option causes the preprocessor macro `__FAST_MATH__' to be
6918     defined.
6919
6920     This option is not turned on by any `-O' option since it can
6921     result in incorrect output for programs which depend on an exact
6922     implementation of IEEE or ISO rules/specifications for math
6923     functions. It may, however, yield faster code for programs that do
6924     not require the guarantees of these specifications.
6925
6926`-fno-math-errno'
6927     Do not set ERRNO after calling math functions that are executed
6928     with a single instruction, e.g., sqrt.  A program that relies on
6929     IEEE exceptions for math error handling may want to use this flag
6930     for speed while maintaining IEEE arithmetic compatibility.
6931
6932     This option is not turned on by any `-O' option since it can
6933     result in incorrect output for programs which depend on an exact
6934     implementation of IEEE or ISO rules/specifications for math
6935     functions. It may, however, yield faster code for programs that do
6936     not require the guarantees of these specifications.
6937
6938     The default is `-fmath-errno'.
6939
6940     On Darwin systems, the math library never sets `errno'.  There is
6941     therefore no reason for the compiler to consider the possibility
6942     that it might, and `-fno-math-errno' is the default.
6943
6944`-funsafe-math-optimizations'
6945     Allow optimizations for floating-point arithmetic that (a) assume
6946     that arguments and results are valid and (b) may violate IEEE or
6947     ANSI standards.  When used at link-time, it may include libraries
6948     or startup files that change the default FPU control word or other
6949     similar optimizations.
6950
6951     This option is not turned on by any `-O' option since it can
6952     result in incorrect output for programs which depend on an exact
6953     implementation of IEEE or ISO rules/specifications for math
6954     functions. It may, however, yield faster code for programs that do
6955     not require the guarantees of these specifications.  Enables
6956     `-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math'
6957     and `-freciprocal-math'.
6958
6959     The default is `-fno-unsafe-math-optimizations'.
6960
6961`-fassociative-math'
6962     Allow re-association of operands in series of floating-point
6963     operations.  This violates the ISO C and C++ language standard by
6964     possibly changing computation result.  NOTE: re-ordering may
6965     change the sign of zero as well as ignore NaNs and inhibit or
6966     create underflow or overflow (and thus cannot be used on a code
6967     which relies on rounding behavior like `(x + 2**52) - 2**52)'.
6968     May also reorder floating-point comparisons and thus may not be
6969     used when ordered comparisons are required.  This option requires
6970     that both `-fno-signed-zeros' and `-fno-trapping-math' be in
6971     effect.  Moreover, it doesn't make much sense with
6972     `-frounding-math'. For Fortran the option is automatically enabled
6973     when both `-fno-signed-zeros' and `-fno-trapping-math' are in
6974     effect.
6975
6976     The default is `-fno-associative-math'.
6977
6978`-freciprocal-math'
6979     Allow the reciprocal of a value to be used instead of dividing by
6980     the value if this enables optimizations.  For example `x / y' can
6981     be replaced with `x * (1/y)' which is useful if `(1/y)' is subject
6982     to common subexpression elimination.  Note that this loses
6983     precision and increases the number of flops operating on the value.
6984
6985     The default is `-fno-reciprocal-math'.
6986
6987`-ffinite-math-only'
6988     Allow optimizations for floating-point arithmetic that assume that
6989     arguments and results are not NaNs or +-Infs.
6990
6991     This option is not turned on by any `-O' option since it can
6992     result in incorrect output for programs which depend on an exact
6993     implementation of IEEE or ISO rules/specifications for math
6994     functions. It may, however, yield faster code for programs that do
6995     not require the guarantees of these specifications.
6996
6997     The default is `-fno-finite-math-only'.
6998
6999`-fno-signed-zeros'
7000     Allow optimizations for floating point arithmetic that ignore the
7001     signedness of zero.  IEEE arithmetic specifies the behavior of
7002     distinct +0.0 and -0.0 values, which then prohibits simplification
7003     of expressions such as x+0.0 or 0.0*x (even with
7004     `-ffinite-math-only').  This option implies that the sign of a
7005     zero result isn't significant.
7006
7007     The default is `-fsigned-zeros'.
7008
7009`-fno-trapping-math'
7010     Compile code assuming that floating-point operations cannot
7011     generate user-visible traps.  These traps include division by
7012     zero, overflow, underflow, inexact result and invalid operation.
7013     This option requires that `-fno-signaling-nans' be in effect.
7014     Setting this option may allow faster code if one relies on
7015     "non-stop" IEEE arithmetic, for example.
7016
7017     This option should never be turned on by any `-O' option since it
7018     can result in incorrect output for programs which depend on an
7019     exact implementation of IEEE or ISO rules/specifications for math
7020     functions.
7021
7022     The default is `-ftrapping-math'.
7023
7024`-frounding-math'
7025     Disable transformations and optimizations that assume default
7026     floating point rounding behavior.  This is round-to-zero for all
7027     floating point to integer conversions, and round-to-nearest for
7028     all other arithmetic truncations.  This option should be specified
7029     for programs that change the FP rounding mode dynamically, or that
7030     may be executed with a non-default rounding mode.  This option
7031     disables constant folding of floating point expressions at
7032     compile-time (which may be affected by rounding mode) and
7033     arithmetic transformations that are unsafe in the presence of
7034     sign-dependent rounding modes.
7035
7036     The default is `-fno-rounding-math'.
7037
7038     This option is experimental and does not currently guarantee to
7039     disable all GCC optimizations that are affected by rounding mode.
7040     Future versions of GCC may provide finer control of this setting
7041     using C99's `FENV_ACCESS' pragma.  This command line option will
7042     be used to specify the default state for `FENV_ACCESS'.
7043
7044`-fsignaling-nans'
7045     Compile code assuming that IEEE signaling NaNs may generate
7046     user-visible traps during floating-point operations.  Setting this
7047     option disables optimizations that may change the number of
7048     exceptions visible with signaling NaNs.  This option implies
7049     `-ftrapping-math'.
7050
7051     This option causes the preprocessor macro `__SUPPORT_SNAN__' to be
7052     defined.
7053
7054     The default is `-fno-signaling-nans'.
7055
7056     This option is experimental and does not currently guarantee to
7057     disable all GCC optimizations that affect signaling NaN behavior.
7058
7059`-fsingle-precision-constant'
7060     Treat floating point constant as single precision constant instead
7061     of implicitly converting it to double precision constant.
7062
7063`-fcx-limited-range'
7064     When enabled, this option states that a range reduction step is not
7065     needed when performing complex division.  Also, there is no
7066     checking whether the result of a complex multiplication or
7067     division is `NaN + I*NaN', with an attempt to rescue the situation
7068     in that case.  The default is `-fno-cx-limited-range', but is
7069     enabled by `-ffast-math'.
7070
7071     This option controls the default setting of the ISO C99
7072     `CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to
7073     all languages.
7074
7075`-fcx-fortran-rules'
7076     Complex multiplication and division follow Fortran rules.  Range
7077     reduction is done as part of complex division, but there is no
7078     checking whether the result of a complex multiplication or
7079     division is `NaN + I*NaN', with an attempt to rescue the situation
7080     in that case.
7081
7082     The default is `-fno-cx-fortran-rules'.
7083
7084
7085 The following options control optimizations that may improve
7086performance, but are not enabled by any `-O' options.  This section
7087includes experimental options that may produce broken code.
7088
7089`-fbranch-probabilities'
7090     After running a program compiled with `-fprofile-arcs' (*note
7091     Options for Debugging Your Program or `gcc': Debugging Options.),
7092     you can compile it a second time using `-fbranch-probabilities',
7093     to improve optimizations based on the number of times each branch
7094     was taken.  When the program compiled with `-fprofile-arcs' exits
7095     it saves arc execution counts to a file called `SOURCENAME.gcda'
7096     for each source file.  The information in this data file is very
7097     dependent on the structure of the generated code, so you must use
7098     the same source code and the same optimization options for both
7099     compilations.
7100
7101     With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on
7102     each `JUMP_INSN' and `CALL_INSN'.  These can be used to improve
7103     optimization.  Currently, they are only used in one place: in
7104     `reorg.c', instead of guessing which path a branch is mostly to
7105     take, the `REG_BR_PROB' values are used to exactly determine which
7106     path is taken more often.
7107
7108`-fprofile-values'
7109     If combined with `-fprofile-arcs', it adds code so that some data
7110     about values of expressions in the program is gathered.
7111
7112     With `-fbranch-probabilities', it reads back the data gathered
7113     from profiling values of expressions and adds `REG_VALUE_PROFILE'
7114     notes to instructions for their later usage in optimizations.
7115
7116     Enabled with `-fprofile-generate' and `-fprofile-use'.
7117
7118`-fvpt'
7119     If combined with `-fprofile-arcs', it instructs the compiler to add
7120     a code to gather information about values of expressions.
7121
7122     With `-fbranch-probabilities', it reads back the data gathered and
7123     actually performs the optimizations based on them.  Currently the
7124     optimizations include specialization of division operation using
7125     the knowledge about the value of the denominator.
7126
7127`-frename-registers'
7128     Attempt to avoid false dependencies in scheduled code by making use
7129     of registers left over after register allocation.  This
7130     optimization will most benefit processors with lots of registers.
7131     Depending on the debug information format adopted by the target,
7132     however, it can make debugging impossible, since variables will no
7133     longer stay in a "home register".
7134
7135     Enabled by default with `-funroll-loops' and `-fpeel-loops'.
7136
7137`-ftracer'
7138     Perform tail duplication to enlarge superblock size.  This
7139     transformation simplifies the control flow of the function
7140     allowing other optimizations to do better job.
7141
7142     Enabled with `-fprofile-use'.
7143
7144`-funroll-loops'
7145     Unroll loops whose number of iterations can be determined at
7146     compile time or upon entry to the loop.  `-funroll-loops' implies
7147     `-frerun-cse-after-loop', `-fweb' and `-frename-registers'.  It
7148     also turns on complete loop peeling (i.e. complete removal of
7149     loops with small constant number of iterations).  This option
7150     makes code larger, and may or may not make it run faster.
7151
7152     Enabled with `-fprofile-use'.
7153
7154`-funroll-all-loops'
7155     Unroll all loops, even if their number of iterations is uncertain
7156     when the loop is entered.  This usually makes programs run more
7157     slowly.  `-funroll-all-loops' implies the same options as
7158     `-funroll-loops'.
7159
7160`-fpeel-loops'
7161     Peels the loops for that there is enough information that they do
7162     not roll much (from profile feedback).  It also turns on complete
7163     loop peeling (i.e. complete removal of loops with small constant
7164     number of iterations).
7165
7166     Enabled with `-fprofile-use'.
7167
7168`-fmove-loop-invariants'
7169     Enables the loop invariant motion pass in the RTL loop optimizer.
7170     Enabled at level `-O1'
7171
7172`-funswitch-loops'
7173     Move branches with loop invariant conditions out of the loop, with
7174     duplicates of the loop on both branches (modified according to
7175     result of the condition).
7176
7177`-ffunction-sections'
7178`-fdata-sections'
7179     Place each function or data item into its own section in the output
7180     file if the target supports arbitrary sections.  The name of the
7181     function or the name of the data item determines the section's name
7182     in the output file.
7183
7184     Use these options on systems where the linker can perform
7185     optimizations to improve locality of reference in the instruction
7186     space.  Most systems using the ELF object format and SPARC
7187     processors running Solaris 2 have linkers with such optimizations.
7188     AIX may have these optimizations in the future.
7189
7190     Only use these options when there are significant benefits from
7191     doing so.  When you specify these options, the assembler and
7192     linker will create larger object and executable files and will
7193     also be slower.  You will not be able to use `gprof' on all
7194     systems if you specify this option and you may have problems with
7195     debugging if you specify both this option and `-g'.
7196
7197`-fbranch-target-load-optimize'
7198     Perform branch target register load optimization before prologue /
7199     epilogue threading.  The use of target registers can typically be
7200     exposed only during reload, thus hoisting loads out of loops and
7201     doing inter-block scheduling needs a separate optimization pass.
7202
7203`-fbranch-target-load-optimize2'
7204     Perform branch target register load optimization after prologue /
7205     epilogue threading.
7206
7207`-fbtr-bb-exclusive'
7208     When performing branch target register load optimization, don't
7209     reuse branch target registers in within any basic block.
7210
7211`-fstack-protector'
7212     Emit extra code to check for buffer overflows, such as stack
7213     smashing attacks.  This is done by adding a guard variable to
7214     functions with vulnerable objects.  This includes functions that
7215     call alloca, and functions with buffers larger than 8 bytes.  The
7216     guards are initialized when a function is entered and then checked
7217     when the function exits.  If a guard check fails, an error message
7218     is printed and the program exits.
7219
7220`-fstack-protector-all'
7221     Like `-fstack-protector' except that all functions are protected.
7222
7223`-fsection-anchors'
7224     Try to reduce the number of symbolic address calculations by using
7225     shared "anchor" symbols to address nearby objects.  This
7226     transformation can help to reduce the number of GOT entries and
7227     GOT accesses on some targets.
7228
7229     For example, the implementation of the following function `foo':
7230
7231          static int a, b, c;
7232          int foo (void) { return a + b + c; }
7233
7234     would usually calculate the addresses of all three variables, but
7235     if you compile it with `-fsection-anchors', it will access the
7236     variables from a common anchor point instead.  The effect is
7237     similar to the following pseudocode (which isn't valid C):
7238
7239          int foo (void)
7240          {
7241            register int *xr = &x;
7242            return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
7243          }
7244
7245     Not all targets support this option.
7246
7247`--param NAME=VALUE'
7248     In some places, GCC uses various constants to control the amount of
7249     optimization that is done.  For example, GCC will not inline
7250     functions that contain more that a certain number of instructions.
7251     You can control some of these constants on the command-line using
7252     the `--param' option.
7253
7254     The names of specific parameters, and the meaning of the values,
7255     are tied to the internals of the compiler, and are subject to
7256     change without notice in future releases.
7257
7258     In each case, the VALUE is an integer.  The allowable choices for
7259     NAME are given in the following table:
7260
7261    `struct-reorg-cold-struct-ratio'
7262          The threshold ratio (as a percentage) between a structure
7263          frequency and the frequency of the hottest structure in the
7264          program.  This parameter is used by struct-reorg optimization
7265          enabled by `-fipa-struct-reorg'.  We say that if the ratio of
7266          a structure frequency, calculated by profiling, to the
7267          hottest structure frequency in the program is less than this
7268          parameter, then structure reorganization is not applied to
7269          this structure.  The default is 10.
7270
7271    `predictable-branch-outcome'
7272          When branch is predicted to be taken with probability lower
7273          than this threshold (in percent), then it is considered well
7274          predictable. The default is 10.
7275
7276    `max-crossjump-edges'
7277          The maximum number of incoming edges to consider for
7278          crossjumping.  The algorithm used by `-fcrossjumping' is
7279          O(N^2) in the number of edges incoming to each block.
7280          Increasing values mean more aggressive optimization, making
7281          the compile time increase with probably small improvement in
7282          executable size.
7283
7284    `min-crossjump-insns'
7285          The minimum number of instructions which must be matched at
7286          the end of two blocks before crossjumping will be performed
7287          on them.  This value is ignored in the case where all
7288          instructions in the block being crossjumped from are matched.
7289          The default value is 5.
7290
7291    `max-grow-copy-bb-insns'
7292          The maximum code size expansion factor when copying basic
7293          blocks instead of jumping.  The expansion is relative to a
7294          jump instruction.  The default value is 8.
7295
7296    `max-goto-duplication-insns'
7297          The maximum number of instructions to duplicate to a block
7298          that jumps to a computed goto.  To avoid O(N^2) behavior in a
7299          number of passes, GCC factors computed gotos early in the
7300          compilation process, and unfactors them as late as possible.
7301          Only computed jumps at the end of a basic blocks with no more
7302          than max-goto-duplication-insns are unfactored.  The default
7303          value is 8.
7304
7305    `max-delay-slot-insn-search'
7306          The maximum number of instructions to consider when looking
7307          for an instruction to fill a delay slot.  If more than this
7308          arbitrary number of instructions is searched, the time
7309          savings from filling the delay slot will be minimal so stop
7310          searching.  Increasing values mean more aggressive
7311          optimization, making the compile time increase with probably
7312          small improvement in executable run time.
7313
7314    `max-delay-slot-live-search'
7315          When trying to fill delay slots, the maximum number of
7316          instructions to consider when searching for a block with
7317          valid live register information.  Increasing this arbitrarily
7318          chosen value means more aggressive optimization, increasing
7319          the compile time.  This parameter should be removed when the
7320          delay slot code is rewritten to maintain the control-flow
7321          graph.
7322
7323    `max-gcse-memory'
7324          The approximate maximum amount of memory that will be
7325          allocated in order to perform the global common subexpression
7326          elimination optimization.  If more memory than specified is
7327          required, the optimization will not be done.
7328
7329    `max-pending-list-length'
7330          The maximum number of pending dependencies scheduling will
7331          allow before flushing the current state and starting over.
7332          Large functions with few branches or calls can create
7333          excessively large lists which needlessly consume memory and
7334          resources.
7335
7336    `max-inline-insns-single'
7337          Several parameters control the tree inliner used in gcc.
7338          This number sets the maximum number of instructions (counted
7339          in GCC's internal representation) in a single function that
7340          the tree inliner will consider for inlining.  This only
7341          affects functions declared inline and methods implemented in
7342          a class declaration (C++).  The default value is 300.
7343
7344    `max-inline-insns-auto'
7345          When you use `-finline-functions' (included in `-O3'), a lot
7346          of functions that would otherwise not be considered for
7347          inlining by the compiler will be investigated.  To those
7348          functions, a different (more restrictive) limit compared to
7349          functions declared inline can be applied.  The default value
7350          is 50.
7351
7352    `large-function-insns'
7353          The limit specifying really large functions.  For functions
7354          larger than this limit after inlining, inlining is
7355          constrained by `--param large-function-growth'.  This
7356          parameter is useful primarily to avoid extreme compilation
7357          time caused by non-linear algorithms used by the backend.
7358          The default value is 2700.
7359
7360    `large-function-growth'
7361          Specifies maximal growth of large function caused by inlining
7362          in percents.  The default value is 100 which limits large
7363          function growth to 2.0 times the original size.
7364
7365    `large-unit-insns'
7366          The limit specifying large translation unit.  Growth caused
7367          by inlining of units larger than this limit is limited by
7368          `--param inline-unit-growth'.  For small units this might be
7369          too tight (consider unit consisting of function A that is
7370          inline and B that just calls A three time.  If B is small
7371          relative to A, the growth of unit is 300\% and yet such
7372          inlining is very sane.  For very large units consisting of
7373          small inlineable functions however the overall unit growth
7374          limit is needed to avoid exponential explosion of code size.
7375          Thus for smaller units, the size is increased to `--param
7376          large-unit-insns' before applying `--param
7377          inline-unit-growth'.  The default is 10000
7378
7379    `inline-unit-growth'
7380          Specifies maximal overall growth of the compilation unit
7381          caused by inlining.  The default value is 30 which limits
7382          unit growth to 1.3 times the original size.
7383
7384    `ipcp-unit-growth'
7385          Specifies maximal overall growth of the compilation unit
7386          caused by interprocedural constant propagation.  The default
7387          value is 10 which limits unit growth to 1.1 times the
7388          original size.
7389
7390    `large-stack-frame'
7391          The limit specifying large stack frames.  While inlining the
7392          algorithm is trying to not grow past this limit too much.
7393          Default value is 256 bytes.
7394
7395    `large-stack-frame-growth'
7396          Specifies maximal growth of large stack frames caused by
7397          inlining in percents.  The default value is 1000 which limits
7398          large stack frame growth to 11 times the original size.
7399
7400    `max-inline-insns-recursive'
7401    `max-inline-insns-recursive-auto'
7402          Specifies maximum number of instructions out-of-line copy of
7403          self recursive inline function can grow into by performing
7404          recursive inlining.
7405
7406          For functions declared inline `--param
7407          max-inline-insns-recursive' is taken into account.  For
7408          function not declared inline, recursive inlining happens only
7409          when `-finline-functions' (included in `-O3') is enabled and
7410          `--param max-inline-insns-recursive-auto' is used.  The
7411          default value is 450.
7412
7413    `max-inline-recursive-depth'
7414    `max-inline-recursive-depth-auto'
7415          Specifies maximum recursion depth used by the recursive
7416          inlining.
7417
7418          For functions declared inline `--param
7419          max-inline-recursive-depth' is taken into account.  For
7420          function not declared inline, recursive inlining happens only
7421          when `-finline-functions' (included in `-O3') is enabled and
7422          `--param max-inline-recursive-depth-auto' is used.  The
7423          default value is 8.
7424
7425    `min-inline-recursive-probability'
7426          Recursive inlining is profitable only for function having
7427          deep recursion in average and can hurt for function having
7428          little recursion depth by increasing the prologue size or
7429          complexity of function body to other optimizers.
7430
7431          When profile feedback is available (see `-fprofile-generate')
7432          the actual recursion depth can be guessed from probability
7433          that function will recurse via given call expression.  This
7434          parameter limits inlining only to call expression whose
7435          probability exceeds given threshold (in percents).  The
7436          default value is 10.
7437
7438    `early-inlining-insns'
7439          Specify growth that early inliner can make.  In effect it
7440          increases amount of inlining for code having large
7441          abstraction penalty.  The default value is 8.
7442
7443    `max-early-inliner-iterations'
7444    `max-early-inliner-iterations'
7445          Limit of iterations of early inliner.  This basically bounds
7446          number of nested indirect calls early inliner can resolve.
7447          Deeper chains are still handled by late inlining.
7448
7449    `min-vect-loop-bound'
7450          The minimum number of iterations under which a loop will not
7451          get vectorized when `-ftree-vectorize' is used.  The number
7452          of iterations after vectorization needs to be greater than
7453          the value specified by this option to allow vectorization.
7454          The default value is 0.
7455
7456    `max-unrolled-insns'
7457          The maximum number of instructions that a loop should have if
7458          that loop is unrolled, and if the loop is unrolled, it
7459          determines how many times the loop code is unrolled.
7460
7461    `max-average-unrolled-insns'
7462          The maximum number of instructions biased by probabilities of
7463          their execution that a loop should have if that loop is
7464          unrolled, and if the loop is unrolled, it determines how many
7465          times the loop code is unrolled.
7466
7467    `max-unroll-times'
7468          The maximum number of unrollings of a single loop.
7469
7470    `max-peeled-insns'
7471          The maximum number of instructions that a loop should have if
7472          that loop is peeled, and if the loop is peeled, it determines
7473          how many times the loop code is peeled.
7474
7475    `max-peel-times'
7476          The maximum number of peelings of a single loop.
7477
7478    `max-completely-peeled-insns'
7479          The maximum number of insns of a completely peeled loop.
7480
7481    `max-completely-peel-times'
7482          The maximum number of iterations of a loop to be suitable for
7483          complete peeling.
7484
7485    `max-completely-peel-loop-nest-depth'
7486          The maximum depth of a loop nest suitable for complete
7487          peeling.
7488
7489    `max-unswitch-insns'
7490          The maximum number of insns of an unswitched loop.
7491
7492    `max-unswitch-level'
7493          The maximum number of branches unswitched in a single loop.
7494
7495    `lim-expensive'
7496          The minimum cost of an expensive expression in the loop
7497          invariant motion.
7498
7499    `iv-consider-all-candidates-bound'
7500          Bound on number of candidates for induction variables below
7501          that all candidates are considered for each use in induction
7502          variable optimizations.  Only the most relevant candidates
7503          are considered if there are more candidates, to avoid
7504          quadratic time complexity.
7505
7506    `iv-max-considered-uses'
7507          The induction variable optimizations give up on loops that
7508          contain more induction variable uses.
7509
7510    `iv-always-prune-cand-set-bound'
7511          If number of candidates in the set is smaller than this value,
7512          we always try to remove unnecessary ivs from the set during
7513          its optimization when a new iv is added to the set.
7514
7515    `scev-max-expr-size'
7516          Bound on size of expressions used in the scalar evolutions
7517          analyzer.  Large expressions slow the analyzer.
7518
7519    `omega-max-vars'
7520          The maximum number of variables in an Omega constraint system.
7521          The default value is 128.
7522
7523    `omega-max-geqs'
7524          The maximum number of inequalities in an Omega constraint
7525          system.  The default value is 256.
7526
7527    `omega-max-eqs'
7528          The maximum number of equalities in an Omega constraint
7529          system.  The default value is 128.
7530
7531    `omega-max-wild-cards'
7532          The maximum number of wildcard variables that the Omega
7533          solver will be able to insert.  The default value is 18.
7534
7535    `omega-hash-table-size'
7536          The size of the hash table in the Omega solver.  The default
7537          value is 550.
7538
7539    `omega-max-keys'
7540          The maximal number of keys used by the Omega solver.  The
7541          default value is 500.
7542
7543    `omega-eliminate-redundant-constraints'
7544          When set to 1, use expensive methods to eliminate all
7545          redundant constraints.  The default value is 0.
7546
7547    `vect-max-version-for-alignment-checks'
7548          The maximum number of runtime checks that can be performed
7549          when doing loop versioning for alignment in the vectorizer.
7550          See option ftree-vect-loop-version for more information.
7551
7552    `vect-max-version-for-alias-checks'
7553          The maximum number of runtime checks that can be performed
7554          when doing loop versioning for alias in the vectorizer.  See
7555          option ftree-vect-loop-version for more information.
7556
7557    `max-iterations-to-track'
7558          The maximum number of iterations of a loop the brute force
7559          algorithm for analysis of # of iterations of the loop tries
7560          to evaluate.
7561
7562    `hot-bb-count-fraction'
7563          Select fraction of the maximal count of repetitions of basic
7564          block in program given basic block needs to have to be
7565          considered hot.
7566
7567    `hot-bb-frequency-fraction'
7568          Select fraction of the maximal frequency of executions of
7569          basic block in function given basic block needs to have to be
7570          considered hot
7571
7572    `max-predicted-iterations'
7573          The maximum number of loop iterations we predict statically.
7574          This is useful in cases where function contain single loop
7575          with known bound and other loop with unknown.  We predict the
7576          known number of iterations correctly, while the unknown
7577          number of iterations average to roughly 10.  This means that
7578          the loop without bounds would appear artificially cold
7579          relative to the other one.
7580
7581    `align-threshold'
7582          Select fraction of the maximal frequency of executions of
7583          basic block in function given basic block will get aligned.
7584
7585    `align-loop-iterations'
7586          A loop expected to iterate at lest the selected number of
7587          iterations will get aligned.
7588
7589    `tracer-dynamic-coverage'
7590    `tracer-dynamic-coverage-feedback'
7591          This value is used to limit superblock formation once the
7592          given percentage of executed instructions is covered.  This
7593          limits unnecessary code size expansion.
7594
7595          The `tracer-dynamic-coverage-feedback' is used only when
7596          profile feedback is available.  The real profiles (as opposed
7597          to statically estimated ones) are much less balanced allowing
7598          the threshold to be larger value.
7599
7600    `tracer-max-code-growth'
7601          Stop tail duplication once code growth has reached given
7602          percentage.  This is rather hokey argument, as most of the
7603          duplicates will be eliminated later in cross jumping, so it
7604          may be set to much higher values than is the desired code
7605          growth.
7606
7607    `tracer-min-branch-ratio'
7608          Stop reverse growth when the reverse probability of best edge
7609          is less than this threshold (in percent).
7610
7611    `tracer-min-branch-ratio'
7612    `tracer-min-branch-ratio-feedback'
7613          Stop forward growth if the best edge do have probability
7614          lower than this threshold.
7615
7616          Similarly to `tracer-dynamic-coverage' two values are
7617          present, one for compilation for profile feedback and one for
7618          compilation without.  The value for compilation with profile
7619          feedback needs to be more conservative (higher) in order to
7620          make tracer effective.
7621
7622    `max-cse-path-length'
7623          Maximum number of basic blocks on path that cse considers.
7624          The default is 10.
7625
7626    `max-cse-insns'
7627          The maximum instructions CSE process before flushing. The
7628          default is 1000.
7629
7630    `ggc-min-expand'
7631          GCC uses a garbage collector to manage its own memory
7632          allocation.  This parameter specifies the minimum percentage
7633          by which the garbage collector's heap should be allowed to
7634          expand between collections.  Tuning this may improve
7635          compilation speed; it has no effect on code generation.
7636
7637          The default is 30% + 70% * (RAM/1GB) with an upper bound of
7638          100% when RAM >= 1GB.  If `getrlimit' is available, the
7639          notion of "RAM" is the smallest of actual RAM and
7640          `RLIMIT_DATA' or `RLIMIT_AS'.  If GCC is not able to
7641          calculate RAM on a particular platform, the lower bound of
7642          30% is used.  Setting this parameter and `ggc-min-heapsize'
7643          to zero causes a full collection to occur at every
7644          opportunity.  This is extremely slow, but can be useful for
7645          debugging.
7646
7647    `ggc-min-heapsize'
7648          Minimum size of the garbage collector's heap before it begins
7649          bothering to collect garbage.  The first collection occurs
7650          after the heap expands by `ggc-min-expand'% beyond
7651          `ggc-min-heapsize'.  Again, tuning this may improve
7652          compilation speed, and has no effect on code generation.
7653
7654          The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
7655          which tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
7656          exceeded, but with a lower bound of 4096 (four megabytes) and
7657          an upper bound of 131072 (128 megabytes).  If GCC is not able
7658          to calculate RAM on a particular platform, the lower bound is
7659          used.  Setting this parameter very large effectively disables
7660          garbage collection.  Setting this parameter and
7661          `ggc-min-expand' to zero causes a full collection to occur at
7662          every opportunity.
7663
7664    `max-reload-search-insns'
7665          The maximum number of instruction reload should look backward
7666          for equivalent register.  Increasing values mean more
7667          aggressive optimization, making the compile time increase
7668          with probably slightly better performance.  The default value
7669          is 100.
7670
7671    `max-cselib-memory-locations'
7672          The maximum number of memory locations cselib should take
7673          into account.  Increasing values mean more aggressive
7674          optimization, making the compile time increase with probably
7675          slightly better performance.  The default value is 500.
7676
7677    `reorder-blocks-duplicate'
7678    `reorder-blocks-duplicate-feedback'
7679          Used by basic block reordering pass to decide whether to use
7680          unconditional branch or duplicate the code on its
7681          destination.  Code is duplicated when its estimated size is
7682          smaller than this value multiplied by the estimated size of
7683          unconditional jump in the hot spots of the program.
7684
7685          The `reorder-block-duplicate-feedback' is used only when
7686          profile feedback is available and may be set to higher values
7687          than `reorder-block-duplicate' since information about the
7688          hot spots is more accurate.
7689
7690    `max-sched-ready-insns'
7691          The maximum number of instructions ready to be issued the
7692          scheduler should consider at any given time during the first
7693          scheduling pass.  Increasing values mean more thorough
7694          searches, making the compilation time increase with probably
7695          little benefit.  The default value is 100.
7696
7697    `max-sched-region-blocks'
7698          The maximum number of blocks in a region to be considered for
7699          interblock scheduling.  The default value is 10.
7700
7701    `max-pipeline-region-blocks'
7702          The maximum number of blocks in a region to be considered for
7703          pipelining in the selective scheduler.  The default value is
7704          15.
7705
7706    `max-sched-region-insns'
7707          The maximum number of insns in a region to be considered for
7708          interblock scheduling.  The default value is 100.
7709
7710    `max-pipeline-region-insns'
7711          The maximum number of insns in a region to be considered for
7712          pipelining in the selective scheduler.  The default value is
7713          200.
7714
7715    `min-spec-prob'
7716          The minimum probability (in percents) of reaching a source
7717          block for interblock speculative scheduling.  The default
7718          value is 40.
7719
7720    `max-sched-extend-regions-iters'
7721          The maximum number of iterations through CFG to extend
7722          regions.  0 - disable region extension, N - do at most N
7723          iterations.  The default value is 0.
7724
7725    `max-sched-insn-conflict-delay'
7726          The maximum conflict delay for an insn to be considered for
7727          speculative motion.  The default value is 3.
7728
7729    `sched-spec-prob-cutoff'
7730          The minimal probability of speculation success (in percents),
7731          so that speculative insn will be scheduled.  The default
7732          value is 40.
7733
7734    `sched-mem-true-dep-cost'
7735          Minimal distance (in CPU cycles) between store and load
7736          targeting same memory locations.  The default value is 1.
7737
7738    `selsched-max-lookahead'
7739          The maximum size of the lookahead window of selective
7740          scheduling.  It is a depth of search for available
7741          instructions.  The default value is 50.
7742
7743    `selsched-max-sched-times'
7744          The maximum number of times that an instruction will be
7745          scheduled during selective scheduling.  This is the limit on
7746          the number of iterations through which the instruction may be
7747          pipelined.  The default value is 2.
7748
7749    `selsched-max-insns-to-rename'
7750          The maximum number of best instructions in the ready list
7751          that are considered for renaming in the selective scheduler.
7752          The default value is 2.
7753
7754    `max-last-value-rtl'
7755          The maximum size measured as number of RTLs that can be
7756          recorded in an expression in combiner for a pseudo register
7757          as last known value of that register.  The default is 10000.
7758
7759    `integer-share-limit'
7760          Small integer constants can use a shared data structure,
7761          reducing the compiler's memory usage and increasing its
7762          speed.  This sets the maximum value of a shared integer
7763          constant.  The default value is 256.
7764
7765    `min-virtual-mappings'
7766          Specifies the minimum number of virtual mappings in the
7767          incremental SSA updater that should be registered to trigger
7768          the virtual mappings heuristic defined by
7769          virtual-mappings-ratio.  The default value is 100.
7770
7771    `virtual-mappings-ratio'
7772          If the number of virtual mappings is virtual-mappings-ratio
7773          bigger than the number of virtual symbols to be updated, then
7774          the incremental SSA updater switches to a full update for
7775          those symbols.  The default ratio is 3.
7776
7777    `ssp-buffer-size'
7778          The minimum size of buffers (i.e. arrays) that will receive
7779          stack smashing protection when `-fstack-protection' is used.
7780
7781    `max-jump-thread-duplication-stmts'
7782          Maximum number of statements allowed in a block that needs to
7783          be duplicated when threading jumps.
7784
7785    `max-fields-for-field-sensitive'
7786          Maximum number of fields in a structure we will treat in a
7787          field sensitive manner during pointer analysis.  The default
7788          is zero for -O0, and -O1 and 100 for -Os, -O2, and -O3.
7789
7790    `prefetch-latency'
7791          Estimate on average number of instructions that are executed
7792          before prefetch finishes.  The distance we prefetch ahead is
7793          proportional to this constant.  Increasing this number may
7794          also lead to less streams being prefetched (see
7795          `simultaneous-prefetches').
7796
7797    `simultaneous-prefetches'
7798          Maximum number of prefetches that can run at the same time.
7799
7800    `l1-cache-line-size'
7801          The size of cache line in L1 cache, in bytes.
7802
7803    `l1-cache-size'
7804          The size of L1 cache, in kilobytes.
7805
7806    `l2-cache-size'
7807          The size of L2 cache, in kilobytes.
7808
7809    `min-insn-to-prefetch-ratio'
7810          The minimum ratio between the number of instructions and the
7811          number of prefetches to enable prefetching in a loop with an
7812          unknown trip count.
7813
7814    `prefetch-min-insn-to-mem-ratio'
7815          The minimum ratio between the number of instructions and the
7816          number of memory references to enable prefetching in a loop.
7817
7818    `use-canonical-types'
7819          Whether the compiler should use the "canonical" type system.
7820          By default, this should always be 1, which uses a more
7821          efficient internal mechanism for comparing types in C++ and
7822          Objective-C++.  However, if bugs in the canonical type system
7823          are causing compilation failures, set this value to 0 to
7824          disable canonical types.
7825
7826    `switch-conversion-max-branch-ratio'
7827          Switch initialization conversion will refuse to create arrays
7828          that are bigger than `switch-conversion-max-branch-ratio'
7829          times the number of branches in the switch.
7830
7831    `max-partial-antic-length'
7832          Maximum length of the partial antic set computed during the
7833          tree partial redundancy elimination optimization
7834          (`-ftree-pre') when optimizing at `-O3' and above.  For some
7835          sorts of source code the enhanced partial redundancy
7836          elimination optimization can run away, consuming all of the
7837          memory available on the host machine.  This parameter sets a
7838          limit on the length of the sets that are computed, which
7839          prevents the runaway behavior.  Setting a value of 0 for this
7840          parameter will allow an unlimited set length.
7841
7842    `sccvn-max-scc-size'
7843          Maximum size of a strongly connected component (SCC) during
7844          SCCVN processing.  If this limit is hit, SCCVN processing for
7845          the whole function will not be done and optimizations
7846          depending on it will be disabled.  The default maximum SCC
7847          size is 10000.
7848
7849    `ira-max-loops-num'
7850          IRA uses a regional register allocation by default.  If a
7851          function contains loops more than number given by the
7852          parameter, only at most given number of the most frequently
7853          executed loops will form regions for the regional register
7854          allocation.  The default value of the parameter is 100.
7855
7856    `ira-max-conflict-table-size'
7857          Although IRA uses a sophisticated algorithm of compression
7858          conflict table, the table can be still big for huge
7859          functions.  If the conflict table for a function could be
7860          more than size in MB given by the parameter, the conflict
7861          table is not built and faster, simpler, and lower quality
7862          register allocation algorithm will be used.  The algorithm do
7863          not use pseudo-register conflicts.  The default value of the
7864          parameter is 2000.
7865
7866    `ira-loop-reserved-regs'
7867          IRA can be used to evaluate more accurate register pressure
7868          in loops for decision to move loop invariants (see `-O3').
7869          The number of available registers reserved for some other
7870          purposes is described by this parameter.  The default value
7871          of the parameter is 2 which is minimal number of registers
7872          needed for execution of typical instruction.  This value is
7873          the best found from numerous experiments.
7874
7875    `loop-invariant-max-bbs-in-loop'
7876          Loop invariant motion can be very expensive, both in compile
7877          time and in amount of needed compile time memory, with very
7878          large loops.  Loops with more basic blocks than this
7879          parameter won't have loop invariant motion optimization
7880          performed on them.  The default value of the parameter is
7881          1000 for -O1 and 10000 for -O2 and above.
7882
7883    `max-vartrack-size'
7884          Sets a maximum number of hash table slots to use during
7885          variable tracking dataflow analysis of any function.  If this
7886          limit is exceeded with variable tracking at assignments
7887          enabled, analysis for that function is retried without it,
7888          after removing all debug insns from the function.  If the
7889          limit is exceeded even without debug insns, var tracking
7890          analysis is completely disabled for the function.  Setting
7891          the parameter to zero makes it unlimited.
7892
7893    `min-nondebug-insn-uid'
7894          Use uids starting at this parameter for nondebug insns.  The
7895          range below the parameter is reserved exclusively for debug
7896          insns created by `-fvar-tracking-assignments', but debug
7897          insns may get (non-overlapping) uids above it if the reserved
7898          range is exhausted.
7899
7900    `ipa-sra-ptr-growth-factor'
7901          IPA-SRA will replace a pointer to an aggregate with one or
7902          more new parameters only when their cumulative size is less
7903          or equal to `ipa-sra-ptr-growth-factor' times the size of the
7904          original pointer parameter.
7905
7906    `graphite-max-nb-scop-params'
7907          To avoid exponential effects in the Graphite loop transforms,
7908          the number of parameters in a Static Control Part (SCoP) is
7909          bounded.  The default value is 10 parameters.  A variable
7910          whose value is unknown at compile time and defined outside a
7911          SCoP is a parameter of the SCoP.
7912
7913    `graphite-max-bbs-per-function'
7914          To avoid exponential effects in the detection of SCoPs, the
7915          size of the functions analyzed by Graphite is bounded.  The
7916          default value is 100 basic blocks.
7917
7918    `loop-block-tile-size'
7919          Loop blocking or strip mining transforms, enabled with
7920          `-floop-block' or `-floop-strip-mine', strip mine each loop
7921          in the loop nest by a given number of iterations.  The strip
7922          length can be changed using the `loop-block-tile-size'
7923          parameter.  The default value is 51 iterations.
7924
7925
7926
7927File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Optimize Options,  Up: Invoking GCC
7928
79293.11 Options Controlling the Preprocessor
7930=========================================
7931
7932These options control the C preprocessor, which is run on each C source
7933file before actual compilation.
7934
7935 If you use the `-E' option, nothing is done except preprocessing.
7936Some of these options make sense only together with `-E' because they
7937cause the preprocessor output to be unsuitable for actual compilation.
7938
7939`-Wp,OPTION'
7940     You can use `-Wp,OPTION' to bypass the compiler driver and pass
7941     OPTION directly through to the preprocessor.  If OPTION contains
7942     commas, it is split into multiple options at the commas.  However,
7943     many options are modified, translated or interpreted by the
7944     compiler driver before being passed to the preprocessor, and `-Wp'
7945     forcibly bypasses this phase.  The preprocessor's direct interface
7946     is undocumented and subject to change, so whenever possible you
7947     should avoid using `-Wp' and let the driver handle the options
7948     instead.
7949
7950`-Xpreprocessor OPTION'
7951     Pass OPTION as an option to the preprocessor.  You can use this to
7952     supply system-specific preprocessor options which GCC does not
7953     know how to recognize.
7954
7955     If you want to pass an option that takes an argument, you must use
7956     `-Xpreprocessor' twice, once for the option and once for the
7957     argument.
7958
7959`-D NAME'
7960     Predefine NAME as a macro, with definition `1'.
7961
7962`-D NAME=DEFINITION'
7963     The contents of DEFINITION are tokenized and processed as if they
7964     appeared during translation phase three in a `#define' directive.
7965     In particular, the definition will be truncated by embedded
7966     newline characters.
7967
7968     If you are invoking the preprocessor from a shell or shell-like
7969     program you may need to use the shell's quoting syntax to protect
7970     characters such as spaces that have a meaning in the shell syntax.
7971
7972     If you wish to define a function-like macro on the command line,
7973     write its argument list with surrounding parentheses before the
7974     equals sign (if any).  Parentheses are meaningful to most shells,
7975     so you will need to quote the option.  With `sh' and `csh',
7976     `-D'NAME(ARGS...)=DEFINITION'' works.
7977
7978     `-D' and `-U' options are processed in the order they are given on
7979     the command line.  All `-imacros FILE' and `-include FILE' options
7980     are processed after all `-D' and `-U' options.
7981
7982`-U NAME'
7983     Cancel any previous definition of NAME, either built in or
7984     provided with a `-D' option.
7985
7986`-undef'
7987     Do not predefine any system-specific or GCC-specific macros.  The
7988     standard predefined macros remain defined.
7989
7990`-I DIR'
7991     Add the directory DIR to the list of directories to be searched
7992     for header files.  Directories named by `-I' are searched before
7993     the standard system include directories.  If the directory DIR is
7994     a standard system include directory, the option is ignored to
7995     ensure that the default search order for system directories and
7996     the special treatment of system headers are not defeated .  If DIR
7997     begins with `=', then the `=' will be replaced by the sysroot
7998     prefix; see `--sysroot' and `-isysroot'.
7999
8000`-o FILE'
8001     Write output to FILE.  This is the same as specifying FILE as the
8002     second non-option argument to `cpp'.  `gcc' has a different
8003     interpretation of a second non-option argument, so you must use
8004     `-o' to specify the output file.
8005
8006`-Wall'
8007     Turns on all optional warnings which are desirable for normal code.
8008     At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a
8009     warning about integer promotion causing a change of sign in `#if'
8010     expressions.  Note that many of the preprocessor's warnings are on
8011     by default and have no options to control them.
8012
8013`-Wcomment'
8014`-Wcomments'
8015     Warn whenever a comment-start sequence `/*' appears in a `/*'
8016     comment, or whenever a backslash-newline appears in a `//' comment.
8017     (Both forms have the same effect.)
8018
8019`-Wtrigraphs'
8020     Most trigraphs in comments cannot affect the meaning of the
8021     program.  However, a trigraph that would form an escaped newline
8022     (`??/' at the end of a line) can, by changing where the comment
8023     begins or ends.  Therefore, only trigraphs that would form escaped
8024     newlines produce warnings inside a comment.
8025
8026     This option is implied by `-Wall'.  If `-Wall' is not given, this
8027     option is still enabled unless trigraphs are enabled.  To get
8028     trigraph conversion without warnings, but get the other `-Wall'
8029     warnings, use `-trigraphs -Wall -Wno-trigraphs'.
8030
8031`-Wtraditional'
8032     Warn about certain constructs that behave differently in
8033     traditional and ISO C.  Also warn about ISO C constructs that have
8034     no traditional C equivalent, and problematic constructs which
8035     should be avoided.
8036
8037`-Wundef'
8038     Warn whenever an identifier which is not a macro is encountered in
8039     an `#if' directive, outside of `defined'.  Such identifiers are
8040     replaced with zero.
8041
8042`-Wunused-macros'
8043     Warn about macros defined in the main file that are unused.  A
8044     macro is "used" if it is expanded or tested for existence at least
8045     once.  The preprocessor will also warn if the macro has not been
8046     used at the time it is redefined or undefined.
8047
8048     Built-in macros, macros defined on the command line, and macros
8049     defined in include files are not warned about.
8050
8051     _Note:_ If a macro is actually used, but only used in skipped
8052     conditional blocks, then CPP will report it as unused.  To avoid
8053     the warning in such a case, you might improve the scope of the
8054     macro's definition by, for example, moving it into the first
8055     skipped block.  Alternatively, you could provide a dummy use with
8056     something like:
8057
8058          #if defined the_macro_causing_the_warning
8059          #endif
8060
8061`-Wendif-labels'
8062     Warn whenever an `#else' or an `#endif' are followed by text.
8063     This usually happens in code of the form
8064
8065          #if FOO
8066          ...
8067          #else FOO
8068          ...
8069          #endif FOO
8070
8071     The second and third `FOO' should be in comments, but often are not
8072     in older programs.  This warning is on by default.
8073
8074`-Werror'
8075     Make all warnings into hard errors.  Source code which triggers
8076     warnings will be rejected.
8077
8078`-Wsystem-headers'
8079     Issue warnings for code in system headers.  These are normally
8080     unhelpful in finding bugs in your own code, therefore suppressed.
8081     If you are responsible for the system library, you may want to see
8082     them.
8083
8084`-w'
8085     Suppress all warnings, including those which GNU CPP issues by
8086     default.
8087
8088`-pedantic'
8089     Issue all the mandatory diagnostics listed in the C standard.
8090     Some of them are left out by default, since they trigger
8091     frequently on harmless code.
8092
8093`-pedantic-errors'
8094     Issue all the mandatory diagnostics, and make all mandatory
8095     diagnostics into errors.  This includes mandatory diagnostics that
8096     GCC issues without `-pedantic' but treats as warnings.
8097
8098`-M'
8099     Instead of outputting the result of preprocessing, output a rule
8100     suitable for `make' describing the dependencies of the main source
8101     file.  The preprocessor outputs one `make' rule containing the
8102     object file name for that source file, a colon, and the names of
8103     all the included files, including those coming from `-include' or
8104     `-imacros' command line options.
8105
8106     Unless specified explicitly (with `-MT' or `-MQ'), the object file
8107     name consists of the name of the source file with any suffix
8108     replaced with object file suffix and with any leading directory
8109     parts removed.  If there are many included files then the rule is
8110     split into several lines using `\'-newline.  The rule has no
8111     commands.
8112
8113     This option does not suppress the preprocessor's debug output,
8114     such as `-dM'.  To avoid mixing such debug output with the
8115     dependency rules you should explicitly specify the dependency
8116     output file with `-MF', or use an environment variable like
8117     `DEPENDENCIES_OUTPUT' (*note Environment Variables::).  Debug
8118     output will still be sent to the regular output stream as normal.
8119
8120     Passing `-M' to the driver implies `-E', and suppresses warnings
8121     with an implicit `-w'.
8122
8123`-MM'
8124     Like `-M' but do not mention header files that are found in system
8125     header directories, nor header files that are included, directly
8126     or indirectly, from such a header.
8127
8128     This implies that the choice of angle brackets or double quotes in
8129     an `#include' directive does not in itself determine whether that
8130     header will appear in `-MM' dependency output.  This is a slight
8131     change in semantics from GCC versions 3.0 and earlier.
8132
8133`-MF FILE'
8134     When used with `-M' or `-MM', specifies a file to write the
8135     dependencies to.  If no `-MF' switch is given the preprocessor
8136     sends the rules to the same place it would have sent preprocessed
8137     output.
8138
8139     When used with the driver options `-MD' or `-MMD', `-MF' overrides
8140     the default dependency output file.
8141
8142`-MG'
8143     In conjunction with an option such as `-M' requesting dependency
8144     generation, `-MG' assumes missing header files are generated files
8145     and adds them to the dependency list without raising an error.
8146     The dependency filename is taken directly from the `#include'
8147     directive without prepending any path.  `-MG' also suppresses
8148     preprocessed output, as a missing header file renders this useless.
8149
8150     This feature is used in automatic updating of makefiles.
8151
8152`-MP'
8153     This option instructs CPP to add a phony target for each dependency
8154     other than the main file, causing each to depend on nothing.  These
8155     dummy rules work around errors `make' gives if you remove header
8156     files without updating the `Makefile' to match.
8157
8158     This is typical output:
8159
8160          test.o: test.c test.h
8161
8162          test.h:
8163
8164`-MT TARGET'
8165     Change the target of the rule emitted by dependency generation.  By
8166     default CPP takes the name of the main input file, deletes any
8167     directory components and any file suffix such as `.c', and appends
8168     the platform's usual object suffix.  The result is the target.
8169
8170     An `-MT' option will set the target to be exactly the string you
8171     specify.  If you want multiple targets, you can specify them as a
8172     single argument to `-MT', or use multiple `-MT' options.
8173
8174     For example, `-MT '$(objpfx)foo.o'' might give
8175
8176          $(objpfx)foo.o: foo.c
8177
8178`-MQ TARGET'
8179     Same as `-MT', but it quotes any characters which are special to
8180     Make.  `-MQ '$(objpfx)foo.o'' gives
8181
8182          $$(objpfx)foo.o: foo.c
8183
8184     The default target is automatically quoted, as if it were given
8185     with `-MQ'.
8186
8187`-MD'
8188     `-MD' is equivalent to `-M -MF FILE', except that `-E' is not
8189     implied.  The driver determines FILE based on whether an `-o'
8190     option is given.  If it is, the driver uses its argument but with
8191     a suffix of `.d', otherwise it takes the name of the input file,
8192     removes any directory components and suffix, and applies a `.d'
8193     suffix.
8194
8195     If `-MD' is used in conjunction with `-E', any `-o' switch is
8196     understood to specify the dependency output file (*note -MF:
8197     dashMF.), but if used without `-E', each `-o' is understood to
8198     specify a target object file.
8199
8200     Since `-E' is not implied, `-MD' can be used to generate a
8201     dependency output file as a side-effect of the compilation process.
8202
8203`-MMD'
8204     Like `-MD' except mention only user header files, not system
8205     header files.
8206
8207`-fpch-deps'
8208     When using precompiled headers (*note Precompiled Headers::), this
8209     flag will cause the dependency-output flags to also list the files
8210     from the precompiled header's dependencies.  If not specified only
8211     the precompiled header would be listed and not the files that were
8212     used to create it because those files are not consulted when a
8213     precompiled header is used.
8214
8215`-fpch-preprocess'
8216     This option allows use of a precompiled header (*note Precompiled
8217     Headers::) together with `-E'.  It inserts a special `#pragma',
8218     `#pragma GCC pch_preprocess "<filename>"' in the output to mark
8219     the place where the precompiled header was found, and its
8220     filename.  When `-fpreprocessed' is in use, GCC recognizes this
8221     `#pragma' and loads the PCH.
8222
8223     This option is off by default, because the resulting preprocessed
8224     output is only really suitable as input to GCC.  It is switched on
8225     by `-save-temps'.
8226
8227     You should not write this `#pragma' in your own code, but it is
8228     safe to edit the filename if the PCH file is available in a
8229     different location.  The filename may be absolute or it may be
8230     relative to GCC's current directory.
8231
8232`-x c'
8233`-x c++'
8234`-x objective-c'
8235`-x assembler-with-cpp'
8236     Specify the source language: C, C++, Objective-C, or assembly.
8237     This has nothing to do with standards conformance or extensions;
8238     it merely selects which base syntax to expect.  If you give none
8239     of these options, cpp will deduce the language from the extension
8240     of the source file: `.c', `.cc', `.m', or `.S'.  Some other common
8241     extensions for C++ and assembly are also recognized.  If cpp does
8242     not recognize the extension, it will treat the file as C; this is
8243     the most generic mode.
8244
8245     _Note:_ Previous versions of cpp accepted a `-lang' option which
8246     selected both the language and the standards conformance level.
8247     This option has been removed, because it conflicts with the `-l'
8248     option.
8249
8250`-std=STANDARD'
8251`-ansi'
8252     Specify the standard to which the code should conform.  Currently
8253     CPP knows about C and C++ standards; others may be added in the
8254     future.
8255
8256     STANDARD may be one of:
8257    `c90'
8258    `c89'
8259    `iso9899:1990'
8260          The ISO C standard from 1990.  `c90' is the customary
8261          shorthand for this version of the standard.
8262
8263          The `-ansi' option is equivalent to `-std=c90'.
8264
8265    `iso9899:199409'
8266          The 1990 C standard, as amended in 1994.
8267
8268    `iso9899:1999'
8269    `c99'
8270    `iso9899:199x'
8271    `c9x'
8272          The revised ISO C standard, published in December 1999.
8273          Before publication, this was known as C9X.
8274
8275    `gnu90'
8276    `gnu89'
8277          The 1990 C standard plus GNU extensions.  This is the default.
8278
8279    `gnu99'
8280    `gnu9x'
8281          The 1999 C standard plus GNU extensions.
8282
8283    `c++98'
8284          The 1998 ISO C++ standard plus amendments.
8285
8286    `gnu++98'
8287          The same as `-std=c++98' plus GNU extensions.  This is the
8288          default for C++ code.
8289
8290`-I-'
8291     Split the include path.  Any directories specified with `-I'
8292     options before `-I-' are searched only for headers requested with
8293     `#include "FILE"'; they are not searched for `#include <FILE>'.
8294     If additional directories are specified with `-I' options after
8295     the `-I-', those directories are searched for all `#include'
8296     directives.
8297
8298     In addition, `-I-' inhibits the use of the directory of the current
8299     file directory as the first search directory for `#include "FILE"'.
8300     This option has been deprecated.
8301
8302`-nostdinc'
8303     Do not search the standard system directories for header files.
8304     Only the directories you have specified with `-I' options (and the
8305     directory of the current file, if appropriate) are searched.
8306
8307`-nostdinc++'
8308     Do not search for header files in the C++-specific standard
8309     directories, but do still search the other standard directories.
8310     (This option is used when building the C++ library.)
8311
8312`-include FILE'
8313     Process FILE as if `#include "file"' appeared as the first line of
8314     the primary source file.  However, the first directory searched
8315     for FILE is the preprocessor's working directory _instead of_ the
8316     directory containing the main source file.  If not found there, it
8317     is searched for in the remainder of the `#include "..."' search
8318     chain as normal.
8319
8320     If multiple `-include' options are given, the files are included
8321     in the order they appear on the command line.
8322
8323`-imacros FILE'
8324     Exactly like `-include', except that any output produced by
8325     scanning FILE is thrown away.  Macros it defines remain defined.
8326     This allows you to acquire all the macros from a header without
8327     also processing its declarations.
8328
8329     All files specified by `-imacros' are processed before all files
8330     specified by `-include'.
8331
8332`-idirafter DIR'
8333     Search DIR for header files, but do it _after_ all directories
8334     specified with `-I' and the standard system directories have been
8335     exhausted.  DIR is treated as a system include directory.  If DIR
8336     begins with `=', then the `=' will be replaced by the sysroot
8337     prefix; see `--sysroot' and `-isysroot'.
8338
8339`-iprefix PREFIX'
8340     Specify PREFIX as the prefix for subsequent `-iwithprefix'
8341     options.  If the prefix represents a directory, you should include
8342     the final `/'.
8343
8344`-iwithprefix DIR'
8345`-iwithprefixbefore DIR'
8346     Append DIR to the prefix specified previously with `-iprefix', and
8347     add the resulting directory to the include search path.
8348     `-iwithprefixbefore' puts it in the same place `-I' would;
8349     `-iwithprefix' puts it where `-idirafter' would.
8350
8351`-isysroot DIR'
8352     This option is like the `--sysroot' option, but applies only to
8353     header files.  See the `--sysroot' option for more information.
8354
8355`-imultilib DIR'
8356     Use DIR as a subdirectory of the directory containing
8357     target-specific C++ headers.
8358
8359`-isystem DIR'
8360     Search DIR for header files, after all directories specified by
8361     `-I' but before the standard system directories.  Mark it as a
8362     system directory, so that it gets the same special treatment as is
8363     applied to the standard system directories.  If DIR begins with
8364     `=', then the `=' will be replaced by the sysroot prefix; see
8365     `--sysroot' and `-isysroot'.
8366
8367`-iquote DIR'
8368     Search DIR only for header files requested with `#include "FILE"';
8369     they are not searched for `#include <FILE>', before all
8370     directories specified by `-I' and before the standard system
8371     directories.  If DIR begins with `=', then the `=' will be replaced
8372     by the sysroot prefix; see `--sysroot' and `-isysroot'.
8373
8374`-fdirectives-only'
8375     When preprocessing, handle directives, but do not expand macros.
8376
8377     The option's behavior depends on the `-E' and `-fpreprocessed'
8378     options.
8379
8380     With `-E', preprocessing is limited to the handling of directives
8381     such as `#define', `#ifdef', and `#error'.  Other preprocessor
8382     operations, such as macro expansion and trigraph conversion are
8383     not performed.  In addition, the `-dD' option is implicitly
8384     enabled.
8385
8386     With `-fpreprocessed', predefinition of command line and most
8387     builtin macros is disabled.  Macros such as `__LINE__', which are
8388     contextually dependent, are handled normally.  This enables
8389     compilation of files previously preprocessed with `-E
8390     -fdirectives-only'.
8391
8392     With both `-E' and `-fpreprocessed', the rules for
8393     `-fpreprocessed' take precedence.  This enables full preprocessing
8394     of files previously preprocessed with `-E -fdirectives-only'.
8395
8396`-fdollars-in-identifiers'
8397     Accept `$' in identifiers.
8398
8399`-fextended-identifiers'
8400     Accept universal character names in identifiers.  This option is
8401     experimental; in a future version of GCC, it will be enabled by
8402     default for C99 and C++.
8403
8404`-fpreprocessed'
8405     Indicate to the preprocessor that the input file has already been
8406     preprocessed.  This suppresses things like macro expansion,
8407     trigraph conversion, escaped newline splicing, and processing of
8408     most directives.  The preprocessor still recognizes and removes
8409     comments, so that you can pass a file preprocessed with `-C' to
8410     the compiler without problems.  In this mode the integrated
8411     preprocessor is little more than a tokenizer for the front ends.
8412
8413     `-fpreprocessed' is implicit if the input file has one of the
8414     extensions `.i', `.ii' or `.mi'.  These are the extensions that
8415     GCC uses for preprocessed files created by `-save-temps'.
8416
8417`-ftabstop=WIDTH'
8418     Set the distance between tab stops.  This helps the preprocessor
8419     report correct column numbers in warnings or errors, even if tabs
8420     appear on the line.  If the value is less than 1 or greater than
8421     100, the option is ignored.  The default is 8.
8422
8423`-fexec-charset=CHARSET'
8424     Set the execution character set, used for string and character
8425     constants.  The default is UTF-8.  CHARSET can be any encoding
8426     supported by the system's `iconv' library routine.
8427
8428`-fwide-exec-charset=CHARSET'
8429     Set the wide execution character set, used for wide string and
8430     character constants.  The default is UTF-32 or UTF-16, whichever
8431     corresponds to the width of `wchar_t'.  As with `-fexec-charset',
8432     CHARSET can be any encoding supported by the system's `iconv'
8433     library routine; however, you will have problems with encodings
8434     that do not fit exactly in `wchar_t'.
8435
8436`-finput-charset=CHARSET'
8437     Set the input character set, used for translation from the
8438     character set of the input file to the source character set used
8439     by GCC.  If the locale does not specify, or GCC cannot get this
8440     information from the locale, the default is UTF-8.  This can be
8441     overridden by either the locale or this command line option.
8442     Currently the command line option takes precedence if there's a
8443     conflict.  CHARSET can be any encoding supported by the system's
8444     `iconv' library routine.
8445
8446`-fworking-directory'
8447     Enable generation of linemarkers in the preprocessor output that
8448     will let the compiler know the current working directory at the
8449     time of preprocessing.  When this option is enabled, the
8450     preprocessor will emit, after the initial linemarker, a second
8451     linemarker with the current working directory followed by two
8452     slashes.  GCC will use this directory, when it's present in the
8453     preprocessed input, as the directory emitted as the current
8454     working directory in some debugging information formats.  This
8455     option is implicitly enabled if debugging information is enabled,
8456     but this can be inhibited with the negated form
8457     `-fno-working-directory'.  If the `-P' flag is present in the
8458     command line, this option has no effect, since no `#line'
8459     directives are emitted whatsoever.
8460
8461`-fno-show-column'
8462     Do not print column numbers in diagnostics.  This may be necessary
8463     if diagnostics are being scanned by a program that does not
8464     understand the column numbers, such as `dejagnu'.
8465
8466`-A PREDICATE=ANSWER'
8467     Make an assertion with the predicate PREDICATE and answer ANSWER.
8468     This form is preferred to the older form `-A PREDICATE(ANSWER)',
8469     which is still supported, because it does not use shell special
8470     characters.
8471
8472`-A -PREDICATE=ANSWER'
8473     Cancel an assertion with the predicate PREDICATE and answer ANSWER.
8474
8475`-dCHARS'
8476     CHARS is a sequence of one or more of the following characters,
8477     and must not be preceded by a space.  Other characters are
8478     interpreted by the compiler proper, or reserved for future
8479     versions of GCC, and so are silently ignored.  If you specify
8480     characters whose behavior conflicts, the result is undefined.
8481
8482    `M'
8483          Instead of the normal output, generate a list of `#define'
8484          directives for all the macros defined during the execution of
8485          the preprocessor, including predefined macros.  This gives
8486          you a way of finding out what is predefined in your version
8487          of the preprocessor.  Assuming you have no file `foo.h', the
8488          command
8489
8490               touch foo.h; cpp -dM foo.h
8491
8492          will show all the predefined macros.
8493
8494          If you use `-dM' without the `-E' option, `-dM' is
8495          interpreted as a synonym for `-fdump-rtl-mach'.  *Note
8496          Debugging Options: (gcc)Debugging Options.
8497
8498    `D'
8499          Like `M' except in two respects: it does _not_ include the
8500          predefined macros, and it outputs _both_ the `#define'
8501          directives and the result of preprocessing.  Both kinds of
8502          output go to the standard output file.
8503
8504    `N'
8505          Like `D', but emit only the macro names, not their expansions.
8506
8507    `I'
8508          Output `#include' directives in addition to the result of
8509          preprocessing.
8510
8511    `U'
8512          Like `D' except that only macros that are expanded, or whose
8513          definedness is tested in preprocessor directives, are output;
8514          the output is delayed until the use or test of the macro; and
8515          `#undef' directives are also output for macros tested but
8516          undefined at the time.
8517
8518`-P'
8519     Inhibit generation of linemarkers in the output from the
8520     preprocessor.  This might be useful when running the preprocessor
8521     on something that is not C code, and will be sent to a program
8522     which might be confused by the linemarkers.
8523
8524`-C'
8525     Do not discard comments.  All comments are passed through to the
8526     output file, except for comments in processed directives, which
8527     are deleted along with the directive.
8528
8529     You should be prepared for side effects when using `-C'; it causes
8530     the preprocessor to treat comments as tokens in their own right.
8531     For example, comments appearing at the start of what would be a
8532     directive line have the effect of turning that line into an
8533     ordinary source line, since the first token on the line is no
8534     longer a `#'.
8535
8536`-CC'
8537     Do not discard comments, including during macro expansion.  This is
8538     like `-C', except that comments contained within macros are also
8539     passed through to the output file where the macro is expanded.
8540
8541     In addition to the side-effects of the `-C' option, the `-CC'
8542     option causes all C++-style comments inside a macro to be
8543     converted to C-style comments.  This is to prevent later use of
8544     that macro from inadvertently commenting out the remainder of the
8545     source line.
8546
8547     The `-CC' option is generally used to support lint comments.
8548
8549`-traditional-cpp'
8550     Try to imitate the behavior of old-fashioned C preprocessors, as
8551     opposed to ISO C preprocessors.
8552
8553`-trigraphs'
8554     Process trigraph sequences.  These are three-character sequences,
8555     all starting with `??', that are defined by ISO C to stand for
8556     single characters.  For example, `??/' stands for `\', so `'??/n''
8557     is a character constant for a newline.  By default, GCC ignores
8558     trigraphs, but in standard-conforming modes it converts them.  See
8559     the `-std' and `-ansi' options.
8560
8561     The nine trigraphs and their replacements are
8562
8563          Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
8564          Replacement:      [    ]    {    }    #    \    ^    |    ~
8565
8566`-remap'
8567     Enable special code to work around file systems which only permit
8568     very short file names, such as MS-DOS.
8569
8570`--help'
8571`--target-help'
8572     Print text describing all the command line options instead of
8573     preprocessing anything.
8574
8575`-v'
8576     Verbose mode.  Print out GNU CPP's version number at the beginning
8577     of execution, and report the final form of the include path.
8578
8579`-H'
8580     Print the name of each header file used, in addition to other
8581     normal activities.  Each name is indented to show how deep in the
8582     `#include' stack it is.  Precompiled header files are also
8583     printed, even if they are found to be invalid; an invalid
8584     precompiled header file is printed with `...x' and a valid one
8585     with `...!' .
8586
8587`-version'
8588`--version'
8589     Print out GNU CPP's version number.  With one dash, proceed to
8590     preprocess as normal.  With two dashes, exit immediately.
8591
8592
8593File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
8594
85953.12 Passing Options to the Assembler
8596=====================================
8597
8598You can pass options to the assembler.
8599
8600`-Wa,OPTION'
8601     Pass OPTION as an option to the assembler.  If OPTION contains
8602     commas, it is split into multiple options at the commas.
8603
8604`-Xassembler OPTION'
8605     Pass OPTION as an option to the assembler.  You can use this to
8606     supply system-specific assembler options which GCC does not know
8607     how to recognize.
8608
8609     If you want to pass an option that takes an argument, you must use
8610     `-Xassembler' twice, once for the option and once for the argument.
8611
8612
8613
8614File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
8615
86163.13 Options for Linking
8617========================
8618
8619These options come into play when the compiler links object files into
8620an executable output file.  They are meaningless if the compiler is not
8621doing a link step.
8622
8623`OBJECT-FILE-NAME'
8624     A file name that does not end in a special recognized suffix is
8625     considered to name an object file or library.  (Object files are
8626     distinguished from libraries by the linker according to the file
8627     contents.)  If linking is done, these object files are used as
8628     input to the linker.
8629
8630`-c'
8631`-S'
8632`-E'
8633     If any of these options is used, then the linker is not run, and
8634     object file names should not be used as arguments.  *Note Overall
8635     Options::.
8636
8637`-lLIBRARY'
8638`-l LIBRARY'
8639     Search the library named LIBRARY when linking.  (The second
8640     alternative with the library as a separate argument is only for
8641     POSIX compliance and is not recommended.)
8642
8643     It makes a difference where in the command you write this option;
8644     the linker searches and processes libraries and object files in
8645     the order they are specified.  Thus, `foo.o -lz bar.o' searches
8646     library `z' after file `foo.o' but before `bar.o'.  If `bar.o'
8647     refers to functions in `z', those functions may not be loaded.
8648
8649     The linker searches a standard list of directories for the library,
8650     which is actually a file named `libLIBRARY.a'.  The linker then
8651     uses this file as if it had been specified precisely by name.
8652
8653     The directories searched include several standard system
8654     directories plus any that you specify with `-L'.
8655
8656     Normally the files found this way are library files--archive files
8657     whose members are object files.  The linker handles an archive
8658     file by scanning through it for members which define symbols that
8659     have so far been referenced but not defined.  But if the file that
8660     is found is an ordinary object file, it is linked in the usual
8661     fashion.  The only difference between using an `-l' option and
8662     specifying a file name is that `-l' surrounds LIBRARY with `lib'
8663     and `.a' and searches several directories.
8664
8665`-lobjc'
8666     You need this special case of the `-l' option in order to link an
8667     Objective-C or Objective-C++ program.
8668
8669`-nostartfiles'
8670     Do not use the standard system startup files when linking.  The
8671     standard system libraries are used normally, unless `-nostdlib' or
8672     `-nodefaultlibs' is used.
8673
8674`-nodefaultlibs'
8675     Do not use the standard system libraries when linking.  Only the
8676     libraries you specify will be passed to the linker, options
8677     specifying linkage of the system libraries, such as
8678     `-static-libgcc' or `-shared-libgcc', will be ignored.  The
8679     standard startup files are used normally, unless `-nostartfiles'
8680     is used.  The compiler may generate calls to `memcmp', `memset',
8681     `memcpy' and `memmove'.  These entries are usually resolved by
8682     entries in libc.  These entry points should be supplied through
8683     some other mechanism when this option is specified.
8684
8685`-nostdlib'
8686     Do not use the standard system startup files or libraries when
8687     linking.  No startup files and only the libraries you specify will
8688     be passed to the linker, options specifying linkage of the system
8689     libraries, such as `-static-libgcc' or `-shared-libgcc', will be
8690     ignored.  The compiler may generate calls to `memcmp', `memset',
8691     `memcpy' and `memmove'.  These entries are usually resolved by
8692     entries in libc.  These entry points should be supplied through
8693     some other mechanism when this option is specified.
8694
8695     One of the standard libraries bypassed by `-nostdlib' and
8696     `-nodefaultlibs' is `libgcc.a', a library of internal subroutines
8697     that GCC uses to overcome shortcomings of particular machines, or
8698     special needs for some languages.  (*Note Interfacing to GCC
8699     Output: (gccint)Interface, for more discussion of `libgcc.a'.)  In
8700     most cases, you need `libgcc.a' even when you want to avoid other
8701     standard libraries.  In other words, when you specify `-nostdlib'
8702     or `-nodefaultlibs' you should usually specify `-lgcc' as well.
8703     This ensures that you have no unresolved references to internal GCC
8704     library subroutines.  (For example, `__main', used to ensure C++
8705     constructors will be called; *note `collect2': (gccint)Collect2.)
8706
8707`-pie'
8708     Produce a position independent executable on targets which support
8709     it.  For predictable results, you must also specify the same set
8710     of options that were used to generate code (`-fpie', `-fPIE', or
8711     model suboptions) when you specify this option.
8712
8713`-rdynamic'
8714     Pass the flag `-export-dynamic' to the ELF linker, on targets that
8715     support it. This instructs the linker to add all symbols, not only
8716     used ones, to the dynamic symbol table. This option is needed for
8717     some uses of `dlopen' or to allow obtaining backtraces from within
8718     a program.
8719
8720`-s'
8721     Remove all symbol table and relocation information from the
8722     executable.
8723
8724`-static'
8725     On systems that support dynamic linking, this prevents linking
8726     with the shared libraries.  On other systems, this option has no
8727     effect.
8728
8729`-shared'
8730     Produce a shared object which can then be linked with other
8731     objects to form an executable.  Not all systems support this
8732     option.  For predictable results, you must also specify the same
8733     set of options that were used to generate code (`-fpic', `-fPIC',
8734     or model suboptions) when you specify this option.(1)
8735
8736`-shared-libgcc'
8737`-static-libgcc'
8738     On systems that provide `libgcc' as a shared library, these options
8739     force the use of either the shared or static version respectively.
8740     If no shared version of `libgcc' was built when the compiler was
8741     configured, these options have no effect.
8742
8743     There are several situations in which an application should use the
8744     shared `libgcc' instead of the static version.  The most common of
8745     these is when the application wishes to throw and catch exceptions
8746     across different shared libraries.  In that case, each of the
8747     libraries as well as the application itself should use the shared
8748     `libgcc'.
8749
8750     Therefore, the G++ and GCJ drivers automatically add
8751     `-shared-libgcc' whenever you build a shared library or a main
8752     executable, because C++ and Java programs typically use
8753     exceptions, so this is the right thing to do.
8754
8755     If, instead, you use the GCC driver to create shared libraries,
8756     you may find that they will not always be linked with the shared
8757     `libgcc'.  If GCC finds, at its configuration time, that you have
8758     a non-GNU linker or a GNU linker that does not support option
8759     `--eh-frame-hdr', it will link the shared version of `libgcc' into
8760     shared libraries by default.  Otherwise, it will take advantage of
8761     the linker and optimize away the linking with the shared version
8762     of `libgcc', linking with the static version of libgcc by default.
8763     This allows exceptions to propagate through such shared libraries,
8764     without incurring relocation costs at library load time.
8765
8766     However, if a library or main executable is supposed to throw or
8767     catch exceptions, you must link it using the G++ or GCJ driver, as
8768     appropriate for the languages used in the program, or using the
8769     option `-shared-libgcc', such that it is linked with the shared
8770     `libgcc'.
8771
8772`-static-libstdc++'
8773     When the `g++' program is used to link a C++ program, it will
8774     normally automatically link against `libstdc++'.  If `libstdc++'
8775     is available as a shared library, and the `-static' option is not
8776     used, then this will link against the shared version of
8777     `libstdc++'.  That is normally fine.  However, it is sometimes
8778     useful to freeze the version of `libstdc++' used by the program
8779     without going all the way to a fully static link.  The
8780     `-static-libstdc++' option directs the `g++' driver to link
8781     `libstdc++' statically, without necessarily linking other
8782     libraries statically.
8783
8784`-symbolic'
8785     Bind references to global symbols when building a shared object.
8786     Warn about any unresolved references (unless overridden by the
8787     link editor option `-Xlinker -z -Xlinker defs').  Only a few
8788     systems support this option.
8789
8790`-T SCRIPT'
8791     Use SCRIPT as the linker script.  This option is supported by most
8792     systems using the GNU linker.  On some targets, such as bare-board
8793     targets without an operating system, the `-T' option may be
8794     required when linking to avoid references to undefined symbols.
8795
8796`-Xlinker OPTION'
8797     Pass OPTION as an option to the linker.  You can use this to
8798     supply system-specific linker options which GCC does not know how
8799     to recognize.
8800
8801     If you want to pass an option that takes a separate argument, you
8802     must use `-Xlinker' twice, once for the option and once for the
8803     argument.  For example, to pass `-assert definitions', you must
8804     write `-Xlinker -assert -Xlinker definitions'.  It does not work
8805     to write `-Xlinker "-assert definitions"', because this passes the
8806     entire string as a single argument, which is not what the linker
8807     expects.
8808
8809     When using the GNU linker, it is usually more convenient to pass
8810     arguments to linker options using the `OPTION=VALUE' syntax than
8811     as separate arguments.  For example, you can specify `-Xlinker
8812     -Map=output.map' rather than `-Xlinker -Map -Xlinker output.map'.
8813     Other linkers may not support this syntax for command-line options.
8814
8815`-Wl,OPTION'
8816     Pass OPTION as an option to the linker.  If OPTION contains
8817     commas, it is split into multiple options at the commas.  You can
8818     use this syntax to pass an argument to the option.  For example,
8819     `-Wl,-Map,output.map' passes `-Map output.map' to the linker.
8820     When using the GNU linker, you can also get the same effect with
8821     `-Wl,-Map=output.map'.
8822
8823`-u SYMBOL'
8824     Pretend the symbol SYMBOL is undefined, to force linking of
8825     library modules to define it.  You can use `-u' multiple times with
8826     different symbols to force loading of additional library modules.
8827
8828 ---------- Footnotes ----------
8829
8830 (1) On some systems, `gcc -shared' needs to build supplementary stub
8831code for constructors to work.  On multi-libbed systems, `gcc -shared'
8832must select the correct support libraries to link against.  Failing to
8833supply the correct flags may lead to subtle defects.  Supplying them in
8834cases where they are not necessary is innocuous.
8835
8836
8837File: gcc.info,  Node: Directory Options,  Next: Spec Files,  Prev: Link Options,  Up: Invoking GCC
8838
88393.14 Options for Directory Search
8840=================================
8841
8842These options specify directories to search for header files, for
8843libraries and for parts of the compiler:
8844
8845`-IDIR'
8846     Add the directory DIR to the head of the list of directories to be
8847     searched for header files.  This can be used to override a system
8848     header file, substituting your own version, since these
8849     directories are searched before the system header file
8850     directories.  However, you should not use this option to add
8851     directories that contain vendor-supplied system header files (use
8852     `-isystem' for that).  If you use more than one `-I' option, the
8853     directories are scanned in left-to-right order; the standard
8854     system directories come after.
8855
8856     If a standard system include directory, or a directory specified
8857     with `-isystem', is also specified with `-I', the `-I' option will
8858     be ignored.  The directory will still be searched but as a system
8859     directory at its normal position in the system include chain.
8860     This is to ensure that GCC's procedure to fix buggy system headers
8861     and the ordering for the include_next directive are not
8862     inadvertently changed.  If you really need to change the search
8863     order for system directories, use the `-nostdinc' and/or
8864     `-isystem' options.
8865
8866`-iquoteDIR'
8867     Add the directory DIR to the head of the list of directories to be
8868     searched for header files only for the case of `#include "FILE"';
8869     they are not searched for `#include <FILE>', otherwise just like
8870     `-I'.
8871
8872`-LDIR'
8873     Add directory DIR to the list of directories to be searched for
8874     `-l'.
8875
8876`-BPREFIX'
8877     This option specifies where to find the executables, libraries,
8878     include files, and data files of the compiler itself.
8879
8880     The compiler driver program runs one or more of the subprograms
8881     `cpp', `cc1', `as' and `ld'.  It tries PREFIX as a prefix for each
8882     program it tries to run, both with and without `MACHINE/VERSION/'
8883     (*note Target Options::).
8884
8885     For each subprogram to be run, the compiler driver first tries the
8886     `-B' prefix, if any.  If that name is not found, or if `-B' was
8887     not specified, the driver tries two standard prefixes, which are
8888     `/usr/lib/gcc/' and `/usr/local/lib/gcc/'.  If neither of those
8889     results in a file name that is found, the unmodified program name
8890     is searched for using the directories specified in your `PATH'
8891     environment variable.
8892
8893     The compiler will check to see if the path provided by the `-B'
8894     refers to a directory, and if necessary it will add a directory
8895     separator character at the end of the path.
8896
8897     `-B' prefixes that effectively specify directory names also apply
8898     to libraries in the linker, because the compiler translates these
8899     options into `-L' options for the linker.  They also apply to
8900     includes files in the preprocessor, because the compiler
8901     translates these options into `-isystem' options for the
8902     preprocessor.  In this case, the compiler appends `include' to the
8903     prefix.
8904
8905     The run-time support file `libgcc.a' can also be searched for using
8906     the `-B' prefix, if needed.  If it is not found there, the two
8907     standard prefixes above are tried, and that is all.  The file is
8908     left out of the link if it is not found by those means.
8909
8910     Another way to specify a prefix much like the `-B' prefix is to use
8911     the environment variable `GCC_EXEC_PREFIX'.  *Note Environment
8912     Variables::.
8913
8914     As a special kludge, if the path provided by `-B' is
8915     `[dir/]stageN/', where N is a number in the range 0 to 9, then it
8916     will be replaced by `[dir/]include'.  This is to help with
8917     boot-strapping the compiler.
8918
8919`-specs=FILE'
8920     Process FILE after the compiler reads in the standard `specs'
8921     file, in order to override the defaults that the `gcc' driver
8922     program uses when determining what switches to pass to `cc1',
8923     `cc1plus', `as', `ld', etc.  More than one `-specs=FILE' can be
8924     specified on the command line, and they are processed in order,
8925     from left to right.
8926
8927`--sysroot=DIR'
8928     Use DIR as the logical root directory for headers and libraries.
8929     For example, if the compiler would normally search for headers in
8930     `/usr/include' and libraries in `/usr/lib', it will instead search
8931     `DIR/usr/include' and `DIR/usr/lib'.
8932
8933     If you use both this option and the `-isysroot' option, then the
8934     `--sysroot' option will apply to libraries, but the `-isysroot'
8935     option will apply to header files.
8936
8937     The GNU linker (beginning with version 2.16) has the necessary
8938     support for this option.  If your linker does not support this
8939     option, the header file aspect of `--sysroot' will still work, but
8940     the library aspect will not.
8941
8942`-I-'
8943     This option has been deprecated.  Please use `-iquote' instead for
8944     `-I' directories before the `-I-' and remove the `-I-'.  Any
8945     directories you specify with `-I' options before the `-I-' option
8946     are searched only for the case of `#include "FILE"'; they are not
8947     searched for `#include <FILE>'.
8948
8949     If additional directories are specified with `-I' options after
8950     the `-I-', these directories are searched for all `#include'
8951     directives.  (Ordinarily _all_ `-I' directories are used this way.)
8952
8953     In addition, the `-I-' option inhibits the use of the current
8954     directory (where the current input file came from) as the first
8955     search directory for `#include "FILE"'.  There is no way to
8956     override this effect of `-I-'.  With `-I.' you can specify
8957     searching the directory which was current when the compiler was
8958     invoked.  That is not exactly the same as what the preprocessor
8959     does by default, but it is often satisfactory.
8960
8961     `-I-' does not inhibit the use of the standard system directories
8962     for header files.  Thus, `-I-' and `-nostdinc' are independent.
8963
8964
8965File: gcc.info,  Node: Spec Files,  Next: Target Options,  Prev: Directory Options,  Up: Invoking GCC
8966
89673.15 Specifying subprocesses and the switches to pass to them
8968=============================================================
8969
8970`gcc' is a driver program.  It performs its job by invoking a sequence
8971of other programs to do the work of compiling, assembling and linking.
8972GCC interprets its command-line parameters and uses these to deduce
8973which programs it should invoke, and which command-line options it
8974ought to place on their command lines.  This behavior is controlled by
8975"spec strings".  In most cases there is one spec string for each
8976program that GCC can invoke, but a few programs have multiple spec
8977strings to control their behavior.  The spec strings built into GCC can
8978be overridden by using the `-specs=' command-line switch to specify a
8979spec file.
8980
8981 "Spec files" are plaintext files that are used to construct spec
8982strings.  They consist of a sequence of directives separated by blank
8983lines.  The type of directive is determined by the first non-whitespace
8984character on the line and it can be one of the following:
8985
8986`%COMMAND'
8987     Issues a COMMAND to the spec file processor.  The commands that can
8988     appear here are:
8989
8990    `%include <FILE>'
8991          Search for FILE and insert its text at the current point in
8992          the specs file.
8993
8994    `%include_noerr <FILE>'
8995          Just like `%include', but do not generate an error message if
8996          the include file cannot be found.
8997
8998    `%rename OLD_NAME NEW_NAME'
8999          Rename the spec string OLD_NAME to NEW_NAME.
9000
9001
9002`*[SPEC_NAME]:'
9003     This tells the compiler to create, override or delete the named
9004     spec string.  All lines after this directive up to the next
9005     directive or blank line are considered to be the text for the spec
9006     string.  If this results in an empty string then the spec will be
9007     deleted.  (Or, if the spec did not exist, then nothing will
9008     happened.)  Otherwise, if the spec does not currently exist a new
9009     spec will be created.  If the spec does exist then its contents
9010     will be overridden by the text of this directive, unless the first
9011     character of that text is the `+' character, in which case the
9012     text will be appended to the spec.
9013
9014`[SUFFIX]:'
9015     Creates a new `[SUFFIX] spec' pair.  All lines after this directive
9016     and up to the next directive or blank line are considered to make
9017     up the spec string for the indicated suffix.  When the compiler
9018     encounters an input file with the named suffix, it will processes
9019     the spec string in order to work out how to compile that file.
9020     For example:
9021
9022          .ZZ:
9023          z-compile -input %i
9024
9025     This says that any input file whose name ends in `.ZZ' should be
9026     passed to the program `z-compile', which should be invoked with the
9027     command-line switch `-input' and with the result of performing the
9028     `%i' substitution.  (See below.)
9029
9030     As an alternative to providing a spec string, the text that
9031     follows a suffix directive can be one of the following:
9032
9033    `@LANGUAGE'
9034          This says that the suffix is an alias for a known LANGUAGE.
9035          This is similar to using the `-x' command-line switch to GCC
9036          to specify a language explicitly.  For example:
9037
9038               .ZZ:
9039               @c++
9040
9041          Says that .ZZ files are, in fact, C++ source files.
9042
9043    `#NAME'
9044          This causes an error messages saying:
9045
9046               NAME compiler not installed on this system.
9047
9048     GCC already has an extensive list of suffixes built into it.  This
9049     directive will add an entry to the end of the list of suffixes, but
9050     since the list is searched from the end backwards, it is
9051     effectively possible to override earlier entries using this
9052     technique.
9053
9054
9055 GCC has the following spec strings built into it.  Spec files can
9056override these strings or create their own.  Note that individual
9057targets can also add their own spec strings to this list.
9058
9059     asm          Options to pass to the assembler
9060     asm_final    Options to pass to the assembler post-processor
9061     cpp          Options to pass to the C preprocessor
9062     cc1          Options to pass to the C compiler
9063     cc1plus      Options to pass to the C++ compiler
9064     endfile      Object files to include at the end of the link
9065     link         Options to pass to the linker
9066     lib          Libraries to include on the command line to the linker
9067     libgcc       Decides which GCC support library to pass to the linker
9068     linker       Sets the name of the linker
9069     predefines   Defines to be passed to the C preprocessor
9070     signed_char  Defines to pass to CPP to say whether `char' is signed
9071                  by default
9072     startfile    Object files to include at the start of the link
9073
9074 Here is a small example of a spec file:
9075
9076     %rename lib                 old_lib
9077
9078     *lib:
9079     --start-group -lgcc -lc -leval1 --end-group %(old_lib)
9080
9081 This example renames the spec called `lib' to `old_lib' and then
9082overrides the previous definition of `lib' with a new one.  The new
9083definition adds in some extra command-line options before including the
9084text of the old definition.
9085
9086 "Spec strings" are a list of command-line options to be passed to their
9087corresponding program.  In addition, the spec strings can contain
9088`%'-prefixed sequences to substitute variable text or to conditionally
9089insert text into the command line.  Using these constructs it is
9090possible to generate quite complex command lines.
9091
9092 Here is a table of all defined `%'-sequences for spec strings.  Note
9093that spaces are not generated automatically around the results of
9094expanding these sequences.  Therefore you can concatenate them together
9095or combine them with constant text in a single argument.
9096
9097`%%'
9098     Substitute one `%' into the program name or argument.
9099
9100`%i'
9101     Substitute the name of the input file being processed.
9102
9103`%b'
9104     Substitute the basename of the input file being processed.  This
9105     is the substring up to (and not including) the last period and not
9106     including the directory.
9107
9108`%B'
9109     This is the same as `%b', but include the file suffix (text after
9110     the last period).
9111
9112`%d'
9113     Marks the argument containing or following the `%d' as a temporary
9114     file name, so that that file will be deleted if GCC exits
9115     successfully.  Unlike `%g', this contributes no text to the
9116     argument.
9117
9118`%gSUFFIX'
9119     Substitute a file name that has suffix SUFFIX and is chosen once
9120     per compilation, and mark the argument in the same way as `%d'.
9121     To reduce exposure to denial-of-service attacks, the file name is
9122     now chosen in a way that is hard to predict even when previously
9123     chosen file names are known.  For example, `%g.s ... %g.o ... %g.s'
9124     might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX
9125     matches the regexp `[.A-Za-z]*' or the special string `%O', which
9126     is treated exactly as if `%O' had been preprocessed.  Previously,
9127     `%g' was simply substituted with a file name chosen once per
9128     compilation, without regard to any appended suffix (which was
9129     therefore treated just like ordinary text), making such attacks
9130     more likely to succeed.
9131
9132`%uSUFFIX'
9133     Like `%g', but generates a new temporary file name even if
9134     `%uSUFFIX' was already seen.
9135
9136`%USUFFIX'
9137     Substitutes the last file name generated with `%uSUFFIX',
9138     generating a new one if there is no such last file name.  In the
9139     absence of any `%uSUFFIX', this is just like `%gSUFFIX', except
9140     they don't share the same suffix _space_, so `%g.s ... %U.s ...
9141     %g.s ... %U.s' would involve the generation of two distinct file
9142     names, one for each `%g.s' and another for each `%U.s'.
9143     Previously, `%U' was simply substituted with a file name chosen
9144     for the previous `%u', without regard to any appended suffix.
9145
9146`%jSUFFIX'
9147     Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is
9148     writable, and if save-temps is off; otherwise, substitute the name
9149     of a temporary file, just like `%u'.  This temporary file is not
9150     meant for communication between processes, but rather as a junk
9151     disposal mechanism.
9152
9153`%|SUFFIX'
9154`%mSUFFIX'
9155     Like `%g', except if `-pipe' is in effect.  In that case `%|'
9156     substitutes a single dash and `%m' substitutes nothing at all.
9157     These are the two most common ways to instruct a program that it
9158     should read from standard input or write to standard output.  If
9159     you need something more elaborate you can use an `%{pipe:`X'}'
9160     construct: see for example `f/lang-specs.h'.
9161
9162`%.SUFFIX'
9163     Substitutes .SUFFIX for the suffixes of a matched switch's args
9164     when it is subsequently output with `%*'.  SUFFIX is terminated by
9165     the next space or %.
9166
9167`%w'
9168     Marks the argument containing or following the `%w' as the
9169     designated output file of this compilation.  This puts the argument
9170     into the sequence of arguments that `%o' will substitute later.
9171
9172`%o'
9173     Substitutes the names of all the output files, with spaces
9174     automatically placed around them.  You should write spaces around
9175     the `%o' as well or the results are undefined.  `%o' is for use in
9176     the specs for running the linker.  Input files whose names have no
9177     recognized suffix are not compiled at all, but they are included
9178     among the output files, so they will be linked.
9179
9180`%O'
9181     Substitutes the suffix for object files.  Note that this is
9182     handled specially when it immediately follows `%g, %u, or %U',
9183     because of the need for those to form complete file names.  The
9184     handling is such that `%O' is treated exactly as if it had already
9185     been substituted, except that `%g, %u, and %U' do not currently
9186     support additional SUFFIX characters following `%O' as they would
9187     following, for example, `.o'.
9188
9189`%p'
9190     Substitutes the standard macro predefinitions for the current
9191     target machine.  Use this when running `cpp'.
9192
9193`%P'
9194     Like `%p', but puts `__' before and after the name of each
9195     predefined macro, except for macros that start with `__' or with
9196     `_L', where L is an uppercase letter.  This is for ISO C.
9197
9198`%I'
9199     Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'),
9200     `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made
9201     from `COMPILER_PATH' and `-B' options) and `-imultilib' as
9202     necessary.
9203
9204`%s'
9205     Current argument is the name of a library or startup file of some
9206     sort.  Search for that file in a standard list of directories and
9207     substitute the full name found.  The current working directory is
9208     included in the list of directories scanned.
9209
9210`%T'
9211     Current argument is the name of a linker script.  Search for that
9212     file in the current list of directories to scan for libraries. If
9213     the file is located insert a `--script' option into the command
9214     line followed by the full path name found.  If the file is not
9215     found then generate an error message.  Note: the current working
9216     directory is not searched.
9217
9218`%eSTR'
9219     Print STR as an error message.  STR is terminated by a newline.
9220     Use this when inconsistent options are detected.
9221
9222`%(NAME)'
9223     Substitute the contents of spec string NAME at this point.
9224
9225`%[NAME]'
9226     Like `%(...)' but put `__' around `-D' arguments.
9227
9228`%x{OPTION}'
9229     Accumulate an option for `%X'.
9230
9231`%X'
9232     Output the accumulated linker options specified by `-Wl' or a `%x'
9233     spec string.
9234
9235`%Y'
9236     Output the accumulated assembler options specified by `-Wa'.
9237
9238`%Z'
9239     Output the accumulated preprocessor options specified by `-Wp'.
9240
9241`%a'
9242     Process the `asm' spec.  This is used to compute the switches to
9243     be passed to the assembler.
9244
9245`%A'
9246     Process the `asm_final' spec.  This is a spec string for passing
9247     switches to an assembler post-processor, if such a program is
9248     needed.
9249
9250`%l'
9251     Process the `link' spec.  This is the spec for computing the
9252     command line passed to the linker.  Typically it will make use of
9253     the `%L %G %S %D and %E' sequences.
9254
9255`%D'
9256     Dump out a `-L' option for each directory that GCC believes might
9257     contain startup files.  If the target supports multilibs then the
9258     current multilib directory will be prepended to each of these
9259     paths.
9260
9261`%L'
9262     Process the `lib' spec.  This is a spec string for deciding which
9263     libraries should be included on the command line to the linker.
9264
9265`%G'
9266     Process the `libgcc' spec.  This is a spec string for deciding
9267     which GCC support library should be included on the command line
9268     to the linker.
9269
9270`%S'
9271     Process the `startfile' spec.  This is a spec for deciding which
9272     object files should be the first ones passed to the linker.
9273     Typically this might be a file named `crt0.o'.
9274
9275`%E'
9276     Process the `endfile' spec.  This is a spec string that specifies
9277     the last object files that will be passed to the linker.
9278
9279`%C'
9280     Process the `cpp' spec.  This is used to construct the arguments
9281     to be passed to the C preprocessor.
9282
9283`%1'
9284     Process the `cc1' spec.  This is used to construct the options to
9285     be passed to the actual C compiler (`cc1').
9286
9287`%2'
9288     Process the `cc1plus' spec.  This is used to construct the options
9289     to be passed to the actual C++ compiler (`cc1plus').
9290
9291`%*'
9292     Substitute the variable part of a matched option.  See below.
9293     Note that each comma in the substituted string is replaced by a
9294     single space.
9295
9296`%<`S''
9297     Remove all occurrences of `-S' from the command line.  Note--this
9298     command is position dependent.  `%' commands in the spec string
9299     before this one will see `-S', `%' commands in the spec string
9300     after this one will not.
9301
9302`%:FUNCTION(ARGS)'
9303     Call the named function FUNCTION, passing it ARGS.  ARGS is first
9304     processed as a nested spec string, then split into an argument
9305     vector in the usual fashion.  The function returns a string which
9306     is processed as if it had appeared literally as part of the
9307     current spec.
9308
9309     The following built-in spec functions are provided:
9310
9311    ``getenv''
9312          The `getenv' spec function takes two arguments: an environment
9313          variable name and a string.  If the environment variable is
9314          not defined, a fatal error is issued.  Otherwise, the return
9315          value is the value of the environment variable concatenated
9316          with the string.  For example, if `TOPDIR' is defined as
9317          `/path/to/top', then:
9318
9319               %:getenv(TOPDIR /include)
9320
9321          expands to `/path/to/top/include'.
9322
9323    ``if-exists''
9324          The `if-exists' spec function takes one argument, an absolute
9325          pathname to a file.  If the file exists, `if-exists' returns
9326          the pathname.  Here is a small example of its usage:
9327
9328               *startfile:
9329               crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
9330
9331    ``if-exists-else''
9332          The `if-exists-else' spec function is similar to the
9333          `if-exists' spec function, except that it takes two
9334          arguments.  The first argument is an absolute pathname to a
9335          file.  If the file exists, `if-exists-else' returns the
9336          pathname.  If it does not exist, it returns the second
9337          argument.  This way, `if-exists-else' can be used to select
9338          one file or another, based on the existence of the first.
9339          Here is a small example of its usage:
9340
9341               *startfile:
9342               crt0%O%s %:if-exists(crti%O%s) \
9343               %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
9344
9345    ``replace-outfile''
9346          The `replace-outfile' spec function takes two arguments.  It
9347          looks for the first argument in the outfiles array and
9348          replaces it with the second argument.  Here is a small
9349          example of its usage:
9350
9351               %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
9352
9353    ``print-asm-header''
9354          The `print-asm-header' function takes no arguments and simply
9355          prints a banner like:
9356
9357               Assembler options
9358               =================
9359
9360               Use "-Wa,OPTION" to pass "OPTION" to the assembler.
9361
9362          It is used to separate compiler options from assembler options
9363          in the `--target-help' output.
9364
9365`%{`S'}'
9366     Substitutes the `-S' switch, if that switch was given to GCC.  If
9367     that switch was not specified, this substitutes nothing.  Note that
9368     the leading dash is omitted when specifying this option, and it is
9369     automatically inserted if the substitution is performed.  Thus the
9370     spec string `%{foo}' would match the command-line option `-foo'
9371     and would output the command line option `-foo'.
9372
9373`%W{`S'}'
9374     Like %{`S'} but mark last argument supplied within as a file to be
9375     deleted on failure.
9376
9377`%{`S'*}'
9378     Substitutes all the switches specified to GCC whose names start
9379     with `-S', but which also take an argument.  This is used for
9380     switches like `-o', `-D', `-I', etc.  GCC considers `-o foo' as
9381     being one switch whose names starts with `o'.  %{o*} would
9382     substitute this text, including the space.  Thus two arguments
9383     would be generated.
9384
9385`%{`S'*&`T'*}'
9386     Like %{`S'*}, but preserve order of `S' and `T' options (the order
9387     of `S' and `T' in the spec is not significant).  There can be any
9388     number of ampersand-separated variables; for each the wild card is
9389     optional.  Useful for CPP as `%{D*&U*&A*}'.
9390
9391`%{`S':`X'}'
9392     Substitutes `X', if the `-S' switch was given to GCC.
9393
9394`%{!`S':`X'}'
9395     Substitutes `X', if the `-S' switch was _not_ given to GCC.
9396
9397`%{`S'*:`X'}'
9398     Substitutes `X' if one or more switches whose names start with
9399     `-S' are specified to GCC.  Normally `X' is substituted only once,
9400     no matter how many such switches appeared.  However, if `%*'
9401     appears somewhere in `X', then `X' will be substituted once for
9402     each matching switch, with the `%*' replaced by the part of that
9403     switch that matched the `*'.
9404
9405`%{.`S':`X'}'
9406     Substitutes `X', if processing a file with suffix `S'.
9407
9408`%{!.`S':`X'}'
9409     Substitutes `X', if _not_ processing a file with suffix `S'.
9410
9411`%{,`S':`X'}'
9412     Substitutes `X', if processing a file for language `S'.
9413
9414`%{!,`S':`X'}'
9415     Substitutes `X', if not processing a file for language `S'.
9416
9417`%{`S'|`P':`X'}'
9418     Substitutes `X' if either `-S' or `-P' was given to GCC.  This may
9419     be combined with `!', `.', `,', and `*' sequences as well,
9420     although they have a stronger binding than the `|'.  If `%*'
9421     appears in `X', all of the alternatives must be starred, and only
9422     the first matching alternative is substituted.
9423
9424     For example, a spec string like this:
9425
9426          %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
9427
9428     will output the following command-line options from the following
9429     input command-line options:
9430
9431          fred.c        -foo -baz
9432          jim.d         -bar -boggle
9433          -d fred.c     -foo -baz -boggle
9434          -d jim.d      -bar -baz -boggle
9435
9436`%{S:X; T:Y; :D}'
9437     If `S' was given to GCC, substitutes `X'; else if `T' was given to
9438     GCC, substitutes `Y'; else substitutes `D'.  There can be as many
9439     clauses as you need.  This may be combined with `.', `,', `!',
9440     `|', and `*' as needed.
9441
9442
9443 The conditional text `X' in a %{`S':`X'} or similar construct may
9444contain other nested `%' constructs or spaces, or even newlines.  They
9445are processed as usual, as described above.  Trailing white space in
9446`X' is ignored.  White space may also appear anywhere on the left side
9447of the colon in these constructs, except between `.' or `*' and the
9448corresponding word.
9449
9450 The `-O', `-f', `-m', and `-W' switches are handled specifically in
9451these constructs.  If another value of `-O' or the negated form of a
9452`-f', `-m', or `-W' switch is found later in the command line, the
9453earlier switch value is ignored, except with {`S'*} where `S' is just
9454one letter, which passes all matching options.
9455
9456 The character `|' at the beginning of the predicate text is used to
9457indicate that a command should be piped to the following command, but
9458only if `-pipe' is specified.
9459
9460 It is built into GCC which switches take arguments and which do not.
9461(You might think it would be useful to generalize this to allow each
9462compiler's spec to say which switches take arguments.  But this cannot
9463be done in a consistent fashion.  GCC cannot even decide which input
9464files have been specified without knowing which switches take arguments,
9465and it must know which input files to compile in order to tell which
9466compilers to run).
9467
9468 GCC also knows implicitly that arguments starting in `-l' are to be
9469treated as compiler output files, and passed to the linker in their
9470proper position among the other output files.
9471
9472
9473File: gcc.info,  Node: Target Options,  Next: Submodel Options,  Prev: Spec Files,  Up: Invoking GCC
9474
94753.16 Specifying Target Machine and Compiler Version
9476===================================================
9477
9478The usual way to run GCC is to run the executable called `gcc', or
9479`<machine>-gcc' when cross-compiling, or `<machine>-gcc-<version>' to
9480run a version other than the one that was installed last.  Sometimes
9481this is inconvenient, so GCC provides options that will switch to
9482another cross-compiler or version.
9483
9484`-b MACHINE'
9485     The argument MACHINE specifies the target machine for compilation.
9486
9487     The value to use for MACHINE is the same as was specified as the
9488     machine type when configuring GCC as a cross-compiler.  For
9489     example, if a cross-compiler was configured with `configure
9490     arm-elf', meaning to compile for an arm processor with elf
9491     binaries, then you would specify `-b arm-elf' to run that cross
9492     compiler.  Because there are other options beginning with `-b', the
9493     configuration must contain a hyphen, or `-b' alone should be one
9494     argument followed by the configuration in the next argument.
9495
9496`-V VERSION'
9497     The argument VERSION specifies which version of GCC to run.  This
9498     is useful when multiple versions are installed.  For example,
9499     VERSION might be `4.0', meaning to run GCC version 4.0.
9500
9501 The `-V' and `-b' options work by running the
9502`<machine>-gcc-<version>' executable, so there's no real reason to use
9503them if you can just run that directly.
9504
9505
9506File: gcc.info,  Node: Submodel Options,  Next: Code Gen Options,  Prev: Target Options,  Up: Invoking GCC
9507
95083.17 Hardware Models and Configurations
9509=======================================
9510
9511Earlier we discussed the standard option `-b' which chooses among
9512different installed compilers for completely different target machines,
9513such as VAX vs. 68000 vs. 80386.
9514
9515 In addition, each of these target machine types can have its own
9516special options, starting with `-m', to choose among various hardware
9517models or configurations--for example, 68010 vs 68020, floating
9518coprocessor or none.  A single installed version of the compiler can
9519compile for any model or configuration, according to the options
9520specified.
9521
9522 Some configurations of the compiler also support additional special
9523options, usually for compatibility with other compilers on the same
9524platform.
9525
9526* Menu:
9527
9528* ARC Options::
9529* ARM Options::
9530* AVR Options::
9531* Blackfin Options::
9532* CRIS Options::
9533* CRX Options::
9534* Darwin Options::
9535* DEC Alpha Options::
9536* DEC Alpha/VMS Options::
9537* FR30 Options::
9538* FRV Options::
9539* GNU/Linux Options::
9540* H8/300 Options::
9541* HPPA Options::
9542* i386 and x86-64 Options::
9543* i386 and x86-64 Windows Options::
9544* IA-64 Options::
9545* IA-64/VMS Options::
9546* LM32 Options::
9547* M32C Options::
9548* M32R/D Options::
9549* M680x0 Options::
9550* M68hc1x Options::
9551* MCore Options::
9552* MeP Options::
9553* MIPS Options::
9554* MMIX Options::
9555* MN10300 Options::
9556* PDP-11 Options::
9557* picoChip Options::
9558* PowerPC Options::
9559* RS/6000 and PowerPC Options::
9560* RX Options::
9561* S/390 and zSeries Options::
9562* Score Options::
9563* SH Options::
9564* SPARC Options::
9565* SPU Options::
9566* System V Options::
9567* V850 Options::
9568* VAX Options::
9569* VxWorks Options::
9570* x86-64 Options::
9571* Xstormy16 Options::
9572* Xtensa Options::
9573* zSeries Options::
9574
9575
9576File: gcc.info,  Node: ARC Options,  Next: ARM Options,  Up: Submodel Options
9577
95783.17.1 ARC Options
9579------------------
9580
9581These options are defined for ARC implementations:
9582
9583`-EL'
9584     Compile code for little endian mode.  This is the default.
9585
9586`-EB'
9587     Compile code for big endian mode.
9588
9589`-mmangle-cpu'
9590     Prepend the name of the CPU to all public symbol names.  In
9591     multiple-processor systems, there are many ARC variants with
9592     different instruction and register set characteristics.  This flag
9593     prevents code compiled for one CPU to be linked with code compiled
9594     for another.  No facility exists for handling variants that are
9595     "almost identical".  This is an all or nothing option.
9596
9597`-mcpu=CPU'
9598     Compile code for ARC variant CPU.  Which variants are supported
9599     depend on the configuration.  All variants support `-mcpu=base',
9600     this is the default.
9601
9602`-mtext=TEXT-SECTION'
9603`-mdata=DATA-SECTION'
9604`-mrodata=READONLY-DATA-SECTION'
9605     Put functions, data, and readonly data in TEXT-SECTION,
9606     DATA-SECTION, and READONLY-DATA-SECTION respectively by default.
9607     This can be overridden with the `section' attribute.  *Note
9608     Variable Attributes::.
9609
9610`-mfix-cortex-m3-ldrd'
9611     Some Cortex-M3 cores can cause data corruption when `ldrd'
9612     instructions with overlapping destination and base registers are
9613     used.  This option avoids generating these instructions.  This
9614     option is enabled by default when `-mcpu=cortex-m3' is specified.
9615
9616
9617
9618File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options
9619
96203.17.2 ARM Options
9621------------------
9622
9623These `-m' options are defined for Advanced RISC Machines (ARM)
9624architectures:
9625
9626`-mabi=NAME'
9627     Generate code for the specified ABI.  Permissible values are:
9628     `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'.
9629
9630`-mapcs-frame'
9631     Generate a stack frame that is compliant with the ARM Procedure
9632     Call Standard for all functions, even if this is not strictly
9633     necessary for correct execution of the code.  Specifying
9634     `-fomit-frame-pointer' with this option will cause the stack
9635     frames not to be generated for leaf functions.  The default is
9636     `-mno-apcs-frame'.
9637
9638`-mapcs'
9639     This is a synonym for `-mapcs-frame'.
9640
9641`-mthumb-interwork'
9642     Generate code which supports calling between the ARM and Thumb
9643     instruction sets.  Without this option the two instruction sets
9644     cannot be reliably used inside one program.  The default is
9645     `-mno-thumb-interwork', since slightly larger code is generated
9646     when `-mthumb-interwork' is specified.
9647
9648`-mno-sched-prolog'
9649     Prevent the reordering of instructions in the function prolog, or
9650     the merging of those instruction with the instructions in the
9651     function's body.  This means that all functions will start with a
9652     recognizable set of instructions (or in fact one of a choice from
9653     a small set of different function prologues), and this information
9654     can be used to locate the start if functions inside an executable
9655     piece of code.  The default is `-msched-prolog'.
9656
9657`-mfloat-abi=NAME'
9658     Specifies which floating-point ABI to use.  Permissible values
9659     are: `soft', `softfp' and `hard'.
9660
9661     Specifying `soft' causes GCC to generate output containing library
9662     calls for floating-point operations.  `softfp' allows the
9663     generation of code using hardware floating-point instructions, but
9664     still uses the soft-float calling conventions.  `hard' allows
9665     generation of floating-point instructions and uses FPU-specific
9666     calling conventions.
9667
9668     The default depends on the specific target configuration.  Note
9669     that the hard-float and soft-float ABIs are not link-compatible;
9670     you must compile your entire program with the same ABI, and link
9671     with a compatible set of libraries.
9672
9673`-mhard-float'
9674     Equivalent to `-mfloat-abi=hard'.
9675
9676`-msoft-float'
9677     Equivalent to `-mfloat-abi=soft'.
9678
9679`-mlittle-endian'
9680     Generate code for a processor running in little-endian mode.  This
9681     is the default for all standard configurations.
9682
9683`-mbig-endian'
9684     Generate code for a processor running in big-endian mode; the
9685     default is to compile code for a little-endian processor.
9686
9687`-mwords-little-endian'
9688     This option only applies when generating code for big-endian
9689     processors.  Generate code for a little-endian word order but a
9690     big-endian byte order.  That is, a byte order of the form
9691     `32107654'.  Note: this option should only be used if you require
9692     compatibility with code for big-endian ARM processors generated by
9693     versions of the compiler prior to 2.8.
9694
9695`-mcpu=NAME'
9696     This specifies the name of the target ARM processor.  GCC uses
9697     this name to determine what kind of instructions it can emit when
9698     generating assembly code.  Permissible names are: `arm2', `arm250',
9699     `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7',
9700     `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700',
9701     `arm700i', `arm710', `arm710c', `arm7100', `arm720', `arm7500',
9702     `arm7500fe', `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t',
9703     `arm740t', `strongarm', `strongarm110', `strongarm1100',
9704     `strongarm1110', `arm8', `arm810', `arm9', `arm9e', `arm920',
9705     `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s',
9706     `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t',
9707     `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s',
9708     `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1156t2-s',
9709     `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s', `cortex-a5',
9710     `cortex-a8', `cortex-a9', `cortex-r4', `cortex-r4f', `cortex-m3',
9711     `cortex-m1', `cortex-m0', `xscale', `iwmmxt', `iwmmxt2', `ep9312'.
9712
9713`-mtune=NAME'
9714     This option is very similar to the `-mcpu=' option, except that
9715     instead of specifying the actual target processor type, and hence
9716     restricting which instructions can be used, it specifies that GCC
9717     should tune the performance of the code as if the target were of
9718     the type specified in this option, but still choosing the
9719     instructions that it will generate based on the CPU specified by a
9720     `-mcpu=' option.  For some ARM implementations better performance
9721     can be obtained by using this option.
9722
9723`-march=NAME'
9724     This specifies the name of the target ARM architecture.  GCC uses
9725     this name to determine what kind of instructions it can emit when
9726     generating assembly code.  This option can be used in conjunction
9727     with or instead of the `-mcpu=' option.  Permissible names are:
9728     `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5',
9729     `armv5t', `armv5e', `armv5te', `armv6', `armv6j', `armv6t2',
9730     `armv6z', `armv6zk', `armv6-m', `armv7', `armv7-a', `armv7-r',
9731     `armv7-m', `iwmmxt', `iwmmxt2', `ep9312'.
9732
9733`-mfpu=NAME'
9734`-mfpe=NUMBER'
9735`-mfp=NUMBER'
9736     This specifies what floating point hardware (or hardware
9737     emulation) is available on the target.  Permissible names are:
9738     `fpa', `fpe2', `fpe3', `maverick', `vfp', `vfpv3', `vfpv3-fp16',
9739     `vfpv3-d16', `vfpv3-d16-fp16', `vfpv3xd', `vfpv3xd-fp16', `neon',
9740     `neon-fp16', `vfpv4', `vfpv4-d16', `fpv4-sp-d16' and `neon-vfpv4'.
9741     `-mfp' and `-mfpe' are synonyms for `-mfpu'=`fpe'NUMBER, for
9742     compatibility with older versions of GCC.
9743
9744     If `-msoft-float' is specified this specifies the format of
9745     floating point values.
9746
9747`-mfp16-format=NAME'
9748     Specify the format of the `__fp16' half-precision floating-point
9749     type.  Permissible names are `none', `ieee', and `alternative';
9750     the default is `none', in which case the `__fp16' type is not
9751     defined.  *Note Half-Precision::, for more information.
9752
9753`-mstructure-size-boundary=N'
9754     The size of all structures and unions will be rounded up to a
9755     multiple of the number of bits set by this option.  Permissible
9756     values are 8, 32 and 64.  The default value varies for different
9757     toolchains.  For the COFF targeted toolchain the default value is
9758     8.  A value of 64 is only allowed if the underlying ABI supports
9759     it.
9760
9761     Specifying the larger number can produce faster, more efficient
9762     code, but can also increase the size of the program.  Different
9763     values are potentially incompatible.  Code compiled with one value
9764     cannot necessarily expect to work with code or libraries compiled
9765     with another value, if they exchange information using structures
9766     or unions.
9767
9768`-mabort-on-noreturn'
9769     Generate a call to the function `abort' at the end of a `noreturn'
9770     function.  It will be executed if the function tries to return.
9771
9772`-mlong-calls'
9773`-mno-long-calls'
9774     Tells the compiler to perform function calls by first loading the
9775     address of the function into a register and then performing a
9776     subroutine call on this register.  This switch is needed if the
9777     target function will lie outside of the 64 megabyte addressing
9778     range of the offset based version of subroutine call instruction.
9779
9780     Even if this switch is enabled, not all function calls will be
9781     turned into long calls.  The heuristic is that static functions,
9782     functions which have the `short-call' attribute, functions that
9783     are inside the scope of a `#pragma no_long_calls' directive and
9784     functions whose definitions have already been compiled within the
9785     current compilation unit, will not be turned into long calls.  The
9786     exception to this rule is that weak function definitions,
9787     functions with the `long-call' attribute or the `section'
9788     attribute, and functions that are within the scope of a `#pragma
9789     long_calls' directive, will always be turned into long calls.
9790
9791     This feature is not enabled by default.  Specifying
9792     `-mno-long-calls' will restore the default behavior, as will
9793     placing the function calls within the scope of a `#pragma
9794     long_calls_off' directive.  Note these switches have no effect on
9795     how the compiler generates code to handle function calls via
9796     function pointers.
9797
9798`-msingle-pic-base'
9799     Treat the register used for PIC addressing as read-only, rather
9800     than loading it in the prologue for each function.  The run-time
9801     system is responsible for initializing this register with an
9802     appropriate value before execution begins.
9803
9804`-mpic-register=REG'
9805     Specify the register to be used for PIC addressing.  The default
9806     is R10 unless stack-checking is enabled, when R9 is used.
9807
9808`-mcirrus-fix-invalid-insns'
9809     Insert NOPs into the instruction stream to in order to work around
9810     problems with invalid Maverick instruction combinations.  This
9811     option is only valid if the `-mcpu=ep9312' option has been used to
9812     enable generation of instructions for the Cirrus Maverick floating
9813     point co-processor.  This option is not enabled by default, since
9814     the problem is only present in older Maverick implementations.
9815     The default can be re-enabled by use of the
9816     `-mno-cirrus-fix-invalid-insns' switch.
9817
9818`-mpoke-function-name'
9819     Write the name of each function into the text section, directly
9820     preceding the function prologue.  The generated code is similar to
9821     this:
9822
9823               t0
9824                   .ascii "arm_poke_function_name", 0
9825                   .align
9826               t1
9827                   .word 0xff000000 + (t1 - t0)
9828               arm_poke_function_name
9829                   mov     ip, sp
9830                   stmfd   sp!, {fp, ip, lr, pc}
9831                   sub     fp, ip, #4
9832
9833     When performing a stack backtrace, code can inspect the value of
9834     `pc' stored at `fp + 0'.  If the trace function then looks at
9835     location `pc - 12' and the top 8 bits are set, then we know that
9836     there is a function name embedded immediately preceding this
9837     location and has length `((pc[-3]) & 0xff000000)'.
9838
9839`-mthumb'
9840     Generate code for the Thumb instruction set.  The default is to
9841     use the 32-bit ARM instruction set.  This option automatically
9842     enables either 16-bit Thumb-1 or mixed 16/32-bit Thumb-2
9843     instructions based on the `-mcpu=NAME' and `-march=NAME' options.
9844     This option is not passed to the assembler. If you want to force
9845     assembler files to be interpreted as Thumb code, either add a
9846     `.thumb' directive to the source or pass the `-mthumb' option
9847     directly to the assembler by prefixing it with `-Wa'.
9848
9849`-mtpcs-frame'
9850     Generate a stack frame that is compliant with the Thumb Procedure
9851     Call Standard for all non-leaf functions.  (A leaf function is one
9852     that does not call any other functions.)  The default is
9853     `-mno-tpcs-frame'.
9854
9855`-mtpcs-leaf-frame'
9856     Generate a stack frame that is compliant with the Thumb Procedure
9857     Call Standard for all leaf functions.  (A leaf function is one
9858     that does not call any other functions.)  The default is
9859     `-mno-apcs-leaf-frame'.
9860
9861`-mcallee-super-interworking'
9862     Gives all externally visible functions in the file being compiled
9863     an ARM instruction set header which switches to Thumb mode before
9864     executing the rest of the function.  This allows these functions
9865     to be called from non-interworking code.  This option is not valid
9866     in AAPCS configurations because interworking is enabled by default.
9867
9868`-mcaller-super-interworking'
9869     Allows calls via function pointers (including virtual functions) to
9870     execute correctly regardless of whether the target code has been
9871     compiled for interworking or not.  There is a small overhead in
9872     the cost of executing a function pointer if this option is
9873     enabled.  This option is not valid in AAPCS configurations because
9874     interworking is enabled by default.
9875
9876`-mtp=NAME'
9877     Specify the access model for the thread local storage pointer.
9878     The valid models are `soft', which generates calls to
9879     `__aeabi_read_tp', `cp15', which fetches the thread pointer from
9880     `cp15' directly (supported in the arm6k architecture), and `auto',
9881     which uses the best available method for the selected processor.
9882     The default setting is `auto'.
9883
9884`-mword-relocations'
9885     Only generate absolute relocations on word sized values (i.e.
9886     R_ARM_ABS32).  This is enabled by default on targets (uClinux,
9887     SymbianOS) where the runtime loader imposes this restriction, and
9888     when `-fpic' or `-fPIC' is specified.
9889
9890
9891
9892File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options
9893
98943.17.3 AVR Options
9895------------------
9896
9897These options are defined for AVR implementations:
9898
9899`-mmcu=MCU'
9900     Specify ATMEL AVR instruction set or MCU type.
9901
9902     Instruction set avr1 is for the minimal AVR core, not supported by
9903     the C compiler, only for assembler programs (MCU types: at90s1200,
9904     attiny10, attiny11, attiny12, attiny15, attiny28).
9905
9906     Instruction set avr2 (default) is for the classic AVR core with up
9907     to 8K program memory space (MCU types: at90s2313, at90s2323,
9908     attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
9909     at90s8515, at90c8534, at90s8535).
9910
9911     Instruction set avr3 is for the classic AVR core with up to 128K
9912     program memory space (MCU types: atmega103, atmega603, at43usb320,
9913     at76c711).
9914
9915     Instruction set avr4 is for the enhanced AVR core with up to 8K
9916     program memory space (MCU types: atmega8, atmega83, atmega85).
9917
9918     Instruction set avr5 is for the enhanced AVR core with up to 128K
9919     program memory space (MCU types: atmega16, atmega161, atmega163,
9920     atmega32, atmega323, atmega64, atmega128, at43usb355, at94k).
9921
9922`-mno-interrupts'
9923     Generated code is not compatible with hardware interrupts.  Code
9924     size will be smaller.
9925
9926`-mcall-prologues'
9927     Functions prologues/epilogues expanded as call to appropriate
9928     subroutines.  Code size will be smaller.
9929
9930`-mtiny-stack'
9931     Change only the low 8 bits of the stack pointer.
9932
9933`-mint8'
9934     Assume int to be 8 bit integer.  This affects the sizes of all
9935     types: A char will be 1 byte, an int will be 1 byte, a long will
9936     be 2 bytes and long long will be 4 bytes.  Please note that this
9937     option does not comply to the C standards, but it will provide you
9938     with smaller code size.
9939
9940
9941File: gcc.info,  Node: Blackfin Options,  Next: CRIS Options,  Prev: AVR Options,  Up: Submodel Options
9942
99433.17.4 Blackfin Options
9944-----------------------
9945
9946`-mcpu=CPU[-SIREVISION]'
9947     Specifies the name of the target Blackfin processor.  Currently,
9948     CPU can be one of `bf512', `bf514', `bf516', `bf518', `bf522',
9949     `bf523', `bf524', `bf525', `bf526', `bf527', `bf531', `bf532',
9950     `bf533', `bf534', `bf536', `bf537', `bf538', `bf539', `bf542',
9951     `bf544', `bf547', `bf548', `bf549', `bf542m', `bf544m', `bf547m',
9952     `bf548m', `bf549m', `bf561'.  The optional SIREVISION specifies
9953     the silicon revision of the target Blackfin processor.  Any
9954     workarounds available for the targeted silicon revision will be
9955     enabled.  If SIREVISION is `none', no workarounds are enabled.  If
9956     SIREVISION is `any', all workarounds for the targeted processor
9957     will be enabled.  The `__SILICON_REVISION__' macro is defined to
9958     two hexadecimal digits representing the major and minor numbers in
9959     the silicon revision.  If SIREVISION is `none', the
9960     `__SILICON_REVISION__' is not defined.  If SIREVISION is `any', the
9961     `__SILICON_REVISION__' is defined to be `0xffff'.  If this
9962     optional SIREVISION is not used, GCC assumes the latest known
9963     silicon revision of the targeted Blackfin processor.
9964
9965     Support for `bf561' is incomplete.  For `bf561', Only the
9966     processor macro is defined.  Without this option, `bf532' is used
9967     as the processor by default.  The corresponding predefined
9968     processor macros for CPU is to be defined.  And for `bfin-elf'
9969     toolchain, this causes the hardware BSP provided by libgloss to be
9970     linked in if `-msim' is not given.
9971
9972`-msim'
9973     Specifies that the program will be run on the simulator.  This
9974     causes the simulator BSP provided by libgloss to be linked in.
9975     This option has effect only for `bfin-elf' toolchain.  Certain
9976     other options, such as `-mid-shared-library' and `-mfdpic', imply
9977     `-msim'.
9978
9979`-momit-leaf-frame-pointer'
9980     Don't keep the frame pointer in a register for leaf functions.
9981     This avoids the instructions to save, set up and restore frame
9982     pointers and makes an extra register available in leaf functions.
9983     The option `-fomit-frame-pointer' removes the frame pointer for
9984     all functions which might make debugging harder.
9985
9986`-mspecld-anomaly'
9987     When enabled, the compiler will ensure that the generated code
9988     does not contain speculative loads after jump instructions. If
9989     this option is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined.
9990
9991`-mno-specld-anomaly'
9992     Don't generate extra code to prevent speculative loads from
9993     occurring.
9994
9995`-mcsync-anomaly'
9996     When enabled, the compiler will ensure that the generated code
9997     does not contain CSYNC or SSYNC instructions too soon after
9998     conditional branches.  If this option is used,
9999     `__WORKAROUND_SPECULATIVE_SYNCS' is defined.
10000
10001`-mno-csync-anomaly'
10002     Don't generate extra code to prevent CSYNC or SSYNC instructions
10003     from occurring too soon after a conditional branch.
10004
10005`-mlow-64k'
10006     When enabled, the compiler is free to take advantage of the
10007     knowledge that the entire program fits into the low 64k of memory.
10008
10009`-mno-low-64k'
10010     Assume that the program is arbitrarily large.  This is the default.
10011
10012`-mstack-check-l1'
10013     Do stack checking using information placed into L1 scratchpad
10014     memory by the uClinux kernel.
10015
10016`-mid-shared-library'
10017     Generate code that supports shared libraries via the library ID
10018     method.  This allows for execute in place and shared libraries in
10019     an environment without virtual memory management.  This option
10020     implies `-fPIC'.  With a `bfin-elf' target, this option implies
10021     `-msim'.
10022
10023`-mno-id-shared-library'
10024     Generate code that doesn't assume ID based shared libraries are
10025     being used.  This is the default.
10026
10027`-mleaf-id-shared-library'
10028     Generate code that supports shared libraries via the library ID
10029     method, but assumes that this library or executable won't link
10030     against any other ID shared libraries.  That allows the compiler
10031     to use faster code for jumps and calls.
10032
10033`-mno-leaf-id-shared-library'
10034     Do not assume that the code being compiled won't link against any
10035     ID shared libraries.  Slower code will be generated for jump and
10036     call insns.
10037
10038`-mshared-library-id=n'
10039     Specified the identification number of the ID based shared library
10040     being compiled.  Specifying a value of 0 will generate more
10041     compact code, specifying other values will force the allocation of
10042     that number to the current library but is no more space or time
10043     efficient than omitting this option.
10044
10045`-msep-data'
10046     Generate code that allows the data segment to be located in a
10047     different area of memory from the text segment.  This allows for
10048     execute in place in an environment without virtual memory
10049     management by eliminating relocations against the text section.
10050
10051`-mno-sep-data'
10052     Generate code that assumes that the data segment follows the text
10053     segment.  This is the default.
10054
10055`-mlong-calls'
10056`-mno-long-calls'
10057     Tells the compiler to perform function calls by first loading the
10058     address of the function into a register and then performing a
10059     subroutine call on this register.  This switch is needed if the
10060     target function will lie outside of the 24 bit addressing range of
10061     the offset based version of subroutine call instruction.
10062
10063     This feature is not enabled by default.  Specifying
10064     `-mno-long-calls' will restore the default behavior.  Note these
10065     switches have no effect on how the compiler generates code to
10066     handle function calls via function pointers.
10067
10068`-mfast-fp'
10069     Link with the fast floating-point library. This library relaxes
10070     some of the IEEE floating-point standard's rules for checking
10071     inputs against Not-a-Number (NAN), in the interest of performance.
10072
10073`-minline-plt'
10074     Enable inlining of PLT entries in function calls to functions that
10075     are not known to bind locally.  It has no effect without `-mfdpic'.
10076
10077`-mmulticore'
10078     Build standalone application for multicore Blackfin processor.
10079     Proper start files and link scripts will be used to support
10080     multicore.  This option defines `__BFIN_MULTICORE'. It can only be
10081     used with `-mcpu=bf561[-SIREVISION]'. It can be used with
10082     `-mcorea' or `-mcoreb'. If it's used without `-mcorea' or
10083     `-mcoreb', single application/dual core programming model is used.
10084     In this model, the main function of Core B should be named as
10085     coreb_main. If it's used with `-mcorea' or `-mcoreb', one
10086     application per core programming model is used.  If this option is
10087     not used, single core application programming model is used.
10088
10089`-mcorea'
10090     Build standalone application for Core A of BF561 when using one
10091     application per core programming model. Proper start files and
10092     link scripts will be used to support Core A. This option defines
10093     `__BFIN_COREA'. It must be used with `-mmulticore'.
10094
10095`-mcoreb'
10096     Build standalone application for Core B of BF561 when using one
10097     application per core programming model. Proper start files and
10098     link scripts will be used to support Core B. This option defines
10099     `__BFIN_COREB'. When this option is used, coreb_main should be
10100     used instead of main. It must be used with `-mmulticore'.
10101
10102`-msdram'
10103     Build standalone application for SDRAM. Proper start files and
10104     link scripts will be used to put the application into SDRAM.
10105     Loader should initialize SDRAM before loading the application into
10106     SDRAM. This option defines `__BFIN_SDRAM'.
10107
10108`-micplb'
10109     Assume that ICPLBs are enabled at runtime.  This has an effect on
10110     certain anomaly workarounds.  For Linux targets, the default is to
10111     assume ICPLBs are enabled; for standalone applications the default
10112     is off.
10113
10114
10115File: gcc.info,  Node: CRIS Options,  Next: CRX Options,  Prev: Blackfin Options,  Up: Submodel Options
10116
101173.17.5 CRIS Options
10118-------------------
10119
10120These options are defined specifically for the CRIS ports.
10121
10122`-march=ARCHITECTURE-TYPE'
10123`-mcpu=ARCHITECTURE-TYPE'
10124     Generate code for the specified architecture.  The choices for
10125     ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively
10126     ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is `v0' except for
10127     cris-axis-linux-gnu, where the default is `v10'.
10128
10129`-mtune=ARCHITECTURE-TYPE'
10130     Tune to ARCHITECTURE-TYPE everything applicable about the generated
10131     code, except for the ABI and the set of available instructions.
10132     The choices for ARCHITECTURE-TYPE are the same as for
10133     `-march=ARCHITECTURE-TYPE'.
10134
10135`-mmax-stack-frame=N'
10136     Warn when the stack frame of a function exceeds N bytes.
10137
10138`-metrax4'
10139`-metrax100'
10140     The options `-metrax4' and `-metrax100' are synonyms for
10141     `-march=v3' and `-march=v8' respectively.
10142
10143`-mmul-bug-workaround'
10144`-mno-mul-bug-workaround'
10145     Work around a bug in the `muls' and `mulu' instructions for CPU
10146     models where it applies.  This option is active by default.
10147
10148`-mpdebug'
10149     Enable CRIS-specific verbose debug-related information in the
10150     assembly code.  This option also has the effect to turn off the
10151     `#NO_APP' formatted-code indicator to the assembler at the
10152     beginning of the assembly file.
10153
10154`-mcc-init'
10155     Do not use condition-code results from previous instruction;
10156     always emit compare and test instructions before use of condition
10157     codes.
10158
10159`-mno-side-effects'
10160     Do not emit instructions with side-effects in addressing modes
10161     other than post-increment.
10162
10163`-mstack-align'
10164`-mno-stack-align'
10165`-mdata-align'
10166`-mno-data-align'
10167`-mconst-align'
10168`-mno-const-align'
10169     These options (no-options) arranges (eliminate arrangements) for
10170     the stack-frame, individual data and constants to be aligned for
10171     the maximum single data access size for the chosen CPU model.  The
10172     default is to arrange for 32-bit alignment.  ABI details such as
10173     structure layout are not affected by these options.
10174
10175`-m32-bit'
10176`-m16-bit'
10177`-m8-bit'
10178     Similar to the stack- data- and const-align options above, these
10179     options arrange for stack-frame, writable data and constants to
10180     all be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
10181     alignment.
10182
10183`-mno-prologue-epilogue'
10184`-mprologue-epilogue'
10185     With `-mno-prologue-epilogue', the normal function prologue and
10186     epilogue that sets up the stack-frame are omitted and no return
10187     instructions or return sequences are generated in the code.  Use
10188     this option only together with visual inspection of the compiled
10189     code: no warnings or errors are generated when call-saved
10190     registers must be saved, or storage for local variable needs to be
10191     allocated.
10192
10193`-mno-gotplt'
10194`-mgotplt'
10195     With `-fpic' and `-fPIC', don't generate (do generate) instruction
10196     sequences that load addresses for functions from the PLT part of
10197     the GOT rather than (traditional on other architectures) calls to
10198     the PLT.  The default is `-mgotplt'.
10199
10200`-melf'
10201     Legacy no-op option only recognized with the cris-axis-elf and
10202     cris-axis-linux-gnu targets.
10203
10204`-mlinux'
10205     Legacy no-op option only recognized with the cris-axis-linux-gnu
10206     target.
10207
10208`-sim'
10209     This option, recognized for the cris-axis-elf arranges to link
10210     with input-output functions from a simulator library.  Code,
10211     initialized data and zero-initialized data are allocated
10212     consecutively.
10213
10214`-sim2'
10215     Like `-sim', but pass linker options to locate initialized data at
10216     0x40000000 and zero-initialized data at 0x80000000.
10217
10218
10219File: gcc.info,  Node: CRX Options,  Next: Darwin Options,  Prev: CRIS Options,  Up: Submodel Options
10220
102213.17.6 CRX Options
10222------------------
10223
10224These options are defined specifically for the CRX ports.
10225
10226`-mmac'
10227     Enable the use of multiply-accumulate instructions. Disabled by
10228     default.
10229
10230`-mpush-args'
10231     Push instructions will be used to pass outgoing arguments when
10232     functions are called. Enabled by default.
10233
10234
10235File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: CRX Options,  Up: Submodel Options
10236
102373.17.7 Darwin Options
10238---------------------
10239
10240These options are defined for all architectures running the Darwin
10241operating system.
10242
10243 FSF GCC on Darwin does not create "fat" object files; it will create
10244an object file for the single architecture that it was built to target.
10245Apple's GCC on Darwin does create "fat" files if multiple `-arch'
10246options are used; it does so by running the compiler or linker multiple
10247times and joining the results together with `lipo'.
10248
10249 The subtype of the file created (like `ppc7400' or `ppc970' or `i686')
10250is determined by the flags that specify the ISA that GCC is targetting,
10251like `-mcpu' or `-march'.  The `-force_cpusubtype_ALL' option can be
10252used to override this.
10253
10254 The Darwin tools vary in their behavior when presented with an ISA
10255mismatch.  The assembler, `as', will only permit instructions to be
10256used that are valid for the subtype of the file it is generating, so
10257you cannot put 64-bit instructions in a `ppc750' object file.  The
10258linker for shared libraries, `/usr/bin/libtool', will fail and print an
10259error if asked to create a shared library with a less restrictive
10260subtype than its input files (for instance, trying to put a `ppc970'
10261object file in a `ppc7400' library).  The linker for executables, `ld',
10262will quietly give the executable the most restrictive subtype of any of
10263its input files.
10264
10265`-FDIR'
10266     Add the framework directory DIR to the head of the list of
10267     directories to be searched for header files.  These directories are
10268     interleaved with those specified by `-I' options and are scanned
10269     in a left-to-right order.
10270
10271     A framework directory is a directory with frameworks in it.  A
10272     framework is a directory with a `"Headers"' and/or
10273     `"PrivateHeaders"' directory contained directly in it that ends in
10274     `".framework"'.  The name of a framework is the name of this
10275     directory excluding the `".framework"'.  Headers associated with
10276     the framework are found in one of those two directories, with
10277     `"Headers"' being searched first.  A subframework is a framework
10278     directory that is in a framework's `"Frameworks"' directory.
10279     Includes of subframework headers can only appear in a header of a
10280     framework that contains the subframework, or in a sibling
10281     subframework header.  Two subframeworks are siblings if they occur
10282     in the same framework.  A subframework should not have the same
10283     name as a framework, a warning will be issued if this is violated.
10284     Currently a subframework cannot have subframeworks, in the future,
10285     the mechanism may be extended to support this.  The standard
10286     frameworks can be found in `"/System/Library/Frameworks"' and
10287     `"/Library/Frameworks"'.  An example include looks like `#include
10288     <Framework/header.h>', where `Framework' denotes the name of the
10289     framework and header.h is found in the `"PrivateHeaders"' or
10290     `"Headers"' directory.
10291
10292`-iframeworkDIR'
10293     Like `-F' except the directory is a treated as a system directory.
10294     The main difference between this `-iframework' and `-F' is that
10295     with `-iframework' the compiler does not warn about constructs
10296     contained within header files found via DIR.  This option is valid
10297     only for the C family of languages.
10298
10299`-gused'
10300     Emit debugging information for symbols that are used.  For STABS
10301     debugging format, this enables `-feliminate-unused-debug-symbols'.
10302     This is by default ON.
10303
10304`-gfull'
10305     Emit debugging information for all symbols and types.
10306
10307`-mmacosx-version-min=VERSION'
10308     The earliest version of MacOS X that this executable will run on
10309     is VERSION.  Typical values of VERSION include `10.1', `10.2', and
10310     `10.3.9'.
10311
10312     If the compiler was built to use the system's headers by default,
10313     then the default for this option is the system version on which the
10314     compiler is running, otherwise the default is to make choices which
10315     are compatible with as many systems and code bases as possible.
10316
10317`-mkernel'
10318     Enable kernel development mode.  The `-mkernel' option sets
10319     `-static', `-fno-common', `-fno-cxa-atexit', `-fno-exceptions',
10320     `-fno-non-call-exceptions', `-fapple-kext', `-fno-weak' and
10321     `-fno-rtti' where applicable.  This mode also sets `-mno-altivec',
10322     `-msoft-float', `-fno-builtin' and `-mlong-branch' for PowerPC
10323     targets.
10324
10325`-mone-byte-bool'
10326     Override the defaults for `bool' so that `sizeof(bool)==1'.  By
10327     default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC
10328     and `1' when compiling for Darwin/x86, so this option has no
10329     effect on x86.
10330
10331     *Warning:* The `-mone-byte-bool' switch causes GCC to generate
10332     code that is not binary compatible with code generated without
10333     that switch.  Using this switch may require recompiling all other
10334     modules in a program, including system libraries.  Use this switch
10335     to conform to a non-default data model.
10336
10337`-mfix-and-continue'
10338`-ffix-and-continue'
10339`-findirect-data'
10340     Generate code suitable for fast turn around development.  Needed to
10341     enable gdb to dynamically load `.o' files into already running
10342     programs.  `-findirect-data' and `-ffix-and-continue' are provided
10343     for backwards compatibility.
10344
10345`-all_load'
10346     Loads all members of static archive libraries.  See man ld(1) for
10347     more information.
10348
10349`-arch_errors_fatal'
10350     Cause the errors having to do with files that have the wrong
10351     architecture to be fatal.
10352
10353`-bind_at_load'
10354     Causes the output file to be marked such that the dynamic linker
10355     will bind all undefined references when the file is loaded or
10356     launched.
10357
10358`-bundle'
10359     Produce a Mach-o bundle format file.  See man ld(1) for more
10360     information.
10361
10362`-bundle_loader EXECUTABLE'
10363     This option specifies the EXECUTABLE that will be loading the build
10364     output file being linked.  See man ld(1) for more information.
10365
10366`-dynamiclib'
10367     When passed this option, GCC will produce a dynamic library
10368     instead of an executable when linking, using the Darwin `libtool'
10369     command.
10370
10371`-force_cpusubtype_ALL'
10372     This causes GCC's output file to have the ALL subtype, instead of
10373     one controlled by the `-mcpu' or `-march' option.
10374
10375`-allowable_client  CLIENT_NAME'
10376`-client_name'
10377`-compatibility_version'
10378`-current_version'
10379`-dead_strip'
10380`-dependency-file'
10381`-dylib_file'
10382`-dylinker_install_name'
10383`-dynamic'
10384`-exported_symbols_list'
10385`-filelist'
10386`-flat_namespace'
10387`-force_flat_namespace'
10388`-headerpad_max_install_names'
10389`-image_base'
10390`-init'
10391`-install_name'
10392`-keep_private_externs'
10393`-multi_module'
10394`-multiply_defined'
10395`-multiply_defined_unused'
10396`-noall_load'
10397`-no_dead_strip_inits_and_terms'
10398`-nofixprebinding'
10399`-nomultidefs'
10400`-noprebind'
10401`-noseglinkedit'
10402`-pagezero_size'
10403`-prebind'
10404`-prebind_all_twolevel_modules'
10405`-private_bundle'
10406`-read_only_relocs'
10407`-sectalign'
10408`-sectobjectsymbols'
10409`-whyload'
10410`-seg1addr'
10411`-sectcreate'
10412`-sectobjectsymbols'
10413`-sectorder'
10414`-segaddr'
10415`-segs_read_only_addr'
10416`-segs_read_write_addr'
10417`-seg_addr_table'
10418`-seg_addr_table_filename'
10419`-seglinkedit'
10420`-segprot'
10421`-segs_read_only_addr'
10422`-segs_read_write_addr'
10423`-single_module'
10424`-static'
10425`-sub_library'
10426`-sub_umbrella'
10427`-twolevel_namespace'
10428`-umbrella'
10429`-undefined'
10430`-unexported_symbols_list'
10431`-weak_reference_mismatches'
10432`-whatsloaded'
10433     These options are passed to the Darwin linker.  The Darwin linker
10434     man page describes them in detail.
10435
10436
10437File: gcc.info,  Node: DEC Alpha Options,  Next: DEC Alpha/VMS Options,  Prev: Darwin Options,  Up: Submodel Options
10438
104393.17.8 DEC Alpha Options
10440------------------------
10441
10442These `-m' options are defined for the DEC Alpha implementations:
10443
10444`-mno-soft-float'
10445`-msoft-float'
10446     Use (do not use) the hardware floating-point instructions for
10447     floating-point operations.  When `-msoft-float' is specified,
10448     functions in `libgcc.a' will be used to perform floating-point
10449     operations.  Unless they are replaced by routines that emulate the
10450     floating-point operations, or compiled in such a way as to call
10451     such emulations routines, these routines will issue floating-point
10452     operations.   If you are compiling for an Alpha without
10453     floating-point operations, you must ensure that the library is
10454     built so as not to call them.
10455
10456     Note that Alpha implementations without floating-point operations
10457     are required to have floating-point registers.
10458
10459`-mfp-reg'
10460`-mno-fp-regs'
10461     Generate code that uses (does not use) the floating-point register
10462     set.  `-mno-fp-regs' implies `-msoft-float'.  If the floating-point
10463     register set is not used, floating point operands are passed in
10464     integer registers as if they were integers and floating-point
10465     results are passed in `$0' instead of `$f0'.  This is a
10466     non-standard calling sequence, so any function with a
10467     floating-point argument or return value called by code compiled
10468     with `-mno-fp-regs' must also be compiled with that option.
10469
10470     A typical use of this option is building a kernel that does not
10471     use, and hence need not save and restore, any floating-point
10472     registers.
10473
10474`-mieee'
10475     The Alpha architecture implements floating-point hardware
10476     optimized for maximum performance.  It is mostly compliant with
10477     the IEEE floating point standard.  However, for full compliance,
10478     software assistance is required.  This option generates code fully
10479     IEEE compliant code _except_ that the INEXACT-FLAG is not
10480     maintained (see below).  If this option is turned on, the
10481     preprocessor macro `_IEEE_FP' is defined during compilation.  The
10482     resulting code is less efficient but is able to correctly support
10483     denormalized numbers and exceptional IEEE values such as
10484     not-a-number and plus/minus infinity.  Other Alpha compilers call
10485     this option `-ieee_with_no_inexact'.
10486
10487`-mieee-with-inexact'
10488     This is like `-mieee' except the generated code also maintains the
10489     IEEE INEXACT-FLAG.  Turning on this option causes the generated
10490     code to implement fully-compliant IEEE math.  In addition to
10491     `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro.
10492     On some Alpha implementations the resulting code may execute
10493     significantly slower than the code generated by default.  Since
10494     there is very little code that depends on the INEXACT-FLAG, you
10495     should normally not specify this option.  Other Alpha compilers
10496     call this option `-ieee_with_inexact'.
10497
10498`-mfp-trap-mode=TRAP-MODE'
10499     This option controls what floating-point related traps are enabled.
10500     Other Alpha compilers call this option `-fptm TRAP-MODE'.  The
10501     trap mode can be set to one of four values:
10502
10503    `n'
10504          This is the default (normal) setting.  The only traps that
10505          are enabled are the ones that cannot be disabled in software
10506          (e.g., division by zero trap).
10507
10508    `u'
10509          In addition to the traps enabled by `n', underflow traps are
10510          enabled as well.
10511
10512    `su'
10513          Like `u', but the instructions are marked to be safe for
10514          software completion (see Alpha architecture manual for
10515          details).
10516
10517    `sui'
10518          Like `su', but inexact traps are enabled as well.
10519
10520`-mfp-rounding-mode=ROUNDING-MODE'
10521     Selects the IEEE rounding mode.  Other Alpha compilers call this
10522     option `-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
10523
10524    `n'
10525          Normal IEEE rounding mode.  Floating point numbers are
10526          rounded towards the nearest machine number or towards the
10527          even machine number in case of a tie.
10528
10529    `m'
10530          Round towards minus infinity.
10531
10532    `c'
10533          Chopped rounding mode.  Floating point numbers are rounded
10534          towards zero.
10535
10536    `d'
10537          Dynamic rounding mode.  A field in the floating point control
10538          register (FPCR, see Alpha architecture reference manual)
10539          controls the rounding mode in effect.  The C library
10540          initializes this register for rounding towards plus infinity.
10541          Thus, unless your program modifies the FPCR, `d' corresponds
10542          to round towards plus infinity.
10543
10544`-mtrap-precision=TRAP-PRECISION'
10545     In the Alpha architecture, floating point traps are imprecise.
10546     This means without software assistance it is impossible to recover
10547     from a floating trap and program execution normally needs to be
10548     terminated.  GCC can generate code that can assist operating
10549     system trap handlers in determining the exact location that caused
10550     a floating point trap.  Depending on the requirements of an
10551     application, different levels of precisions can be selected:
10552
10553    `p'
10554          Program precision.  This option is the default and means a
10555          trap handler can only identify which program caused a
10556          floating point exception.
10557
10558    `f'
10559          Function precision.  The trap handler can determine the
10560          function that caused a floating point exception.
10561
10562    `i'
10563          Instruction precision.  The trap handler can determine the
10564          exact instruction that caused a floating point exception.
10565
10566     Other Alpha compilers provide the equivalent options called
10567     `-scope_safe' and `-resumption_safe'.
10568
10569`-mieee-conformant'
10570     This option marks the generated code as IEEE conformant.  You must
10571     not use this option unless you also specify `-mtrap-precision=i'
10572     and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'.  Its only
10573     effect is to emit the line `.eflag 48' in the function prologue of
10574     the generated assembly file.  Under DEC Unix, this has the effect
10575     that IEEE-conformant math library routines will be linked in.
10576
10577`-mbuild-constants'
10578     Normally GCC examines a 32- or 64-bit integer constant to see if
10579     it can construct it from smaller constants in two or three
10580     instructions.  If it cannot, it will output the constant as a
10581     literal and generate code to load it from the data segment at
10582     runtime.
10583
10584     Use this option to require GCC to construct _all_ integer constants
10585     using code, even if it takes more instructions (the maximum is
10586     six).
10587
10588     You would typically use this option to build a shared library
10589     dynamic loader.  Itself a shared library, it must relocate itself
10590     in memory before it can find the variables and constants in its
10591     own data segment.
10592
10593`-malpha-as'
10594`-mgas'
10595     Select whether to generate code to be assembled by the
10596     vendor-supplied assembler (`-malpha-as') or by the GNU assembler
10597     `-mgas'.
10598
10599`-mbwx'
10600`-mno-bwx'
10601`-mcix'
10602`-mno-cix'
10603`-mfix'
10604`-mno-fix'
10605`-mmax'
10606`-mno-max'
10607     Indicate whether GCC should generate code to use the optional BWX,
10608     CIX, FIX and MAX instruction sets.  The default is to use the
10609     instruction sets supported by the CPU type specified via `-mcpu='
10610     option or that of the CPU on which GCC was built if none was
10611     specified.
10612
10613`-mfloat-vax'
10614`-mfloat-ieee'
10615     Generate code that uses (does not use) VAX F and G floating point
10616     arithmetic instead of IEEE single and double precision.
10617
10618`-mexplicit-relocs'
10619`-mno-explicit-relocs'
10620     Older Alpha assemblers provided no way to generate symbol
10621     relocations except via assembler macros.  Use of these macros does
10622     not allow optimal instruction scheduling.  GNU binutils as of
10623     version 2.12 supports a new syntax that allows the compiler to
10624     explicitly mark which relocations should apply to which
10625     instructions.  This option is mostly useful for debugging, as GCC
10626     detects the capabilities of the assembler when it is built and
10627     sets the default accordingly.
10628
10629`-msmall-data'
10630`-mlarge-data'
10631     When `-mexplicit-relocs' is in effect, static data is accessed via
10632     "gp-relative" relocations.  When `-msmall-data' is used, objects 8
10633     bytes long or smaller are placed in a "small data area" (the
10634     `.sdata' and `.sbss' sections) and are accessed via 16-bit
10635     relocations off of the `$gp' register.  This limits the size of
10636     the small data area to 64KB, but allows the variables to be
10637     directly accessed via a single instruction.
10638
10639     The default is `-mlarge-data'.  With this option the data area is
10640     limited to just below 2GB.  Programs that require more than 2GB of
10641     data must use `malloc' or `mmap' to allocate the data in the heap
10642     instead of in the program's data segment.
10643
10644     When generating code for shared libraries, `-fpic' implies
10645     `-msmall-data' and `-fPIC' implies `-mlarge-data'.
10646
10647`-msmall-text'
10648`-mlarge-text'
10649     When `-msmall-text' is used, the compiler assumes that the code of
10650     the entire program (or shared library) fits in 4MB, and is thus
10651     reachable with a branch instruction.  When `-msmall-data' is used,
10652     the compiler can assume that all local symbols share the same
10653     `$gp' value, and thus reduce the number of instructions required
10654     for a function call from 4 to 1.
10655
10656     The default is `-mlarge-text'.
10657
10658`-mcpu=CPU_TYPE'
10659     Set the instruction set and instruction scheduling parameters for
10660     machine type CPU_TYPE.  You can specify either the `EV' style name
10661     or the corresponding chip number.  GCC supports scheduling
10662     parameters for the EV4, EV5 and EV6 family of processors and will
10663     choose the default values for the instruction set from the
10664     processor you specify.  If you do not specify a processor type,
10665     GCC will default to the processor on which the compiler was built.
10666
10667     Supported values for CPU_TYPE are
10668
10669    `ev4'
10670    `ev45'
10671    `21064'
10672          Schedules as an EV4 and has no instruction set extensions.
10673
10674    `ev5'
10675    `21164'
10676          Schedules as an EV5 and has no instruction set extensions.
10677
10678    `ev56'
10679    `21164a'
10680          Schedules as an EV5 and supports the BWX extension.
10681
10682    `pca56'
10683    `21164pc'
10684    `21164PC'
10685          Schedules as an EV5 and supports the BWX and MAX extensions.
10686
10687    `ev6'
10688    `21264'
10689          Schedules as an EV6 and supports the BWX, FIX, and MAX
10690          extensions.
10691
10692    `ev67'
10693    `21264a'
10694          Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
10695          extensions.
10696
10697     Native Linux/GNU toolchains also support the value `native', which
10698     selects the best architecture option for the host processor.
10699     `-mcpu=native' has no effect if GCC does not recognize the
10700     processor.
10701
10702`-mtune=CPU_TYPE'
10703     Set only the instruction scheduling parameters for machine type
10704     CPU_TYPE.  The instruction set is not changed.
10705
10706     Native Linux/GNU toolchains also support the value `native', which
10707     selects the best architecture option for the host processor.
10708     `-mtune=native' has no effect if GCC does not recognize the
10709     processor.
10710
10711`-mmemory-latency=TIME'
10712     Sets the latency the scheduler should assume for typical memory
10713     references as seen by the application.  This number is highly
10714     dependent on the memory access patterns used by the application
10715     and the size of the external cache on the machine.
10716
10717     Valid options for TIME are
10718
10719    `NUMBER'
10720          A decimal number representing clock cycles.
10721
10722    `L1'
10723    `L2'
10724    `L3'
10725    `main'
10726          The compiler contains estimates of the number of clock cycles
10727          for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
10728          (also called Dcache, Scache, and Bcache), as well as to main
10729          memory.  Note that L3 is only valid for EV5.
10730
10731
10732
10733File: gcc.info,  Node: DEC Alpha/VMS Options,  Next: FR30 Options,  Prev: DEC Alpha Options,  Up: Submodel Options
10734
107353.17.9 DEC Alpha/VMS Options
10736----------------------------
10737
10738These `-m' options are defined for the DEC Alpha/VMS implementations:
10739
10740`-mvms-return-codes'
10741     Return VMS condition codes from main.  The default is to return
10742     POSIX style condition (e.g. error) codes.
10743
10744`-mdebug-main=PREFIX'
10745     Flag the first routine whose name starts with PREFIX as the main
10746     routine for the debugger.
10747
10748`-mmalloc64'
10749     Default to 64bit memory allocation routines.
10750
10751
10752File: gcc.info,  Node: FR30 Options,  Next: FRV Options,  Prev: DEC Alpha/VMS Options,  Up: Submodel Options
10753
107543.17.10 FR30 Options
10755--------------------
10756
10757These options are defined specifically for the FR30 port.
10758
10759`-msmall-model'
10760     Use the small address space model.  This can produce smaller code,
10761     but it does assume that all symbolic values and addresses will fit
10762     into a 20-bit range.
10763
10764`-mno-lsim'
10765     Assume that run-time support has been provided and so there is no
10766     need to include the simulator library (`libsim.a') on the linker
10767     command line.
10768
10769
10770
10771File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: FR30 Options,  Up: Submodel Options
10772
107733.17.11 FRV Options
10774-------------------
10775
10776`-mgpr-32'
10777     Only use the first 32 general purpose registers.
10778
10779`-mgpr-64'
10780     Use all 64 general purpose registers.
10781
10782`-mfpr-32'
10783     Use only the first 32 floating point registers.
10784
10785`-mfpr-64'
10786     Use all 64 floating point registers
10787
10788`-mhard-float'
10789     Use hardware instructions for floating point operations.
10790
10791`-msoft-float'
10792     Use library routines for floating point operations.
10793
10794`-malloc-cc'
10795     Dynamically allocate condition code registers.
10796
10797`-mfixed-cc'
10798     Do not try to dynamically allocate condition code registers, only
10799     use `icc0' and `fcc0'.
10800
10801`-mdword'
10802     Change ABI to use double word insns.
10803
10804`-mno-dword'
10805     Do not use double word instructions.
10806
10807`-mdouble'
10808     Use floating point double instructions.
10809
10810`-mno-double'
10811     Do not use floating point double instructions.
10812
10813`-mmedia'
10814     Use media instructions.
10815
10816`-mno-media'
10817     Do not use media instructions.
10818
10819`-mmuladd'
10820     Use multiply and add/subtract instructions.
10821
10822`-mno-muladd'
10823     Do not use multiply and add/subtract instructions.
10824
10825`-mfdpic'
10826     Select the FDPIC ABI, that uses function descriptors to represent
10827     pointers to functions.  Without any PIC/PIE-related options, it
10828     implies `-fPIE'.  With `-fpic' or `-fpie', it assumes GOT entries
10829     and small data are within a 12-bit range from the GOT base
10830     address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32
10831     bits.  With a `bfin-elf' target, this option implies `-msim'.
10832
10833`-minline-plt'
10834     Enable inlining of PLT entries in function calls to functions that
10835     are not known to bind locally.  It has no effect without `-mfdpic'.
10836     It's enabled by default if optimizing for speed and compiling for
10837     shared libraries (i.e., `-fPIC' or `-fpic'), or when an
10838     optimization option such as `-O3' or above is present in the
10839     command line.
10840
10841`-mTLS'
10842     Assume a large TLS segment when generating thread-local code.
10843
10844`-mtls'
10845     Do not assume a large TLS segment when generating thread-local
10846     code.
10847
10848`-mgprel-ro'
10849     Enable the use of `GPREL' relocations in the FDPIC ABI for data
10850     that is known to be in read-only sections.  It's enabled by
10851     default, except for `-fpic' or `-fpie': even though it may help
10852     make the global offset table smaller, it trades 1 instruction for
10853     4.  With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one
10854     of which may be shared by multiple symbols, and it avoids the need
10855     for a GOT entry for the referenced symbol, so it's more likely to
10856     be a win.  If it is not, `-mno-gprel-ro' can be used to disable it.
10857
10858`-multilib-library-pic'
10859     Link with the (library, not FD) pic libraries.  It's implied by
10860     `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without
10861     `-mfdpic'.  You should never have to use it explicitly.
10862
10863`-mlinked-fp'
10864     Follow the EABI requirement of always creating a frame pointer
10865     whenever a stack frame is allocated.  This option is enabled by
10866     default and can be disabled with `-mno-linked-fp'.
10867
10868`-mlong-calls'
10869     Use indirect addressing to call functions outside the current
10870     compilation unit.  This allows the functions to be placed anywhere
10871     within the 32-bit address space.
10872
10873`-malign-labels'
10874     Try to align labels to an 8-byte boundary by inserting nops into
10875     the previous packet.  This option only has an effect when VLIW
10876     packing is enabled.  It doesn't create new packets; it merely adds
10877     nops to existing ones.
10878
10879`-mlibrary-pic'
10880     Generate position-independent EABI code.
10881
10882`-macc-4'
10883     Use only the first four media accumulator registers.
10884
10885`-macc-8'
10886     Use all eight media accumulator registers.
10887
10888`-mpack'
10889     Pack VLIW instructions.
10890
10891`-mno-pack'
10892     Do not pack VLIW instructions.
10893
10894`-mno-eflags'
10895     Do not mark ABI switches in e_flags.
10896
10897`-mcond-move'
10898     Enable the use of conditional-move instructions (default).
10899
10900     This switch is mainly for debugging the compiler and will likely
10901     be removed in a future version.
10902
10903`-mno-cond-move'
10904     Disable the use of conditional-move instructions.
10905
10906     This switch is mainly for debugging the compiler and will likely
10907     be removed in a future version.
10908
10909`-mscc'
10910     Enable the use of conditional set instructions (default).
10911
10912     This switch is mainly for debugging the compiler and will likely
10913     be removed in a future version.
10914
10915`-mno-scc'
10916     Disable the use of conditional set instructions.
10917
10918     This switch is mainly for debugging the compiler and will likely
10919     be removed in a future version.
10920
10921`-mcond-exec'
10922     Enable the use of conditional execution (default).
10923
10924     This switch is mainly for debugging the compiler and will likely
10925     be removed in a future version.
10926
10927`-mno-cond-exec'
10928     Disable the use of conditional execution.
10929
10930     This switch is mainly for debugging the compiler and will likely
10931     be removed in a future version.
10932
10933`-mvliw-branch'
10934     Run a pass to pack branches into VLIW instructions (default).
10935
10936     This switch is mainly for debugging the compiler and will likely
10937     be removed in a future version.
10938
10939`-mno-vliw-branch'
10940     Do not run a pass to pack branches into VLIW instructions.
10941
10942     This switch is mainly for debugging the compiler and will likely
10943     be removed in a future version.
10944
10945`-mmulti-cond-exec'
10946     Enable optimization of `&&' and `||' in conditional execution
10947     (default).
10948
10949     This switch is mainly for debugging the compiler and will likely
10950     be removed in a future version.
10951
10952`-mno-multi-cond-exec'
10953     Disable optimization of `&&' and `||' in conditional execution.
10954
10955     This switch is mainly for debugging the compiler and will likely
10956     be removed in a future version.
10957
10958`-mnested-cond-exec'
10959     Enable nested conditional execution optimizations (default).
10960
10961     This switch is mainly for debugging the compiler and will likely
10962     be removed in a future version.
10963
10964`-mno-nested-cond-exec'
10965     Disable nested conditional execution optimizations.
10966
10967     This switch is mainly for debugging the compiler and will likely
10968     be removed in a future version.
10969
10970`-moptimize-membar'
10971     This switch removes redundant `membar' instructions from the
10972     compiler generated code.  It is enabled by default.
10973
10974`-mno-optimize-membar'
10975     This switch disables the automatic removal of redundant `membar'
10976     instructions from the generated code.
10977
10978`-mtomcat-stats'
10979     Cause gas to print out tomcat statistics.
10980
10981`-mcpu=CPU'
10982     Select the processor type for which to generate code.  Possible
10983     values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405',
10984     `fr400', `fr300' and `simple'.
10985
10986
10987
10988File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
10989
109903.17.12 GNU/Linux Options
10991-------------------------
10992
10993These `-m' options are defined for GNU/Linux targets:
10994
10995`-mglibc'
10996     Use the GNU C library instead of uClibc.  This is the default
10997     except on `*-*-linux-*uclibc*' targets.
10998
10999`-muclibc'
11000     Use uClibc instead of the GNU C library.  This is the default on
11001     `*-*-linux-*uclibc*' targets.
11002
11003
11004File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options
11005
110063.17.13 H8/300 Options
11007----------------------
11008
11009These `-m' options are defined for the H8/300 implementations:
11010
11011`-mrelax'
11012     Shorten some address references at link time, when possible; uses
11013     the linker option `-relax'.  *Note `ld' and the H8/300:
11014     (ld)H8/300, for a fuller description.
11015
11016`-mh'
11017     Generate code for the H8/300H.
11018
11019`-ms'
11020     Generate code for the H8S.
11021
11022`-mn'
11023     Generate code for the H8S and H8/300H in the normal mode.  This
11024     switch must be used either with `-mh' or `-ms'.
11025
11026`-ms2600'
11027     Generate code for the H8S/2600.  This switch must be used with
11028     `-ms'.
11029
11030`-mint32'
11031     Make `int' data 32 bits by default.
11032
11033`-malign-300'
11034     On the H8/300H and H8S, use the same alignment rules as for the
11035     H8/300.  The default for the H8/300H and H8S is to align longs and
11036     floats on 4 byte boundaries.  `-malign-300' causes them to be
11037     aligned on 2 byte boundaries.  This option has no effect on the
11038     H8/300.
11039
11040
11041File: gcc.info,  Node: HPPA Options,  Next: i386 and x86-64 Options,  Prev: H8/300 Options,  Up: Submodel Options
11042
110433.17.14 HPPA Options
11044--------------------
11045
11046These `-m' options are defined for the HPPA family of computers:
11047
11048`-march=ARCHITECTURE-TYPE'
11049     Generate code for the specified architecture.  The choices for
11050     ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and
11051     `2.0' for PA 2.0 processors.  Refer to `/usr/lib/sched.models' on
11052     an HP-UX system to determine the proper architecture option for
11053     your machine.  Code compiled for lower numbered architectures will
11054     run on higher numbered architectures, but not the other way around.
11055
11056`-mpa-risc-1-0'
11057`-mpa-risc-1-1'
11058`-mpa-risc-2-0'
11059     Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0'
11060     respectively.
11061
11062`-mbig-switch'
11063     Generate code suitable for big switch tables.  Use this option
11064     only if the assembler/linker complain about out of range branches
11065     within a switch table.
11066
11067`-mjump-in-delay'
11068     Fill delay slots of function calls with unconditional jump
11069     instructions by modifying the return pointer for the function call
11070     to be the target of the conditional jump.
11071
11072`-mdisable-fpregs'
11073     Prevent floating point registers from being used in any manner.
11074     This is necessary for compiling kernels which perform lazy context
11075     switching of floating point registers.  If you use this option and
11076     attempt to perform floating point operations, the compiler will
11077     abort.
11078
11079`-mdisable-indexing'
11080     Prevent the compiler from using indexing address modes.  This
11081     avoids some rather obscure problems when compiling MIG generated
11082     code under MACH.
11083
11084`-mno-space-regs'
11085     Generate code that assumes the target has no space registers.
11086     This allows GCC to generate faster indirect calls and use unscaled
11087     index address modes.
11088
11089     Such code is suitable for level 0 PA systems and kernels.
11090
11091`-mfast-indirect-calls'
11092     Generate code that assumes calls never cross space boundaries.
11093     This allows GCC to emit code which performs faster indirect calls.
11094
11095     This option will not work in the presence of shared libraries or
11096     nested functions.
11097
11098`-mfixed-range=REGISTER-RANGE'
11099     Generate code treating the given register range as fixed registers.
11100     A fixed register is one that the register allocator can not use.
11101     This is useful when compiling kernel code.  A register range is
11102     specified as two registers separated by a dash.  Multiple register
11103     ranges can be specified separated by a comma.
11104
11105`-mlong-load-store'
11106     Generate 3-instruction load and store sequences as sometimes
11107     required by the HP-UX 10 linker.  This is equivalent to the `+k'
11108     option to the HP compilers.
11109
11110`-mportable-runtime'
11111     Use the portable calling conventions proposed by HP for ELF
11112     systems.
11113
11114`-mgas'
11115     Enable the use of assembler directives only GAS understands.
11116
11117`-mschedule=CPU-TYPE'
11118     Schedule code according to the constraints for the machine type
11119     CPU-TYPE.  The choices for CPU-TYPE are `700' `7100', `7100LC',
11120     `7200', `7300' and `8000'.  Refer to `/usr/lib/sched.models' on an
11121     HP-UX system to determine the proper scheduling option for your
11122     machine.  The default scheduling is `8000'.
11123
11124`-mlinker-opt'
11125     Enable the optimization pass in the HP-UX linker.  Note this makes
11126     symbolic debugging impossible.  It also triggers a bug in the
11127     HP-UX 8 and HP-UX 9 linkers in which they give bogus error
11128     messages when linking some programs.
11129
11130`-msoft-float'
11131     Generate output containing library calls for floating point.
11132     *Warning:* the requisite libraries are not available for all HPPA
11133     targets.  Normally the facilities of the machine's usual C
11134     compiler are used, but this cannot be done directly in
11135     cross-compilation.  You must make your own arrangements to provide
11136     suitable library functions for cross-compilation.
11137
11138     `-msoft-float' changes the calling convention in the output file;
11139     therefore, it is only useful if you compile _all_ of a program with
11140     this option.  In particular, you need to compile `libgcc.a', the
11141     library that comes with GCC, with `-msoft-float' in order for this
11142     to work.
11143
11144`-msio'
11145     Generate the predefine, `_SIO', for server IO.  The default is
11146     `-mwsio'.  This generates the predefines, `__hp9000s700',
11147     `__hp9000s700__' and `_WSIO', for workstation IO.  These options
11148     are available under HP-UX and HI-UX.
11149
11150`-mgnu-ld'
11151     Use GNU ld specific options.  This passes `-shared' to ld when
11152     building a shared library.  It is the default when GCC is
11153     configured, explicitly or implicitly, with the GNU linker.  This
11154     option does not have any affect on which ld is called, it only
11155     changes what parameters are passed to that ld.  The ld that is
11156     called is determined by the `--with-ld' configure option, GCC's
11157     program search path, and finally by the user's `PATH'.  The linker
11158     used by GCC can be printed using `which `gcc
11159     -print-prog-name=ld`'.  This option is only available on the 64
11160     bit HP-UX GCC, i.e. configured with `hppa*64*-*-hpux*'.
11161
11162`-mhp-ld'
11163     Use HP ld specific options.  This passes `-b' to ld when building
11164     a shared library and passes `+Accept TypeMismatch' to ld on all
11165     links.  It is the default when GCC is configured, explicitly or
11166     implicitly, with the HP linker.  This option does not have any
11167     affect on which ld is called, it only changes what parameters are
11168     passed to that ld.  The ld that is called is determined by the
11169     `--with-ld' configure option, GCC's program search path, and
11170     finally by the user's `PATH'.  The linker used by GCC can be
11171     printed using `which `gcc -print-prog-name=ld`'.  This option is
11172     only available on the 64 bit HP-UX GCC, i.e. configured with
11173     `hppa*64*-*-hpux*'.
11174
11175`-mlong-calls'
11176     Generate code that uses long call sequences.  This ensures that a
11177     call is always able to reach linker generated stubs.  The default
11178     is to generate long calls only when the distance from the call
11179     site to the beginning of the function or translation unit, as the
11180     case may be, exceeds a predefined limit set by the branch type
11181     being used.  The limits for normal calls are 7,600,000 and 240,000
11182     bytes, respectively for the PA 2.0 and PA 1.X architectures.
11183     Sibcalls are always limited at 240,000 bytes.
11184
11185     Distances are measured from the beginning of functions when using
11186     the `-ffunction-sections' option, or when using the `-mgas' and
11187     `-mno-portable-runtime' options together under HP-UX with the SOM
11188     linker.
11189
11190     It is normally not desirable to use this option as it will degrade
11191     performance.  However, it may be useful in large applications,
11192     particularly when partial linking is used to build the application.
11193
11194     The types of long calls used depends on the capabilities of the
11195     assembler and linker, and the type of code being generated.  The
11196     impact on systems that support long absolute calls, and long pic
11197     symbol-difference or pc-relative calls should be relatively small.
11198     However, an indirect call is used on 32-bit ELF systems in pic code
11199     and it is quite long.
11200
11201`-munix=UNIX-STD'
11202     Generate compiler predefines and select a startfile for the
11203     specified UNIX standard.  The choices for UNIX-STD are `93', `95'
11204     and `98'.  `93' is supported on all HP-UX versions.  `95' is
11205     available on HP-UX 10.10 and later.  `98' is available on HP-UX
11206     11.11 and later.  The default values are `93' for HP-UX 10.00,
11207     `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and
11208     later.
11209
11210     `-munix=93' provides the same predefines as GCC 3.3 and 3.4.
11211     `-munix=95' provides additional predefines for `XOPEN_UNIX' and
11212     `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'.
11213     `-munix=98' provides additional predefines for `_XOPEN_UNIX',
11214     `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and
11215     `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'.
11216
11217     It is _important_ to note that this option changes the interfaces
11218     for various library routines.  It also affects the operational
11219     behavior of the C library.  Thus, _extreme_ care is needed in
11220     using this option.
11221
11222     Library code that is intended to operate with more than one UNIX
11223     standard must test, set and restore the variable
11224     __XPG4_EXTENDED_MASK as appropriate.  Most GNU software doesn't
11225     provide this capability.
11226
11227`-nolibdld'
11228     Suppress the generation of link options to search libdld.sl when
11229     the `-static' option is specified on HP-UX 10 and later.
11230
11231`-static'
11232     The HP-UX implementation of setlocale in libc has a dependency on
11233     libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
11234     when the `-static' option is specified, special link options are
11235     needed to resolve this dependency.
11236
11237     On HP-UX 10 and later, the GCC driver adds the necessary options to
11238     link with libdld.sl when the `-static' option is specified.  This
11239     causes the resulting binary to be dynamic.  On the 64-bit port,
11240     the linkers generate dynamic binaries by default in any case.  The
11241     `-nolibdld' option can be used to prevent the GCC driver from
11242     adding these link options.
11243
11244`-threads'
11245     Add support for multithreading with the "dce thread" library under
11246     HP-UX.  This option sets flags for both the preprocessor and
11247     linker.
11248
11249
11250File: gcc.info,  Node: i386 and x86-64 Options,  Next: i386 and x86-64 Windows Options,  Prev: HPPA Options,  Up: Submodel Options
11251
112523.17.15 Intel 386 and AMD x86-64 Options
11253----------------------------------------
11254
11255These `-m' options are defined for the i386 and x86-64 family of
11256computers:
11257
11258`-mtune=CPU-TYPE'
11259     Tune to CPU-TYPE everything applicable about the generated code,
11260     except for the ABI and the set of available instructions.  The
11261     choices for CPU-TYPE are:
11262    _generic_
11263          Produce code optimized for the most common IA32/AMD64/EM64T
11264          processors.  If you know the CPU on which your code will run,
11265          then you should use the corresponding `-mtune' option instead
11266          of `-mtune=generic'.  But, if you do not know exactly what
11267          CPU users of your application will have, then you should use
11268          this option.
11269
11270          As new processors are deployed in the marketplace, the
11271          behavior of this option will change.  Therefore, if you
11272          upgrade to a newer version of GCC, the code generated option
11273          will change to reflect the processors that were most common
11274          when that version of GCC was released.
11275
11276          There is no `-march=generic' option because `-march'
11277          indicates the instruction set the compiler can use, and there
11278          is no generic instruction set applicable to all processors.
11279          In contrast, `-mtune' indicates the processor (or, in this
11280          case, collection of processors) for which the code is
11281          optimized.
11282
11283    _native_
11284          This selects the CPU to tune for at compilation time by
11285          determining the processor type of the compiling machine.
11286          Using `-mtune=native' will produce code optimized for the
11287          local machine under the constraints of the selected
11288          instruction set.  Using `-march=native' will enable all
11289          instruction subsets supported by the local machine (hence the
11290          result might not run on different machines).
11291
11292    _i386_
11293          Original Intel's i386 CPU.
11294
11295    _i486_
11296          Intel's i486 CPU.  (No scheduling is implemented for this
11297          chip.)
11298
11299    _i586, pentium_
11300          Intel Pentium CPU with no MMX support.
11301
11302    _pentium-mmx_
11303          Intel PentiumMMX CPU based on Pentium core with MMX
11304          instruction set support.
11305
11306    _pentiumpro_
11307          Intel PentiumPro CPU.
11308
11309    _i686_
11310          Same as `generic', but when used as `march' option, PentiumPro
11311          instruction set will be used, so the code will run on all
11312          i686 family chips.
11313
11314    _pentium2_
11315          Intel Pentium2 CPU based on PentiumPro core with MMX
11316          instruction set support.
11317
11318    _pentium3, pentium3m_
11319          Intel Pentium3 CPU based on PentiumPro core with MMX and SSE
11320          instruction set support.
11321
11322    _pentium-m_
11323          Low power version of Intel Pentium3 CPU with MMX, SSE and
11324          SSE2 instruction set support.  Used by Centrino notebooks.
11325
11326    _pentium4, pentium4m_
11327          Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set
11328          support.
11329
11330    _prescott_
11331          Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2
11332          and SSE3 instruction set support.
11333
11334    _nocona_
11335          Improved version of Intel Pentium4 CPU with 64-bit
11336          extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
11337
11338    _core2_
11339          Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
11340          and SSSE3 instruction set support.
11341
11342    _atom_
11343          Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
11344          and SSSE3 instruction set support.
11345
11346    _k6_
11347          AMD K6 CPU with MMX instruction set support.
11348
11349    _k6-2, k6-3_
11350          Improved versions of AMD K6 CPU with MMX and 3DNow!
11351          instruction set support.
11352
11353    _athlon, athlon-tbird_
11354          AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
11355          prefetch instructions support.
11356
11357    _athlon-4, athlon-xp, athlon-mp_
11358          Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
11359          full SSE instruction set support.
11360
11361    _k8, opteron, athlon64, athlon-fx_
11362          AMD K8 core based CPUs with x86-64 instruction set support.
11363          (This supersets MMX, SSE, SSE2, 3DNow!, enhanced 3DNow! and
11364          64-bit instruction set extensions.)
11365
11366    _k8-sse3, opteron-sse3, athlon64-sse3_
11367          Improved versions of k8, opteron and athlon64 with SSE3
11368          instruction set support.
11369
11370    _amdfam10, barcelona_
11371          AMD Family 10h core based CPUs with x86-64 instruction set
11372          support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A,
11373          3DNow!, enhanced 3DNow!, ABM and 64-bit instruction set
11374          extensions.)
11375
11376    _winchip-c6_
11377          IDT Winchip C6 CPU, dealt in same way as i486 with additional
11378          MMX instruction set support.
11379
11380    _winchip2_
11381          IDT Winchip2 CPU, dealt in same way as i486 with additional
11382          MMX and 3DNow!  instruction set support.
11383
11384    _c3_
11385          Via C3 CPU with MMX and 3DNow! instruction set support.  (No
11386          scheduling is implemented for this chip.)
11387
11388    _c3-2_
11389          Via C3-2 CPU with MMX and SSE instruction set support.  (No
11390          scheduling is implemented for this chip.)
11391
11392    _geode_
11393          Embedded AMD CPU with MMX and 3DNow! instruction set support.
11394
11395     While picking a specific CPU-TYPE will schedule things
11396     appropriately for that particular chip, the compiler will not
11397     generate any code that does not run on the i386 without the
11398     `-march=CPU-TYPE' option being used.
11399
11400`-march=CPU-TYPE'
11401     Generate instructions for the machine type CPU-TYPE.  The choices
11402     for CPU-TYPE are the same as for `-mtune'.  Moreover, specifying
11403     `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'.
11404
11405`-mcpu=CPU-TYPE'
11406     A deprecated synonym for `-mtune'.
11407
11408`-mfpmath=UNIT'
11409     Generate floating point arithmetics for selected unit UNIT.  The
11410     choices for UNIT are:
11411
11412    `387'
11413          Use the standard 387 floating point coprocessor present
11414          majority of chips and emulated otherwise.  Code compiled with
11415          this option will run almost everywhere.  The temporary
11416          results are computed in 80bit precision instead of precision
11417          specified by the type resulting in slightly different results
11418          compared to most of other chips.  See `-ffloat-store' for
11419          more detailed description.
11420
11421          This is the default choice for i386 compiler.
11422
11423    `sse'
11424          Use scalar floating point instructions present in the SSE
11425          instruction set.  This instruction set is supported by
11426          Pentium3 and newer chips, in the AMD line by Athlon-4,
11427          Athlon-xp and Athlon-mp chips.  The earlier version of SSE
11428          instruction set supports only single precision arithmetics,
11429          thus the double and extended precision arithmetics is still
11430          done using 387.  Later version, present only in Pentium4 and
11431          the future AMD x86-64 chips supports double precision
11432          arithmetics too.
11433
11434          For the i386 compiler, you need to use `-march=CPU-TYPE',
11435          `-msse' or `-msse2' switches to enable SSE extensions and
11436          make this option effective.  For the x86-64 compiler, these
11437          extensions are enabled by default.
11438
11439          The resulting code should be considerably faster in the
11440          majority of cases and avoid the numerical instability
11441          problems of 387 code, but may break some existing code that
11442          expects temporaries to be 80bit.
11443
11444          This is the default choice for the x86-64 compiler.
11445
11446    `sse,387'
11447    `sse+387'
11448    `both'
11449          Attempt to utilize both instruction sets at once.  This
11450          effectively double the amount of available registers and on
11451          chips with separate execution units for 387 and SSE the
11452          execution resources too.  Use this option with care, as it is
11453          still experimental, because the GCC register allocator does
11454          not model separate functional units well resulting in
11455          instable performance.
11456
11457`-masm=DIALECT'
11458     Output asm instructions using selected DIALECT.  Supported choices
11459     are `intel' or `att' (the default one).  Darwin does not support
11460     `intel'.
11461
11462`-mieee-fp'
11463`-mno-ieee-fp'
11464     Control whether or not the compiler uses IEEE floating point
11465     comparisons.  These handle correctly the case where the result of a
11466     comparison is unordered.
11467
11468`-msoft-float'
11469     Generate output containing library calls for floating point.
11470     *Warning:* the requisite libraries are not part of GCC.  Normally
11471     the facilities of the machine's usual C compiler are used, but
11472     this can't be done directly in cross-compilation.  You must make
11473     your own arrangements to provide suitable library functions for
11474     cross-compilation.
11475
11476     On machines where a function returns floating point results in the
11477     80387 register stack, some floating point opcodes may be emitted
11478     even if `-msoft-float' is used.
11479
11480`-mno-fp-ret-in-387'
11481     Do not use the FPU registers for return values of functions.
11482
11483     The usual calling convention has functions return values of types
11484     `float' and `double' in an FPU register, even if there is no FPU.
11485     The idea is that the operating system should emulate an FPU.
11486
11487     The option `-mno-fp-ret-in-387' causes such values to be returned
11488     in ordinary CPU registers instead.
11489
11490`-mno-fancy-math-387'
11491     Some 387 emulators do not support the `sin', `cos' and `sqrt'
11492     instructions for the 387.  Specify this option to avoid generating
11493     those instructions.  This option is the default on FreeBSD,
11494     OpenBSD and NetBSD.  This option is overridden when `-march'
11495     indicates that the target CPU will always have an FPU and so the
11496     instruction will not need emulation.  As of revision 2.6.1, these
11497     instructions are not generated unless you also use the
11498     `-funsafe-math-optimizations' switch.
11499
11500`-malign-double'
11501`-mno-align-double'
11502     Control whether GCC aligns `double', `long double', and `long
11503     long' variables on a two word boundary or a one word boundary.
11504     Aligning `double' variables on a two word boundary will produce
11505     code that runs somewhat faster on a `Pentium' at the expense of
11506     more memory.
11507
11508     On x86-64, `-malign-double' is enabled by default.
11509
11510     *Warning:* if you use the `-malign-double' switch, structures
11511     containing the above types will be aligned differently than the
11512     published application binary interface specifications for the 386
11513     and will not be binary compatible with structures in code compiled
11514     without that switch.
11515
11516`-m96bit-long-double'
11517`-m128bit-long-double'
11518     These switches control the size of `long double' type.  The i386
11519     application binary interface specifies the size to be 96 bits, so
11520     `-m96bit-long-double' is the default in 32 bit mode.
11521
11522     Modern architectures (Pentium and newer) would prefer `long double'
11523     to be aligned to an 8 or 16 byte boundary.  In arrays or structures
11524     conforming to the ABI, this would not be possible.  So specifying a
11525     `-m128bit-long-double' will align `long double' to a 16 byte
11526     boundary by padding the `long double' with an additional 32 bit
11527     zero.
11528
11529     In the x86-64 compiler, `-m128bit-long-double' is the default
11530     choice as its ABI specifies that `long double' is to be aligned on
11531     16 byte boundary.
11532
11533     Notice that neither of these options enable any extra precision
11534     over the x87 standard of 80 bits for a `long double'.
11535
11536     *Warning:* if you override the default value for your target ABI,
11537     the structures and arrays containing `long double' variables will
11538     change their size as well as function calling convention for
11539     function taking `long double' will be modified.  Hence they will
11540     not be binary compatible with arrays or structures in code
11541     compiled without that switch.
11542
11543`-mlarge-data-threshold=NUMBER'
11544     When `-mcmodel=medium' is specified, the data greater than
11545     THRESHOLD are placed in large data section.  This value must be the
11546     same across all object linked into the binary and defaults to
11547     65535.
11548
11549`-mrtd'
11550     Use a different function-calling convention, in which functions
11551     that take a fixed number of arguments return with the `ret' NUM
11552     instruction, which pops their arguments while returning.  This
11553     saves one instruction in the caller since there is no need to pop
11554     the arguments there.
11555
11556     You can specify that an individual function is called with this
11557     calling sequence with the function attribute `stdcall'.  You can
11558     also override the `-mrtd' option by using the function attribute
11559     `cdecl'.  *Note Function Attributes::.
11560
11561     *Warning:* this calling convention is incompatible with the one
11562     normally used on Unix, so you cannot use it if you need to call
11563     libraries compiled with the Unix compiler.
11564
11565     Also, you must provide function prototypes for all functions that
11566     take variable numbers of arguments (including `printf'); otherwise
11567     incorrect code will be generated for calls to those functions.
11568
11569     In addition, seriously incorrect code will result if you call a
11570     function with too many arguments.  (Normally, extra arguments are
11571     harmlessly ignored.)
11572
11573`-mregparm=NUM'
11574     Control how many registers are used to pass integer arguments.  By
11575     default, no registers are used to pass arguments, and at most 3
11576     registers can be used.  You can control this behavior for a
11577     specific function by using the function attribute `regparm'.
11578     *Note Function Attributes::.
11579
11580     *Warning:* if you use this switch, and NUM is nonzero, then you
11581     must build all modules with the same value, including any
11582     libraries.  This includes the system libraries and startup modules.
11583
11584`-msseregparm'
11585     Use SSE register passing conventions for float and double arguments
11586     and return values.  You can control this behavior for a specific
11587     function by using the function attribute `sseregparm'.  *Note
11588     Function Attributes::.
11589
11590     *Warning:* if you use this switch then you must build all modules
11591     with the same value, including any libraries.  This includes the
11592     system libraries and startup modules.
11593
11594`-mpc32'
11595`-mpc64'
11596`-mpc80'
11597     Set 80387 floating-point precision to 32, 64 or 80 bits.  When
11598     `-mpc32' is specified, the significands of results of
11599     floating-point operations are rounded to 24 bits (single
11600     precision); `-mpc64' rounds the significands of results of
11601     floating-point operations to 53 bits (double precision) and
11602     `-mpc80' rounds the significands of results of floating-point
11603     operations to 64 bits (extended double precision), which is the
11604     default.  When this option is used, floating-point operations in
11605     higher precisions are not available to the programmer without
11606     setting the FPU control word explicitly.
11607
11608     Setting the rounding of floating-point operations to less than the
11609     default 80 bits can speed some programs by 2% or more.  Note that
11610     some mathematical libraries assume that extended precision (80
11611     bit) floating-point operations are enabled by default; routines in
11612     such libraries could suffer significant loss of accuracy,
11613     typically through so-called "catastrophic cancellation", when this
11614     option is used to set the precision to less than extended
11615     precision.
11616
11617`-mstackrealign'
11618     Realign the stack at entry.  On the Intel x86, the `-mstackrealign'
11619     option will generate an alternate prologue and epilogue that
11620     realigns the runtime stack if necessary.  This supports mixing
11621     legacy codes that keep a 4-byte aligned stack with modern codes
11622     that keep a 16-byte stack for SSE compatibility.  See also the
11623     attribute `force_align_arg_pointer', applicable to individual
11624     functions.
11625
11626`-mpreferred-stack-boundary=NUM'
11627     Attempt to keep the stack boundary aligned to a 2 raised to NUM
11628     byte boundary.  If `-mpreferred-stack-boundary' is not specified,
11629     the default is 4 (16 bytes or 128 bits).
11630
11631`-mincoming-stack-boundary=NUM'
11632     Assume the incoming stack is aligned to a 2 raised to NUM byte
11633     boundary.  If `-mincoming-stack-boundary' is not specified, the
11634     one specified by `-mpreferred-stack-boundary' will be used.
11635
11636     On Pentium and PentiumPro, `double' and `long double' values
11637     should be aligned to an 8 byte boundary (see `-malign-double') or
11638     suffer significant run time performance penalties.  On Pentium
11639     III, the Streaming SIMD Extension (SSE) data type `__m128' may not
11640     work properly if it is not 16 byte aligned.
11641
11642     To ensure proper alignment of this values on the stack, the stack
11643     boundary must be as aligned as that required by any value stored
11644     on the stack.  Further, every function must be generated such that
11645     it keeps the stack aligned.  Thus calling a function compiled with
11646     a higher preferred stack boundary from a function compiled with a
11647     lower preferred stack boundary will most likely misalign the
11648     stack.  It is recommended that libraries that use callbacks always
11649     use the default setting.
11650
11651     This extra alignment does consume extra stack space, and generally
11652     increases code size.  Code that is sensitive to stack space usage,
11653     such as embedded systems and operating system kernels, may want to
11654     reduce the preferred alignment to `-mpreferred-stack-boundary=2'.
11655
11656`-mmmx'
11657`-mno-mmx'
11658`-msse'
11659`-mno-sse'
11660`-msse2'
11661`-mno-sse2'
11662`-msse3'
11663`-mno-sse3'
11664`-mssse3'
11665`-mno-ssse3'
11666`-msse4.1'
11667`-mno-sse4.1'
11668`-msse4.2'
11669`-mno-sse4.2'
11670`-msse4'
11671`-mno-sse4'
11672`-mavx'
11673`-mno-avx'
11674`-maes'
11675`-mno-aes'
11676`-mpclmul'
11677`-mno-pclmul'
11678`-msse4a'
11679`-mno-sse4a'
11680`-mfma4'
11681`-mno-fma4'
11682`-mxop'
11683`-mno-xop'
11684`-mlwp'
11685`-mno-lwp'
11686`-m3dnow'
11687`-mno-3dnow'
11688`-mpopcnt'
11689`-mno-popcnt'
11690`-mabm'
11691`-mno-abm'
11692     These switches enable or disable the use of instructions in the
11693     MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AES, PCLMUL, SSE4A,
11694     FMA4, XOP, LWP, ABM or 3DNow! extended instruction sets.  These
11695     extensions are also available as built-in functions: see *note X86
11696     Built-in Functions::, for details of the functions enabled and
11697     disabled by these switches.
11698
11699     To have SSE/SSE2 instructions generated automatically from
11700     floating-point code (as opposed to 387 instructions), see
11701     `-mfpmath=sse'.
11702
11703     GCC depresses SSEx instructions when `-mavx' is used. Instead, it
11704     generates new AVX instructions or AVX equivalence for all SSEx
11705     instructions when needed.
11706
11707     These options will enable GCC to use these extended instructions in
11708     generated code, even without `-mfpmath=sse'.  Applications which
11709     perform runtime CPU detection must compile separate files for each
11710     supported architecture, using the appropriate flags.  In
11711     particular, the file containing the CPU detection code should be
11712     compiled without these options.
11713
11714`-mfused-madd'
11715`-mno-fused-madd'
11716     Do (don't) generate code that uses the fused multiply/add or
11717     multiply/subtract instructions.  The default is to use these
11718     instructions.
11719
11720`-mcld'
11721     This option instructs GCC to emit a `cld' instruction in the
11722     prologue of functions that use string instructions.  String
11723     instructions depend on the DF flag to select between autoincrement
11724     or autodecrement mode.  While the ABI specifies the DF flag to be
11725     cleared on function entry, some operating systems violate this
11726     specification by not clearing the DF flag in their exception
11727     dispatchers.  The exception handler can be invoked with the DF flag
11728     set which leads to wrong direction mode, when string instructions
11729     are used.  This option can be enabled by default on 32-bit x86
11730     targets by configuring GCC with the `--enable-cld' configure
11731     option.  Generation of `cld' instructions can be suppressed with
11732     the `-mno-cld' compiler option in this case.
11733
11734`-mcx16'
11735     This option will enable GCC to use CMPXCHG16B instruction in
11736     generated code.  CMPXCHG16B allows for atomic operations on
11737     128-bit double quadword (or oword) data types.  This is useful for
11738     high resolution counters that could be updated by multiple
11739     processors (or cores).  This instruction is generated as part of
11740     atomic built-in functions: see *note Atomic Builtins:: for details.
11741
11742`-msahf'
11743     This option will enable GCC to use SAHF instruction in generated
11744     64-bit code.  Early Intel CPUs with Intel 64 lacked LAHF and SAHF
11745     instructions supported by AMD64 until introduction of Pentium 4 G1
11746     step in December 2005.  LAHF and SAHF are load and store
11747     instructions, respectively, for certain status flags.  In 64-bit
11748     mode, SAHF instruction is used to optimize `fmod', `drem' or
11749     `remainder' built-in functions: see *note Other Builtins:: for
11750     details.
11751
11752`-mmovbe'
11753     This option will enable GCC to use movbe instruction to implement
11754     `__builtin_bswap32' and `__builtin_bswap64'.
11755
11756`-mcrc32'
11757     This option will enable built-in functions,
11758     `__builtin_ia32_crc32qi', `__builtin_ia32_crc32hi'.
11759     `__builtin_ia32_crc32si' and `__builtin_ia32_crc32di' to generate
11760     the crc32 machine instruction.
11761
11762`-mrecip'
11763     This option will enable GCC to use RCPSS and RSQRTSS instructions
11764     (and their vectorized variants RCPPS and RSQRTPS) with an
11765     additional Newton-Raphson step to increase precision instead of
11766     DIVSS and SQRTSS (and their vectorized variants) for single
11767     precision floating point arguments.  These instructions are
11768     generated only when `-funsafe-math-optimizations' is enabled
11769     together with `-finite-math-only' and `-fno-trapping-math'.  Note
11770     that while the throughput of the sequence is higher than the
11771     throughput of the non-reciprocal instruction, the precision of the
11772     sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0
11773     equals 0.99999994).
11774
11775     Note that GCC implements 1.0f/sqrtf(x) in terms of RSQRTSS (or
11776     RSQRTPS) already with `-ffast-math' (or the above option
11777     combination), and doesn't need `-mrecip'.
11778
11779`-mveclibabi=TYPE'
11780     Specifies the ABI type to use for vectorizing intrinsics using an
11781     external library.  Supported types are `svml' for the Intel short
11782     vector math library and `acml' for the AMD math core library style
11783     of interfacing.  GCC will currently emit calls to `vmldExp2',
11784     `vmldLn2', `vmldLog102', `vmldLog102', `vmldPow2', `vmldTanh2',
11785     `vmldTan2', `vmldAtan2', `vmldAtanh2', `vmldCbrt2', `vmldSinh2',
11786     `vmldSin2', `vmldAsinh2', `vmldAsin2', `vmldCosh2', `vmldCos2',
11787     `vmldAcosh2', `vmldAcos2', `vmlsExp4', `vmlsLn4', `vmlsLog104',
11788     `vmlsLog104', `vmlsPow4', `vmlsTanh4', `vmlsTan4', `vmlsAtan4',
11789     `vmlsAtanh4', `vmlsCbrt4', `vmlsSinh4', `vmlsSin4', `vmlsAsinh4',
11790     `vmlsAsin4', `vmlsCosh4', `vmlsCos4', `vmlsAcosh4' and `vmlsAcos4'
11791     for corresponding function type when `-mveclibabi=svml' is used
11792     and `__vrd2_sin', `__vrd2_cos', `__vrd2_exp', `__vrd2_log',
11793     `__vrd2_log2', `__vrd2_log10', `__vrs4_sinf', `__vrs4_cosf',
11794     `__vrs4_expf', `__vrs4_logf', `__vrs4_log2f', `__vrs4_log10f' and
11795     `__vrs4_powf' for corresponding function type when
11796     `-mveclibabi=acml' is used. Both `-ftree-vectorize' and
11797     `-funsafe-math-optimizations' have to be enabled. A SVML or ACML
11798     ABI compatible library will have to be specified at link time.
11799
11800`-mabi=NAME'
11801     Generate code for the specified calling convention.  Permissible
11802     values are: `sysv' for the ABI used on GNU/Linux and other systems
11803     and `ms' for the Microsoft ABI.  The default is to use the
11804     Microsoft ABI when targeting Windows.  On all other systems, the
11805     default is the SYSV ABI.  You can control this behavior for a
11806     specific function by using the function attribute
11807     `ms_abi'/`sysv_abi'.  *Note Function Attributes::.
11808
11809`-mpush-args'
11810`-mno-push-args'
11811     Use PUSH operations to store outgoing parameters.  This method is
11812     shorter and usually equally fast as method using SUB/MOV
11813     operations and is enabled by default.  In some cases disabling it
11814     may improve performance because of improved scheduling and reduced
11815     dependencies.
11816
11817`-maccumulate-outgoing-args'
11818     If enabled, the maximum amount of space required for outgoing
11819     arguments will be computed in the function prologue.  This is
11820     faster on most modern CPUs because of reduced dependencies,
11821     improved scheduling and reduced stack usage when preferred stack
11822     boundary is not equal to 2.  The drawback is a notable increase in
11823     code size.  This switch implies `-mno-push-args'.
11824
11825`-mthreads'
11826     Support thread-safe exception handling on `Mingw32'.  Code that
11827     relies on thread-safe exception handling must compile and link all
11828     code with the `-mthreads' option.  When compiling, `-mthreads'
11829     defines `-D_MT'; when linking, it links in a special thread helper
11830     library `-lmingwthrd' which cleans up per thread exception
11831     handling data.
11832
11833`-mno-align-stringops'
11834     Do not align destination of inlined string operations.  This
11835     switch reduces code size and improves performance in case the
11836     destination is already aligned, but GCC doesn't know about it.
11837
11838`-minline-all-stringops'
11839     By default GCC inlines string operations only when destination is
11840     known to be aligned at least to 4 byte boundary.  This enables
11841     more inlining, increase code size, but may improve performance of
11842     code that depends on fast memcpy, strlen and memset for short
11843     lengths.
11844
11845`-minline-stringops-dynamically'
11846     For string operation of unknown size, inline runtime checks so for
11847     small blocks inline code is used, while for large blocks library
11848     call is used.
11849
11850`-mstringop-strategy=ALG'
11851     Overwrite internal decision heuristic about particular algorithm
11852     to inline string operation with.  The allowed values are
11853     `rep_byte', `rep_4byte', `rep_8byte' for expanding using i386
11854     `rep' prefix of specified size, `byte_loop', `loop',
11855     `unrolled_loop' for expanding inline loop, `libcall' for always
11856     expanding library call.
11857
11858`-momit-leaf-frame-pointer'
11859     Don't keep the frame pointer in a register for leaf functions.
11860     This avoids the instructions to save, set up and restore frame
11861     pointers and makes an extra register available in leaf functions.
11862     The option `-fomit-frame-pointer' removes the frame pointer for
11863     all functions which might make debugging harder.
11864
11865`-mtls-direct-seg-refs'
11866`-mno-tls-direct-seg-refs'
11867     Controls whether TLS variables may be accessed with offsets from
11868     the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or
11869     whether the thread base pointer must be added.  Whether or not this
11870     is legal depends on the operating system, and whether it maps the
11871     segment to cover the entire TLS area.
11872
11873     For systems that use GNU libc, the default is on.
11874
11875`-msse2avx'
11876`-mno-sse2avx'
11877     Specify that the assembler should encode SSE instructions with VEX
11878     prefix.  The option `-mavx' turns this on by default.
11879
11880 These `-m' switches are supported in addition to the above on AMD
11881x86-64 processors in 64-bit environments.
11882
11883`-m32'
11884`-m64'
11885     Generate code for a 32-bit or 64-bit environment.  The 32-bit
11886     environment sets int, long and pointer to 32 bits and generates
11887     code that runs on any i386 system.  The 64-bit environment sets
11888     int to 32 bits and long and pointer to 64 bits and generates code
11889     for AMD's x86-64 architecture. For darwin only the -m64 option
11890     turns off the `-fno-pic' and `-mdynamic-no-pic' options.
11891
11892`-mno-red-zone'
11893     Do not use a so called red zone for x86-64 code.  The red zone is
11894     mandated by the x86-64 ABI, it is a 128-byte area beyond the
11895     location of the stack pointer that will not be modified by signal
11896     or interrupt handlers and therefore can be used for temporary data
11897     without adjusting the stack pointer.  The flag `-mno-red-zone'
11898     disables this red zone.
11899
11900`-mcmodel=small'
11901     Generate code for the small code model: the program and its
11902     symbols must be linked in the lower 2 GB of the address space.
11903     Pointers are 64 bits.  Programs can be statically or dynamically
11904     linked.  This is the default code model.
11905
11906`-mcmodel=kernel'
11907     Generate code for the kernel code model.  The kernel runs in the
11908     negative 2 GB of the address space.  This model has to be used for
11909     Linux kernel code.
11910
11911`-mcmodel=medium'
11912     Generate code for the medium model: The program is linked in the
11913     lower 2 GB of the address space.  Small symbols are also placed
11914     there.  Symbols with sizes larger than `-mlarge-data-threshold'
11915     are put into large data or bss sections and can be located above
11916     2GB.  Programs can be statically or dynamically linked.
11917
11918`-mcmodel=large'
11919     Generate code for the large model: This model makes no assumptions
11920     about addresses and sizes of sections.
11921
11922
11923File: gcc.info,  Node: i386 and x86-64 Windows Options,  Next: IA-64 Options,  Prev: i386 and x86-64 Options,  Up: Submodel Options
11924
119253.17.16 i386 and x86-64 Windows Options
11926---------------------------------------
11927
11928These additional options are available for Windows targets:
11929
11930`-mconsole'
11931     This option is available for Cygwin and MinGW targets.  It
11932     specifies that a console application is to be generated, by
11933     instructing the linker to set the PE header subsystem type
11934     required for console applications.  This is the default behavior
11935     for Cygwin and MinGW targets.
11936
11937`-mcygwin'
11938     This option is available for Cygwin targets.  It specifies that
11939     the Cygwin internal interface is to be used for predefined
11940     preprocessor macros, C runtime libraries and related linker paths
11941     and options.  For Cygwin targets this is the default behavior.
11942     This option is deprecated and will be removed in a future release.
11943
11944`-mno-cygwin'
11945     This option is available for Cygwin targets.  It specifies that
11946     the MinGW internal interface is to be used instead of Cygwin's, by
11947     setting MinGW-related predefined macros and linker paths and
11948     default library options.  This option is deprecated and will be
11949     removed in a future release.
11950
11951`-mdll'
11952     This option is available for Cygwin and MinGW targets.  It
11953     specifies that a DLL - a dynamic link library - is to be
11954     generated, enabling the selection of the required runtime startup
11955     object and entry point.
11956
11957`-mnop-fun-dllimport'
11958     This option is available for Cygwin and MinGW targets.  It
11959     specifies that the dllimport attribute should be ignored.
11960
11961`-mthread'
11962     This option is available for MinGW targets. It specifies that
11963     MinGW-specific thread support is to be used.
11964
11965`-municode'
11966     This option is available for mingw-w64 targets.  It specifies that
11967     the UNICODE macro is getting pre-defined and that the unicode
11968     capable runtime startup code is chosen.
11969
11970`-mwin32'
11971     This option is available for Cygwin and MinGW targets.  It
11972     specifies that the typical Windows pre-defined macros are to be
11973     set in the pre-processor, but does not influence the choice of
11974     runtime library/startup code.
11975
11976`-mwindows'
11977     This option is available for Cygwin and MinGW targets.  It
11978     specifies that a GUI application is to be generated by instructing
11979     the linker to set the PE header subsystem type appropriately.
11980
11981`-fno-set-stack-executable'
11982     This option is available for MinGW targets. It specifies that the
11983     executable flag for stack used by nested functions isn't set. This
11984     is necessary for binaries running in kernel mode of Windows, as
11985     there the user32 API, which is used to set executable privileges,
11986     isn't available.
11987
11988`-mpe-aligned-commons'
11989     This option is available for Cygwin and MinGW targets.  It
11990     specifies that the GNU extension to the PE file format that
11991     permits the correct alignment of COMMON variables should be used
11992     when generating code.  It will be enabled by default if GCC
11993     detects that the target assembler found during configuration
11994     supports the feature.
11995
11996 See also under *note i386 and x86-64 Options:: for standard options.
11997
11998
11999File: gcc.info,  Node: IA-64 Options,  Next: IA-64/VMS Options,  Prev: i386 and x86-64 Windows Options,  Up: Submodel Options
12000
120013.17.17 IA-64 Options
12002---------------------
12003
12004These are the `-m' options defined for the Intel IA-64 architecture.
12005
12006`-mbig-endian'
12007     Generate code for a big endian target.  This is the default for
12008     HP-UX.
12009
12010`-mlittle-endian'
12011     Generate code for a little endian target.  This is the default for
12012     AIX5 and GNU/Linux.
12013
12014`-mgnu-as'
12015`-mno-gnu-as'
12016     Generate (or don't) code for the GNU assembler.  This is the
12017     default.
12018
12019`-mgnu-ld'
12020`-mno-gnu-ld'
12021     Generate (or don't) code for the GNU linker.  This is the default.
12022
12023`-mno-pic'
12024     Generate code that does not use a global pointer register.  The
12025     result is not position independent code, and violates the IA-64
12026     ABI.
12027
12028`-mvolatile-asm-stop'
12029`-mno-volatile-asm-stop'
12030     Generate (or don't) a stop bit immediately before and after
12031     volatile asm statements.
12032
12033`-mregister-names'
12034`-mno-register-names'
12035     Generate (or don't) `in', `loc', and `out' register names for the
12036     stacked registers.  This may make assembler output more readable.
12037
12038`-mno-sdata'
12039`-msdata'
12040     Disable (or enable) optimizations that use the small data section.
12041     This may be useful for working around optimizer bugs.
12042
12043`-mconstant-gp'
12044     Generate code that uses a single constant global pointer value.
12045     This is useful when compiling kernel code.
12046
12047`-mauto-pic'
12048     Generate code that is self-relocatable.  This implies
12049     `-mconstant-gp'.  This is useful when compiling firmware code.
12050
12051`-minline-float-divide-min-latency'
12052     Generate code for inline divides of floating point values using
12053     the minimum latency algorithm.
12054
12055`-minline-float-divide-max-throughput'
12056     Generate code for inline divides of floating point values using
12057     the maximum throughput algorithm.
12058
12059`-mno-inline-float-divide'
12060     Do not generate inline code for divides of floating point values.
12061
12062`-minline-int-divide-min-latency'
12063     Generate code for inline divides of integer values using the
12064     minimum latency algorithm.
12065
12066`-minline-int-divide-max-throughput'
12067     Generate code for inline divides of integer values using the
12068     maximum throughput algorithm.
12069
12070`-mno-inline-int-divide'
12071     Do not generate inline code for divides of integer values.
12072
12073`-minline-sqrt-min-latency'
12074     Generate code for inline square roots using the minimum latency
12075     algorithm.
12076
12077`-minline-sqrt-max-throughput'
12078     Generate code for inline square roots using the maximum throughput
12079     algorithm.
12080
12081`-mno-inline-sqrt'
12082     Do not generate inline code for sqrt.
12083
12084`-mfused-madd'
12085`-mno-fused-madd'
12086     Do (don't) generate code that uses the fused multiply/add or
12087     multiply/subtract instructions.  The default is to use these
12088     instructions.
12089
12090`-mno-dwarf2-asm'
12091`-mdwarf2-asm'
12092     Don't (or do) generate assembler code for the DWARF2 line number
12093     debugging info.  This may be useful when not using the GNU
12094     assembler.
12095
12096`-mearly-stop-bits'
12097`-mno-early-stop-bits'
12098     Allow stop bits to be placed earlier than immediately preceding the
12099     instruction that triggered the stop bit.  This can improve
12100     instruction scheduling, but does not always do so.
12101
12102`-mfixed-range=REGISTER-RANGE'
12103     Generate code treating the given register range as fixed registers.
12104     A fixed register is one that the register allocator can not use.
12105     This is useful when compiling kernel code.  A register range is
12106     specified as two registers separated by a dash.  Multiple register
12107     ranges can be specified separated by a comma.
12108
12109`-mtls-size=TLS-SIZE'
12110     Specify bit size of immediate TLS offsets.  Valid values are 14,
12111     22, and 64.
12112
12113`-mtune=CPU-TYPE'
12114     Tune the instruction scheduling for a particular CPU, Valid values
12115     are itanium, itanium1, merced, itanium2, and mckinley.
12116
12117`-milp32'
12118`-mlp64'
12119     Generate code for a 32-bit or 64-bit environment.  The 32-bit
12120     environment sets int, long and pointer to 32 bits.  The 64-bit
12121     environment sets int to 32 bits and long and pointer to 64 bits.
12122     These are HP-UX specific flags.
12123
12124`-mno-sched-br-data-spec'
12125`-msched-br-data-spec'
12126     (Dis/En)able data speculative scheduling before reload.  This will
12127     result in generation of the ld.a instructions and the
12128     corresponding check instructions (ld.c / chk.a).  The default is
12129     'disable'.
12130
12131`-msched-ar-data-spec'
12132`-mno-sched-ar-data-spec'
12133     (En/Dis)able data speculative scheduling after reload.  This will
12134     result in generation of the ld.a instructions and the
12135     corresponding check instructions (ld.c / chk.a).  The default is
12136     'enable'.
12137
12138`-mno-sched-control-spec'
12139`-msched-control-spec'
12140     (Dis/En)able control speculative scheduling.  This feature is
12141     available only during region scheduling (i.e. before reload).
12142     This will result in generation of the ld.s instructions and the
12143     corresponding check instructions chk.s .  The default is 'disable'.
12144
12145`-msched-br-in-data-spec'
12146`-mno-sched-br-in-data-spec'
12147     (En/Dis)able speculative scheduling of the instructions that are
12148     dependent on the data speculative loads before reload.  This is
12149     effective only with `-msched-br-data-spec' enabled.  The default
12150     is 'enable'.
12151
12152`-msched-ar-in-data-spec'
12153`-mno-sched-ar-in-data-spec'
12154     (En/Dis)able speculative scheduling of the instructions that are
12155     dependent on the data speculative loads after reload.  This is
12156     effective only with `-msched-ar-data-spec' enabled.  The default
12157     is 'enable'.
12158
12159`-msched-in-control-spec'
12160`-mno-sched-in-control-spec'
12161     (En/Dis)able speculative scheduling of the instructions that are
12162     dependent on the control speculative loads.  This is effective
12163     only with `-msched-control-spec' enabled.  The default is 'enable'.
12164
12165`-mno-sched-prefer-non-data-spec-insns'
12166`-msched-prefer-non-data-spec-insns'
12167     If enabled, data speculative instructions will be chosen for
12168     schedule only if there are no other choices at the moment.  This
12169     will make the use of the data speculation much more conservative.
12170     The default is 'disable'.
12171
12172`-mno-sched-prefer-non-control-spec-insns'
12173`-msched-prefer-non-control-spec-insns'
12174     If enabled, control speculative instructions will be chosen for
12175     schedule only if there are no other choices at the moment.  This
12176     will make the use of the control speculation much more
12177     conservative.  The default is 'disable'.
12178
12179`-mno-sched-count-spec-in-critical-path'
12180`-msched-count-spec-in-critical-path'
12181     If enabled, speculative dependencies will be considered during
12182     computation of the instructions priorities.  This will make the
12183     use of the speculation a bit more conservative.  The default is
12184     'disable'.
12185
12186`-msched-spec-ldc'
12187     Use a simple data speculation check.  This option is on by default.
12188
12189`-msched-control-spec-ldc'
12190     Use a simple check for control speculation.  This option is on by
12191     default.
12192
12193`-msched-stop-bits-after-every-cycle'
12194     Place a stop bit after every cycle when scheduling.  This option
12195     is on by default.
12196
12197`-msched-fp-mem-deps-zero-cost'
12198     Assume that floating-point stores and loads are not likely to
12199     cause a conflict when placed into the same instruction group.
12200     This option is disabled by default.
12201
12202`-msel-sched-dont-check-control-spec'
12203     Generate checks for control speculation in selective scheduling.
12204     This flag is disabled by default.
12205
12206`-msched-max-memory-insns=MAX-INSNS'
12207     Limit on the number of memory insns per instruction group, giving
12208     lower priority to subsequent memory insns attempting to schedule
12209     in the same instruction group. Frequently useful to prevent cache
12210     bank conflicts.  The default value is 1.
12211
12212`-msched-max-memory-insns-hard-limit'
12213     Disallow more than `msched-max-memory-insns' in instruction group.
12214     Otherwise, limit is `soft' meaning that we would prefer non-memory
12215     operations when limit is reached but may still schedule memory
12216     operations.
12217
12218
12219
12220File: gcc.info,  Node: IA-64/VMS Options,  Next: LM32 Options,  Prev: IA-64 Options,  Up: Submodel Options
12221
122223.17.18 IA-64/VMS Options
12223-------------------------
12224
12225These `-m' options are defined for the IA-64/VMS implementations:
12226
12227`-mvms-return-codes'
12228     Return VMS condition codes from main. The default is to return
12229     POSIX style condition (e.g. error) codes.
12230
12231`-mdebug-main=PREFIX'
12232     Flag the first routine whose name starts with PREFIX as the main
12233     routine for the debugger.
12234
12235`-mmalloc64'
12236     Default to 64bit memory allocation routines.
12237
12238
12239File: gcc.info,  Node: LM32 Options,  Next: M32C Options,  Prev: IA-64/VMS Options,  Up: Submodel Options
12240
122413.17.19 LM32 Options
12242--------------------
12243
12244These `-m' options are defined for the Lattice Mico32 architecture:
12245
12246`-mbarrel-shift-enabled'
12247     Enable barrel-shift instructions.
12248
12249`-mdivide-enabled'
12250     Enable divide and modulus instructions.
12251
12252`-mmultiply-enabled'
12253     Enable multiply instructions.
12254
12255`-msign-extend-enabled'
12256     Enable sign extend instructions.
12257
12258`-muser-enabled'
12259     Enable user-defined instructions.
12260
12261
12262
12263File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: LM32 Options,  Up: Submodel Options
12264
122653.17.20 M32C Options
12266--------------------
12267
12268`-mcpu=NAME'
12269     Select the CPU for which code is generated.  NAME may be one of
12270     `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60)
12271     series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80
12272     series.
12273
12274`-msim'
12275     Specifies that the program will be run on the simulator.  This
12276     causes an alternate runtime library to be linked in which
12277     supports, for example, file I/O.  You must not use this option
12278     when generating programs that will run on real hardware; you must
12279     provide your own runtime library for whatever I/O functions are
12280     needed.
12281
12282`-memregs=NUMBER'
12283     Specifies the number of memory-based pseudo-registers GCC will use
12284     during code generation.  These pseudo-registers will be used like
12285     real registers, so there is a tradeoff between GCC's ability to
12286     fit the code into available registers, and the performance penalty
12287     of using memory instead of registers.  Note that all modules in a
12288     program must be compiled with the same value for this option.
12289     Because of that, you must not use this option with the default
12290     runtime libraries gcc builds.
12291
12292
12293
12294File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options
12295
122963.17.21 M32R/D Options
12297----------------------
12298
12299These `-m' options are defined for Renesas M32R/D architectures:
12300
12301`-m32r2'
12302     Generate code for the M32R/2.
12303
12304`-m32rx'
12305     Generate code for the M32R/X.
12306
12307`-m32r'
12308     Generate code for the M32R.  This is the default.
12309
12310`-mmodel=small'
12311     Assume all objects live in the lower 16MB of memory (so that their
12312     addresses can be loaded with the `ld24' instruction), and assume
12313     all subroutines are reachable with the `bl' instruction.  This is
12314     the default.
12315
12316     The addressability of a particular object can be set with the
12317     `model' attribute.
12318
12319`-mmodel=medium'
12320     Assume objects may be anywhere in the 32-bit address space (the
12321     compiler will generate `seth/add3' instructions to load their
12322     addresses), and assume all subroutines are reachable with the `bl'
12323     instruction.
12324
12325`-mmodel=large'
12326     Assume objects may be anywhere in the 32-bit address space (the
12327     compiler will generate `seth/add3' instructions to load their
12328     addresses), and assume subroutines may not be reachable with the
12329     `bl' instruction (the compiler will generate the much slower
12330     `seth/add3/jl' instruction sequence).
12331
12332`-msdata=none'
12333     Disable use of the small data area.  Variables will be put into
12334     one of `.data', `bss', or `.rodata' (unless the `section'
12335     attribute has been specified).  This is the default.
12336
12337     The small data area consists of sections `.sdata' and `.sbss'.
12338     Objects may be explicitly put in the small data area with the
12339     `section' attribute using one of these sections.
12340
12341`-msdata=sdata'
12342     Put small global and static data in the small data area, but do not
12343     generate special code to reference them.
12344
12345`-msdata=use'
12346     Put small global and static data in the small data area, and
12347     generate special instructions to reference them.
12348
12349`-G NUM'
12350     Put global and static objects less than or equal to NUM bytes into
12351     the small data or bss sections instead of the normal data or bss
12352     sections.  The default value of NUM is 8.  The `-msdata' option
12353     must be set to one of `sdata' or `use' for this option to have any
12354     effect.
12355
12356     All modules should be compiled with the same `-G NUM' value.
12357     Compiling with different values of NUM may or may not work; if it
12358     doesn't the linker will give an error message--incorrect code will
12359     not be generated.
12360
12361`-mdebug'
12362     Makes the M32R specific code in the compiler display some
12363     statistics that might help in debugging programs.
12364
12365`-malign-loops'
12366     Align all loops to a 32-byte boundary.
12367
12368`-mno-align-loops'
12369     Do not enforce a 32-byte alignment for loops.  This is the default.
12370
12371`-missue-rate=NUMBER'
12372     Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
12373
12374`-mbranch-cost=NUMBER'
12375     NUMBER can only be 1 or 2.  If it is 1 then branches will be
12376     preferred over conditional code, if it is 2, then the opposite will
12377     apply.
12378
12379`-mflush-trap=NUMBER'
12380     Specifies the trap number to use to flush the cache.  The default
12381     is 12.  Valid numbers are between 0 and 15 inclusive.
12382
12383`-mno-flush-trap'
12384     Specifies that the cache cannot be flushed by using a trap.
12385
12386`-mflush-func=NAME'
12387     Specifies the name of the operating system function to call to
12388     flush the cache.  The default is __flush_cache_, but a function
12389     call will only be used if a trap is not available.
12390
12391`-mno-flush-func'
12392     Indicates that there is no OS function for flushing the cache.
12393
12394
12395
12396File: gcc.info,  Node: M680x0 Options,  Next: M68hc1x Options,  Prev: M32R/D Options,  Up: Submodel Options
12397
123983.17.22 M680x0 Options
12399----------------------
12400
12401These are the `-m' options defined for M680x0 and ColdFire processors.
12402The default settings depend on which architecture was selected when the
12403compiler was configured; the defaults for the most common choices are
12404given below.
12405
12406`-march=ARCH'
12407     Generate code for a specific M680x0 or ColdFire instruction set
12408     architecture.  Permissible values of ARCH for M680x0 architectures
12409     are: `68000', `68010', `68020', `68030', `68040', `68060' and
12410     `cpu32'.  ColdFire architectures are selected according to
12411     Freescale's ISA classification and the permissible values are:
12412     `isaa', `isaaplus', `isab' and `isac'.
12413
12414     gcc defines a macro `__mcfARCH__' whenever it is generating code
12415     for a ColdFire target.  The ARCH in this macro is one of the
12416     `-march' arguments given above.
12417
12418     When used together, `-march' and `-mtune' select code that runs on
12419     a family of similar processors but that is optimized for a
12420     particular microarchitecture.
12421
12422`-mcpu=CPU'
12423     Generate code for a specific M680x0 or ColdFire processor.  The
12424     M680x0 CPUs are: `68000', `68010', `68020', `68030', `68040',
12425     `68060', `68302', `68332' and `cpu32'.  The ColdFire CPUs are
12426     given by the table below, which also classifies the CPUs into
12427     families:
12428
12429     *Family*      *`-mcpu' arguments*
12430     `51'          `51' `51ac' `51cn' `51em' `51qe'
12431     `5206'        `5202' `5204' `5206'
12432     `5206e'       `5206e'
12433     `5208'        `5207' `5208'
12434     `5211a'       `5210a' `5211a'
12435     `5213'        `5211' `5212' `5213'
12436     `5216'        `5214' `5216'
12437     `52235'       `52230' `52231' `52232' `52233' `52234' `52235'
12438     `5225'        `5224' `5225'
12439     `52259'       `52252' `52254' `52255' `52256' `52258' `52259'
12440     `5235'        `5232' `5233' `5234' `5235' `523x'
12441     `5249'        `5249'
12442     `5250'        `5250'
12443     `5271'        `5270' `5271'
12444     `5272'        `5272'
12445     `5275'        `5274' `5275'
12446     `5282'        `5280' `5281' `5282' `528x'
12447     `53017'       `53011' `53012' `53013' `53014' `53015' `53016'
12448                   `53017'
12449     `5307'        `5307'
12450     `5329'        `5327' `5328' `5329' `532x'
12451     `5373'        `5372' `5373' `537x'
12452     `5407'        `5407'
12453     `5475'        `5470' `5471' `5472' `5473' `5474' `5475' `547x'
12454                   `5480' `5481' `5482' `5483' `5484' `5485'
12455
12456     `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with
12457     CPU.  Other combinations of `-mcpu' and `-march' are rejected.
12458
12459     gcc defines the macro `__mcf_cpu_CPU' when ColdFire target CPU is
12460     selected.  It also defines `__mcf_family_FAMILY', where the value
12461     of FAMILY is given by the table above.
12462
12463`-mtune=TUNE'
12464     Tune the code for a particular microarchitecture, within the
12465     constraints set by `-march' and `-mcpu'.  The M680x0
12466     microarchitectures are: `68000', `68010', `68020', `68030',
12467     `68040', `68060' and `cpu32'.  The ColdFire microarchitectures
12468     are: `cfv1', `cfv2', `cfv3', `cfv4' and `cfv4e'.
12469
12470     You can also use `-mtune=68020-40' for code that needs to run
12471     relatively well on 68020, 68030 and 68040 targets.
12472     `-mtune=68020-60' is similar but includes 68060 targets as well.
12473     These two options select the same tuning decisions as `-m68020-40'
12474     and `-m68020-60' respectively.
12475
12476     gcc defines the macros `__mcARCH' and `__mcARCH__' when tuning for
12477     680x0 architecture ARCH.  It also defines `mcARCH' unless either
12478     `-ansi' or a non-GNU `-std' option is used.  If gcc is tuning for
12479     a range of architectures, as selected by `-mtune=68020-40' or
12480     `-mtune=68020-60', it defines the macros for every architecture in
12481     the range.
12482
12483     gcc also defines the macro `__mUARCH__' when tuning for ColdFire
12484     microarchitecture UARCH, where UARCH is one of the arguments given
12485     above.
12486
12487`-m68000'
12488`-mc68000'
12489     Generate output for a 68000.  This is the default when the
12490     compiler is configured for 68000-based systems.  It is equivalent
12491     to `-march=68000'.
12492
12493     Use this option for microcontrollers with a 68000 or EC000 core,
12494     including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
12495
12496`-m68010'
12497     Generate output for a 68010.  This is the default when the
12498     compiler is configured for 68010-based systems.  It is equivalent
12499     to `-march=68010'.
12500
12501`-m68020'
12502`-mc68020'
12503     Generate output for a 68020.  This is the default when the
12504     compiler is configured for 68020-based systems.  It is equivalent
12505     to `-march=68020'.
12506
12507`-m68030'
12508     Generate output for a 68030.  This is the default when the
12509     compiler is configured for 68030-based systems.  It is equivalent
12510     to `-march=68030'.
12511
12512`-m68040'
12513     Generate output for a 68040.  This is the default when the
12514     compiler is configured for 68040-based systems.  It is equivalent
12515     to `-march=68040'.
12516
12517     This option inhibits the use of 68881/68882 instructions that have
12518     to be emulated by software on the 68040.  Use this option if your
12519     68040 does not have code to emulate those instructions.
12520
12521`-m68060'
12522     Generate output for a 68060.  This is the default when the
12523     compiler is configured for 68060-based systems.  It is equivalent
12524     to `-march=68060'.
12525
12526     This option inhibits the use of 68020 and 68881/68882 instructions
12527     that have to be emulated by software on the 68060.  Use this
12528     option if your 68060 does not have code to emulate those
12529     instructions.
12530
12531`-mcpu32'
12532     Generate output for a CPU32.  This is the default when the
12533     compiler is configured for CPU32-based systems.  It is equivalent
12534     to `-march=cpu32'.
12535
12536     Use this option for microcontrollers with a CPU32 or CPU32+ core,
12537     including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
12538     68341, 68349 and 68360.
12539
12540`-m5200'
12541     Generate output for a 520X ColdFire CPU.  This is the default when
12542     the compiler is configured for 520X-based systems.  It is
12543     equivalent to `-mcpu=5206', and is now deprecated in favor of that
12544     option.
12545
12546     Use this option for microcontroller with a 5200 core, including
12547     the MCF5202, MCF5203, MCF5204 and MCF5206.
12548
12549`-m5206e'
12550     Generate output for a 5206e ColdFire CPU.  The option is now
12551     deprecated in favor of the equivalent `-mcpu=5206e'.
12552
12553`-m528x'
12554     Generate output for a member of the ColdFire 528X family.  The
12555     option is now deprecated in favor of the equivalent `-mcpu=528x'.
12556
12557`-m5307'
12558     Generate output for a ColdFire 5307 CPU.  The option is now
12559     deprecated in favor of the equivalent `-mcpu=5307'.
12560
12561`-m5407'
12562     Generate output for a ColdFire 5407 CPU.  The option is now
12563     deprecated in favor of the equivalent `-mcpu=5407'.
12564
12565`-mcfv4e'
12566     Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
12567     This includes use of hardware floating point instructions.  The
12568     option is equivalent to `-mcpu=547x', and is now deprecated in
12569     favor of that option.
12570
12571`-m68020-40'
12572     Generate output for a 68040, without using any of the new
12573     instructions.  This results in code which can run relatively
12574     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
12575     generated code does use the 68881 instructions that are emulated
12576     on the 68040.
12577
12578     The option is equivalent to `-march=68020' `-mtune=68020-40'.
12579
12580`-m68020-60'
12581     Generate output for a 68060, without using any of the new
12582     instructions.  This results in code which can run relatively
12583     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
12584     generated code does use the 68881 instructions that are emulated
12585     on the 68060.
12586
12587     The option is equivalent to `-march=68020' `-mtune=68020-60'.
12588
12589`-mhard-float'
12590`-m68881'
12591     Generate floating-point instructions.  This is the default for
12592     68020 and above, and for ColdFire devices that have an FPU.  It
12593     defines the macro `__HAVE_68881__' on M680x0 targets and
12594     `__mcffpu__' on ColdFire targets.
12595
12596`-msoft-float'
12597     Do not generate floating-point instructions; use library calls
12598     instead.  This is the default for 68000, 68010, and 68832 targets.
12599     It is also the default for ColdFire devices that have no FPU.
12600
12601`-mdiv'
12602`-mno-div'
12603     Generate (do not generate) ColdFire hardware divide and remainder
12604     instructions.  If `-march' is used without `-mcpu', the default is
12605     "on" for ColdFire architectures and "off" for M680x0
12606     architectures.  Otherwise, the default is taken from the target CPU
12607     (either the default CPU, or the one specified by `-mcpu').  For
12608     example, the default is "off" for `-mcpu=5206' and "on" for
12609     `-mcpu=5206e'.
12610
12611     gcc defines the macro `__mcfhwdiv__' when this option is enabled.
12612
12613`-mshort'
12614     Consider type `int' to be 16 bits wide, like `short int'.
12615     Additionally, parameters passed on the stack are also aligned to a
12616     16-bit boundary even on targets whose API mandates promotion to
12617     32-bit.
12618
12619`-mno-short'
12620     Do not consider type `int' to be 16 bits wide.  This is the
12621     default.
12622
12623`-mnobitfield'
12624`-mno-bitfield'
12625     Do not use the bit-field instructions.  The `-m68000', `-mcpu32'
12626     and `-m5200' options imply `-mnobitfield'.
12627
12628`-mbitfield'
12629     Do use the bit-field instructions.  The `-m68020' option implies
12630     `-mbitfield'.  This is the default if you use a configuration
12631     designed for a 68020.
12632
12633`-mrtd'
12634     Use a different function-calling convention, in which functions
12635     that take a fixed number of arguments return with the `rtd'
12636     instruction, which pops their arguments while returning.  This
12637     saves one instruction in the caller since there is no need to pop
12638     the arguments there.
12639
12640     This calling convention is incompatible with the one normally used
12641     on Unix, so you cannot use it if you need to call libraries
12642     compiled with the Unix compiler.
12643
12644     Also, you must provide function prototypes for all functions that
12645     take variable numbers of arguments (including `printf'); otherwise
12646     incorrect code will be generated for calls to those functions.
12647
12648     In addition, seriously incorrect code will result if you call a
12649     function with too many arguments.  (Normally, extra arguments are
12650     harmlessly ignored.)
12651
12652     The `rtd' instruction is supported by the 68010, 68020, 68030,
12653     68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
12654
12655`-mno-rtd'
12656     Do not use the calling conventions selected by `-mrtd'.  This is
12657     the default.
12658
12659`-malign-int'
12660`-mno-align-int'
12661     Control whether GCC aligns `int', `long', `long long', `float',
12662     `double', and `long double' variables on a 32-bit boundary
12663     (`-malign-int') or a 16-bit boundary (`-mno-align-int').  Aligning
12664     variables on 32-bit boundaries produces code that runs somewhat
12665     faster on processors with 32-bit busses at the expense of more
12666     memory.
12667
12668     *Warning:* if you use the `-malign-int' switch, GCC will align
12669     structures containing the above types  differently than most
12670     published application binary interface specifications for the m68k.
12671
12672`-mpcrel'
12673     Use the pc-relative addressing mode of the 68000 directly, instead
12674     of using a global offset table.  At present, this option implies
12675     `-fpic', allowing at most a 16-bit offset for pc-relative
12676     addressing.  `-fPIC' is not presently supported with `-mpcrel',
12677     though this could be supported for 68020 and higher processors.
12678
12679`-mno-strict-align'
12680`-mstrict-align'
12681     Do not (do) assume that unaligned memory references will be
12682     handled by the system.
12683
12684`-msep-data'
12685     Generate code that allows the data segment to be located in a
12686     different area of memory from the text segment.  This allows for
12687     execute in place in an environment without virtual memory
12688     management.  This option implies `-fPIC'.
12689
12690`-mno-sep-data'
12691     Generate code that assumes that the data segment follows the text
12692     segment.  This is the default.
12693
12694`-mid-shared-library'
12695     Generate code that supports shared libraries via the library ID
12696     method.  This allows for execute in place and shared libraries in
12697     an environment without virtual memory management.  This option
12698     implies `-fPIC'.
12699
12700`-mno-id-shared-library'
12701     Generate code that doesn't assume ID based shared libraries are
12702     being used.  This is the default.
12703
12704`-mshared-library-id=n'
12705     Specified the identification number of the ID based shared library
12706     being compiled.  Specifying a value of 0 will generate more
12707     compact code, specifying other values will force the allocation of
12708     that number to the current library but is no more space or time
12709     efficient than omitting this option.
12710
12711`-mxgot'
12712`-mno-xgot'
12713     When generating position-independent code for ColdFire, generate
12714     code that works if the GOT has more than 8192 entries.  This code
12715     is larger and slower than code generated without this option.  On
12716     M680x0 processors, this option is not needed; `-fPIC' suffices.
12717
12718     GCC normally uses a single instruction to load values from the GOT.
12719     While this is relatively efficient, it only works if the GOT is
12720     smaller than about 64k.  Anything larger causes the linker to
12721     report an error such as:
12722
12723          relocation truncated to fit: R_68K_GOT16O foobar
12724
12725     If this happens, you should recompile your code with `-mxgot'.  It
12726     should then work with very large GOTs.  However, code generated
12727     with `-mxgot' is less efficient, since it takes 4 instructions to
12728     fetch the value of a global symbol.
12729
12730     Note that some linkers, including newer versions of the GNU linker,
12731     can create multiple GOTs and sort GOT entries.  If you have such a
12732     linker, you should only need to use `-mxgot' when compiling a
12733     single object file that accesses more than 8192 GOT entries.  Very
12734     few do.
12735
12736     These options have no effect unless GCC is generating
12737     position-independent code.
12738
12739
12740
12741File: gcc.info,  Node: M68hc1x Options,  Next: MCore Options,  Prev: M680x0 Options,  Up: Submodel Options
12742
127433.17.23 M68hc1x Options
12744-----------------------
12745
12746These are the `-m' options defined for the 68hc11 and 68hc12
12747microcontrollers.  The default values for these options depends on
12748which style of microcontroller was selected when the compiler was
12749configured; the defaults for the most common choices are given below.
12750
12751`-m6811'
12752`-m68hc11'
12753     Generate output for a 68HC11.  This is the default when the
12754     compiler is configured for 68HC11-based systems.
12755
12756`-m6812'
12757`-m68hc12'
12758     Generate output for a 68HC12.  This is the default when the
12759     compiler is configured for 68HC12-based systems.
12760
12761`-m68S12'
12762`-m68hcs12'
12763     Generate output for a 68HCS12.
12764
12765`-mauto-incdec'
12766     Enable the use of 68HC12 pre and post auto-increment and
12767     auto-decrement addressing modes.
12768
12769`-minmax'
12770`-mnominmax'
12771     Enable the use of 68HC12 min and max instructions.
12772
12773`-mlong-calls'
12774`-mno-long-calls'
12775     Treat all calls as being far away (near).  If calls are assumed to
12776     be far away, the compiler will use the `call' instruction to call
12777     a function and the `rtc' instruction for returning.
12778
12779`-mshort'
12780     Consider type `int' to be 16 bits wide, like `short int'.
12781
12782`-msoft-reg-count=COUNT'
12783     Specify the number of pseudo-soft registers which are used for the
12784     code generation.  The maximum number is 32.  Using more pseudo-soft
12785     register may or may not result in better code depending on the
12786     program.  The default is 4 for 68HC11 and 2 for 68HC12.
12787
12788
12789
12790File: gcc.info,  Node: MCore Options,  Next: MeP Options,  Prev: M68hc1x Options,  Up: Submodel Options
12791
127923.17.24 MCore Options
12793---------------------
12794
12795These are the `-m' options defined for the Motorola M*Core processors.
12796
12797`-mhardlit'
12798`-mno-hardlit'
12799     Inline constants into the code stream if it can be done in two
12800     instructions or less.
12801
12802`-mdiv'
12803`-mno-div'
12804     Use the divide instruction.  (Enabled by default).
12805
12806`-mrelax-immediate'
12807`-mno-relax-immediate'
12808     Allow arbitrary sized immediates in bit operations.
12809
12810`-mwide-bitfields'
12811`-mno-wide-bitfields'
12812     Always treat bit-fields as int-sized.
12813
12814`-m4byte-functions'
12815`-mno-4byte-functions'
12816     Force all functions to be aligned to a four byte boundary.
12817
12818`-mcallgraph-data'
12819`-mno-callgraph-data'
12820     Emit callgraph information.
12821
12822`-mslow-bytes'
12823`-mno-slow-bytes'
12824     Prefer word access when reading byte quantities.
12825
12826`-mlittle-endian'
12827`-mbig-endian'
12828     Generate code for a little endian target.
12829
12830`-m210'
12831`-m340'
12832     Generate code for the 210 processor.
12833
12834`-mno-lsim'
12835     Assume that run-time support has been provided and so omit the
12836     simulator library (`libsim.a)' from the linker command line.
12837
12838`-mstack-increment=SIZE'
12839     Set the maximum amount for a single stack increment operation.
12840     Large values can increase the speed of programs which contain
12841     functions that need a large amount of stack space, but they can
12842     also trigger a segmentation fault if the stack is extended too
12843     much.  The default value is 0x1000.
12844
12845
12846
12847File: gcc.info,  Node: MeP Options,  Next: MIPS Options,  Prev: MCore Options,  Up: Submodel Options
12848
128493.17.25 MeP Options
12850-------------------
12851
12852`-mabsdiff'
12853     Enables the `abs' instruction, which is the absolute difference
12854     between two registers.
12855
12856`-mall-opts'
12857     Enables all the optional instructions - average, multiply, divide,
12858     bit operations, leading zero, absolute difference, min/max, clip,
12859     and saturation.
12860
12861`-maverage'
12862     Enables the `ave' instruction, which computes the average of two
12863     registers.
12864
12865`-mbased=N'
12866     Variables of size N bytes or smaller will be placed in the
12867     `.based' section by default.  Based variables use the `$tp'
12868     register as a base register, and there is a 128 byte limit to the
12869     `.based' section.
12870
12871`-mbitops'
12872     Enables the bit operation instructions - bit test (`btstm'), set
12873     (`bsetm'), clear (`bclrm'), invert (`bnotm'), and test-and-set
12874     (`tas').
12875
12876`-mc=NAME'
12877     Selects which section constant data will be placed in.  NAME may
12878     be `tiny', `near', or `far'.
12879
12880`-mclip'
12881     Enables the `clip' instruction.  Note that `-mclip' is not useful
12882     unless you also provide `-mminmax'.
12883
12884`-mconfig=NAME'
12885     Selects one of the build-in core configurations.  Each MeP chip has
12886     one or more modules in it; each module has a core CPU and a
12887     variety of coprocessors, optional instructions, and peripherals.
12888     The `MeP-Integrator' tool, not part of GCC, provides these
12889     configurations through this option; using this option is the same
12890     as using all the corresponding command line options.  The default
12891     configuration is `default'.
12892
12893`-mcop'
12894     Enables the coprocessor instructions.  By default, this is a 32-bit
12895     coprocessor.  Note that the coprocessor is normally enabled via the
12896     `-mconfig=' option.
12897
12898`-mcop32'
12899     Enables the 32-bit coprocessor's instructions.
12900
12901`-mcop64'
12902     Enables the 64-bit coprocessor's instructions.
12903
12904`-mivc2'
12905     Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
12906
12907`-mdc'
12908     Causes constant variables to be placed in the `.near' section.
12909
12910`-mdiv'
12911     Enables the `div' and `divu' instructions.
12912
12913`-meb'
12914     Generate big-endian code.
12915
12916`-mel'
12917     Generate little-endian code.
12918
12919`-mio-volatile'
12920     Tells the compiler that any variable marked with the `io'
12921     attribute is to be considered volatile.
12922
12923`-ml'
12924     Causes variables to be assigned to the `.far' section by default.
12925
12926`-mleadz'
12927     Enables the `leadz' (leading zero) instruction.
12928
12929`-mm'
12930     Causes variables to be assigned to the `.near' section by default.
12931
12932`-mminmax'
12933     Enables the `min' and `max' instructions.
12934
12935`-mmult'
12936     Enables the multiplication and multiply-accumulate instructions.
12937
12938`-mno-opts'
12939     Disables all the optional instructions enabled by `-mall-opts'.
12940
12941`-mrepeat'
12942     Enables the `repeat' and `erepeat' instructions, used for
12943     low-overhead looping.
12944
12945`-ms'
12946     Causes all variables to default to the `.tiny' section.  Note that
12947     there is a 65536 byte limit to this section.  Accesses to these
12948     variables use the `%gp' base register.
12949
12950`-msatur'
12951     Enables the saturation instructions.  Note that the compiler does
12952     not currently generate these itself, but this option is included
12953     for compatibility with other tools, like `as'.
12954
12955`-msdram'
12956     Link the SDRAM-based runtime instead of the default ROM-based
12957     runtime.
12958
12959`-msim'
12960     Link the simulator runtime libraries.
12961
12962`-msimnovec'
12963     Link the simulator runtime libraries, excluding built-in support
12964     for reset and exception vectors and tables.
12965
12966`-mtf'
12967     Causes all functions to default to the `.far' section.  Without
12968     this option, functions default to the `.near' section.
12969
12970`-mtiny=N'
12971     Variables that are N bytes or smaller will be allocated to the
12972     `.tiny' section.  These variables use the `$gp' base register.
12973     The default for this option is 4, but note that there's a 65536
12974     byte limit to the `.tiny' section.
12975
12976
12977
12978File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MeP Options,  Up: Submodel Options
12979
129803.17.26 MIPS Options
12981--------------------
12982
12983`-EB'
12984     Generate big-endian code.
12985
12986`-EL'
12987     Generate little-endian code.  This is the default for `mips*el-*-*'
12988     configurations.
12989
12990`-march=ARCH'
12991     Generate code that will run on ARCH, which can be the name of a
12992     generic MIPS ISA, or the name of a particular processor.  The ISA
12993     names are: `mips1', `mips2', `mips3', `mips4', `mips32',
12994     `mips32r2', `mips64' and `mips64r2'.  The processor names are:
12995     `4kc', `4km', `4kp', `4ksc', `4kec', `4kem', `4kep', `4ksd',
12996     `5kc', `5kf', `20kc', `24kc', `24kf2_1', `24kf1_1', `24kec',
12997     `24kef2_1', `24kef1_1', `34kc', `34kf2_1', `34kf1_1', `74kc',
12998     `74kf2_1', `74kf1_1', `74kf3_2', `1004kc', `1004kf2_1',
12999     `1004kf1_1', `loongson2e', `loongson2f', `m4k', `octeon', `orion',
13000     `r2000', `r3000', `r3900', `r4000', `r4400', `r4600', `r4650',
13001     `r6000', `r8000', `rm7000', `rm9000', `r10000', `r12000',
13002     `r14000', `r16000', `sb1', `sr71000', `vr4100', `vr4111',
13003     `vr4120', `vr4130', `vr4300', `vr5000', `vr5400', `vr5500' and
13004     `xlr'.  The special value `from-abi' selects the most compatible
13005     architecture for the selected ABI (that is, `mips1' for 32-bit
13006     ABIs and `mips3' for 64-bit ABIs).
13007
13008     Native Linux/GNU toolchains also support the value `native', which
13009     selects the best architecture option for the host processor.
13010     `-march=native' has no effect if GCC does not recognize the
13011     processor.
13012
13013     In processor names, a final `000' can be abbreviated as `k' (for
13014     example, `-march=r2k').  Prefixes are optional, and `vr' may be
13015     written `r'.
13016
13017     Names of the form `Nf2_1' refer to processors with FPUs clocked at
13018     half the rate of the core, names of the form `Nf1_1' refer to
13019     processors with FPUs clocked at the same rate as the core, and
13020     names of the form `Nf3_2' refer to processors with FPUs clocked a
13021     ratio of 3:2 with respect to the core.  For compatibility reasons,
13022     `Nf' is accepted as a synonym for `Nf2_1' while `Nx' and `Bfx' are
13023     accepted as synonyms for `Nf1_1'.
13024
13025     GCC defines two macros based on the value of this option.  The
13026     first is `_MIPS_ARCH', which gives the name of target
13027     architecture, as a string.  The second has the form
13028     `_MIPS_ARCH_FOO', where FOO is the capitalized value of
13029     `_MIPS_ARCH'.  For example, `-march=r2000' will set `_MIPS_ARCH'
13030     to `"r2000"' and define the macro `_MIPS_ARCH_R2000'.
13031
13032     Note that the `_MIPS_ARCH' macro uses the processor names given
13033     above.  In other words, it will have the full prefix and will not
13034     abbreviate `000' as `k'.  In the case of `from-abi', the macro
13035     names the resolved architecture (either `"mips1"' or `"mips3"').
13036     It names the default architecture when no `-march' option is given.
13037
13038`-mtune=ARCH'
13039     Optimize for ARCH.  Among other things, this option controls the
13040     way instructions are scheduled, and the perceived cost of
13041     arithmetic operations.  The list of ARCH values is the same as for
13042     `-march'.
13043
13044     When this option is not used, GCC will optimize for the processor
13045     specified by `-march'.  By using `-march' and `-mtune' together,
13046     it is possible to generate code that will run on a family of
13047     processors, but optimize the code for one particular member of
13048     that family.
13049
13050     `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO',
13051     which work in the same way as the `-march' ones described above.
13052
13053`-mips1'
13054     Equivalent to `-march=mips1'.
13055
13056`-mips2'
13057     Equivalent to `-march=mips2'.
13058
13059`-mips3'
13060     Equivalent to `-march=mips3'.
13061
13062`-mips4'
13063     Equivalent to `-march=mips4'.
13064
13065`-mips32'
13066     Equivalent to `-march=mips32'.
13067
13068`-mips32r2'
13069     Equivalent to `-march=mips32r2'.
13070
13071`-mips64'
13072     Equivalent to `-march=mips64'.
13073
13074`-mips64r2'
13075     Equivalent to `-march=mips64r2'.
13076
13077`-mips16'
13078`-mno-mips16'
13079     Generate (do not generate) MIPS16 code.  If GCC is targetting a
13080     MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE.
13081
13082     MIPS16 code generation can also be controlled on a per-function
13083     basis by means of `mips16' and `nomips16' attributes.  *Note
13084     Function Attributes::, for more information.
13085
13086`-mflip-mips16'
13087     Generate MIPS16 code on alternating functions.  This option is
13088     provided for regression testing of mixed MIPS16/non-MIPS16 code
13089     generation, and is not intended for ordinary use in compiling user
13090     code.
13091
13092`-minterlink-mips16'
13093`-mno-interlink-mips16'
13094     Require (do not require) that non-MIPS16 code be link-compatible
13095     with MIPS16 code.
13096
13097     For example, non-MIPS16 code cannot jump directly to MIPS16 code;
13098     it must either use a call or an indirect jump.
13099     `-minterlink-mips16' therefore disables direct jumps unless GCC
13100     knows that the target of the jump is not MIPS16.
13101
13102`-mabi=32'
13103`-mabi=o64'
13104`-mabi=n32'
13105`-mabi=64'
13106`-mabi=eabi'
13107     Generate code for the given ABI.
13108
13109     Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
13110     generates 64-bit code when you select a 64-bit architecture, but
13111     you can use `-mgp32' to get 32-bit code instead.
13112
13113     For information about the O64 ABI, see
13114     `http://gcc.gnu.org/projects/mipso64-abi.html'.
13115
13116     GCC supports a variant of the o32 ABI in which floating-point
13117     registers are 64 rather than 32 bits wide.  You can select this
13118     combination with `-mabi=32' `-mfp64'.  This ABI relies on the
13119     `mthc1' and `mfhc1' instructions and is therefore only supported
13120     for MIPS32R2 processors.
13121
13122     The register assignments for arguments and return values remain the
13123     same, but each scalar value is passed in a single 64-bit register
13124     rather than a pair of 32-bit registers.  For example, scalar
13125     floating-point values are returned in `$f0' only, not a
13126     `$f0'/`$f1' pair.  The set of call-saved registers also remains
13127     the same, but all 64 bits are saved.
13128
13129`-mabicalls'
13130`-mno-abicalls'
13131     Generate (do not generate) code that is suitable for SVR4-style
13132     dynamic objects.  `-mabicalls' is the default for SVR4-based
13133     systems.
13134
13135`-mshared'
13136`-mno-shared'
13137     Generate (do not generate) code that is fully position-independent,
13138     and that can therefore be linked into shared libraries.  This
13139     option only affects `-mabicalls'.
13140
13141     All `-mabicalls' code has traditionally been position-independent,
13142     regardless of options like `-fPIC' and `-fpic'.  However, as an
13143     extension, the GNU toolchain allows executables to use absolute
13144     accesses for locally-binding symbols.  It can also use shorter GP
13145     initialization sequences and generate direct calls to
13146     locally-defined functions.  This mode is selected by `-mno-shared'.
13147
13148     `-mno-shared' depends on binutils 2.16 or higher and generates
13149     objects that can only be linked by the GNU linker.  However, the
13150     option does not affect the ABI of the final executable; it only
13151     affects the ABI of relocatable objects.  Using `-mno-shared' will
13152     generally make executables both smaller and quicker.
13153
13154     `-mshared' is the default.
13155
13156`-mplt'
13157`-mno-plt'
13158     Assume (do not assume) that the static and dynamic linkers support
13159     PLTs and copy relocations.  This option only affects `-mno-shared
13160     -mabicalls'.  For the n64 ABI, this option has no effect without
13161     `-msym32'.
13162
13163     You can make `-mplt' the default by configuring GCC with
13164     `--with-mips-plt'.  The default is `-mno-plt' otherwise.
13165
13166`-mxgot'
13167`-mno-xgot'
13168     Lift (do not lift) the usual restrictions on the size of the global
13169     offset table.
13170
13171     GCC normally uses a single instruction to load values from the GOT.
13172     While this is relatively efficient, it will only work if the GOT
13173     is smaller than about 64k.  Anything larger will cause the linker
13174     to report an error such as:
13175
13176          relocation truncated to fit: R_MIPS_GOT16 foobar
13177
13178     If this happens, you should recompile your code with `-mxgot'.  It
13179     should then work with very large GOTs, although it will also be
13180     less efficient, since it will take three instructions to fetch the
13181     value of a global symbol.
13182
13183     Note that some linkers can create multiple GOTs.  If you have such
13184     a linker, you should only need to use `-mxgot' when a single object
13185     file accesses more than 64k's worth of GOT entries.  Very few do.
13186
13187     These options have no effect unless GCC is generating position
13188     independent code.
13189
13190`-mgp32'
13191     Assume that general-purpose registers are 32 bits wide.
13192
13193`-mgp64'
13194     Assume that general-purpose registers are 64 bits wide.
13195
13196`-mfp32'
13197     Assume that floating-point registers are 32 bits wide.
13198
13199`-mfp64'
13200     Assume that floating-point registers are 64 bits wide.
13201
13202`-mhard-float'
13203     Use floating-point coprocessor instructions.
13204
13205`-msoft-float'
13206     Do not use floating-point coprocessor instructions.  Implement
13207     floating-point calculations using library calls instead.
13208
13209`-msingle-float'
13210     Assume that the floating-point coprocessor only supports
13211     single-precision operations.
13212
13213`-mdouble-float'
13214     Assume that the floating-point coprocessor supports
13215     double-precision operations.  This is the default.
13216
13217`-mllsc'
13218`-mno-llsc'
13219     Use (do not use) `ll', `sc', and `sync' instructions to implement
13220     atomic memory built-in functions.  When neither option is
13221     specified, GCC will use the instructions if the target architecture
13222     supports them.
13223
13224     `-mllsc' is useful if the runtime environment can emulate the
13225     instructions and `-mno-llsc' can be useful when compiling for
13226     nonstandard ISAs.  You can make either option the default by
13227     configuring GCC with `--with-llsc' and `--without-llsc'
13228     respectively.  `--with-llsc' is the default for some
13229     configurations; see the installation documentation for details.
13230
13231`-mdsp'
13232`-mno-dsp'
13233     Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
13234     Built-in Functions::.  This option defines the preprocessor macro
13235     `__mips_dsp'.  It also defines `__mips_dsp_rev' to 1.
13236
13237`-mdspr2'
13238`-mno-dspr2'
13239     Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
13240     Built-in Functions::.  This option defines the preprocessor macros
13241     `__mips_dsp' and `__mips_dspr2'.  It also defines `__mips_dsp_rev'
13242     to 2.
13243
13244`-msmartmips'
13245`-mno-smartmips'
13246     Use (do not use) the MIPS SmartMIPS ASE.
13247
13248`-mpaired-single'
13249`-mno-paired-single'
13250     Use (do not use) paired-single floating-point instructions.  *Note
13251     MIPS Paired-Single Support::.  This option requires hardware
13252     floating-point support to be enabled.
13253
13254`-mdmx'
13255`-mno-mdmx'
13256     Use (do not use) MIPS Digital Media Extension instructions.  This
13257     option can only be used when generating 64-bit code and requires
13258     hardware floating-point support to be enabled.
13259
13260`-mips3d'
13261`-mno-mips3d'
13262     Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
13263     Functions::.  The option `-mips3d' implies `-mpaired-single'.
13264
13265`-mmt'
13266`-mno-mt'
13267     Use (do not use) MT Multithreading instructions.
13268
13269`-mlong64'
13270     Force `long' types to be 64 bits wide.  See `-mlong32' for an
13271     explanation of the default and the way that the pointer size is
13272     determined.
13273
13274`-mlong32'
13275     Force `long', `int', and pointer types to be 32 bits wide.
13276
13277     The default size of `int's, `long's and pointers depends on the
13278     ABI.  All the supported ABIs use 32-bit `int's.  The n64 ABI uses
13279     64-bit `long's, as does the 64-bit EABI; the others use 32-bit
13280     `long's.  Pointers are the same size as `long's, or the same size
13281     as integer registers, whichever is smaller.
13282
13283`-msym32'
13284`-mno-sym32'
13285     Assume (do not assume) that all symbols have 32-bit values,
13286     regardless of the selected ABI.  This option is useful in
13287     combination with `-mabi=64' and `-mno-abicalls' because it allows
13288     GCC to generate shorter and faster references to symbolic
13289     addresses.
13290
13291`-G NUM'
13292     Put definitions of externally-visible data in a small data section
13293     if that data is no bigger than NUM bytes.  GCC can then access the
13294     data more efficiently; see `-mgpopt' for details.
13295
13296     The default `-G' option depends on the configuration.
13297
13298`-mlocal-sdata'
13299`-mno-local-sdata'
13300     Extend (do not extend) the `-G' behavior to local data too, such
13301     as to static variables in C.  `-mlocal-sdata' is the default for
13302     all configurations.
13303
13304     If the linker complains that an application is using too much
13305     small data, you might want to try rebuilding the less
13306     performance-critical parts with `-mno-local-sdata'.  You might
13307     also want to build large libraries with `-mno-local-sdata', so
13308     that the libraries leave more room for the main program.
13309
13310`-mextern-sdata'
13311`-mno-extern-sdata'
13312     Assume (do not assume) that externally-defined data will be in a
13313     small data section if that data is within the `-G' limit.
13314     `-mextern-sdata' is the default for all configurations.
13315
13316     If you compile a module MOD with `-mextern-sdata' `-G NUM'
13317     `-mgpopt', and MOD references a variable VAR that is no bigger
13318     than NUM bytes, you must make sure that VAR is placed in a small
13319     data section.  If VAR is defined by another module, you must
13320     either compile that module with a high-enough `-G' setting or
13321     attach a `section' attribute to VAR's definition.  If VAR is
13322     common, you must link the application with a high-enough `-G'
13323     setting.
13324
13325     The easiest way of satisfying these restrictions is to compile and
13326     link every module with the same `-G' option.  However, you may
13327     wish to build a library that supports several different small data
13328     limits.  You can do this by compiling the library with the highest
13329     supported `-G' setting and additionally using `-mno-extern-sdata'
13330     to stop the library from making assumptions about
13331     externally-defined data.
13332
13333`-mgpopt'
13334`-mno-gpopt'
13335     Use (do not use) GP-relative accesses for symbols that are known
13336     to be in a small data section; see `-G', `-mlocal-sdata' and
13337     `-mextern-sdata'.  `-mgpopt' is the default for all configurations.
13338
13339     `-mno-gpopt' is useful for cases where the `$gp' register might
13340     not hold the value of `_gp'.  For example, if the code is part of
13341     a library that might be used in a boot monitor, programs that call
13342     boot monitor routines will pass an unknown value in `$gp'.  (In
13343     such situations, the boot monitor itself would usually be compiled
13344     with `-G0'.)
13345
13346     `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'.
13347
13348`-membedded-data'
13349`-mno-embedded-data'
13350     Allocate variables to the read-only data section first if
13351     possible, then next in the small data section if possible,
13352     otherwise in data.  This gives slightly slower code than the
13353     default, but reduces the amount of RAM required when executing,
13354     and thus may be preferred for some embedded systems.
13355
13356`-muninit-const-in-rodata'
13357`-mno-uninit-const-in-rodata'
13358     Put uninitialized `const' variables in the read-only data section.
13359     This option is only meaningful in conjunction with
13360     `-membedded-data'.
13361
13362`-mcode-readable=SETTING'
13363     Specify whether GCC may generate code that reads from executable
13364     sections.  There are three possible settings:
13365
13366    `-mcode-readable=yes'
13367          Instructions may freely access executable sections.  This is
13368          the default setting.
13369
13370    `-mcode-readable=pcrel'
13371          MIPS16 PC-relative load instructions can access executable
13372          sections, but other instructions must not do so.  This option
13373          is useful on 4KSc and 4KSd processors when the code TLBs have
13374          the Read Inhibit bit set.  It is also useful on processors
13375          that can be configured to have a dual instruction/data SRAM
13376          interface and that, like the M4K, automatically redirect
13377          PC-relative loads to the instruction RAM.
13378
13379    `-mcode-readable=no'
13380          Instructions must not access executable sections.  This
13381          option can be useful on targets that are configured to have a
13382          dual instruction/data SRAM interface but that (unlike the
13383          M4K) do not automatically redirect PC-relative loads to the
13384          instruction RAM.
13385
13386`-msplit-addresses'
13387`-mno-split-addresses'
13388     Enable (disable) use of the `%hi()' and `%lo()' assembler
13389     relocation operators.  This option has been superseded by
13390     `-mexplicit-relocs' but is retained for backwards compatibility.
13391
13392`-mexplicit-relocs'
13393`-mno-explicit-relocs'
13394     Use (do not use) assembler relocation operators when dealing with
13395     symbolic addresses.  The alternative, selected by
13396     `-mno-explicit-relocs', is to use assembler macros instead.
13397
13398     `-mexplicit-relocs' is the default if GCC was configured to use an
13399     assembler that supports relocation operators.
13400
13401`-mcheck-zero-division'
13402`-mno-check-zero-division'
13403     Trap (do not trap) on integer division by zero.
13404
13405     The default is `-mcheck-zero-division'.
13406
13407`-mdivide-traps'
13408`-mdivide-breaks'
13409     MIPS systems check for division by zero by generating either a
13410     conditional trap or a break instruction.  Using traps results in
13411     smaller code, but is only supported on MIPS II and later.  Also,
13412     some versions of the Linux kernel have a bug that prevents trap
13413     from generating the proper signal (`SIGFPE').  Use
13414     `-mdivide-traps' to allow conditional traps on architectures that
13415     support them and `-mdivide-breaks' to force the use of breaks.
13416
13417     The default is usually `-mdivide-traps', but this can be
13418     overridden at configure time using `--with-divide=breaks'.
13419     Divide-by-zero checks can be completely disabled using
13420     `-mno-check-zero-division'.
13421
13422`-mmemcpy'
13423`-mno-memcpy'
13424     Force (do not force) the use of `memcpy()' for non-trivial block
13425     moves.  The default is `-mno-memcpy', which allows GCC to inline
13426     most constant-sized copies.
13427
13428`-mlong-calls'
13429`-mno-long-calls'
13430     Disable (do not disable) use of the `jal' instruction.  Calling
13431     functions using `jal' is more efficient but requires the caller
13432     and callee to be in the same 256 megabyte segment.
13433
13434     This option has no effect on abicalls code.  The default is
13435     `-mno-long-calls'.
13436
13437`-mmad'
13438`-mno-mad'
13439     Enable (disable) use of the `mad', `madu' and `mul' instructions,
13440     as provided by the R4650 ISA.
13441
13442`-mfused-madd'
13443`-mno-fused-madd'
13444     Enable (disable) use of the floating point multiply-accumulate
13445     instructions, when they are available.  The default is
13446     `-mfused-madd'.
13447
13448     When multiply-accumulate instructions are used, the intermediate
13449     product is calculated to infinite precision and is not subject to
13450     the FCSR Flush to Zero bit.  This may be undesirable in some
13451     circumstances.
13452
13453`-nocpp'
13454     Tell the MIPS assembler to not run its preprocessor over user
13455     assembler files (with a `.s' suffix) when assembling them.
13456
13457`-mfix-r4000'
13458`-mno-fix-r4000'
13459     Work around certain R4000 CPU errata:
13460        - A double-word or a variable shift may give an incorrect
13461          result if executed immediately after starting an integer
13462          division.
13463
13464        - A double-word or a variable shift may give an incorrect
13465          result if executed while an integer multiplication is in
13466          progress.
13467
13468        - An integer division may give an incorrect result if started
13469          in a delay slot of a taken branch or a jump.
13470
13471`-mfix-r4400'
13472`-mno-fix-r4400'
13473     Work around certain R4400 CPU errata:
13474        - A double-word or a variable shift may give an incorrect
13475          result if executed immediately after starting an integer
13476          division.
13477
13478`-mfix-r10000'
13479`-mno-fix-r10000'
13480     Work around certain R10000 errata:
13481        - `ll'/`sc' sequences may not behave atomically on revisions
13482          prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
13483
13484     This option can only be used if the target architecture supports
13485     branch-likely instructions.  `-mfix-r10000' is the default when
13486     `-march=r10000' is used; `-mno-fix-r10000' is the default
13487     otherwise.
13488
13489`-mfix-vr4120'
13490`-mno-fix-vr4120'
13491     Work around certain VR4120 errata:
13492        - `dmultu' does not always produce the correct result.
13493
13494        - `div' and `ddiv' do not always produce the correct result if
13495          one of the operands is negative.
13496     The workarounds for the division errata rely on special functions
13497     in `libgcc.a'.  At present, these functions are only provided by
13498     the `mips64vr*-elf' configurations.
13499
13500     Other VR4120 errata require a nop to be inserted between certain
13501     pairs of instructions.  These errata are handled by the assembler,
13502     not by GCC itself.
13503
13504`-mfix-vr4130'
13505     Work around the VR4130 `mflo'/`mfhi' errata.  The workarounds are
13506     implemented by the assembler rather than by GCC, although GCC will
13507     avoid using `mflo' and `mfhi' if the VR4130 `macc', `macchi',
13508     `dmacc' and `dmacchi' instructions are available instead.
13509
13510`-mfix-sb1'
13511`-mno-fix-sb1'
13512     Work around certain SB-1 CPU core errata.  (This flag currently
13513     works around the SB-1 revision 2 "F1" and "F2" floating point
13514     errata.)
13515
13516`-mr10k-cache-barrier=SETTING'
13517     Specify whether GCC should insert cache barriers to avoid the
13518     side-effects of speculation on R10K processors.
13519
13520     In common with many processors, the R10K tries to predict the
13521     outcome of a conditional branch and speculatively executes
13522     instructions from the "taken" branch.  It later aborts these
13523     instructions if the predicted outcome was wrong.  However, on the
13524     R10K, even aborted instructions can have side effects.
13525
13526     This problem only affects kernel stores and, depending on the
13527     system, kernel loads.  As an example, a speculatively-executed
13528     store may load the target memory into cache and mark the cache
13529     line as dirty, even if the store itself is later aborted.  If a
13530     DMA operation writes to the same area of memory before the "dirty"
13531     line is flushed, the cached data will overwrite the DMA-ed data.
13532     See the R10K processor manual for a full description, including
13533     other potential problems.
13534
13535     One workaround is to insert cache barrier instructions before
13536     every memory access that might be speculatively executed and that
13537     might have side effects even if aborted.
13538     `-mr10k-cache-barrier=SETTING' controls GCC's implementation of
13539     this workaround.  It assumes that aborted accesses to any byte in
13540     the following regions will not have side effects:
13541
13542       1. the memory occupied by the current function's stack frame;
13543
13544       2. the memory occupied by an incoming stack argument;
13545
13546       3. the memory occupied by an object with a link-time-constant
13547          address.
13548
13549     It is the kernel's responsibility to ensure that speculative
13550     accesses to these regions are indeed safe.
13551
13552     If the input program contains a function declaration such as:
13553
13554          void foo (void);
13555
13556     then the implementation of `foo' must allow `j foo' and `jal foo'
13557     to be executed speculatively.  GCC honors this restriction for
13558     functions it compiles itself.  It expects non-GCC functions (such
13559     as hand-written assembly code) to do the same.
13560
13561     The option has three forms:
13562
13563    `-mr10k-cache-barrier=load-store'
13564          Insert a cache barrier before a load or store that might be
13565          speculatively executed and that might have side effects even
13566          if aborted.
13567
13568    `-mr10k-cache-barrier=store'
13569          Insert a cache barrier before a store that might be
13570          speculatively executed and that might have side effects even
13571          if aborted.
13572
13573    `-mr10k-cache-barrier=none'
13574          Disable the insertion of cache barriers.  This is the default
13575          setting.
13576
13577`-mflush-func=FUNC'
13578`-mno-flush-func'
13579     Specifies the function to call to flush the I and D caches, or to
13580     not call any such function.  If called, the function must take the
13581     same arguments as the common `_flush_func()', that is, the address
13582     of the memory range for which the cache is being flushed, the size
13583     of the memory range, and the number 3 (to flush both caches).  The
13584     default depends on the target GCC was configured for, but commonly
13585     is either `_flush_func' or `__cpu_flush'.
13586
13587`mbranch-cost=NUM'
13588     Set the cost of branches to roughly NUM "simple" instructions.
13589     This cost is only a heuristic and is not guaranteed to produce
13590     consistent results across releases.  A zero cost redundantly
13591     selects the default, which is based on the `-mtune' setting.
13592
13593`-mbranch-likely'
13594`-mno-branch-likely'
13595     Enable or disable use of Branch Likely instructions, regardless of
13596     the default for the selected architecture.  By default, Branch
13597     Likely instructions may be generated if they are supported by the
13598     selected architecture.  An exception is for the MIPS32 and MIPS64
13599     architectures and processors which implement those architectures;
13600     for those, Branch Likely instructions will not be generated by
13601     default because the MIPS32 and MIPS64 architectures specifically
13602     deprecate their use.
13603
13604`-mfp-exceptions'
13605`-mno-fp-exceptions'
13606     Specifies whether FP exceptions are enabled.  This affects how we
13607     schedule FP instructions for some processors.  The default is that
13608     FP exceptions are enabled.
13609
13610     For instance, on the SB-1, if FP exceptions are disabled, and we
13611     are emitting 64-bit code, then we can use both FP pipes.
13612     Otherwise, we can only use one FP pipe.
13613
13614`-mvr4130-align'
13615`-mno-vr4130-align'
13616     The VR4130 pipeline is two-way superscalar, but can only issue two
13617     instructions together if the first one is 8-byte aligned.  When
13618     this option is enabled, GCC will align pairs of instructions that
13619     it thinks should execute in parallel.
13620
13621     This option only has an effect when optimizing for the VR4130.  It
13622     normally makes code faster, but at the expense of making it bigger.
13623     It is enabled by default at optimization level `-O3'.
13624
13625`-msynci'
13626`-mno-synci'
13627     Enable (disable) generation of `synci' instructions on
13628     architectures that support it.  The `synci' instructions (if
13629     enabled) will be generated when `__builtin___clear_cache()' is
13630     compiled.
13631
13632     This option defaults to `-mno-synci', but the default can be
13633     overridden by configuring with `--with-synci'.
13634
13635     When compiling code for single processor systems, it is generally
13636     safe to use `synci'.  However, on many multi-core (SMP) systems, it
13637     will not invalidate the instruction caches on all cores and may
13638     lead to undefined behavior.
13639
13640`-mrelax-pic-calls'
13641`-mno-relax-pic-calls'
13642     Try to turn PIC calls that are normally dispatched via register
13643     `$25' into direct calls.  This is only possible if the linker can
13644     resolve the destination at link-time and if the destination is
13645     within range for a direct call.
13646
13647     `-mrelax-pic-calls' is the default if GCC was configured to use an
13648     assembler and a linker that supports the `.reloc' assembly
13649     directive and `-mexplicit-relocs' is in effect.  With
13650     `-mno-explicit-relocs', this optimization can be performed by the
13651     assembler and the linker alone without help from the compiler.
13652
13653`-mmcount-ra-address'
13654`-mno-mcount-ra-address'
13655     Emit (do not emit) code that allows `_mcount' to modify the
13656     calling function's return address.  When enabled, this option
13657     extends the usual `_mcount' interface with a new RA-ADDRESS
13658     parameter, which has type `intptr_t *' and is passed in register
13659     `$12'.  `_mcount' can then modify the return address by doing both
13660     of the following:
13661        * Returning the new address in register `$31'.
13662
13663        * Storing the new address in `*RA-ADDRESS', if RA-ADDRESS is
13664          nonnull.
13665
13666     The default is `-mno-mcount-ra-address'.
13667
13668
13669
13670File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
13671
136723.17.27 MMIX Options
13673--------------------
13674
13675These options are defined for the MMIX:
13676
13677`-mlibfuncs'
13678`-mno-libfuncs'
13679     Specify that intrinsic library functions are being compiled,
13680     passing all values in registers, no matter the size.
13681
13682`-mepsilon'
13683`-mno-epsilon'
13684     Generate floating-point comparison instructions that compare with
13685     respect to the `rE' epsilon register.
13686
13687`-mabi=mmixware'
13688`-mabi=gnu'
13689     Generate code that passes function parameters and return values
13690     that (in the called function) are seen as registers `$0' and up,
13691     as opposed to the GNU ABI which uses global registers `$231' and
13692     up.
13693
13694`-mzero-extend'
13695`-mno-zero-extend'
13696     When reading data from memory in sizes shorter than 64 bits, use
13697     (do not use) zero-extending load instructions by default, rather
13698     than sign-extending ones.
13699
13700`-mknuthdiv'
13701`-mno-knuthdiv'
13702     Make the result of a division yielding a remainder have the same
13703     sign as the divisor.  With the default, `-mno-knuthdiv', the sign
13704     of the remainder follows the sign of the dividend.  Both methods
13705     are arithmetically valid, the latter being almost exclusively used.
13706
13707`-mtoplevel-symbols'
13708`-mno-toplevel-symbols'
13709     Prepend (do not prepend) a `:' to all global symbols, so the
13710     assembly code can be used with the `PREFIX' assembly directive.
13711
13712`-melf'
13713     Generate an executable in the ELF format, rather than the default
13714     `mmo' format used by the `mmix' simulator.
13715
13716`-mbranch-predict'
13717`-mno-branch-predict'
13718     Use (do not use) the probable-branch instructions, when static
13719     branch prediction indicates a probable branch.
13720
13721`-mbase-addresses'
13722`-mno-base-addresses'
13723     Generate (do not generate) code that uses _base addresses_.  Using
13724     a base address automatically generates a request (handled by the
13725     assembler and the linker) for a constant to be set up in a global
13726     register.  The register is used for one or more base address
13727     requests within the range 0 to 255 from the value held in the
13728     register.  The generally leads to short and fast code, but the
13729     number of different data items that can be addressed is limited.
13730     This means that a program that uses lots of static data may
13731     require `-mno-base-addresses'.
13732
13733`-msingle-exit'
13734`-mno-single-exit'
13735     Force (do not force) generated code to have a single exit point in
13736     each function.
13737
13738
13739File: gcc.info,  Node: MN10300 Options,  Next: PDP-11 Options,  Prev: MMIX Options,  Up: Submodel Options
13740
137413.17.28 MN10300 Options
13742-----------------------
13743
13744These `-m' options are defined for Matsushita MN10300 architectures:
13745
13746`-mmult-bug'
13747     Generate code to avoid bugs in the multiply instructions for the
13748     MN10300 processors.  This is the default.
13749
13750`-mno-mult-bug'
13751     Do not generate code to avoid bugs in the multiply instructions
13752     for the MN10300 processors.
13753
13754`-mam33'
13755     Generate code which uses features specific to the AM33 processor.
13756
13757`-mno-am33'
13758     Do not generate code which uses features specific to the AM33
13759     processor.  This is the default.
13760
13761`-mreturn-pointer-on-d0'
13762     When generating a function which returns a pointer, return the
13763     pointer in both `a0' and `d0'.  Otherwise, the pointer is returned
13764     only in a0, and attempts to call such functions without a prototype
13765     would result in errors.  Note that this option is on by default;
13766     use `-mno-return-pointer-on-d0' to disable it.
13767
13768`-mno-crt0'
13769     Do not link in the C run-time initialization object file.
13770
13771`-mrelax'
13772     Indicate to the linker that it should perform a relaxation
13773     optimization pass to shorten branches, calls and absolute memory
13774     addresses.  This option only has an effect when used on the
13775     command line for the final link step.
13776
13777     This option makes symbolic debugging impossible.
13778
13779
13780File: gcc.info,  Node: PDP-11 Options,  Next: picoChip Options,  Prev: MN10300 Options,  Up: Submodel Options
13781
137823.17.29 PDP-11 Options
13783----------------------
13784
13785These options are defined for the PDP-11:
13786
13787`-mfpu'
13788     Use hardware FPP floating point.  This is the default.  (FIS
13789     floating point on the PDP-11/40 is not supported.)
13790
13791`-msoft-float'
13792     Do not use hardware floating point.
13793
13794`-mac0'
13795     Return floating-point results in ac0 (fr0 in Unix assembler
13796     syntax).
13797
13798`-mno-ac0'
13799     Return floating-point results in memory.  This is the default.
13800
13801`-m40'
13802     Generate code for a PDP-11/40.
13803
13804`-m45'
13805     Generate code for a PDP-11/45.  This is the default.
13806
13807`-m10'
13808     Generate code for a PDP-11/10.
13809
13810`-mbcopy-builtin'
13811     Use inline `movmemhi' patterns for copying memory.  This is the
13812     default.
13813
13814`-mbcopy'
13815     Do not use inline `movmemhi' patterns for copying memory.
13816
13817`-mint16'
13818`-mno-int32'
13819     Use 16-bit `int'.  This is the default.
13820
13821`-mint32'
13822`-mno-int16'
13823     Use 32-bit `int'.
13824
13825`-mfloat64'
13826`-mno-float32'
13827     Use 64-bit `float'.  This is the default.
13828
13829`-mfloat32'
13830`-mno-float64'
13831     Use 32-bit `float'.
13832
13833`-mabshi'
13834     Use `abshi2' pattern.  This is the default.
13835
13836`-mno-abshi'
13837     Do not use `abshi2' pattern.
13838
13839`-mbranch-expensive'
13840     Pretend that branches are expensive.  This is for experimenting
13841     with code generation only.
13842
13843`-mbranch-cheap'
13844     Do not pretend that branches are expensive.  This is the default.
13845
13846`-msplit'
13847     Generate code for a system with split I&D.
13848
13849`-mno-split'
13850     Generate code for a system without split I&D.  This is the default.
13851
13852`-munix-asm'
13853     Use Unix assembler syntax.  This is the default when configured for
13854     `pdp11-*-bsd'.
13855
13856`-mdec-asm'
13857     Use DEC assembler syntax.  This is the default when configured for
13858     any PDP-11 target other than `pdp11-*-bsd'.
13859
13860
13861File: gcc.info,  Node: picoChip Options,  Next: PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options
13862
138633.17.30 picoChip Options
13864------------------------
13865
13866These `-m' options are defined for picoChip implementations:
13867
13868`-mae=AE_TYPE'
13869     Set the instruction set, register set, and instruction scheduling
13870     parameters for array element type AE_TYPE.  Supported values for
13871     AE_TYPE are `ANY', `MUL', and `MAC'.
13872
13873     `-mae=ANY' selects a completely generic AE type.  Code generated
13874     with this option will run on any of the other AE types.  The code
13875     will not be as efficient as it would be if compiled for a specific
13876     AE type, and some types of operation (e.g., multiplication) will
13877     not work properly on all types of AE.
13878
13879     `-mae=MUL' selects a MUL AE type.  This is the most useful AE type
13880     for compiled code, and is the default.
13881
13882     `-mae=MAC' selects a DSP-style MAC AE.  Code compiled with this
13883     option may suffer from poor performance of byte (char)
13884     manipulation, since the DSP AE does not provide hardware support
13885     for byte load/stores.
13886
13887`-msymbol-as-address'
13888     Enable the compiler to directly use a symbol name as an address in
13889     a load/store instruction, without first loading it into a
13890     register.  Typically, the use of this option will generate larger
13891     programs, which run faster than when the option isn't used.
13892     However, the results vary from program to program, so it is left
13893     as a user option, rather than being permanently enabled.
13894
13895`-mno-inefficient-warnings'
13896     Disables warnings about the generation of inefficient code.  These
13897     warnings can be generated, for example, when compiling code which
13898     performs byte-level memory operations on the MAC AE type.  The MAC
13899     AE has no hardware support for byte-level memory operations, so
13900     all byte load/stores must be synthesized from word load/store
13901     operations.  This is inefficient and a warning will be generated
13902     indicating to the programmer that they should rewrite the code to
13903     avoid byte operations, or to target an AE type which has the
13904     necessary hardware support.  This option enables the warning to be
13905     turned off.
13906
13907
13908
13909File: gcc.info,  Node: PowerPC Options,  Next: RS/6000 and PowerPC Options,  Prev: picoChip Options,  Up: Submodel Options
13910
139113.17.31 PowerPC Options
13912-----------------------
13913
13914These are listed under *Note RS/6000 and PowerPC Options::.
13915
13916
13917File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: RX Options,  Prev: PowerPC Options,  Up: Submodel Options
13918
139193.17.32 IBM RS/6000 and PowerPC Options
13920---------------------------------------
13921
13922These `-m' options are defined for the IBM RS/6000 and PowerPC:
13923`-mpower'
13924`-mno-power'
13925`-mpower2'
13926`-mno-power2'
13927`-mpowerpc'
13928`-mno-powerpc'
13929`-mpowerpc-gpopt'
13930`-mno-powerpc-gpopt'
13931`-mpowerpc-gfxopt'
13932`-mno-powerpc-gfxopt'
13933`-mpowerpc64'
13934`-mno-powerpc64'
13935`-mmfcrf'
13936`-mno-mfcrf'
13937`-mpopcntb'
13938`-mno-popcntb'
13939`-mpopcntd'
13940`-mno-popcntd'
13941`-mfprnd'
13942`-mno-fprnd'
13943`-mcmpb'
13944`-mno-cmpb'
13945`-mmfpgpr'
13946`-mno-mfpgpr'
13947`-mhard-dfp'
13948`-mno-hard-dfp'
13949     GCC supports two related instruction set architectures for the
13950     RS/6000 and PowerPC.  The "POWER" instruction set are those
13951     instructions supported by the `rios' chip set used in the original
13952     RS/6000 systems and the "PowerPC" instruction set is the
13953     architecture of the Freescale MPC5xx, MPC6xx, MPC8xx
13954     microprocessors, and the IBM 4xx, 6xx, and follow-on
13955     microprocessors.
13956
13957     Neither architecture is a subset of the other.  However there is a
13958     large common subset of instructions supported by both.  An MQ
13959     register is included in processors supporting the POWER
13960     architecture.
13961
13962     You use these options to specify which instructions are available
13963     on the processor you are using.  The default value of these
13964     options is determined when configuring GCC.  Specifying the
13965     `-mcpu=CPU_TYPE' overrides the specification of these options.  We
13966     recommend you use the `-mcpu=CPU_TYPE' option rather than the
13967     options listed above.
13968
13969     The `-mpower' option allows GCC to generate instructions that are
13970     found only in the POWER architecture and to use the MQ register.
13971     Specifying `-mpower2' implies `-power' and also allows GCC to
13972     generate instructions that are present in the POWER2 architecture
13973     but not the original POWER architecture.
13974
13975     The `-mpowerpc' option allows GCC to generate instructions that
13976     are found only in the 32-bit subset of the PowerPC architecture.
13977     Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows
13978     GCC to use the optional PowerPC architecture instructions in the
13979     General Purpose group, including floating-point square root.
13980     Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows
13981     GCC to use the optional PowerPC architecture instructions in the
13982     Graphics group, including floating-point select.
13983
13984     The `-mmfcrf' option allows GCC to generate the move from
13985     condition register field instruction implemented on the POWER4
13986     processor and other processors that support the PowerPC V2.01
13987     architecture.  The `-mpopcntb' option allows GCC to generate the
13988     popcount and double precision FP reciprocal estimate instruction
13989     implemented on the POWER5 processor and other processors that
13990     support the PowerPC V2.02 architecture.  The `-mpopcntd' option
13991     allows GCC to generate the popcount instruction implemented on the
13992     POWER7 processor and other processors that support the PowerPC
13993     V2.06 architecture.  The `-mfprnd' option allows GCC to generate
13994     the FP round to integer instructions implemented on the POWER5+
13995     processor and other processors that support the PowerPC V2.03
13996     architecture.  The `-mcmpb' option allows GCC to generate the
13997     compare bytes instruction implemented on the POWER6 processor and
13998     other processors that support the PowerPC V2.05 architecture.  The
13999     `-mmfpgpr' option allows GCC to generate the FP move to/from
14000     general purpose register instructions implemented on the POWER6X
14001     processor and other processors that support the extended PowerPC
14002     V2.05 architecture.  The `-mhard-dfp' option allows GCC to
14003     generate the decimal floating point instructions implemented on
14004     some POWER processors.
14005
14006     The `-mpowerpc64' option allows GCC to generate the additional
14007     64-bit instructions that are found in the full PowerPC64
14008     architecture and to treat GPRs as 64-bit, doubleword quantities.
14009     GCC defaults to `-mno-powerpc64'.
14010
14011     If you specify both `-mno-power' and `-mno-powerpc', GCC will use
14012     only the instructions in the common subset of both architectures
14013     plus some special AIX common-mode calls, and will not use the MQ
14014     register.  Specifying both `-mpower' and `-mpowerpc' permits GCC
14015     to use any instruction from either architecture and to allow use
14016     of the MQ register; specify this for the Motorola MPC601.
14017
14018`-mnew-mnemonics'
14019`-mold-mnemonics'
14020     Select which mnemonics to use in the generated assembler code.
14021     With `-mnew-mnemonics', GCC uses the assembler mnemonics defined
14022     for the PowerPC architecture.  With `-mold-mnemonics' it uses the
14023     assembler mnemonics defined for the POWER architecture.
14024     Instructions defined in only one architecture have only one
14025     mnemonic; GCC uses that mnemonic irrespective of which of these
14026     options is specified.
14027
14028     GCC defaults to the mnemonics appropriate for the architecture in
14029     use.  Specifying `-mcpu=CPU_TYPE' sometimes overrides the value of
14030     these option.  Unless you are building a cross-compiler, you
14031     should normally not specify either `-mnew-mnemonics' or
14032     `-mold-mnemonics', but should instead accept the default.
14033
14034`-mcpu=CPU_TYPE'
14035     Set architecture type, register usage, choice of mnemonics, and
14036     instruction scheduling parameters for machine type CPU_TYPE.
14037     Supported values for CPU_TYPE are `401', `403', `405', `405fp',
14038     `440', `440fp', `464', `464fp', `476', `476fp', `505', `601',
14039     `602', `603', `603e', `604', `604e', `620', `630', `740', `7400',
14040     `7450', `750', `801', `821', `823', `860', `970', `8540', `a2',
14041     `e300c2', `e300c3', `e500mc', `e500mc64', `ec603e', `G3', `G4',
14042     `G5', `power', `power2', `power3', `power4', `power5', `power5+',
14043     `power6', `power6x', `power7', `common', `powerpc', `powerpc64',
14044     `rios', `rios1', `rios2', `rsc', and `rs64'.
14045
14046     `-mcpu=common' selects a completely generic processor.  Code
14047     generated under this option will run on any POWER or PowerPC
14048     processor.  GCC will use only the instructions in the common
14049     subset of both architectures, and will not use the MQ register.
14050     GCC assumes a generic processor model for scheduling purposes.
14051
14052     `-mcpu=power', `-mcpu=power2', `-mcpu=powerpc', and
14053     `-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit
14054     PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
14055     types, with an appropriate, generic processor model assumed for
14056     scheduling purposes.
14057
14058     The other options specify a specific processor.  Code generated
14059     under those options will run best on that processor, and may not
14060     run at all on others.
14061
14062     The `-mcpu' options automatically enable or disable the following
14063     options:
14064
14065          -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
14066          -mnew-mnemonics  -mpopcntb -mpopcntd  -mpower  -mpower2  -mpowerpc64
14067          -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float
14068          -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx
14069
14070     The particular options set for any particular CPU will vary between
14071     compiler versions, depending on what setting seems to produce
14072     optimal code for that CPU; it doesn't necessarily reflect the
14073     actual hardware's capabilities.  If you wish to set an individual
14074     option to a particular value, you may specify it after the `-mcpu'
14075     option, like `-mcpu=970 -mno-altivec'.
14076
14077     On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled
14078     or disabled by the `-mcpu' option at present because AIX does not
14079     have full support for these options.  You may still enable or
14080     disable them individually if you're sure it'll work in your
14081     environment.
14082
14083`-mtune=CPU_TYPE'
14084     Set the instruction scheduling parameters for machine type
14085     CPU_TYPE, but do not set the architecture type, register usage, or
14086     choice of mnemonics, as `-mcpu=CPU_TYPE' would.  The same values
14087     for CPU_TYPE are used for `-mtune' as for `-mcpu'.  If both are
14088     specified, the code generated will use the architecture,
14089     registers, and mnemonics set by `-mcpu', but the scheduling
14090     parameters set by `-mtune'.
14091
14092`-mswdiv'
14093`-mno-swdiv'
14094     Generate code to compute division as reciprocal estimate and
14095     iterative refinement, creating opportunities for increased
14096     throughput.  This feature requires: optional PowerPC Graphics
14097     instruction set for single precision and FRE instruction for
14098     double precision, assuming divides cannot generate user-visible
14099     traps, and the domain values not include Infinities, denormals or
14100     zero denominator.
14101
14102`-maltivec'
14103`-mno-altivec'
14104     Generate code that uses (does not use) AltiVec instructions, and
14105     also enable the use of built-in functions that allow more direct
14106     access to the AltiVec instruction set.  You may also need to set
14107     `-mabi=altivec' to adjust the current ABI with AltiVec ABI
14108     enhancements.
14109
14110`-mvrsave'
14111`-mno-vrsave'
14112     Generate VRSAVE instructions when generating AltiVec code.
14113
14114`-mgen-cell-microcode'
14115     Generate Cell microcode instructions
14116
14117`-mwarn-cell-microcode'
14118     Warning when a Cell microcode instruction is going to emitted.  An
14119     example of a Cell microcode instruction is a variable shift.
14120
14121`-msecure-plt'
14122     Generate code that allows ld and ld.so to build executables and
14123     shared libraries with non-exec .plt and .got sections.  This is a
14124     PowerPC 32-bit SYSV ABI option.
14125
14126`-mbss-plt'
14127     Generate code that uses a BSS .plt section that ld.so fills in, and
14128     requires .plt and .got sections that are both writable and
14129     executable.  This is a PowerPC 32-bit SYSV ABI option.
14130
14131`-misel'
14132`-mno-isel'
14133     This switch enables or disables the generation of ISEL
14134     instructions.
14135
14136`-misel=YES/NO'
14137     This switch has been deprecated.  Use `-misel' and `-mno-isel'
14138     instead.
14139
14140`-mspe'
14141`-mno-spe'
14142     This switch enables or disables the generation of SPE simd
14143     instructions.
14144
14145`-mpaired'
14146`-mno-paired'
14147     This switch enables or disables the generation of PAIRED simd
14148     instructions.
14149
14150`-mspe=YES/NO'
14151     This option has been deprecated.  Use `-mspe' and `-mno-spe'
14152     instead.
14153
14154`-mvsx'
14155`-mno-vsx'
14156     Generate code that uses (does not use) vector/scalar (VSX)
14157     instructions, and also enable the use of built-in functions that
14158     allow more direct access to the VSX instruction set.
14159
14160`-mfloat-gprs=YES/SINGLE/DOUBLE/NO'
14161`-mfloat-gprs'
14162     This switch enables or disables the generation of floating point
14163     operations on the general purpose registers for architectures that
14164     support it.
14165
14166     The argument YES or SINGLE enables the use of single-precision
14167     floating point operations.
14168
14169     The argument DOUBLE enables the use of single and double-precision
14170     floating point operations.
14171
14172     The argument NO disables floating point operations on the general
14173     purpose registers.
14174
14175     This option is currently only available on the MPC854x.
14176
14177`-m32'
14178`-m64'
14179     Generate code for 32-bit or 64-bit environments of Darwin and SVR4
14180     targets (including GNU/Linux).  The 32-bit environment sets int,
14181     long and pointer to 32 bits and generates code that runs on any
14182     PowerPC variant.  The 64-bit environment sets int to 32 bits and
14183     long and pointer to 64 bits, and generates code for PowerPC64, as
14184     for `-mpowerpc64'.
14185
14186`-mfull-toc'
14187`-mno-fp-in-toc'
14188`-mno-sum-in-toc'
14189`-mminimal-toc'
14190     Modify generation of the TOC (Table Of Contents), which is created
14191     for every executable file.  The `-mfull-toc' option is selected by
14192     default.  In that case, GCC will allocate at least one TOC entry
14193     for each unique non-automatic variable reference in your program.
14194     GCC will also place floating-point constants in the TOC.  However,
14195     only 16,384 entries are available in the TOC.
14196
14197     If you receive a linker error message that saying you have
14198     overflowed the available TOC space, you can reduce the amount of
14199     TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc'
14200     options.  `-mno-fp-in-toc' prevents GCC from putting floating-point
14201     constants in the TOC and `-mno-sum-in-toc' forces GCC to generate
14202     code to calculate the sum of an address and a constant at run-time
14203     instead of putting that sum into the TOC.  You may specify one or
14204     both of these options.  Each causes GCC to produce very slightly
14205     slower and larger code at the expense of conserving TOC space.
14206
14207     If you still run out of space in the TOC even when you specify
14208     both of these options, specify `-mminimal-toc' instead.  This
14209     option causes GCC to make only one TOC entry for every file.  When
14210     you specify this option, GCC will produce code that is slower and
14211     larger but which uses extremely little TOC space.  You may wish to
14212     use this option only on files that contain less frequently
14213     executed code.
14214
14215`-maix64'
14216`-maix32'
14217     Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
14218     64-bit `long' type, and the infrastructure needed to support them.
14219     Specifying `-maix64' implies `-mpowerpc64' and `-mpowerpc', while
14220     `-maix32' disables the 64-bit ABI and implies `-mno-powerpc64'.
14221     GCC defaults to `-maix32'.
14222
14223`-mxl-compat'
14224`-mno-xl-compat'
14225     Produce code that conforms more closely to IBM XL compiler
14226     semantics when using AIX-compatible ABI.  Pass floating-point
14227     arguments to prototyped functions beyond the register save area
14228     (RSA) on the stack in addition to argument FPRs.  Do not assume
14229     that most significant double in 128-bit long double value is
14230     properly rounded when comparing values and converting to double.
14231     Use XL symbol names for long double support routines.
14232
14233     The AIX calling convention was extended but not initially
14234     documented to handle an obscure K&R C case of calling a function
14235     that takes the address of its arguments with fewer arguments than
14236     declared.  IBM XL compilers access floating point arguments which
14237     do not fit in the RSA from the stack when a subroutine is compiled
14238     without optimization.  Because always storing floating-point
14239     arguments on the stack is inefficient and rarely needed, this
14240     option is not enabled by default and only is necessary when
14241     calling subroutines compiled by IBM XL compilers without
14242     optimization.
14243
14244`-mpe'
14245     Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
14246     application written to use message passing with special startup
14247     code to enable the application to run.  The system must have PE
14248     installed in the standard location (`/usr/lpp/ppe.poe/'), or the
14249     `specs' file must be overridden with the `-specs=' option to
14250     specify the appropriate directory location.  The Parallel
14251     Environment does not support threads, so the `-mpe' option and the
14252     `-pthread' option are incompatible.
14253
14254`-malign-natural'
14255`-malign-power'
14256     On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
14257     `-malign-natural' overrides the ABI-defined alignment of larger
14258     types, such as floating-point doubles, on their natural size-based
14259     boundary.  The option `-malign-power' instructs GCC to follow the
14260     ABI-specified alignment rules.  GCC defaults to the standard
14261     alignment defined in the ABI.
14262
14263     On 64-bit Darwin, natural alignment is the default, and
14264     `-malign-power' is not supported.
14265
14266`-msoft-float'
14267`-mhard-float'
14268     Generate code that does not use (uses) the floating-point register
14269     set.  Software floating point emulation is provided if you use the
14270     `-msoft-float' option, and pass the option to GCC when linking.
14271
14272`-msingle-float'
14273`-mdouble-float'
14274     Generate code for single or double-precision floating point
14275     operations.  `-mdouble-float' implies `-msingle-float'.
14276
14277`-msimple-fpu'
14278     Do not generate sqrt and div instructions for hardware floating
14279     point unit.
14280
14281`-mfpu'
14282     Specify type of floating point unit.  Valid values are SP_LITE
14283     (equivalent to -msingle-float -msimple-fpu), DP_LITE (equivalent
14284     to -mdouble-float -msimple-fpu), SP_FULL (equivalent to
14285     -msingle-float), and DP_FULL (equivalent to -mdouble-float).
14286
14287`-mxilinx-fpu'
14288     Perform optimizations for floating point unit on Xilinx PPC
14289     405/440.
14290
14291`-mmultiple'
14292`-mno-multiple'
14293     Generate code that uses (does not use) the load multiple word
14294     instructions and the store multiple word instructions.  These
14295     instructions are generated by default on POWER systems, and not
14296     generated on PowerPC systems.  Do not use `-mmultiple' on little
14297     endian PowerPC systems, since those instructions do not work when
14298     the processor is in little endian mode.  The exceptions are PPC740
14299     and PPC750 which permit the instructions usage in little endian
14300     mode.
14301
14302`-mstring'
14303`-mno-string'
14304     Generate code that uses (does not use) the load string instructions
14305     and the store string word instructions to save multiple registers
14306     and do small block moves.  These instructions are generated by
14307     default on POWER systems, and not generated on PowerPC systems.
14308     Do not use `-mstring' on little endian PowerPC systems, since those
14309     instructions do not work when the processor is in little endian
14310     mode.  The exceptions are PPC740 and PPC750 which permit the
14311     instructions usage in little endian mode.
14312
14313`-mupdate'
14314`-mno-update'
14315     Generate code that uses (does not use) the load or store
14316     instructions that update the base register to the address of the
14317     calculated memory location.  These instructions are generated by
14318     default.  If you use `-mno-update', there is a small window
14319     between the time that the stack pointer is updated and the address
14320     of the previous frame is stored, which means code that walks the
14321     stack frame across interrupts or signals may get corrupted data.
14322
14323`-mavoid-indexed-addresses'
14324`-mno-avoid-indexed-addresses'
14325     Generate code that tries to avoid (not avoid) the use of indexed
14326     load or store instructions. These instructions can incur a
14327     performance penalty on Power6 processors in certain situations,
14328     such as when stepping through large arrays that cross a 16M
14329     boundary.  This option is enabled by default when targetting
14330     Power6 and disabled otherwise.
14331
14332`-mfused-madd'
14333`-mno-fused-madd'
14334     Generate code that uses (does not use) the floating point multiply
14335     and accumulate instructions.  These instructions are generated by
14336     default if hardware floating is used.
14337
14338`-mmulhw'
14339`-mno-mulhw'
14340     Generate code that uses (does not use) the half-word multiply and
14341     multiply-accumulate instructions on the IBM 405, 440, 464 and 476
14342     processors.  These instructions are generated by default when
14343     targetting those processors.
14344
14345`-mdlmzb'
14346`-mno-dlmzb'
14347     Generate code that uses (does not use) the string-search `dlmzb'
14348     instruction on the IBM 405, 440, 464 and 476 processors.  This
14349     instruction is generated by default when targetting those
14350     processors.
14351
14352`-mno-bit-align'
14353`-mbit-align'
14354     On System V.4 and embedded PowerPC systems do not (do) force
14355     structures and unions that contain bit-fields to be aligned to the
14356     base type of the bit-field.
14357
14358     For example, by default a structure containing nothing but 8
14359     `unsigned' bit-fields of length 1 would be aligned to a 4 byte
14360     boundary and have a size of 4 bytes.  By using `-mno-bit-align',
14361     the structure would be aligned to a 1 byte boundary and be one
14362     byte in size.
14363
14364`-mno-strict-align'
14365`-mstrict-align'
14366     On System V.4 and embedded PowerPC systems do not (do) assume that
14367     unaligned memory references will be handled by the system.
14368
14369`-mrelocatable'
14370`-mno-relocatable'
14371     On embedded PowerPC systems generate code that allows (does not
14372     allow) the program to be relocated to a different address at
14373     runtime.  If you use `-mrelocatable' on any module, all objects
14374     linked together must be compiled with `-mrelocatable' or
14375     `-mrelocatable-lib'.
14376
14377`-mrelocatable-lib'
14378`-mno-relocatable-lib'
14379     On embedded PowerPC systems generate code that allows (does not
14380     allow) the program to be relocated to a different address at
14381     runtime.  Modules compiled with `-mrelocatable-lib' can be linked
14382     with either modules compiled without `-mrelocatable' and
14383     `-mrelocatable-lib' or with modules compiled with the
14384     `-mrelocatable' options.
14385
14386`-mno-toc'
14387`-mtoc'
14388     On System V.4 and embedded PowerPC systems do not (do) assume that
14389     register 2 contains a pointer to a global area pointing to the
14390     addresses used in the program.
14391
14392`-mlittle'
14393`-mlittle-endian'
14394     On System V.4 and embedded PowerPC systems compile code for the
14395     processor in little endian mode.  The `-mlittle-endian' option is
14396     the same as `-mlittle'.
14397
14398`-mbig'
14399`-mbig-endian'
14400     On System V.4 and embedded PowerPC systems compile code for the
14401     processor in big endian mode.  The `-mbig-endian' option is the
14402     same as `-mbig'.
14403
14404`-mdynamic-no-pic'
14405     On Darwin and Mac OS X systems, compile code so that it is not
14406     relocatable, but that its external references are relocatable.  The
14407     resulting code is suitable for applications, but not shared
14408     libraries.
14409
14410`-mprioritize-restricted-insns=PRIORITY'
14411     This option controls the priority that is assigned to
14412     dispatch-slot restricted instructions during the second scheduling
14413     pass.  The argument PRIORITY takes the value 0/1/2 to assign
14414     NO/HIGHEST/SECOND-HIGHEST priority to dispatch slot restricted
14415     instructions.
14416
14417`-msched-costly-dep=DEPENDENCE_TYPE'
14418     This option controls which dependences are considered costly by
14419     the target during instruction scheduling.  The argument
14420     DEPENDENCE_TYPE takes one of the following values: NO: no
14421     dependence is costly, ALL: all dependences are costly,
14422     TRUE_STORE_TO_LOAD: a true dependence from store to load is costly,
14423     STORE_TO_LOAD: any dependence from store to load is costly,
14424     NUMBER: any dependence which latency >= NUMBER is costly.
14425
14426`-minsert-sched-nops=SCHEME'
14427     This option controls which nop insertion scheme will be used during
14428     the second scheduling pass.  The argument SCHEME takes one of the
14429     following values: NO: Don't insert nops.  PAD: Pad with nops any
14430     dispatch group which has vacant issue slots, according to the
14431     scheduler's grouping.  REGROUP_EXACT: Insert nops to force costly
14432     dependent insns into separate groups.  Insert exactly as many nops
14433     as needed to force an insn to a new group, according to the
14434     estimated processor grouping.  NUMBER: Insert nops to force costly
14435     dependent insns into separate groups.  Insert NUMBER nops to force
14436     an insn to a new group.
14437
14438`-mcall-sysv'
14439     On System V.4 and embedded PowerPC systems compile code using
14440     calling conventions that adheres to the March 1995 draft of the
14441     System V Application Binary Interface, PowerPC processor
14442     supplement.  This is the default unless you configured GCC using
14443     `powerpc-*-eabiaix'.
14444
14445`-mcall-sysv-eabi'
14446`-mcall-eabi'
14447     Specify both `-mcall-sysv' and `-meabi' options.
14448
14449`-mcall-sysv-noeabi'
14450     Specify both `-mcall-sysv' and `-mno-eabi' options.
14451
14452`-mcall-aixdesc'
14453     On System V.4 and embedded PowerPC systems compile code for the AIX
14454     operating system.
14455
14456`-mcall-linux'
14457     On System V.4 and embedded PowerPC systems compile code for the
14458     Linux-based GNU system.
14459
14460`-mcall-gnu'
14461     On System V.4 and embedded PowerPC systems compile code for the
14462     Hurd-based GNU system.
14463
14464`-mcall-freebsd'
14465     On System V.4 and embedded PowerPC systems compile code for the
14466     FreeBSD operating system.
14467
14468`-mcall-netbsd'
14469     On System V.4 and embedded PowerPC systems compile code for the
14470     NetBSD operating system.
14471
14472`-mcall-openbsd'
14473     On System V.4 and embedded PowerPC systems compile code for the
14474     OpenBSD operating system.
14475
14476`-maix-struct-return'
14477     Return all structures in memory (as specified by the AIX ABI).
14478
14479`-msvr4-struct-return'
14480     Return structures smaller than 8 bytes in registers (as specified
14481     by the SVR4 ABI).
14482
14483`-mabi=ABI-TYPE'
14484     Extend the current ABI with a particular extension, or remove such
14485     extension.  Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE,
14486     IBMLONGDOUBLE, IEEELONGDOUBLE.
14487
14488`-mabi=spe'
14489     Extend the current ABI with SPE ABI extensions.  This does not
14490     change the default ABI, instead it adds the SPE ABI extensions to
14491     the current ABI.
14492
14493`-mabi=no-spe'
14494     Disable Booke SPE ABI extensions for the current ABI.
14495
14496`-mabi=ibmlongdouble'
14497     Change the current ABI to use IBM extended precision long double.
14498     This is a PowerPC 32-bit SYSV ABI option.
14499
14500`-mabi=ieeelongdouble'
14501     Change the current ABI to use IEEE extended precision long double.
14502     This is a PowerPC 32-bit Linux ABI option.
14503
14504`-mprototype'
14505`-mno-prototype'
14506     On System V.4 and embedded PowerPC systems assume that all calls to
14507     variable argument functions are properly prototyped.  Otherwise,
14508     the compiler must insert an instruction before every non
14509     prototyped call to set or clear bit 6 of the condition code
14510     register (CR) to indicate whether floating point values were
14511     passed in the floating point registers in case the function takes
14512     a variable arguments.  With `-mprototype', only calls to
14513     prototyped variable argument functions will set or clear the bit.
14514
14515`-msim'
14516     On embedded PowerPC systems, assume that the startup module is
14517     called `sim-crt0.o' and that the standard C libraries are
14518     `libsim.a' and `libc.a'.  This is the default for
14519     `powerpc-*-eabisim' configurations.
14520
14521`-mmvme'
14522     On embedded PowerPC systems, assume that the startup module is
14523     called `crt0.o' and the standard C libraries are `libmvme.a' and
14524     `libc.a'.
14525
14526`-mads'
14527     On embedded PowerPC systems, assume that the startup module is
14528     called `crt0.o' and the standard C libraries are `libads.a' and
14529     `libc.a'.
14530
14531`-myellowknife'
14532     On embedded PowerPC systems, assume that the startup module is
14533     called `crt0.o' and the standard C libraries are `libyk.a' and
14534     `libc.a'.
14535
14536`-mvxworks'
14537     On System V.4 and embedded PowerPC systems, specify that you are
14538     compiling for a VxWorks system.
14539
14540`-memb'
14541     On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
14542     header to indicate that `eabi' extended relocations are used.
14543
14544`-meabi'
14545`-mno-eabi'
14546     On System V.4 and embedded PowerPC systems do (do not) adhere to
14547     the Embedded Applications Binary Interface (eabi) which is a set of
14548     modifications to the System V.4 specifications.  Selecting `-meabi'
14549     means that the stack is aligned to an 8 byte boundary, a function
14550     `__eabi' is called to from `main' to set up the eabi environment,
14551     and the `-msdata' option can use both `r2' and `r13' to point to
14552     two separate small data areas.  Selecting `-mno-eabi' means that
14553     the stack is aligned to a 16 byte boundary, do not call an
14554     initialization function from `main', and the `-msdata' option will
14555     only use `r13' to point to a single small data area.  The `-meabi'
14556     option is on by default if you configured GCC using one of the
14557     `powerpc*-*-eabi*' options.
14558
14559`-msdata=eabi'
14560     On System V.4 and embedded PowerPC systems, put small initialized
14561     `const' global and static data in the `.sdata2' section, which is
14562     pointed to by register `r2'.  Put small initialized non-`const'
14563     global and static data in the `.sdata' section, which is pointed
14564     to by register `r13'.  Put small uninitialized global and static
14565     data in the `.sbss' section, which is adjacent to the `.sdata'
14566     section.  The `-msdata=eabi' option is incompatible with the
14567     `-mrelocatable' option.  The `-msdata=eabi' option also sets the
14568     `-memb' option.
14569
14570`-msdata=sysv'
14571     On System V.4 and embedded PowerPC systems, put small global and
14572     static data in the `.sdata' section, which is pointed to by
14573     register `r13'.  Put small uninitialized global and static data in
14574     the `.sbss' section, which is adjacent to the `.sdata' section.
14575     The `-msdata=sysv' option is incompatible with the `-mrelocatable'
14576     option.
14577
14578`-msdata=default'
14579`-msdata'
14580     On System V.4 and embedded PowerPC systems, if `-meabi' is used,
14581     compile code the same as `-msdata=eabi', otherwise compile code the
14582     same as `-msdata=sysv'.
14583
14584`-msdata=data'
14585     On System V.4 and embedded PowerPC systems, put small global data
14586     in the `.sdata' section.  Put small uninitialized global data in
14587     the `.sbss' section.  Do not use register `r13' to address small
14588     data however.  This is the default behavior unless other `-msdata'
14589     options are used.
14590
14591`-msdata=none'
14592`-mno-sdata'
14593     On embedded PowerPC systems, put all initialized global and static
14594     data in the `.data' section, and all uninitialized data in the
14595     `.bss' section.
14596
14597`-G NUM'
14598     On embedded PowerPC systems, put global and static items less than
14599     or equal to NUM bytes into the small data or bss sections instead
14600     of the normal data or bss section.  By default, NUM is 8.  The `-G
14601     NUM' switch is also passed to the linker.  All modules should be
14602     compiled with the same `-G NUM' value.
14603
14604`-mregnames'
14605`-mno-regnames'
14606     On System V.4 and embedded PowerPC systems do (do not) emit
14607     register names in the assembly language output using symbolic
14608     forms.
14609
14610`-mlongcall'
14611`-mno-longcall'
14612     By default assume that all calls are far away so that a longer more
14613     expensive calling sequence is required.  This is required for calls
14614     further than 32 megabytes (33,554,432 bytes) from the current
14615     location.  A short call will be generated if the compiler knows
14616     the call cannot be that far away.  This setting can be overridden
14617     by the `shortcall' function attribute, or by `#pragma longcall(0)'.
14618
14619     Some linkers are capable of detecting out-of-range calls and
14620     generating glue code on the fly.  On these systems, long calls are
14621     unnecessary and generate slower code.  As of this writing, the AIX
14622     linker can do this, as can the GNU linker for PowerPC/64.  It is
14623     planned to add this feature to the GNU linker for 32-bit PowerPC
14624     systems as well.
14625
14626     On Darwin/PPC systems, `#pragma longcall' will generate "jbsr
14627     callee, L42", plus a "branch island" (glue code).  The two target
14628     addresses represent the callee and the "branch island".  The
14629     Darwin/PPC linker will prefer the first address and generate a "bl
14630     callee" if the PPC "bl" instruction will reach the callee directly;
14631     otherwise, the linker will generate "bl L42" to call the "branch
14632     island".  The "branch island" is appended to the body of the
14633     calling function; it computes the full 32-bit address of the callee
14634     and jumps to it.
14635
14636     On Mach-O (Darwin) systems, this option directs the compiler emit
14637     to the glue for every direct call, and the Darwin linker decides
14638     whether to use or discard it.
14639
14640     In the future, we may cause GCC to ignore all longcall
14641     specifications when the linker is known to generate glue.
14642
14643`-mtls-markers'
14644`-mno-tls-markers'
14645     Mark (do not mark) calls to `__tls_get_addr' with a relocation
14646     specifying the function argument.  The relocation allows ld to
14647     reliably associate function call with argument setup instructions
14648     for TLS optimization, which in turn allows gcc to better schedule
14649     the sequence.
14650
14651`-pthread'
14652     Adds support for multithreading with the "pthreads" library.  This
14653     option sets flags for both the preprocessor and linker.
14654
14655
14656
14657File: gcc.info,  Node: RX Options,  Next: S/390 and zSeries Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
14658
146593.17.33 RX Options
14660------------------
14661
14662These command line options are defined for RX targets:
14663
14664`-m64bit-doubles'
14665`-m32bit-doubles'
14666     Make the `double' data type be 64-bits (`-m64bit-doubles') or
14667     32-bits (`-m32bit-doubles') in size.  The default is
14668     `-m32bit-doubles'.  _Note_ RX floating point hardware only works
14669     on 32-bit values, which is why the default is `-m32bit-doubles'.
14670
14671`-fpu'
14672`-nofpu'
14673     Enables (`-fpu') or disables (`-nofpu') the use of RX floating
14674     point hardware.  The default is enabled for the RX600 series and
14675     disabled for the RX200 series.
14676
14677     Floating point instructions will only be generated for 32-bit
14678     floating point values however, so if the `-m64bit-doubles' option
14679     is in use then the FPU hardware will not be used for doubles.
14680
14681     _Note_ If the `-fpu' option is enabled then
14682     `-funsafe-math-optimizations' is also enabled automatically.  This
14683     is because the RX FPU instructions are themselves unsafe.
14684
14685`-mcpu=NAME'
14686`-patch=NAME'
14687     Selects the type of RX CPU to be targeted.  Currently three types
14688     are supported, the generic RX600 and RX200 series hardware and the
14689     specific RX610 CPU.  The default is RX600.
14690
14691     The only difference between RX600 and RX610 is that the RX610 does
14692     not support the `MVTIPL' instruction.
14693
14694     The RX200 series does not have a hardware floating point unit and
14695     so `-nofpu' is enabled by default when this type is selected.
14696
14697`-mbig-endian-data'
14698`-mlittle-endian-data'
14699     Store data (but not code) in the big-endian format.  The default is
14700     `-mlittle-endian-data', ie to store data in the little endian
14701     format.
14702
14703`-msmall-data-limit=N'
14704     Specifies the maximum size in bytes of global and static variables
14705     which can be placed into the small data area.  Using the small data
14706     area can lead to smaller and faster code, but the size of area is
14707     limited and it is up to the programmer to ensure that the area does
14708     not overflow.  Also when the small data area is used one of the
14709     RX's registers (`r13') is reserved for use pointing to this area,
14710     so it is no longer available for use by the compiler.  This could
14711     result in slower and/or larger code if variables which once could
14712     have been held in `r13' are now pushed onto the stack.
14713
14714     Note, common variables (variables which have not been initialised)
14715     and constants are not placed into the small data area as they are
14716     assigned to other sections in the output executable.
14717
14718     The default value is zero, which disables this feature.  Note, this
14719     feature is not enabled by default with higher optimization levels
14720     (`-O2' etc) because of the potentially detrimental effects of
14721     reserving register `r13'.  It is up to the programmer to
14722     experiment and discover whether this feature is of benefit to their
14723     program.
14724
14725`-msim'
14726`-mno-sim'
14727     Use the simulator runtime.  The default is to use the libgloss
14728     board specific runtime.
14729
14730`-mas100-syntax'
14731`-mno-as100-syntax'
14732     When generating assembler output use a syntax that is compatible
14733     with Renesas's AS100 assembler.  This syntax can also be handled
14734     by the GAS assembler but it has some restrictions so generating it
14735     is not the default option.
14736
14737`-mmax-constant-size=N'
14738     Specifies the maximum size, in bytes, of a constant that can be
14739     used as an operand in a RX instruction.  Although the RX
14740     instruction set does allow constants of up to 4 bytes in length to
14741     be used in instructions, a longer value equates to a longer
14742     instruction.  Thus in some circumstances it can be beneficial to
14743     restrict the size of constants that are used in instructions.
14744     Constants that are too big are instead placed into a constant pool
14745     and referenced via register indirection.
14746
14747     The value N can be between 0 and 4.  A value of 0 (the default) or
14748     4 means that constants of any size are allowed.
14749
14750`-mrelax'
14751     Enable linker relaxation.  Linker relaxation is a process whereby
14752     the linker will attempt to reduce the size of a program by finding
14753     shorter versions of various instructions.  Disabled by default.
14754
14755`-mint-register=N'
14756     Specify the number of registers to reserve for fast interrupt
14757     handler functions.  The value N can be between 0 and 4.  A value
14758     of 1 means that register `r13' will be reserved for the exclusive
14759     use of fast interrupt handlers.  A value of 2 reserves `r13' and
14760     `r12'.  A value of 3 reserves `r13', `r12' and `r11', and a value
14761     of 4 reserves `r13' through `r10'.  A value of 0, the default,
14762     does not reserve any registers.
14763
14764`-msave-acc-in-interrupts'
14765     Specifies that interrupt handler functions should preserve the
14766     accumulator register.  This is only necessary if normal code might
14767     use the accumulator register, for example because it performs
14768     64-bit multiplications.  The default is to ignore the accumulator
14769     as this makes the interrupt handlers faster.
14770
14771
14772 _Note:_ The generic GCC command line `-ffixed-REG' has special
14773significance to the RX port when used with the `interrupt' function
14774attribute.  This attribute indicates a function intended to process
14775fast interrupts.  GCC will will ensure that it only uses the registers
14776`r10', `r11', `r12' and/or `r13' and only provided that the normal use
14777of the corresponding registers have been restricted via the
14778`-ffixed-REG' or `-mint-register' command line options.
14779
14780
14781File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RX Options,  Up: Submodel Options
14782
147833.17.34 S/390 and zSeries Options
14784---------------------------------
14785
14786These are the `-m' options defined for the S/390 and zSeries
14787architecture.
14788
14789`-mhard-float'
14790`-msoft-float'
14791     Use (do not use) the hardware floating-point instructions and
14792     registers for floating-point operations.  When `-msoft-float' is
14793     specified, functions in `libgcc.a' will be used to perform
14794     floating-point operations.  When `-mhard-float' is specified, the
14795     compiler generates IEEE floating-point instructions.  This is the
14796     default.
14797
14798`-mhard-dfp'
14799`-mno-hard-dfp'
14800     Use (do not use) the hardware decimal-floating-point instructions
14801     for decimal-floating-point operations.  When `-mno-hard-dfp' is
14802     specified, functions in `libgcc.a' will be used to perform
14803     decimal-floating-point operations.  When `-mhard-dfp' is
14804     specified, the compiler generates decimal-floating-point hardware
14805     instructions.  This is the default for `-march=z9-ec' or higher.
14806
14807`-mlong-double-64'
14808`-mlong-double-128'
14809     These switches control the size of `long double' type. A size of
14810     64bit makes the `long double' type equivalent to the `double'
14811     type. This is the default.
14812
14813`-mbackchain'
14814`-mno-backchain'
14815     Store (do not store) the address of the caller's frame as
14816     backchain pointer into the callee's stack frame.  A backchain may
14817     be needed to allow debugging using tools that do not understand
14818     DWARF-2 call frame information.  When `-mno-packed-stack' is in
14819     effect, the backchain pointer is stored at the bottom of the stack
14820     frame; when `-mpacked-stack' is in effect, the backchain is placed
14821     into the topmost word of the 96/160 byte register save area.
14822
14823     In general, code compiled with `-mbackchain' is call-compatible
14824     with code compiled with `-mmo-backchain'; however, use of the
14825     backchain for debugging purposes usually requires that the whole
14826     binary is built with `-mbackchain'.  Note that the combination of
14827     `-mbackchain', `-mpacked-stack' and `-mhard-float' is not
14828     supported.  In order to build a linux kernel use `-msoft-float'.
14829
14830     The default is to not maintain the backchain.
14831
14832`-mpacked-stack'
14833`-mno-packed-stack'
14834     Use (do not use) the packed stack layout.  When
14835     `-mno-packed-stack' is specified, the compiler uses the all fields
14836     of the 96/160 byte register save area only for their default
14837     purpose; unused fields still take up stack space.  When
14838     `-mpacked-stack' is specified, register save slots are densely
14839     packed at the top of the register save area; unused space is
14840     reused for other purposes, allowing for more efficient use of the
14841     available stack space.  However, when `-mbackchain' is also in
14842     effect, the topmost word of the save area is always used to store
14843     the backchain, and the return address register is always saved two
14844     words below the backchain.
14845
14846     As long as the stack frame backchain is not used, code generated
14847     with `-mpacked-stack' is call-compatible with code generated with
14848     `-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
14849     for S/390 or zSeries generated code that uses the stack frame
14850     backchain at run time, not just for debugging purposes.  Such code
14851     is not call-compatible with code compiled with `-mpacked-stack'.
14852     Also, note that the combination of `-mbackchain', `-mpacked-stack'
14853     and `-mhard-float' is not supported.  In order to build a linux
14854     kernel use `-msoft-float'.
14855
14856     The default is to not use the packed stack layout.
14857
14858`-msmall-exec'
14859`-mno-small-exec'
14860     Generate (or do not generate) code using the `bras' instruction to
14861     do subroutine calls.  This only works reliably if the total
14862     executable size does not exceed 64k.  The default is to use the
14863     `basr' instruction instead, which does not have this limitation.
14864
14865`-m64'
14866`-m31'
14867     When `-m31' is specified, generate code compliant to the GNU/Linux
14868     for S/390 ABI.  When `-m64' is specified, generate code compliant
14869     to the GNU/Linux for zSeries ABI.  This allows GCC in particular
14870     to generate 64-bit instructions.  For the `s390' targets, the
14871     default is `-m31', while the `s390x' targets default to `-m64'.
14872
14873`-mzarch'
14874`-mesa'
14875     When `-mzarch' is specified, generate code using the instructions
14876     available on z/Architecture.  When `-mesa' is specified, generate
14877     code using the instructions available on ESA/390.  Note that
14878     `-mesa' is not possible with `-m64'.  When generating code
14879     compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'.
14880     When generating code compliant to the GNU/Linux for zSeries ABI,
14881     the default is `-mzarch'.
14882
14883`-mmvcle'
14884`-mno-mvcle'
14885     Generate (or do not generate) code using the `mvcle' instruction
14886     to perform block moves.  When `-mno-mvcle' is specified, use a
14887     `mvc' loop instead.  This is the default unless optimizing for
14888     size.
14889
14890`-mdebug'
14891`-mno-debug'
14892     Print (or do not print) additional debug information when
14893     compiling.  The default is to not print debug information.
14894
14895`-march=CPU-TYPE'
14896     Generate code that will run on CPU-TYPE, which is the name of a
14897     system representing a certain processor type.  Possible values for
14898     CPU-TYPE are `g5', `g6', `z900', `z990', `z9-109', `z9-ec' and
14899     `z10'.  When generating code using the instructions available on
14900     z/Architecture, the default is `-march=z900'.  Otherwise, the
14901     default is `-march=g5'.
14902
14903`-mtune=CPU-TYPE'
14904     Tune to CPU-TYPE everything applicable about the generated code,
14905     except for the ABI and the set of available instructions.  The
14906     list of CPU-TYPE values is the same as for `-march'.  The default
14907     is the value used for `-march'.
14908
14909`-mtpf-trace'
14910`-mno-tpf-trace'
14911     Generate code that adds (does not add) in TPF OS specific branches
14912     to trace routines in the operating system.  This option is off by
14913     default, even when compiling for the TPF OS.
14914
14915`-mfused-madd'
14916`-mno-fused-madd'
14917     Generate code that uses (does not use) the floating point multiply
14918     and accumulate instructions.  These instructions are generated by
14919     default if hardware floating point is used.
14920
14921`-mwarn-framesize=FRAMESIZE'
14922     Emit a warning if the current function exceeds the given frame
14923     size.  Because this is a compile time check it doesn't need to be
14924     a real problem when the program runs.  It is intended to identify
14925     functions which most probably cause a stack overflow.  It is
14926     useful to be used in an environment with limited stack size e.g.
14927     the linux kernel.
14928
14929`-mwarn-dynamicstack'
14930     Emit a warning if the function calls alloca or uses dynamically
14931     sized arrays.  This is generally a bad idea with a limited stack
14932     size.
14933
14934`-mstack-guard=STACK-GUARD'
14935`-mstack-size=STACK-SIZE'
14936     If these options are provided the s390 back end emits additional
14937     instructions in the function prologue which trigger a trap if the
14938     stack size is STACK-GUARD bytes above the STACK-SIZE (remember
14939     that the stack on s390 grows downward).  If the STACK-GUARD option
14940     is omitted the smallest power of 2 larger than the frame size of
14941     the compiled function is chosen.  These options are intended to be
14942     used to help debugging stack overflow problems.  The additionally
14943     emitted code causes only little overhead and hence can also be
14944     used in production like systems without greater performance
14945     degradation.  The given values have to be exact powers of 2 and
14946     STACK-SIZE has to be greater than STACK-GUARD without exceeding
14947     64k.  In order to be efficient the extra code makes the assumption
14948     that the stack starts at an address aligned to the value given by
14949     STACK-SIZE.  The STACK-GUARD option can only be used in
14950     conjunction with STACK-SIZE.
14951
14952
14953File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
14954
149553.17.35 Score Options
14956---------------------
14957
14958These options are defined for Score implementations:
14959
14960`-meb'
14961     Compile code for big endian mode.  This is the default.
14962
14963`-mel'
14964     Compile code for little endian mode.
14965
14966`-mnhwloop'
14967     Disable generate bcnz instruction.
14968
14969`-muls'
14970     Enable generate unaligned load and store instruction.
14971
14972`-mmac'
14973     Enable the use of multiply-accumulate instructions. Disabled by
14974     default.
14975
14976`-mscore5'
14977     Specify the SCORE5 as the target architecture.
14978
14979`-mscore5u'
14980     Specify the SCORE5U of the target architecture.
14981
14982`-mscore7'
14983     Specify the SCORE7 as the target architecture. This is the default.
14984
14985`-mscore7d'
14986     Specify the SCORE7D as the target architecture.
14987
14988
14989File: gcc.info,  Node: SH Options,  Next: SPARC Options,  Prev: Score Options,  Up: Submodel Options
14990
149913.17.36 SH Options
14992------------------
14993
14994These `-m' options are defined for the SH implementations:
14995
14996`-m1'
14997     Generate code for the SH1.
14998
14999`-m2'
15000     Generate code for the SH2.
15001
15002`-m2e'
15003     Generate code for the SH2e.
15004
15005`-m2a-nofpu'
15006     Generate code for the SH2a without FPU, or for a SH2a-FPU in such
15007     a way that the floating-point unit is not used.
15008
15009`-m2a-single-only'
15010     Generate code for the SH2a-FPU, in such a way that no
15011     double-precision floating point operations are used.
15012
15013`-m2a-single'
15014     Generate code for the SH2a-FPU assuming the floating-point unit is
15015     in single-precision mode by default.
15016
15017`-m2a'
15018     Generate code for the SH2a-FPU assuming the floating-point unit is
15019     in double-precision mode by default.
15020
15021`-m3'
15022     Generate code for the SH3.
15023
15024`-m3e'
15025     Generate code for the SH3e.
15026
15027`-m4-nofpu'
15028     Generate code for the SH4 without a floating-point unit.
15029
15030`-m4-single-only'
15031     Generate code for the SH4 with a floating-point unit that only
15032     supports single-precision arithmetic.
15033
15034`-m4-single'
15035     Generate code for the SH4 assuming the floating-point unit is in
15036     single-precision mode by default.
15037
15038`-m4'
15039     Generate code for the SH4.
15040
15041`-m4a-nofpu'
15042     Generate code for the SH4al-dsp, or for a SH4a in such a way that
15043     the floating-point unit is not used.
15044
15045`-m4a-single-only'
15046     Generate code for the SH4a, in such a way that no double-precision
15047     floating point operations are used.
15048
15049`-m4a-single'
15050     Generate code for the SH4a assuming the floating-point unit is in
15051     single-precision mode by default.
15052
15053`-m4a'
15054     Generate code for the SH4a.
15055
15056`-m4al'
15057     Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to
15058     the assembler.  GCC doesn't generate any DSP instructions at the
15059     moment.
15060
15061`-mb'
15062     Compile code for the processor in big endian mode.
15063
15064`-ml'
15065     Compile code for the processor in little endian mode.
15066
15067`-mdalign'
15068     Align doubles at 64-bit boundaries.  Note that this changes the
15069     calling conventions, and thus some functions from the standard C
15070     library will not work unless you recompile it first with
15071     `-mdalign'.
15072
15073`-mrelax'
15074     Shorten some address references at link time, when possible; uses
15075     the linker option `-relax'.
15076
15077`-mbigtable'
15078     Use 32-bit offsets in `switch' tables.  The default is to use
15079     16-bit offsets.
15080
15081`-mbitops'
15082     Enable the use of bit manipulation instructions on SH2A.
15083
15084`-mfmovd'
15085     Enable the use of the instruction `fmovd'.  Check `-mdalign' for
15086     alignment constraints.
15087
15088`-mhitachi'
15089     Comply with the calling conventions defined by Renesas.
15090
15091`-mrenesas'
15092     Comply with the calling conventions defined by Renesas.
15093
15094`-mno-renesas'
15095     Comply with the calling conventions defined for GCC before the
15096     Renesas conventions were available.  This option is the default
15097     for all targets of the SH toolchain except for `sh-symbianelf'.
15098
15099`-mnomacsave'
15100     Mark the `MAC' register as call-clobbered, even if `-mhitachi' is
15101     given.
15102
15103`-mieee'
15104     Increase IEEE-compliance of floating-point code.  At the moment,
15105     this is equivalent to `-fno-finite-math-only'.  When generating 16
15106     bit SH opcodes, getting IEEE-conforming results for comparisons of
15107     NANs / infinities incurs extra overhead in every floating point
15108     comparison, therefore the default is set to `-ffinite-math-only'.
15109
15110`-minline-ic_invalidate'
15111     Inline code to invalidate instruction cache entries after setting
15112     up nested function trampolines.  This option has no effect if
15113     -musermode is in effect and the selected code generation option
15114     (e.g. -m4) does not allow the use of the icbi instruction.  If the
15115     selected code generation option does not allow the use of the icbi
15116     instruction, and -musermode is not in effect, the inlined code will
15117     manipulate the instruction cache address array directly with an
15118     associative write.  This not only requires privileged mode, but it
15119     will also fail if the cache line had been mapped via the TLB and
15120     has become unmapped.
15121
15122`-misize'
15123     Dump instruction size and location in the assembly code.
15124
15125`-mpadstruct'
15126     This option is deprecated.  It pads structures to multiple of 4
15127     bytes, which is incompatible with the SH ABI.
15128
15129`-mspace'
15130     Optimize for space instead of speed.  Implied by `-Os'.
15131
15132`-mprefergot'
15133     When generating position-independent code, emit function calls
15134     using the Global Offset Table instead of the Procedure Linkage
15135     Table.
15136
15137`-musermode'
15138     Don't generate privileged mode only code; implies
15139     -mno-inline-ic_invalidate if the inlined code would not work in
15140     user mode.  This is the default when the target is `sh-*-linux*'.
15141
15142`-multcost=NUMBER'
15143     Set the cost to assume for a multiply insn.
15144
15145`-mdiv=STRATEGY'
15146     Set the division strategy to use for SHmedia code.  STRATEGY must
15147     be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l,
15148     inv:call, inv:call2, inv:fp .  "fp" performs the operation in
15149     floating point.  This has a very high latency, but needs only a
15150     few instructions, so it might be a good choice if your code has
15151     enough easily exploitable ILP to allow the compiler to schedule
15152     the floating point instructions together with other instructions.
15153     Division by zero causes a floating point exception.  "inv" uses
15154     integer operations to calculate the inverse of the divisor, and
15155     then multiplies the dividend with the inverse.  This strategy
15156     allows cse and hoisting of the inverse calculation.  Division by
15157     zero calculates an unspecified result, but does not trap.
15158     "inv:minlat" is a variant of "inv" where if no cse / hoisting
15159     opportunities have been found, or if the entire operation has been
15160     hoisted to the same place, the last stages of the inverse
15161     calculation are intertwined with the final multiply to reduce the
15162     overall latency, at the expense of using a few more instructions,
15163     and thus offering fewer scheduling opportunities with other code.
15164     "call" calls a library function that usually implements the
15165     inv:minlat strategy.  This gives high code density for
15166     m5-*media-nofpu compilations.  "call2" uses a different entry
15167     point of the same library function, where it assumes that a
15168     pointer to a lookup table has already been set up, which exposes
15169     the pointer load to cse / code hoisting optimizations.
15170     "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm
15171     for initial code generation, but if the code stays unoptimized,
15172     revert to the "call", "call2", or "fp" strategies, respectively.
15173     Note that the potentially-trapping side effect of division by zero
15174     is carried by a separate instruction, so it is possible that all
15175     the integer instructions are hoisted out, but the marker for the
15176     side effect stays where it is.  A recombination to fp operations
15177     or a call is not possible in that case.  "inv20u" and "inv20l" are
15178     variants of the "inv:minlat" strategy.  In the case that the
15179     inverse calculation was nor separated from the multiply, they speed
15180     up division where the dividend fits into 20 bits (plus sign where
15181     applicable), by inserting a test to skip a number of operations in
15182     this case; this test slows down the case of larger dividends.
15183     inv20u assumes the case of a such a small dividend to be unlikely,
15184     and inv20l assumes it to be likely.
15185
15186`-mdivsi3_libfunc=NAME'
15187     Set the name of the library function used for 32 bit signed
15188     division to NAME.  This only affect the name used in the call and
15189     inv:call division strategies, and the compiler will still expect
15190     the same sets of input/output/clobbered registers as if this
15191     option was not present.
15192
15193`-mfixed-range=REGISTER-RANGE'
15194     Generate code treating the given register range as fixed registers.
15195     A fixed register is one that the register allocator can not use.
15196     This is useful when compiling kernel code.  A register range is
15197     specified as two registers separated by a dash.  Multiple register
15198     ranges can be specified separated by a comma.
15199
15200`-madjust-unroll'
15201     Throttle unrolling to avoid thrashing target registers.  This
15202     option only has an effect if the gcc code base supports the
15203     TARGET_ADJUST_UNROLL_MAX target hook.
15204
15205`-mindexed-addressing'
15206     Enable the use of the indexed addressing mode for
15207     SHmedia32/SHcompact.  This is only safe if the hardware and/or OS
15208     implement 32 bit wrap-around semantics for the indexed addressing
15209     mode.  The architecture allows the implementation of processors
15210     with 64 bit MMU, which the OS could use to get 32 bit addressing,
15211     but since no current hardware implementation supports this or any
15212     other way to make the indexed addressing mode safe to use in the
15213     32 bit ABI, the default is -mno-indexed-addressing.
15214
15215`-mgettrcost=NUMBER'
15216     Set the cost assumed for the gettr instruction to NUMBER.  The
15217     default is 2 if `-mpt-fixed' is in effect, 100 otherwise.
15218
15219`-mpt-fixed'
15220     Assume pt* instructions won't trap.  This will generally generate
15221     better scheduled code, but is unsafe on current hardware.  The
15222     current architecture definition says that ptabs and ptrel trap
15223     when the target anded with 3 is 3.  This has the unintentional
15224     effect of making it unsafe to schedule ptabs / ptrel before a
15225     branch, or hoist it out of a loop.  For example,
15226     __do_global_ctors, a part of libgcc that runs constructors at
15227     program startup, calls functions in a list which is delimited by
15228     -1.  With the -mpt-fixed option, the ptabs will be done before
15229     testing against -1.  That means that all the constructors will be
15230     run a bit quicker, but when the loop comes to the end of the list,
15231     the program crashes because ptabs loads -1 into a target register.
15232     Since this option is unsafe for any hardware implementing the
15233     current architecture specification, the default is -mno-pt-fixed.
15234     Unless the user specifies a specific cost with `-mgettrcost',
15235     -mno-pt-fixed also implies `-mgettrcost=100'; this deters register
15236     allocation using target registers for storing ordinary integers.
15237
15238`-minvalid-symbols'
15239     Assume symbols might be invalid.  Ordinary function symbols
15240     generated by the compiler will always be valid to load with
15241     movi/shori/ptabs or movi/shori/ptrel, but with assembler and/or
15242     linker tricks it is possible to generate symbols that will cause
15243     ptabs / ptrel to trap.  This option is only meaningful when
15244     `-mno-pt-fixed' is in effect.  It will then prevent
15245     cross-basic-block cse, hoisting and most scheduling of symbol
15246     loads.  The default is `-mno-invalid-symbols'.
15247
15248
15249File: gcc.info,  Node: SPARC Options,  Next: SPU Options,  Prev: SH Options,  Up: Submodel Options
15250
152513.17.37 SPARC Options
15252---------------------
15253
15254These `-m' options are supported on the SPARC:
15255
15256`-mno-app-regs'
15257`-mapp-regs'
15258     Specify `-mapp-regs' to generate output using the global registers
15259     2 through 4, which the SPARC SVR4 ABI reserves for applications.
15260     This is the default.
15261
15262     To be fully SVR4 ABI compliant at the cost of some performance
15263     loss, specify `-mno-app-regs'.  You should compile libraries and
15264     system software with this option.
15265
15266`-mfpu'
15267`-mhard-float'
15268     Generate output containing floating point instructions.  This is
15269     the default.
15270
15271`-mno-fpu'
15272`-msoft-float'
15273     Generate output containing library calls for floating point.
15274     *Warning:* the requisite libraries are not available for all SPARC
15275     targets.  Normally the facilities of the machine's usual C
15276     compiler are used, but this cannot be done directly in
15277     cross-compilation.  You must make your own arrangements to provide
15278     suitable library functions for cross-compilation.  The embedded
15279     targets `sparc-*-aout' and `sparclite-*-*' do provide software
15280     floating point support.
15281
15282     `-msoft-float' changes the calling convention in the output file;
15283     therefore, it is only useful if you compile _all_ of a program with
15284     this option.  In particular, you need to compile `libgcc.a', the
15285     library that comes with GCC, with `-msoft-float' in order for this
15286     to work.
15287
15288`-mhard-quad-float'
15289     Generate output containing quad-word (long double) floating point
15290     instructions.
15291
15292`-msoft-quad-float'
15293     Generate output containing library calls for quad-word (long
15294     double) floating point instructions.  The functions called are
15295     those specified in the SPARC ABI.  This is the default.
15296
15297     As of this writing, there are no SPARC implementations that have
15298     hardware support for the quad-word floating point instructions.
15299     They all invoke a trap handler for one of these instructions, and
15300     then the trap handler emulates the effect of the instruction.
15301     Because of the trap handler overhead, this is much slower than
15302     calling the ABI library routines.  Thus the `-msoft-quad-float'
15303     option is the default.
15304
15305`-mno-unaligned-doubles'
15306`-munaligned-doubles'
15307     Assume that doubles have 8 byte alignment.  This is the default.
15308
15309     With `-munaligned-doubles', GCC assumes that doubles have 8 byte
15310     alignment only if they are contained in another type, or if they
15311     have an absolute address.  Otherwise, it assumes they have 4 byte
15312     alignment.  Specifying this option avoids some rare compatibility
15313     problems with code generated by other compilers.  It is not the
15314     default because it results in a performance loss, especially for
15315     floating point code.
15316
15317`-mno-faster-structs'
15318`-mfaster-structs'
15319     With `-mfaster-structs', the compiler assumes that structures
15320     should have 8 byte alignment.  This enables the use of pairs of
15321     `ldd' and `std' instructions for copies in structure assignment,
15322     in place of twice as many `ld' and `st' pairs.  However, the use
15323     of this changed alignment directly violates the SPARC ABI.  Thus,
15324     it's intended only for use on targets where the developer
15325     acknowledges that their resulting code will not be directly in
15326     line with the rules of the ABI.
15327
15328`-mimpure-text'
15329     `-mimpure-text', used in addition to `-shared', tells the compiler
15330     to not pass `-z text' to the linker when linking a shared object.
15331     Using this option, you can link position-dependent code into a
15332     shared object.
15333
15334     `-mimpure-text' suppresses the "relocations remain against
15335     allocatable but non-writable sections" linker error message.
15336     However, the necessary relocations will trigger copy-on-write, and
15337     the shared object is not actually shared across processes.
15338     Instead of using `-mimpure-text', you should compile all source
15339     code with `-fpic' or `-fPIC'.
15340
15341     This option is only available on SunOS and Solaris.
15342
15343`-mcpu=CPU_TYPE'
15344     Set the instruction set, register set, and instruction scheduling
15345     parameters for machine type CPU_TYPE.  Supported values for
15346     CPU_TYPE are `v7', `cypress', `v8', `supersparc', `sparclite',
15347     `f930', `f934', `hypersparc', `sparclite86x', `sparclet',
15348     `tsc701', `v9', `ultrasparc', `ultrasparc3', `niagara' and
15349     `niagara2'.
15350
15351     Default instruction scheduling parameters are used for values that
15352     select an architecture and not an implementation.  These are `v7',
15353     `v8', `sparclite', `sparclet', `v9'.
15354
15355     Here is a list of each supported architecture and their supported
15356     implementations.
15357
15358              v7:             cypress
15359              v8:             supersparc, hypersparc
15360              sparclite:      f930, f934, sparclite86x
15361              sparclet:       tsc701
15362              v9:             ultrasparc, ultrasparc3, niagara, niagara2
15363
15364     By default (unless configured otherwise), GCC generates code for
15365     the V7 variant of the SPARC architecture.  With `-mcpu=cypress',
15366     the compiler additionally optimizes it for the Cypress CY7C602
15367     chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
15368     also appropriate for the older SPARCStation 1, 2, IPX etc.
15369
15370     With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC
15371     architecture.  The only difference from V7 code is that the
15372     compiler emits the integer multiply and integer divide
15373     instructions which exist in SPARC-V8 but not in SPARC-V7.  With
15374     `-mcpu=supersparc', the compiler additionally optimizes it for the
15375     SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
15376     series.
15377
15378     With `-mcpu=sparclite', GCC generates code for the SPARClite
15379     variant of the SPARC architecture.  This adds the integer
15380     multiply, integer divide step and scan (`ffs') instructions which
15381     exist in SPARClite but not in SPARC-V7.  With `-mcpu=f930', the
15382     compiler additionally optimizes it for the Fujitsu MB86930 chip,
15383     which is the original SPARClite, with no FPU.  With `-mcpu=f934',
15384     the compiler additionally optimizes it for the Fujitsu MB86934
15385     chip, which is the more recent SPARClite with FPU.
15386
15387     With `-mcpu=sparclet', GCC generates code for the SPARClet variant
15388     of the SPARC architecture.  This adds the integer multiply,
15389     multiply/accumulate, integer divide step and scan (`ffs')
15390     instructions which exist in SPARClet but not in SPARC-V7.  With
15391     `-mcpu=tsc701', the compiler additionally optimizes it for the
15392     TEMIC SPARClet chip.
15393
15394     With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC
15395     architecture.  This adds 64-bit integer and floating-point move
15396     instructions, 3 additional floating-point condition code registers
15397     and conditional move instructions.  With `-mcpu=ultrasparc', the
15398     compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
15399     chips.  With `-mcpu=ultrasparc3', the compiler additionally
15400     optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
15401     chips.  With `-mcpu=niagara', the compiler additionally optimizes
15402     it for Sun UltraSPARC T1 chips.  With `-mcpu=niagara2', the
15403     compiler additionally optimizes it for Sun UltraSPARC T2 chips.
15404
15405`-mtune=CPU_TYPE'
15406     Set the instruction scheduling parameters for machine type
15407     CPU_TYPE, but do not set the instruction set or register set that
15408     the option `-mcpu=CPU_TYPE' would.
15409
15410     The same values for `-mcpu=CPU_TYPE' can be used for
15411     `-mtune=CPU_TYPE', but the only useful values are those that
15412     select a particular CPU implementation.  Those are `cypress',
15413     `supersparc', `hypersparc', `f930', `f934', `sparclite86x',
15414     `tsc701', `ultrasparc', `ultrasparc3', `niagara', and `niagara2'.
15415
15416`-mv8plus'
15417`-mno-v8plus'
15418     With `-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
15419     difference from the V8 ABI is that the global and out registers are
15420     considered 64-bit wide.  This is enabled by default on Solaris in
15421     32-bit mode for all SPARC-V9 processors.
15422
15423`-mvis'
15424`-mno-vis'
15425     With `-mvis', GCC generates code that takes advantage of the
15426     UltraSPARC Visual Instruction Set extensions.  The default is
15427     `-mno-vis'.
15428
15429 These `-m' options are supported in addition to the above on SPARC-V9
15430processors in 64-bit environments:
15431
15432`-mlittle-endian'
15433     Generate code for a processor running in little-endian mode.  It
15434     is only available for a few configurations and most notably not on
15435     Solaris and Linux.
15436
15437`-m32'
15438`-m64'
15439     Generate code for a 32-bit or 64-bit environment.  The 32-bit
15440     environment sets int, long and pointer to 32 bits.  The 64-bit
15441     environment sets int to 32 bits and long and pointer to 64 bits.
15442
15443`-mcmodel=medlow'
15444     Generate code for the Medium/Low code model: 64-bit addresses,
15445     programs must be linked in the low 32 bits of memory.  Programs
15446     can be statically or dynamically linked.
15447
15448`-mcmodel=medmid'
15449     Generate code for the Medium/Middle code model: 64-bit addresses,
15450     programs must be linked in the low 44 bits of memory, the text and
15451     data segments must be less than 2GB in size and the data segment
15452     must be located within 2GB of the text segment.
15453
15454`-mcmodel=medany'
15455     Generate code for the Medium/Anywhere code model: 64-bit
15456     addresses, programs may be linked anywhere in memory, the text and
15457     data segments must be less than 2GB in size and the data segment
15458     must be located within 2GB of the text segment.
15459
15460`-mcmodel=embmedany'
15461     Generate code for the Medium/Anywhere code model for embedded
15462     systems: 64-bit addresses, the text and data segments must be less
15463     than 2GB in size, both starting anywhere in memory (determined at
15464     link time).  The global register %g4 points to the base of the
15465     data segment.  Programs are statically linked and PIC is not
15466     supported.
15467
15468`-mstack-bias'
15469`-mno-stack-bias'
15470     With `-mstack-bias', GCC assumes that the stack pointer, and frame
15471     pointer if present, are offset by -2047 which must be added back
15472     when making stack frame references.  This is the default in 64-bit
15473     mode.  Otherwise, assume no such offset is present.
15474
15475 These switches are supported in addition to the above on Solaris:
15476
15477`-threads'
15478     Add support for multithreading using the Solaris threads library.
15479     This option sets flags for both the preprocessor and linker.  This
15480     option does not affect the thread safety of object code produced
15481     by the compiler or that of libraries supplied with it.
15482
15483`-pthreads'
15484     Add support for multithreading using the POSIX threads library.
15485     This option sets flags for both the preprocessor and linker.  This
15486     option does not affect the thread safety of object code produced
15487     by the compiler or that of libraries supplied with it.
15488
15489`-pthread'
15490     This is a synonym for `-pthreads'.
15491
15492
15493File: gcc.info,  Node: SPU Options,  Next: System V Options,  Prev: SPARC Options,  Up: Submodel Options
15494
154953.17.38 SPU Options
15496-------------------
15497
15498These `-m' options are supported on the SPU:
15499
15500`-mwarn-reloc'
15501`-merror-reloc'
15502     The loader for SPU does not handle dynamic relocations.  By
15503     default, GCC will give an error when it generates code that
15504     requires a dynamic relocation.  `-mno-error-reloc' disables the
15505     error, `-mwarn-reloc' will generate a warning instead.
15506
15507`-msafe-dma'
15508`-munsafe-dma'
15509     Instructions which initiate or test completion of DMA must not be
15510     reordered with respect to loads and stores of the memory which is
15511     being accessed.  Users typically address this problem using the
15512     volatile keyword, but that can lead to inefficient code in places
15513     where the memory is known to not change.  Rather than mark the
15514     memory as volatile we treat the DMA instructions as potentially
15515     effecting all memory.  With `-munsafe-dma' users must use the
15516     volatile keyword to protect memory accesses.
15517
15518`-mbranch-hints'
15519     By default, GCC will generate a branch hint instruction to avoid
15520     pipeline stalls for always taken or probably taken branches.  A
15521     hint will not be generated closer than 8 instructions away from
15522     its branch.  There is little reason to disable them, except for
15523     debugging purposes, or to make an object a little bit smaller.
15524
15525`-msmall-mem'
15526`-mlarge-mem'
15527     By default, GCC generates code assuming that addresses are never
15528     larger than 18 bits.  With `-mlarge-mem' code is generated that
15529     assumes a full 32 bit address.
15530
15531`-mstdmain'
15532     By default, GCC links against startup code that assumes the
15533     SPU-style main function interface (which has an unconventional
15534     parameter list).  With `-mstdmain', GCC will link your program
15535     against startup code that assumes a C99-style interface to `main',
15536     including a local copy of `argv' strings.
15537
15538`-mfixed-range=REGISTER-RANGE'
15539     Generate code treating the given register range as fixed registers.
15540     A fixed register is one that the register allocator can not use.
15541     This is useful when compiling kernel code.  A register range is
15542     specified as two registers separated by a dash.  Multiple register
15543     ranges can be specified separated by a comma.
15544
15545`-mea32'
15546`-mea64'
15547     Compile code assuming that pointers to the PPU address space
15548     accessed via the `__ea' named address space qualifier are either
15549     32 or 64 bits wide.  The default is 32 bits.  As this is an ABI
15550     changing option, all object code in an executable must be compiled
15551     with the same setting.
15552
15553`-maddress-space-conversion'
15554`-mno-address-space-conversion'
15555     Allow/disallow treating the `__ea' address space as superset of
15556     the generic address space.  This enables explicit type casts
15557     between `__ea' and generic pointer as well as implicit conversions
15558     of generic pointers to `__ea' pointers.  The default is to allow
15559     address space pointer conversions.
15560
15561`-mcache-size=CACHE-SIZE'
15562     This option controls the version of libgcc that the compiler links
15563     to an executable and selects a software-managed cache for
15564     accessing variables in the `__ea' address space with a particular
15565     cache size.  Possible options for CACHE-SIZE are `8', `16', `32',
15566     `64' and `128'.  The default cache size is 64KB.
15567
15568`-matomic-updates'
15569`-mno-atomic-updates'
15570     This option controls the version of libgcc that the compiler links
15571     to an executable and selects whether atomic updates to the
15572     software-managed cache of PPU-side variables are used.  If you use
15573     atomic updates, changes to a PPU variable from SPU code using the
15574     `__ea' named address space qualifier will not interfere with
15575     changes to other PPU variables residing in the same cache line
15576     from PPU code.  If you do not use atomic updates, such
15577     interference may occur; however, writing back cache lines will be
15578     more efficient.  The default behavior is to use atomic updates.
15579
15580`-mdual-nops'
15581`-mdual-nops=N'
15582     By default, GCC will insert nops to increase dual issue when it
15583     expects it to increase performance.  N can be a value from 0 to
15584     10.  A smaller N will insert fewer nops.  10 is the default, 0 is
15585     the same as `-mno-dual-nops'.  Disabled with `-Os'.
15586
15587`-mhint-max-nops=N'
15588     Maximum number of nops to insert for a branch hint.  A branch hint
15589     must be at least 8 instructions away from the branch it is
15590     effecting.  GCC will insert up to N nops to enforce this,
15591     otherwise it will not generate the branch hint.
15592
15593`-mhint-max-distance=N'
15594     The encoding of the branch hint instruction limits the hint to be
15595     within 256 instructions of the branch it is effecting.  By
15596     default, GCC makes sure it is within 125.
15597
15598`-msafe-hints'
15599     Work around a hardware bug which causes the SPU to stall
15600     indefinitely.  By default, GCC will insert the `hbrp' instruction
15601     to make sure this stall won't happen.
15602
15603
15604
15605File: gcc.info,  Node: System V Options,  Next: V850 Options,  Prev: SPU Options,  Up: Submodel Options
15606
156073.17.39 Options for System V
15608----------------------------
15609
15610These additional options are available on System V Release 4 for
15611compatibility with other compilers on those systems:
15612
15613`-G'
15614     Create a shared object.  It is recommended that `-symbolic' or
15615     `-shared' be used instead.
15616
15617`-Qy'
15618     Identify the versions of each tool used by the compiler, in a
15619     `.ident' assembler directive in the output.
15620
15621`-Qn'
15622     Refrain from adding `.ident' directives to the output file (this is
15623     the default).
15624
15625`-YP,DIRS'
15626     Search the directories DIRS, and no others, for libraries
15627     specified with `-l'.
15628
15629`-Ym,DIR'
15630     Look in the directory DIR to find the M4 preprocessor.  The
15631     assembler uses this option.
15632
15633
15634File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: System V Options,  Up: Submodel Options
15635
156363.17.40 V850 Options
15637--------------------
15638
15639These `-m' options are defined for V850 implementations:
15640
15641`-mlong-calls'
15642`-mno-long-calls'
15643     Treat all calls as being far away (near).  If calls are assumed to
15644     be far away, the compiler will always load the functions address
15645     up into a register, and call indirect through the pointer.
15646
15647`-mno-ep'
15648`-mep'
15649     Do not optimize (do optimize) basic blocks that use the same index
15650     pointer 4 or more times to copy pointer into the `ep' register, and
15651     use the shorter `sld' and `sst' instructions.  The `-mep' option
15652     is on by default if you optimize.
15653
15654`-mno-prolog-function'
15655`-mprolog-function'
15656     Do not use (do use) external functions to save and restore
15657     registers at the prologue and epilogue of a function.  The
15658     external functions are slower, but use less code space if more
15659     than one function saves the same number of registers.  The
15660     `-mprolog-function' option is on by default if you optimize.
15661
15662`-mspace'
15663     Try to make the code as small as possible.  At present, this just
15664     turns on the `-mep' and `-mprolog-function' options.
15665
15666`-mtda=N'
15667     Put static or global variables whose size is N bytes or less into
15668     the tiny data area that register `ep' points to.  The tiny data
15669     area can hold up to 256 bytes in total (128 bytes for byte
15670     references).
15671
15672`-msda=N'
15673     Put static or global variables whose size is N bytes or less into
15674     the small data area that register `gp' points to.  The small data
15675     area can hold up to 64 kilobytes.
15676
15677`-mzda=N'
15678     Put static or global variables whose size is N bytes or less into
15679     the first 32 kilobytes of memory.
15680
15681`-mv850'
15682     Specify that the target processor is the V850.
15683
15684`-mbig-switch'
15685     Generate code suitable for big switch tables.  Use this option
15686     only if the assembler/linker complain about out of range branches
15687     within a switch table.
15688
15689`-mapp-regs'
15690     This option will cause r2 and r5 to be used in the code generated
15691     by the compiler.  This setting is the default.
15692
15693`-mno-app-regs'
15694     This option will cause r2 and r5 to be treated as fixed registers.
15695
15696`-mv850e1'
15697     Specify that the target processor is the V850E1.  The preprocessor
15698     constants `__v850e1__' and `__v850e__' will be defined if this
15699     option is used.
15700
15701`-mv850e'
15702     Specify that the target processor is the V850E.  The preprocessor
15703     constant `__v850e__' will be defined if this option is used.
15704
15705     If neither `-mv850' nor `-mv850e' nor `-mv850e1' are defined then
15706     a default target processor will be chosen and the relevant
15707     `__v850*__' preprocessor constant will be defined.
15708
15709     The preprocessor constants `__v850' and `__v851__' are always
15710     defined, regardless of which processor variant is the target.
15711
15712`-mdisable-callt'
15713     This option will suppress generation of the CALLT instruction for
15714     the v850e and v850e1 flavors of the v850 architecture.  The
15715     default is `-mno-disable-callt' which allows the CALLT instruction
15716     to be used.
15717
15718
15719
15720File: gcc.info,  Node: VAX Options,  Next: VxWorks Options,  Prev: V850 Options,  Up: Submodel Options
15721
157223.17.41 VAX Options
15723-------------------
15724
15725These `-m' options are defined for the VAX:
15726
15727`-munix'
15728     Do not output certain jump instructions (`aobleq' and so on) that
15729     the Unix assembler for the VAX cannot handle across long ranges.
15730
15731`-mgnu'
15732     Do output those jump instructions, on the assumption that you will
15733     assemble with the GNU assembler.
15734
15735`-mg'
15736     Output code for g-format floating point numbers instead of
15737     d-format.
15738
15739
15740File: gcc.info,  Node: VxWorks Options,  Next: x86-64 Options,  Prev: VAX Options,  Up: Submodel Options
15741
157423.17.42 VxWorks Options
15743-----------------------
15744
15745The options in this section are defined for all VxWorks targets.
15746Options specific to the target hardware are listed with the other
15747options for that target.
15748
15749`-mrtp'
15750     GCC can generate code for both VxWorks kernels and real time
15751     processes (RTPs).  This option switches from the former to the
15752     latter.  It also defines the preprocessor macro `__RTP__'.
15753
15754`-non-static'
15755     Link an RTP executable against shared libraries rather than static
15756     libraries.  The options `-static' and `-shared' can also be used
15757     for RTPs (*note Link Options::); `-static' is the default.
15758
15759`-Bstatic'
15760`-Bdynamic'
15761     These options are passed down to the linker.  They are defined for
15762     compatibility with Diab.
15763
15764`-Xbind-lazy'
15765     Enable lazy binding of function calls.  This option is equivalent
15766     to `-Wl,-z,now' and is defined for compatibility with Diab.
15767
15768`-Xbind-now'
15769     Disable lazy binding of function calls.  This option is the
15770     default and is defined for compatibility with Diab.
15771
15772
15773File: gcc.info,  Node: x86-64 Options,  Next: Xstormy16 Options,  Prev: VxWorks Options,  Up: Submodel Options
15774
157753.17.43 x86-64 Options
15776----------------------
15777
15778These are listed under *Note i386 and x86-64 Options::.
15779
15780
15781File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86-64 Options,  Up: Submodel Options
15782
157833.17.44 Xstormy16 Options
15784-------------------------
15785
15786These options are defined for Xstormy16:
15787
15788`-msim'
15789     Choose startup files and linker script suitable for the simulator.
15790
15791
15792File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options
15793
157943.17.45 Xtensa Options
15795----------------------
15796
15797These options are supported for Xtensa targets:
15798
15799`-mconst16'
15800`-mno-const16'
15801     Enable or disable use of `CONST16' instructions for loading
15802     constant values.  The `CONST16' instruction is currently not a
15803     standard option from Tensilica.  When enabled, `CONST16'
15804     instructions are always used in place of the standard `L32R'
15805     instructions.  The use of `CONST16' is enabled by default only if
15806     the `L32R' instruction is not available.
15807
15808`-mfused-madd'
15809`-mno-fused-madd'
15810     Enable or disable use of fused multiply/add and multiply/subtract
15811     instructions in the floating-point option.  This has no effect if
15812     the floating-point option is not also enabled.  Disabling fused
15813     multiply/add and multiply/subtract instructions forces the
15814     compiler to use separate instructions for the multiply and
15815     add/subtract operations.  This may be desirable in some cases
15816     where strict IEEE 754-compliant results are required: the fused
15817     multiply add/subtract instructions do not round the intermediate
15818     result, thereby producing results with _more_ bits of precision
15819     than specified by the IEEE standard.  Disabling fused multiply
15820     add/subtract instructions also ensures that the program output is
15821     not sensitive to the compiler's ability to combine multiply and
15822     add/subtract operations.
15823
15824`-mserialize-volatile'
15825`-mno-serialize-volatile'
15826     When this option is enabled, GCC inserts `MEMW' instructions before
15827     `volatile' memory references to guarantee sequential consistency.
15828     The default is `-mserialize-volatile'.  Use
15829     `-mno-serialize-volatile' to omit the `MEMW' instructions.
15830
15831`-mtext-section-literals'
15832`-mno-text-section-literals'
15833     Control the treatment of literal pools.  The default is
15834     `-mno-text-section-literals', which places literals in a separate
15835     section in the output file.  This allows the literal pool to be
15836     placed in a data RAM/ROM, and it also allows the linker to combine
15837     literal pools from separate object files to remove redundant
15838     literals and improve code size.  With `-mtext-section-literals',
15839     the literals are interspersed in the text section in order to keep
15840     them as close as possible to their references.  This may be
15841     necessary for large assembly files.
15842
15843`-mtarget-align'
15844`-mno-target-align'
15845     When this option is enabled, GCC instructs the assembler to
15846     automatically align instructions to reduce branch penalties at the
15847     expense of some code density.  The assembler attempts to widen
15848     density instructions to align branch targets and the instructions
15849     following call instructions.  If there are not enough preceding
15850     safe density instructions to align a target, no widening will be
15851     performed.  The default is `-mtarget-align'.  These options do not
15852     affect the treatment of auto-aligned instructions like `LOOP',
15853     which the assembler will always align, either by widening density
15854     instructions or by inserting no-op instructions.
15855
15856`-mlongcalls'
15857`-mno-longcalls'
15858     When this option is enabled, GCC instructs the assembler to
15859     translate direct calls to indirect calls unless it can determine
15860     that the target of a direct call is in the range allowed by the
15861     call instruction.  This translation typically occurs for calls to
15862     functions in other source files.  Specifically, the assembler
15863     translates a direct `CALL' instruction into an `L32R' followed by
15864     a `CALLX' instruction.  The default is `-mno-longcalls'.  This
15865     option should be used in programs where the call target can
15866     potentially be out of range.  This option is implemented in the
15867     assembler, not the compiler, so the assembly code generated by GCC
15868     will still show direct call instructions--look at the disassembled
15869     object code to see the actual instructions.  Note that the
15870     assembler will use an indirect call for every cross-file call, not
15871     just those that really will be out of range.
15872
15873
15874File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
15875
158763.17.46 zSeries Options
15877-----------------------
15878
15879These are listed under *Note S/390 and zSeries Options::.
15880
15881
15882File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
15883
158843.18 Options for Code Generation Conventions
15885============================================
15886
15887These machine-independent options control the interface conventions
15888used in code generation.
15889
15890 Most of them have both positive and negative forms; the negative form
15891of `-ffoo' would be `-fno-foo'.  In the table below, only one of the
15892forms is listed--the one which is not the default.  You can figure out
15893the other form by either removing `no-' or adding it.
15894
15895`-fbounds-check'
15896     For front-ends that support it, generate additional code to check
15897     that indices used to access arrays are within the declared range.
15898     This is currently only supported by the Java and Fortran
15899     front-ends, where this option defaults to true and false
15900     respectively.
15901
15902`-ftrapv'
15903     This option generates traps for signed overflow on addition,
15904     subtraction, multiplication operations.
15905
15906`-fwrapv'
15907     This option instructs the compiler to assume that signed arithmetic
15908     overflow of addition, subtraction and multiplication wraps around
15909     using twos-complement representation.  This flag enables some
15910     optimizations and disables others.  This option is enabled by
15911     default for the Java front-end, as required by the Java language
15912     specification.
15913
15914`-fexceptions'
15915     Enable exception handling.  Generates extra code needed to
15916     propagate exceptions.  For some targets, this implies GCC will
15917     generate frame unwind information for all functions, which can
15918     produce significant data size overhead, although it does not
15919     affect execution.  If you do not specify this option, GCC will
15920     enable it by default for languages like C++ which normally require
15921     exception handling, and disable it for languages like C that do
15922     not normally require it.  However, you may need to enable this
15923     option when compiling C code that needs to interoperate properly
15924     with exception handlers written in C++.  You may also wish to
15925     disable this option if you are compiling older C++ programs that
15926     don't use exception handling.
15927
15928`-fnon-call-exceptions'
15929     Generate code that allows trapping instructions to throw
15930     exceptions.  Note that this requires platform-specific runtime
15931     support that does not exist everywhere.  Moreover, it only allows
15932     _trapping_ instructions to throw exceptions, i.e. memory
15933     references or floating point instructions.  It does not allow
15934     exceptions to be thrown from arbitrary signal handlers such as
15935     `SIGALRM'.
15936
15937`-funwind-tables'
15938     Similar to `-fexceptions', except that it will just generate any
15939     needed static data, but will not affect the generated code in any
15940     other way.  You will normally not enable this option; instead, a
15941     language processor that needs this handling would enable it on
15942     your behalf.
15943
15944`-fasynchronous-unwind-tables'
15945     Generate unwind table in dwarf2 format, if supported by target
15946     machine.  The table is exact at each instruction boundary, so it
15947     can be used for stack unwinding from asynchronous events (such as
15948     debugger or garbage collector).
15949
15950`-fpcc-struct-return'
15951     Return "short" `struct' and `union' values in memory like longer
15952     ones, rather than in registers.  This convention is less
15953     efficient, but it has the advantage of allowing intercallability
15954     between GCC-compiled files and files compiled with other
15955     compilers, particularly the Portable C Compiler (pcc).
15956
15957     The precise convention for returning structures in memory depends
15958     on the target configuration macros.
15959
15960     Short structures and unions are those whose size and alignment
15961     match that of some integer type.
15962
15963     *Warning:* code compiled with the `-fpcc-struct-return' switch is
15964     not binary compatible with code compiled with the
15965     `-freg-struct-return' switch.  Use it to conform to a non-default
15966     application binary interface.
15967
15968`-freg-struct-return'
15969     Return `struct' and `union' values in registers when possible.
15970     This is more efficient for small structures than
15971     `-fpcc-struct-return'.
15972
15973     If you specify neither `-fpcc-struct-return' nor
15974     `-freg-struct-return', GCC defaults to whichever convention is
15975     standard for the target.  If there is no standard convention, GCC
15976     defaults to `-fpcc-struct-return', except on targets where GCC is
15977     the principal compiler.  In those cases, we can choose the
15978     standard, and we chose the more efficient register return
15979     alternative.
15980
15981     *Warning:* code compiled with the `-freg-struct-return' switch is
15982     not binary compatible with code compiled with the
15983     `-fpcc-struct-return' switch.  Use it to conform to a non-default
15984     application binary interface.
15985
15986`-fshort-enums'
15987     Allocate to an `enum' type only as many bytes as it needs for the
15988     declared range of possible values.  Specifically, the `enum' type
15989     will be equivalent to the smallest integer type which has enough
15990     room.
15991
15992     *Warning:* the `-fshort-enums' switch causes GCC to generate code
15993     that is not binary compatible with code generated without that
15994     switch.  Use it to conform to a non-default application binary
15995     interface.
15996
15997`-fshort-double'
15998     Use the same size for `double' as for `float'.
15999
16000     *Warning:* the `-fshort-double' switch causes GCC to generate code
16001     that is not binary compatible with code generated without that
16002     switch.  Use it to conform to a non-default application binary
16003     interface.
16004
16005`-fshort-wchar'
16006     Override the underlying type for `wchar_t' to be `short unsigned
16007     int' instead of the default for the target.  This option is useful
16008     for building programs to run under WINE.
16009
16010     *Warning:* the `-fshort-wchar' switch causes GCC to generate code
16011     that is not binary compatible with code generated without that
16012     switch.  Use it to conform to a non-default application binary
16013     interface.
16014
16015`-fno-common'
16016     In C code, controls the placement of uninitialized global
16017     variables.  Unix C compilers have traditionally permitted multiple
16018     definitions of such variables in different compilation units by
16019     placing the variables in a common block.  This is the behavior
16020     specified by `-fcommon', and is the default for GCC on most
16021     targets.  On the other hand, this behavior is not required by ISO
16022     C, and on some targets may carry a speed or code size penalty on
16023     variable references.  The `-fno-common' option specifies that the
16024     compiler should place uninitialized global variables in the data
16025     section of the object file, rather than generating them as common
16026     blocks.  This has the effect that if the same variable is declared
16027     (without `extern') in two different compilations, you will get a
16028     multiple-definition error when you link them.  In this case, you
16029     must compile with `-fcommon' instead.  Compiling with
16030     `-fno-common' is useful on targets for which it provides better
16031     performance, or if you wish to verify that the program will work
16032     on other systems which always treat uninitialized variable
16033     declarations this way.
16034
16035`-fno-ident'
16036     Ignore the `#ident' directive.
16037
16038`-finhibit-size-directive'
16039     Don't output a `.size' assembler directive, or anything else that
16040     would cause trouble if the function is split in the middle, and the
16041     two halves are placed at locations far apart in memory.  This
16042     option is used when compiling `crtstuff.c'; you should not need to
16043     use it for anything else.
16044
16045`-fverbose-asm'
16046     Put extra commentary information in the generated assembly code to
16047     make it more readable.  This option is generally only of use to
16048     those who actually need to read the generated assembly code
16049     (perhaps while debugging the compiler itself).
16050
16051     `-fno-verbose-asm', the default, causes the extra information to
16052     be omitted and is useful when comparing two assembler files.
16053
16054`-frecord-gcc-switches'
16055     This switch causes the command line that was used to invoke the
16056     compiler to be recorded into the object file that is being created.
16057     This switch is only implemented on some targets and the exact
16058     format of the recording is target and binary file format
16059     dependent, but it usually takes the form of a section containing
16060     ASCII text.  This switch is related to the `-fverbose-asm' switch,
16061     but that switch only records information in the assembler output
16062     file as comments, so it never reaches the object file.
16063
16064`-fpic'
16065     Generate position-independent code (PIC) suitable for use in a
16066     shared library, if supported for the target machine.  Such code
16067     accesses all constant addresses through a global offset table
16068     (GOT).  The dynamic loader resolves the GOT entries when the
16069     program starts (the dynamic loader is not part of GCC; it is part
16070     of the operating system).  If the GOT size for the linked
16071     executable exceeds a machine-specific maximum size, you get an
16072     error message from the linker indicating that `-fpic' does not
16073     work; in that case, recompile with `-fPIC' instead.  (These
16074     maximums are 8k on the SPARC and 32k on the m68k and RS/6000.  The
16075     386 has no such limit.)
16076
16077     Position-independent code requires special support, and therefore
16078     works only on certain machines.  For the 386, GCC supports PIC for
16079     System V but not for the Sun 386i.  Code generated for the IBM
16080     RS/6000 is always position-independent.
16081
16082     When this flag is set, the macros `__pic__' and `__PIC__' are
16083     defined to 1.
16084
16085`-fPIC'
16086     If supported for the target machine, emit position-independent
16087     code, suitable for dynamic linking and avoiding any limit on the
16088     size of the global offset table.  This option makes a difference
16089     on the m68k, PowerPC and SPARC.
16090
16091     Position-independent code requires special support, and therefore
16092     works only on certain machines.
16093
16094     When this flag is set, the macros `__pic__' and `__PIC__' are
16095     defined to 2.
16096
16097`-fpie'
16098`-fPIE'
16099     These options are similar to `-fpic' and `-fPIC', but generated
16100     position independent code can be only linked into executables.
16101     Usually these options are used when `-pie' GCC option will be used
16102     during linking.
16103
16104     `-fpie' and `-fPIE' both define the macros `__pie__' and
16105     `__PIE__'.  The macros have the value 1 for `-fpie' and 2 for
16106     `-fPIE'.
16107
16108`-fno-jump-tables'
16109     Do not use jump tables for switch statements even where it would be
16110     more efficient than other code generation strategies.  This option
16111     is of use in conjunction with `-fpic' or `-fPIC' for building code
16112     which forms part of a dynamic linker and cannot reference the
16113     address of a jump table.  On some targets, jump tables do not
16114     require a GOT and this option is not needed.
16115
16116`-ffixed-REG'
16117     Treat the register named REG as a fixed register; generated code
16118     should never refer to it (except perhaps as a stack pointer, frame
16119     pointer or in some other fixed role).
16120
16121     REG must be the name of a register.  The register names accepted
16122     are machine-specific and are defined in the `REGISTER_NAMES' macro
16123     in the machine description macro file.
16124
16125     This flag does not have a negative form, because it specifies a
16126     three-way choice.
16127
16128`-fcall-used-REG'
16129     Treat the register named REG as an allocable register that is
16130     clobbered by function calls.  It may be allocated for temporaries
16131     or variables that do not live across a call.  Functions compiled
16132     this way will not save and restore the register REG.
16133
16134     It is an error to used this flag with the frame pointer or stack
16135     pointer.  Use of this flag for other registers that have fixed
16136     pervasive roles in the machine's execution model will produce
16137     disastrous results.
16138
16139     This flag does not have a negative form, because it specifies a
16140     three-way choice.
16141
16142`-fcall-saved-REG'
16143     Treat the register named REG as an allocable register saved by
16144     functions.  It may be allocated even for temporaries or variables
16145     that live across a call.  Functions compiled this way will save
16146     and restore the register REG if they use it.
16147
16148     It is an error to used this flag with the frame pointer or stack
16149     pointer.  Use of this flag for other registers that have fixed
16150     pervasive roles in the machine's execution model will produce
16151     disastrous results.
16152
16153     A different sort of disaster will result from the use of this flag
16154     for a register in which function values may be returned.
16155
16156     This flag does not have a negative form, because it specifies a
16157     three-way choice.
16158
16159`-fpack-struct[=N]'
16160     Without a value specified, pack all structure members together
16161     without holes.  When a value is specified (which must be a small
16162     power of two), pack structure members according to this value,
16163     representing the maximum alignment (that is, objects with default
16164     alignment requirements larger than this will be output potentially
16165     unaligned at the next fitting location.
16166
16167     *Warning:* the `-fpack-struct' switch causes GCC to generate code
16168     that is not binary compatible with code generated without that
16169     switch.  Additionally, it makes the code suboptimal.  Use it to
16170     conform to a non-default application binary interface.
16171
16172`-finstrument-functions'
16173     Generate instrumentation calls for entry and exit to functions.
16174     Just after function entry and just before function exit, the
16175     following profiling functions will be called with the address of
16176     the current function and its call site.  (On some platforms,
16177     `__builtin_return_address' does not work beyond the current
16178     function, so the call site information may not be available to the
16179     profiling functions otherwise.)
16180
16181          void __cyg_profile_func_enter (void *this_fn,
16182                                         void *call_site);
16183          void __cyg_profile_func_exit  (void *this_fn,
16184                                         void *call_site);
16185
16186     The first argument is the address of the start of the current
16187     function, which may be looked up exactly in the symbol table.
16188
16189     This instrumentation is also done for functions expanded inline in
16190     other functions.  The profiling calls will indicate where,
16191     conceptually, the inline function is entered and exited.  This
16192     means that addressable versions of such functions must be
16193     available.  If all your uses of a function are expanded inline,
16194     this may mean an additional expansion of code size.  If you use
16195     `extern inline' in your C code, an addressable version of such
16196     functions must be provided.  (This is normally the case anyways,
16197     but if you get lucky and the optimizer always expands the
16198     functions inline, you might have gotten away without providing
16199     static copies.)
16200
16201     A function may be given the attribute `no_instrument_function', in
16202     which case this instrumentation will not be done.  This can be
16203     used, for example, for the profiling functions listed above,
16204     high-priority interrupt routines, and any functions from which the
16205     profiling functions cannot safely be called (perhaps signal
16206     handlers, if the profiling routines generate output or allocate
16207     memory).
16208
16209`-finstrument-functions-exclude-file-list=FILE,FILE,...'
16210     Set the list of functions that are excluded from instrumentation
16211     (see the description of `-finstrument-functions').  If the file
16212     that contains a function definition matches with one of FILE, then
16213     that function is not instrumented.  The match is done on
16214     substrings: if the FILE parameter is a substring of the file name,
16215     it is considered to be a match.
16216
16217     For example,
16218     `-finstrument-functions-exclude-file-list=/bits/stl,include/sys'
16219     will exclude any inline function defined in files whose pathnames
16220     contain `/bits/stl' or `include/sys'.
16221
16222     If, for some reason, you want to include letter `','' in one of
16223     SYM, write `'\,''. For example,
16224     `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the
16225     single quote surrounding the option).
16226
16227`-finstrument-functions-exclude-function-list=SYM,SYM,...'
16228     This is similar to `-finstrument-functions-exclude-file-list', but
16229     this option sets the list of function names to be excluded from
16230     instrumentation.  The function name to be matched is its
16231     user-visible name, such as `vector<int> blah(const vector<int>
16232     &)', not the internal mangled name (e.g.,
16233     `_Z4blahRSt6vectorIiSaIiEE').  The match is done on substrings: if
16234     the SYM parameter is a substring of the function name, it is
16235     considered to be a match.  For C99 and C++ extended identifiers,
16236     the function name must be given in UTF-8, not using universal
16237     character names.
16238
16239`-fstack-check'
16240     Generate code to verify that you do not go beyond the boundary of
16241     the stack.  You should specify this flag if you are running in an
16242     environment with multiple threads, but only rarely need to specify
16243     it in a single-threaded environment since stack overflow is
16244     automatically detected on nearly all systems if there is only one
16245     stack.
16246
16247     Note that this switch does not actually cause checking to be done;
16248     the operating system or the language runtime must do that.  The
16249     switch causes generation of code to ensure that they see the stack
16250     being extended.
16251
16252     You can additionally specify a string parameter: `no' means no
16253     checking, `generic' means force the use of old-style checking,
16254     `specific' means use the best checking method and is equivalent to
16255     bare `-fstack-check'.
16256
16257     Old-style checking is a generic mechanism that requires no specific
16258     target support in the compiler but comes with the following
16259     drawbacks:
16260
16261       1. Modified allocation strategy for large objects: they will
16262          always be allocated dynamically if their size exceeds a fixed
16263          threshold.
16264
16265       2. Fixed limit on the size of the static frame of functions:
16266          when it is topped by a particular function, stack checking is
16267          not reliable and a warning is issued by the compiler.
16268
16269       3. Inefficiency: because of both the modified allocation
16270          strategy and the generic implementation, the performances of
16271          the code are hampered.
16272
16273     Note that old-style stack checking is also the fallback method for
16274     `specific' if no target support has been added in the compiler.
16275
16276`-fstack-limit-register=REG'
16277`-fstack-limit-symbol=SYM'
16278`-fno-stack-limit'
16279     Generate code to ensure that the stack does not grow beyond a
16280     certain value, either the value of a register or the address of a
16281     symbol.  If the stack would grow beyond the value, a signal is
16282     raised.  For most targets, the signal is raised before the stack
16283     overruns the boundary, so it is possible to catch the signal
16284     without taking special precautions.
16285
16286     For instance, if the stack starts at absolute address `0x80000000'
16287     and grows downwards, you can use the flags
16288     `-fstack-limit-symbol=__stack_limit' and
16289     `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit
16290     of 128KB.  Note that this may only work with the GNU linker.
16291
16292`-fargument-alias'
16293`-fargument-noalias'
16294`-fargument-noalias-global'
16295`-fargument-noalias-anything'
16296     Specify the possible relationships among parameters and between
16297     parameters and global data.
16298
16299     `-fargument-alias' specifies that arguments (parameters) may alias
16300     each other and may alias global storage.
16301     `-fargument-noalias' specifies that arguments do not alias each
16302     other, but may alias global storage.
16303     `-fargument-noalias-global' specifies that arguments do not alias
16304     each other and do not alias global storage.
16305     `-fargument-noalias-anything' specifies that arguments do not
16306     alias any other storage.
16307
16308     Each language will automatically use whatever option is required by
16309     the language standard.  You should not need to use these options
16310     yourself.
16311
16312`-fleading-underscore'
16313     This option and its counterpart, `-fno-leading-underscore',
16314     forcibly change the way C symbols are represented in the object
16315     file.  One use is to help link with legacy assembly code.
16316
16317     *Warning:* the `-fleading-underscore' switch causes GCC to
16318     generate code that is not binary compatible with code generated
16319     without that switch.  Use it to conform to a non-default
16320     application binary interface.  Not all targets provide complete
16321     support for this switch.
16322
16323`-ftls-model=MODEL'
16324     Alter the thread-local storage model to be used (*note
16325     Thread-Local::).  The MODEL argument should be one of
16326     `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'.
16327
16328     The default without `-fpic' is `initial-exec'; with `-fpic' the
16329     default is `global-dynamic'.
16330
16331`-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED'
16332     Set the default ELF image symbol visibility to the specified
16333     option--all symbols will be marked with this unless overridden
16334     within the code.  Using this feature can very substantially
16335     improve linking and load times of shared object libraries, produce
16336     more optimized code, provide near-perfect API export and prevent
16337     symbol clashes.  It is *strongly* recommended that you use this in
16338     any shared objects you distribute.
16339
16340     Despite the nomenclature, `default' always means public ie;
16341     available to be linked against from outside the shared object.
16342     `protected' and `internal' are pretty useless in real-world usage
16343     so the only other commonly used option will be `hidden'.  The
16344     default if `-fvisibility' isn't specified is `default', i.e., make
16345     every symbol public--this causes the same behavior as previous
16346     versions of GCC.
16347
16348     A good explanation of the benefits offered by ensuring ELF symbols
16349     have the correct visibility is given by "How To Write Shared
16350     Libraries" by Ulrich Drepper (which can be found at
16351     `http://people.redhat.com/~drepper/')--however a superior solution
16352     made possible by this option to marking things hidden when the
16353     default is public is to make the default hidden and mark things
16354     public.  This is the norm with DLL's on Windows and with
16355     `-fvisibility=hidden' and `__attribute__
16356     ((visibility("default")))' instead of `__declspec(dllexport)' you
16357     get almost identical semantics with identical syntax.  This is a
16358     great boon to those working with cross-platform projects.
16359
16360     For those adding visibility support to existing code, you may find
16361     `#pragma GCC visibility' of use.  This works by you enclosing the
16362     declarations you wish to set visibility for with (for example)
16363     `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility
16364     pop'.  Bear in mind that symbol visibility should be viewed *as
16365     part of the API interface contract* and thus all new code should
16366     always specify visibility when it is not the default ie;
16367     declarations only for use within the local DSO should *always* be
16368     marked explicitly as hidden as so to avoid PLT indirection
16369     overheads--making this abundantly clear also aids readability and
16370     self-documentation of the code.  Note that due to ISO C++
16371     specification requirements, operator new and operator delete must
16372     always be of default visibility.
16373
16374     Be aware that headers from outside your project, in particular
16375     system headers and headers from any other library you use, may not
16376     be expecting to be compiled with visibility other than the
16377     default.  You may need to explicitly say `#pragma GCC visibility
16378     push(default)' before including any such headers.
16379
16380     `extern' declarations are not affected by `-fvisibility', so a lot
16381     of code can be recompiled with `-fvisibility=hidden' with no
16382     modifications.  However, this means that calls to `extern'
16383     functions with no explicit visibility will use the PLT, so it is
16384     more effective to use `__attribute ((visibility))' and/or `#pragma
16385     GCC visibility' to tell the compiler which `extern' declarations
16386     should be treated as hidden.
16387
16388     Note that `-fvisibility' does affect C++ vague linkage entities.
16389     This means that, for instance, an exception class that will be
16390     thrown between DSOs must be explicitly marked with default
16391     visibility so that the `type_info' nodes will be unified between
16392     the DSOs.
16393
16394     An overview of these techniques, their benefits and how to use them
16395     is at `http://gcc.gnu.org/wiki/Visibility'.
16396
16397
16398
16399File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Code Gen Options,  Up: Invoking GCC
16400
164013.19 Environment Variables Affecting GCC
16402========================================
16403
16404This section describes several environment variables that affect how GCC
16405operates.  Some of them work by specifying directories or prefixes to
16406use when searching for various kinds of files.  Some are used to
16407specify other aspects of the compilation environment.
16408
16409 Note that you can also specify places to search using options such as
16410`-B', `-I' and `-L' (*note Directory Options::).  These take precedence
16411over places specified using environment variables, which in turn take
16412precedence over those specified by the configuration of GCC.  *Note
16413Controlling the Compilation Driver `gcc': (gccint)Driver.
16414
16415`LANG'
16416`LC_CTYPE'
16417`LC_MESSAGES'
16418`LC_ALL'
16419     These environment variables control the way that GCC uses
16420     localization information that allow GCC to work with different
16421     national conventions.  GCC inspects the locale categories
16422     `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so.
16423     These locale categories can be set to any value supported by your
16424     installation.  A typical value is `en_GB.UTF-8' for English in the
16425     United Kingdom encoded in UTF-8.
16426
16427     The `LC_CTYPE' environment variable specifies character
16428     classification.  GCC uses it to determine the character boundaries
16429     in a string; this is needed for some multibyte encodings that
16430     contain quote and escape characters that would otherwise be
16431     interpreted as a string end or escape.
16432
16433     The `LC_MESSAGES' environment variable specifies the language to
16434     use in diagnostic messages.
16435
16436     If the `LC_ALL' environment variable is set, it overrides the value
16437     of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and
16438     `LC_MESSAGES' default to the value of the `LANG' environment
16439     variable.  If none of these variables are set, GCC defaults to
16440     traditional C English behavior.
16441
16442`TMPDIR'
16443     If `TMPDIR' is set, it specifies the directory to use for temporary
16444     files.  GCC uses temporary files to hold the output of one stage of
16445     compilation which is to be used as input to the next stage: for
16446     example, the output of the preprocessor, which is the input to the
16447     compiler proper.
16448
16449`GCC_EXEC_PREFIX'
16450     If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
16451     names of the subprograms executed by the compiler.  No slash is
16452     added when this prefix is combined with the name of a subprogram,
16453     but you can specify a prefix that ends with a slash if you wish.
16454
16455     If `GCC_EXEC_PREFIX' is not set, GCC will attempt to figure out an
16456     appropriate prefix to use based on the pathname it was invoked
16457     with.
16458
16459     If GCC cannot find the subprogram using the specified prefix, it
16460     tries looking in the usual places for the subprogram.
16461
16462     The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where
16463     PREFIX is the prefix to the installed compiler. In many cases
16464     PREFIX is the value of `prefix' when you ran the `configure'
16465     script.
16466
16467     Other prefixes specified with `-B' take precedence over this
16468     prefix.
16469
16470     This prefix is also used for finding files such as `crt0.o' that
16471     are used for linking.
16472
16473     In addition, the prefix is used in an unusual way in finding the
16474     directories to search for header files.  For each of the standard
16475     directories whose name normally begins with `/usr/local/lib/gcc'
16476     (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries
16477     replacing that beginning with the specified prefix to produce an
16478     alternate directory name.  Thus, with `-Bfoo/', GCC will search
16479     `foo/bar' where it would normally search `/usr/local/lib/bar'.
16480     These alternate directories are searched first; the standard
16481     directories come next. If a standard directory begins with the
16482     configured PREFIX then the value of PREFIX is replaced by
16483     `GCC_EXEC_PREFIX' when looking for header files.
16484
16485`COMPILER_PATH'
16486     The value of `COMPILER_PATH' is a colon-separated list of
16487     directories, much like `PATH'.  GCC tries the directories thus
16488     specified when searching for subprograms, if it can't find the
16489     subprograms using `GCC_EXEC_PREFIX'.
16490
16491`LIBRARY_PATH'
16492     The value of `LIBRARY_PATH' is a colon-separated list of
16493     directories, much like `PATH'.  When configured as a native
16494     compiler, GCC tries the directories thus specified when searching
16495     for special linker files, if it can't find them using
16496     `GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
16497     when searching for ordinary libraries for the `-l' option (but
16498     directories specified with `-L' come first).
16499
16500`LANG'
16501     This variable is used to pass locale information to the compiler.
16502     One way in which this information is used is to determine the
16503     character set to be used when character literals, string literals
16504     and comments are parsed in C and C++.  When the compiler is
16505     configured to allow multibyte characters, the following values for
16506     `LANG' are recognized:
16507
16508    `C-JIS'
16509          Recognize JIS characters.
16510
16511    `C-SJIS'
16512          Recognize SJIS characters.
16513
16514    `C-EUCJP'
16515          Recognize EUCJP characters.
16516
16517     If `LANG' is not defined, or if it has some other value, then the
16518     compiler will use mblen and mbtowc as defined by the default
16519     locale to recognize and translate multibyte characters.
16520
16521Some additional environments variables affect the behavior of the
16522preprocessor.
16523
16524`CPATH'
16525`C_INCLUDE_PATH'
16526`CPLUS_INCLUDE_PATH'
16527`OBJC_INCLUDE_PATH'
16528     Each variable's value is a list of directories separated by a
16529     special character, much like `PATH', in which to look for header
16530     files.  The special character, `PATH_SEPARATOR', is
16531     target-dependent and determined at GCC build time.  For Microsoft
16532     Windows-based targets it is a semicolon, and for almost all other
16533     targets it is a colon.
16534
16535     `CPATH' specifies a list of directories to be searched as if
16536     specified with `-I', but after any paths given with `-I' options
16537     on the command line.  This environment variable is used regardless
16538     of which language is being preprocessed.
16539
16540     The remaining environment variables apply only when preprocessing
16541     the particular language indicated.  Each specifies a list of
16542     directories to be searched as if specified with `-isystem', but
16543     after any paths given with `-isystem' options on the command line.
16544
16545     In all these variables, an empty element instructs the compiler to
16546     search its current working directory.  Empty elements can appear
16547     at the beginning or end of a path.  For instance, if the value of
16548     `CPATH' is `:/special/include', that has the same effect as
16549     `-I. -I/special/include'.
16550
16551`DEPENDENCIES_OUTPUT'
16552     If this variable is set, its value specifies how to output
16553     dependencies for Make based on the non-system header files
16554     processed by the compiler.  System header files are ignored in the
16555     dependency output.
16556
16557     The value of `DEPENDENCIES_OUTPUT' can be just a file name, in
16558     which case the Make rules are written to that file, guessing the
16559     target name from the source file name.  Or the value can have the
16560     form `FILE TARGET', in which case the rules are written to file
16561     FILE using TARGET as the target name.
16562
16563     In other words, this environment variable is equivalent to
16564     combining the options `-MM' and `-MF' (*note Preprocessor
16565     Options::), with an optional `-MT' switch too.
16566
16567`SUNPRO_DEPENDENCIES'
16568     This variable is the same as `DEPENDENCIES_OUTPUT' (see above),
16569     except that system header files are not ignored, so it implies
16570     `-M' rather than `-MM'.  However, the dependence on the main input
16571     file is omitted.  *Note Preprocessor Options::.
16572
16573
16574File: gcc.info,  Node: Precompiled Headers,  Prev: Environment Variables,  Up: Invoking GCC
16575
165763.20 Using Precompiled Headers
16577==============================
16578
16579Often large projects have many header files that are included in every
16580source file.  The time the compiler takes to process these header files
16581over and over again can account for nearly all of the time required to
16582build the project.  To make builds faster, GCC allows users to
16583`precompile' a header file; then, if builds can use the precompiled
16584header file they will be much faster.
16585
16586 To create a precompiled header file, simply compile it as you would any
16587other file, if necessary using the `-x' option to make the driver treat
16588it as a C or C++ header file.  You will probably want to use a tool
16589like `make' to keep the precompiled header up-to-date when the headers
16590it contains change.
16591
16592 A precompiled header file will be searched for when `#include' is seen
16593in the compilation.  As it searches for the included file (*note Search
16594Path: (cpp)Search Path.) the compiler looks for a precompiled header in
16595each directory just before it looks for the include file in that
16596directory.  The name searched for is the name specified in the
16597`#include' with `.gch' appended.  If the precompiled header file can't
16598be used, it is ignored.
16599
16600 For instance, if you have `#include "all.h"', and you have `all.h.gch'
16601in the same directory as `all.h', then the precompiled header file will
16602be used if possible, and the original header will be used otherwise.
16603
16604 Alternatively, you might decide to put the precompiled header file in a
16605directory and use `-I' to ensure that directory is searched before (or
16606instead of) the directory containing the original header.  Then, if you
16607want to check that the precompiled header file is always used, you can
16608put a file of the same name as the original header in this directory
16609containing an `#error' command.
16610
16611 This also works with `-include'.  So yet another way to use
16612precompiled headers, good for projects not designed with precompiled
16613header files in mind, is to simply take most of the header files used by
16614a project, include them from another header file, precompile that header
16615file, and `-include' the precompiled header.  If the header files have
16616guards against multiple inclusion, they will be skipped because they've
16617already been included (in the precompiled header).
16618
16619 If you need to precompile the same header file for different
16620languages, targets, or compiler options, you can instead make a
16621_directory_ named like `all.h.gch', and put each precompiled header in
16622the directory, perhaps using `-o'.  It doesn't matter what you call the
16623files in the directory, every precompiled header in the directory will
16624be considered.  The first precompiled header encountered in the
16625directory that is valid for this compilation will be used; they're
16626searched in no particular order.
16627
16628 There are many other possibilities, limited only by your imagination,
16629good sense, and the constraints of your build system.
16630
16631 A precompiled header file can be used only when these conditions apply:
16632
16633   * Only one precompiled header can be used in a particular
16634     compilation.
16635
16636   * A precompiled header can't be used once the first C token is seen.
16637     You can have preprocessor directives before a precompiled header;
16638     you can even include a precompiled header from inside another
16639     header, so long as there are no C tokens before the `#include'.
16640
16641   * The precompiled header file must be produced for the same language
16642     as the current compilation.  You can't use a C precompiled header
16643     for a C++ compilation.
16644
16645   * The precompiled header file must have been produced by the same
16646     compiler binary as the current compilation is using.
16647
16648   * Any macros defined before the precompiled header is included must
16649     either be defined in the same way as when the precompiled header
16650     was generated, or must not affect the precompiled header, which
16651     usually means that they don't appear in the precompiled header at
16652     all.
16653
16654     The `-D' option is one way to define a macro before a precompiled
16655     header is included; using a `#define' can also do it.  There are
16656     also some options that define macros implicitly, like `-O' and
16657     `-Wdeprecated'; the same rule applies to macros defined this way.
16658
16659   * If debugging information is output when using the precompiled
16660     header, using `-g' or similar, the same kind of debugging
16661     information must have been output when building the precompiled
16662     header.  However, a precompiled header built using `-g' can be
16663     used in a compilation when no debugging information is being
16664     output.
16665
16666   * The same `-m' options must generally be used when building and
16667     using the precompiled header.  *Note Submodel Options::, for any
16668     cases where this rule is relaxed.
16669
16670   * Each of the following options must be the same when building and
16671     using the precompiled header:
16672
16673          -fexceptions
16674
16675   * Some other command-line options starting with `-f', `-p', or `-O'
16676     must be defined in the same way as when the precompiled header was
16677     generated.  At present, it's not clear which options are safe to
16678     change and which are not; the safest choice is to use exactly the
16679     same options when generating and using the precompiled header.
16680     The following are known to be safe:
16681
16682          -fmessage-length=  -fpreprocessed  -fsched-interblock
16683          -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous
16684          -fsched-verbose=<number>  -fschedule-insns  -fvisibility=
16685          -pedantic-errors
16686
16687
16688 For all of these except the last, the compiler will automatically
16689ignore the precompiled header if the conditions aren't met.  If you
16690find an option combination that doesn't work and doesn't cause the
16691precompiled header to be ignored, please consider filing a bug report,
16692see *note Bugs::.
16693
16694 If you do use differing options when generating and using the
16695precompiled header, the actual behavior will be a mixture of the
16696behavior for the options.  For instance, if you use `-g' to generate
16697the precompiled header but not when using it, you may or may not get
16698debugging information for routines in the precompiled header.
16699
16700
16701File: gcc.info,  Node: C Implementation,  Next: C Extensions,  Prev: Invoking GCC,  Up: Top
16702
167034 C Implementation-defined behavior
16704***********************************
16705
16706A conforming implementation of ISO C is required to document its choice
16707of behavior in each of the areas that are designated "implementation
16708defined".  The following lists all such areas, along with the section
16709numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards.
16710Some areas are only implementation-defined in one version of the
16711standard.
16712
16713 Some choices depend on the externally determined ABI for the platform
16714(including standard character encodings) which GCC follows; these are
16715listed as "determined by ABI" below.  *Note Binary Compatibility:
16716Compatibility, and `http://gcc.gnu.org/readings.html'.  Some choices
16717are documented in the preprocessor manual.  *Note
16718Implementation-defined behavior: (cpp)Implementation-defined behavior.
16719Some choices are made by the library and operating system (or other
16720environment when compiling for a freestanding environment); refer to
16721their documentation for details.
16722
16723* Menu:
16724
16725* Translation implementation::
16726* Environment implementation::
16727* Identifiers implementation::
16728* Characters implementation::
16729* Integers implementation::
16730* Floating point implementation::
16731* Arrays and pointers implementation::
16732* Hints implementation::
16733* Structures unions enumerations and bit-fields implementation::
16734* Qualifiers implementation::
16735* Declarators implementation::
16736* Statements implementation::
16737* Preprocessing directives implementation::
16738* Library functions implementation::
16739* Architecture implementation::
16740* Locale-specific behavior implementation::
16741
16742
16743File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
16744
167454.1 Translation
16746===============
16747
16748   * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99
16749     5.1.1.3).'
16750
16751     Diagnostics consist of all the output sent to stderr by GCC.
16752
16753   * `Whether each nonempty sequence of white-space characters other
16754     than new-line is retained or replaced by one space character in
16755     translation phase 3 (C90 and C99 5.1.1.2).'
16756
16757     *Note Implementation-defined behavior: (cpp)Implementation-defined
16758     behavior.
16759
16760
16761
16762File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
16763
167644.2 Environment
16765===============
16766
16767The behavior of most of these points are dependent on the implementation
16768of the C library, and are not defined by GCC itself.
16769
16770   * `The mapping between physical source file multibyte characters and
16771     the source character set in translation phase 1 (C90 and C99
16772     5.1.1.2).'
16773
16774     *Note Implementation-defined behavior: (cpp)Implementation-defined
16775     behavior.
16776
16777
16778
16779File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
16780
167814.3 Identifiers
16782===============
16783
16784   * `Which additional multibyte characters may appear in identifiers
16785     and their correspondence to universal character names (C99 6.4.2).'
16786
16787     *Note Implementation-defined behavior: (cpp)Implementation-defined
16788     behavior.
16789
16790   * `The number of significant initial characters in an identifier
16791     (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).'
16792
16793     For internal names, all characters are significant.  For external
16794     names, the number of significant characters are defined by the
16795     linker; for almost all targets, all characters are significant.
16796
16797   * `Whether case distinctions are significant in an identifier with
16798     external linkage (C90 6.1.2).'
16799
16800     This is a property of the linker.  C99 requires that case
16801     distinctions are always significant in identifiers with external
16802     linkage and systems without this property are not supported by GCC.
16803
16804
16805
16806File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
16807
168084.4 Characters
16809==============
16810
16811   * `The number of bits in a byte (C90 3.4, C99 3.6).'
16812
16813     Determined by ABI.
16814
16815   * `The values of the members of the execution character set (C90 and
16816     C99 5.2.1).'
16817
16818     Determined by ABI.
16819
16820   * `The unique value of the member of the execution character set
16821     produced for each of the standard alphabetic escape sequences (C90
16822     and C99 5.2.2).'
16823
16824     Determined by ABI.
16825
16826   * `The value of a `char' object into which has been stored any
16827     character other than a member of the basic execution character set
16828     (C90 6.1.2.5, C99 6.2.5).'
16829
16830     Determined by ABI.
16831
16832   * `Which of `signed char' or `unsigned char' has the same range,
16833     representation, and behavior as "plain" `char' (C90 6.1.2.5, C90
16834     6.2.1.1, C99 6.2.5, C99 6.3.1.1).'
16835
16836     Determined by ABI.  The options `-funsigned-char' and
16837     `-fsigned-char' change the default.  *Note Options Controlling C
16838     Dialect: C Dialect Options.
16839
16840   * `The mapping of members of the source character set (in character
16841     constants and string literals) to members of the execution
16842     character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).'
16843
16844     Determined by ABI.
16845
16846   * `The value of an integer character constant containing more than
16847     one character or containing a character or escape sequence that
16848     does not map to a single-byte execution character (C90 6.1.3.4,
16849     C99 6.4.4.4).'
16850
16851     *Note Implementation-defined behavior: (cpp)Implementation-defined
16852     behavior.
16853
16854   * `The value of a wide character constant containing more than one
16855     multibyte character, or containing a multibyte character or escape
16856     sequence not represented in the extended execution character set
16857     (C90 6.1.3.4, C99 6.4.4.4).'
16858
16859     *Note Implementation-defined behavior: (cpp)Implementation-defined
16860     behavior.
16861
16862   * `The current locale used to convert a wide character constant
16863     consisting of a single multibyte character that maps to a member
16864     of the extended execution character set into a corresponding wide
16865     character code (C90 6.1.3.4, C99 6.4.4.4).'
16866
16867     *Note Implementation-defined behavior: (cpp)Implementation-defined
16868     behavior.
16869
16870   * `The current locale used to convert a wide string literal into
16871     corresponding wide character codes (C90 6.1.4, C99 6.4.5).'
16872
16873     *Note Implementation-defined behavior: (cpp)Implementation-defined
16874     behavior.
16875
16876   * `The value of a string literal containing a multibyte character or
16877     escape sequence not represented in the execution character set
16878     (C90 6.1.4, C99 6.4.5).'
16879
16880     *Note Implementation-defined behavior: (cpp)Implementation-defined
16881     behavior.
16882
16883
16884File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
16885
168864.5 Integers
16887============
16888
16889   * `Any extended integer types that exist in the implementation (C99
16890     6.2.5).'
16891
16892     GCC does not support any extended integer types.
16893
16894   * `Whether signed integer types are represented using sign and
16895     magnitude, two's complement, or one's complement, and whether the
16896     extraordinary value is a trap representation or an ordinary value
16897     (C99 6.2.6.2).'
16898
16899     GCC supports only two's complement integer types, and all bit
16900     patterns are ordinary values.
16901
16902   * `The rank of any extended integer type relative to another extended
16903     integer type with the same precision (C99 6.3.1.1).'
16904
16905     GCC does not support any extended integer types.
16906
16907   * `The result of, or the signal raised by, converting an integer to a
16908     signed integer type when the value cannot be represented in an
16909     object of that type (C90 6.2.1.2, C99 6.3.1.3).'
16910
16911     For conversion to a type of width N, the value is reduced modulo
16912     2^N to be within range of the type; no signal is raised.
16913
16914   * `The results of some bitwise operations on signed integers (C90
16915     6.3, C99 6.5).'
16916
16917     Bitwise operators act on the representation of the value including
16918     both the sign and value bits, where the sign bit is considered
16919     immediately above the highest-value value bit.  Signed `>>' acts
16920     on negative numbers by sign extension.
16921
16922     GCC does not use the latitude given in C99 only to treat certain
16923     aspects of signed `<<' as undefined, but this is subject to change.
16924
16925   * `The sign of the remainder on integer division (C90 6.3.5).'
16926
16927     GCC always follows the C99 requirement that the result of division
16928     is truncated towards zero.
16929
16930
16931
16932File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
16933
169344.6 Floating point
16935==================
16936
16937   * `The accuracy of the floating-point operations and of the library
16938     functions in `<math.h>' and `<complex.h>' that return
16939     floating-point results (C90 and C99 5.2.4.2.2).'
16940
16941     The accuracy is unknown.
16942
16943   * `The rounding behaviors characterized by non-standard values of
16944     `FLT_ROUNDS'  (C90 and C99 5.2.4.2.2).'
16945
16946     GCC does not use such values.
16947
16948   * `The evaluation methods characterized by non-standard negative
16949     values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).'
16950
16951     GCC does not use such values.
16952
16953   * `The direction of rounding when an integer is converted to a
16954     floating-point number that cannot exactly represent the original
16955     value (C90 6.2.1.3, C99 6.3.1.4).'
16956
16957     C99 Annex F is followed.
16958
16959   * `The direction of rounding when a floating-point number is
16960     converted to a narrower floating-point number (C90 6.2.1.4, C99
16961     6.3.1.5).'
16962
16963     C99 Annex F is followed.
16964
16965   * `How the nearest representable value or the larger or smaller
16966     representable value immediately adjacent to the nearest
16967     representable value is chosen for certain floating constants (C90
16968     6.1.3.1, C99 6.4.4.2).'
16969
16970     C99 Annex F is followed.
16971
16972   * `Whether and how floating expressions are contracted when not
16973     disallowed by the `FP_CONTRACT' pragma (C99 6.5).'
16974
16975     Expressions are currently only contracted if
16976     `-funsafe-math-optimizations' or `-ffast-math' are used.  This is
16977     subject to change.
16978
16979   * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).'
16980
16981     This pragma is not implemented, but the default is to "off" unless
16982     `-frounding-math' is used in which case it is "on".
16983
16984   * `Additional floating-point exceptions, rounding modes,
16985     environments, and classifications, and their macro names (C99 7.6,
16986     C99 7.12).'
16987
16988     This is dependent on the implementation of the C library, and is
16989     not defined by GCC itself.
16990
16991   * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).'
16992
16993     This pragma is not implemented.  Expressions are currently only
16994     contracted if `-funsafe-math-optimizations' or `-ffast-math' are
16995     used.  This is subject to change.
16996
16997   * `Whether the "inexact" floating-point exception can be raised when
16998     the rounded result actually does equal the mathematical result in
16999     an IEC 60559 conformant implementation (C99 F.9).'
17000
17001     This is dependent on the implementation of the C library, and is
17002     not defined by GCC itself.
17003
17004   * `Whether the "underflow" (and "inexact") floating-point exception
17005     can be raised when a result is tiny but not inexact in an IEC
17006     60559 conformant implementation (C99 F.9).'
17007
17008     This is dependent on the implementation of the C library, and is
17009     not defined by GCC itself.
17010
17011
17012
17013File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
17014
170154.7 Arrays and pointers
17016=======================
17017
17018   * `The result of converting a pointer to an integer or vice versa
17019     (C90 6.3.4, C99 6.3.2.3).'
17020
17021     A cast from pointer to integer discards most-significant bits if
17022     the pointer representation is larger than the integer type,
17023     sign-extends(1) if the pointer representation is smaller than the
17024     integer type, otherwise the bits are unchanged.
17025
17026     A cast from integer to pointer discards most-significant bits if
17027     the pointer representation is smaller than the integer type,
17028     extends according to the signedness of the integer type if the
17029     pointer representation is larger than the integer type, otherwise
17030     the bits are unchanged.
17031
17032     When casting from pointer to integer and back again, the resulting
17033     pointer must reference the same object as the original pointer,
17034     otherwise the behavior is undefined.  That is, one may not use
17035     integer arithmetic to avoid the undefined behavior of pointer
17036     arithmetic as proscribed in C99 6.5.6/8.
17037
17038   * `The size of the result of subtracting two pointers to elements of
17039     the same array (C90 6.3.6, C99 6.5.6).'
17040
17041     The value is as specified in the standard and the type is
17042     determined by the ABI.
17043
17044
17045 ---------- Footnotes ----------
17046
17047 (1) Future versions of GCC may zero-extend, or use a target-defined
17048`ptr_extend' pattern.  Do not rely on sign extension.
17049
17050
17051File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
17052
170534.8 Hints
17054=========
17055
17056   * `The extent to which suggestions made by using the `register'
17057     storage-class specifier are effective (C90 6.5.1, C99 6.7.1).'
17058
17059     The `register' specifier affects code generation only in these
17060     ways:
17061
17062        * When used as part of the register variable extension, see
17063          *note Explicit Reg Vars::.
17064
17065        * When `-O0' is in use, the compiler allocates distinct stack
17066          memory for all variables that do not have the `register'
17067          storage-class specifier; if `register' is specified, the
17068          variable may have a shorter lifespan than the code would
17069          indicate and may never be placed in memory.
17070
17071        * On some rare x86 targets, `setjmp' doesn't save the registers
17072          in all circumstances.  In those cases, GCC doesn't allocate
17073          any variables in registers unless they are marked `register'.
17074
17075
17076   * `The extent to which suggestions made by using the inline function
17077     specifier are effective (C99 6.7.4).'
17078
17079     GCC will not inline any functions if the `-fno-inline' option is
17080     used or if `-O0' is used.  Otherwise, GCC may still be unable to
17081     inline a function for many reasons; the `-Winline' option may be
17082     used to determine if a function has not been inlined and why not.
17083
17084
17085
17086File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
17087
170884.9 Structures, unions, enumerations, and bit-fields
17089====================================================
17090
17091   * `A member of a union object is accessed using a member of a
17092     different type (C90 6.3.2.3).'
17093
17094     The relevant bytes of the representation of the object are treated
17095     as an object of the type used for the access.  *Note
17096     Type-punning::.  This may be a trap representation.
17097
17098   * `Whether a "plain" `int' bit-field is treated as a `signed int'
17099     bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90
17100     6.5.2.1, C99 6.7.2, C99 6.7.2.1).'
17101
17102     By default it is treated as `signed int' but this may be changed
17103     by the `-funsigned-bitfields' option.
17104
17105   * `Allowable bit-field types other than `_Bool', `signed int', and
17106     `unsigned int' (C99 6.7.2.1).'
17107
17108     No other types are permitted in strictly conforming mode.
17109
17110   * `Whether a bit-field can straddle a storage-unit boundary (C90
17111     6.5.2.1, C99 6.7.2.1).'
17112
17113     Determined by ABI.
17114
17115   * `The order of allocation of bit-fields within a unit (C90 6.5.2.1,
17116     C99 6.7.2.1).'
17117
17118     Determined by ABI.
17119
17120   * `The alignment of non-bit-field members of structures (C90
17121     6.5.2.1, C99 6.7.2.1).'
17122
17123     Determined by ABI.
17124
17125   * `The integer type compatible with each enumerated type (C90
17126     6.5.2.2, C99 6.7.2.2).'
17127
17128     Normally, the type is `unsigned int' if there are no negative
17129     values in the enumeration, otherwise `int'.  If `-fshort-enums' is
17130     specified, then if there are negative values it is the first of
17131     `signed char', `short' and `int' that can represent all the
17132     values, otherwise it is the first of `unsigned char', `unsigned
17133     short' and `unsigned int' that can represent all the values.
17134
17135     On some targets, `-fshort-enums' is the default; this is
17136     determined by the ABI.
17137
17138
17139
17140File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
17141
171424.10 Qualifiers
17143===============
17144
17145   * `What constitutes an access to an object that has
17146     volatile-qualified type (C90 6.5.3, C99 6.7.3).'
17147
17148     Such an object is normally accessed by pointers and used for
17149     accessing hardware.  In most expressions, it is intuitively
17150     obvious what is a read and what is a write.  For example
17151
17152          volatile int *dst = SOMEVALUE;
17153          volatile int *src = SOMEOTHERVALUE;
17154          *dst = *src;
17155
17156     will cause a read of the volatile object pointed to by SRC and
17157     store the value into the volatile object pointed to by DST.  There
17158     is no guarantee that these reads and writes are atomic, especially
17159     for objects larger than `int'.
17160
17161     However, if the volatile storage is not being modified, and the
17162     value of the volatile storage is not used, then the situation is
17163     less obvious.  For example
17164
17165          volatile int *src = SOMEVALUE;
17166          *src;
17167
17168     According to the C standard, such an expression is an rvalue whose
17169     type is the unqualified version of its original type, i.e. `int'.
17170     Whether GCC interprets this as a read of the volatile object being
17171     pointed to or only as a request to evaluate the expression for its
17172     side-effects depends on this type.
17173
17174     If it is a scalar type, or on most targets an aggregate type whose
17175     only member object is of a scalar type, or a union type whose
17176     member objects are of scalar types, the expression is interpreted
17177     by GCC as a read of the volatile object; in the other cases, the
17178     expression is only evaluated for its side-effects.
17179
17180
17181
17182File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
17183
171844.11 Declarators
17185================
17186
17187   * `The maximum number of declarators that may modify an arithmetic,
17188     structure or union type (C90 6.5.4).'
17189
17190     GCC is only limited by available memory.
17191
17192
17193
17194File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation
17195
171964.12 Statements
17197===============
17198
17199   * `The maximum number of `case' values in a `switch' statement (C90
17200     6.6.4.2).'
17201
17202     GCC is only limited by available memory.
17203
17204
17205
17206File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation
17207
172084.13 Preprocessing directives
17209=============================
17210
17211*Note Implementation-defined behavior: (cpp)Implementation-defined
17212behavior, for details of these aspects of implementation-defined
17213behavior.
17214
17215   * `How sequences in both forms of header names are mapped to headers
17216     or external source file names (C90 6.1.7, C99 6.4.7).'
17217
17218   * `Whether the value of a character constant in a constant expression
17219     that controls conditional inclusion matches the value of the same
17220     character constant in the execution character set (C90 6.8.1, C99
17221     6.10.1).'
17222
17223   * `Whether the value of a single-character character constant in a
17224     constant expression that controls conditional inclusion may have a
17225     negative value (C90 6.8.1, C99 6.10.1).'
17226
17227   * `The places that are searched for an included `<>' delimited
17228     header, and how the places are specified or the header is
17229     identified (C90 6.8.2, C99 6.10.2).'
17230
17231   * `How the named source file is searched for in an included `""'
17232     delimited header (C90 6.8.2, C99 6.10.2).'
17233
17234   * `The method by which preprocessing tokens (possibly resulting from
17235     macro expansion) in a `#include' directive are combined into a
17236     header name (C90 6.8.2, C99 6.10.2).'
17237
17238   * `The nesting limit for `#include' processing (C90 6.8.2, C99
17239     6.10.2).'
17240
17241   * `Whether the `#' operator inserts a `\' character before the `\'
17242     character that begins a universal character name in a character
17243     constant or string literal (C99 6.10.3.2).'
17244
17245   * `The behavior on each recognized non-`STDC #pragma' directive (C90
17246     6.8.6, C99 6.10.6).'
17247
17248     *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by
17249     GCC on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
17250     details of target-specific pragmas.
17251
17252   * `The definitions for `__DATE__' and `__TIME__' when respectively,
17253     the date and time of translation are not available (C90 6.8.8, C99
17254     6.10.8).'
17255
17256
17257
17258File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
17259
172604.14 Library functions
17261======================
17262
17263The behavior of most of these points are dependent on the implementation
17264of the C library, and are not defined by GCC itself.
17265
17266   * `The null pointer constant to which the macro `NULL' expands (C90
17267     7.1.6, C99 7.17).'
17268
17269     In `<stddef.h>', `NULL' expands to `((void *)0)'.  GCC does not
17270     provide the other headers which define `NULL' and some library
17271     implementations may use other definitions in those headers.
17272
17273
17274
17275File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
17276
172774.15 Architecture
17278=================
17279
17280   * `The values or expressions assigned to the macros specified in the
17281     headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99
17282     5.2.4.2, C99 7.18.2, C99 7.18.3).'
17283
17284     Determined by ABI.
17285
17286   * `The number, order, and encoding of bytes in any object (when not
17287     explicitly specified in this International Standard) (C99
17288     6.2.6.1).'
17289
17290     Determined by ABI.
17291
17292   * `The value of the result of the `sizeof' operator (C90 6.3.3.4,
17293     C99 6.5.3.4).'
17294
17295     Determined by ABI.
17296
17297
17298
17299File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
17300
173014.16 Locale-specific behavior
17302=============================
17303
17304The behavior of these points are dependent on the implementation of the
17305C library, and are not defined by GCC itself.
17306
17307
17308File: gcc.info,  Node: C++ Implementation,  Next: C++ Extensions,  Prev: C Extensions,  Up: Top
17309
173105 C++ Implementation-defined behavior
17311*************************************
17312
17313A conforming implementation of ISO C++ is required to document its
17314choice of behavior in each of the areas that are designated
17315"implementation defined".  The following lists all such areas, along
17316with the section numbers from the ISO/IEC 14822:1998 and ISO/IEC
1731714822:2003 standards.  Some areas are only implementation-defined in
17318one version of the standard.
17319
17320 Some choices depend on the externally determined ABI for the platform
17321(including standard character encodings) which GCC follows; these are
17322listed as "determined by ABI" below.  *Note Binary Compatibility:
17323Compatibility, and `http://gcc.gnu.org/readings.html'.  Some choices
17324are documented in the preprocessor manual.  *Note
17325Implementation-defined behavior: (cpp)Implementation-defined behavior.
17326Some choices are documented in the corresponding document for the C
17327language.  *Note C Implementation::.  Some choices are made by the
17328library and operating system (or other environment when compiling for a
17329freestanding environment); refer to their documentation for details.
17330
17331* Menu:
17332
17333* Conditionally-supported behavior::
17334
17335
17336File: gcc.info,  Node: Conditionally-supported behavior,  Up: C++ Implementation
17337
173385.1 Conditionally-supported behavior
17339====================================
17340
17341`Each implementation shall include documentation that identifies all
17342conditionally-supported constructs that it does not support (C++0x
173431.4).'
17344
17345   * `Whether an argument of class type with a non-trivial copy
17346     constructor or destructor can be passed to ... (C++0x 5.2.2).'
17347
17348     Such argument passing is not supported.
17349
17350
17351
17352File: gcc.info,  Node: C Extensions,  Next: C++ Implementation,  Prev: C Implementation,  Up: Top
17353
173546 Extensions to the C Language Family
17355*************************************
17356
17357GNU C provides several language features not found in ISO standard C.
17358(The `-pedantic' option directs GCC to print a warning message if any
17359of these features is used.)  To test for the availability of these
17360features in conditional compilation, check for a predefined macro
17361`__GNUC__', which is always defined under GCC.
17362
17363 These extensions are available in C and Objective-C.  Most of them are
17364also available in C++.  *Note Extensions to the C++ Language: C++
17365Extensions, for extensions that apply _only_ to C++.
17366
17367 Some features that are in ISO C99 but not C90 or C++ are also, as
17368extensions, accepted by GCC in C90 mode and in C++.
17369
17370* Menu:
17371
17372* Statement Exprs::     Putting statements and declarations inside expressions.
17373* Local Labels::        Labels local to a block.
17374* Labels as Values::    Getting pointers to labels, and computed gotos.
17375* Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
17376* Constructing Calls::  Dispatching a call to another function.
17377* Typeof::              `typeof': referring to the type of an expression.
17378* Conditionals::        Omitting the middle operand of a `?:' expression.
17379* Long Long::           Double-word integers---`long long int'.
17380* Complex::             Data types for complex numbers.
17381* Floating Types::      Additional Floating Types.
17382* Half-Precision::      Half-Precision Floating Point.
17383* Decimal Float::       Decimal Floating Types.
17384* Hex Floats::          Hexadecimal floating-point constants.
17385* Fixed-Point::         Fixed-Point Types.
17386* Named Address Spaces::Named address spaces.
17387* Zero Length::         Zero-length arrays.
17388* Variable Length::     Arrays whose length is computed at run time.
17389* Empty Structures::    Structures with no members.
17390* Variadic Macros::     Macros with a variable number of arguments.
17391* Escaped Newlines::    Slightly looser rules for escaped newlines.
17392* Subscripting::        Any array can be subscripted, even if not an lvalue.
17393* Pointer Arith::       Arithmetic on `void'-pointers and function pointers.
17394* Initializers::        Non-constant initializers.
17395* Compound Literals::   Compound literals give structures, unions
17396                        or arrays as values.
17397* Designated Inits::    Labeling elements of initializers.
17398* Cast to Union::       Casting to union type from any member of the union.
17399* Case Ranges::         `case 1 ... 9' and such.
17400* Mixed Declarations::  Mixing declarations and code.
17401* Function Attributes:: Declaring that functions have no side effects,
17402                        or that they can never return.
17403* Attribute Syntax::    Formal syntax for attributes.
17404* Function Prototypes:: Prototype declarations and old-style definitions.
17405* C++ Comments::        C++ comments are recognized.
17406* Dollar Signs::        Dollar sign is allowed in identifiers.
17407* Character Escapes::   `\e' stands for the character <ESC>.
17408* Variable Attributes:: Specifying attributes of variables.
17409* Type Attributes::     Specifying attributes of types.
17410* Alignment::           Inquiring about the alignment of a type or variable.
17411* Inline::              Defining inline functions (as fast as macros).
17412* Extended Asm::        Assembler instructions with C expressions as operands.
17413                        (With them you can define ``built-in'' functions.)
17414* Constraints::         Constraints for asm operands
17415* Asm Labels::          Specifying the assembler name to use for a C symbol.
17416* Explicit Reg Vars::   Defining variables residing in specified registers.
17417* Alternate Keywords::  `__const__', `__asm__', etc., for header files.
17418* Incomplete Enums::    `enum foo;', with details to follow.
17419* Function Names::      Printable strings which are the name of the current
17420                        function.
17421* Return Address::      Getting the return or frame address of a function.
17422* Vector Extensions::   Using vector instructions through built-in functions.
17423* Offsetof::            Special syntax for implementing `offsetof'.
17424* Atomic Builtins::     Built-in functions for atomic memory access.
17425* Object Size Checking:: Built-in functions for limited buffer overflow
17426                        checking.
17427* Other Builtins::      Other built-in functions.
17428* Target Builtins::     Built-in functions specific to particular targets.
17429* Target Format Checks:: Format checks specific to particular targets.
17430* Pragmas::             Pragmas accepted by GCC.
17431* Unnamed Fields::      Unnamed struct/union fields within structs/unions.
17432* Thread-Local::        Per-thread variables.
17433* Binary constants::    Binary constants using the `0b' prefix.
17434
17435
17436File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
17437
174386.1 Statements and Declarations in Expressions
17439==============================================
17440
17441A compound statement enclosed in parentheses may appear as an expression
17442in GNU C.  This allows you to use loops, switches, and local variables
17443within an expression.
17444
17445 Recall that a compound statement is a sequence of statements surrounded
17446by braces; in this construct, parentheses go around the braces.  For
17447example:
17448
17449     ({ int y = foo (); int z;
17450        if (y > 0) z = y;
17451        else z = - y;
17452        z; })
17453
17454is a valid (though slightly more complex than necessary) expression for
17455the absolute value of `foo ()'.
17456
17457 The last thing in the compound statement should be an expression
17458followed by a semicolon; the value of this subexpression serves as the
17459value of the entire construct.  (If you use some other kind of statement
17460last within the braces, the construct has type `void', and thus
17461effectively no value.)
17462
17463 This feature is especially useful in making macro definitions "safe"
17464(so that they evaluate each operand exactly once).  For example, the
17465"maximum" function is commonly defined as a macro in standard C as
17466follows:
17467
17468     #define max(a,b) ((a) > (b) ? (a) : (b))
17469
17470But this definition computes either A or B twice, with bad results if
17471the operand has side effects.  In GNU C, if you know the type of the
17472operands (here taken as `int'), you can define the macro safely as
17473follows:
17474
17475     #define maxint(a,b) \
17476       ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
17477
17478 Embedded statements are not allowed in constant expressions, such as
17479the value of an enumeration constant, the width of a bit-field, or the
17480initial value of a static variable.
17481
17482 If you don't know the type of the operand, you can still do this, but
17483you must use `typeof' (*note Typeof::).
17484
17485 In G++, the result value of a statement expression undergoes array and
17486function pointer decay, and is returned by value to the enclosing
17487expression.  For instance, if `A' is a class, then
17488
17489             A a;
17490
17491             ({a;}).Foo ()
17492
17493will construct a temporary `A' object to hold the result of the
17494statement expression, and that will be used to invoke `Foo'.  Therefore
17495the `this' pointer observed by `Foo' will not be the address of `a'.
17496
17497 Any temporaries created within a statement within a statement
17498expression will be destroyed at the statement's end.  This makes
17499statement expressions inside macros slightly different from function
17500calls.  In the latter case temporaries introduced during argument
17501evaluation will be destroyed at the end of the statement that includes
17502the function call.  In the statement expression case they will be
17503destroyed during the statement expression.  For instance,
17504
17505     #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
17506     template<typename T> T function(T a) { T b = a; return b + 3; }
17507
17508     void foo ()
17509     {
17510       macro (X ());
17511       function (X ());
17512     }
17513
17514will have different places where temporaries are destroyed.  For the
17515`macro' case, the temporary `X' will be destroyed just after the
17516initialization of `b'.  In the `function' case that temporary will be
17517destroyed when the function returns.
17518
17519 These considerations mean that it is probably a bad idea to use
17520statement-expressions of this form in header files that are designed to
17521work with C++.  (Note that some versions of the GNU C Library contained
17522header files using statement-expression that lead to precisely this
17523bug.)
17524
17525 Jumping into a statement expression with `goto' or using a `switch'
17526statement outside the statement expression with a `case' or `default'
17527label inside the statement expression is not permitted.  Jumping into a
17528statement expression with a computed `goto' (*note Labels as Values::)
17529yields undefined behavior.  Jumping out of a statement expression is
17530permitted, but if the statement expression is part of a larger
17531expression then it is unspecified which other subexpressions of that
17532expression have been evaluated except where the language definition
17533requires certain subexpressions to be evaluated before or after the
17534statement expression.  In any case, as with a function call the
17535evaluation of a statement expression is not interleaved with the
17536evaluation of other parts of the containing expression.  For example,
17537
17538       foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
17539
17540will call `foo' and `bar1' and will not call `baz' but may or may not
17541call `bar2'.  If `bar2' is called, it will be called after `foo' and
17542before `bar1'
17543
17544
17545File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
17546
175476.2 Locally Declared Labels
17548===========================
17549
17550GCC allows you to declare "local labels" in any nested block scope.  A
17551local label is just like an ordinary label, but you can only reference
17552it (with a `goto' statement, or by taking its address) within the block
17553in which it was declared.
17554
17555 A local label declaration looks like this:
17556
17557     __label__ LABEL;
17558
17559or
17560
17561     __label__ LABEL1, LABEL2, /* ... */;
17562
17563 Local label declarations must come at the beginning of the block,
17564before any ordinary declarations or statements.
17565
17566 The label declaration defines the label _name_, but does not define
17567the label itself.  You must do this in the usual way, with `LABEL:',
17568within the statements of the statement expression.
17569
17570 The local label feature is useful for complex macros.  If a macro
17571contains nested loops, a `goto' can be useful for breaking out of them.
17572However, an ordinary label whose scope is the whole function cannot be
17573used: if the macro can be expanded several times in one function, the
17574label will be multiply defined in that function.  A local label avoids
17575this problem.  For example:
17576
17577     #define SEARCH(value, array, target)              \
17578     do {                                              \
17579       __label__ found;                                \
17580       typeof (target) _SEARCH_target = (target);      \
17581       typeof (*(array)) *_SEARCH_array = (array);     \
17582       int i, j;                                       \
17583       int value;                                      \
17584       for (i = 0; i < max; i++)                       \
17585         for (j = 0; j < max; j++)                     \
17586           if (_SEARCH_array[i][j] == _SEARCH_target)  \
17587             { (value) = i; goto found; }              \
17588       (value) = -1;                                   \
17589      found:;                                          \
17590     } while (0)
17591
17592 This could also be written using a statement-expression:
17593
17594     #define SEARCH(array, target)                     \
17595     ({                                                \
17596       __label__ found;                                \
17597       typeof (target) _SEARCH_target = (target);      \
17598       typeof (*(array)) *_SEARCH_array = (array);     \
17599       int i, j;                                       \
17600       int value;                                      \
17601       for (i = 0; i < max; i++)                       \
17602         for (j = 0; j < max; j++)                     \
17603           if (_SEARCH_array[i][j] == _SEARCH_target)  \
17604             { value = i; goto found; }                \
17605       value = -1;                                     \
17606      found:                                           \
17607       value;                                          \
17608     })
17609
17610 Local label declarations also make the labels they declare visible to
17611nested functions, if there are any.  *Note Nested Functions::, for
17612details.
17613
17614
17615File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
17616
176176.3 Labels as Values
17618====================
17619
17620You can get the address of a label defined in the current function (or
17621a containing function) with the unary operator `&&'.  The value has
17622type `void *'.  This value is a constant and can be used wherever a
17623constant of that type is valid.  For example:
17624
17625     void *ptr;
17626     /* ... */
17627     ptr = &&foo;
17628
17629 To use these values, you need to be able to jump to one.  This is done
17630with the computed goto statement(1), `goto *EXP;'.  For example,
17631
17632     goto *ptr;
17633
17634Any expression of type `void *' is allowed.
17635
17636 One way of using these constants is in initializing a static array that
17637will serve as a jump table:
17638
17639     static void *array[] = { &&foo, &&bar, &&hack };
17640
17641 Then you can select a label with indexing, like this:
17642
17643     goto *array[i];
17644
17645Note that this does not check whether the subscript is in bounds--array
17646indexing in C never does that.
17647
17648 Such an array of label values serves a purpose much like that of the
17649`switch' statement.  The `switch' statement is cleaner, so use that
17650rather than an array unless the problem does not fit a `switch'
17651statement very well.
17652
17653 Another use of label values is in an interpreter for threaded code.
17654The labels within the interpreter function can be stored in the
17655threaded code for super-fast dispatching.
17656
17657 You may not use this mechanism to jump to code in a different function.
17658If you do that, totally unpredictable things will happen.  The best way
17659to avoid this is to store the label address only in automatic variables
17660and never pass it as an argument.
17661
17662 An alternate way to write the above example is
17663
17664     static const int array[] = { &&foo - &&foo, &&bar - &&foo,
17665                                  &&hack - &&foo };
17666     goto *(&&foo + array[i]);
17667
17668This is more friendly to code living in shared libraries, as it reduces
17669the number of dynamic relocations that are needed, and by consequence,
17670allows the data to be read-only.
17671
17672 The `&&foo' expressions for the same label might have different values
17673if the containing function is inlined or cloned.  If a program relies
17674on them being always the same,
17675`__attribute__((__noinline__,__noclone__))' should be used to prevent
17676inlining and cloning.  If `&&foo' is used in a static variable
17677initializer, inlining and cloning is forbidden.
17678
17679 ---------- Footnotes ----------
17680
17681 (1) The analogous feature in Fortran is called an assigned goto, but
17682that name seems inappropriate in C, where one can do more than simply
17683store label addresses in label variables.
17684
17685
17686File: gcc.info,  Node: Nested Functions,  Next: Constructing Calls,  Prev: Labels as Values,  Up: C Extensions
17687
176886.4 Nested Functions
17689====================
17690
17691A "nested function" is a function defined inside another function.
17692(Nested functions are not supported for GNU C++.)  The nested function's
17693name is local to the block where it is defined.  For example, here we
17694define a nested function named `square', and call it twice:
17695
17696     foo (double a, double b)
17697     {
17698       double square (double z) { return z * z; }
17699
17700       return square (a) + square (b);
17701     }
17702
17703 The nested function can access all the variables of the containing
17704function that are visible at the point of its definition.  This is
17705called "lexical scoping".  For example, here we show a nested function
17706which uses an inherited variable named `offset':
17707
17708     bar (int *array, int offset, int size)
17709     {
17710       int access (int *array, int index)
17711         { return array[index + offset]; }
17712       int i;
17713       /* ... */
17714       for (i = 0; i < size; i++)
17715         /* ... */ access (array, i) /* ... */
17716     }
17717
17718 Nested function definitions are permitted within functions in the
17719places where variable definitions are allowed; that is, in any block,
17720mixed with the other declarations and statements in the block.
17721
17722 It is possible to call the nested function from outside the scope of
17723its name by storing its address or passing the address to another
17724function:
17725
17726     hack (int *array, int size)
17727     {
17728       void store (int index, int value)
17729         { array[index] = value; }
17730
17731       intermediate (store, size);
17732     }
17733
17734 Here, the function `intermediate' receives the address of `store' as
17735an argument.  If `intermediate' calls `store', the arguments given to
17736`store' are used to store into `array'.  But this technique works only
17737so long as the containing function (`hack', in this example) does not
17738exit.
17739
17740 If you try to call the nested function through its address after the
17741containing function has exited, all hell will break loose.  If you try
17742to call it after a containing scope level has exited, and if it refers
17743to some of the variables that are no longer in scope, you may be lucky,
17744but it's not wise to take the risk.  If, however, the nested function
17745does not refer to anything that has gone out of scope, you should be
17746safe.
17747
17748 GCC implements taking the address of a nested function using a
17749technique called "trampolines".  This technique was described in
17750`Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference
17751Proceedings, October 17-21, 1988).
17752
17753 A nested function can jump to a label inherited from a containing
17754function, provided the label was explicitly declared in the containing
17755function (*note Local Labels::).  Such a jump returns instantly to the
17756containing function, exiting the nested function which did the `goto'
17757and any intermediate functions as well.  Here is an example:
17758
17759     bar (int *array, int offset, int size)
17760     {
17761       __label__ failure;
17762       int access (int *array, int index)
17763         {
17764           if (index > size)
17765             goto failure;
17766           return array[index + offset];
17767         }
17768       int i;
17769       /* ... */
17770       for (i = 0; i < size; i++)
17771         /* ... */ access (array, i) /* ... */
17772       /* ... */
17773       return 0;
17774
17775      /* Control comes here from `access'
17776         if it detects an error.  */
17777      failure:
17778       return -1;
17779     }
17780
17781 A nested function always has no linkage.  Declaring one with `extern'
17782or `static' is erroneous.  If you need to declare the nested function
17783before its definition, use `auto' (which is otherwise meaningless for
17784function declarations).
17785
17786     bar (int *array, int offset, int size)
17787     {
17788       __label__ failure;
17789       auto int access (int *, int);
17790       /* ... */
17791       int access (int *array, int index)
17792         {
17793           if (index > size)
17794             goto failure;
17795           return array[index + offset];
17796         }
17797       /* ... */
17798     }
17799
17800
17801File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nested Functions,  Up: C Extensions
17802
178036.5 Constructing Function Calls
17804===============================
17805
17806Using the built-in functions described below, you can record the
17807arguments a function received, and call another function with the same
17808arguments, without knowing the number or types of the arguments.
17809
17810 You can also record the return value of that function call, and later
17811return that value, without knowing what data type the function tried to
17812return (as long as your caller expects that data type).
17813
17814 However, these built-in functions may interact badly with some
17815sophisticated features or other extensions of the language.  It is,
17816therefore, not recommended to use them outside very simple functions
17817acting as mere forwarders for their arguments.
17818
17819 -- Built-in Function: void * __builtin_apply_args ()
17820     This built-in function returns a pointer to data describing how to
17821     perform a call with the same arguments as were passed to the
17822     current function.
17823
17824     The function saves the arg pointer register, structure value
17825     address, and all registers that might be used to pass arguments to
17826     a function into a block of memory allocated on the stack.  Then it
17827     returns the address of that block.
17828
17829 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
17830          *ARGUMENTS, size_t SIZE)
17831     This built-in function invokes FUNCTION with a copy of the
17832     parameters described by ARGUMENTS and SIZE.
17833
17834     The value of ARGUMENTS should be the value returned by
17835     `__builtin_apply_args'.  The argument SIZE specifies the size of
17836     the stack argument data, in bytes.
17837
17838     This function returns a pointer to data describing how to return
17839     whatever value was returned by FUNCTION.  The data is saved in a
17840     block of memory allocated on the stack.
17841
17842     It is not always simple to compute the proper value for SIZE.  The
17843     value is used by `__builtin_apply' to compute the amount of data
17844     that should be pushed on the stack and copied from the incoming
17845     argument area.
17846
17847 -- Built-in Function: void __builtin_return (void *RESULT)
17848     This built-in function returns the value described by RESULT from
17849     the containing function.  You should specify, for RESULT, a value
17850     returned by `__builtin_apply'.
17851
17852 -- Built-in Function: __builtin_va_arg_pack ()
17853     This built-in function represents all anonymous arguments of an
17854     inline function.  It can be used only in inline functions which
17855     will be always inlined, never compiled as a separate function,
17856     such as those using `__attribute__ ((__always_inline__))' or
17857     `__attribute__ ((__gnu_inline__))' extern inline functions.  It
17858     must be only passed as last argument to some other function with
17859     variable arguments.  This is useful for writing small wrapper
17860     inlines for variable argument functions, when using preprocessor
17861     macros is undesirable.  For example:
17862          extern int myprintf (FILE *f, const char *format, ...);
17863          extern inline __attribute__ ((__gnu_inline__)) int
17864          myprintf (FILE *f, const char *format, ...)
17865          {
17866            int r = fprintf (f, "myprintf: ");
17867            if (r < 0)
17868              return r;
17869            int s = fprintf (f, format, __builtin_va_arg_pack ());
17870            if (s < 0)
17871              return s;
17872            return r + s;
17873          }
17874
17875 -- Built-in Function: __builtin_va_arg_pack_len ()
17876     This built-in function returns the number of anonymous arguments of
17877     an inline function.  It can be used only in inline functions which
17878     will be always inlined, never compiled as a separate function, such
17879     as those using `__attribute__ ((__always_inline__))' or
17880     `__attribute__ ((__gnu_inline__))' extern inline functions.  For
17881     example following will do link or runtime checking of open
17882     arguments for optimized code:
17883          #ifdef __OPTIMIZE__
17884          extern inline __attribute__((__gnu_inline__)) int
17885          myopen (const char *path, int oflag, ...)
17886          {
17887            if (__builtin_va_arg_pack_len () > 1)
17888              warn_open_too_many_arguments ();
17889
17890            if (__builtin_constant_p (oflag))
17891              {
17892                if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
17893                  {
17894                    warn_open_missing_mode ();
17895                    return __open_2 (path, oflag);
17896                  }
17897                return open (path, oflag, __builtin_va_arg_pack ());
17898              }
17899
17900            if (__builtin_va_arg_pack_len () < 1)
17901              return __open_2 (path, oflag);
17902
17903            return open (path, oflag, __builtin_va_arg_pack ());
17904          }
17905          #endif
17906
17907
17908File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
17909
179106.6 Referring to a Type with `typeof'
17911=====================================
17912
17913Another way to refer to the type of an expression is with `typeof'.
17914The syntax of using of this keyword looks like `sizeof', but the
17915construct acts semantically like a type name defined with `typedef'.
17916
17917 There are two ways of writing the argument to `typeof': with an
17918expression or with a type.  Here is an example with an expression:
17919
17920     typeof (x[0](1))
17921
17922This assumes that `x' is an array of pointers to functions; the type
17923described is that of the values of the functions.
17924
17925 Here is an example with a typename as the argument:
17926
17927     typeof (int *)
17928
17929Here the type described is that of pointers to `int'.
17930
17931 If you are writing a header file that must work when included in ISO C
17932programs, write `__typeof__' instead of `typeof'.  *Note Alternate
17933Keywords::.
17934
17935 A `typeof'-construct can be used anywhere a typedef name could be
17936used.  For example, you can use it in a declaration, in a cast, or
17937inside of `sizeof' or `typeof'.
17938
17939 The operand of `typeof' is evaluated for its side effects if and only
17940if it is an expression of variably modified type or the name of such a
17941type.
17942
17943 `typeof' is often useful in conjunction with the
17944statements-within-expressions feature.  Here is how the two together can
17945be used to define a safe "maximum" macro that operates on any
17946arithmetic type and evaluates each of its arguments exactly once:
17947
17948     #define max(a,b) \
17949       ({ typeof (a) _a = (a); \
17950           typeof (b) _b = (b); \
17951         _a > _b ? _a : _b; })
17952
17953 The reason for using names that start with underscores for the local
17954variables is to avoid conflicts with variable names that occur within
17955the expressions that are substituted for `a' and `b'.  Eventually we
17956hope to design a new form of declaration syntax that allows you to
17957declare variables whose scopes start only after their initializers;
17958this will be a more reliable way to prevent such conflicts.
17959
17960Some more examples of the use of `typeof':
17961
17962   * This declares `y' with the type of what `x' points to.
17963
17964          typeof (*x) y;
17965
17966   * This declares `y' as an array of such values.
17967
17968          typeof (*x) y[4];
17969
17970   * This declares `y' as an array of pointers to characters:
17971
17972          typeof (typeof (char *)[4]) y;
17973
17974     It is equivalent to the following traditional C declaration:
17975
17976          char *y[4];
17977
17978     To see the meaning of the declaration using `typeof', and why it
17979     might be a useful way to write, rewrite it with these macros:
17980
17981          #define pointer(T)  typeof(T *)
17982          #define array(T, N) typeof(T [N])
17983
17984     Now the declaration can be rewritten this way:
17985
17986          array (pointer (char), 4) y;
17987
17988     Thus, `array (pointer (char), 4)' is the type of arrays of 4
17989     pointers to `char'.
17990
17991 _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more
17992limited extension which permitted one to write
17993
17994     typedef T = EXPR;
17995
17996with the effect of declaring T to have the type of the expression EXPR.
17997This extension does not work with GCC 3 (versions between 3.0 and 3.2
17998will crash; 3.2.1 and later give an error).  Code which relies on it
17999should be rewritten to use `typeof':
18000
18001     typedef typeof(EXPR) T;
18002
18003This will work with all versions of GCC.
18004
18005
18006File: gcc.info,  Node: Conditionals,  Next: Long Long,  Prev: Typeof,  Up: C Extensions
18007
180086.7 Conditionals with Omitted Operands
18009======================================
18010
18011The middle operand in a conditional expression may be omitted.  Then if
18012the first operand is nonzero, its value is the value of the conditional
18013expression.
18014
18015 Therefore, the expression
18016
18017     x ? : y
18018
18019has the value of `x' if that is nonzero; otherwise, the value of `y'.
18020
18021 This example is perfectly equivalent to
18022
18023     x ? x : y
18024
18025In this simple case, the ability to omit the middle operand is not
18026especially useful.  When it becomes useful is when the first operand
18027does, or may (if it is a macro argument), contain a side effect.  Then
18028repeating the operand in the middle would perform the side effect
18029twice.  Omitting the middle operand uses the value already computed
18030without the undesirable effects of recomputing it.
18031
18032
18033File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: Conditionals,  Up: C Extensions
18034
180356.8 Double-Word Integers
18036========================
18037
18038ISO C99 supports data types for integers that are at least 64 bits wide,
18039and as an extension GCC supports them in C90 mode and in C++.  Simply
18040write `long long int' for a signed integer, or `unsigned long long int'
18041for an unsigned integer.  To make an integer constant of type `long
18042long int', add the suffix `LL' to the integer.  To make an integer
18043constant of type `unsigned long long int', add the suffix `ULL' to the
18044integer.
18045
18046 You can use these types in arithmetic like any other integer types.
18047Addition, subtraction, and bitwise boolean operations on these types
18048are open-coded on all types of machines.  Multiplication is open-coded
18049if the machine supports fullword-to-doubleword a widening multiply
18050instruction.  Division and shifts are open-coded only on machines that
18051provide special support.  The operations that are not open-coded use
18052special library routines that come with GCC.
18053
18054 There may be pitfalls when you use `long long' types for function
18055arguments, unless you declare function prototypes.  If a function
18056expects type `int' for its argument, and you pass a value of type `long
18057long int', confusion will result because the caller and the subroutine
18058will disagree about the number of bytes for the argument.  Likewise, if
18059the function expects `long long int' and you pass `int'.  The best way
18060to avoid such problems is to use prototypes.
18061
18062
18063File: gcc.info,  Node: Complex,  Next: Floating Types,  Prev: Long Long,  Up: C Extensions
18064
180656.9 Complex Numbers
18066===================
18067
18068ISO C99 supports complex floating data types, and as an extension GCC
18069supports them in C90 mode and in C++, and supports complex integer data
18070types which are not part of ISO C99.  You can declare complex types
18071using the keyword `_Complex'.  As an extension, the older GNU keyword
18072`__complex__' is also supported.
18073
18074 For example, `_Complex double x;' declares `x' as a variable whose
18075real part and imaginary part are both of type `double'.  `_Complex
18076short int y;' declares `y' to have real and imaginary parts of type
18077`short int'; this is not likely to be useful, but it shows that the set
18078of complex types is complete.
18079
18080 To write a constant with a complex data type, use the suffix `i' or
18081`j' (either one; they are equivalent).  For example, `2.5fi' has type
18082`_Complex float' and `3i' has type `_Complex int'.  Such a constant
18083always has a pure imaginary value, but you can form any complex value
18084you like by adding one to a real constant.  This is a GNU extension; if
18085you have an ISO C99 conforming C library (such as GNU libc), and want
18086to construct complex constants of floating type, you should include
18087`<complex.h>' and use the macros `I' or `_Complex_I' instead.
18088
18089 To extract the real part of a complex-valued expression EXP, write
18090`__real__ EXP'.  Likewise, use `__imag__' to extract the imaginary
18091part.  This is a GNU extension; for values of floating type, you should
18092use the ISO C99 functions `crealf', `creal', `creall', `cimagf',
18093`cimag' and `cimagl', declared in `<complex.h>' and also provided as
18094built-in functions by GCC.
18095
18096 The operator `~' performs complex conjugation when used on a value
18097with a complex type.  This is a GNU extension; for values of floating
18098type, you should use the ISO C99 functions `conjf', `conj' and `conjl',
18099declared in `<complex.h>' and also provided as built-in functions by
18100GCC.
18101
18102 GCC can allocate complex automatic variables in a noncontiguous
18103fashion; it's even possible for the real part to be in a register while
18104the imaginary part is on the stack (or vice-versa).  Only the DWARF2
18105debug info format can represent this, so use of DWARF2 is recommended.
18106If you are using the stabs debug info format, GCC describes a
18107noncontiguous complex variable as if it were two separate variables of
18108noncomplex type.  If the variable's actual name is `foo', the two
18109fictitious variables are named `foo$real' and `foo$imag'.  You can
18110examine and set these two fictitious variables with your debugger.
18111
18112
18113File: gcc.info,  Node: Floating Types,  Next: Half-Precision,  Prev: Complex,  Up: C Extensions
18114
181156.10 Additional Floating Types
18116==============================
18117
18118As an extension, the GNU C compiler supports additional floating types,
18119`__float80' and `__float128' to support 80bit (`XFmode') and 128 bit
18120(`TFmode') floating types.  Support for additional types includes the
18121arithmetic operators: add, subtract, multiply, divide; unary arithmetic
18122operators; relational operators; equality operators; and conversions to
18123and from integer and other floating types.  Use a suffix `w' or `W' in
18124a literal constant of type `__float80' and `q' or `Q' for `_float128'.
18125You can declare complex types using the corresponding internal complex
18126type, `XCmode' for `__float80' type and `TCmode' for `__float128' type:
18127
18128     typedef _Complex float __attribute__((mode(TC))) _Complex128;
18129     typedef _Complex float __attribute__((mode(XC))) _Complex80;
18130
18131 Not all targets support additional floating point types.  `__float80'
18132and `__float128' types are supported on i386, x86_64 and ia64 targets.
18133
18134
18135File: gcc.info,  Node: Half-Precision,  Next: Decimal Float,  Prev: Floating Types,  Up: C Extensions
18136
181376.11 Half-Precision Floating Point
18138==================================
18139
18140On ARM targets, GCC supports half-precision (16-bit) floating point via
18141the `__fp16' type.  You must enable this type explicitly with the
18142`-mfp16-format' command-line option in order to use it.
18143
18144 ARM supports two incompatible representations for half-precision
18145floating-point values.  You must choose one of the representations and
18146use it consistently in your program.
18147
18148 Specifying `-mfp16-format=ieee' selects the IEEE 754-2008 format.
18149This format can represent normalized values in the range of 2^-14 to
1815065504.  There are 11 bits of significand precision, approximately 3
18151decimal digits.
18152
18153 Specifying `-mfp16-format=alternative' selects the ARM alternative
18154format.  This representation is similar to the IEEE format, but does
18155not support infinities or NaNs.  Instead, the range of exponents is
18156extended, so that this format can represent normalized values in the
18157range of 2^-14 to 131008.
18158
18159 The `__fp16' type is a storage format only.  For purposes of
18160arithmetic and other operations, `__fp16' values in C or C++
18161expressions are automatically promoted to `float'.  In addition, you
18162cannot declare a function with a return value or parameters of type
18163`__fp16'.
18164
18165 Note that conversions from `double' to `__fp16' involve an
18166intermediate conversion to `float'.  Because of rounding, this can
18167sometimes produce a different result than a direct conversion.
18168
18169 ARM provides hardware support for conversions between `__fp16' and
18170`float' values as an extension to VFP and NEON (Advanced SIMD).  GCC
18171generates code using these hardware instructions if you compile with
18172options to select an FPU that provides them; for example,
18173`-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the
18174`-mfp16-format' option to select a half-precision format.
18175
18176 Language-level support for the `__fp16' data type is independent of
18177whether GCC generates code using hardware floating-point instructions.
18178In cases where hardware support is not specified, GCC implements
18179conversions between `__fp16' and `float' values as library calls.
18180
18181
18182File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Half-Precision,  Up: C Extensions
18183
181846.12 Decimal Floating Types
18185===========================
18186
18187As an extension, the GNU C compiler supports decimal floating types as
18188defined in the N1312 draft of ISO/IEC WDTR24732.  Support for decimal
18189floating types in GCC will evolve as the draft technical report changes.
18190Calling conventions for any target might also change.  Not all targets
18191support decimal floating types.
18192
18193 The decimal floating types are `_Decimal32', `_Decimal64', and
18194`_Decimal128'.  They use a radix of ten, unlike the floating types
18195`float', `double', and `long double' whose radix is not specified by
18196the C standard but is usually two.
18197
18198 Support for decimal floating types includes the arithmetic operators
18199add, subtract, multiply, divide; unary arithmetic operators; relational
18200operators; equality operators; and conversions to and from integer and
18201other floating types.  Use a suffix `df' or `DF' in a literal constant
18202of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL'
18203for `_Decimal128'.
18204
18205 GCC support of decimal float as specified by the draft technical report
18206is incomplete:
18207
18208   * When the value of a decimal floating type cannot be represented in
18209     the integer type to which it is being converted, the result is
18210     undefined rather than the result value specified by the draft
18211     technical report.
18212
18213   * GCC does not provide the C library functionality associated with
18214     `math.h', `fenv.h', `stdio.h', `stdlib.h', and `wchar.h', which
18215     must come from a separate C library implementation.  Because of
18216     this the GNU C compiler does not define macro `__STDC_DEC_FP__' to
18217     indicate that the implementation conforms to the technical report.
18218
18219 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by
18220the DWARF2 debug information format.
18221
18222
18223File: gcc.info,  Node: Hex Floats,  Next: Fixed-Point,  Prev: Decimal Float,  Up: C Extensions
18224
182256.13 Hex Floats
18226===============
18227
18228ISO C99 supports floating-point numbers written not only in the usual
18229decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3'
18230written in hexadecimal format.  As a GNU extension, GCC supports this
18231in C90 mode (except in some cases when strictly conforming) and in C++.
18232In that format the `0x' hex introducer and the `p' or `P' exponent
18233field are mandatory.  The exponent is a decimal number that indicates
18234the power of 2 by which the significant part will be multiplied.  Thus
18235`0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3'
18236is the same as `1.55e1'.
18237
18238 Unlike for floating-point numbers in the decimal notation the exponent
18239is always required in the hexadecimal notation.  Otherwise the compiler
18240would not be able to resolve the ambiguity of, e.g., `0x1.f'.  This
18241could mean `1.0f' or `1.9375' since `f' is also the extension for
18242floating-point constants of type `float'.
18243
18244
18245File: gcc.info,  Node: Fixed-Point,  Next: Named Address Spaces,  Prev: Hex Floats,  Up: C Extensions
18246
182476.14 Fixed-Point Types
18248======================
18249
18250As an extension, the GNU C compiler supports fixed-point types as
18251defined in the N1169 draft of ISO/IEC DTR 18037.  Support for
18252fixed-point types in GCC will evolve as the draft technical report
18253changes.  Calling conventions for any target might also change.  Not
18254all targets support fixed-point types.
18255
18256 The fixed-point types are `short _Fract', `_Fract', `long _Fract',
18257`long long _Fract', `unsigned short _Fract', `unsigned _Fract',
18258`unsigned long _Fract', `unsigned long long _Fract', `_Sat short
18259_Fract', `_Sat _Fract', `_Sat long _Fract', `_Sat long long _Fract',
18260`_Sat unsigned short _Fract', `_Sat unsigned _Fract', `_Sat unsigned
18261long _Fract', `_Sat unsigned long long _Fract', `short _Accum',
18262`_Accum', `long _Accum', `long long _Accum', `unsigned short _Accum',
18263`unsigned _Accum', `unsigned long _Accum', `unsigned long long _Accum',
18264`_Sat short _Accum', `_Sat _Accum', `_Sat long _Accum', `_Sat long long
18265_Accum', `_Sat unsigned short _Accum', `_Sat unsigned _Accum', `_Sat
18266unsigned long _Accum', `_Sat unsigned long long _Accum'.
18267
18268 Fixed-point data values contain fractional and optional integral parts.
18269The format of fixed-point data varies and depends on the target machine.
18270
18271 Support for fixed-point types includes:
18272   * prefix and postfix increment and decrement operators (`++', `--')
18273
18274   * unary arithmetic operators (`+', `-', `!')
18275
18276   * binary arithmetic operators (`+', `-', `*', `/')
18277
18278   * binary shift operators (`<<', `>>')
18279
18280   * relational operators (`<', `<=', `>=', `>')
18281
18282   * equality operators (`==', `!=')
18283
18284   * assignment operators (`+=', `-=', `*=', `/=', `<<=', `>>=')
18285
18286   * conversions to and from integer, floating-point, or fixed-point
18287     types
18288
18289 Use a suffix in a fixed-point literal constant:
18290   * `hr' or `HR' for `short _Fract' and `_Sat short _Fract'
18291
18292   * `r' or `R' for `_Fract' and `_Sat _Fract'
18293
18294   * `lr' or `LR' for `long _Fract' and `_Sat long _Fract'
18295
18296   * `llr' or `LLR' for `long long _Fract' and `_Sat long long _Fract'
18297
18298   * `uhr' or `UHR' for `unsigned short _Fract' and `_Sat unsigned
18299     short _Fract'
18300
18301   * `ur' or `UR' for `unsigned _Fract' and `_Sat unsigned _Fract'
18302
18303   * `ulr' or `ULR' for `unsigned long _Fract' and `_Sat unsigned long
18304     _Fract'
18305
18306   * `ullr' or `ULLR' for `unsigned long long _Fract' and `_Sat
18307     unsigned long long _Fract'
18308
18309   * `hk' or `HK' for `short _Accum' and `_Sat short _Accum'
18310
18311   * `k' or `K' for `_Accum' and `_Sat _Accum'
18312
18313   * `lk' or `LK' for `long _Accum' and `_Sat long _Accum'
18314
18315   * `llk' or `LLK' for `long long _Accum' and `_Sat long long _Accum'
18316
18317   * `uhk' or `UHK' for `unsigned short _Accum' and `_Sat unsigned
18318     short _Accum'
18319
18320   * `uk' or `UK' for `unsigned _Accum' and `_Sat unsigned _Accum'
18321
18322   * `ulk' or `ULK' for `unsigned long _Accum' and `_Sat unsigned long
18323     _Accum'
18324
18325   * `ullk' or `ULLK' for `unsigned long long _Accum' and `_Sat
18326     unsigned long long _Accum'
18327
18328 GCC support of fixed-point types as specified by the draft technical
18329report is incomplete:
18330
18331   * Pragmas to control overflow and rounding behaviors are not
18332     implemented.
18333
18334 Fixed-point types are supported by the DWARF2 debug information format.
18335
18336
18337File: gcc.info,  Node: Named Address Spaces,  Next: Zero Length,  Prev: Fixed-Point,  Up: C Extensions
18338
183396.15 Named address spaces
18340=========================
18341
18342As an extension, the GNU C compiler supports named address spaces as
18343defined in the N1275 draft of ISO/IEC DTR 18037.  Support for named
18344address spaces in GCC will evolve as the draft technical report changes.
18345Calling conventions for any target might also change.  At present, only
18346the SPU target supports other address spaces.  On the SPU target, for
18347example, variables may be declared as belonging to another address space
18348by qualifying the type with the `__ea' address space identifier:
18349
18350     extern int __ea i;
18351
18352 When the variable `i' is accessed, the compiler will generate special
18353code to access this variable.  It may use runtime library support, or
18354generate special machine instructions to access that address space.
18355
18356 The `__ea' identifier may be used exactly like any other C type
18357qualifier (e.g., `const' or `volatile').  See the N1275 document for
18358more details.
18359
18360
18361File: gcc.info,  Node: Zero Length,  Next: Variable Length,  Prev: Named Address Spaces,  Up: C Extensions
18362
183636.16 Arrays of Length Zero
18364==========================
18365
18366Zero-length arrays are allowed in GNU C.  They are very useful as the
18367last element of a structure which is really a header for a
18368variable-length object:
18369
18370     struct line {
18371       int length;
18372       char contents[0];
18373     };
18374
18375     struct line *thisline = (struct line *)
18376       malloc (sizeof (struct line) + this_length);
18377     thisline->length = this_length;
18378
18379 In ISO C90, you would have to give `contents' a length of 1, which
18380means either you waste space or complicate the argument to `malloc'.
18381
18382 In ISO C99, you would use a "flexible array member", which is slightly
18383different in syntax and semantics:
18384
18385   * Flexible array members are written as `contents[]' without the `0'.
18386
18387   * Flexible array members have incomplete type, and so the `sizeof'
18388     operator may not be applied.  As a quirk of the original
18389     implementation of zero-length arrays, `sizeof' evaluates to zero.
18390
18391   * Flexible array members may only appear as the last member of a
18392     `struct' that is otherwise non-empty.
18393
18394   * A structure containing a flexible array member, or a union
18395     containing such a structure (possibly recursively), may not be a
18396     member of a structure or an element of an array.  (However, these
18397     uses are permitted by GCC as extensions.)
18398
18399 GCC versions before 3.0 allowed zero-length arrays to be statically
18400initialized, as if they were flexible arrays.  In addition to those
18401cases that were useful, it also allowed initializations in situations
18402that would corrupt later data.  Non-empty initialization of zero-length
18403arrays is now treated like any case where there are more initializer
18404elements than the array holds, in that a suitable warning about "excess
18405elements in array" is given, and the excess elements (all of them, in
18406this case) are ignored.
18407
18408 Instead GCC allows static initialization of flexible array members.
18409This is equivalent to defining a new structure containing the original
18410structure followed by an array of sufficient size to contain the data.
18411I.e. in the following, `f1' is constructed as if it were declared like
18412`f2'.
18413
18414     struct f1 {
18415       int x; int y[];
18416     } f1 = { 1, { 2, 3, 4 } };
18417
18418     struct f2 {
18419       struct f1 f1; int data[3];
18420     } f2 = { { 1 }, { 2, 3, 4 } };
18421
18422The convenience of this extension is that `f1' has the desired type,
18423eliminating the need to consistently refer to `f2.f1'.
18424
18425 This has symmetry with normal static arrays, in that an array of
18426unknown size is also written with `[]'.
18427
18428 Of course, this extension only makes sense if the extra data comes at
18429the end of a top-level object, as otherwise we would be overwriting
18430data at subsequent offsets.  To avoid undue complication and confusion
18431with initialization of deeply nested arrays, we simply disallow any
18432non-empty initialization except when the structure is the top-level
18433object.  For example:
18434
18435     struct foo { int x; int y[]; };
18436     struct bar { struct foo z; };
18437
18438     struct foo a = { 1, { 2, 3, 4 } };        // Valid.
18439     struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
18440     struct bar c = { { 1, { } } };            // Valid.
18441     struct foo d[1] = { { 1 { 2, 3, 4 } } };  // Invalid.
18442
18443
18444File: gcc.info,  Node: Empty Structures,  Next: Variadic Macros,  Prev: Variable Length,  Up: C Extensions
18445
184466.17 Structures With No Members
18447===============================
18448
18449GCC permits a C structure to have no members:
18450
18451     struct empty {
18452     };
18453
18454 The structure will have size zero.  In C++, empty structures are part
18455of the language.  G++ treats empty structures as if they had a single
18456member of type `char'.
18457
18458
18459File: gcc.info,  Node: Variable Length,  Next: Empty Structures,  Prev: Zero Length,  Up: C Extensions
18460
184616.18 Arrays of Variable Length
18462==============================
18463
18464Variable-length automatic arrays are allowed in ISO C99, and as an
18465extension GCC accepts them in C90 mode and in C++.  These arrays are
18466declared like any other automatic arrays, but with a length that is not
18467a constant expression.  The storage is allocated at the point of
18468declaration and deallocated when the brace-level is exited.  For
18469example:
18470
18471     FILE *
18472     concat_fopen (char *s1, char *s2, char *mode)
18473     {
18474       char str[strlen (s1) + strlen (s2) + 1];
18475       strcpy (str, s1);
18476       strcat (str, s2);
18477       return fopen (str, mode);
18478     }
18479
18480 Jumping or breaking out of the scope of the array name deallocates the
18481storage.  Jumping into the scope is not allowed; you get an error
18482message for it.
18483
18484 You can use the function `alloca' to get an effect much like
18485variable-length arrays.  The function `alloca' is available in many
18486other C implementations (but not in all).  On the other hand,
18487variable-length arrays are more elegant.
18488
18489 There are other differences between these two methods.  Space allocated
18490with `alloca' exists until the containing _function_ returns.  The
18491space for a variable-length array is deallocated as soon as the array
18492name's scope ends.  (If you use both variable-length arrays and
18493`alloca' in the same function, deallocation of a variable-length array
18494will also deallocate anything more recently allocated with `alloca'.)
18495
18496 You can also use variable-length arrays as arguments to functions:
18497
18498     struct entry
18499     tester (int len, char data[len][len])
18500     {
18501       /* ... */
18502     }
18503
18504 The length of an array is computed once when the storage is allocated
18505and is remembered for the scope of the array in case you access it with
18506`sizeof'.
18507
18508 If you want to pass the array first and the length afterward, you can
18509use a forward declaration in the parameter list--another GNU extension.
18510
18511     struct entry
18512     tester (int len; char data[len][len], int len)
18513     {
18514       /* ... */
18515     }
18516
18517 The `int len' before the semicolon is a "parameter forward
18518declaration", and it serves the purpose of making the name `len' known
18519when the declaration of `data' is parsed.
18520
18521 You can write any number of such parameter forward declarations in the
18522parameter list.  They can be separated by commas or semicolons, but the
18523last one must end with a semicolon, which is followed by the "real"
18524parameter declarations.  Each forward declaration must match a "real"
18525declaration in parameter name and data type.  ISO C99 does not support
18526parameter forward declarations.
18527
18528
18529File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Empty Structures,  Up: C Extensions
18530
185316.19 Macros with a Variable Number of Arguments.
18532================================================
18533
18534In the ISO C standard of 1999, a macro can be declared to accept a
18535variable number of arguments much as a function can.  The syntax for
18536defining the macro is similar to that of a function.  Here is an
18537example:
18538
18539     #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
18540
18541 Here `...' is a "variable argument".  In the invocation of such a
18542macro, it represents the zero or more tokens until the closing
18543parenthesis that ends the invocation, including any commas.  This set of
18544tokens replaces the identifier `__VA_ARGS__' in the macro body wherever
18545it appears.  See the CPP manual for more information.
18546
18547 GCC has long supported variadic macros, and used a different syntax
18548that allowed you to give a name to the variable arguments just like any
18549other argument.  Here is an example:
18550
18551     #define debug(format, args...) fprintf (stderr, format, args)
18552
18553 This is in all ways equivalent to the ISO C example above, but arguably
18554more readable and descriptive.
18555
18556 GNU CPP has two further variadic macro extensions, and permits them to
18557be used with either of the above forms of macro definition.
18558
18559 In standard C, you are not allowed to leave the variable argument out
18560entirely; but you are allowed to pass an empty argument.  For example,
18561this invocation is invalid in ISO C, because there is no comma after
18562the string:
18563
18564     debug ("A message")
18565
18566 GNU CPP permits you to completely omit the variable arguments in this
18567way.  In the above examples, the compiler would complain, though since
18568the expansion of the macro still has the extra comma after the format
18569string.
18570
18571 To help solve this problem, CPP behaves specially for variable
18572arguments used with the token paste operator, `##'.  If instead you
18573write
18574
18575     #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
18576
18577 and if the variable arguments are omitted or empty, the `##' operator
18578causes the preprocessor to remove the comma before it.  If you do
18579provide some variable arguments in your macro invocation, GNU CPP does
18580not complain about the paste operation and instead places the variable
18581arguments after the comma.  Just like any other pasted macro argument,
18582these arguments are not macro expanded.
18583
18584
18585File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
18586
185876.20 Slightly Looser Rules for Escaped Newlines
18588===============================================
18589
18590Recently, the preprocessor has relaxed its treatment of escaped
18591newlines.  Previously, the newline had to immediately follow a
18592backslash.  The current implementation allows whitespace in the form of
18593spaces, horizontal and vertical tabs, and form feeds between the
18594backslash and the subsequent newline.  The preprocessor issues a
18595warning, but treats it as a valid escaped newline and combines the two
18596lines to form a single logical line.  This works within comments and
18597tokens, as well as between tokens.  Comments are _not_ treated as
18598whitespace for the purposes of this relaxation, since they have not yet
18599been replaced with spaces.
18600
18601
18602File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
18603
186046.21 Non-Lvalue Arrays May Have Subscripts
18605==========================================
18606
18607In ISO C99, arrays that are not lvalues still decay to pointers, and
18608may be subscripted, although they may not be modified or used after the
18609next sequence point and the unary `&' operator may not be applied to
18610them.  As an extension, GCC allows such arrays to be subscripted in C90
18611mode, though otherwise they do not decay to pointers outside C99 mode.
18612For example, this is valid in GNU C though not valid in C90:
18613
18614     struct foo {int a[4];};
18615
18616     struct foo f();
18617
18618     bar (int index)
18619     {
18620       return f().a[index];
18621     }
18622
18623
18624File: gcc.info,  Node: Pointer Arith,  Next: Initializers,  Prev: Subscripting,  Up: C Extensions
18625
186266.22 Arithmetic on `void'- and Function-Pointers
18627================================================
18628
18629In GNU C, addition and subtraction operations are supported on pointers
18630to `void' and on pointers to functions.  This is done by treating the
18631size of a `void' or of a function as 1.
18632
18633 A consequence of this is that `sizeof' is also allowed on `void' and
18634on function types, and returns 1.
18635
18636 The option `-Wpointer-arith' requests a warning if these extensions
18637are used.
18638
18639
18640File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointer Arith,  Up: C Extensions
18641
186426.23 Non-Constant Initializers
18643==============================
18644
18645As in standard C++ and ISO C99, the elements of an aggregate
18646initializer for an automatic variable are not required to be constant
18647expressions in GNU C.  Here is an example of an initializer with
18648run-time varying elements:
18649
18650     foo (float f, float g)
18651     {
18652       float beat_freqs[2] = { f-g, f+g };
18653       /* ... */
18654     }
18655
18656
18657File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
18658
186596.24 Compound Literals
18660======================
18661
18662ISO C99 supports compound literals.  A compound literal looks like a
18663cast containing an initializer.  Its value is an object of the type
18664specified in the cast, containing the elements specified in the
18665initializer; it is an lvalue.  As an extension, GCC supports compound
18666literals in C90 mode and in C++.
18667
18668 Usually, the specified type is a structure.  Assume that `struct foo'
18669and `structure' are declared as shown:
18670
18671     struct foo {int a; char b[2];} structure;
18672
18673Here is an example of constructing a `struct foo' with a compound
18674literal:
18675
18676     structure = ((struct foo) {x + y, 'a', 0});
18677
18678This is equivalent to writing the following:
18679
18680     {
18681       struct foo temp = {x + y, 'a', 0};
18682       structure = temp;
18683     }
18684
18685 You can also construct an array.  If all the elements of the compound
18686literal are (made up of) simple constant expressions, suitable for use
18687in initializers of objects of static storage duration, then the compound
18688literal can be coerced to a pointer to its first element and used in
18689such an initializer, as shown here:
18690
18691     char **foo = (char *[]) { "x", "y", "z" };
18692
18693 Compound literals for scalar types and union types are is also
18694allowed, but then the compound literal is equivalent to a cast.
18695
18696 As a GNU extension, GCC allows initialization of objects with static
18697storage duration by compound literals (which is not possible in ISO
18698C99, because the initializer is not a constant).  It is handled as if
18699the object was initialized only with the bracket enclosed list if the
18700types of the compound literal and the object match.  The initializer
18701list of the compound literal must be constant.  If the object being
18702initialized has array type of unknown size, the size is determined by
18703compound literal size.
18704
18705     static struct foo x = (struct foo) {1, 'a', 'b'};
18706     static int y[] = (int []) {1, 2, 3};
18707     static int z[] = (int [3]) {1};
18708
18709The above lines are equivalent to the following:
18710     static struct foo x = {1, 'a', 'b'};
18711     static int y[] = {1, 2, 3};
18712     static int z[] = {1, 0, 0};
18713
18714
18715File: gcc.info,  Node: Designated Inits,  Next: Cast to Union,  Prev: Compound Literals,  Up: C Extensions
18716
187176.25 Designated Initializers
18718============================
18719
18720Standard C90 requires the elements of an initializer to appear in a
18721fixed order, the same as the order of the elements in the array or
18722structure being initialized.
18723
18724 In ISO C99 you can give the elements in any order, specifying the array
18725indices or structure field names they apply to, and GNU C allows this as
18726an extension in C90 mode as well.  This extension is not implemented in
18727GNU C++.
18728
18729 To specify an array index, write `[INDEX] =' before the element value.
18730For example,
18731
18732     int a[6] = { [4] = 29, [2] = 15 };
18733
18734is equivalent to
18735
18736     int a[6] = { 0, 0, 15, 0, 29, 0 };
18737
18738The index values must be constant expressions, even if the array being
18739initialized is automatic.
18740
18741 An alternative syntax for this which has been obsolete since GCC 2.5
18742but GCC still accepts is to write `[INDEX]' before the element value,
18743with no `='.
18744
18745 To initialize a range of elements to the same value, write `[FIRST ...
18746LAST] = VALUE'.  This is a GNU extension.  For example,
18747
18748     int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
18749
18750If the value in it has side-effects, the side-effects will happen only
18751once, not for each initialized field by the range initializer.
18752
18753Note that the length of the array is the highest value specified plus
18754one.
18755
18756 In a structure initializer, specify the name of a field to initialize
18757with `.FIELDNAME =' before the element value.  For example, given the
18758following structure,
18759
18760     struct point { int x, y; };
18761
18762the following initialization
18763
18764     struct point p = { .y = yvalue, .x = xvalue };
18765
18766is equivalent to
18767
18768     struct point p = { xvalue, yvalue };
18769
18770 Another syntax which has the same meaning, obsolete since GCC 2.5, is
18771`FIELDNAME:', as shown here:
18772
18773     struct point p = { y: yvalue, x: xvalue };
18774
18775 The `[INDEX]' or `.FIELDNAME' is known as a "designator".  You can
18776also use a designator (or the obsolete colon syntax) when initializing
18777a union, to specify which element of the union should be used.  For
18778example,
18779
18780     union foo { int i; double d; };
18781
18782     union foo f = { .d = 4 };
18783
18784will convert 4 to a `double' to store it in the union using the second
18785element.  By contrast, casting 4 to type `union foo' would store it
18786into the union as the integer `i', since it is an integer.  (*Note Cast
18787to Union::.)
18788
18789 You can combine this technique of naming elements with ordinary C
18790initialization of successive elements.  Each initializer element that
18791does not have a designator applies to the next consecutive element of
18792the array or structure.  For example,
18793
18794     int a[6] = { [1] = v1, v2, [4] = v4 };
18795
18796is equivalent to
18797
18798     int a[6] = { 0, v1, v2, 0, v4, 0 };
18799
18800 Labeling the elements of an array initializer is especially useful
18801when the indices are characters or belong to an `enum' type.  For
18802example:
18803
18804     int whitespace[256]
18805       = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
18806           ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
18807
18808 You can also write a series of `.FIELDNAME' and `[INDEX]' designators
18809before an `=' to specify a nested subobject to initialize; the list is
18810taken relative to the subobject corresponding to the closest
18811surrounding brace pair.  For example, with the `struct point'
18812declaration above:
18813
18814     struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
18815
18816If the same field is initialized multiple times, it will have value from
18817the last initialization.  If any such overridden initialization has
18818side-effect, it is unspecified whether the side-effect happens or not.
18819Currently, GCC will discard them and issue a warning.
18820
18821
18822File: gcc.info,  Node: Case Ranges,  Next: Mixed Declarations,  Prev: Cast to Union,  Up: C Extensions
18823
188246.26 Case Ranges
18825================
18826
18827You can specify a range of consecutive values in a single `case' label,
18828like this:
18829
18830     case LOW ... HIGH:
18831
18832This has the same effect as the proper number of individual `case'
18833labels, one for each integer value from LOW to HIGH, inclusive.
18834
18835 This feature is especially useful for ranges of ASCII character codes:
18836
18837     case 'A' ... 'Z':
18838
18839 *Be careful:* Write spaces around the `...', for otherwise it may be
18840parsed wrong when you use it with integer values.  For example, write
18841this:
18842
18843     case 1 ... 5:
18844
18845rather than this:
18846
18847     case 1...5:
18848
18849
18850File: gcc.info,  Node: Cast to Union,  Next: Case Ranges,  Prev: Designated Inits,  Up: C Extensions
18851
188526.27 Cast to a Union Type
18853=========================
18854
18855A cast to union type is similar to other casts, except that the type
18856specified is a union type.  You can specify the type either with `union
18857TAG' or with a typedef name.  A cast to union is actually a constructor
18858though, not a cast, and hence does not yield an lvalue like normal
18859casts.  (*Note Compound Literals::.)
18860
18861 The types that may be cast to the union type are those of the members
18862of the union.  Thus, given the following union and variables:
18863
18864     union foo { int i; double d; };
18865     int x;
18866     double y;
18867
18868both `x' and `y' can be cast to type `union foo'.
18869
18870 Using the cast as the right-hand side of an assignment to a variable of
18871union type is equivalent to storing in a member of the union:
18872
18873     union foo u;
18874     /* ... */
18875     u = (union foo) x  ==  u.i = x
18876     u = (union foo) y  ==  u.d = y
18877
18878 You can also use the union cast as a function argument:
18879
18880     void hack (union foo);
18881     /* ... */
18882     hack ((union foo) x);
18883
18884
18885File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Case Ranges,  Up: C Extensions
18886
188876.28 Mixed Declarations and Code
18888================================
18889
18890ISO C99 and ISO C++ allow declarations and code to be freely mixed
18891within compound statements.  As an extension, GCC also allows this in
18892C90 mode.  For example, you could do:
18893
18894     int i;
18895     /* ... */
18896     i++;
18897     int j = i + 2;
18898
18899 Each identifier is visible from where it is declared until the end of
18900the enclosing block.
18901
18902
18903File: gcc.info,  Node: Function Attributes,  Next: Attribute Syntax,  Prev: Mixed Declarations,  Up: C Extensions
18904
189056.29 Declaring Attributes of Functions
18906======================================
18907
18908In GNU C, you declare certain things about functions called in your
18909program which help the compiler optimize function calls and check your
18910code more carefully.
18911
18912 The keyword `__attribute__' allows you to specify special attributes
18913when making a declaration.  This keyword is followed by an attribute
18914specification inside double parentheses.  The following attributes are
18915currently defined for functions on all targets: `aligned',
18916`alloc_size', `noreturn', `returns_twice', `noinline', `noclone',
18917`always_inline', `flatten', `pure', `const', `nothrow', `sentinel',
18918`format', `format_arg', `no_instrument_function', `section',
18919`constructor', `destructor', `used', `unused', `deprecated', `weak',
18920`malloc', `alias', `warn_unused_result', `nonnull', `gnu_inline',
18921`externally_visible', `hot', `cold', `artificial', `error' and
18922`warning'.  Several other attributes are defined for functions on
18923particular target systems.  Other attributes, including `section' are
18924supported for variables declarations (*note Variable Attributes::) and
18925for types (*note Type Attributes::).
18926
18927 GCC plugins may provide their own attributes.
18928
18929 You may also specify attributes with `__' preceding and following each
18930keyword.  This allows you to use them in header files without being
18931concerned about a possible macro of the same name.  For example, you
18932may use `__noreturn__' instead of `noreturn'.
18933
18934 *Note Attribute Syntax::, for details of the exact syntax for using
18935attributes.
18936
18937`alias ("TARGET")'
18938     The `alias' attribute causes the declaration to be emitted as an
18939     alias for another symbol, which must be specified.  For instance,
18940
18941          void __f () { /* Do something. */; }
18942          void f () __attribute__ ((weak, alias ("__f")));
18943
18944     defines `f' to be a weak alias for `__f'.  In C++, the mangled
18945     name for the target must be used.  It is an error if `__f' is not
18946     defined in the same translation unit.
18947
18948     Not all target machines support this attribute.
18949
18950`aligned (ALIGNMENT)'
18951     This attribute specifies a minimum alignment for the function,
18952     measured in bytes.
18953
18954     You cannot use this attribute to decrease the alignment of a
18955     function, only to increase it.  However, when you explicitly
18956     specify a function alignment this will override the effect of the
18957     `-falign-functions' (*note Optimize Options::) option for this
18958     function.
18959
18960     Note that the effectiveness of `aligned' attributes may be limited
18961     by inherent limitations in your linker.  On many systems, the
18962     linker is only able to arrange for functions to be aligned up to a
18963     certain maximum alignment.  (For some linkers, the maximum
18964     supported alignment may be very very small.)  See your linker
18965     documentation for further information.
18966
18967     The `aligned' attribute can also be used for variables and fields
18968     (*note Variable Attributes::.)
18969
18970`alloc_size'
18971     The `alloc_size' attribute is used to tell the compiler that the
18972     function return value points to memory, where the size is given by
18973     one or two of the functions parameters.  GCC uses this information
18974     to improve the correctness of `__builtin_object_size'.
18975
18976     The function parameter(s) denoting the allocated size are
18977     specified by one or two integer arguments supplied to the
18978     attribute.  The allocated size is either the value of the single
18979     function argument specified or the product of the two function
18980     arguments specified.  Argument numbering starts at one.
18981
18982     For instance,
18983
18984          void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2)))
18985          void my_realloc(void*, size_t) __attribute__((alloc_size(2)))
18986
18987     declares that my_calloc will return memory of the size given by
18988     the product of parameter 1 and 2 and that my_realloc will return
18989     memory of the size given by parameter 2.
18990
18991`always_inline'
18992     Generally, functions are not inlined unless optimization is
18993     specified.  For functions declared inline, this attribute inlines
18994     the function even if no optimization level was specified.
18995
18996`gnu_inline'
18997     This attribute should be used with a function which is also
18998     declared with the `inline' keyword.  It directs GCC to treat the
18999     function as if it were defined in gnu90 mode even when compiling
19000     in C99 or gnu99 mode.
19001
19002     If the function is declared `extern', then this definition of the
19003     function is used only for inlining.  In no case is the function
19004     compiled as a standalone function, not even if you take its address
19005     explicitly.  Such an address becomes an external reference, as if
19006     you had only declared the function, and had not defined it.  This
19007     has almost the effect of a macro.  The way to use this is to put a
19008     function definition in a header file with this attribute, and put
19009     another copy of the function, without `extern', in a library file.
19010     The definition in the header file will cause most calls to the
19011     function to be inlined.  If any uses of the function remain, they
19012     will refer to the single copy in the library.  Note that the two
19013     definitions of the functions need not be precisely the same,
19014     although if they do not have the same effect your program may
19015     behave oddly.
19016
19017     In C, if the function is neither `extern' nor `static', then the
19018     function is compiled as a standalone function, as well as being
19019     inlined where possible.
19020
19021     This is how GCC traditionally handled functions declared `inline'.
19022     Since ISO C99 specifies a different semantics for `inline', this
19023     function attribute is provided as a transition measure and as a
19024     useful feature in its own right.  This attribute is available in
19025     GCC 4.1.3 and later.  It is available if either of the
19026     preprocessor macros `__GNUC_GNU_INLINE__' or
19027     `__GNUC_STDC_INLINE__' are defined.  *Note An Inline Function is
19028     As Fast As a Macro: Inline.
19029
19030     In C++, this attribute does not depend on `extern' in any way, but
19031     it still requires the `inline' keyword to enable its special
19032     behavior.
19033
19034`artificial'
19035     This attribute is useful for small inline wrappers which if
19036     possible should appear during debugging as a unit, depending on
19037     the debug info format it will either mean marking the function as
19038     artificial or using the caller location for all instructions
19039     within the inlined body.
19040
19041`bank_switch'
19042     When added to an interrupt handler with the M32C port, causes the
19043     prologue and epilogue to use bank switching to preserve the
19044     registers rather than saving them on the stack.
19045
19046`flatten'
19047     Generally, inlining into a function is limited.  For a function
19048     marked with this attribute, every call inside this function will
19049     be inlined, if possible.  Whether the function itself is
19050     considered for inlining depends on its size and the current
19051     inlining parameters.
19052
19053`error ("MESSAGE")'
19054     If this attribute is used on a function declaration and a call to
19055     such a function is not eliminated through dead code elimination or
19056     other optimizations, an error which will include MESSAGE will be
19057     diagnosed.  This is useful for compile time checking, especially
19058     together with `__builtin_constant_p' and inline functions where
19059     checking the inline function arguments is not possible through
19060     `extern char [(condition) ? 1 : -1];' tricks.  While it is
19061     possible to leave the function undefined and thus invoke a link
19062     failure, when using this attribute the problem will be diagnosed
19063     earlier and with exact location of the call even in presence of
19064     inline functions or when not emitting debugging information.
19065
19066`warning ("MESSAGE")'
19067     If this attribute is used on a function declaration and a call to
19068     such a function is not eliminated through dead code elimination or
19069     other optimizations, a warning which will include MESSAGE will be
19070     diagnosed.  This is useful for compile time checking, especially
19071     together with `__builtin_constant_p' and inline functions.  While
19072     it is possible to define the function with a message in
19073     `.gnu.warning*' section, when using this attribute the problem
19074     will be diagnosed earlier and with exact location of the call even
19075     in presence of inline functions or when not emitting debugging
19076     information.
19077
19078`cdecl'
19079     On the Intel 386, the `cdecl' attribute causes the compiler to
19080     assume that the calling function will pop off the stack space used
19081     to pass arguments.  This is useful to override the effects of the
19082     `-mrtd' switch.
19083
19084`const'
19085     Many functions do not examine any values except their arguments,
19086     and have no effects except the return value.  Basically this is
19087     just slightly more strict class than the `pure' attribute below,
19088     since function is not allowed to read global memory.
19089
19090     Note that a function that has pointer arguments and examines the
19091     data pointed to must _not_ be declared `const'.  Likewise, a
19092     function that calls a non-`const' function usually must not be
19093     `const'.  It does not make sense for a `const' function to return
19094     `void'.
19095
19096     The attribute `const' is not implemented in GCC versions earlier
19097     than 2.5.  An alternative way to declare that a function has no
19098     side effects, which works in the current version and in some older
19099     versions, is as follows:
19100
19101          typedef int intfn ();
19102
19103          extern const intfn square;
19104
19105     This approach does not work in GNU C++ from 2.6.0 on, since the
19106     language specifies that the `const' must be attached to the return
19107     value.
19108
19109`constructor'
19110`destructor'
19111`constructor (PRIORITY)'
19112`destructor (PRIORITY)'
19113     The `constructor' attribute causes the function to be called
19114     automatically before execution enters `main ()'.  Similarly, the
19115     `destructor' attribute causes the function to be called
19116     automatically after `main ()' has completed or `exit ()' has been
19117     called.  Functions with these attributes are useful for
19118     initializing data that will be used implicitly during the
19119     execution of the program.
19120
19121     You may provide an optional integer priority to control the order
19122     in which constructor and destructor functions are run.  A
19123     constructor with a smaller priority number runs before a
19124     constructor with a larger priority number; the opposite
19125     relationship holds for destructors.  So, if you have a constructor
19126     that allocates a resource and a destructor that deallocates the
19127     same resource, both functions typically have the same priority.
19128     The priorities for constructor and destructor functions are the
19129     same as those specified for namespace-scope C++ objects (*note C++
19130     Attributes::).
19131
19132     These attributes are not currently implemented for Objective-C.
19133
19134`deprecated'
19135`deprecated (MSG)'
19136     The `deprecated' attribute results in a warning if the function is
19137     used anywhere in the source file.  This is useful when identifying
19138     functions that are expected to be removed in a future version of a
19139     program.  The warning also includes the location of the declaration
19140     of the deprecated function, to enable users to easily find further
19141     information about why the function is deprecated, or what they
19142     should do instead.  Note that the warnings only occurs for uses:
19143
19144          int old_fn () __attribute__ ((deprecated));
19145          int old_fn ();
19146          int (*fn_ptr)() = old_fn;
19147
19148     results in a warning on line 3 but not line 2.  The optional msg
19149     argument, which must be a string, will be printed in the warning if
19150     present.
19151
19152     The `deprecated' attribute can also be used for variables and
19153     types (*note Variable Attributes::, *note Type Attributes::.)
19154
19155`disinterrupt'
19156     On MeP targets, this attribute causes the compiler to emit
19157     instructions to disable interrupts for the duration of the given
19158     function.
19159
19160`dllexport'
19161     On Microsoft Windows targets and Symbian OS targets the
19162     `dllexport' attribute causes the compiler to provide a global
19163     pointer to a pointer in a DLL, so that it can be referenced with
19164     the `dllimport' attribute.  On Microsoft Windows targets, the
19165     pointer name is formed by combining `_imp__' and the function or
19166     variable name.
19167
19168     You can use `__declspec(dllexport)' as a synonym for
19169     `__attribute__ ((dllexport))' for compatibility with other
19170     compilers.
19171
19172     On systems that support the `visibility' attribute, this attribute
19173     also implies "default" visibility.  It is an error to explicitly
19174     specify any other visibility.
19175
19176     Currently, the `dllexport' attribute is ignored for inlined
19177     functions, unless the `-fkeep-inline-functions' flag has been
19178     used.  The attribute is also ignored for undefined symbols.
19179
19180     When applied to C++ classes, the attribute marks defined
19181     non-inlined member functions and static data members as exports.
19182     Static consts initialized in-class are not marked unless they are
19183     also defined out-of-class.
19184
19185     For Microsoft Windows targets there are alternative methods for
19186     including the symbol in the DLL's export table such as using a
19187     `.def' file with an `EXPORTS' section or, with GNU ld, using the
19188     `--export-all' linker flag.
19189
19190`dllimport'
19191     On Microsoft Windows and Symbian OS targets, the `dllimport'
19192     attribute causes the compiler to reference a function or variable
19193     via a global pointer to a pointer that is set up by the DLL
19194     exporting the symbol.  The attribute implies `extern'.  On
19195     Microsoft Windows targets, the pointer name is formed by combining
19196     `_imp__' and the function or variable name.
19197
19198     You can use `__declspec(dllimport)' as a synonym for
19199     `__attribute__ ((dllimport))' for compatibility with other
19200     compilers.
19201
19202     On systems that support the `visibility' attribute, this attribute
19203     also implies "default" visibility.  It is an error to explicitly
19204     specify any other visibility.
19205
19206     Currently, the attribute is ignored for inlined functions.  If the
19207     attribute is applied to a symbol _definition_, an error is
19208     reported.  If a symbol previously declared `dllimport' is later
19209     defined, the attribute is ignored in subsequent references, and a
19210     warning is emitted.  The attribute is also overridden by a
19211     subsequent declaration as `dllexport'.
19212
19213     When applied to C++ classes, the attribute marks non-inlined
19214     member functions and static data members as imports.  However, the
19215     attribute is ignored for virtual methods to allow creation of
19216     vtables using thunks.
19217
19218     On the SH Symbian OS target the `dllimport' attribute also has
19219     another affect--it can cause the vtable and run-time type
19220     information for a class to be exported.  This happens when the
19221     class has a dllimport'ed constructor or a non-inline, non-pure
19222     virtual function and, for either of those two conditions, the
19223     class also has an inline constructor or destructor and has a key
19224     function that is defined in the current translation unit.
19225
19226     For Microsoft Windows based targets the use of the `dllimport'
19227     attribute on functions is not necessary, but provides a small
19228     performance benefit by eliminating a thunk in the DLL.  The use of
19229     the `dllimport' attribute on imported variables was required on
19230     older versions of the GNU linker, but can now be avoided by
19231     passing the `--enable-auto-import' switch to the GNU linker.  As
19232     with functions, using the attribute for a variable eliminates a
19233     thunk in the DLL.
19234
19235     One drawback to using this attribute is that a pointer to a
19236     _variable_ marked as `dllimport' cannot be used as a constant
19237     address. However, a pointer to a _function_ with the `dllimport'
19238     attribute can be used as a constant initializer; in this case, the
19239     address of a stub function in the import lib is referenced.  On
19240     Microsoft Windows targets, the attribute can be disabled for
19241     functions by setting the `-mnop-fun-dllimport' flag.
19242
19243`eightbit_data'
19244     Use this attribute on the H8/300, H8/300H, and H8S to indicate
19245     that the specified variable should be placed into the eight bit
19246     data section.  The compiler will generate more efficient code for
19247     certain operations on data in the eight bit data area.  Note the
19248     eight bit data area is limited to 256 bytes of data.
19249
19250     You must use GAS and GLD from GNU binutils version 2.7 or later for
19251     this attribute to work correctly.
19252
19253`exception_handler'
19254     Use this attribute on the Blackfin to indicate that the specified
19255     function is an exception handler.  The compiler will generate
19256     function entry and exit sequences suitable for use in an exception
19257     handler when this attribute is present.
19258
19259`externally_visible'
19260     This attribute, attached to a global variable or function,
19261     nullifies the effect of the `-fwhole-program' command-line option,
19262     so the object remains visible outside the current compilation unit.
19263
19264`far'
19265     On 68HC11 and 68HC12 the `far' attribute causes the compiler to
19266     use a calling convention that takes care of switching memory banks
19267     when entering and leaving a function.  This calling convention is
19268     also the default when using the `-mlong-calls' option.
19269
19270     On 68HC12 the compiler will use the `call' and `rtc' instructions
19271     to call and return from a function.
19272
19273     On 68HC11 the compiler will generate a sequence of instructions to
19274     invoke a board-specific routine to switch the memory bank and call
19275     the real function.  The board-specific routine simulates a `call'.
19276     At the end of a function, it will jump to a board-specific routine
19277     instead of using `rts'.  The board-specific return routine
19278     simulates the `rtc'.
19279
19280     On MeP targets this causes the compiler to use a calling convention
19281     which assumes the called function is too far away for the built-in
19282     addressing modes.
19283
19284`fast_interrupt'
19285     Use this attribute on the M32C and RX ports to indicate that the
19286     specified function is a fast interrupt handler.  This is just like
19287     the `interrupt' attribute, except that `freit' is used to return
19288     instead of `reit'.
19289
19290`fastcall'
19291     On the Intel 386, the `fastcall' attribute causes the compiler to
19292     pass the first argument (if of integral type) in the register ECX
19293     and the second argument (if of integral type) in the register EDX.
19294     Subsequent and other typed arguments are passed on the stack.  The
19295     called function will pop the arguments off the stack.  If the
19296     number of arguments is variable all arguments are pushed on the
19297     stack.
19298
19299`format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
19300     The `format' attribute specifies that a function takes `printf',
19301     `scanf', `strftime' or `strfmon' style arguments which should be
19302     type-checked against a format string.  For example, the
19303     declaration:
19304
19305          extern int
19306          my_printf (void *my_object, const char *my_format, ...)
19307                __attribute__ ((format (printf, 2, 3)));
19308
19309     causes the compiler to check the arguments in calls to `my_printf'
19310     for consistency with the `printf' style format string argument
19311     `my_format'.
19312
19313     The parameter ARCHETYPE determines how the format string is
19314     interpreted, and should be `printf', `scanf', `strftime',
19315     `gnu_printf', `gnu_scanf', `gnu_strftime' or `strfmon'.  (You can
19316     also use `__printf__', `__scanf__', `__strftime__' or
19317     `__strfmon__'.)  On MinGW targets, `ms_printf', `ms_scanf', and
19318     `ms_strftime' are also present.  ARCHTYPE values such as `printf'
19319     refer to the formats accepted by the system's C run-time library,
19320     while `gnu_' values always refer to the formats accepted by the
19321     GNU C Library.  On Microsoft Windows targets, `ms_' values refer
19322     to the formats accepted by the `msvcrt.dll' library.  The
19323     parameter STRING-INDEX specifies which argument is the format
19324     string argument (starting from 1), while FIRST-TO-CHECK is the
19325     number of the first argument to check against the format string.
19326     For functions where the arguments are not available to be checked
19327     (such as `vprintf'), specify the third parameter as zero.  In this
19328     case the compiler only checks the format string for consistency.
19329     For `strftime' formats, the third parameter is required to be zero.
19330     Since non-static C++ methods have an implicit `this' argument, the
19331     arguments of such methods should be counted from two, not one, when
19332     giving values for STRING-INDEX and FIRST-TO-CHECK.
19333
19334     In the example above, the format string (`my_format') is the second
19335     argument of the function `my_print', and the arguments to check
19336     start with the third argument, so the correct parameters for the
19337     format attribute are 2 and 3.
19338
19339     The `format' attribute allows you to identify your own functions
19340     which take format strings as arguments, so that GCC can check the
19341     calls to these functions for errors.  The compiler always (unless
19342     `-ffreestanding' or `-fno-builtin' is used) checks formats for the
19343     standard library functions `printf', `fprintf', `sprintf',
19344     `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and
19345     `vsprintf' whenever such warnings are requested (using
19346     `-Wformat'), so there is no need to modify the header file
19347     `stdio.h'.  In C99 mode, the functions `snprintf', `vsnprintf',
19348     `vscanf', `vfscanf' and `vsscanf' are also checked.  Except in
19349     strictly conforming C standard modes, the X/Open function
19350     `strfmon' is also checked as are `printf_unlocked' and
19351     `fprintf_unlocked'.  *Note Options Controlling C Dialect: C
19352     Dialect Options.
19353
19354     The target may provide additional types of format checks.  *Note
19355     Format Checks Specific to Particular Target Machines: Target
19356     Format Checks.
19357
19358`format_arg (STRING-INDEX)'
19359     The `format_arg' attribute specifies that a function takes a format
19360     string for a `printf', `scanf', `strftime' or `strfmon' style
19361     function and modifies it (for example, to translate it into
19362     another language), so the result can be passed to a `printf',
19363     `scanf', `strftime' or `strfmon' style function (with the
19364     remaining arguments to the format function the same as they would
19365     have been for the unmodified string).  For example, the
19366     declaration:
19367
19368          extern char *
19369          my_dgettext (char *my_domain, const char *my_format)
19370                __attribute__ ((format_arg (2)));
19371
19372     causes the compiler to check the arguments in calls to a `printf',
19373     `scanf', `strftime' or `strfmon' type function, whose format
19374     string argument is a call to the `my_dgettext' function, for
19375     consistency with the format string argument `my_format'.  If the
19376     `format_arg' attribute had not been specified, all the compiler
19377     could tell in such calls to format functions would be that the
19378     format string argument is not constant; this would generate a
19379     warning when `-Wformat-nonliteral' is used, but the calls could
19380     not be checked without the attribute.
19381
19382     The parameter STRING-INDEX specifies which argument is the format
19383     string argument (starting from one).  Since non-static C++ methods
19384     have an implicit `this' argument, the arguments of such methods
19385     should be counted from two.
19386
19387     The `format-arg' attribute allows you to identify your own
19388     functions which modify format strings, so that GCC can check the
19389     calls to `printf', `scanf', `strftime' or `strfmon' type function
19390     whose operands are a call to one of your own function.  The
19391     compiler always treats `gettext', `dgettext', and `dcgettext' in
19392     this manner except when strict ISO C support is requested by
19393     `-ansi' or an appropriate `-std' option, or `-ffreestanding' or
19394     `-fno-builtin' is used.  *Note Options Controlling C Dialect: C
19395     Dialect Options.
19396
19397`function_vector'
19398     Use this attribute on the H8/300, H8/300H, and H8S to indicate
19399     that the specified function should be called through the function
19400     vector.  Calling a function through the function vector will
19401     reduce code size, however; the function vector has a limited size
19402     (maximum 128 entries on the H8/300 and 64 entries on the H8/300H
19403     and H8S) and shares space with the interrupt vector.
19404
19405     In SH2A target, this attribute declares a function to be called
19406     using the TBR relative addressing mode.  The argument to this
19407     attribute is the entry number of the same function in a vector
19408     table containing all the TBR relative addressable functions.  For
19409     the successful jump, register TBR should contain the start address
19410     of this TBR relative vector table.  In the startup routine of the
19411     user application, user needs to care of this TBR register
19412     initialization.  The TBR relative vector table can have at max 256
19413     function entries.  The jumps to these functions will be generated
19414     using a SH2A specific, non delayed branch instruction JSR/N
19415     @(disp8,TBR).  You must use GAS and GLD from GNU binutils version
19416     2.7 or later for this attribute to work correctly.
19417
19418     Please refer the example of M16C target, to see the use of this
19419     attribute while declaring a function,
19420
19421     In an application, for a function being called once, this
19422     attribute will save at least 8 bytes of code; and if other
19423     successive calls are being made to the same function, it will save
19424     2 bytes of code per each of these calls.
19425
19426     On M16C/M32C targets, the `function_vector' attribute declares a
19427     special page subroutine call function. Use of this attribute
19428     reduces the code size by 2 bytes for each call generated to the
19429     subroutine. The argument to the attribute is the vector number
19430     entry from the special page vector table which contains the 16
19431     low-order bits of the subroutine's entry address. Each vector
19432     table has special page number (18 to 255) which are used in `jsrs'
19433     instruction.  Jump addresses of the routines are generated by
19434     adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
19435     M32C targets), to the 2 byte addresses set in the vector table.
19436     Therefore you need to ensure that all the special page vector
19437     routines should get mapped within the address range 0x0F0000 to
19438     0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).
19439
19440     In the following example 2 bytes will be saved for each call to
19441     function `foo'.
19442
19443          void foo (void) __attribute__((function_vector(0x18)));
19444          void foo (void)
19445          {
19446          }
19447
19448          void bar (void)
19449          {
19450              foo();
19451          }
19452
19453     If functions are defined in one file and are called in another
19454     file, then be sure to write this declaration in both files.
19455
19456     This attribute is ignored for R8C target.
19457
19458`interrupt'
19459     Use this attribute on the ARM, AVR, CRX, M32C, M32R/D, m68k, MeP,
19460     MIPS, RX and Xstormy16 ports to indicate that the specified
19461     function is an interrupt handler.  The compiler will generate
19462     function entry and exit sequences suitable for use in an interrupt
19463     handler when this attribute is present.
19464
19465     Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S,
19466     and SH processors can be specified via the `interrupt_handler'
19467     attribute.
19468
19469     Note, on the AVR, interrupts will be enabled inside the function.
19470
19471     Note, for the ARM, you can specify the kind of interrupt to be
19472     handled by adding an optional parameter to the interrupt attribute
19473     like this:
19474
19475          void f () __attribute__ ((interrupt ("IRQ")));
19476
19477     Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT
19478     and UNDEF.
19479
19480     On ARMv7-M the interrupt type is ignored, and the attribute means
19481     the function may be called with a word aligned stack pointer.
19482
19483     On MIPS targets, you can use the following attributes to modify
19484     the behavior of an interrupt handler:
19485    `use_shadow_register_set'
19486          Assume that the handler uses a shadow register set, instead of
19487          the main general-purpose registers.
19488
19489    `keep_interrupts_masked'
19490          Keep interrupts masked for the whole function.  Without this
19491          attribute, GCC tries to reenable interrupts for as much of
19492          the function as it can.
19493
19494    `use_debug_exception_return'
19495          Return using the `deret' instruction.  Interrupt handlers
19496          that don't have this attribute return using `eret' instead.
19497
19498     You can use any combination of these attributes, as shown below:
19499          void __attribute__ ((interrupt)) v0 ();
19500          void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
19501          void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
19502          void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
19503          void __attribute__ ((interrupt, use_shadow_register_set,
19504                               keep_interrupts_masked)) v4 ();
19505          void __attribute__ ((interrupt, use_shadow_register_set,
19506                               use_debug_exception_return)) v5 ();
19507          void __attribute__ ((interrupt, keep_interrupts_masked,
19508                               use_debug_exception_return)) v6 ();
19509          void __attribute__ ((interrupt, use_shadow_register_set,
19510                               keep_interrupts_masked,
19511                               use_debug_exception_return)) v7 ();
19512
19513`interrupt_handler'
19514     Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S,
19515     and SH to indicate that the specified function is an interrupt
19516     handler.  The compiler will generate function entry and exit
19517     sequences suitable for use in an interrupt handler when this
19518     attribute is present.
19519
19520`interrupt_thread'
19521     Use this attribute on fido, a subarchitecture of the m68k, to
19522     indicate that the specified function is an interrupt handler that
19523     is designed to run as a thread.  The compiler omits generate
19524     prologue/epilogue sequences and replaces the return instruction
19525     with a `sleep' instruction.  This attribute is available only on
19526     fido.
19527
19528`isr'
19529     Use this attribute on ARM to write Interrupt Service Routines.
19530     This is an alias to the `interrupt' attribute above.
19531
19532`kspisusp'
19533     When used together with `interrupt_handler', `exception_handler'
19534     or `nmi_handler', code will be generated to load the stack pointer
19535     from the USP register in the function prologue.
19536
19537`l1_text'
19538     This attribute specifies a function to be placed into L1
19539     Instruction SRAM. The function will be put into a specific section
19540     named `.l1.text'.  With `-mfdpic', function calls with a such
19541     function as the callee or caller will use inlined PLT.
19542
19543`l2'
19544     On the Blackfin, this attribute specifies a function to be placed
19545     into L2 SRAM. The function will be put into a specific section
19546     named `.l1.text'. With `-mfdpic', callers of such functions will
19547     use an inlined PLT.
19548
19549`long_call/short_call'
19550     This attribute specifies how a particular function is called on
19551     ARM.  Both attributes override the `-mlong-calls' (*note ARM
19552     Options::) command line switch and `#pragma long_calls' settings.
19553     The `long_call' attribute indicates that the function might be far
19554     away from the call site and require a different (more expensive)
19555     calling sequence.   The `short_call' attribute always places the
19556     offset to the function from the call site into the `BL'
19557     instruction directly.
19558
19559`longcall/shortcall'
19560     On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute
19561     indicates that the function might be far away from the call site
19562     and require a different (more expensive) calling sequence.  The
19563     `shortcall' attribute indicates that the function is always close
19564     enough for the shorter calling sequence to be used.  These
19565     attributes override both the `-mlongcall' switch and, on the
19566     RS/6000 and PowerPC, the `#pragma longcall' setting.
19567
19568     *Note RS/6000 and PowerPC Options::, for more information on
19569     whether long calls are necessary.
19570
19571`long_call/near/far'
19572     These attributes specify how a particular function is called on
19573     MIPS.  The attributes override the `-mlong-calls' (*note MIPS
19574     Options::) command-line switch.  The `long_call' and `far'
19575     attributes are synonyms, and cause the compiler to always call the
19576     function by first loading its address into a register, and then
19577     using the contents of that register.  The `near' attribute has the
19578     opposite effect; it specifies that non-PIC calls should be made
19579     using the more efficient `jal' instruction.
19580
19581`malloc'
19582     The `malloc' attribute is used to tell the compiler that a function
19583     may be treated as if any non-`NULL' pointer it returns cannot
19584     alias any other pointer valid when the function returns.  This
19585     will often improve optimization.  Standard functions with this
19586     property include `malloc' and `calloc'.  `realloc'-like functions
19587     have this property as long as the old pointer is never referred to
19588     (including comparing it to the new pointer) after the function
19589     returns a non-`NULL' value.
19590
19591`mips16/nomips16'
19592     On MIPS targets, you can use the `mips16' and `nomips16' function
19593     attributes to locally select or turn off MIPS16 code generation.
19594     A function with the `mips16' attribute is emitted as MIPS16 code,
19595     while MIPS16 code generation is disabled for functions with the
19596     `nomips16' attribute.  These attributes override the `-mips16' and
19597     `-mno-mips16' options on the command line (*note MIPS Options::).
19598
19599     When compiling files containing mixed MIPS16 and non-MIPS16 code,
19600     the preprocessor symbol `__mips16' reflects the setting on the
19601     command line, not that within individual functions.  Mixed MIPS16
19602     and non-MIPS16 code may interact badly with some GCC extensions
19603     such as `__builtin_apply' (*note Constructing Calls::).
19604
19605`model (MODEL-NAME)'
19606     On the M32R/D, use this attribute to set the addressability of an
19607     object, and of the code generated for a function.  The identifier
19608     MODEL-NAME is one of `small', `medium', or `large', representing
19609     each of the code models.
19610
19611     Small model objects live in the lower 16MB of memory (so that their
19612     addresses can be loaded with the `ld24' instruction), and are
19613     callable with the `bl' instruction.
19614
19615     Medium model objects may live anywhere in the 32-bit address space
19616     (the compiler will generate `seth/add3' instructions to load their
19617     addresses), and are callable with the `bl' instruction.
19618
19619     Large model objects may live anywhere in the 32-bit address space
19620     (the compiler will generate `seth/add3' instructions to load their
19621     addresses), and may not be reachable with the `bl' instruction
19622     (the compiler will generate the much slower `seth/add3/jl'
19623     instruction sequence).
19624
19625     On IA-64, use this attribute to set the addressability of an
19626     object.  At present, the only supported identifier for MODEL-NAME
19627     is `small', indicating addressability via "small" (22-bit)
19628     addresses (so that their addresses can be loaded with the `addl'
19629     instruction).  Caveat: such addressing is by definition not
19630     position independent and hence this attribute must not be used for
19631     objects defined by shared libraries.
19632
19633`ms_abi/sysv_abi'
19634     On 64-bit x86_64-*-* targets, you can use an ABI attribute to
19635     indicate which calling convention should be used for a function.
19636     The `ms_abi' attribute tells the compiler to use the Microsoft
19637     ABI, while the `sysv_abi' attribute tells the compiler to use the
19638     ABI used on GNU/Linux and other systems.  The default is to use
19639     the Microsoft ABI when targeting Windows.  On all other systems,
19640     the default is the AMD ABI.
19641
19642     Note, the `ms_abi' attribute for Windows targets currently requires
19643     the `-maccumulate-outgoing-args' option.
19644
19645`ms_hook_prologue'
19646     On 32 bit i[34567]86-*-* targets, you can use this function
19647     attribute to make gcc generate the "hot-patching" function
19648     prologue used in Win32 API functions in Microsoft Windows XP
19649     Service Pack 2 and newer. This requires support for the swap
19650     suffix in the assembler. (GNU Binutils 2.19.51 or later)
19651
19652`naked'
19653     Use this attribute on the ARM, AVR, IP2K, RX and SPU ports to
19654     indicate that the specified function does not need
19655     prologue/epilogue sequences generated by the compiler.  It is up
19656     to the programmer to provide these sequences. The only statements
19657     that can be safely included in naked functions are `asm'
19658     statements that do not have operands.  All other statements,
19659     including declarations of local variables, `if' statements, and so
19660     forth, should be avoided.  Naked functions should be used to
19661     implement the body of an assembly function, while allowing the
19662     compiler to construct the requisite function declaration for the
19663     assembler.
19664
19665`near'
19666     On 68HC11 and 68HC12 the `near' attribute causes the compiler to
19667     use the normal calling convention based on `jsr' and `rts'.  This
19668     attribute can be used to cancel the effect of the `-mlong-calls'
19669     option.
19670
19671     On MeP targets this attribute causes the compiler to assume the
19672     called function is close enough to use the normal calling
19673     convention, overriding the `-mtf' command line option.
19674
19675`nesting'
19676     Use this attribute together with `interrupt_handler',
19677     `exception_handler' or `nmi_handler' to indicate that the function
19678     entry code should enable nested interrupts or exceptions.
19679
19680`nmi_handler'
19681     Use this attribute on the Blackfin to indicate that the specified
19682     function is an NMI handler.  The compiler will generate function
19683     entry and exit sequences suitable for use in an NMI handler when
19684     this attribute is present.
19685
19686`no_instrument_function'
19687     If `-finstrument-functions' is given, profiling function calls will
19688     be generated at entry and exit of most user-compiled functions.
19689     Functions with this attribute will not be so instrumented.
19690
19691`noinline'
19692     This function attribute prevents a function from being considered
19693     for inlining.  If the function does not have side-effects, there
19694     are optimizations other than inlining that causes function calls
19695     to be optimized away, although the function call is live.  To keep
19696     such calls from being optimized away, put
19697          asm ("");
19698     (*note Extended Asm::) in the called function, to serve as a
19699     special side-effect.
19700
19701`noclone'
19702     This function attribute prevents a function from being considered
19703     for cloning - a mechanism which produces specialized copies of
19704     functions and which is (currently) performed by interprocedural
19705     constant propagation.
19706
19707`nonnull (ARG-INDEX, ...)'
19708     The `nonnull' attribute specifies that some function parameters
19709     should be non-null pointers.  For instance, the declaration:
19710
19711          extern void *
19712          my_memcpy (void *dest, const void *src, size_t len)
19713                  __attribute__((nonnull (1, 2)));
19714
19715     causes the compiler to check that, in calls to `my_memcpy',
19716     arguments DEST and SRC are non-null.  If the compiler determines
19717     that a null pointer is passed in an argument slot marked as
19718     non-null, and the `-Wnonnull' option is enabled, a warning is
19719     issued.  The compiler may also choose to make optimizations based
19720     on the knowledge that certain function arguments will not be null.
19721
19722     If no argument index list is given to the `nonnull' attribute, all
19723     pointer arguments are marked as non-null.  To illustrate, the
19724     following declaration is equivalent to the previous example:
19725
19726          extern void *
19727          my_memcpy (void *dest, const void *src, size_t len)
19728                  __attribute__((nonnull));
19729
19730`noreturn'
19731     A few standard library functions, such as `abort' and `exit',
19732     cannot return.  GCC knows this automatically.  Some programs define
19733     their own functions that never return.  You can declare them
19734     `noreturn' to tell the compiler this fact.  For example,
19735
19736          void fatal () __attribute__ ((noreturn));
19737
19738          void
19739          fatal (/* ... */)
19740          {
19741            /* ... */ /* Print error message. */ /* ... */
19742            exit (1);
19743          }
19744
19745     The `noreturn' keyword tells the compiler to assume that `fatal'
19746     cannot return.  It can then optimize without regard to what would
19747     happen if `fatal' ever did return.  This makes slightly better
19748     code.  More importantly, it helps avoid spurious warnings of
19749     uninitialized variables.
19750
19751     The `noreturn' keyword does not affect the exceptional path when
19752     that applies: a `noreturn'-marked function may still return to the
19753     caller by throwing an exception or calling `longjmp'.
19754
19755     Do not assume that registers saved by the calling function are
19756     restored before calling the `noreturn' function.
19757
19758     It does not make sense for a `noreturn' function to have a return
19759     type other than `void'.
19760
19761     The attribute `noreturn' is not implemented in GCC versions
19762     earlier than 2.5.  An alternative way to declare that a function
19763     does not return, which works in the current version and in some
19764     older versions, is as follows:
19765
19766          typedef void voidfn ();
19767
19768          volatile voidfn fatal;
19769
19770     This approach does not work in GNU C++.
19771
19772`nothrow'
19773     The `nothrow' attribute is used to inform the compiler that a
19774     function cannot throw an exception.  For example, most functions in
19775     the standard C library can be guaranteed not to throw an exception
19776     with the notable exceptions of `qsort' and `bsearch' that take
19777     function pointer arguments.  The `nothrow' attribute is not
19778     implemented in GCC versions earlier than 3.3.
19779
19780`optimize'
19781     The `optimize' attribute is used to specify that a function is to
19782     be compiled with different optimization options than specified on
19783     the command line.  Arguments can either be numbers or strings.
19784     Numbers are assumed to be an optimization level.  Strings that
19785     begin with `O' are assumed to be an optimization option, while
19786     other options are assumed to be used with a `-f' prefix.  You can
19787     also use the `#pragma GCC optimize' pragma to set the optimization
19788     options that affect more than one function.  *Note Function
19789     Specific Option Pragmas::, for details about the `#pragma GCC
19790     optimize' pragma.
19791
19792     This can be used for instance to have frequently executed functions
19793     compiled with more aggressive optimization options that produce
19794     faster and larger code, while other functions can be called with
19795     less aggressive options.
19796
19797`pcs'
19798     The `pcs' attribute can be used to control the calling convention
19799     used for a function on ARM.  The attribute takes an argument that
19800     specifies the calling convention to use.
19801
19802     When compiling using the AAPCS ABI (or a variant of that) then
19803     valid values for the argument are `"aapcs"' and `"aapcs-vfp"'.  In
19804     order to use a variant other than `"aapcs"' then the compiler must
19805     be permitted to use the appropriate co-processor registers (i.e.,
19806     the VFP registers must be available in order to use `"aapcs-vfp"').
19807     For example,
19808
19809          /* Argument passed in r0, and result returned in r0+r1.  */
19810          double f2d (float) __attribute__((pcs("aapcs")));
19811
19812     Variadic functions always use the `"aapcs"' calling convention and
19813     the compiler will reject attempts to specify an alternative.
19814
19815`pure'
19816     Many functions have no effects except the return value and their
19817     return value depends only on the parameters and/or global
19818     variables.  Such a function can be subject to common subexpression
19819     elimination and loop optimization just as an arithmetic operator
19820     would be.  These functions should be declared with the attribute
19821     `pure'.  For example,
19822
19823          int square (int) __attribute__ ((pure));
19824
19825     says that the hypothetical function `square' is safe to call fewer
19826     times than the program says.
19827
19828     Some of common examples of pure functions are `strlen' or `memcmp'.
19829     Interesting non-pure functions are functions with infinite loops
19830     or those depending on volatile memory or other system resource,
19831     that may change between two consecutive calls (such as `feof' in a
19832     multithreading environment).
19833
19834     The attribute `pure' is not implemented in GCC versions earlier
19835     than 2.96.
19836
19837`hot'
19838     The `hot' attribute is used to inform the compiler that a function
19839     is a hot spot of the compiled program.  The function is optimized
19840     more aggressively and on many target it is placed into special
19841     subsection of the text section so all hot functions appears close
19842     together improving locality.
19843
19844     When profile feedback is available, via `-fprofile-use', hot
19845     functions are automatically detected and this attribute is ignored.
19846
19847     The `hot' attribute is not implemented in GCC versions earlier
19848     than 4.3.
19849
19850`cold'
19851     The `cold' attribute is used to inform the compiler that a
19852     function is unlikely executed.  The function is optimized for size
19853     rather than speed and on many targets it is placed into special
19854     subsection of the text section so all cold functions appears close
19855     together improving code locality of non-cold parts of program.
19856     The paths leading to call of cold functions within code are marked
19857     as unlikely by the branch prediction mechanism. It is thus useful
19858     to mark functions used to handle unlikely conditions, such as
19859     `perror', as cold to improve optimization of hot functions that do
19860     call marked functions in rare occasions.
19861
19862     When profile feedback is available, via `-fprofile-use', hot
19863     functions are automatically detected and this attribute is ignored.
19864
19865     The `cold' attribute is not implemented in GCC versions earlier
19866     than 4.3.
19867
19868`regparm (NUMBER)'
19869     On the Intel 386, the `regparm' attribute causes the compiler to
19870     pass arguments number one to NUMBER if they are of integral type
19871     in registers EAX, EDX, and ECX instead of on the stack.  Functions
19872     that take a variable number of arguments will continue to be
19873     passed all of their arguments on the stack.
19874
19875     Beware that on some ELF systems this attribute is unsuitable for
19876     global functions in shared libraries with lazy binding (which is
19877     the default).  Lazy binding will send the first call via resolving
19878     code in the loader, which might assume EAX, EDX and ECX can be
19879     clobbered, as per the standard calling conventions.  Solaris 8 is
19880     affected by this.  GNU systems with GLIBC 2.1 or higher, and
19881     FreeBSD, are believed to be safe since the loaders there save EAX,
19882     EDX and ECX.  (Lazy binding can be disabled with the linker or the
19883     loader if desired, to avoid the problem.)
19884
19885`sseregparm'
19886     On the Intel 386 with SSE support, the `sseregparm' attribute
19887     causes the compiler to pass up to 3 floating point arguments in
19888     SSE registers instead of on the stack.  Functions that take a
19889     variable number of arguments will continue to pass all of their
19890     floating point arguments on the stack.
19891
19892`force_align_arg_pointer'
19893     On the Intel x86, the `force_align_arg_pointer' attribute may be
19894     applied to individual function definitions, generating an alternate
19895     prologue and epilogue that realigns the runtime stack if necessary.
19896     This supports mixing legacy codes that run with a 4-byte aligned
19897     stack with modern codes that keep a 16-byte stack for SSE
19898     compatibility.
19899
19900`resbank'
19901     On the SH2A target, this attribute enables the high-speed register
19902     saving and restoration using a register bank for
19903     `interrupt_handler' routines.  Saving to the bank is performed
19904     automatically after the CPU accepts an interrupt that uses a
19905     register bank.
19906
19907     The nineteen 32-bit registers comprising general register R0 to
19908     R14, control register GBR, and system registers MACH, MACL, and PR
19909     and the vector table address offset are saved into a register
19910     bank.  Register banks are stacked in first-in last-out (FILO)
19911     sequence.  Restoration from the bank is executed by issuing a
19912     RESBANK instruction.
19913
19914`returns_twice'
19915     The `returns_twice' attribute tells the compiler that a function
19916     may return more than one time.  The compiler will ensure that all
19917     registers are dead before calling such a function and will emit a
19918     warning about the variables that may be clobbered after the second
19919     return from the function.  Examples of such functions are `setjmp'
19920     and `vfork'.  The `longjmp'-like counterpart of such function, if
19921     any, might need to be marked with the `noreturn' attribute.
19922
19923`saveall'
19924     Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to
19925     indicate that all registers except the stack pointer should be
19926     saved in the prologue regardless of whether they are used or not.
19927
19928`section ("SECTION-NAME")'
19929     Normally, the compiler places the code it generates in the `text'
19930     section.  Sometimes, however, you need additional sections, or you
19931     need certain particular functions to appear in special sections.
19932     The `section' attribute specifies that a function lives in a
19933     particular section.  For example, the declaration:
19934
19935          extern void foobar (void) __attribute__ ((section ("bar")));
19936
19937     puts the function `foobar' in the `bar' section.
19938
19939     Some file formats do not support arbitrary sections so the
19940     `section' attribute is not available on all platforms.  If you
19941     need to map the entire contents of a module to a particular
19942     section, consider using the facilities of the linker instead.
19943
19944`sentinel'
19945     This function attribute ensures that a parameter in a function
19946     call is an explicit `NULL'.  The attribute is only valid on
19947     variadic functions.  By default, the sentinel is located at
19948     position zero, the last parameter of the function call.  If an
19949     optional integer position argument P is supplied to the attribute,
19950     the sentinel must be located at position P counting backwards from
19951     the end of the argument list.
19952
19953          __attribute__ ((sentinel))
19954          is equivalent to
19955          __attribute__ ((sentinel(0)))
19956
19957     The attribute is automatically set with a position of 0 for the
19958     built-in functions `execl' and `execlp'.  The built-in function
19959     `execle' has the attribute set with a position of 1.
19960
19961     A valid `NULL' in this context is defined as zero with any pointer
19962     type.  If your system defines the `NULL' macro with an integer type
19963     then you need to add an explicit cast.  GCC replaces `stddef.h'
19964     with a copy that redefines NULL appropriately.
19965
19966     The warnings for missing or incorrect sentinels are enabled with
19967     `-Wformat'.
19968
19969`short_call'
19970     See long_call/short_call.
19971
19972`shortcall'
19973     See longcall/shortcall.
19974
19975`signal'
19976     Use this attribute on the AVR to indicate that the specified
19977     function is a signal handler.  The compiler will generate function
19978     entry and exit sequences suitable for use in a signal handler when
19979     this attribute is present.  Interrupts will be disabled inside the
19980     function.
19981
19982`sp_switch'
19983     Use this attribute on the SH to indicate an `interrupt_handler'
19984     function should switch to an alternate stack.  It expects a string
19985     argument that names a global variable holding the address of the
19986     alternate stack.
19987
19988          void *alt_stack;
19989          void f () __attribute__ ((interrupt_handler,
19990                                    sp_switch ("alt_stack")));
19991
19992`stdcall'
19993     On the Intel 386, the `stdcall' attribute causes the compiler to
19994     assume that the called function will pop off the stack space used
19995     to pass arguments, unless it takes a variable number of arguments.
19996
19997`syscall_linkage'
19998     This attribute is used to modify the IA64 calling convention by
19999     marking all input registers as live at all function exits.  This
20000     makes it possible to restart a system call after an interrupt
20001     without having to save/restore the input registers.  This also
20002     prevents kernel data from leaking into application code.
20003
20004`target'
20005     The `target' attribute is used to specify that a function is to be
20006     compiled with different target options than specified on the
20007     command line.  This can be used for instance to have functions
20008     compiled with a different ISA (instruction set architecture) than
20009     the default.  You can also use the `#pragma GCC target' pragma to
20010     set more than one function to be compiled with specific target
20011     options.  *Note Function Specific Option Pragmas::, for details
20012     about the `#pragma GCC target' pragma.
20013
20014     For instance on a 386, you could compile one function with
20015     `target("sse4.1,arch=core2")' and another with
20016     `target("sse4a,arch=amdfam10")' that would be equivalent to
20017     compiling the first function with `-msse4.1' and `-march=core2'
20018     options, and the second function with `-msse4a' and
20019     `-march=amdfam10' options.  It is up to the user to make sure that
20020     a function is only invoked on a machine that supports the
20021     particular ISA it was compiled for (for example by using `cpuid'
20022     on 386 to determine what feature bits and architecture family are
20023     used).
20024
20025          int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
20026          int sse3_func (void) __attribute__ ((__target__ ("sse3")));
20027
20028     On the 386, the following options are allowed:
20029
20030    `abm'
20031    `no-abm'
20032          Enable/disable the generation of the advanced bit
20033          instructions.
20034
20035    `aes'
20036    `no-aes'
20037          Enable/disable the generation of the AES instructions.
20038
20039    `mmx'
20040    `no-mmx'
20041          Enable/disable the generation of the MMX instructions.
20042
20043    `pclmul'
20044    `no-pclmul'
20045          Enable/disable the generation of the PCLMUL instructions.
20046
20047    `popcnt'
20048    `no-popcnt'
20049          Enable/disable the generation of the POPCNT instruction.
20050
20051    `sse'
20052    `no-sse'
20053          Enable/disable the generation of the SSE instructions.
20054
20055    `sse2'
20056    `no-sse2'
20057          Enable/disable the generation of the SSE2 instructions.
20058
20059    `sse3'
20060    `no-sse3'
20061          Enable/disable the generation of the SSE3 instructions.
20062
20063    `sse4'
20064    `no-sse4'
20065          Enable/disable the generation of the SSE4 instructions (both
20066          SSE4.1 and SSE4.2).
20067
20068    `sse4.1'
20069    `no-sse4.1'
20070          Enable/disable the generation of the sse4.1 instructions.
20071
20072    `sse4.2'
20073    `no-sse4.2'
20074          Enable/disable the generation of the sse4.2 instructions.
20075
20076    `sse4a'
20077    `no-sse4a'
20078          Enable/disable the generation of the SSE4A instructions.
20079
20080    `fma4'
20081    `no-fma4'
20082          Enable/disable the generation of the FMA4 instructions.
20083
20084    `xop'
20085    `no-xop'
20086          Enable/disable the generation of the XOP instructions.
20087
20088    `lwp'
20089    `no-lwp'
20090          Enable/disable the generation of the LWP instructions.
20091
20092    `ssse3'
20093    `no-ssse3'
20094          Enable/disable the generation of the SSSE3 instructions.
20095
20096    `cld'
20097    `no-cld'
20098          Enable/disable the generation of the CLD before string moves.
20099
20100    `fancy-math-387'
20101    `no-fancy-math-387'
20102          Enable/disable the generation of the `sin', `cos', and `sqrt'
20103          instructions on the 387 floating point unit.
20104
20105    `fused-madd'
20106    `no-fused-madd'
20107          Enable/disable the generation of the fused multiply/add
20108          instructions.
20109
20110    `ieee-fp'
20111    `no-ieee-fp'
20112          Enable/disable the generation of floating point that depends
20113          on IEEE arithmetic.
20114
20115    `inline-all-stringops'
20116    `no-inline-all-stringops'
20117          Enable/disable inlining of string operations.
20118
20119    `inline-stringops-dynamically'
20120    `no-inline-stringops-dynamically'
20121          Enable/disable the generation of the inline code to do small
20122          string operations and calling the library routines for large
20123          operations.
20124
20125    `align-stringops'
20126    `no-align-stringops'
20127          Do/do not align destination of inlined string operations.
20128
20129    `recip'
20130    `no-recip'
20131          Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and
20132          RSQRTPS instructions followed an additional Newton-Raphson
20133          step instead of doing a floating point division.
20134
20135    `arch=ARCH'
20136          Specify the architecture to generate code for in compiling
20137          the function.
20138
20139    `tune=TUNE'
20140          Specify the architecture to tune for in compiling the
20141          function.
20142
20143    `fpmath=FPMATH'
20144          Specify which floating point unit to use.  The
20145          `target("fpmath=sse,387")' option must be specified as
20146          `target("fpmath=sse+387")' because the comma would separate
20147          different options.
20148
20149     On the 386, you can use either multiple strings to specify multiple
20150     options, or you can separate the option with a comma (`,').
20151
20152     On the 386, the inliner will not inline a function that has
20153     different target options than the caller, unless the callee has a
20154     subset of the target options of the caller.  For example a
20155     function declared with `target("sse3")' can inline a function with
20156     `target("sse2")', since `-msse3' implies `-msse2'.
20157
20158     The `target' attribute is not implemented in GCC versions earlier
20159     than 4.4, and at present only the 386 uses it.
20160
20161`tiny_data'
20162     Use this attribute on the H8/300H and H8S to indicate that the
20163     specified variable should be placed into the tiny data section.
20164     The compiler will generate more efficient code for loads and stores
20165     on data in the tiny data section.  Note the tiny data area is
20166     limited to slightly under 32kbytes of data.
20167
20168`trap_exit'
20169     Use this attribute on the SH for an `interrupt_handler' to return
20170     using `trapa' instead of `rte'.  This attribute expects an integer
20171     argument specifying the trap number to be used.
20172
20173`unused'
20174     This attribute, attached to a function, means that the function is
20175     meant to be possibly unused.  GCC will not produce a warning for
20176     this function.
20177
20178`used'
20179     This attribute, attached to a function, means that code must be
20180     emitted for the function even if it appears that the function is
20181     not referenced.  This is useful, for example, when the function is
20182     referenced only in inline assembly.
20183
20184`version_id'
20185     This IA64 HP-UX attribute, attached to a global variable or
20186     function, renames a symbol to contain a version string, thus
20187     allowing for function level versioning.  HP-UX system header files
20188     may use version level functioning for some system calls.
20189
20190          extern int foo () __attribute__((version_id ("20040821")));
20191
20192     Calls to FOO will be mapped to calls to FOO{20040821}.
20193
20194`visibility ("VISIBILITY_TYPE")'
20195     This attribute affects the linkage of the declaration to which it
20196     is attached.  There are four supported VISIBILITY_TYPE values:
20197     default, hidden, protected or internal visibility.
20198
20199          void __attribute__ ((visibility ("protected")))
20200          f () { /* Do something. */; }
20201          int i __attribute__ ((visibility ("hidden")));
20202
20203     The possible values of VISIBILITY_TYPE correspond to the
20204     visibility settings in the ELF gABI.
20205
20206    "default"
20207          Default visibility is the normal case for the object file
20208          format.  This value is available for the visibility attribute
20209          to override other options that may change the assumed
20210          visibility of entities.
20211
20212          On ELF, default visibility means that the declaration is
20213          visible to other modules and, in shared libraries, means that
20214          the declared entity may be overridden.
20215
20216          On Darwin, default visibility means that the declaration is
20217          visible to other modules.
20218
20219          Default visibility corresponds to "external linkage" in the
20220          language.
20221
20222    "hidden"
20223          Hidden visibility indicates that the entity declared will
20224          have a new form of linkage, which we'll call "hidden
20225          linkage".  Two declarations of an object with hidden linkage
20226          refer to the same object if they are in the same shared
20227          object.
20228
20229    "internal"
20230          Internal visibility is like hidden visibility, but with
20231          additional processor specific semantics.  Unless otherwise
20232          specified by the psABI, GCC defines internal visibility to
20233          mean that a function is _never_ called from another module.
20234          Compare this with hidden functions which, while they cannot
20235          be referenced directly by other modules, can be referenced
20236          indirectly via function pointers.  By indicating that a
20237          function cannot be called from outside the module, GCC may
20238          for instance omit the load of a PIC register since it is known
20239          that the calling function loaded the correct value.
20240
20241    "protected"
20242          Protected visibility is like default visibility except that it
20243          indicates that references within the defining module will
20244          bind to the definition in that module.  That is, the declared
20245          entity cannot be overridden by another module.
20246
20247
20248     All visibilities are supported on many, but not all, ELF targets
20249     (supported when the assembler supports the `.visibility'
20250     pseudo-op).  Default visibility is supported everywhere.  Hidden
20251     visibility is supported on Darwin targets.
20252
20253     The visibility attribute should be applied only to declarations
20254     which would otherwise have external linkage.  The attribute should
20255     be applied consistently, so that the same entity should not be
20256     declared with different settings of the attribute.
20257
20258     In C++, the visibility attribute applies to types as well as
20259     functions and objects, because in C++ types have linkage.  A class
20260     must not have greater visibility than its non-static data member
20261     types and bases, and class members default to the visibility of
20262     their class.  Also, a declaration without explicit visibility is
20263     limited to the visibility of its type.
20264
20265     In C++, you can mark member functions and static member variables
20266     of a class with the visibility attribute.  This is useful if you
20267     know a particular method or static member variable should only be
20268     used from one shared object; then you can mark it hidden while the
20269     rest of the class has default visibility.  Care must be taken to
20270     avoid breaking the One Definition Rule; for example, it is usually
20271     not useful to mark an inline method as hidden without marking the
20272     whole class as hidden.
20273
20274     A C++ namespace declaration can also have the visibility attribute.
20275     This attribute applies only to the particular namespace body, not
20276     to other definitions of the same namespace; it is equivalent to
20277     using `#pragma GCC visibility' before and after the namespace
20278     definition (*note Visibility Pragmas::).
20279
20280     In C++, if a template argument has limited visibility, this
20281     restriction is implicitly propagated to the template instantiation.
20282     Otherwise, template instantiations and specializations default to
20283     the visibility of their template.
20284
20285     If both the template and enclosing class have explicit visibility,
20286     the visibility from the template is used.
20287
20288`vliw'
20289     On MeP, the `vliw' attribute tells the compiler to emit
20290     instructions in VLIW mode instead of core mode.  Note that this
20291     attribute is not allowed unless a VLIW coprocessor has been
20292     configured and enabled through command line options.
20293
20294`warn_unused_result'
20295     The `warn_unused_result' attribute causes a warning to be emitted
20296     if a caller of the function with this attribute does not use its
20297     return value.  This is useful for functions where not checking the
20298     result is either a security problem or always a bug, such as
20299     `realloc'.
20300
20301          int fn () __attribute__ ((warn_unused_result));
20302          int foo ()
20303          {
20304            if (fn () < 0) return -1;
20305            fn ();
20306            return 0;
20307          }
20308
20309     results in warning on line 5.
20310
20311`weak'
20312     The `weak' attribute causes the declaration to be emitted as a weak
20313     symbol rather than a global.  This is primarily useful in defining
20314     library functions which can be overridden in user code, though it
20315     can also be used with non-function declarations.  Weak symbols are
20316     supported for ELF targets, and also for a.out targets when using
20317     the GNU assembler and linker.
20318
20319`weakref'
20320`weakref ("TARGET")'
20321     The `weakref' attribute marks a declaration as a weak reference.
20322     Without arguments, it should be accompanied by an `alias' attribute
20323     naming the target symbol.  Optionally, the TARGET may be given as
20324     an argument to `weakref' itself.  In either case, `weakref'
20325     implicitly marks the declaration as `weak'.  Without a TARGET,
20326     given as an argument to `weakref' or to `alias', `weakref' is
20327     equivalent to `weak'.
20328
20329          static int x() __attribute__ ((weakref ("y")));
20330          /* is equivalent to... */
20331          static int x() __attribute__ ((weak, weakref, alias ("y")));
20332          /* and to... */
20333          static int x() __attribute__ ((weakref));
20334          static int x() __attribute__ ((alias ("y")));
20335
20336     A weak reference is an alias that does not by itself require a
20337     definition to be given for the target symbol.  If the target
20338     symbol is only referenced through weak references, then the
20339     becomes a `weak' undefined symbol.  If it is directly referenced,
20340     however, then such strong references prevail, and a definition
20341     will be required for the symbol, not necessarily in the same
20342     translation unit.
20343
20344     The effect is equivalent to moving all references to the alias to a
20345     separate translation unit, renaming the alias to the aliased
20346     symbol, declaring it as weak, compiling the two separate
20347     translation units and performing a reloadable link on them.
20348
20349     At present, a declaration to which `weakref' is attached can only
20350     be `static'.
20351
20352
20353 You can specify multiple attributes in a declaration by separating them
20354by commas within the double parentheses or by immediately following an
20355attribute declaration with another attribute declaration.
20356
20357 Some people object to the `__attribute__' feature, suggesting that ISO
20358C's `#pragma' should be used instead.  At the time `__attribute__' was
20359designed, there were two reasons for not doing this.
20360
20361  1. It is impossible to generate `#pragma' commands from a macro.
20362
20363  2. There is no telling what the same `#pragma' might mean in another
20364     compiler.
20365
20366 These two reasons applied to almost any application that might have
20367been proposed for `#pragma'.  It was basically a mistake to use
20368`#pragma' for _anything_.
20369
20370 The ISO C99 standard includes `_Pragma', which now allows pragmas to
20371be generated from macros.  In addition, a `#pragma GCC' namespace is
20372now in use for GCC-specific pragmas.  However, it has been found
20373convenient to use `__attribute__' to achieve a natural attachment of
20374attributes to their corresponding declarations, whereas `#pragma GCC'
20375is of use for constructs that do not naturally form part of the
20376grammar.  *Note Miscellaneous Preprocessing Directives: (cpp)Other
20377Directives.
20378
20379
20380File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Function Attributes,  Up: C Extensions
20381
203826.30 Attribute Syntax
20383=====================
20384
20385This section describes the syntax with which `__attribute__' may be
20386used, and the constructs to which attribute specifiers bind, for the C
20387language.  Some details may vary for C++ and Objective-C.  Because of
20388infelicities in the grammar for attributes, some forms described here
20389may not be successfully parsed in all cases.
20390
20391 There are some problems with the semantics of attributes in C++.  For
20392example, there are no manglings for attributes, although they may affect
20393code generation, so problems may arise when attributed types are used in
20394conjunction with templates or overloading.  Similarly, `typeid' does
20395not distinguish between types with different attributes.  Support for
20396attributes in C++ may be restricted in future to attributes on
20397declarations only, but not on nested declarators.
20398
20399 *Note Function Attributes::, for details of the semantics of attributes
20400applying to functions.  *Note Variable Attributes::, for details of the
20401semantics of attributes applying to variables.  *Note Type Attributes::,
20402for details of the semantics of attributes applying to structure, union
20403and enumerated types.
20404
20405 An "attribute specifier" is of the form `__attribute__
20406((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
20407comma-separated sequence of "attributes", where each attribute is one
20408of the following:
20409
20410   * Empty.  Empty attributes are ignored.
20411
20412   * A word (which may be an identifier such as `unused', or a reserved
20413     word such as `const').
20414
20415   * A word, followed by, in parentheses, parameters for the attribute.
20416     These parameters take one of the following forms:
20417
20418        * An identifier.  For example, `mode' attributes use this form.
20419
20420        * An identifier followed by a comma and a non-empty
20421          comma-separated list of expressions.  For example, `format'
20422          attributes use this form.
20423
20424        * A possibly empty comma-separated list of expressions.  For
20425          example, `format_arg' attributes use this form with the list
20426          being a single integer constant expression, and `alias'
20427          attributes use this form with the list being a single string
20428          constant.
20429
20430 An "attribute specifier list" is a sequence of one or more attribute
20431specifiers, not separated by any other tokens.
20432
20433 In GNU C, an attribute specifier list may appear after the colon
20434following a label, other than a `case' or `default' label.  The only
20435attribute it makes sense to use after a label is `unused'.  This
20436feature is intended for code generated by programs which contains labels
20437that may be unused but which is compiled with `-Wall'.  It would not
20438normally be appropriate to use in it human-written code, though it
20439could be useful in cases where the code that jumps to the label is
20440contained within an `#ifdef' conditional.  GNU C++ only permits
20441attributes on labels if the attribute specifier is immediately followed
20442by a semicolon (i.e., the label applies to an empty statement).  If the
20443semicolon is missing, C++ label attributes are ambiguous, as it is
20444permissible for a declaration, which could begin with an attribute
20445list, to be labelled in C++.  Declarations cannot be labelled in C90 or
20446C99, so the ambiguity does not arise there.
20447
20448 An attribute specifier list may appear as part of a `struct', `union'
20449or `enum' specifier.  It may go either immediately after the `struct',
20450`union' or `enum' keyword, or after the closing brace.  The former
20451syntax is preferred.  Where attribute specifiers follow the closing
20452brace, they are considered to relate to the structure, union or
20453enumerated type defined, not to any enclosing declaration the type
20454specifier appears in, and the type defined is not complete until after
20455the attribute specifiers.
20456
20457 Otherwise, an attribute specifier appears as part of a declaration,
20458counting declarations of unnamed parameters and type names, and relates
20459to that declaration (which may be nested in another declaration, for
20460example in the case of a parameter declaration), or to a particular
20461declarator within a declaration.  Where an attribute specifier is
20462applied to a parameter declared as a function or an array, it should
20463apply to the function or array rather than the pointer to which the
20464parameter is implicitly converted, but this is not yet correctly
20465implemented.
20466
20467 Any list of specifiers and qualifiers at the start of a declaration may
20468contain attribute specifiers, whether or not such a list may in that
20469context contain storage class specifiers.  (Some attributes, however,
20470are essentially in the nature of storage class specifiers, and only make
20471sense where storage class specifiers may be used; for example,
20472`section'.)  There is one necessary limitation to this syntax: the
20473first old-style parameter declaration in a function definition cannot
20474begin with an attribute specifier, because such an attribute applies to
20475the function instead by syntax described below (which, however, is not
20476yet implemented in this case).  In some other cases, attribute
20477specifiers are permitted by this grammar but not yet supported by the
20478compiler.  All attribute specifiers in this place relate to the
20479declaration as a whole.  In the obsolescent usage where a type of `int'
20480is implied by the absence of type specifiers, such a list of specifiers
20481and qualifiers may be an attribute specifier list with no other
20482specifiers or qualifiers.
20483
20484 At present, the first parameter in a function prototype must have some
20485type specifier which is not an attribute specifier; this resolves an
20486ambiguity in the interpretation of `void f(int (__attribute__((foo))
20487x))', but is subject to change.  At present, if the parentheses of a
20488function declarator contain only attributes then those attributes are
20489ignored, rather than yielding an error or warning or implying a single
20490parameter of type int, but this is subject to change.
20491
20492 An attribute specifier list may appear immediately before a declarator
20493(other than the first) in a comma-separated list of declarators in a
20494declaration of more than one identifier using a single list of
20495specifiers and qualifiers.  Such attribute specifiers apply only to the
20496identifier before whose declarator they appear.  For example, in
20497
20498     __attribute__((noreturn)) void d0 (void),
20499         __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
20500          d2 (void)
20501
20502the `noreturn' attribute applies to all the functions declared; the
20503`format' attribute only applies to `d1'.
20504
20505 An attribute specifier list may appear immediately before the comma,
20506`=' or semicolon terminating the declaration of an identifier other
20507than a function definition.  Such attribute specifiers apply to the
20508declared object or function.  Where an assembler name for an object or
20509function is specified (*note Asm Labels::), the attribute must follow
20510the `asm' specification.
20511
20512 An attribute specifier list may, in future, be permitted to appear
20513after the declarator in a function definition (before any old-style
20514parameter declarations or the function body).
20515
20516 Attribute specifiers may be mixed with type qualifiers appearing inside
20517the `[]' of a parameter array declarator, in the C99 construct by which
20518such qualifiers are applied to the pointer to which the array is
20519implicitly converted.  Such attribute specifiers apply to the pointer,
20520not to the array, but at present this is not implemented and they are
20521ignored.
20522
20523 An attribute specifier list may appear at the start of a nested
20524declarator.  At present, there are some limitations in this usage: the
20525attributes correctly apply to the declarator, but for most individual
20526attributes the semantics this implies are not implemented.  When
20527attribute specifiers follow the `*' of a pointer declarator, they may
20528be mixed with any type qualifiers present.  The following describes the
20529formal semantics of this syntax.  It will make the most sense if you
20530are familiar with the formal specification of declarators in the ISO C
20531standard.
20532
20533 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1',
20534where `T' contains declaration specifiers that specify a type TYPE
20535(such as `int') and `D1' is a declarator that contains an identifier
20536IDENT.  The type specified for IDENT for derived declarators whose type
20537does not include an attribute specifier is as in the ISO C standard.
20538
20539 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the
20540declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
20541TYPE" for IDENT, then `T D1' specifies the type
20542"DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
20543
20544 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST
20545D', and the declaration `T D' specifies the type
20546"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies
20547the type "DERIVED-DECLARATOR-TYPE-LIST
20548TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
20549
20550 For example,
20551
20552     void (__attribute__((noreturn)) ****f) (void);
20553
20554specifies the type "pointer to pointer to pointer to pointer to
20555non-returning function returning `void'".  As another example,
20556
20557     char *__attribute__((aligned(8))) *f;
20558
20559specifies the type "pointer to 8-byte-aligned pointer to `char'".  Note
20560again that this does not work with most attributes; for example, the
20561usage of `aligned' and `noreturn' attributes given above is not yet
20562supported.
20563
20564 For compatibility with existing code written for compiler versions that
20565did not implement attributes on nested declarators, some laxity is
20566allowed in the placing of attributes.  If an attribute that only applies
20567to types is applied to a declaration, it will be treated as applying to
20568the type of that declaration.  If an attribute that only applies to
20569declarations is applied to the type of a declaration, it will be treated
20570as applying to that declaration; and, for compatibility with code
20571placing the attributes immediately before the identifier declared, such
20572an attribute applied to a function return type will be treated as
20573applying to the function type, and such an attribute applied to an array
20574element type will be treated as applying to the array type.  If an
20575attribute that only applies to function types is applied to a
20576pointer-to-function type, it will be treated as applying to the pointer
20577target type; if such an attribute is applied to a function return type
20578that is not a pointer-to-function type, it will be treated as applying
20579to the function type.
20580
20581
20582File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
20583
205846.31 Prototypes and Old-Style Function Definitions
20585==================================================
20586
20587GNU C extends ISO C to allow a function prototype to override a later
20588old-style non-prototype definition.  Consider the following example:
20589
20590     /* Use prototypes unless the compiler is old-fashioned.  */
20591     #ifdef __STDC__
20592     #define P(x) x
20593     #else
20594     #define P(x) ()
20595     #endif
20596
20597     /* Prototype function declaration.  */
20598     int isroot P((uid_t));
20599
20600     /* Old-style function definition.  */
20601     int
20602     isroot (x)   /* ??? lossage here ??? */
20603          uid_t x;
20604     {
20605       return x == 0;
20606     }
20607
20608 Suppose the type `uid_t' happens to be `short'.  ISO C does not allow
20609this example, because subword arguments in old-style non-prototype
20610definitions are promoted.  Therefore in this example the function
20611definition's argument is really an `int', which does not match the
20612prototype argument type of `short'.
20613
20614 This restriction of ISO C makes it hard to write code that is portable
20615to traditional C compilers, because the programmer does not know
20616whether the `uid_t' type is `short', `int', or `long'.  Therefore, in
20617cases like these GNU C allows a prototype to override a later old-style
20618definition.  More precisely, in GNU C, a function prototype argument
20619type overrides the argument type specified by a later old-style
20620definition if the former type is the same as the latter type before
20621promotion.  Thus in GNU C the above example is equivalent to the
20622following:
20623
20624     int isroot (uid_t);
20625
20626     int
20627     isroot (uid_t x)
20628     {
20629       return x == 0;
20630     }
20631
20632GNU C++ does not support old-style function definitions, so this
20633extension is irrelevant.
20634
20635
20636File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
20637
206386.32 C++ Style Comments
20639=======================
20640
20641In GNU C, you may use C++ style comments, which start with `//' and
20642continue until the end of the line.  Many other C implementations allow
20643such comments, and they are included in the 1999 C standard.  However,
20644C++ style comments are not recognized if you specify an `-std' option
20645specifying a version of ISO C before C99, or `-ansi' (equivalent to
20646`-std=c90').
20647
20648
20649File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
20650
206516.33 Dollar Signs in Identifier Names
20652=====================================
20653
20654In GNU C, you may normally use dollar signs in identifier names.  This
20655is because many traditional C implementations allow such identifiers.
20656However, dollar signs in identifiers are not supported on a few target
20657machines, typically because the target assembler does not allow them.
20658
20659
20660File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: C Extensions
20661
206626.34 The Character <ESC> in Constants
20663=====================================
20664
20665You can use the sequence `\e' in a string or character constant to
20666stand for the ASCII character <ESC>.
20667
20668
20669File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Character Escapes,  Up: C Extensions
20670
206716.35 Specifying Attributes of Variables
20672=======================================
20673
20674The keyword `__attribute__' allows you to specify special attributes of
20675variables or structure fields.  This keyword is followed by an
20676attribute specification inside double parentheses.  Some attributes are
20677currently defined generically for variables.  Other attributes are
20678defined for variables on particular target systems.  Other attributes
20679are available for functions (*note Function Attributes::) and for types
20680(*note Type Attributes::).  Other front ends might define more
20681attributes (*note Extensions to the C++ Language: C++ Extensions.).
20682
20683 You may also specify attributes with `__' preceding and following each
20684keyword.  This allows you to use them in header files without being
20685concerned about a possible macro of the same name.  For example, you
20686may use `__aligned__' instead of `aligned'.
20687
20688 *Note Attribute Syntax::, for details of the exact syntax for using
20689attributes.
20690
20691`aligned (ALIGNMENT)'
20692     This attribute specifies a minimum alignment for the variable or
20693     structure field, measured in bytes.  For example, the declaration:
20694
20695          int x __attribute__ ((aligned (16))) = 0;
20696
20697     causes the compiler to allocate the global variable `x' on a
20698     16-byte boundary.  On a 68040, this could be used in conjunction
20699     with an `asm' expression to access the `move16' instruction which
20700     requires 16-byte aligned operands.
20701
20702     You can also specify the alignment of structure fields.  For
20703     example, to create a double-word aligned `int' pair, you could
20704     write:
20705
20706          struct foo { int x[2] __attribute__ ((aligned (8))); };
20707
20708     This is an alternative to creating a union with a `double' member
20709     that forces the union to be double-word aligned.
20710
20711     As in the preceding examples, you can explicitly specify the
20712     alignment (in bytes) that you wish the compiler to use for a given
20713     variable or structure field.  Alternatively, you can leave out the
20714     alignment factor and just ask the compiler to align a variable or
20715     field to the default alignment for the target architecture you are
20716     compiling for.  The default alignment is sufficient for all scalar
20717     types, but may not be enough for all vector types on a target
20718     which supports vector operations.  The default alignment is fixed
20719     for a particular target ABI.
20720
20721     Gcc also provides a target specific macro `__BIGGEST_ALIGNMENT__',
20722     which is the largest alignment ever used for any data type on the
20723     target machine you are compiling for.  For example, you could
20724     write:
20725
20726          short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
20727
20728     The compiler automatically sets the alignment for the declared
20729     variable or field to `__BIGGEST_ALIGNMENT__'.  Doing this can
20730     often make copy operations more efficient, because the compiler can
20731     use whatever instructions copy the biggest chunks of memory when
20732     performing copies to or from the variables or fields that you have
20733     aligned this way.  Note that the value of `__BIGGEST_ALIGNMENT__'
20734     may change depending on command line options.
20735
20736     When used on a struct, or struct member, the `aligned' attribute
20737     can only increase the alignment; in order to decrease it, the
20738     `packed' attribute must be specified as well.  When used as part
20739     of a typedef, the `aligned' attribute can both increase and
20740     decrease alignment, and specifying the `packed' attribute will
20741     generate a warning.
20742
20743     Note that the effectiveness of `aligned' attributes may be limited
20744     by inherent limitations in your linker.  On many systems, the
20745     linker is only able to arrange for variables to be aligned up to a
20746     certain maximum alignment.  (For some linkers, the maximum
20747     supported alignment may be very very small.)  If your linker is
20748     only able to align variables up to a maximum of 8 byte alignment,
20749     then specifying `aligned(16)' in an `__attribute__' will still
20750     only provide you with 8 byte alignment.  See your linker
20751     documentation for further information.
20752
20753     The `aligned' attribute can also be used for functions (*note
20754     Function Attributes::.)
20755
20756`cleanup (CLEANUP_FUNCTION)'
20757     The `cleanup' attribute runs a function when the variable goes out
20758     of scope.  This attribute can only be applied to auto function
20759     scope variables; it may not be applied to parameters or variables
20760     with static storage duration.  The function must take one
20761     parameter, a pointer to a type compatible with the variable.  The
20762     return value of the function (if any) is ignored.
20763
20764     If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run
20765     during the stack unwinding that happens during the processing of
20766     the exception.  Note that the `cleanup' attribute does not allow
20767     the exception to be caught, only to perform an action.  It is
20768     undefined what happens if CLEANUP_FUNCTION does not return
20769     normally.
20770
20771`common'
20772`nocommon'
20773     The `common' attribute requests GCC to place a variable in
20774     "common" storage.  The `nocommon' attribute requests the
20775     opposite--to allocate space for it directly.
20776
20777     These attributes override the default chosen by the `-fno-common'
20778     and `-fcommon' flags respectively.
20779
20780`deprecated'
20781`deprecated (MSG)'
20782     The `deprecated' attribute results in a warning if the variable is
20783     used anywhere in the source file.  This is useful when identifying
20784     variables that are expected to be removed in a future version of a
20785     program.  The warning also includes the location of the declaration
20786     of the deprecated variable, to enable users to easily find further
20787     information about why the variable is deprecated, or what they
20788     should do instead.  Note that the warning only occurs for uses:
20789
20790          extern int old_var __attribute__ ((deprecated));
20791          extern int old_var;
20792          int new_fn () { return old_var; }
20793
20794     results in a warning on line 3 but not line 2.  The optional msg
20795     argument, which must be a string, will be printed in the warning if
20796     present.
20797
20798     The `deprecated' attribute can also be used for functions and
20799     types (*note Function Attributes::, *note Type Attributes::.)
20800
20801`mode (MODE)'
20802     This attribute specifies the data type for the
20803     declaration--whichever type corresponds to the mode MODE.  This in
20804     effect lets you request an integer or floating point type
20805     according to its width.
20806
20807     You may also specify a mode of `byte' or `__byte__' to indicate
20808     the mode corresponding to a one-byte integer, `word' or `__word__'
20809     for the mode of a one-word integer, and `pointer' or `__pointer__'
20810     for the mode used to represent pointers.
20811
20812`packed'
20813     The `packed' attribute specifies that a variable or structure field
20814     should have the smallest possible alignment--one byte for a
20815     variable, and one bit for a field, unless you specify a larger
20816     value with the `aligned' attribute.
20817
20818     Here is a structure in which the field `x' is packed, so that it
20819     immediately follows `a':
20820
20821          struct foo
20822          {
20823            char a;
20824            int x[2] __attribute__ ((packed));
20825          };
20826
20827     _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the `packed'
20828     attribute on bit-fields of type `char'.  This has been fixed in
20829     GCC 4.4 but the change can lead to differences in the structure
20830     layout.  See the documentation of `-Wpacked-bitfield-compat' for
20831     more information.
20832
20833`section ("SECTION-NAME")'
20834     Normally, the compiler places the objects it generates in sections
20835     like `data' and `bss'.  Sometimes, however, you need additional
20836     sections, or you need certain particular variables to appear in
20837     special sections, for example to map to special hardware.  The
20838     `section' attribute specifies that a variable (or function) lives
20839     in a particular section.  For example, this small program uses
20840     several specific section names:
20841
20842          struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
20843          struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
20844          char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
20845          int init_data __attribute__ ((section ("INITDATA")));
20846
20847          main()
20848          {
20849            /* Initialize stack pointer */
20850            init_sp (stack + sizeof (stack));
20851
20852            /* Initialize initialized data */
20853            memcpy (&init_data, &data, &edata - &data);
20854
20855            /* Turn on the serial ports */
20856            init_duart (&a);
20857            init_duart (&b);
20858          }
20859
20860     Use the `section' attribute with _global_ variables and not
20861     _local_ variables, as shown in the example.
20862
20863     You may use the `section' attribute with initialized or
20864     uninitialized global variables but the linker requires each object
20865     be defined once, with the exception that uninitialized variables
20866     tentatively go in the `common' (or `bss') section and can be
20867     multiply "defined".  Using the `section' attribute will change
20868     what section the variable goes into and may cause the linker to
20869     issue an error if an uninitialized variable has multiple
20870     definitions.  You can force a variable to be initialized with the
20871     `-fno-common' flag or the `nocommon' attribute.
20872
20873     Some file formats do not support arbitrary sections so the
20874     `section' attribute is not available on all platforms.  If you
20875     need to map the entire contents of a module to a particular
20876     section, consider using the facilities of the linker instead.
20877
20878`shared'
20879     On Microsoft Windows, in addition to putting variable definitions
20880     in a named section, the section can also be shared among all
20881     running copies of an executable or DLL.  For example, this small
20882     program defines shared data by putting it in a named section
20883     `shared' and marking the section shareable:
20884
20885          int foo __attribute__((section ("shared"), shared)) = 0;
20886
20887          int
20888          main()
20889          {
20890            /* Read and write foo.  All running
20891               copies see the same value.  */
20892            return 0;
20893          }
20894
20895     You may only use the `shared' attribute along with `section'
20896     attribute with a fully initialized global definition because of
20897     the way linkers work.  See `section' attribute for more
20898     information.
20899
20900     The `shared' attribute is only available on Microsoft Windows.
20901
20902`tls_model ("TLS_MODEL")'
20903     The `tls_model' attribute sets thread-local storage model (*note
20904     Thread-Local::) of a particular `__thread' variable, overriding
20905     `-ftls-model=' command line switch on a per-variable basis.  The
20906     TLS_MODEL argument should be one of `global-dynamic',
20907     `local-dynamic', `initial-exec' or `local-exec'.
20908
20909     Not all targets support this attribute.
20910
20911`unused'
20912     This attribute, attached to a variable, means that the variable is
20913     meant to be possibly unused.  GCC will not produce a warning for
20914     this variable.
20915
20916`used'
20917     This attribute, attached to a variable, means that the variable
20918     must be emitted even if it appears that the variable is not
20919     referenced.
20920
20921`vector_size (BYTES)'
20922     This attribute specifies the vector size for the variable,
20923     measured in bytes.  For example, the declaration:
20924
20925          int foo __attribute__ ((vector_size (16)));
20926
20927     causes the compiler to set the mode for `foo', to be 16 bytes,
20928     divided into `int' sized units.  Assuming a 32-bit int (a vector of
20929     4 units of 4 bytes), the corresponding mode of `foo' will be V4SI.
20930
20931     This attribute is only applicable to integral and float scalars,
20932     although arrays, pointers, and function return values are allowed
20933     in conjunction with this construct.
20934
20935     Aggregates with this attribute are invalid, even if they are of
20936     the same size as a corresponding scalar.  For example, the
20937     declaration:
20938
20939          struct S { int a; };
20940          struct S  __attribute__ ((vector_size (16))) foo;
20941
20942     is invalid even if the size of the structure is the same as the
20943     size of the `int'.
20944
20945`selectany'
20946     The `selectany' attribute causes an initialized global variable to
20947     have link-once semantics.  When multiple definitions of the
20948     variable are encountered by the linker, the first is selected and
20949     the remainder are discarded.  Following usage by the Microsoft
20950     compiler, the linker is told _not_ to warn about size or content
20951     differences of the multiple definitions.
20952
20953     Although the primary usage of this attribute is for POD types, the
20954     attribute can also be applied to global C++ objects that are
20955     initialized by a constructor.  In this case, the static
20956     initialization and destruction code for the object is emitted in
20957     each translation defining the object, but the calls to the
20958     constructor and destructor are protected by a link-once guard
20959     variable.
20960
20961     The `selectany' attribute is only available on Microsoft Windows
20962     targets.  You can use `__declspec (selectany)' as a synonym for
20963     `__attribute__ ((selectany))' for compatibility with other
20964     compilers.
20965
20966`weak'
20967     The `weak' attribute is described in *note Function Attributes::.
20968
20969`dllimport'
20970     The `dllimport' attribute is described in *note Function
20971     Attributes::.
20972
20973`dllexport'
20974     The `dllexport' attribute is described in *note Function
20975     Attributes::.
20976
20977
209786.35.1 Blackfin Variable Attributes
20979-----------------------------------
20980
20981Three attributes are currently defined for the Blackfin.
20982
20983`l1_data'
20984`l1_data_A'
20985`l1_data_B'
20986     Use these attributes on the Blackfin to place the variable into L1
20987     Data SRAM.  Variables with `l1_data' attribute will be put into
20988     the specific section named `.l1.data'. Those with `l1_data_A'
20989     attribute will be put into the specific section named
20990     `.l1.data.A'. Those with `l1_data_B' attribute will be put into
20991     the specific section named `.l1.data.B'.
20992
20993`l2'
20994     Use this attribute on the Blackfin to place the variable into L2
20995     SRAM.  Variables with `l2' attribute will be put into the specific
20996     section named `.l2.data'.
20997
209986.35.2 M32R/D Variable Attributes
20999---------------------------------
21000
21001One attribute is currently defined for the M32R/D.
21002
21003`model (MODEL-NAME)'
21004     Use this attribute on the M32R/D to set the addressability of an
21005     object.  The identifier MODEL-NAME is one of `small', `medium', or
21006     `large', representing each of the code models.
21007
21008     Small model objects live in the lower 16MB of memory (so that their
21009     addresses can be loaded with the `ld24' instruction).
21010
21011     Medium and large model objects may live anywhere in the 32-bit
21012     address space (the compiler will generate `seth/add3' instructions
21013     to load their addresses).
21014
210156.35.3 MeP Variable Attributes
21016------------------------------
21017
21018The MeP target has a number of addressing modes and busses.  The `near'
21019space spans the standard memory space's first 16 megabytes (24 bits).
21020The `far' space spans the entire 32-bit memory space.  The `based'
21021space is a 128 byte region in the memory space which is addressed
21022relative to the `$tp' register.  The `tiny' space is a 65536 byte
21023region relative to the `$gp' register.  In addition to these memory
21024regions, the MeP target has a separate 16-bit control bus which is
21025specified with `cb' attributes.
21026
21027`based'
21028     Any variable with the `based' attribute will be assigned to the
21029     `.based' section, and will be accessed with relative to the `$tp'
21030     register.
21031
21032`tiny'
21033     Likewise, the `tiny' attribute assigned variables to the `.tiny'
21034     section, relative to the `$gp' register.
21035
21036`near'
21037     Variables with the `near' attribute are assumed to have addresses
21038     that fit in a 24-bit addressing mode.  This is the default for
21039     large variables (`-mtiny=4' is the default) but this attribute can
21040     override `-mtiny=' for small variables, or override `-ml'.
21041
21042`far'
21043     Variables with the `far' attribute are addressed using a full
21044     32-bit address.  Since this covers the entire memory space, this
21045     allows modules to make no assumptions about where variables might
21046     be stored.
21047
21048`io'
21049`io (ADDR)'
21050     Variables with the `io' attribute are used to address
21051     memory-mapped peripherals.  If an address is specified, the
21052     variable is assigned that address, else it is not assigned an
21053     address (it is assumed some other module will assign an address).
21054     Example:
21055
21056          int timer_count __attribute__((io(0x123)));
21057
21058`cb'
21059`cb (ADDR)'
21060     Variables with the `cb' attribute are used to access the control
21061     bus, using special instructions.  `addr' indicates the control bus
21062     address.  Example:
21063
21064          int cpu_clock __attribute__((cb(0x123)));
21065
21066
210676.35.4 i386 Variable Attributes
21068-------------------------------
21069
21070Two attributes are currently defined for i386 configurations:
21071`ms_struct' and `gcc_struct'
21072
21073`ms_struct'
21074`gcc_struct'
21075     If `packed' is used on a structure, or if bit-fields are used it
21076     may be that the Microsoft ABI packs them differently than GCC
21077     would normally pack them.  Particularly when moving packed data
21078     between functions compiled with GCC and the native Microsoft
21079     compiler (either via function call or as data in a file), it may
21080     be necessary to access either format.
21081
21082     Currently `-m[no-]ms-bitfields' is provided for the Microsoft
21083     Windows X86 compilers to match the native Microsoft compiler.
21084
21085     The Microsoft structure layout algorithm is fairly simple with the
21086     exception of the bitfield packing:
21087
21088     The padding and alignment of members of structures and whether a
21089     bit field can straddle a storage-unit boundary
21090
21091       1. Structure members are stored sequentially in the order in
21092          which they are declared: the first member has the lowest
21093          memory address and the last member the highest.
21094
21095       2. Every data object has an alignment-requirement. The
21096          alignment-requirement for all data except structures, unions,
21097          and arrays is either the size of the object or the current
21098          packing size (specified with either the aligned attribute or
21099          the pack pragma), whichever is less. For structures,  unions,
21100          and arrays, the alignment-requirement is the largest
21101          alignment-requirement of its members.  Every object is
21102          allocated an offset so that:
21103
21104          offset %  alignment-requirement == 0
21105
21106       3. Adjacent bit fields are packed into the same 1-, 2-, or
21107          4-byte allocation unit if the integral types are the same
21108          size and if the next bit field fits into the current
21109          allocation unit without crossing the boundary imposed by the
21110          common alignment requirements of the bit fields.
21111
21112     Handling of zero-length bitfields:
21113
21114     MSVC interprets zero-length bitfields in the following ways:
21115
21116       1. If a zero-length bitfield is inserted between two bitfields
21117          that would normally be coalesced, the bitfields will not be
21118          coalesced.
21119
21120          For example:
21121
21122               struct
21123                {
21124                  unsigned long bf_1 : 12;
21125                  unsigned long : 0;
21126                  unsigned long bf_2 : 12;
21127                } t1;
21128
21129          The size of `t1' would be 8 bytes with the zero-length
21130          bitfield.  If the zero-length bitfield were removed, `t1''s
21131          size would be 4 bytes.
21132
21133       2. If a zero-length bitfield is inserted after a bitfield,
21134          `foo', and the alignment of the zero-length bitfield is
21135          greater than the member that follows it, `bar', `bar' will be
21136          aligned as the type of the zero-length bitfield.
21137
21138          For example:
21139
21140               struct
21141                {
21142                  char foo : 4;
21143                  short : 0;
21144                  char bar;
21145                } t2;
21146
21147               struct
21148                {
21149                  char foo : 4;
21150                  short : 0;
21151                  double bar;
21152                } t3;
21153
21154          For `t2', `bar' will be placed at offset 2, rather than
21155          offset 1.  Accordingly, the size of `t2' will be 4.  For
21156          `t3', the zero-length bitfield will not affect the alignment
21157          of `bar' or, as a result, the size of the structure.
21158
21159          Taking this into account, it is important to note the
21160          following:
21161
21162            1. If a zero-length bitfield follows a normal bitfield, the
21163               type of the zero-length bitfield may affect the
21164               alignment of the structure as whole. For example, `t2'
21165               has a size of 4 bytes, since the zero-length bitfield
21166               follows a normal bitfield, and is of type short.
21167
21168            2. Even if a zero-length bitfield is not followed by a
21169               normal bitfield, it may still affect the alignment of
21170               the structure:
21171
21172                    struct
21173                     {
21174                       char foo : 6;
21175                       long : 0;
21176                     } t4;
21177
21178               Here, `t4' will take up 4 bytes.
21179
21180       3. Zero-length bitfields following non-bitfield members are
21181          ignored:
21182
21183               struct
21184                {
21185                  char foo;
21186                  long : 0;
21187                  char bar;
21188                } t5;
21189
21190          Here, `t5' will take up 2 bytes.
21191
211926.35.5 PowerPC Variable Attributes
21193----------------------------------
21194
21195Three attributes currently are defined for PowerPC configurations:
21196`altivec', `ms_struct' and `gcc_struct'.
21197
21198 For full documentation of the struct attributes please see the
21199documentation in *note i386 Variable Attributes::.
21200
21201 For documentation of `altivec' attribute please see the documentation
21202in *note PowerPC Type Attributes::.
21203
212046.35.6 SPU Variable Attributes
21205------------------------------
21206
21207The SPU supports the `spu_vector' attribute for variables.  For
21208documentation of this attribute please see the documentation in *note
21209SPU Type Attributes::.
21210
212116.35.7 Xstormy16 Variable Attributes
21212------------------------------------
21213
21214One attribute is currently defined for xstormy16 configurations:
21215`below100'.
21216
21217`below100'
21218     If a variable has the `below100' attribute (`BELOW100' is allowed
21219     also), GCC will place the variable in the first 0x100 bytes of
21220     memory and use special opcodes to access it.  Such variables will
21221     be placed in either the `.bss_below100' section or the
21222     `.data_below100' section.
21223
21224
212256.35.8 AVR Variable Attributes
21226------------------------------
21227
21228`progmem'
21229     The `progmem' attribute is used on the AVR to place data in the
21230     Program Memory address space. The AVR is a Harvard Architecture
21231     processor and data normally resides in the Data Memory address
21232     space.
21233
21234
21235File: gcc.info,  Node: Type Attributes,  Next: Alignment,  Prev: Variable Attributes,  Up: C Extensions
21236
212376.36 Specifying Attributes of Types
21238===================================
21239
21240The keyword `__attribute__' allows you to specify special attributes of
21241`struct' and `union' types when you define such types.  This keyword is
21242followed by an attribute specification inside double parentheses.
21243Seven attributes are currently defined for types: `aligned', `packed',
21244`transparent_union', `unused', `deprecated', `visibility', and
21245`may_alias'.  Other attributes are defined for functions (*note
21246Function Attributes::) and for variables (*note Variable Attributes::).
21247
21248 You may also specify any one of these attributes with `__' preceding
21249and following its keyword.  This allows you to use these attributes in
21250header files without being concerned about a possible macro of the same
21251name.  For example, you may use `__aligned__' instead of `aligned'.
21252
21253 You may specify type attributes in an enum, struct or union type
21254declaration or definition, or for other types in a `typedef'
21255declaration.
21256
21257 For an enum, struct or union type, you may specify attributes either
21258between the enum, struct or union tag and the name of the type, or just
21259past the closing curly brace of the _definition_.  The former syntax is
21260preferred.
21261
21262 *Note Attribute Syntax::, for details of the exact syntax for using
21263attributes.
21264
21265`aligned (ALIGNMENT)'
21266     This attribute specifies a minimum alignment (in bytes) for
21267     variables of the specified type.  For example, the declarations:
21268
21269          struct S { short f[3]; } __attribute__ ((aligned (8)));
21270          typedef int more_aligned_int __attribute__ ((aligned (8)));
21271
21272     force the compiler to insure (as far as it can) that each variable
21273     whose type is `struct S' or `more_aligned_int' will be allocated
21274     and aligned _at least_ on a 8-byte boundary.  On a SPARC, having
21275     all variables of type `struct S' aligned to 8-byte boundaries
21276     allows the compiler to use the `ldd' and `std' (doubleword load and
21277     store) instructions when copying one variable of type `struct S' to
21278     another, thus improving run-time efficiency.
21279
21280     Note that the alignment of any given `struct' or `union' type is
21281     required by the ISO C standard to be at least a perfect multiple of
21282     the lowest common multiple of the alignments of all of the members
21283     of the `struct' or `union' in question.  This means that you _can_
21284     effectively adjust the alignment of a `struct' or `union' type by
21285     attaching an `aligned' attribute to any one of the members of such
21286     a type, but the notation illustrated in the example above is a
21287     more obvious, intuitive, and readable way to request the compiler
21288     to adjust the alignment of an entire `struct' or `union' type.
21289
21290     As in the preceding example, you can explicitly specify the
21291     alignment (in bytes) that you wish the compiler to use for a given
21292     `struct' or `union' type.  Alternatively, you can leave out the
21293     alignment factor and just ask the compiler to align a type to the
21294     maximum useful alignment for the target machine you are compiling
21295     for.  For example, you could write:
21296
21297          struct S { short f[3]; } __attribute__ ((aligned));
21298
21299     Whenever you leave out the alignment factor in an `aligned'
21300     attribute specification, the compiler automatically sets the
21301     alignment for the type to the largest alignment which is ever used
21302     for any data type on the target machine you are compiling for.
21303     Doing this can often make copy operations more efficient, because
21304     the compiler can use whatever instructions copy the biggest chunks
21305     of memory when performing copies to or from the variables which
21306     have types that you have aligned this way.
21307
21308     In the example above, if the size of each `short' is 2 bytes, then
21309     the size of the entire `struct S' type is 6 bytes.  The smallest
21310     power of two which is greater than or equal to that is 8, so the
21311     compiler sets the alignment for the entire `struct S' type to 8
21312     bytes.
21313
21314     Note that although you can ask the compiler to select a
21315     time-efficient alignment for a given type and then declare only
21316     individual stand-alone objects of that type, the compiler's
21317     ability to select a time-efficient alignment is primarily useful
21318     only when you plan to create arrays of variables having the
21319     relevant (efficiently aligned) type.  If you declare or use arrays
21320     of variables of an efficiently-aligned type, then it is likely
21321     that your program will also be doing pointer arithmetic (or
21322     subscripting, which amounts to the same thing) on pointers to the
21323     relevant type, and the code that the compiler generates for these
21324     pointer arithmetic operations will often be more efficient for
21325     efficiently-aligned types than for other types.
21326
21327     The `aligned' attribute can only increase the alignment; but you
21328     can decrease it by specifying `packed' as well.  See below.
21329
21330     Note that the effectiveness of `aligned' attributes may be limited
21331     by inherent limitations in your linker.  On many systems, the
21332     linker is only able to arrange for variables to be aligned up to a
21333     certain maximum alignment.  (For some linkers, the maximum
21334     supported alignment may be very very small.)  If your linker is
21335     only able to align variables up to a maximum of 8 byte alignment,
21336     then specifying `aligned(16)' in an `__attribute__' will still
21337     only provide you with 8 byte alignment.  See your linker
21338     documentation for further information.
21339
21340`packed'
21341     This attribute, attached to `struct' or `union' type definition,
21342     specifies that each member (other than zero-width bitfields) of
21343     the structure or union is placed to minimize the memory required.
21344     When attached to an `enum' definition, it indicates that the
21345     smallest integral type should be used.
21346
21347     Specifying this attribute for `struct' and `union' types is
21348     equivalent to specifying the `packed' attribute on each of the
21349     structure or union members.  Specifying the `-fshort-enums' flag
21350     on the line is equivalent to specifying the `packed' attribute on
21351     all `enum' definitions.
21352
21353     In the following example `struct my_packed_struct''s members are
21354     packed closely together, but the internal layout of its `s' member
21355     is not packed--to do that, `struct my_unpacked_struct' would need
21356     to be packed too.
21357
21358          struct my_unpacked_struct
21359           {
21360              char c;
21361              int i;
21362           };
21363
21364          struct __attribute__ ((__packed__)) my_packed_struct
21365            {
21366               char c;
21367               int  i;
21368               struct my_unpacked_struct s;
21369            };
21370
21371     You may only specify this attribute on the definition of an `enum',
21372     `struct' or `union', not on a `typedef' which does not also define
21373     the enumerated type, structure or union.
21374
21375`transparent_union'
21376     This attribute, attached to a `union' type definition, indicates
21377     that any function parameter having that union type causes calls to
21378     that function to be treated in a special way.
21379
21380     First, the argument corresponding to a transparent union type can
21381     be of any type in the union; no cast is required.  Also, if the
21382     union contains a pointer type, the corresponding argument can be a
21383     null pointer constant or a void pointer expression; and if the
21384     union contains a void pointer type, the corresponding argument can
21385     be any pointer expression.  If the union member type is a pointer,
21386     qualifiers like `const' on the referenced type must be respected,
21387     just as with normal pointer conversions.
21388
21389     Second, the argument is passed to the function using the calling
21390     conventions of the first member of the transparent union, not the
21391     calling conventions of the union itself.  All members of the union
21392     must have the same machine representation; this is necessary for
21393     this argument passing to work properly.
21394
21395     Transparent unions are designed for library functions that have
21396     multiple interfaces for compatibility reasons.  For example,
21397     suppose the `wait' function must accept either a value of type
21398     `int *' to comply with Posix, or a value of type `union wait *' to
21399     comply with the 4.1BSD interface.  If `wait''s parameter were
21400     `void *', `wait' would accept both kinds of arguments, but it
21401     would also accept any other pointer type and this would make
21402     argument type checking less useful.  Instead, `<sys/wait.h>' might
21403     define the interface as follows:
21404
21405          typedef union __attribute__ ((__transparent_union__))
21406            {
21407              int *__ip;
21408              union wait *__up;
21409            } wait_status_ptr_t;
21410
21411          pid_t wait (wait_status_ptr_t);
21412
21413     This interface allows either `int *' or `union wait *' arguments
21414     to be passed, using the `int *' calling convention.  The program
21415     can call `wait' with arguments of either type:
21416
21417          int w1 () { int w; return wait (&w); }
21418          int w2 () { union wait w; return wait (&w); }
21419
21420     With this interface, `wait''s implementation might look like this:
21421
21422          pid_t wait (wait_status_ptr_t p)
21423          {
21424            return waitpid (-1, p.__ip, 0);
21425          }
21426
21427`unused'
21428     When attached to a type (including a `union' or a `struct'), this
21429     attribute means that variables of that type are meant to appear
21430     possibly unused.  GCC will not produce a warning for any variables
21431     of that type, even if the variable appears to do nothing.  This is
21432     often the case with lock or thread classes, which are usually
21433     defined and then not referenced, but contain constructors and
21434     destructors that have nontrivial bookkeeping functions.
21435
21436`deprecated'
21437`deprecated (MSG)'
21438     The `deprecated' attribute results in a warning if the type is
21439     used anywhere in the source file.  This is useful when identifying
21440     types that are expected to be removed in a future version of a
21441     program.  If possible, the warning also includes the location of
21442     the declaration of the deprecated type, to enable users to easily
21443     find further information about why the type is deprecated, or what
21444     they should do instead.  Note that the warnings only occur for
21445     uses and then only if the type is being applied to an identifier
21446     that itself is not being declared as deprecated.
21447
21448          typedef int T1 __attribute__ ((deprecated));
21449          T1 x;
21450          typedef T1 T2;
21451          T2 y;
21452          typedef T1 T3 __attribute__ ((deprecated));
21453          T3 z __attribute__ ((deprecated));
21454
21455     results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
21456     warning is issued for line 4 because T2 is not explicitly
21457     deprecated.  Line 5 has no warning because T3 is explicitly
21458     deprecated.  Similarly for line 6.  The optional msg argument,
21459     which must be a string, will be printed in the warning if present.
21460
21461     The `deprecated' attribute can also be used for functions and
21462     variables (*note Function Attributes::, *note Variable
21463     Attributes::.)
21464
21465`may_alias'
21466     Accesses through pointers to types with this attribute are not
21467     subject to type-based alias analysis, but are instead assumed to
21468     be able to alias any other type of objects.  In the context of
21469     6.5/7 an lvalue expression dereferencing such a pointer is treated
21470     like having a character type.  See `-fstrict-aliasing' for more
21471     information on aliasing issues.  This extension exists to support
21472     some vector APIs, in which pointers to one vector type are
21473     permitted to alias pointers to a different vector type.
21474
21475     Note that an object of a type with this attribute does not have any
21476     special semantics.
21477
21478     Example of use:
21479
21480          typedef short __attribute__((__may_alias__)) short_a;
21481
21482          int
21483          main (void)
21484          {
21485            int a = 0x12345678;
21486            short_a *b = (short_a *) &a;
21487
21488            b[1] = 0;
21489
21490            if (a == 0x12345678)
21491              abort();
21492
21493            exit(0);
21494          }
21495
21496     If you replaced `short_a' with `short' in the variable
21497     declaration, the above program would abort when compiled with
21498     `-fstrict-aliasing', which is on by default at `-O2' or above in
21499     recent GCC versions.
21500
21501`visibility'
21502     In C++, attribute visibility (*note Function Attributes::) can
21503     also be applied to class, struct, union and enum types.  Unlike
21504     other type attributes, the attribute must appear between the
21505     initial keyword and the name of the type; it cannot appear after
21506     the body of the type.
21507
21508     Note that the type visibility is applied to vague linkage entities
21509     associated with the class (vtable, typeinfo node, etc.).  In
21510     particular, if a class is thrown as an exception in one shared
21511     object and caught in another, the class must have default
21512     visibility.  Otherwise the two shared objects will be unable to
21513     use the same typeinfo node and exception handling will break.
21514
21515
215166.36.1 ARM Type Attributes
21517--------------------------
21518
21519On those ARM targets that support `dllimport' (such as Symbian OS), you
21520can use the `notshared' attribute to indicate that the virtual table
21521and other similar data for a class should not be exported from a DLL.
21522For example:
21523
21524     class __declspec(notshared) C {
21525     public:
21526       __declspec(dllimport) C();
21527       virtual void f();
21528     }
21529
21530     __declspec(dllexport)
21531     C::C() {}
21532
21533 In this code, `C::C' is exported from the current DLL, but the virtual
21534table for `C' is not exported.  (You can use `__attribute__' instead of
21535`__declspec' if you prefer, but most Symbian OS code uses `__declspec'.)
21536
215376.36.2 MeP Type Attributes
21538--------------------------
21539
21540Many of the MeP variable attributes may be applied to types as well.
21541Specifically, the `based', `tiny', `near', and `far' attributes may be
21542applied to either.  The `io' and `cb' attributes may not be applied to
21543types.
21544
215456.36.3 i386 Type Attributes
21546---------------------------
21547
21548Two attributes are currently defined for i386 configurations:
21549`ms_struct' and `gcc_struct'.
21550
21551`ms_struct'
21552`gcc_struct'
21553     If `packed' is used on a structure, or if bit-fields are used it
21554     may be that the Microsoft ABI packs them differently than GCC
21555     would normally pack them.  Particularly when moving packed data
21556     between functions compiled with GCC and the native Microsoft
21557     compiler (either via function call or as data in a file), it may
21558     be necessary to access either format.
21559
21560     Currently `-m[no-]ms-bitfields' is provided for the Microsoft
21561     Windows X86 compilers to match the native Microsoft compiler.
21562
21563 To specify multiple attributes, separate them by commas within the
21564double parentheses: for example, `__attribute__ ((aligned (16),
21565packed))'.
21566
215676.36.4 PowerPC Type Attributes
21568------------------------------
21569
21570Three attributes currently are defined for PowerPC configurations:
21571`altivec', `ms_struct' and `gcc_struct'.
21572
21573 For full documentation of the `ms_struct' and `gcc_struct' attributes
21574please see the documentation in *note i386 Type Attributes::.
21575
21576 The `altivec' attribute allows one to declare AltiVec vector data
21577types supported by the AltiVec Programming Interface Manual.  The
21578attribute requires an argument to specify one of three vector types:
21579`vector__', `pixel__' (always followed by unsigned short), and `bool__'
21580(always followed by unsigned).
21581
21582     __attribute__((altivec(vector__)))
21583     __attribute__((altivec(pixel__))) unsigned short
21584     __attribute__((altivec(bool__))) unsigned
21585
21586 These attributes mainly are intended to support the `__vector',
21587`__pixel', and `__bool' AltiVec keywords.
21588
215896.36.5 SPU Type Attributes
21590--------------------------
21591
21592The SPU supports the `spu_vector' attribute for types.  This attribute
21593allows one to declare vector data types supported by the
21594Sony/Toshiba/IBM SPU Language Extensions Specification.  It is intended
21595to support the `__vector' keyword.
21596
21597
21598File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Type Attributes,  Up: C Extensions
21599
216006.37 Inquiring on Alignment of Types or Variables
21601=================================================
21602
21603The keyword `__alignof__' allows you to inquire about how an object is
21604aligned, or the minimum alignment usually required by a type.  Its
21605syntax is just like `sizeof'.
21606
21607 For example, if the target machine requires a `double' value to be
21608aligned on an 8-byte boundary, then `__alignof__ (double)' is 8.  This
21609is true on many RISC machines.  On more traditional machine designs,
21610`__alignof__ (double)' is 4 or even 2.
21611
21612 Some machines never actually require alignment; they allow reference
21613to any data type even at an odd address.  For these machines,
21614`__alignof__' reports the smallest alignment that GCC will give the
21615data type, usually as mandated by the target ABI.
21616
21617 If the operand of `__alignof__' is an lvalue rather than a type, its
21618value is the required alignment for its type, taking into account any
21619minimum alignment specified with GCC's `__attribute__' extension (*note
21620Variable Attributes::).  For example, after this declaration:
21621
21622     struct foo { int x; char y; } foo1;
21623
21624the value of `__alignof__ (foo1.y)' is 1, even though its actual
21625alignment is probably 2 or 4, the same as `__alignof__ (int)'.
21626
21627 It is an error to ask for the alignment of an incomplete type.
21628
21629
21630File: gcc.info,  Node: Inline,  Next: Extended Asm,  Prev: Alignment,  Up: C Extensions
21631
216326.38 An Inline Function is As Fast As a Macro
21633=============================================
21634
21635By declaring a function inline, you can direct GCC to make calls to
21636that function faster.  One way GCC can achieve this is to integrate
21637that function's code into the code for its callers.  This makes
21638execution faster by eliminating the function-call overhead; in
21639addition, if any of the actual argument values are constant, their
21640known values may permit simplifications at compile time so that not all
21641of the inline function's code needs to be included.  The effect on code
21642size is less predictable; object code may be larger or smaller with
21643function inlining, depending on the particular case.  You can also
21644direct GCC to try to integrate all "simple enough" functions into their
21645callers with the option `-finline-functions'.
21646
21647 GCC implements three different semantics of declaring a function
21648inline.  One is available with `-std=gnu89' or `-fgnu89-inline' or when
21649`gnu_inline' attribute is present on all inline declarations, another
21650when `-std=c99' or `-std=gnu99' (without `-fgnu89-inline'), and the
21651third is used when compiling C++.
21652
21653 To declare a function inline, use the `inline' keyword in its
21654declaration, like this:
21655
21656     static inline int
21657     inc (int *a)
21658     {
21659       (*a)++;
21660     }
21661
21662 If you are writing a header file to be included in ISO C90 programs,
21663write `__inline__' instead of `inline'.  *Note Alternate Keywords::.
21664
21665 The three types of inlining behave similarly in two important cases:
21666when the `inline' keyword is used on a `static' function, like the
21667example above, and when a function is first declared without using the
21668`inline' keyword and then is defined with `inline', like this:
21669
21670     extern int inc (int *a);
21671     inline int
21672     inc (int *a)
21673     {
21674       (*a)++;
21675     }
21676
21677 In both of these common cases, the program behaves the same as if you
21678had not used the `inline' keyword, except for its speed.
21679
21680 When a function is both inline and `static', if all calls to the
21681function are integrated into the caller, and the function's address is
21682never used, then the function's own assembler code is never referenced.
21683In this case, GCC does not actually output assembler code for the
21684function, unless you specify the option `-fkeep-inline-functions'.
21685Some calls cannot be integrated for various reasons (in particular,
21686calls that precede the function's definition cannot be integrated, and
21687neither can recursive calls within the definition).  If there is a
21688nonintegrated call, then the function is compiled to assembler code as
21689usual.  The function must also be compiled as usual if the program
21690refers to its address, because that can't be inlined.
21691
21692 Note that certain usages in a function definition can make it
21693unsuitable for inline substitution.  Among these usages are: use of
21694varargs, use of alloca, use of variable sized data types (*note
21695Variable Length::), use of computed goto (*note Labels as Values::),
21696use of nonlocal goto, and nested functions (*note Nested Functions::).
21697Using `-Winline' will warn when a function marked `inline' could not be
21698substituted, and will give the reason for the failure.
21699
21700 As required by ISO C++, GCC considers member functions defined within
21701the body of a class to be marked inline even if they are not explicitly
21702declared with the `inline' keyword.  You can override this with
21703`-fno-default-inline'; *note Options Controlling C++ Dialect: C++
21704Dialect Options.
21705
21706 GCC does not inline any functions when not optimizing unless you
21707specify the `always_inline' attribute for the function, like this:
21708
21709     /* Prototype.  */
21710     inline void foo (const char) __attribute__((always_inline));
21711
21712 The remainder of this section is specific to GNU C90 inlining.
21713
21714 When an inline function is not `static', then the compiler must assume
21715that there may be calls from other source files; since a global symbol
21716can be defined only once in any program, the function must not be
21717defined in the other source files, so the calls therein cannot be
21718integrated.  Therefore, a non-`static' inline function is always
21719compiled on its own in the usual fashion.
21720
21721 If you specify both `inline' and `extern' in the function definition,
21722then the definition is used only for inlining.  In no case is the
21723function compiled on its own, not even if you refer to its address
21724explicitly.  Such an address becomes an external reference, as if you
21725had only declared the function, and had not defined it.
21726
21727 This combination of `inline' and `extern' has almost the effect of a
21728macro.  The way to use it is to put a function definition in a header
21729file with these keywords, and put another copy of the definition
21730(lacking `inline' and `extern') in a library file.  The definition in
21731the header file will cause most calls to the function to be inlined.
21732If any uses of the function remain, they will refer to the single copy
21733in the library.
21734
21735
21736File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Inline,  Up: C Extensions
21737
217386.39 Assembler Instructions with C Expression Operands
21739======================================================
21740
21741In an assembler instruction using `asm', you can specify the operands
21742of the instruction using C expressions.  This means you need not guess
21743which registers or memory locations will contain the data you want to
21744use.
21745
21746 You must specify an assembler instruction template much like what
21747appears in a machine description, plus an operand constraint string for
21748each operand.
21749
21750 For example, here is how to use the 68881's `fsinx' instruction:
21751
21752     asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
21753
21754Here `angle' is the C expression for the input operand while `result'
21755is that of the output operand.  Each has `"f"' as its operand
21756constraint, saying that a floating point register is required.  The `='
21757in `=f' indicates that the operand is an output; all output operands'
21758constraints must use `='.  The constraints use the same language used
21759in the machine description (*note Constraints::).
21760
21761 Each operand is described by an operand-constraint string followed by
21762the C expression in parentheses.  A colon separates the assembler
21763template from the first output operand and another separates the last
21764output operand from the first input, if any.  Commas separate the
21765operands within each group.  The total number of operands is currently
21766limited to 30; this limitation may be lifted in some future version of
21767GCC.
21768
21769 If there are no output operands but there are input operands, you must
21770place two consecutive colons surrounding the place where the output
21771operands would go.
21772
21773 As of GCC version 3.1, it is also possible to specify input and output
21774operands using symbolic names which can be referenced within the
21775assembler code.  These names are specified inside square brackets
21776preceding the constraint string, and can be referenced inside the
21777assembler code using `%[NAME]' instead of a percentage sign followed by
21778the operand number.  Using named operands the above example could look
21779like:
21780
21781     asm ("fsinx %[angle],%[output]"
21782          : [output] "=f" (result)
21783          : [angle] "f" (angle));
21784
21785Note that the symbolic operand names have no relation whatsoever to
21786other C identifiers.  You may use any name you like, even those of
21787existing C symbols, but you must ensure that no two operands within the
21788same assembler construct use the same symbolic name.
21789
21790 Output operand expressions must be lvalues; the compiler can check
21791this.  The input operands need not be lvalues.  The compiler cannot
21792check whether the operands have data types that are reasonable for the
21793instruction being executed.  It does not parse the assembler instruction
21794template and does not know what it means or even whether it is valid
21795assembler input.  The extended `asm' feature is most often used for
21796machine instructions the compiler itself does not know exist.  If the
21797output expression cannot be directly addressed (for example, it is a
21798bit-field), your constraint must allow a register.  In that case, GCC
21799will use the register as the output of the `asm', and then store that
21800register into the output.
21801
21802 The ordinary output operands must be write-only; GCC will assume that
21803the values in these operands before the instruction are dead and need
21804not be generated.  Extended asm supports input-output or read-write
21805operands.  Use the constraint character `+' to indicate such an operand
21806and list it with the output operands.  You should only use read-write
21807operands when the constraints for the operand (or the operand in which
21808only some of the bits are to be changed) allow a register.
21809
21810 You may, as an alternative, logically split its function into two
21811separate operands, one input operand and one write-only output operand.
21812The connection between them is expressed by constraints which say they
21813need to be in the same location when the instruction executes.  You can
21814use the same C expression for both operands, or different expressions.
21815For example, here we write the (fictitious) `combine' instruction with
21816`bar' as its read-only source operand and `foo' as its read-write
21817destination:
21818
21819     asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
21820
21821The constraint `"0"' for operand 1 says that it must occupy the same
21822location as operand 0.  A number in constraint is allowed only in an
21823input operand and it must refer to an output operand.
21824
21825 Only a number in the constraint can guarantee that one operand will be
21826in the same place as another.  The mere fact that `foo' is the value of
21827both operands is not enough to guarantee that they will be in the same
21828place in the generated assembler code.  The following would not work
21829reliably:
21830
21831     asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
21832
21833 Various optimizations or reloading could cause operands 0 and 1 to be
21834in different registers; GCC knows no reason not to do so.  For example,
21835the compiler might find a copy of the value of `foo' in one register and
21836use it for operand 1, but generate the output operand 0 in a different
21837register (copying it afterward to `foo''s own address).  Of course,
21838since the register for operand 1 is not even mentioned in the assembler
21839code, the result will not work, but GCC can't tell that.
21840
21841 As of GCC version 3.1, one may write `[NAME]' instead of the operand
21842number for a matching constraint.  For example:
21843
21844     asm ("cmoveq %1,%2,%[result]"
21845          : [result] "=r"(result)
21846          : "r" (test), "r"(new), "[result]"(old));
21847
21848 Sometimes you need to make an `asm' operand be a specific register,
21849but there's no matching constraint letter for that register _by
21850itself_.  To force the operand into that register, use a local variable
21851for the operand and specify the register in the variable declaration.
21852*Note Explicit Reg Vars::.  Then for the `asm' operand, use any
21853register constraint letter that matches the register:
21854
21855     register int *p1 asm ("r0") = ...;
21856     register int *p2 asm ("r1") = ...;
21857     register int *result asm ("r0");
21858     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
21859
21860 In the above example, beware that a register that is call-clobbered by
21861the target ABI will be overwritten by any function call in the
21862assignment, including library calls for arithmetic operators.  Also a
21863register may be clobbered when generating some operations, like
21864variable shift, memory copy or memory move on x86.  Assuming it is a
21865call-clobbered register, this may happen to `r0' above by the
21866assignment to `p2'.  If you have to use such a register, use temporary
21867variables for expressions between the register assignment and use:
21868
21869     int t1 = ...;
21870     register int *p1 asm ("r0") = ...;
21871     register int *p2 asm ("r1") = t1;
21872     register int *result asm ("r0");
21873     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
21874
21875 Some instructions clobber specific hard registers.  To describe this,
21876write a third colon after the input operands, followed by the names of
21877the clobbered hard registers (given as strings).  Here is a realistic
21878example for the VAX:
21879
21880     asm volatile ("movc3 %0,%1,%2"
21881                   : /* no outputs */
21882                   : "g" (from), "g" (to), "g" (count)
21883                   : "r0", "r1", "r2", "r3", "r4", "r5");
21884
21885 You may not write a clobber description in a way that overlaps with an
21886input or output operand.  For example, you may not have an operand
21887describing a register class with one member if you mention that register
21888in the clobber list.  Variables declared to live in specific registers
21889(*note Explicit Reg Vars::), and used as asm input or output operands
21890must have no part mentioned in the clobber description.  There is no
21891way for you to specify that an input operand is modified without also
21892specifying it as an output operand.  Note that if all the output
21893operands you specify are for this purpose (and hence unused), you will
21894then also need to specify `volatile' for the `asm' construct, as
21895described below, to prevent GCC from deleting the `asm' statement as
21896unused.
21897
21898 If you refer to a particular hardware register from the assembler code,
21899you will probably have to list the register after the third colon to
21900tell the compiler the register's value is modified.  In some assemblers,
21901the register names begin with `%'; to produce one `%' in the assembler
21902code, you must write `%%' in the input.
21903
21904 If your assembler instruction can alter the condition code register,
21905add `cc' to the list of clobbered registers.  GCC on some machines
21906represents the condition codes as a specific hardware register; `cc'
21907serves to name this register.  On other machines, the condition code is
21908handled differently, and specifying `cc' has no effect.  But it is
21909valid no matter what the machine.
21910
21911 If your assembler instructions access memory in an unpredictable
21912fashion, add `memory' to the list of clobbered registers.  This will
21913cause GCC to not keep memory values cached in registers across the
21914assembler instruction and not optimize stores or loads to that memory.
21915You will also want to add the `volatile' keyword if the memory affected
21916is not listed in the inputs or outputs of the `asm', as the `memory'
21917clobber does not count as a side-effect of the `asm'.  If you know how
21918large the accessed memory is, you can add it as input or output but if
21919this is not known, you should add `memory'.  As an example, if you
21920access ten bytes of a string, you can use a memory input like:
21921
21922     {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}.
21923
21924 Note that in the following example the memory input is necessary,
21925otherwise GCC might optimize the store to `x' away:
21926     int foo ()
21927     {
21928       int x = 42;
21929       int *y = &x;
21930       int result;
21931       asm ("magic stuff accessing an 'int' pointed to by '%1'"
21932             "=&d" (r) : "a" (y), "m" (*y));
21933       return result;
21934     }
21935
21936 You can put multiple assembler instructions together in a single `asm'
21937template, separated by the characters normally used in assembly code
21938for the system.  A combination that works in most places is a newline
21939to break the line, plus a tab character to move to the instruction field
21940(written as `\n\t').  Sometimes semicolons can be used, if the
21941assembler allows semicolons as a line-breaking character.  Note that
21942some assembler dialects use semicolons to start a comment.  The input
21943operands are guaranteed not to use any of the clobbered registers, and
21944neither will the output operands' addresses, so you can read and write
21945the clobbered registers as many times as you like.  Here is an example
21946of multiple instructions in a template; it assumes the subroutine
21947`_foo' accepts arguments in registers 9 and 10:
21948
21949     asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
21950          : /* no outputs */
21951          : "g" (from), "g" (to)
21952          : "r9", "r10");
21953
21954 Unless an output operand has the `&' constraint modifier, GCC may
21955allocate it in the same register as an unrelated input operand, on the
21956assumption the inputs are consumed before the outputs are produced.
21957This assumption may be false if the assembler code actually consists of
21958more than one instruction.  In such a case, use `&' for each output
21959operand that may not overlap an input.  *Note Modifiers::.
21960
21961 If you want to test the condition code produced by an assembler
21962instruction, you must include a branch and a label in the `asm'
21963construct, as follows:
21964
21965     asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:"
21966          : "g" (result)
21967          : "g" (input));
21968
21969This assumes your assembler supports local labels, as the GNU assembler
21970and most Unix assemblers do.
21971
21972 Speaking of labels, jumps from one `asm' to another are not supported.
21973The compiler's optimizers do not know about these jumps, and therefore
21974they cannot take account of them when deciding how to optimize.  *Note
21975Extended asm with goto::.
21976
21977 Usually the most convenient way to use these `asm' instructions is to
21978encapsulate them in macros that look like functions.  For example,
21979
21980     #define sin(x)       \
21981     ({ double __value, __arg = (x);   \
21982        asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
21983        __value; })
21984
21985Here the variable `__arg' is used to make sure that the instruction
21986operates on a proper `double' value, and to accept only those arguments
21987`x' which can convert automatically to a `double'.
21988
21989 Another way to make sure the instruction operates on the correct data
21990type is to use a cast in the `asm'.  This is different from using a
21991variable `__arg' in that it converts more different types.  For
21992example, if the desired type were `int', casting the argument to `int'
21993would accept a pointer with no complaint, while assigning the argument
21994to an `int' variable named `__arg' would warn about using a pointer
21995unless the caller explicitly casts it.
21996
21997 If an `asm' has output operands, GCC assumes for optimization purposes
21998the instruction has no side effects except to change the output
21999operands.  This does not mean instructions with a side effect cannot be
22000used, but you must be careful, because the compiler may eliminate them
22001if the output operands aren't used, or move them out of loops, or
22002replace two with one if they constitute a common subexpression.  Also,
22003if your instruction does have a side effect on a variable that otherwise
22004appears not to change, the old value of the variable may be reused later
22005if it happens to be found in a register.
22006
22007 You can prevent an `asm' instruction from being deleted by writing the
22008keyword `volatile' after the `asm'.  For example:
22009
22010     #define get_and_set_priority(new)              \
22011     ({ int __old;                                  \
22012        asm volatile ("get_and_set_priority %0, %1" \
22013                      : "=g" (__old) : "g" (new));  \
22014        __old; })
22015
22016The `volatile' keyword indicates that the instruction has important
22017side-effects.  GCC will not delete a volatile `asm' if it is reachable.
22018(The instruction can still be deleted if GCC can prove that
22019control-flow will never reach the location of the instruction.)  Note
22020that even a volatile `asm' instruction can be moved relative to other
22021code, including across jump instructions.  For example, on many targets
22022there is a system register which can be set to control the rounding
22023mode of floating point operations.  You might try setting it with a
22024volatile `asm', like this PowerPC example:
22025
22026            asm volatile("mtfsf 255,%0" : : "f" (fpenv));
22027            sum = x + y;
22028
22029This will not work reliably, as the compiler may move the addition back
22030before the volatile `asm'.  To make it work you need to add an
22031artificial dependency to the `asm' referencing a variable in the code
22032you don't want moved, for example:
22033
22034         asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv));
22035         sum = x + y;
22036
22037 Similarly, you can't expect a sequence of volatile `asm' instructions
22038to remain perfectly consecutive.  If you want consecutive output, use a
22039single `asm'.  Also, GCC will perform some optimizations across a
22040volatile `asm' instruction; GCC does not "forget everything" when it
22041encounters a volatile `asm' instruction the way some other compilers do.
22042
22043 An `asm' instruction without any output operands will be treated
22044identically to a volatile `asm' instruction.
22045
22046 It is a natural idea to look for a way to give access to the condition
22047code left by the assembler instruction.  However, when we attempted to
22048implement this, we found no way to make it work reliably.  The problem
22049is that output operands might need reloading, which would result in
22050additional following "store" instructions.  On most machines, these
22051instructions would alter the condition code before there was time to
22052test it.  This problem doesn't arise for ordinary "test" and "compare"
22053instructions because they don't have any output operands.
22054
22055 For reasons similar to those described above, it is not possible to
22056give an assembler instruction access to the condition code left by
22057previous instructions.
22058
22059 As of GCC version 4.5, `asm goto' may be used to have the assembly
22060jump to one or more C labels.  In this form, a fifth section after the
22061clobber list contains a list of all C labels to which the assembly may
22062jump.  Each label operand is implicitly self-named.  The `asm' is also
22063assumed to fall through to the next statement.
22064
22065 This form of `asm' is restricted to not have outputs.  This is due to
22066a internal restriction in the compiler that control transfer
22067instructions cannot have outputs.  This restriction on `asm goto' may
22068be lifted in some future version of the compiler.  In the mean time,
22069`asm goto' may include a memory clobber, and so leave outputs in memory.
22070
22071     int frob(int x)
22072     {
22073       int y;
22074       asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
22075                 : : "r"(x), "r"(&y) : "r5", "memory" : error);
22076       return y;
22077      error:
22078       return -1;
22079     }
22080
22081 In this (inefficient) example, the `frob' instruction sets the carry
22082bit to indicate an error.  The `jc' instruction detects this and
22083branches to the `error' label.  Finally, the output of the `frob'
22084instruction (`%r5') is stored into the memory for variable `y', which
22085is later read by the `return' statement.
22086
22087     void doit(void)
22088     {
22089       int i = 0;
22090       asm goto ("mfsr %%r1, 123; jmp %%r1;"
22091                 ".pushsection doit_table;"
22092                 ".long %l0, %l1, %l2, %l3;"
22093                 ".popsection"
22094                 : : : "r1" : label1, label2, label3, label4);
22095       __builtin_unreachable ();
22096
22097      label1:
22098       f1();
22099       return;
22100      label2:
22101       f2();
22102       return;
22103      label3:
22104       i = 1;
22105      label4:
22106       f3(i);
22107     }
22108
22109 In this (also inefficient) example, the `mfsr' instruction reads an
22110address from some out-of-band machine register, and the following `jmp'
22111instruction branches to that address.  The address read by the `mfsr'
22112instruction is assumed to have been previously set via some
22113application-specific mechanism to be one of the four values stored in
22114the `doit_table' section.  Finally, the `asm' is followed by a call to
22115`__builtin_unreachable' to indicate that the `asm' does not in fact
22116fall through.
22117
22118     #define TRACE1(NUM)                         \
22119       do {                                      \
22120         asm goto ("0: nop;"                     \
22121                   ".pushsection trace_table;"   \
22122                   ".long 0b, %l0;"              \
22123                   ".popsection"                 \
22124                   : : : : trace#NUM);           \
22125         if (0) { trace#NUM: trace(); }          \
22126       } while (0)
22127     #define TRACE  TRACE1(__COUNTER__)
22128
22129 In this example (which in fact inspired the `asm goto' feature) we
22130want on rare occasions to call the `trace' function; on other occasions
22131we'd like to keep the overhead to the absolute minimum.  The normal
22132code path consists of a single `nop' instruction.  However, we record
22133the address of this `nop' together with the address of a label that
22134calls the `trace' function.  This allows the `nop' instruction to be
22135patched at runtime to be an unconditional branch to the stored label.
22136It is assumed that an optimizing compiler will move the labeled block
22137out of line, to optimize the fall through path from the `asm'.
22138
22139 If you are writing a header file that should be includable in ISO C
22140programs, write `__asm__' instead of `asm'.  *Note Alternate Keywords::.
22141
221426.39.1 Size of an `asm'
22143-----------------------
22144
22145Some targets require that GCC track the size of each instruction used in
22146order to generate correct code.  Because the final length of an `asm'
22147is only known by the assembler, GCC must make an estimate as to how big
22148it will be.  The estimate is formed by counting the number of
22149statements in the pattern of the `asm' and multiplying that by the
22150length of the longest instruction on that processor.  Statements in the
22151`asm' are identified by newline characters and whatever statement
22152separator characters are supported by the assembler; on most processors
22153this is the ``;'' character.
22154
22155 Normally, GCC's estimate is perfectly adequate to ensure that correct
22156code is generated, but it is possible to confuse the compiler if you use
22157pseudo instructions or assembler macros that expand into multiple real
22158instructions or if you use assembler directives that expand to more
22159space in the object file than would be needed for a single instruction.
22160If this happens then the assembler will produce a diagnostic saying that
22161a label is unreachable.
22162
221636.39.2 i386 floating point asm operands
22164---------------------------------------
22165
22166There are several rules on the usage of stack-like regs in asm_operands
22167insns.  These rules apply only to the operands that are stack-like regs:
22168
22169  1. Given a set of input regs that die in an asm_operands, it is
22170     necessary to know which are implicitly popped by the asm, and
22171     which must be explicitly popped by gcc.
22172
22173     An input reg that is implicitly popped by the asm must be
22174     explicitly clobbered, unless it is constrained to match an output
22175     operand.
22176
22177  2. For any input reg that is implicitly popped by an asm, it is
22178     necessary to know how to adjust the stack to compensate for the
22179     pop.  If any non-popped input is closer to the top of the
22180     reg-stack than the implicitly popped reg, it would not be possible
22181     to know what the stack looked like--it's not clear how the rest of
22182     the stack "slides up".
22183
22184     All implicitly popped input regs must be closer to the top of the
22185     reg-stack than any input that is not implicitly popped.
22186
22187     It is possible that if an input dies in an insn, reload might use
22188     the input reg for an output reload.  Consider this example:
22189
22190          asm ("foo" : "=t" (a) : "f" (b));
22191
22192     This asm says that input B is not popped by the asm, and that the
22193     asm pushes a result onto the reg-stack, i.e., the stack is one
22194     deeper after the asm than it was before.  But, it is possible that
22195     reload will think that it can use the same reg for both the input
22196     and the output, if input B dies in this insn.
22197
22198     If any input operand uses the `f' constraint, all output reg
22199     constraints must use the `&' earlyclobber.
22200
22201     The asm above would be written as
22202
22203          asm ("foo" : "=&t" (a) : "f" (b));
22204
22205  3. Some operands need to be in particular places on the stack.  All
22206     output operands fall in this category--there is no other way to
22207     know which regs the outputs appear in unless the user indicates
22208     this in the constraints.
22209
22210     Output operands must specifically indicate which reg an output
22211     appears in after an asm.  `=f' is not allowed: the operand
22212     constraints must select a class with a single reg.
22213
22214  4. Output operands may not be "inserted" between existing stack regs.
22215     Since no 387 opcode uses a read/write operand, all output operands
22216     are dead before the asm_operands, and are pushed by the
22217     asm_operands.  It makes no sense to push anywhere but the top of
22218     the reg-stack.
22219
22220     Output operands must start at the top of the reg-stack: output
22221     operands may not "skip" a reg.
22222
22223  5. Some asm statements may need extra stack space for internal
22224     calculations.  This can be guaranteed by clobbering stack registers
22225     unrelated to the inputs and outputs.
22226
22227
22228 Here are a couple of reasonable asms to want to write.  This asm takes
22229one input, which is internally popped, and produces two outputs.
22230
22231     asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
22232
22233 This asm takes two inputs, which are popped by the `fyl2xp1' opcode,
22234and replaces them with one output.  The user must code the `st(1)'
22235clobber for reg-stack.c to know that `fyl2xp1' pops both inputs.
22236
22237     asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
22238
22239
22240File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: C Extensions
22241
222426.40 Constraints for `asm' Operands
22243===================================
22244
22245Here are specific details on what constraint letters you can use with
22246`asm' operands.  Constraints can say whether an operand may be in a
22247register, and which kinds of register; whether the operand can be a
22248memory reference, and which kinds of address; whether the operand may
22249be an immediate constant, and which possible values it may have.
22250Constraints can also require two operands to match.
22251
22252* Menu:
22253
22254* Simple Constraints::  Basic use of constraints.
22255* Multi-Alternative::   When an insn has two alternative constraint-patterns.
22256* Modifiers::           More precise control over effects of constraints.
22257* Machine Constraints:: Special constraints for some particular machines.
22258
22259
22260File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
22261
222626.40.1 Simple Constraints
22263-------------------------
22264
22265The simplest kind of constraint is a string full of letters, each of
22266which describes one kind of operand that is permitted.  Here are the
22267letters that are allowed:
22268
22269whitespace
22270     Whitespace characters are ignored and can be inserted at any
22271     position except the first.  This enables each alternative for
22272     different operands to be visually aligned in the machine
22273     description even if they have different number of constraints and
22274     modifiers.
22275
22276`m'
22277     A memory operand is allowed, with any kind of address that the
22278     machine supports in general.  Note that the letter used for the
22279     general memory constraint can be re-defined by a back end using
22280     the `TARGET_MEM_CONSTRAINT' macro.
22281
22282`o'
22283     A memory operand is allowed, but only if the address is
22284     "offsettable".  This means that adding a small integer (actually,
22285     the width in bytes of the operand, as determined by its machine
22286     mode) may be added to the address and the result is also a valid
22287     memory address.
22288
22289     For example, an address which is constant is offsettable; so is an
22290     address that is the sum of a register and a constant (as long as a
22291     slightly larger constant is also within the range of
22292     address-offsets supported by the machine); but an autoincrement or
22293     autodecrement address is not offsettable.  More complicated
22294     indirect/indexed addresses may or may not be offsettable depending
22295     on the other addressing modes that the machine supports.
22296
22297     Note that in an output operand which can be matched by another
22298     operand, the constraint letter `o' is valid only when accompanied
22299     by both `<' (if the target machine has predecrement addressing)
22300     and `>' (if the target machine has preincrement addressing).
22301
22302`V'
22303     A memory operand that is not offsettable.  In other words,
22304     anything that would fit the `m' constraint but not the `o'
22305     constraint.
22306
22307`<'
22308     A memory operand with autodecrement addressing (either
22309     predecrement or postdecrement) is allowed.
22310
22311`>'
22312     A memory operand with autoincrement addressing (either
22313     preincrement or postincrement) is allowed.
22314
22315`r'
22316     A register operand is allowed provided that it is in a general
22317     register.
22318
22319`i'
22320     An immediate integer operand (one with constant value) is allowed.
22321     This includes symbolic constants whose values will be known only at
22322     assembly time or later.
22323
22324`n'
22325     An immediate integer operand with a known numeric value is allowed.
22326     Many systems cannot support assembly-time constants for operands
22327     less than a word wide.  Constraints for these operands should use
22328     `n' rather than `i'.
22329
22330`I', `J', `K', ... `P'
22331     Other letters in the range `I' through `P' may be defined in a
22332     machine-dependent fashion to permit immediate integer operands with
22333     explicit integer values in specified ranges.  For example, on the
22334     68000, `I' is defined to stand for the range of values 1 to 8.
22335     This is the range permitted as a shift count in the shift
22336     instructions.
22337
22338`E'
22339     An immediate floating operand (expression code `const_double') is
22340     allowed, but only if the target floating point format is the same
22341     as that of the host machine (on which the compiler is running).
22342
22343`F'
22344     An immediate floating operand (expression code `const_double' or
22345     `const_vector') is allowed.
22346
22347`G', `H'
22348     `G' and `H' may be defined in a machine-dependent fashion to
22349     permit immediate floating operands in particular ranges of values.
22350
22351`s'
22352     An immediate integer operand whose value is not an explicit
22353     integer is allowed.
22354
22355     This might appear strange; if an insn allows a constant operand
22356     with a value not known at compile time, it certainly must allow
22357     any known value.  So why use `s' instead of `i'?  Sometimes it
22358     allows better code to be generated.
22359
22360     For example, on the 68000 in a fullword instruction it is possible
22361     to use an immediate operand; but if the immediate value is between
22362     -128 and 127, better code results from loading the value into a
22363     register and using the register.  This is because the load into
22364     the register can be done with a `moveq' instruction.  We arrange
22365     for this to happen by defining the letter `K' to mean "any integer
22366     outside the range -128 to 127", and then specifying `Ks' in the
22367     operand constraints.
22368
22369`g'
22370     Any register, memory or immediate integer operand is allowed,
22371     except for registers that are not general registers.
22372
22373`X'
22374     Any operand whatsoever is allowed.
22375
22376`0', `1', `2', ... `9'
22377     An operand that matches the specified operand number is allowed.
22378     If a digit is used together with letters within the same
22379     alternative, the digit should come last.
22380
22381     This number is allowed to be more than a single digit.  If multiple
22382     digits are encountered consecutively, they are interpreted as a
22383     single decimal integer.  There is scant chance for ambiguity,
22384     since to-date it has never been desirable that `10' be interpreted
22385     as matching either operand 1 _or_ operand 0.  Should this be
22386     desired, one can use multiple alternatives instead.
22387
22388     This is called a "matching constraint" and what it really means is
22389     that the assembler has only a single operand that fills two roles
22390     which `asm' distinguishes.  For example, an add instruction uses
22391     two input operands and an output operand, but on most CISC
22392     machines an add instruction really has only two operands, one of
22393     them an input-output operand:
22394
22395          addl #35,r12
22396
22397     Matching constraints are used in these circumstances.  More
22398     precisely, the two operands that match must include one input-only
22399     operand and one output-only operand.  Moreover, the digit must be a
22400     smaller number than the number of the operand that uses it in the
22401     constraint.
22402
22403`p'
22404     An operand that is a valid memory address is allowed.  This is for
22405     "load address" and "push address" instructions.
22406
22407     `p' in the constraint must be accompanied by `address_operand' as
22408     the predicate in the `match_operand'.  This predicate interprets
22409     the mode specified in the `match_operand' as the mode of the memory
22410     reference for which the address would be valid.
22411
22412OTHER-LETTERS
22413     Other letters can be defined in machine-dependent fashion to stand
22414     for particular classes of registers or other arbitrary operand
22415     types.  `d', `a' and `f' are defined on the 68000/68020 to stand
22416     for data, address and floating point registers.
22417
22418
22419File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
22420
224216.40.2 Multiple Alternative Constraints
22422---------------------------------------
22423
22424Sometimes a single instruction has multiple alternative sets of possible
22425operands.  For example, on the 68000, a logical-or instruction can
22426combine register or an immediate value into memory, or it can combine
22427any kind of operand into a register; but it cannot combine one memory
22428location into another.
22429
22430 These constraints are represented as multiple alternatives.  An
22431alternative can be described by a series of letters for each operand.
22432The overall constraint for an operand is made from the letters for this
22433operand from the first alternative, a comma, the letters for this
22434operand from the second alternative, a comma, and so on until the last
22435alternative.
22436
22437 If all the operands fit any one alternative, the instruction is valid.
22438Otherwise, for each alternative, the compiler counts how many
22439instructions must be added to copy the operands so that that
22440alternative applies.  The alternative requiring the least copying is
22441chosen.  If two alternatives need the same amount of copying, the one
22442that comes first is chosen.  These choices can be altered with the `?'
22443and `!' characters:
22444
22445`?'
22446     Disparage slightly the alternative that the `?' appears in, as a
22447     choice when no alternative applies exactly.  The compiler regards
22448     this alternative as one unit more costly for each `?' that appears
22449     in it.
22450
22451`!'
22452     Disparage severely the alternative that the `!' appears in.  This
22453     alternative can still be used if it fits without reloading, but if
22454     reloading is needed, some other alternative will be used.
22455
22456
22457File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
22458
224596.40.3 Constraint Modifier Characters
22460-------------------------------------
22461
22462Here are constraint modifier characters.
22463
22464`='
22465     Means that this operand is write-only for this instruction: the
22466     previous value is discarded and replaced by output data.
22467
22468`+'
22469     Means that this operand is both read and written by the
22470     instruction.
22471
22472     When the compiler fixes up the operands to satisfy the constraints,
22473     it needs to know which operands are inputs to the instruction and
22474     which are outputs from it.  `=' identifies an output; `+'
22475     identifies an operand that is both input and output; all other
22476     operands are assumed to be input only.
22477
22478     If you specify `=' or `+' in a constraint, you put it in the first
22479     character of the constraint string.
22480
22481`&'
22482     Means (in a particular alternative) that this operand is an
22483     "earlyclobber" operand, which is modified before the instruction is
22484     finished using the input operands.  Therefore, this operand may
22485     not lie in a register that is used as an input operand or as part
22486     of any memory address.
22487
22488     `&' applies only to the alternative in which it is written.  In
22489     constraints with multiple alternatives, sometimes one alternative
22490     requires `&' while others do not.  See, for example, the `movdf'
22491     insn of the 68000.
22492
22493     An input operand can be tied to an earlyclobber operand if its only
22494     use as an input occurs before the early result is written.  Adding
22495     alternatives of this form often allows GCC to produce better code
22496     when only some of the inputs can be affected by the earlyclobber.
22497     See, for example, the `mulsi3' insn of the ARM.
22498
22499     `&' does not obviate the need to write `='.
22500
22501`%'
22502     Declares the instruction to be commutative for this operand and the
22503     following operand.  This means that the compiler may interchange
22504     the two operands if that is the cheapest way to make all operands
22505     fit the constraints.  GCC can only handle one commutative pair in
22506     an asm; if you use more, the compiler may fail.  Note that you
22507     need not use the modifier if the two alternatives are strictly
22508     identical; this would only waste time in the reload pass.  The
22509     modifier is not operational after register allocation, so the
22510     result of `define_peephole2' and `define_split's performed after
22511     reload cannot rely on `%' to make the intended insn match.
22512
22513`#'
22514     Says that all following characters, up to the next comma, are to be
22515     ignored as a constraint.  They are significant only for choosing
22516     register preferences.
22517
22518`*'
22519     Says that the following character should be ignored when choosing
22520     register preferences.  `*' has no effect on the meaning of the
22521     constraint as a constraint, and no effect on reloading.
22522
22523
22524
22525File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
22526
225276.40.4 Constraints for Particular Machines
22528------------------------------------------
22529
22530Whenever possible, you should use the general-purpose constraint letters
22531in `asm' arguments, since they will convey meaning more readily to
22532people reading your code.  Failing that, use the constraint letters
22533that usually have very similar meanings across architectures.  The most
22534commonly used constraints are `m' and `r' (for memory and
22535general-purpose registers respectively; *note Simple Constraints::), and
22536`I', usually the letter indicating the most common immediate-constant
22537format.
22538
22539 Each architecture defines additional constraints.  These constraints
22540are used by the compiler itself for instruction generation, as well as
22541for `asm' statements; therefore, some of the constraints are not
22542particularly useful for `asm'.  Here is a summary of some of the
22543machine-dependent constraints available on some particular machines; it
22544includes both constraints that are useful for `asm' and constraints
22545that aren't.  The compiler source file mentioned in the table heading
22546for each architecture is the definitive reference for the meanings of
22547that architecture's constraints.
22548
22549_ARM family--`config/arm/arm.h'_
22550
22551    `f'
22552          Floating-point register
22553
22554    `w'
22555          VFP floating-point register
22556
22557    `F'
22558          One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0,
22559          4.0, 5.0 or 10.0
22560
22561    `G'
22562          Floating-point constant that would satisfy the constraint `F'
22563          if it were negated
22564
22565    `I'
22566          Integer that is valid as an immediate operand in a data
22567          processing instruction.  That is, an integer in the range 0
22568          to 255 rotated by a multiple of 2
22569
22570    `J'
22571          Integer in the range -4095 to 4095
22572
22573    `K'
22574          Integer that satisfies constraint `I' when inverted (ones
22575          complement)
22576
22577    `L'
22578          Integer that satisfies constraint `I' when negated (twos
22579          complement)
22580
22581    `M'
22582          Integer in the range 0 to 32
22583
22584    `Q'
22585          A memory reference where the exact address is in a single
22586          register (``m'' is preferable for `asm' statements)
22587
22588    `R'
22589          An item in the constant pool
22590
22591    `S'
22592          A symbol in the text segment of the current file
22593
22594    `Uv'
22595          A memory reference suitable for VFP load/store insns
22596          (reg+constant offset)
22597
22598    `Uy'
22599          A memory reference suitable for iWMMXt load/store
22600          instructions.
22601
22602    `Uq'
22603          A memory reference suitable for the ARMv4 ldrsb instruction.
22604
22605_AVR family--`config/avr/constraints.md'_
22606
22607    `l'
22608          Registers from r0 to r15
22609
22610    `a'
22611          Registers from r16 to r23
22612
22613    `d'
22614          Registers from r16 to r31
22615
22616    `w'
22617          Registers from r24 to r31.  These registers can be used in
22618          `adiw' command
22619
22620    `e'
22621          Pointer register (r26-r31)
22622
22623    `b'
22624          Base pointer register (r28-r31)
22625
22626    `q'
22627          Stack pointer register (SPH:SPL)
22628
22629    `t'
22630          Temporary register r0
22631
22632    `x'
22633          Register pair X (r27:r26)
22634
22635    `y'
22636          Register pair Y (r29:r28)
22637
22638    `z'
22639          Register pair Z (r31:r30)
22640
22641    `I'
22642          Constant greater than -1, less than 64
22643
22644    `J'
22645          Constant greater than -64, less than 1
22646
22647    `K'
22648          Constant integer 2
22649
22650    `L'
22651          Constant integer 0
22652
22653    `M'
22654          Constant that fits in 8 bits
22655
22656    `N'
22657          Constant integer -1
22658
22659    `O'
22660          Constant integer 8, 16, or 24
22661
22662    `P'
22663          Constant integer 1
22664
22665    `G'
22666          A floating point constant 0.0
22667
22668    `R'
22669          Integer constant in the range -6 ... 5.
22670
22671    `Q'
22672          A memory address based on Y or Z pointer with displacement.
22673
22674_CRX Architecture--`config/crx/crx.h'_
22675
22676    `b'
22677          Registers from r0 to r14 (registers without stack pointer)
22678
22679    `l'
22680          Register r16 (64-bit accumulator lo register)
22681
22682    `h'
22683          Register r17 (64-bit accumulator hi register)
22684
22685    `k'
22686          Register pair r16-r17. (64-bit accumulator lo-hi pair)
22687
22688    `I'
22689          Constant that fits in 3 bits
22690
22691    `J'
22692          Constant that fits in 4 bits
22693
22694    `K'
22695          Constant that fits in 5 bits
22696
22697    `L'
22698          Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48
22699
22700    `G'
22701          Floating point constant that is legal for store immediate
22702
22703_Hewlett-Packard PA-RISC--`config/pa/pa.h'_
22704
22705    `a'
22706          General register 1
22707
22708    `f'
22709          Floating point register
22710
22711    `q'
22712          Shift amount register
22713
22714    `x'
22715          Floating point register (deprecated)
22716
22717    `y'
22718          Upper floating point register (32-bit), floating point
22719          register (64-bit)
22720
22721    `Z'
22722          Any register
22723
22724    `I'
22725          Signed 11-bit integer constant
22726
22727    `J'
22728          Signed 14-bit integer constant
22729
22730    `K'
22731          Integer constant that can be deposited with a `zdepi'
22732          instruction
22733
22734    `L'
22735          Signed 5-bit integer constant
22736
22737    `M'
22738          Integer constant 0
22739
22740    `N'
22741          Integer constant that can be loaded with a `ldil' instruction
22742
22743    `O'
22744          Integer constant whose value plus one is a power of 2
22745
22746    `P'
22747          Integer constant that can be used for `and' operations in
22748          `depi' and `extru' instructions
22749
22750    `S'
22751          Integer constant 31
22752
22753    `U'
22754          Integer constant 63
22755
22756    `G'
22757          Floating-point constant 0.0
22758
22759    `A'
22760          A `lo_sum' data-linkage-table memory operand
22761
22762    `Q'
22763          A memory operand that can be used as the destination operand
22764          of an integer store instruction
22765
22766    `R'
22767          A scaled or unscaled indexed memory operand
22768
22769    `T'
22770          A memory operand for floating-point loads and stores
22771
22772    `W'
22773          A register indirect memory operand
22774
22775_picoChip family--`picochip.h'_
22776
22777    `k'
22778          Stack register.
22779
22780    `f'
22781          Pointer register.  A register which can be used to access
22782          memory without supplying an offset.  Any other register can
22783          be used to access memory, but will need a constant offset.
22784          In the case of the offset being zero, it is more efficient to
22785          use a pointer register, since this reduces code size.
22786
22787    `t'
22788          A twin register.  A register which may be paired with an
22789          adjacent register to create a 32-bit register.
22790
22791    `a'
22792          Any absolute memory address (e.g., symbolic constant, symbolic
22793          constant + offset).
22794
22795    `I'
22796          4-bit signed integer.
22797
22798    `J'
22799          4-bit unsigned integer.
22800
22801    `K'
22802          8-bit signed integer.
22803
22804    `M'
22805          Any constant whose absolute value is no greater than 4-bits.
22806
22807    `N'
22808          10-bit signed integer
22809
22810    `O'
22811          16-bit signed integer.
22812
22813
22814_PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_
22815
22816    `b'
22817          Address base register
22818
22819    `d'
22820          Floating point register (containing 64-bit value)
22821
22822    `f'
22823          Floating point register (containing 32-bit value)
22824
22825    `v'
22826          Altivec vector register
22827
22828    `wd'
22829          VSX vector register to hold vector double data
22830
22831    `wf'
22832          VSX vector register to hold vector float data
22833
22834    `ws'
22835          VSX vector register to hold scalar float data
22836
22837    `wa'
22838          Any VSX register
22839
22840    `h'
22841          `MQ', `CTR', or `LINK' register
22842
22843    `q'
22844          `MQ' register
22845
22846    `c'
22847          `CTR' register
22848
22849    `l'
22850          `LINK' register
22851
22852    `x'
22853          `CR' register (condition register) number 0
22854
22855    `y'
22856          `CR' register (condition register)
22857
22858    `z'
22859          `FPMEM' stack memory for FPR-GPR transfers
22860
22861    `I'
22862          Signed 16-bit constant
22863
22864    `J'
22865          Unsigned 16-bit constant shifted left 16 bits (use `L'
22866          instead for `SImode' constants)
22867
22868    `K'
22869          Unsigned 16-bit constant
22870
22871    `L'
22872          Signed 16-bit constant shifted left 16 bits
22873
22874    `M'
22875          Constant larger than 31
22876
22877    `N'
22878          Exact power of 2
22879
22880    `O'
22881          Zero
22882
22883    `P'
22884          Constant whose negation is a signed 16-bit constant
22885
22886    `G'
22887          Floating point constant that can be loaded into a register
22888          with one instruction per word
22889
22890    `H'
22891          Integer/Floating point constant that can be loaded into a
22892          register using three instructions
22893
22894    `m'
22895          Memory operand.  Note that on PowerPC targets, `m' can include
22896          addresses that update the base register.  It is therefore
22897          only safe to use `m' in an `asm' statement if that `asm'
22898          statement accesses the operand exactly once.  The `asm'
22899          statement must also use `%U<OPNO>' as a placeholder for the
22900          "update" flag in the corresponding load or store instruction.
22901          For example:
22902
22903               asm ("st%U0 %1,%0" : "=m" (mem) : "r" (val));
22904
22905          is correct but:
22906
22907               asm ("st %1,%0" : "=m" (mem) : "r" (val));
22908
22909          is not.  Use `es' rather than `m' if you don't want the base
22910          register to be updated.
22911
22912    `es'
22913          A "stable" memory operand; that is, one which does not
22914          include any automodification of the base register.  Unlike
22915          `m', this constraint can be used in `asm' statements that
22916          might access the operand several times, or that might not
22917          access it at all.
22918
22919    `Q'
22920          Memory operand that is an offset from a register (it is
22921          usually better to use `m' or `es' in `asm' statements)
22922
22923    `Z'
22924          Memory operand that is an indexed or indirect from a register
22925          (it is usually better to use `m' or `es' in `asm' statements)
22926
22927    `R'
22928          AIX TOC entry
22929
22930    `a'
22931          Address operand that is an indexed or indirect from a
22932          register (`p' is preferable for `asm' statements)
22933
22934    `S'
22935          Constant suitable as a 64-bit mask operand
22936
22937    `T'
22938          Constant suitable as a 32-bit mask operand
22939
22940    `U'
22941          System V Release 4 small data area reference
22942
22943    `t'
22944          AND masks that can be performed by two rldic{l, r}
22945          instructions
22946
22947    `W'
22948          Vector constant that does not require memory
22949
22950    `j'
22951          Vector constant that is all zeros.
22952
22953
22954_Intel 386--`config/i386/constraints.md'_
22955
22956    `R'
22957          Legacy register--the eight integer registers available on all
22958          i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp').
22959
22960    `q'
22961          Any register accessible as `Rl'.  In 32-bit mode, `a', `b',
22962          `c', and `d'; in 64-bit mode, any integer register.
22963
22964    `Q'
22965          Any register accessible as `Rh': `a', `b', `c', and `d'.
22966
22967    `a'
22968          The `a' register.
22969
22970    `b'
22971          The `b' register.
22972
22973    `c'
22974          The `c' register.
22975
22976    `d'
22977          The `d' register.
22978
22979    `S'
22980          The `si' register.
22981
22982    `D'
22983          The `di' register.
22984
22985    `A'
22986          The `a' and `d' registers, as a pair (for instructions that
22987          return half the result in one and half in the other).
22988
22989    `f'
22990          Any 80387 floating-point (stack) register.
22991
22992    `t'
22993          Top of 80387 floating-point stack (`%st(0)').
22994
22995    `u'
22996          Second from top of 80387 floating-point stack (`%st(1)').
22997
22998    `y'
22999          Any MMX register.
23000
23001    `x'
23002          Any SSE register.
23003
23004    `Yz'
23005          First SSE register (`%xmm0').
23006
23007    `I'
23008          Integer constant in the range 0 ... 31, for 32-bit shifts.
23009
23010    `J'
23011          Integer constant in the range 0 ... 63, for 64-bit shifts.
23012
23013    `K'
23014          Signed 8-bit integer constant.
23015
23016    `L'
23017          `0xFF' or `0xFFFF', for andsi as a zero-extending move.
23018
23019    `M'
23020          0, 1, 2, or 3 (shifts for the `lea' instruction).
23021
23022    `N'
23023          Unsigned 8-bit integer constant (for `in' and `out'
23024          instructions).
23025
23026    `G'
23027          Standard 80387 floating point constant.
23028
23029    `C'
23030          Standard SSE floating point constant.
23031
23032    `e'
23033          32-bit signed integer constant, or a symbolic reference known
23034          to fit that range (for immediate operands in sign-extending
23035          x86-64 instructions).
23036
23037    `Z'
23038          32-bit unsigned integer constant, or a symbolic reference
23039          known to fit that range (for immediate operands in
23040          zero-extending x86-64 instructions).
23041
23042
23043_Intel IA-64--`config/ia64/ia64.h'_
23044
23045    `a'
23046          General register `r0' to `r3' for `addl' instruction
23047
23048    `b'
23049          Branch register
23050
23051    `c'
23052          Predicate register (`c' as in "conditional")
23053
23054    `d'
23055          Application register residing in M-unit
23056
23057    `e'
23058          Application register residing in I-unit
23059
23060    `f'
23061          Floating-point register
23062
23063    `m'
23064          Memory operand.  Remember that `m' allows postincrement and
23065          postdecrement which require printing with `%Pn' on IA-64.
23066          Use `S' to disallow postincrement and postdecrement.
23067
23068    `G'
23069          Floating-point constant 0.0 or 1.0
23070
23071    `I'
23072          14-bit signed integer constant
23073
23074    `J'
23075          22-bit signed integer constant
23076
23077    `K'
23078          8-bit signed integer constant for logical instructions
23079
23080    `L'
23081          8-bit adjusted signed integer constant for compare pseudo-ops
23082
23083    `M'
23084          6-bit unsigned integer constant for shift counts
23085
23086    `N'
23087          9-bit signed integer constant for load and store
23088          postincrements
23089
23090    `O'
23091          The constant zero
23092
23093    `P'
23094          0 or -1 for `dep' instruction
23095
23096    `Q'
23097          Non-volatile memory for floating-point loads and stores
23098
23099    `R'
23100          Integer constant in the range 1 to 4 for `shladd' instruction
23101
23102    `S'
23103          Memory operand except postincrement and postdecrement
23104
23105_FRV--`config/frv/frv.h'_
23106
23107    `a'
23108          Register in the class `ACC_REGS' (`acc0' to `acc7').
23109
23110    `b'
23111          Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
23112
23113    `c'
23114          Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
23115          to `icc3').
23116
23117    `d'
23118          Register in the class `GPR_REGS' (`gr0' to `gr63').
23119
23120    `e'
23121          Register in the class `EVEN_REGS' (`gr0' to `gr63').  Odd
23122          registers are excluded not in the class but through the use
23123          of a machine mode larger than 4 bytes.
23124
23125    `f'
23126          Register in the class `FPR_REGS' (`fr0' to `fr63').
23127
23128    `h'
23129          Register in the class `FEVEN_REGS' (`fr0' to `fr63').  Odd
23130          registers are excluded not in the class but through the use
23131          of a machine mode larger than 4 bytes.
23132
23133    `l'
23134          Register in the class `LR_REG' (the `lr' register).
23135
23136    `q'
23137          Register in the class `QUAD_REGS' (`gr2' to `gr63').
23138          Register numbers not divisible by 4 are excluded not in the
23139          class but through the use of a machine mode larger than 8
23140          bytes.
23141
23142    `t'
23143          Register in the class `ICC_REGS' (`icc0' to `icc3').
23144
23145    `u'
23146          Register in the class `FCC_REGS' (`fcc0' to `fcc3').
23147
23148    `v'
23149          Register in the class `ICR_REGS' (`cc4' to `cc7').
23150
23151    `w'
23152          Register in the class `FCR_REGS' (`cc0' to `cc3').
23153
23154    `x'
23155          Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
23156          Register numbers not divisible by 4 are excluded not in the
23157          class but through the use of a machine mode larger than 8
23158          bytes.
23159
23160    `z'
23161          Register in the class `SPR_REGS' (`lcr' and `lr').
23162
23163    `A'
23164          Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
23165
23166    `B'
23167          Register in the class `ACCG_REGS' (`accg0' to `accg7').
23168
23169    `C'
23170          Register in the class `CR_REGS' (`cc0' to `cc7').
23171
23172    `G'
23173          Floating point constant zero
23174
23175    `I'
23176          6-bit signed integer constant
23177
23178    `J'
23179          10-bit signed integer constant
23180
23181    `L'
23182          16-bit signed integer constant
23183
23184    `M'
23185          16-bit unsigned integer constant
23186
23187    `N'
23188          12-bit signed integer constant that is negative--i.e. in the
23189          range of -2048 to -1
23190
23191    `O'
23192          Constant zero
23193
23194    `P'
23195          12-bit signed integer constant that is greater than
23196          zero--i.e. in the range of 1 to 2047.
23197
23198
23199_Blackfin family--`config/bfin/constraints.md'_
23200
23201    `a'
23202          P register
23203
23204    `d'
23205          D register
23206
23207    `z'
23208          A call clobbered P register.
23209
23210    `qN'
23211          A single register.  If N is in the range 0 to 7, the
23212          corresponding D register.  If it is `A', then the register P0.
23213
23214    `D'
23215          Even-numbered D register
23216
23217    `W'
23218          Odd-numbered D register
23219
23220    `e'
23221          Accumulator register.
23222
23223    `A'
23224          Even-numbered accumulator register.
23225
23226    `B'
23227          Odd-numbered accumulator register.
23228
23229    `b'
23230          I register
23231
23232    `v'
23233          B register
23234
23235    `f'
23236          M register
23237
23238    `c'
23239          Registers used for circular buffering, i.e. I, B, or L
23240          registers.
23241
23242    `C'
23243          The CC register.
23244
23245    `t'
23246          LT0 or LT1.
23247
23248    `k'
23249          LC0 or LC1.
23250
23251    `u'
23252          LB0 or LB1.
23253
23254    `x'
23255          Any D, P, B, M, I or L register.
23256
23257    `y'
23258          Additional registers typically used only in prologues and
23259          epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
23260          USP.
23261
23262    `w'
23263          Any register except accumulators or CC.
23264
23265    `Ksh'
23266          Signed 16 bit integer (in the range -32768 to 32767)
23267
23268    `Kuh'
23269          Unsigned 16 bit integer (in the range 0 to 65535)
23270
23271    `Ks7'
23272          Signed 7 bit integer (in the range -64 to 63)
23273
23274    `Ku7'
23275          Unsigned 7 bit integer (in the range 0 to 127)
23276
23277    `Ku5'
23278          Unsigned 5 bit integer (in the range 0 to 31)
23279
23280    `Ks4'
23281          Signed 4 bit integer (in the range -8 to 7)
23282
23283    `Ks3'
23284          Signed 3 bit integer (in the range -3 to 4)
23285
23286    `Ku3'
23287          Unsigned 3 bit integer (in the range 0 to 7)
23288
23289    `PN'
23290          Constant N, where N is a single-digit constant in the range 0
23291          to 4.
23292
23293    `PA'
23294          An integer equal to one of the MACFLAG_XXX constants that is
23295          suitable for use with either accumulator.
23296
23297    `PB'
23298          An integer equal to one of the MACFLAG_XXX constants that is
23299          suitable for use only with accumulator A1.
23300
23301    `M1'
23302          Constant 255.
23303
23304    `M2'
23305          Constant 65535.
23306
23307    `J'
23308          An integer constant with exactly a single bit set.
23309
23310    `L'
23311          An integer constant with all bits set except exactly one.
23312
23313    `H'
23314
23315    `Q'
23316          Any SYMBOL_REF.
23317
23318_M32C--`config/m32c/m32c.c'_
23319
23320    `Rsp'
23321    `Rfb'
23322    `Rsb'
23323          `$sp', `$fb', `$sb'.
23324
23325    `Rcr'
23326          Any control register, when they're 16 bits wide (nothing if
23327          control registers are 24 bits wide)
23328
23329    `Rcl'
23330          Any control register, when they're 24 bits wide.
23331
23332    `R0w'
23333    `R1w'
23334    `R2w'
23335    `R3w'
23336          $r0, $r1, $r2, $r3.
23337
23338    `R02'
23339          $r0 or $r2, or $r2r0 for 32 bit values.
23340
23341    `R13'
23342          $r1 or $r3, or $r3r1 for 32 bit values.
23343
23344    `Rdi'
23345          A register that can hold a 64 bit value.
23346
23347    `Rhl'
23348          $r0 or $r1 (registers with addressable high/low bytes)
23349
23350    `R23'
23351          $r2 or $r3
23352
23353    `Raa'
23354          Address registers
23355
23356    `Raw'
23357          Address registers when they're 16 bits wide.
23358
23359    `Ral'
23360          Address registers when they're 24 bits wide.
23361
23362    `Rqi'
23363          Registers that can hold QI values.
23364
23365    `Rad'
23366          Registers that can be used with displacements ($a0, $a1, $sb).
23367
23368    `Rsi'
23369          Registers that can hold 32 bit values.
23370
23371    `Rhi'
23372          Registers that can hold 16 bit values.
23373
23374    `Rhc'
23375          Registers chat can hold 16 bit values, including all control
23376          registers.
23377
23378    `Rra'
23379          $r0 through R1, plus $a0 and $a1.
23380
23381    `Rfl'
23382          The flags register.
23383
23384    `Rmm'
23385          The memory-based pseudo-registers $mem0 through $mem15.
23386
23387    `Rpi'
23388          Registers that can hold pointers (16 bit registers for r8c,
23389          m16c; 24 bit registers for m32cm, m32c).
23390
23391    `Rpa'
23392          Matches multiple registers in a PARALLEL to form a larger
23393          register.  Used to match function return values.
23394
23395    `Is3'
23396          -8 ... 7
23397
23398    `IS1'
23399          -128 ... 127
23400
23401    `IS2'
23402          -32768 ... 32767
23403
23404    `IU2'
23405          0 ... 65535
23406
23407    `In4'
23408          -8 ... -1 or 1 ... 8
23409
23410    `In5'
23411          -16 ... -1 or 1 ... 16
23412
23413    `In6'
23414          -32 ... -1 or 1 ... 32
23415
23416    `IM2'
23417          -65536 ... -1
23418
23419    `Ilb'
23420          An 8 bit value with exactly one bit set.
23421
23422    `Ilw'
23423          A 16 bit value with exactly one bit set.
23424
23425    `Sd'
23426          The common src/dest memory addressing modes.
23427
23428    `Sa'
23429          Memory addressed using $a0 or $a1.
23430
23431    `Si'
23432          Memory addressed with immediate addresses.
23433
23434    `Ss'
23435          Memory addressed using the stack pointer ($sp).
23436
23437    `Sf'
23438          Memory addressed using the frame base register ($fb).
23439
23440    `Ss'
23441          Memory addressed using the small base register ($sb).
23442
23443    `S1'
23444          $r1h
23445
23446_MeP--`config/mep/constraints.md'_
23447
23448    `a'
23449          The $sp register.
23450
23451    `b'
23452          The $tp register.
23453
23454    `c'
23455          Any control register.
23456
23457    `d'
23458          Either the $hi or the $lo register.
23459
23460    `em'
23461          Coprocessor registers that can be directly loaded ($c0-$c15).
23462
23463    `ex'
23464          Coprocessor registers that can be moved to each other.
23465
23466    `er'
23467          Coprocessor registers that can be moved to core registers.
23468
23469    `h'
23470          The $hi register.
23471
23472    `j'
23473          The $rpc register.
23474
23475    `l'
23476          The $lo register.
23477
23478    `t'
23479          Registers which can be used in $tp-relative addressing.
23480
23481    `v'
23482          The $gp register.
23483
23484    `x'
23485          The coprocessor registers.
23486
23487    `y'
23488          The coprocessor control registers.
23489
23490    `z'
23491          The $0 register.
23492
23493    `A'
23494          User-defined register set A.
23495
23496    `B'
23497          User-defined register set B.
23498
23499    `C'
23500          User-defined register set C.
23501
23502    `D'
23503          User-defined register set D.
23504
23505    `I'
23506          Offsets for $gp-rel addressing.
23507
23508    `J'
23509          Constants that can be used directly with boolean insns.
23510
23511    `K'
23512          Constants that can be moved directly to registers.
23513
23514    `L'
23515          Small constants that can be added to registers.
23516
23517    `M'
23518          Long shift counts.
23519
23520    `N'
23521          Small constants that can be compared to registers.
23522
23523    `O'
23524          Constants that can be loaded into the top half of registers.
23525
23526    `S'
23527          Signed 8-bit immediates.
23528
23529    `T'
23530          Symbols encoded for $tp-rel or $gp-rel addressing.
23531
23532    `U'
23533          Non-constant addresses for loading/saving coprocessor
23534          registers.
23535
23536    `W'
23537          The top half of a symbol's value.
23538
23539    `Y'
23540          A register indirect address without offset.
23541
23542    `Z'
23543          Symbolic references to the control bus.
23544
23545
23546_MIPS--`config/mips/constraints.md'_
23547
23548    `d'
23549          An address register.  This is equivalent to `r' unless
23550          generating MIPS16 code.
23551
23552    `f'
23553          A floating-point register (if available).
23554
23555    `h'
23556          Formerly the `hi' register.  This constraint is no longer
23557          supported.
23558
23559    `l'
23560          The `lo' register.  Use this register to store values that are
23561          no bigger than a word.
23562
23563    `x'
23564          The concatenated `hi' and `lo' registers.  Use this register
23565          to store doubleword values.
23566
23567    `c'
23568          A register suitable for use in an indirect jump.  This will
23569          always be `$25' for `-mabicalls'.
23570
23571    `v'
23572          Register `$3'.  Do not use this constraint in new code; it is
23573          retained only for compatibility with glibc.
23574
23575    `y'
23576          Equivalent to `r'; retained for backwards compatibility.
23577
23578    `z'
23579          A floating-point condition code register.
23580
23581    `I'
23582          A signed 16-bit constant (for arithmetic instructions).
23583
23584    `J'
23585          Integer zero.
23586
23587    `K'
23588          An unsigned 16-bit constant (for logic instructions).
23589
23590    `L'
23591          A signed 32-bit constant in which the lower 16 bits are zero.
23592          Such constants can be loaded using `lui'.
23593
23594    `M'
23595          A constant that cannot be loaded using `lui', `addiu' or
23596          `ori'.
23597
23598    `N'
23599          A constant in the range -65535 to -1 (inclusive).
23600
23601    `O'
23602          A signed 15-bit constant.
23603
23604    `P'
23605          A constant in the range 1 to 65535 (inclusive).
23606
23607    `G'
23608          Floating-point zero.
23609
23610    `R'
23611          An address that can be used in a non-macro load or store.
23612
23613_Motorola 680x0--`config/m68k/constraints.md'_
23614
23615    `a'
23616          Address register
23617
23618    `d'
23619          Data register
23620
23621    `f'
23622          68881 floating-point register, if available
23623
23624    `I'
23625          Integer in the range 1 to 8
23626
23627    `J'
23628          16-bit signed number
23629
23630    `K'
23631          Signed number whose magnitude is greater than 0x80
23632
23633    `L'
23634          Integer in the range -8 to -1
23635
23636    `M'
23637          Signed number whose magnitude is greater than 0x100
23638
23639    `N'
23640          Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
23641
23642    `O'
23643          16 (for rotate using swap)
23644
23645    `P'
23646          Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
23647
23648    `R'
23649          Numbers that mov3q can handle
23650
23651    `G'
23652          Floating point constant that is not a 68881 constant
23653
23654    `S'
23655          Operands that satisfy 'm' when -mpcrel is in effect
23656
23657    `T'
23658          Operands that satisfy 's' when -mpcrel is not in effect
23659
23660    `Q'
23661          Address register indirect addressing mode
23662
23663    `U'
23664          Register offset addressing
23665
23666    `W'
23667          const_call_operand
23668
23669    `Cs'
23670          symbol_ref or const
23671
23672    `Ci'
23673          const_int
23674
23675    `C0'
23676          const_int 0
23677
23678    `Cj'
23679          Range of signed numbers that don't fit in 16 bits
23680
23681    `Cmvq'
23682          Integers valid for mvq
23683
23684    `Capsw'
23685          Integers valid for a moveq followed by a swap
23686
23687    `Cmvz'
23688          Integers valid for mvz
23689
23690    `Cmvs'
23691          Integers valid for mvs
23692
23693    `Ap'
23694          push_operand
23695
23696    `Ac'
23697          Non-register operands allowed in clr
23698
23699
23700_Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_
23701
23702    `a'
23703          Register `a'
23704
23705    `b'
23706          Register `b'
23707
23708    `d'
23709          Register `d'
23710
23711    `q'
23712          An 8-bit register
23713
23714    `t'
23715          Temporary soft register _.tmp
23716
23717    `u'
23718          A soft register _.d1 to _.d31
23719
23720    `w'
23721          Stack pointer register
23722
23723    `x'
23724          Register `x'
23725
23726    `y'
23727          Register `y'
23728
23729    `z'
23730          Pseudo register `z' (replaced by `x' or `y' at the end)
23731
23732    `A'
23733          An address register: x, y or z
23734
23735    `B'
23736          An address register: x or y
23737
23738    `D'
23739          Register pair (x:d) to form a 32-bit value
23740
23741    `L'
23742          Constants in the range -65536 to 65535
23743
23744    `M'
23745          Constants whose 16-bit low part is zero
23746
23747    `N'
23748          Constant integer 1 or -1
23749
23750    `O'
23751          Constant integer 16
23752
23753    `P'
23754          Constants in the range -8 to 2
23755
23756
23757_Moxie--`config/moxie/constraints.md'_
23758
23759    `A'
23760          An absolute address
23761
23762    `B'
23763          An offset address
23764
23765    `W'
23766          A register indirect memory operand
23767
23768    `I'
23769          A constant in the range of 0 to 255.
23770
23771    `N'
23772          A constant in the range of 0 to -255.
23773
23774
23775_RX--`config/rx/constraints.md'_
23776
23777    `Q'
23778          An address which does not involve register indirect
23779          addressing or pre/post increment/decrement addressing.
23780
23781    `Symbol'
23782          A symbol reference.
23783
23784    `Int08'
23785          A constant in the range -256 to 255, inclusive.
23786
23787    `Sint08'
23788          A constant in the range -128 to 127, inclusive.
23789
23790    `Sint16'
23791          A constant in the range -32768 to 32767, inclusive.
23792
23793    `Sint24'
23794          A constant in the range -8388608 to 8388607, inclusive.
23795
23796    `Uint04'
23797          A constant in the range 0 to 15, inclusive.
23798
23799
23800_SPARC--`config/sparc/sparc.h'_
23801
23802    `f'
23803          Floating-point register on the SPARC-V8 architecture and
23804          lower floating-point register on the SPARC-V9 architecture.
23805
23806    `e'
23807          Floating-point register.  It is equivalent to `f' on the
23808          SPARC-V8 architecture and contains both lower and upper
23809          floating-point registers on the SPARC-V9 architecture.
23810
23811    `c'
23812          Floating-point condition code register.
23813
23814    `d'
23815          Lower floating-point register.  It is only valid on the
23816          SPARC-V9 architecture when the Visual Instruction Set is
23817          available.
23818
23819    `b'
23820          Floating-point register.  It is only valid on the SPARC-V9
23821          architecture when the Visual Instruction Set is available.
23822
23823    `h'
23824          64-bit global or out register for the SPARC-V8+ architecture.
23825
23826    `D'
23827          A vector constant
23828
23829    `I'
23830          Signed 13-bit constant
23831
23832    `J'
23833          Zero
23834
23835    `K'
23836          32-bit constant with the low 12 bits clear (a constant that
23837          can be loaded with the `sethi' instruction)
23838
23839    `L'
23840          A constant in the range supported by `movcc' instructions
23841
23842    `M'
23843          A constant in the range supported by `movrcc' instructions
23844
23845    `N'
23846          Same as `K', except that it verifies that bits that are not
23847          in the lower 32-bit range are all zero.  Must be used instead
23848          of `K' for modes wider than `SImode'
23849
23850    `O'
23851          The constant 4096
23852
23853    `G'
23854          Floating-point zero
23855
23856    `H'
23857          Signed 13-bit constant, sign-extended to 32 or 64 bits
23858
23859    `Q'
23860          Floating-point constant whose integral representation can be
23861          moved into an integer register using a single sethi
23862          instruction
23863
23864    `R'
23865          Floating-point constant whose integral representation can be
23866          moved into an integer register using a single mov instruction
23867
23868    `S'
23869          Floating-point constant whose integral representation can be
23870          moved into an integer register using a high/lo_sum
23871          instruction sequence
23872
23873    `T'
23874          Memory address aligned to an 8-byte boundary
23875
23876    `U'
23877          Even register
23878
23879    `W'
23880          Memory address for `e' constraint registers
23881
23882    `Y'
23883          Vector zero
23884
23885
23886_SPU--`config/spu/spu.h'_
23887
23888    `a'
23889          An immediate which can be loaded with the il/ila/ilh/ilhu
23890          instructions.  const_int is treated as a 64 bit value.
23891
23892    `c'
23893          An immediate for and/xor/or instructions.  const_int is
23894          treated as a 64 bit value.
23895
23896    `d'
23897          An immediate for the `iohl' instruction.  const_int is
23898          treated as a 64 bit value.
23899
23900    `f'
23901          An immediate which can be loaded with `fsmbi'.
23902
23903    `A'
23904          An immediate which can be loaded with the il/ila/ilh/ilhu
23905          instructions.  const_int is treated as a 32 bit value.
23906
23907    `B'
23908          An immediate for most arithmetic instructions.  const_int is
23909          treated as a 32 bit value.
23910
23911    `C'
23912          An immediate for and/xor/or instructions.  const_int is
23913          treated as a 32 bit value.
23914
23915    `D'
23916          An immediate for the `iohl' instruction.  const_int is
23917          treated as a 32 bit value.
23918
23919    `I'
23920          A constant in the range [-64, 63] for shift/rotate
23921          instructions.
23922
23923    `J'
23924          An unsigned 7-bit constant for conversion/nop/channel
23925          instructions.
23926
23927    `K'
23928          A signed 10-bit constant for most arithmetic instructions.
23929
23930    `M'
23931          A signed 16 bit immediate for `stop'.
23932
23933    `N'
23934          An unsigned 16-bit constant for `iohl' and `fsmbi'.
23935
23936    `O'
23937          An unsigned 7-bit constant whose 3 least significant bits are
23938          0.
23939
23940    `P'
23941          An unsigned 3-bit constant for 16-byte rotates and shifts
23942
23943    `R'
23944          Call operand, reg, for indirect calls
23945
23946    `S'
23947          Call operand, symbol, for relative calls.
23948
23949    `T'
23950          Call operand, const_int, for absolute calls.
23951
23952    `U'
23953          An immediate which can be loaded with the il/ila/ilh/ilhu
23954          instructions.  const_int is sign extended to 128 bit.
23955
23956    `W'
23957          An immediate for shift and rotate instructions.  const_int is
23958          treated as a 32 bit value.
23959
23960    `Y'
23961          An immediate for and/xor/or instructions.  const_int is sign
23962          extended as a 128 bit.
23963
23964    `Z'
23965          An immediate for the `iohl' instruction.  const_int is sign
23966          extended to 128 bit.
23967
23968
23969_S/390 and zSeries--`config/s390/s390.h'_
23970
23971    `a'
23972          Address register (general purpose register except r0)
23973
23974    `c'
23975          Condition code register
23976
23977    `d'
23978          Data register (arbitrary general purpose register)
23979
23980    `f'
23981          Floating-point register
23982
23983    `I'
23984          Unsigned 8-bit constant (0-255)
23985
23986    `J'
23987          Unsigned 12-bit constant (0-4095)
23988
23989    `K'
23990          Signed 16-bit constant (-32768-32767)
23991
23992    `L'
23993          Value appropriate as displacement.
23994         `(0..4095)'
23995               for short displacement
23996
23997         `(-524288..524287)'
23998               for long displacement
23999
24000    `M'
24001          Constant integer with a value of 0x7fffffff.
24002
24003    `N'
24004          Multiple letter constraint followed by 4 parameter letters.
24005         `0..9:'
24006               number of the part counting from most to least
24007               significant
24008
24009         `H,Q:'
24010               mode of the part
24011
24012         `D,S,H:'
24013               mode of the containing operand
24014
24015         `0,F:'
24016               value of the other parts (F--all bits set)
24017          The constraint matches if the specified part of a constant
24018          has a value different from its other parts.
24019
24020    `Q'
24021          Memory reference without index register and with short
24022          displacement.
24023
24024    `R'
24025          Memory reference with index register and short displacement.
24026
24027    `S'
24028          Memory reference without index register but with long
24029          displacement.
24030
24031    `T'
24032          Memory reference with index register and long displacement.
24033
24034    `U'
24035          Pointer with short displacement.
24036
24037    `W'
24038          Pointer with long displacement.
24039
24040    `Y'
24041          Shift count operand.
24042
24043
24044_Score family--`config/score/score.h'_
24045
24046    `d'
24047          Registers from r0 to r32.
24048
24049    `e'
24050          Registers from r0 to r16.
24051
24052    `t'
24053          r8--r11 or r22--r27 registers.
24054
24055    `h'
24056          hi register.
24057
24058    `l'
24059          lo register.
24060
24061    `x'
24062          hi + lo register.
24063
24064    `q'
24065          cnt register.
24066
24067    `y'
24068          lcb register.
24069
24070    `z'
24071          scb register.
24072
24073    `a'
24074          cnt + lcb + scb register.
24075
24076    `c'
24077          cr0--cr15 register.
24078
24079    `b'
24080          cp1 registers.
24081
24082    `f'
24083          cp2 registers.
24084
24085    `i'
24086          cp3 registers.
24087
24088    `j'
24089          cp1 + cp2 + cp3 registers.
24090
24091    `I'
24092          High 16-bit constant (32-bit constant with 16 LSBs zero).
24093
24094    `J'
24095          Unsigned 5 bit integer (in the range 0 to 31).
24096
24097    `K'
24098          Unsigned 16 bit integer (in the range 0 to 65535).
24099
24100    `L'
24101          Signed 16 bit integer (in the range -32768 to 32767).
24102
24103    `M'
24104          Unsigned 14 bit integer (in the range 0 to 16383).
24105
24106    `N'
24107          Signed 14 bit integer (in the range -8192 to 8191).
24108
24109    `Z'
24110          Any SYMBOL_REF.
24111
24112_Xstormy16--`config/stormy16/stormy16.h'_
24113
24114    `a'
24115          Register r0.
24116
24117    `b'
24118          Register r1.
24119
24120    `c'
24121          Register r2.
24122
24123    `d'
24124          Register r8.
24125
24126    `e'
24127          Registers r0 through r7.
24128
24129    `t'
24130          Registers r0 and r1.
24131
24132    `y'
24133          The carry register.
24134
24135    `z'
24136          Registers r8 and r9.
24137
24138    `I'
24139          A constant between 0 and 3 inclusive.
24140
24141    `J'
24142          A constant that has exactly one bit set.
24143
24144    `K'
24145          A constant that has exactly one bit clear.
24146
24147    `L'
24148          A constant between 0 and 255 inclusive.
24149
24150    `M'
24151          A constant between -255 and 0 inclusive.
24152
24153    `N'
24154          A constant between -3 and 0 inclusive.
24155
24156    `O'
24157          A constant between 1 and 4 inclusive.
24158
24159    `P'
24160          A constant between -4 and -1 inclusive.
24161
24162    `Q'
24163          A memory reference that is a stack push.
24164
24165    `R'
24166          A memory reference that is a stack pop.
24167
24168    `S'
24169          A memory reference that refers to a constant address of known
24170          value.
24171
24172    `T'
24173          The register indicated by Rx (not implemented yet).
24174
24175    `U'
24176          A constant that is not between 2 and 15 inclusive.
24177
24178    `Z'
24179          The constant 0.
24180
24181
24182_Xtensa--`config/xtensa/constraints.md'_
24183
24184    `a'
24185          General-purpose 32-bit register
24186
24187    `b'
24188          One-bit boolean register
24189
24190    `A'
24191          MAC16 40-bit accumulator register
24192
24193    `I'
24194          Signed 12-bit integer constant, for use in MOVI instructions
24195
24196    `J'
24197          Signed 8-bit integer constant, for use in ADDI instructions
24198
24199    `K'
24200          Integer constant valid for BccI instructions
24201
24202    `L'
24203          Unsigned constant valid for BccUI instructions
24204
24205
24206
24207
24208File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Constraints,  Up: C Extensions
24209
242106.41 Controlling Names Used in Assembler Code
24211=============================================
24212
24213You can specify the name to be used in the assembler code for a C
24214function or variable by writing the `asm' (or `__asm__') keyword after
24215the declarator as follows:
24216
24217     int foo asm ("myfoo") = 2;
24218
24219This specifies that the name to be used for the variable `foo' in the
24220assembler code should be `myfoo' rather than the usual `_foo'.
24221
24222 On systems where an underscore is normally prepended to the name of a C
24223function or variable, this feature allows you to define names for the
24224linker that do not start with an underscore.
24225
24226 It does not make sense to use this feature with a non-static local
24227variable since such variables do not have assembler names.  If you are
24228trying to put the variable in a particular register, see *note Explicit
24229Reg Vars::.  GCC presently accepts such code with a warning, but will
24230probably be changed to issue an error, rather than a warning, in the
24231future.
24232
24233 You cannot use `asm' in this way in a function _definition_; but you
24234can get the same effect by writing a declaration for the function
24235before its definition and putting `asm' there, like this:
24236
24237     extern func () asm ("FUNC");
24238
24239     func (x, y)
24240          int x, y;
24241     /* ... */
24242
24243 It is up to you to make sure that the assembler names you choose do not
24244conflict with any other assembler symbols.  Also, you must not use a
24245register name; that would produce completely invalid assembler code.
24246GCC does not as yet have the ability to store static variables in
24247registers.  Perhaps that will be added.
24248
24249
24250File: gcc.info,  Node: Explicit Reg Vars,  Next: Alternate Keywords,  Prev: Asm Labels,  Up: C Extensions
24251
242526.42 Variables in Specified Registers
24253=====================================
24254
24255GNU C allows you to put a few global variables into specified hardware
24256registers.  You can also specify the register in which an ordinary
24257register variable should be allocated.
24258
24259   * Global register variables reserve registers throughout the program.
24260     This may be useful in programs such as programming language
24261     interpreters which have a couple of global variables that are
24262     accessed very often.
24263
24264   * Local register variables in specific registers do not reserve the
24265     registers, except at the point where they are used as input or
24266     output operands in an `asm' statement and the `asm' statement
24267     itself is not deleted.  The compiler's data flow analysis is
24268     capable of determining where the specified registers contain live
24269     values, and where they are available for other uses.  Stores into
24270     local register variables may be deleted when they appear to be
24271     dead according to dataflow analysis.  References to local register
24272     variables may be deleted or moved or simplified.
24273
24274     These local variables are sometimes convenient for use with the
24275     extended `asm' feature (*note Extended Asm::), if you want to
24276     write one output of the assembler instruction directly into a
24277     particular register.  (This will work provided the register you
24278     specify fits the constraints specified for that operand in the
24279     `asm'.)
24280
24281* Menu:
24282
24283* Global Reg Vars::
24284* Local Reg Vars::
24285
24286
24287File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars
24288
242896.42.1 Defining Global Register Variables
24290-----------------------------------------
24291
24292You can define a global register variable in GNU C like this:
24293
24294     register int *foo asm ("a5");
24295
24296Here `a5' is the name of the register which should be used.  Choose a
24297register which is normally saved and restored by function calls on your
24298machine, so that library routines will not clobber it.
24299
24300 Naturally the register name is cpu-dependent, so you would need to
24301conditionalize your program according to cpu type.  The register `a5'
24302would be a good choice on a 68000 for a variable of pointer type.  On
24303machines with register windows, be sure to choose a "global" register
24304that is not affected magically by the function call mechanism.
24305
24306 In addition, operating systems on one type of cpu may differ in how
24307they name the registers; then you would need additional conditionals.
24308For example, some 68000 operating systems call this register `%a5'.
24309
24310 Eventually there may be a way of asking the compiler to choose a
24311register automatically, but first we need to figure out how it should
24312choose and how to enable you to guide the choice.  No solution is
24313evident.
24314
24315 Defining a global register variable in a certain register reserves that
24316register entirely for this use, at least within the current compilation.
24317The register will not be allocated for any other purpose in the
24318functions in the current compilation.  The register will not be saved
24319and restored by these functions.  Stores into this register are never
24320deleted even if they would appear to be dead, but references may be
24321deleted or moved or simplified.
24322
24323 It is not safe to access the global register variables from signal
24324handlers, or from more than one thread of control, because the system
24325library routines may temporarily use the register for other things
24326(unless you recompile them specially for the task at hand).
24327
24328 It is not safe for one function that uses a global register variable to
24329call another such function `foo' by way of a third function `lose' that
24330was compiled without knowledge of this variable (i.e. in a different
24331source file in which the variable wasn't declared).  This is because
24332`lose' might save the register and put some other value there.  For
24333example, you can't expect a global register variable to be available in
24334the comparison-function that you pass to `qsort', since `qsort' might
24335have put something else in that register.  (If you are prepared to
24336recompile `qsort' with the same global register variable, you can solve
24337this problem.)
24338
24339 If you want to recompile `qsort' or other source files which do not
24340actually use your global register variable, so that they will not use
24341that register for any other purpose, then it suffices to specify the
24342compiler option `-ffixed-REG'.  You need not actually add a global
24343register declaration to their source code.
24344
24345 A function which can alter the value of a global register variable
24346cannot safely be called from a function compiled without this variable,
24347because it could clobber the value the caller expects to find there on
24348return.  Therefore, the function which is the entry point into the part
24349of the program that uses the global register variable must explicitly
24350save and restore the value which belongs to its caller.
24351
24352 On most machines, `longjmp' will restore to each global register
24353variable the value it had at the time of the `setjmp'.  On some
24354machines, however, `longjmp' will not change the value of global
24355register variables.  To be portable, the function that called `setjmp'
24356should make other arrangements to save the values of the global register
24357variables, and to restore them in a `longjmp'.  This way, the same
24358thing will happen regardless of what `longjmp' does.
24359
24360 All global register variable declarations must precede all function
24361definitions.  If such a declaration could appear after function
24362definitions, the declaration would be too late to prevent the register
24363from being used for other purposes in the preceding functions.
24364
24365 Global register variables may not have initial values, because an
24366executable file has no means to supply initial contents for a register.
24367
24368 On the SPARC, there are reports that g3 ... g7 are suitable registers,
24369but certain library functions, such as `getwd', as well as the
24370subroutines for division and remainder, modify g3 and g4.  g1 and g2
24371are local temporaries.
24372
24373 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.  Of
24374course, it will not do to use more than a few of those.
24375
24376
24377File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars
24378
243796.42.2 Specifying Registers for Local Variables
24380-----------------------------------------------
24381
24382You can define a local register variable with a specified register like
24383this:
24384
24385     register int *foo asm ("a5");
24386
24387Here `a5' is the name of the register which should be used.  Note that
24388this is the same syntax used for defining global register variables,
24389but for a local variable it would appear within a function.
24390
24391 Naturally the register name is cpu-dependent, but this is not a
24392problem, since specific registers are most often useful with explicit
24393assembler instructions (*note Extended Asm::).  Both of these things
24394generally require that you conditionalize your program according to cpu
24395type.
24396
24397 In addition, operating systems on one type of cpu may differ in how
24398they name the registers; then you would need additional conditionals.
24399For example, some 68000 operating systems call this register `%a5'.
24400
24401 Defining such a register variable does not reserve the register; it
24402remains available for other uses in places where flow control determines
24403the variable's value is not live.
24404
24405 This option does not guarantee that GCC will generate code that has
24406this variable in the register you specify at all times.  You may not
24407code an explicit reference to this register in the _assembler
24408instruction template_ part of an `asm' statement and assume it will
24409always refer to this variable.  However, using the variable as an `asm'
24410_operand_ guarantees that the specified register is used for the
24411operand.
24412
24413 Stores into local register variables may be deleted when they appear
24414to be dead according to dataflow analysis.  References to local
24415register variables may be deleted or moved or simplified.
24416
24417 As for global register variables, it's recommended that you choose a
24418register which is normally saved and restored by function calls on your
24419machine, so that library routines will not clobber it.  A common
24420pitfall is to initialize multiple call-clobbered registers with
24421arbitrary expressions, where a function call or library call for an
24422arithmetic operator will overwrite a register value from a previous
24423assignment, for example `r0' below:
24424     register int *p1 asm ("r0") = ...;
24425     register int *p2 asm ("r1") = ...;
24426 In those cases, a solution is to use a temporary variable for each
24427arbitrary expression.   *Note Example of asm with clobbered asm reg::.
24428
24429
24430File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Explicit Reg Vars,  Up: C Extensions
24431
244326.43 Alternate Keywords
24433=======================
24434
24435`-ansi' and the various `-std' options disable certain keywords.  This
24436causes trouble when you want to use GNU C extensions, or a
24437general-purpose header file that should be usable by all programs,
24438including ISO C programs.  The keywords `asm', `typeof' and `inline'
24439are not available in programs compiled with `-ansi' or `-std' (although
24440`inline' can be used in a program compiled with `-std=c99').  The ISO
24441C99 keyword `restrict' is only available when `-std=gnu99' (which will
24442eventually be the default) or `-std=c99' (or the equivalent
24443`-std=iso9899:1999') is used.
24444
24445 The way to solve these problems is to put `__' at the beginning and
24446end of each problematical keyword.  For example, use `__asm__' instead
24447of `asm', and `__inline__' instead of `inline'.
24448
24449 Other C compilers won't accept these alternative keywords; if you want
24450to compile with another compiler, you can define the alternate keywords
24451as macros to replace them with the customary keywords.  It looks like
24452this:
24453
24454     #ifndef __GNUC__
24455     #define __asm__ asm
24456     #endif
24457
24458 `-pedantic' and other options cause warnings for many GNU C extensions.
24459You can prevent such warnings within one expression by writing
24460`__extension__' before the expression.  `__extension__' has no effect
24461aside from this.
24462
24463
24464File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
24465
244666.44 Incomplete `enum' Types
24467============================
24468
24469You can define an `enum' tag without specifying its possible values.
24470This results in an incomplete type, much like what you get if you write
24471`struct foo' without describing the elements.  A later declaration
24472which does specify the possible values completes the type.
24473
24474 You can't allocate variables or storage using the type while it is
24475incomplete.  However, you can work with pointers to that type.
24476
24477 This extension may not be very useful, but it makes the handling of
24478`enum' more consistent with the way `struct' and `union' are handled.
24479
24480 This extension is not supported by GNU C++.
24481
24482
24483File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
24484
244856.45 Function Names as Strings
24486==============================
24487
24488GCC provides three magic variables which hold the name of the current
24489function, as a string.  The first of these is `__func__', which is part
24490of the C99 standard:
24491
24492 The identifier `__func__' is implicitly declared by the translator as
24493if, immediately following the opening brace of each function
24494definition, the declaration
24495
24496     static const char __func__[] = "function-name";
24497
24498appeared, where function-name is the name of the lexically-enclosing
24499function.  This name is the unadorned name of the function.
24500
24501 `__FUNCTION__' is another name for `__func__'.  Older versions of GCC
24502recognize only this name.  However, it is not standardized.  For
24503maximum portability, we recommend you use `__func__', but provide a
24504fallback definition with the preprocessor:
24505
24506     #if __STDC_VERSION__ < 199901L
24507     # if __GNUC__ >= 2
24508     #  define __func__ __FUNCTION__
24509     # else
24510     #  define __func__ "<unknown>"
24511     # endif
24512     #endif
24513
24514 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'.
24515However, in C++, `__PRETTY_FUNCTION__' contains the type signature of
24516the function as well as its bare name.  For example, this program:
24517
24518     extern "C" {
24519     extern int printf (char *, ...);
24520     }
24521
24522     class a {
24523      public:
24524       void sub (int i)
24525         {
24526           printf ("__FUNCTION__ = %s\n", __FUNCTION__);
24527           printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
24528         }
24529     };
24530
24531     int
24532     main (void)
24533     {
24534       a ax;
24535       ax.sub (0);
24536       return 0;
24537     }
24538
24539gives this output:
24540
24541     __FUNCTION__ = sub
24542     __PRETTY_FUNCTION__ = void a::sub(int)
24543
24544 These identifiers are not preprocessor macros.  In GCC 3.3 and
24545earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were
24546treated as string literals; they could be used to initialize `char'
24547arrays, and they could be concatenated with other string literals.  GCC
245483.4 and later treat them as variables, like `__func__'.  In C++,
24549`__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables.
24550
24551
24552File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
24553
245546.46 Getting the Return or Frame Address of a Function
24555======================================================
24556
24557These functions may be used to get information about the callers of a
24558function.
24559
24560 -- Built-in Function: void * __builtin_return_address (unsigned int
24561          LEVEL)
24562     This function returns the return address of the current function,
24563     or of one of its callers.  The LEVEL argument is number of frames
24564     to scan up the call stack.  A value of `0' yields the return
24565     address of the current function, a value of `1' yields the return
24566     address of the caller of the current function, and so forth.  When
24567     inlining the expected behavior is that the function will return
24568     the address of the function that will be returned to.  To work
24569     around this behavior use the `noinline' function attribute.
24570
24571     The LEVEL argument must be a constant integer.
24572
24573     On some machines it may be impossible to determine the return
24574     address of any function other than the current one; in such cases,
24575     or when the top of the stack has been reached, this function will
24576     return `0' or a random value.  In addition,
24577     `__builtin_frame_address' may be used to determine if the top of
24578     the stack has been reached.
24579
24580     Additional post-processing of the returned value may be needed, see
24581     `__builtin_extract_return_address'.
24582
24583     This function should only be used with a nonzero argument for
24584     debugging purposes.
24585
24586 -- Built-in Function: void * __builtin_extract_return_address (void
24587          *ADDR)
24588     The address as returned by `__builtin_return_address' may have to
24589     be fed through this function to get the actual encoded address.
24590     For example, on the 31-bit S/390 platform the highest bit has to
24591     be masked out, or on SPARC platforms an offset has to be added for
24592     the true next instruction to be executed.
24593
24594     If no fixup is needed, this function simply passes through ADDR.
24595
24596 -- Built-in Function: void * __builtin_frob_return_address (void *ADDR)
24597     This function does the reverse of
24598     `__builtin_extract_return_address'.
24599
24600 -- Built-in Function: void * __builtin_frame_address (unsigned int
24601          LEVEL)
24602     This function is similar to `__builtin_return_address', but it
24603     returns the address of the function frame rather than the return
24604     address of the function.  Calling `__builtin_frame_address' with a
24605     value of `0' yields the frame address of the current function, a
24606     value of `1' yields the frame address of the caller of the current
24607     function, and so forth.
24608
24609     The frame is the area on the stack which holds local variables and
24610     saved registers.  The frame address is normally the address of the
24611     first word pushed on to the stack by the function.  However, the
24612     exact definition depends upon the processor and the calling
24613     convention.  If the processor has a dedicated frame pointer
24614     register, and the function has a frame, then
24615     `__builtin_frame_address' will return the value of the frame
24616     pointer register.
24617
24618     On some machines it may be impossible to determine the frame
24619     address of any function other than the current one; in such cases,
24620     or when the top of the stack has been reached, this function will
24621     return `0' if the first frame pointer is properly initialized by
24622     the startup code.
24623
24624     This function should only be used with a nonzero argument for
24625     debugging purposes.
24626
24627
24628File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions
24629
246306.47 Using vector instructions through built-in functions
24631=========================================================
24632
24633On some targets, the instruction set contains SIMD vector instructions
24634that operate on multiple values contained in one large register at the
24635same time.  For example, on the i386 the MMX, 3DNow! and SSE extensions
24636can be used this way.
24637
24638 The first step in using these extensions is to provide the necessary
24639data types.  This should be done using an appropriate `typedef':
24640
24641     typedef int v4si __attribute__ ((vector_size (16)));
24642
24643 The `int' type specifies the base type, while the attribute specifies
24644the vector size for the variable, measured in bytes.  For example, the
24645declaration above causes the compiler to set the mode for the `v4si'
24646type to be 16 bytes wide and divided into `int' sized units.  For a
2464732-bit `int' this means a vector of 4 units of 4 bytes, and the
24648corresponding mode of `foo' will be V4SI.
24649
24650 The `vector_size' attribute is only applicable to integral and float
24651scalars, although arrays, pointers, and function return values are
24652allowed in conjunction with this construct.
24653
24654 All the basic integer types can be used as base types, both as signed
24655and as unsigned: `char', `short', `int', `long', `long long'.  In
24656addition, `float' and `double' can be used to build floating-point
24657vector types.
24658
24659 Specifying a combination that is not valid for the current architecture
24660will cause GCC to synthesize the instructions using a narrower mode.
24661For example, if you specify a variable of type `V4SI' and your
24662architecture does not allow for this specific SIMD type, GCC will
24663produce code that uses 4 `SIs'.
24664
24665 The types defined in this manner can be used with a subset of normal C
24666operations.  Currently, GCC will allow using the following operators on
24667these types: `+, -, *, /, unary minus, ^, |, &, ~, %'.
24668
24669 The operations behave like C++ `valarrays'.  Addition is defined as
24670the addition of the corresponding elements of the operands.  For
24671example, in the code below, each of the 4 elements in A will be added
24672to the corresponding 4 elements in B and the resulting vector will be
24673stored in C.
24674
24675     typedef int v4si __attribute__ ((vector_size (16)));
24676
24677     v4si a, b, c;
24678
24679     c = a + b;
24680
24681 Subtraction, multiplication, division, and the logical operations
24682operate in a similar manner.  Likewise, the result of using the unary
24683minus or complement operators on a vector type is a vector whose
24684elements are the negative or complemented values of the corresponding
24685elements in the operand.
24686
24687 You can declare variables and use them in function calls and returns,
24688as well as in assignments and some casts.  You can specify a vector
24689type as a return type for a function.  Vector types can also be used as
24690function arguments.  It is possible to cast from one vector type to
24691another, provided they are of the same size (in fact, you can also cast
24692vectors to and from other datatypes of the same size).
24693
24694 You cannot operate between vectors of different lengths or different
24695signedness without a cast.
24696
24697 A port that supports hardware vector operations, usually provides a set
24698of built-in functions that can be used to operate on vectors.  For
24699example, a function to add two vectors and multiply the result by a
24700third could look like this:
24701
24702     v4si f (v4si a, v4si b, v4si c)
24703     {
24704       v4si tmp = __builtin_addv4si (a, b);
24705       return __builtin_mulv4si (tmp, c);
24706     }
24707
24708
24709File: gcc.info,  Node: Offsetof,  Next: Atomic Builtins,  Prev: Vector Extensions,  Up: C Extensions
24710
247116.48 Offsetof
24712=============
24713
24714GCC implements for both C and C++ a syntactic extension to implement
24715the `offsetof' macro.
24716
24717     primary:
24718             "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")"
24719
24720     offsetof_member_designator:
24721               `identifier'
24722             | offsetof_member_designator "." `identifier'
24723             | offsetof_member_designator "[" `expr' "]"
24724
24725 This extension is sufficient such that
24726
24727     #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
24728
24729 is a suitable definition of the `offsetof' macro.  In C++, TYPE may be
24730dependent.  In either case, MEMBER may consist of a single identifier,
24731or a sequence of member accesses and array references.
24732
24733
24734File: gcc.info,  Node: Atomic Builtins,  Next: Object Size Checking,  Prev: Offsetof,  Up: C Extensions
24735
247366.49 Built-in functions for atomic memory access
24737================================================
24738
24739The following builtins are intended to be compatible with those
24740described in the `Intel Itanium Processor-specific Application Binary
24741Interface', section 7.4.  As such, they depart from the normal GCC
24742practice of using the "__builtin_" prefix, and further that they are
24743overloaded such that they work on multiple types.
24744
24745 The definition given in the Intel documentation allows only for the
24746use of the types `int', `long', `long long' as well as their unsigned
24747counterparts.  GCC will allow any integral scalar or pointer type that
24748is 1, 2, 4 or 8 bytes in length.
24749
24750 Not all operations are supported by all target processors.  If a
24751particular operation cannot be implemented on the target processor, a
24752warning will be generated and a call an external function will be
24753generated.  The external function will carry the same name as the
24754builtin, with an additional suffix `_N' where N is the size of the data
24755type.
24756
24757 In most cases, these builtins are considered a "full barrier".  That
24758is, no memory operand will be moved across the operation, either
24759forward or backward.  Further, instructions will be issued as necessary
24760to prevent the processor from speculating loads across the operation
24761and from queuing stores after the operation.
24762
24763 All of the routines are described in the Intel documentation to take
24764"an optional list of variables protected by the memory barrier".  It's
24765not clear what is meant by that; it could mean that _only_ the
24766following variables are protected, or it could mean that these variables
24767should in addition be protected.  At present GCC ignores this list and
24768protects all variables which are globally accessible.  If in the future
24769we make some use of this list, an empty list will continue to mean all
24770globally accessible variables.
24771
24772`TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
24773`TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
24774`TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
24775`TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
24776`TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
24777`TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
24778     These builtins perform the operation suggested by the name, and
24779     returns the value that had previously been in memory.  That is,
24780
24781          { tmp = *ptr; *ptr OP= value; return tmp; }
24782          { tmp = *ptr; *ptr = ~(tmp & value); return tmp; }   // nand
24783
24784     _Note:_ GCC 4.4 and later implement `__sync_fetch_and_nand'
24785     builtin as `*ptr = ~(tmp & value)' instead of `*ptr = ~tmp &
24786     value'.
24787
24788`TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
24789`TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
24790`TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
24791`TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
24792`TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
24793`TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
24794     These builtins perform the operation suggested by the name, and
24795     return the new value.  That is,
24796
24797          { *ptr OP= value; return *ptr; }
24798          { *ptr = ~(*ptr & value); return *ptr; }   // nand
24799
24800     _Note:_ GCC 4.4 and later implement `__sync_nand_and_fetch'
24801     builtin as `*ptr = ~(*ptr & value)' instead of `*ptr = ~*ptr &
24802     value'.
24803
24804`bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)'
24805`TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)'
24806     These builtins perform an atomic compare and swap.  That is, if
24807     the current value of `*PTR' is OLDVAL, then write NEWVAL into
24808     `*PTR'.
24809
24810     The "bool" version returns true if the comparison is successful and
24811     NEWVAL was written.  The "val" version returns the contents of
24812     `*PTR' before the operation.
24813
24814`__sync_synchronize (...)'
24815     This builtin issues a full memory barrier.
24816
24817`TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
24818     This builtin, as described by Intel, is not a traditional
24819     test-and-set operation, but rather an atomic exchange operation.
24820     It writes VALUE into `*PTR', and returns the previous contents of
24821     `*PTR'.
24822
24823     Many targets have only minimal support for such locks, and do not
24824     support a full exchange operation.  In this case, a target may
24825     support reduced functionality here by which the _only_ valid value
24826     to store is the immediate constant 1.  The exact value actually
24827     stored in `*PTR' is implementation defined.
24828
24829     This builtin is not a full barrier, but rather an "acquire
24830     barrier".  This means that references after the builtin cannot
24831     move to (or be speculated to) before the builtin, but previous
24832     memory stores may not be globally visible yet, and previous memory
24833     loads may not yet be satisfied.
24834
24835`void __sync_lock_release (TYPE *ptr, ...)'
24836     This builtin releases the lock acquired by
24837     `__sync_lock_test_and_set'.  Normally this means writing the
24838     constant 0 to `*PTR'.
24839
24840     This builtin is not a full barrier, but rather a "release barrier".
24841     This means that all previous memory stores are globally visible,
24842     and all previous memory loads have been satisfied, but following
24843     memory reads are not prevented from being speculated to before the
24844     barrier.
24845
24846
24847File: gcc.info,  Node: Object Size Checking,  Next: Other Builtins,  Prev: Atomic Builtins,  Up: C Extensions
24848
248496.50 Object Size Checking Builtins
24850==================================
24851
24852GCC implements a limited buffer overflow protection mechanism that can
24853prevent some buffer overflow attacks.
24854
24855 -- Built-in Function: size_t __builtin_object_size (void * PTR, int
24856          TYPE)
24857     is a built-in construct that returns a constant number of bytes
24858     from PTR to the end of the object PTR pointer points to (if known
24859     at compile time).  `__builtin_object_size' never evaluates its
24860     arguments for side-effects.  If there are any side-effects in
24861     them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0'
24862     for TYPE 2 or 3.  If there are multiple objects PTR can point to
24863     and all of them are known at compile time, the returned number is
24864     the maximum of remaining byte counts in those objects if TYPE & 2
24865     is 0 and minimum if nonzero.  If it is not possible to determine
24866     which objects PTR points to at compile time,
24867     `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or
24868     1 and `(size_t) 0' for TYPE 2 or 3.
24869
24870     TYPE is an integer constant from 0 to 3.  If the least significant
24871     bit is clear, objects are whole variables, if it is set, a closest
24872     surrounding subobject is considered the object a pointer points to.
24873     The second bit determines if maximum or minimum of remaining bytes
24874     is computed.
24875
24876          struct V { char buf1[10]; int b; char buf2[10]; } var;
24877          char *p = &var.buf1[1], *q = &var.b;
24878
24879          /* Here the object p points to is var.  */
24880          assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
24881          /* The subobject p points to is var.buf1.  */
24882          assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
24883          /* The object q points to is var.  */
24884          assert (__builtin_object_size (q, 0)
24885                  == (char *) (&var + 1) - (char *) &var.b);
24886          /* The subobject q points to is var.b.  */
24887          assert (__builtin_object_size (q, 1) == sizeof (var.b));
24888
24889 There are built-in functions added for many common string operation
24890functions, e.g., for `memcpy' `__builtin___memcpy_chk' built-in is
24891provided.  This built-in has an additional last argument, which is the
24892number of bytes remaining in object the DEST argument points to or
24893`(size_t) -1' if the size is not known.
24894
24895 The built-in functions are optimized into the normal string functions
24896like `memcpy' if the last argument is `(size_t) -1' or if it is known
24897at compile time that the destination object will not be overflown.  If
24898the compiler can determine at compile time the object will be always
24899overflown, it issues a warning.
24900
24901 The intended use can be e.g.
24902
24903     #undef memcpy
24904     #define bos0(dest) __builtin_object_size (dest, 0)
24905     #define memcpy(dest, src, n) \
24906       __builtin___memcpy_chk (dest, src, n, bos0 (dest))
24907
24908     char *volatile p;
24909     char buf[10];
24910     /* It is unknown what object p points to, so this is optimized
24911        into plain memcpy - no checking is possible.  */
24912     memcpy (p, "abcde", n);
24913     /* Destination is known and length too.  It is known at compile
24914        time there will be no overflow.  */
24915     memcpy (&buf[5], "abcde", 5);
24916     /* Destination is known, but the length is not known at compile time.
24917        This will result in __memcpy_chk call that can check for overflow
24918        at runtime.  */
24919     memcpy (&buf[5], "abcde", n);
24920     /* Destination is known and it is known at compile time there will
24921        be overflow.  There will be a warning and __memcpy_chk call that
24922        will abort the program at runtime.  */
24923     memcpy (&buf[6], "abcde", 5);
24924
24925 Such built-in functions are provided for `memcpy', `mempcpy',
24926`memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and
24927`strncat'.
24928
24929 There are also checking built-in functions for formatted output
24930functions.
24931     int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
24932     int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
24933                                   const char *fmt, ...);
24934     int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
24935                                   va_list ap);
24936     int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
24937                                    const char *fmt, va_list ap);
24938
24939 The added FLAG argument is passed unchanged to `__sprintf_chk' etc.
24940functions and can contain implementation specific flags on what
24941additional security measures the checking function might take, such as
24942handling `%n' differently.
24943
24944 The OS argument is the object size S points to, like in the other
24945built-in functions.  There is a small difference in the behavior
24946though, if OS is `(size_t) -1', the built-in functions are optimized
24947into the non-checking functions only if FLAG is 0, otherwise the
24948checking function is called with OS argument set to `(size_t) -1'.
24949
24950 In addition to this, there are checking built-in functions
24951`__builtin___printf_chk', `__builtin___vprintf_chk',
24952`__builtin___fprintf_chk' and `__builtin___vfprintf_chk'.  These have
24953just one additional argument, FLAG, right before format string FMT.  If
24954the compiler is able to optimize them to `fputc' etc. functions, it
24955will, otherwise the checking function should be called and the FLAG
24956argument passed to it.
24957
24958
24959File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Object Size Checking,  Up: C Extensions
24960
249616.51 Other built-in functions provided by GCC
24962=============================================
24963
24964GCC provides a large number of built-in functions other than the ones
24965mentioned above.  Some of these are for internal use in the processing
24966of exceptions or variable-length argument lists and will not be
24967documented here because they may change from time to time; we do not
24968recommend general use of these functions.
24969
24970 The remaining functions are provided for optimization purposes.
24971
24972 GCC includes built-in versions of many of the functions in the standard
24973C library.  The versions prefixed with `__builtin_' will always be
24974treated as having the same meaning as the C library function even if you
24975specify the `-fno-builtin' option.  (*note C Dialect Options::) Many of
24976these functions are only optimized in certain cases; if they are not
24977optimized in a particular case, a call to the library function will be
24978emitted.
24979
24980 Outside strict ISO C mode (`-ansi', `-std=c90' or `-std=c99'), the
24981functions `_exit', `alloca', `bcmp', `bzero', `dcgettext', `dgettext',
24982`dremf', `dreml', `drem', `exp10f', `exp10l', `exp10', `ffsll', `ffsl',
24983`ffs', `fprintf_unlocked', `fputs_unlocked', `gammaf', `gammal',
24984`gamma', `gammaf_r', `gammal_r', `gamma_r', `gettext', `index',
24985`isascii', `j0f', `j0l', `j0', `j1f', `j1l', `j1', `jnf', `jnl', `jn',
24986`lgammaf_r', `lgammal_r', `lgamma_r', `mempcpy', `pow10f', `pow10l',
24987`pow10', `printf_unlocked', `rindex', `scalbf', `scalbl', `scalb',
24988`signbit', `signbitf', `signbitl', `signbitd32', `signbitd64',
24989`signbitd128', `significandf', `significandl', `significand', `sincosf',
24990`sincosl', `sincos', `stpcpy', `stpncpy', `strcasecmp', `strdup',
24991`strfmon', `strncasecmp', `strndup', `toascii', `y0f', `y0l', `y0',
24992`y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be handled as built-in
24993functions.  All these functions have corresponding versions prefixed
24994with `__builtin_', which may be used even in strict C90 mode.
24995
24996 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf',
24997`asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl',
24998`cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos',
24999`cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh',
25000`casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl',
25001`catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl',
25002`ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl',
25003`cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj',
25004`copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow',
25005`cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf',
25006`csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl',
25007`csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan',
25008`erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l',
25009`exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf',
25010`fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin',
25011`hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs',
25012`isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs',
25013`llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround',
25014`log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf',
25015`logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl',
25016`lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf',
25017`nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward',
25018`remainderf', `remainderl', `remainder', `remquof', `remquol',
25019`remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round',
25020`scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn',
25021`snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc',
25022`vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in
25023functions except in strict ISO C90 mode (`-ansi' or `-std=c90').
25024
25025 There are also built-in versions of the ISO C99 functions `acosf',
25026`acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl',
25027`ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl',
25028`fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf',
25029`frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl',
25030`modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl',
25031`sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are
25032recognized in any mode since ISO C90 reserves these names for the
25033purpose to which ISO C99 puts them.  All these functions have
25034corresponding versions prefixed with `__builtin_'.
25035
25036 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit',
25037`iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper',
25038`iswxdigit', `towlower' and `towupper' are handled as built-in functions
25039except in strict ISO C90 mode (`-ansi' or `-std=c90').
25040
25041 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan',
25042`calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod',
25043`fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl',
25044`isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace',
25045`isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10',
25046`log', `malloc', `memchr', `memcmp', `memcpy', `memset', `modf', `pow',
25047`printf', `putchar', `puts', `scanf', `sinh', `sin', `snprintf',
25048`sprintf', `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy',
25049`strcspn', `strlen', `strncat', `strncmp', `strncpy', `strpbrk',
25050`strrchr', `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and
25051`vsprintf' are all recognized as built-in functions unless
25052`-fno-builtin' is specified (or `-fno-builtin-FUNCTION' is specified
25053for an individual function).  All of these functions have corresponding
25054versions prefixed with `__builtin_'.
25055
25056 GCC provides built-in versions of the ISO C99 floating point comparison
25057macros that avoid raising exceptions for unordered operands.  They have
25058the same names as the standard macros ( `isgreater', `isgreaterequal',
25059`isless', `islessequal', `islessgreater', and `isunordered') , with
25060`__builtin_' prefixed.  We intend for a library implementor to be able
25061to simply `#define' each standard macro to its built-in equivalent.  In
25062the same fashion, GCC provides `fpclassify', `isfinite', `isinf_sign'
25063and `isnormal' built-ins used with `__builtin_' prefixed.  The `isinf'
25064and `isnan' builtins appear both with and without the `__builtin_'
25065prefix.
25066
25067 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
25068     You can use the built-in function `__builtin_types_compatible_p' to
25069     determine whether two types are the same.
25070
25071     This built-in function returns 1 if the unqualified versions of the
25072     types TYPE1 and TYPE2 (which are types, not expressions) are
25073     compatible, 0 otherwise.  The result of this built-in function can
25074     be used in integer constant expressions.
25075
25076     This built-in function ignores top level qualifiers (e.g., `const',
25077     `volatile').  For example, `int' is equivalent to `const int'.
25078
25079     The type `int[]' and `int[5]' are compatible.  On the other hand,
25080     `int' and `char *' are not compatible, even if the size of their
25081     types, on the particular architecture are the same.  Also, the
25082     amount of pointer indirection is taken into account when
25083     determining similarity.  Consequently, `short *' is not similar to
25084     `short **'.  Furthermore, two types that are typedefed are
25085     considered compatible if their underlying types are compatible.
25086
25087     An `enum' type is not considered to be compatible with another
25088     `enum' type even if both are compatible with the same integer
25089     type; this is what the C standard specifies.  For example, `enum
25090     {foo, bar}' is not similar to `enum {hot, dog}'.
25091
25092     You would typically use this function in code whose execution
25093     varies depending on the arguments' types.  For example:
25094
25095          #define foo(x)                                                  \
25096            ({                                                           \
25097              typeof (x) tmp = (x);                                       \
25098              if (__builtin_types_compatible_p (typeof (x), long double)) \
25099                tmp = foo_long_double (tmp);                              \
25100              else if (__builtin_types_compatible_p (typeof (x), double)) \
25101                tmp = foo_double (tmp);                                   \
25102              else if (__builtin_types_compatible_p (typeof (x), float))  \
25103                tmp = foo_float (tmp);                                    \
25104              else                                                        \
25105                abort ();                                                 \
25106              tmp;                                                        \
25107            })
25108
25109     _Note:_ This construct is only available for C.
25110
25111
25112 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
25113          EXP2)
25114     You can use the built-in function `__builtin_choose_expr' to
25115     evaluate code depending on the value of a constant expression.
25116     This built-in function returns EXP1 if CONST_EXP, which is an
25117     integer constant expression, is nonzero.  Otherwise it returns 0.
25118
25119     This built-in function is analogous to the `? :' operator in C,
25120     except that the expression returned has its type unaltered by
25121     promotion rules.  Also, the built-in function does not evaluate
25122     the expression that was not chosen.  For example, if CONST_EXP
25123     evaluates to true, EXP2 is not evaluated even if it has
25124     side-effects.
25125
25126     This built-in function can return an lvalue if the chosen argument
25127     is an lvalue.
25128
25129     If EXP1 is returned, the return type is the same as EXP1's type.
25130     Similarly, if EXP2 is returned, its return type is the same as
25131     EXP2.
25132
25133     Example:
25134
25135          #define foo(x)                                                    \
25136            __builtin_choose_expr (                                         \
25137              __builtin_types_compatible_p (typeof (x), double),            \
25138              foo_double (x),                                               \
25139              __builtin_choose_expr (                                       \
25140                __builtin_types_compatible_p (typeof (x), float),           \
25141                foo_float (x),                                              \
25142                /* The void expression results in a compile-time error  \
25143                   when assigning the result to something.  */          \
25144                (void)0))
25145
25146     _Note:_ This construct is only available for C.  Furthermore, the
25147     unused expression (EXP1 or EXP2 depending on the value of
25148     CONST_EXP) may still generate syntax errors.  This may change in
25149     future revisions.
25150
25151
25152 -- Built-in Function: int __builtin_constant_p (EXP)
25153     You can use the built-in function `__builtin_constant_p' to
25154     determine if a value is known to be constant at compile-time and
25155     hence that GCC can perform constant-folding on expressions
25156     involving that value.  The argument of the function is the value
25157     to test.  The function returns the integer 1 if the argument is
25158     known to be a compile-time constant and 0 if it is not known to be
25159     a compile-time constant.  A return of 0 does not indicate that the
25160     value is _not_ a constant, but merely that GCC cannot prove it is
25161     a constant with the specified value of the `-O' option.
25162
25163     You would typically use this function in an embedded application
25164     where memory was a critical resource.  If you have some complex
25165     calculation, you may want it to be folded if it involves
25166     constants, but need to call a function if it does not.  For
25167     example:
25168
25169          #define Scale_Value(X)      \
25170            (__builtin_constant_p (X) \
25171            ? ((X) * SCALE + OFFSET) : Scale (X))
25172
25173     You may use this built-in function in either a macro or an inline
25174     function.  However, if you use it in an inlined function and pass
25175     an argument of the function as the argument to the built-in, GCC
25176     will never return 1 when you call the inline function with a
25177     string constant or compound literal (*note Compound Literals::)
25178     and will not return 1 when you pass a constant numeric value to
25179     the inline function unless you specify the `-O' option.
25180
25181     You may also use `__builtin_constant_p' in initializers for static
25182     data.  For instance, you can write
25183
25184          static const int table[] = {
25185             __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
25186             /* ... */
25187          };
25188
25189     This is an acceptable initializer even if EXPRESSION is not a
25190     constant expression, including the case where
25191     `__builtin_constant_p' returns 1 because EXPRESSION can be folded
25192     to a constant but EXPRESSION contains operands that would not
25193     otherwise be permitted in a static initializer (for example, `0 &&
25194     foo ()').  GCC must be more conservative about evaluating the
25195     built-in in this case, because it has no opportunity to perform
25196     optimization.
25197
25198     Previous versions of GCC did not accept this built-in in data
25199     initializers.  The earliest version where it is completely safe is
25200     3.0.1.
25201
25202 -- Built-in Function: long __builtin_expect (long EXP, long C)
25203     You may use `__builtin_expect' to provide the compiler with branch
25204     prediction information.  In general, you should prefer to use
25205     actual profile feedback for this (`-fprofile-arcs'), as
25206     programmers are notoriously bad at predicting how their programs
25207     actually perform.  However, there are applications in which this
25208     data is hard to collect.
25209
25210     The return value is the value of EXP, which should be an integral
25211     expression.  The semantics of the built-in are that it is expected
25212     that EXP == C.  For example:
25213
25214          if (__builtin_expect (x, 0))
25215            foo ();
25216
25217     would indicate that we do not expect to call `foo', since we
25218     expect `x' to be zero.  Since you are limited to integral
25219     expressions for EXP, you should use constructions such as
25220
25221          if (__builtin_expect (ptr != NULL, 1))
25222            error ();
25223
25224     when testing pointer or floating-point values.
25225
25226 -- Built-in Function: void __builtin_trap (void)
25227     This function causes the program to exit abnormally.  GCC
25228     implements this function by using a target-dependent mechanism
25229     (such as intentionally executing an illegal instruction) or by
25230     calling `abort'.  The mechanism used may vary from release to
25231     release so you should not rely on any particular implementation.
25232
25233 -- Built-in Function: void __builtin_unreachable (void)
25234     If control flow reaches the point of the `__builtin_unreachable',
25235     the program is undefined.  It is useful in situations where the
25236     compiler cannot deduce the unreachability of the code.
25237
25238     One such case is immediately following an `asm' statement that
25239     will either never terminate, or one that transfers control
25240     elsewhere and never returns.  In this example, without the
25241     `__builtin_unreachable', GCC would issue a warning that control
25242     reaches the end of a non-void function.  It would also generate
25243     code to return after the `asm'.
25244
25245          int f (int c, int v)
25246          {
25247            if (c)
25248              {
25249                return v;
25250              }
25251            else
25252              {
25253                asm("jmp error_handler");
25254                __builtin_unreachable ();
25255              }
25256          }
25257
25258     Because the `asm' statement unconditionally transfers control out
25259     of the function, control will never reach the end of the function
25260     body.  The `__builtin_unreachable' is in fact unreachable and
25261     communicates this fact to the compiler.
25262
25263     Another use for `__builtin_unreachable' is following a call a
25264     function that never returns but that is not declared
25265     `__attribute__((noreturn))', as in this example:
25266
25267          void function_that_never_returns (void);
25268
25269          int g (int c)
25270          {
25271            if (c)
25272              {
25273                return 1;
25274              }
25275            else
25276              {
25277                function_that_never_returns ();
25278                __builtin_unreachable ();
25279              }
25280          }
25281
25282
25283 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char
25284          *END)
25285     This function is used to flush the processor's instruction cache
25286     for the region of memory between BEGIN inclusive and END
25287     exclusive.  Some targets require that the instruction cache be
25288     flushed, after modifying memory containing code, in order to obtain
25289     deterministic behavior.
25290
25291     If the target does not require instruction cache flushes,
25292     `__builtin___clear_cache' has no effect.  Otherwise either
25293     instructions are emitted in-line to clear the instruction cache or
25294     a call to the `__clear_cache' function in libgcc is made.
25295
25296 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
25297     This function is used to minimize cache-miss latency by moving
25298     data into a cache before it is accessed.  You can insert calls to
25299     `__builtin_prefetch' into code for which you know addresses of
25300     data in memory that is likely to be accessed soon.  If the target
25301     supports them, data prefetch instructions will be generated.  If
25302     the prefetch is done early enough before the access then the data
25303     will be in the cache by the time it is accessed.
25304
25305     The value of ADDR is the address of the memory to prefetch.  There
25306     are two optional arguments, RW and LOCALITY.  The value of RW is a
25307     compile-time constant one or zero; one means that the prefetch is
25308     preparing for a write to the memory address and zero, the default,
25309     means that the prefetch is preparing for a read.  The value
25310     LOCALITY must be a compile-time constant integer between zero and
25311     three.  A value of zero means that the data has no temporal
25312     locality, so it need not be left in the cache after the access.  A
25313     value of three means that the data has a high degree of temporal
25314     locality and should be left in all levels of cache possible.
25315     Values of one and two mean, respectively, a low or moderate degree
25316     of temporal locality.  The default is three.
25317
25318          for (i = 0; i < n; i++)
25319            {
25320              a[i] = a[i] + b[i];
25321              __builtin_prefetch (&a[i+j], 1, 1);
25322              __builtin_prefetch (&b[i+j], 0, 1);
25323              /* ... */
25324            }
25325
25326     Data prefetch does not generate faults if ADDR is invalid, but the
25327     address expression itself must be valid.  For example, a prefetch
25328     of `p->next' will not fault if `p->next' is not a valid address,
25329     but evaluation will fault if `p' is not a valid address.
25330
25331     If the target does not support data prefetch, the address
25332     expression is evaluated if it includes side effects but no other
25333     code is generated and GCC does not issue a warning.
25334
25335 -- Built-in Function: double __builtin_huge_val (void)
25336     Returns a positive infinity, if supported by the floating-point
25337     format, else `DBL_MAX'.  This function is suitable for
25338     implementing the ISO C macro `HUGE_VAL'.
25339
25340 -- Built-in Function: float __builtin_huge_valf (void)
25341     Similar to `__builtin_huge_val', except the return type is `float'.
25342
25343 -- Built-in Function: long double __builtin_huge_vall (void)
25344     Similar to `__builtin_huge_val', except the return type is `long
25345     double'.
25346
25347 -- Built-in Function: int __builtin_fpclassify (int, int, int, int,
25348          int, ...)
25349     This built-in implements the C99 fpclassify functionality.  The
25350     first five int arguments should be the target library's notion of
25351     the possible FP classes and are used for return values.  They must
25352     be constant values and they must appear in this order: `FP_NAN',
25353     `FP_INFINITE', `FP_NORMAL', `FP_SUBNORMAL' and `FP_ZERO'.  The
25354     ellipsis is for exactly one floating point value to classify.  GCC
25355     treats the last argument as type-generic, which means it does not
25356     do default promotion from float to double.
25357
25358 -- Built-in Function: double __builtin_inf (void)
25359     Similar to `__builtin_huge_val', except a warning is generated if
25360     the target floating-point format does not support infinities.
25361
25362 -- Built-in Function: _Decimal32 __builtin_infd32 (void)
25363     Similar to `__builtin_inf', except the return type is `_Decimal32'.
25364
25365 -- Built-in Function: _Decimal64 __builtin_infd64 (void)
25366     Similar to `__builtin_inf', except the return type is `_Decimal64'.
25367
25368 -- Built-in Function: _Decimal128 __builtin_infd128 (void)
25369     Similar to `__builtin_inf', except the return type is
25370     `_Decimal128'.
25371
25372 -- Built-in Function: float __builtin_inff (void)
25373     Similar to `__builtin_inf', except the return type is `float'.
25374     This function is suitable for implementing the ISO C99 macro
25375     `INFINITY'.
25376
25377 -- Built-in Function: long double __builtin_infl (void)
25378     Similar to `__builtin_inf', except the return type is `long
25379     double'.
25380
25381 -- Built-in Function: int __builtin_isinf_sign (...)
25382     Similar to `isinf', except the return value will be negative for
25383     an argument of `-Inf'.  Note while the parameter list is an
25384     ellipsis, this function only accepts exactly one floating point
25385     argument.  GCC treats this parameter as type-generic, which means
25386     it does not do default promotion from float to double.
25387
25388 -- Built-in Function: double __builtin_nan (const char *str)
25389     This is an implementation of the ISO C99 function `nan'.
25390
25391     Since ISO C99 defines this function in terms of `strtod', which we
25392     do not implement, a description of the parsing is in order.  The
25393     string is parsed as by `strtol'; that is, the base is recognized by
25394     leading `0' or `0x' prefixes.  The number parsed is placed in the
25395     significand such that the least significant bit of the number is
25396     at the least significant bit of the significand.  The number is
25397     truncated to fit the significand field provided.  The significand
25398     is forced to be a quiet NaN.
25399
25400     This function, if given a string literal all of which would have
25401     been consumed by strtol, is evaluated early enough that it is
25402     considered a compile-time constant.
25403
25404 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
25405     Similar to `__builtin_nan', except the return type is `_Decimal32'.
25406
25407 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
25408     Similar to `__builtin_nan', except the return type is `_Decimal64'.
25409
25410 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
25411     Similar to `__builtin_nan', except the return type is
25412     `_Decimal128'.
25413
25414 -- Built-in Function: float __builtin_nanf (const char *str)
25415     Similar to `__builtin_nan', except the return type is `float'.
25416
25417 -- Built-in Function: long double __builtin_nanl (const char *str)
25418     Similar to `__builtin_nan', except the return type is `long
25419     double'.
25420
25421 -- Built-in Function: double __builtin_nans (const char *str)
25422     Similar to `__builtin_nan', except the significand is forced to be
25423     a signaling NaN.  The `nans' function is proposed by WG14 N965.
25424
25425 -- Built-in Function: float __builtin_nansf (const char *str)
25426     Similar to `__builtin_nans', except the return type is `float'.
25427
25428 -- Built-in Function: long double __builtin_nansl (const char *str)
25429     Similar to `__builtin_nans', except the return type is `long
25430     double'.
25431
25432 -- Built-in Function: int __builtin_ffs (unsigned int x)
25433     Returns one plus the index of the least significant 1-bit of X, or
25434     if X is zero, returns zero.
25435
25436 -- Built-in Function: int __builtin_clz (unsigned int x)
25437     Returns the number of leading 0-bits in X, starting at the most
25438     significant bit position.  If X is 0, the result is undefined.
25439
25440 -- Built-in Function: int __builtin_ctz (unsigned int x)
25441     Returns the number of trailing 0-bits in X, starting at the least
25442     significant bit position.  If X is 0, the result is undefined.
25443
25444 -- Built-in Function: int __builtin_popcount (unsigned int x)
25445     Returns the number of 1-bits in X.
25446
25447 -- Built-in Function: int __builtin_parity (unsigned int x)
25448     Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
25449
25450 -- Built-in Function: int __builtin_ffsl (unsigned long)
25451     Similar to `__builtin_ffs', except the argument type is `unsigned
25452     long'.
25453
25454 -- Built-in Function: int __builtin_clzl (unsigned long)
25455     Similar to `__builtin_clz', except the argument type is `unsigned
25456     long'.
25457
25458 -- Built-in Function: int __builtin_ctzl (unsigned long)
25459     Similar to `__builtin_ctz', except the argument type is `unsigned
25460     long'.
25461
25462 -- Built-in Function: int __builtin_popcountl (unsigned long)
25463     Similar to `__builtin_popcount', except the argument type is
25464     `unsigned long'.
25465
25466 -- Built-in Function: int __builtin_parityl (unsigned long)
25467     Similar to `__builtin_parity', except the argument type is
25468     `unsigned long'.
25469
25470 -- Built-in Function: int __builtin_ffsll (unsigned long long)
25471     Similar to `__builtin_ffs', except the argument type is `unsigned
25472     long long'.
25473
25474 -- Built-in Function: int __builtin_clzll (unsigned long long)
25475     Similar to `__builtin_clz', except the argument type is `unsigned
25476     long long'.
25477
25478 -- Built-in Function: int __builtin_ctzll (unsigned long long)
25479     Similar to `__builtin_ctz', except the argument type is `unsigned
25480     long long'.
25481
25482 -- Built-in Function: int __builtin_popcountll (unsigned long long)
25483     Similar to `__builtin_popcount', except the argument type is
25484     `unsigned long long'.
25485
25486 -- Built-in Function: int __builtin_parityll (unsigned long long)
25487     Similar to `__builtin_parity', except the argument type is
25488     `unsigned long long'.
25489
25490 -- Built-in Function: double __builtin_powi (double, int)
25491     Returns the first argument raised to the power of the second.
25492     Unlike the `pow' function no guarantees about precision and
25493     rounding are made.
25494
25495 -- Built-in Function: float __builtin_powif (float, int)
25496     Similar to `__builtin_powi', except the argument and return types
25497     are `float'.
25498
25499 -- Built-in Function: long double __builtin_powil (long double, int)
25500     Similar to `__builtin_powi', except the argument and return types
25501     are `long double'.
25502
25503 -- Built-in Function: int32_t __builtin_bswap32 (int32_t x)
25504     Returns X with the order of the bytes reversed; for example,
25505     `0xaabbccdd' becomes `0xddccbbaa'.  Byte here always means exactly
25506     8 bits.
25507
25508 -- Built-in Function: int64_t __builtin_bswap64 (int64_t x)
25509     Similar to `__builtin_bswap32', except the argument and return
25510     types are 64-bit.
25511
25512
25513File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions
25514
255156.52 Built-in Functions Specific to Particular Target Machines
25516==============================================================
25517
25518On some target machines, GCC supports many built-in functions specific
25519to those machines.  Generally these generate calls to specific machine
25520instructions, but allow the compiler to schedule those calls.
25521
25522* Menu:
25523
25524* Alpha Built-in Functions::
25525* ARM iWMMXt Built-in Functions::
25526* ARM NEON Intrinsics::
25527* Blackfin Built-in Functions::
25528* FR-V Built-in Functions::
25529* X86 Built-in Functions::
25530* MIPS DSP Built-in Functions::
25531* MIPS Paired-Single Support::
25532* MIPS Loongson Built-in Functions::
25533* Other MIPS Built-in Functions::
25534* picoChip Built-in Functions::
25535* PowerPC AltiVec/VSX Built-in Functions::
25536* RX Built-in Functions::
25537* SPARC VIS Built-in Functions::
25538* SPU Built-in Functions::
25539
25540
25541File: gcc.info,  Node: Alpha Built-in Functions,  Next: ARM iWMMXt Built-in Functions,  Up: Target Builtins
25542
255436.52.1 Alpha Built-in Functions
25544-------------------------------
25545
25546These built-in functions are available for the Alpha family of
25547processors, depending on the command-line switches used.
25548
25549 The following built-in functions are always available.  They all
25550generate the machine instruction that is part of the name.
25551
25552     long __builtin_alpha_implver (void)
25553     long __builtin_alpha_rpcc (void)
25554     long __builtin_alpha_amask (long)
25555     long __builtin_alpha_cmpbge (long, long)
25556     long __builtin_alpha_extbl (long, long)
25557     long __builtin_alpha_extwl (long, long)
25558     long __builtin_alpha_extll (long, long)
25559     long __builtin_alpha_extql (long, long)
25560     long __builtin_alpha_extwh (long, long)
25561     long __builtin_alpha_extlh (long, long)
25562     long __builtin_alpha_extqh (long, long)
25563     long __builtin_alpha_insbl (long, long)
25564     long __builtin_alpha_inswl (long, long)
25565     long __builtin_alpha_insll (long, long)
25566     long __builtin_alpha_insql (long, long)
25567     long __builtin_alpha_inswh (long, long)
25568     long __builtin_alpha_inslh (long, long)
25569     long __builtin_alpha_insqh (long, long)
25570     long __builtin_alpha_mskbl (long, long)
25571     long __builtin_alpha_mskwl (long, long)
25572     long __builtin_alpha_mskll (long, long)
25573     long __builtin_alpha_mskql (long, long)
25574     long __builtin_alpha_mskwh (long, long)
25575     long __builtin_alpha_msklh (long, long)
25576     long __builtin_alpha_mskqh (long, long)
25577     long __builtin_alpha_umulh (long, long)
25578     long __builtin_alpha_zap (long, long)
25579     long __builtin_alpha_zapnot (long, long)
25580
25581 The following built-in functions are always with `-mmax' or
25582`-mcpu=CPU' where CPU is `pca56' or later.  They all generate the
25583machine instruction that is part of the name.
25584
25585     long __builtin_alpha_pklb (long)
25586     long __builtin_alpha_pkwb (long)
25587     long __builtin_alpha_unpkbl (long)
25588     long __builtin_alpha_unpkbw (long)
25589     long __builtin_alpha_minub8 (long, long)
25590     long __builtin_alpha_minsb8 (long, long)
25591     long __builtin_alpha_minuw4 (long, long)
25592     long __builtin_alpha_minsw4 (long, long)
25593     long __builtin_alpha_maxub8 (long, long)
25594     long __builtin_alpha_maxsb8 (long, long)
25595     long __builtin_alpha_maxuw4 (long, long)
25596     long __builtin_alpha_maxsw4 (long, long)
25597     long __builtin_alpha_perr (long, long)
25598
25599 The following built-in functions are always with `-mcix' or
25600`-mcpu=CPU' where CPU is `ev67' or later.  They all generate the
25601machine instruction that is part of the name.
25602
25603     long __builtin_alpha_cttz (long)
25604     long __builtin_alpha_ctlz (long)
25605     long __builtin_alpha_ctpop (long)
25606
25607 The following builtins are available on systems that use the OSF/1
25608PALcode.  Normally they invoke the `rduniq' and `wruniq' PAL calls, but
25609when invoked with `-mtls-kernel', they invoke `rdval' and `wrval'.
25610
25611     void *__builtin_thread_pointer (void)
25612     void __builtin_set_thread_pointer (void *)
25613
25614
25615File: gcc.info,  Node: ARM iWMMXt Built-in Functions,  Next: ARM NEON Intrinsics,  Prev: Alpha Built-in Functions,  Up: Target Builtins
25616
256176.52.2 ARM iWMMXt Built-in Functions
25618------------------------------------
25619
25620These built-in functions are available for the ARM family of processors
25621when the `-mcpu=iwmmxt' switch is used:
25622
25623     typedef int v2si __attribute__ ((vector_size (8)));
25624     typedef short v4hi __attribute__ ((vector_size (8)));
25625     typedef char v8qi __attribute__ ((vector_size (8)));
25626
25627     int __builtin_arm_getwcx (int)
25628     void __builtin_arm_setwcx (int, int)
25629     int __builtin_arm_textrmsb (v8qi, int)
25630     int __builtin_arm_textrmsh (v4hi, int)
25631     int __builtin_arm_textrmsw (v2si, int)
25632     int __builtin_arm_textrmub (v8qi, int)
25633     int __builtin_arm_textrmuh (v4hi, int)
25634     int __builtin_arm_textrmuw (v2si, int)
25635     v8qi __builtin_arm_tinsrb (v8qi, int)
25636     v4hi __builtin_arm_tinsrh (v4hi, int)
25637     v2si __builtin_arm_tinsrw (v2si, int)
25638     long long __builtin_arm_tmia (long long, int, int)
25639     long long __builtin_arm_tmiabb (long long, int, int)
25640     long long __builtin_arm_tmiabt (long long, int, int)
25641     long long __builtin_arm_tmiaph (long long, int, int)
25642     long long __builtin_arm_tmiatb (long long, int, int)
25643     long long __builtin_arm_tmiatt (long long, int, int)
25644     int __builtin_arm_tmovmskb (v8qi)
25645     int __builtin_arm_tmovmskh (v4hi)
25646     int __builtin_arm_tmovmskw (v2si)
25647     long long __builtin_arm_waccb (v8qi)
25648     long long __builtin_arm_wacch (v4hi)
25649     long long __builtin_arm_waccw (v2si)
25650     v8qi __builtin_arm_waddb (v8qi, v8qi)
25651     v8qi __builtin_arm_waddbss (v8qi, v8qi)
25652     v8qi __builtin_arm_waddbus (v8qi, v8qi)
25653     v4hi __builtin_arm_waddh (v4hi, v4hi)
25654     v4hi __builtin_arm_waddhss (v4hi, v4hi)
25655     v4hi __builtin_arm_waddhus (v4hi, v4hi)
25656     v2si __builtin_arm_waddw (v2si, v2si)
25657     v2si __builtin_arm_waddwss (v2si, v2si)
25658     v2si __builtin_arm_waddwus (v2si, v2si)
25659     v8qi __builtin_arm_walign (v8qi, v8qi, int)
25660     long long __builtin_arm_wand(long long, long long)
25661     long long __builtin_arm_wandn (long long, long long)
25662     v8qi __builtin_arm_wavg2b (v8qi, v8qi)
25663     v8qi __builtin_arm_wavg2br (v8qi, v8qi)
25664     v4hi __builtin_arm_wavg2h (v4hi, v4hi)
25665     v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
25666     v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
25667     v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
25668     v2si __builtin_arm_wcmpeqw (v2si, v2si)
25669     v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
25670     v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
25671     v2si __builtin_arm_wcmpgtsw (v2si, v2si)
25672     v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
25673     v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
25674     v2si __builtin_arm_wcmpgtuw (v2si, v2si)
25675     long long __builtin_arm_wmacs (long long, v4hi, v4hi)
25676     long long __builtin_arm_wmacsz (v4hi, v4hi)
25677     long long __builtin_arm_wmacu (long long, v4hi, v4hi)
25678     long long __builtin_arm_wmacuz (v4hi, v4hi)
25679     v4hi __builtin_arm_wmadds (v4hi, v4hi)
25680     v4hi __builtin_arm_wmaddu (v4hi, v4hi)
25681     v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
25682     v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
25683     v2si __builtin_arm_wmaxsw (v2si, v2si)
25684     v8qi __builtin_arm_wmaxub (v8qi, v8qi)
25685     v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
25686     v2si __builtin_arm_wmaxuw (v2si, v2si)
25687     v8qi __builtin_arm_wminsb (v8qi, v8qi)
25688     v4hi __builtin_arm_wminsh (v4hi, v4hi)
25689     v2si __builtin_arm_wminsw (v2si, v2si)
25690     v8qi __builtin_arm_wminub (v8qi, v8qi)
25691     v4hi __builtin_arm_wminuh (v4hi, v4hi)
25692     v2si __builtin_arm_wminuw (v2si, v2si)
25693     v4hi __builtin_arm_wmulsm (v4hi, v4hi)
25694     v4hi __builtin_arm_wmulul (v4hi, v4hi)
25695     v4hi __builtin_arm_wmulum (v4hi, v4hi)
25696     long long __builtin_arm_wor (long long, long long)
25697     v2si __builtin_arm_wpackdss (long long, long long)
25698     v2si __builtin_arm_wpackdus (long long, long long)
25699     v8qi __builtin_arm_wpackhss (v4hi, v4hi)
25700     v8qi __builtin_arm_wpackhus (v4hi, v4hi)
25701     v4hi __builtin_arm_wpackwss (v2si, v2si)
25702     v4hi __builtin_arm_wpackwus (v2si, v2si)
25703     long long __builtin_arm_wrord (long long, long long)
25704     long long __builtin_arm_wrordi (long long, int)
25705     v4hi __builtin_arm_wrorh (v4hi, long long)
25706     v4hi __builtin_arm_wrorhi (v4hi, int)
25707     v2si __builtin_arm_wrorw (v2si, long long)
25708     v2si __builtin_arm_wrorwi (v2si, int)
25709     v2si __builtin_arm_wsadb (v8qi, v8qi)
25710     v2si __builtin_arm_wsadbz (v8qi, v8qi)
25711     v2si __builtin_arm_wsadh (v4hi, v4hi)
25712     v2si __builtin_arm_wsadhz (v4hi, v4hi)
25713     v4hi __builtin_arm_wshufh (v4hi, int)
25714     long long __builtin_arm_wslld (long long, long long)
25715     long long __builtin_arm_wslldi (long long, int)
25716     v4hi __builtin_arm_wsllh (v4hi, long long)
25717     v4hi __builtin_arm_wsllhi (v4hi, int)
25718     v2si __builtin_arm_wsllw (v2si, long long)
25719     v2si __builtin_arm_wsllwi (v2si, int)
25720     long long __builtin_arm_wsrad (long long, long long)
25721     long long __builtin_arm_wsradi (long long, int)
25722     v4hi __builtin_arm_wsrah (v4hi, long long)
25723     v4hi __builtin_arm_wsrahi (v4hi, int)
25724     v2si __builtin_arm_wsraw (v2si, long long)
25725     v2si __builtin_arm_wsrawi (v2si, int)
25726     long long __builtin_arm_wsrld (long long, long long)
25727     long long __builtin_arm_wsrldi (long long, int)
25728     v4hi __builtin_arm_wsrlh (v4hi, long long)
25729     v4hi __builtin_arm_wsrlhi (v4hi, int)
25730     v2si __builtin_arm_wsrlw (v2si, long long)
25731     v2si __builtin_arm_wsrlwi (v2si, int)
25732     v8qi __builtin_arm_wsubb (v8qi, v8qi)
25733     v8qi __builtin_arm_wsubbss (v8qi, v8qi)
25734     v8qi __builtin_arm_wsubbus (v8qi, v8qi)
25735     v4hi __builtin_arm_wsubh (v4hi, v4hi)
25736     v4hi __builtin_arm_wsubhss (v4hi, v4hi)
25737     v4hi __builtin_arm_wsubhus (v4hi, v4hi)
25738     v2si __builtin_arm_wsubw (v2si, v2si)
25739     v2si __builtin_arm_wsubwss (v2si, v2si)
25740     v2si __builtin_arm_wsubwus (v2si, v2si)
25741     v4hi __builtin_arm_wunpckehsb (v8qi)
25742     v2si __builtin_arm_wunpckehsh (v4hi)
25743     long long __builtin_arm_wunpckehsw (v2si)
25744     v4hi __builtin_arm_wunpckehub (v8qi)
25745     v2si __builtin_arm_wunpckehuh (v4hi)
25746     long long __builtin_arm_wunpckehuw (v2si)
25747     v4hi __builtin_arm_wunpckelsb (v8qi)
25748     v2si __builtin_arm_wunpckelsh (v4hi)
25749     long long __builtin_arm_wunpckelsw (v2si)
25750     v4hi __builtin_arm_wunpckelub (v8qi)
25751     v2si __builtin_arm_wunpckeluh (v4hi)
25752     long long __builtin_arm_wunpckeluw (v2si)
25753     v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
25754     v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
25755     v2si __builtin_arm_wunpckihw (v2si, v2si)
25756     v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
25757     v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
25758     v2si __builtin_arm_wunpckilw (v2si, v2si)
25759     long long __builtin_arm_wxor (long long, long long)
25760     long long __builtin_arm_wzero ()
25761
25762
25763File: gcc.info,  Node: ARM NEON Intrinsics,  Next: Blackfin Built-in Functions,  Prev: ARM iWMMXt Built-in Functions,  Up: Target Builtins
25764
257656.52.3 ARM NEON Intrinsics
25766--------------------------
25767
25768These built-in intrinsics for the ARM Advanced SIMD extension are
25769available when the `-mfpu=neon' switch is used:
25770
257716.52.3.1 Addition
25772.................
25773
25774   * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t)
25775     _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0'
25776
25777   * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t)
25778     _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0'
25779
25780   * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t)
25781     _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0'
25782
25783   * int32x2_t vadd_s32 (int32x2_t, int32x2_t)
25784     _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0'
25785
25786   * int16x4_t vadd_s16 (int16x4_t, int16x4_t)
25787     _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0'
25788
25789   * int8x8_t vadd_s8 (int8x8_t, int8x8_t)
25790     _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0'
25791
25792   * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t)
25793     _Form of expected instruction(s):_ `vadd.i64 D0, D0, D0'
25794
25795   * int64x1_t vadd_s64 (int64x1_t, int64x1_t)
25796     _Form of expected instruction(s):_ `vadd.i64 D0, D0, D0'
25797
25798   * float32x2_t vadd_f32 (float32x2_t, float32x2_t)
25799     _Form of expected instruction(s):_ `vadd.f32 D0, D0, D0'
25800
25801   * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t)
25802     _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0'
25803
25804   * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t)
25805     _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0'
25806
25807   * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t)
25808     _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0'
25809
25810   * int32x4_t vaddq_s32 (int32x4_t, int32x4_t)
25811     _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0'
25812
25813   * int16x8_t vaddq_s16 (int16x8_t, int16x8_t)
25814     _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0'
25815
25816   * int8x16_t vaddq_s8 (int8x16_t, int8x16_t)
25817     _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0'
25818
25819   * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t)
25820     _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0'
25821
25822   * int64x2_t vaddq_s64 (int64x2_t, int64x2_t)
25823     _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0'
25824
25825   * float32x4_t vaddq_f32 (float32x4_t, float32x4_t)
25826     _Form of expected instruction(s):_ `vadd.f32 Q0, Q0, Q0'
25827
25828   * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t)
25829     _Form of expected instruction(s):_ `vaddl.u32 Q0, D0, D0'
25830
25831   * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t)
25832     _Form of expected instruction(s):_ `vaddl.u16 Q0, D0, D0'
25833
25834   * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t)
25835     _Form of expected instruction(s):_ `vaddl.u8 Q0, D0, D0'
25836
25837   * int64x2_t vaddl_s32 (int32x2_t, int32x2_t)
25838     _Form of expected instruction(s):_ `vaddl.s32 Q0, D0, D0'
25839
25840   * int32x4_t vaddl_s16 (int16x4_t, int16x4_t)
25841     _Form of expected instruction(s):_ `vaddl.s16 Q0, D0, D0'
25842
25843   * int16x8_t vaddl_s8 (int8x8_t, int8x8_t)
25844     _Form of expected instruction(s):_ `vaddl.s8 Q0, D0, D0'
25845
25846   * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t)
25847     _Form of expected instruction(s):_ `vaddw.u32 Q0, Q0, D0'
25848
25849   * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t)
25850     _Form of expected instruction(s):_ `vaddw.u16 Q0, Q0, D0'
25851
25852   * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t)
25853     _Form of expected instruction(s):_ `vaddw.u8 Q0, Q0, D0'
25854
25855   * int64x2_t vaddw_s32 (int64x2_t, int32x2_t)
25856     _Form of expected instruction(s):_ `vaddw.s32 Q0, Q0, D0'
25857
25858   * int32x4_t vaddw_s16 (int32x4_t, int16x4_t)
25859     _Form of expected instruction(s):_ `vaddw.s16 Q0, Q0, D0'
25860
25861   * int16x8_t vaddw_s8 (int16x8_t, int8x8_t)
25862     _Form of expected instruction(s):_ `vaddw.s8 Q0, Q0, D0'
25863
25864   * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t)
25865     _Form of expected instruction(s):_ `vhadd.u32 D0, D0, D0'
25866
25867   * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t)
25868     _Form of expected instruction(s):_ `vhadd.u16 D0, D0, D0'
25869
25870   * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t)
25871     _Form of expected instruction(s):_ `vhadd.u8 D0, D0, D0'
25872
25873   * int32x2_t vhadd_s32 (int32x2_t, int32x2_t)
25874     _Form of expected instruction(s):_ `vhadd.s32 D0, D0, D0'
25875
25876   * int16x4_t vhadd_s16 (int16x4_t, int16x4_t)
25877     _Form of expected instruction(s):_ `vhadd.s16 D0, D0, D0'
25878
25879   * int8x8_t vhadd_s8 (int8x8_t, int8x8_t)
25880     _Form of expected instruction(s):_ `vhadd.s8 D0, D0, D0'
25881
25882   * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t)
25883     _Form of expected instruction(s):_ `vhadd.u32 Q0, Q0, Q0'
25884
25885   * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t)
25886     _Form of expected instruction(s):_ `vhadd.u16 Q0, Q0, Q0'
25887
25888   * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t)
25889     _Form of expected instruction(s):_ `vhadd.u8 Q0, Q0, Q0'
25890
25891   * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t)
25892     _Form of expected instruction(s):_ `vhadd.s32 Q0, Q0, Q0'
25893
25894   * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t)
25895     _Form of expected instruction(s):_ `vhadd.s16 Q0, Q0, Q0'
25896
25897   * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t)
25898     _Form of expected instruction(s):_ `vhadd.s8 Q0, Q0, Q0'
25899
25900   * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t)
25901     _Form of expected instruction(s):_ `vrhadd.u32 D0, D0, D0'
25902
25903   * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t)
25904     _Form of expected instruction(s):_ `vrhadd.u16 D0, D0, D0'
25905
25906   * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t)
25907     _Form of expected instruction(s):_ `vrhadd.u8 D0, D0, D0'
25908
25909   * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t)
25910     _Form of expected instruction(s):_ `vrhadd.s32 D0, D0, D0'
25911
25912   * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t)
25913     _Form of expected instruction(s):_ `vrhadd.s16 D0, D0, D0'
25914
25915   * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t)
25916     _Form of expected instruction(s):_ `vrhadd.s8 D0, D0, D0'
25917
25918   * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t)
25919     _Form of expected instruction(s):_ `vrhadd.u32 Q0, Q0, Q0'
25920
25921   * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t)
25922     _Form of expected instruction(s):_ `vrhadd.u16 Q0, Q0, Q0'
25923
25924   * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t)
25925     _Form of expected instruction(s):_ `vrhadd.u8 Q0, Q0, Q0'
25926
25927   * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t)
25928     _Form of expected instruction(s):_ `vrhadd.s32 Q0, Q0, Q0'
25929
25930   * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t)
25931     _Form of expected instruction(s):_ `vrhadd.s16 Q0, Q0, Q0'
25932
25933   * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t)
25934     _Form of expected instruction(s):_ `vrhadd.s8 Q0, Q0, Q0'
25935
25936   * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t)
25937     _Form of expected instruction(s):_ `vqadd.u32 D0, D0, D0'
25938
25939   * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t)
25940     _Form of expected instruction(s):_ `vqadd.u16 D0, D0, D0'
25941
25942   * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t)
25943     _Form of expected instruction(s):_ `vqadd.u8 D0, D0, D0'
25944
25945   * int32x2_t vqadd_s32 (int32x2_t, int32x2_t)
25946     _Form of expected instruction(s):_ `vqadd.s32 D0, D0, D0'
25947
25948   * int16x4_t vqadd_s16 (int16x4_t, int16x4_t)
25949     _Form of expected instruction(s):_ `vqadd.s16 D0, D0, D0'
25950
25951   * int8x8_t vqadd_s8 (int8x8_t, int8x8_t)
25952     _Form of expected instruction(s):_ `vqadd.s8 D0, D0, D0'
25953
25954   * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t)
25955     _Form of expected instruction(s):_ `vqadd.u64 D0, D0, D0'
25956
25957   * int64x1_t vqadd_s64 (int64x1_t, int64x1_t)
25958     _Form of expected instruction(s):_ `vqadd.s64 D0, D0, D0'
25959
25960   * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t)
25961     _Form of expected instruction(s):_ `vqadd.u32 Q0, Q0, Q0'
25962
25963   * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t)
25964     _Form of expected instruction(s):_ `vqadd.u16 Q0, Q0, Q0'
25965
25966   * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t)
25967     _Form of expected instruction(s):_ `vqadd.u8 Q0, Q0, Q0'
25968
25969   * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t)
25970     _Form of expected instruction(s):_ `vqadd.s32 Q0, Q0, Q0'
25971
25972   * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t)
25973     _Form of expected instruction(s):_ `vqadd.s16 Q0, Q0, Q0'
25974
25975   * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t)
25976     _Form of expected instruction(s):_ `vqadd.s8 Q0, Q0, Q0'
25977
25978   * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t)
25979     _Form of expected instruction(s):_ `vqadd.u64 Q0, Q0, Q0'
25980
25981   * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t)
25982     _Form of expected instruction(s):_ `vqadd.s64 Q0, Q0, Q0'
25983
25984   * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t)
25985     _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0'
25986
25987   * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t)
25988     _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0'
25989
25990   * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t)
25991     _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0'
25992
25993   * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t)
25994     _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0'
25995
25996   * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t)
25997     _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0'
25998
25999   * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t)
26000     _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0'
26001
26002   * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t)
26003     _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0'
26004
26005   * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t)
26006     _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0'
26007
26008   * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t)
26009     _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0'
26010
26011   * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t)
26012     _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0'
26013
26014   * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t)
26015     _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0'
26016
26017   * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t)
26018     _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0'
26019
260206.52.3.2 Multiplication
26021.......................
26022
26023   * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t)
26024     _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0'
26025
26026   * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t)
26027     _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0'
26028
26029   * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t)
26030     _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0'
26031
26032   * int32x2_t vmul_s32 (int32x2_t, int32x2_t)
26033     _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0'
26034
26035   * int16x4_t vmul_s16 (int16x4_t, int16x4_t)
26036     _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0'
26037
26038   * int8x8_t vmul_s8 (int8x8_t, int8x8_t)
26039     _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0'
26040
26041   * float32x2_t vmul_f32 (float32x2_t, float32x2_t)
26042     _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0'
26043
26044   * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t)
26045     _Form of expected instruction(s):_ `vmul.p8 D0, D0, D0'
26046
26047   * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t)
26048     _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0'
26049
26050   * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t)
26051     _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0'
26052
26053   * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t)
26054     _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0'
26055
26056   * int32x4_t vmulq_s32 (int32x4_t, int32x4_t)
26057     _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0'
26058
26059   * int16x8_t vmulq_s16 (int16x8_t, int16x8_t)
26060     _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0'
26061
26062   * int8x16_t vmulq_s8 (int8x16_t, int8x16_t)
26063     _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0'
26064
26065   * float32x4_t vmulq_f32 (float32x4_t, float32x4_t)
26066     _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, Q0'
26067
26068   * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t)
26069     _Form of expected instruction(s):_ `vmul.p8 Q0, Q0, Q0'
26070
26071   * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t)
26072     _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0'
26073
26074   * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t)
26075     _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0'
26076
26077   * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t)
26078     _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, Q0'
26079
26080   * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t)
26081     _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, Q0'
26082
26083   * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t)
26084     _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0'
26085
26086   * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t)
26087     _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0'
26088
26089   * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t)
26090     _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, Q0'
26091
26092   * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t)
26093     _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, Q0'
26094
26095   * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t)
26096     _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0'
26097
26098   * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t)
26099     _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0'
26100
26101   * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t)
26102     _Form of expected instruction(s):_ `vmull.u8 Q0, D0, D0'
26103
26104   * int64x2_t vmull_s32 (int32x2_t, int32x2_t)
26105     _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0'
26106
26107   * int32x4_t vmull_s16 (int16x4_t, int16x4_t)
26108     _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0'
26109
26110   * int16x8_t vmull_s8 (int8x8_t, int8x8_t)
26111     _Form of expected instruction(s):_ `vmull.s8 Q0, D0, D0'
26112
26113   * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t)
26114     _Form of expected instruction(s):_ `vmull.p8 Q0, D0, D0'
26115
26116   * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t)
26117     _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0'
26118
26119   * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t)
26120     _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0'
26121
261226.52.3.3 Multiply-accumulate
26123............................
26124
26125   * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
26126     _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0'
26127
26128   * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
26129     _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0'
26130
26131   * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
26132     _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0'
26133
26134   * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t)
26135     _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0'
26136
26137   * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t)
26138     _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0'
26139
26140   * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t)
26141     _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0'
26142
26143   * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t)
26144     _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0'
26145
26146   * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
26147     _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0'
26148
26149   * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
26150     _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0'
26151
26152   * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
26153     _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0'
26154
26155   * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t)
26156     _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0'
26157
26158   * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t)
26159     _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0'
26160
26161   * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t)
26162     _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0'
26163
26164   * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t)
26165     _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, Q0'
26166
26167   * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
26168     _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0'
26169
26170   * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
26171     _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0'
26172
26173   * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
26174     _Form of expected instruction(s):_ `vmlal.u8 Q0, D0, D0'
26175
26176   * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
26177     _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0'
26178
26179   * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
26180     _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0'
26181
26182   * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t)
26183     _Form of expected instruction(s):_ `vmlal.s8 Q0, D0, D0'
26184
26185   * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
26186     _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0'
26187
26188   * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
26189     _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0'
26190
261916.52.3.4 Multiply-subtract
26192..........................
26193
26194   * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
26195     _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0'
26196
26197   * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
26198     _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0'
26199
26200   * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
26201     _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0'
26202
26203   * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t)
26204     _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0'
26205
26206   * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t)
26207     _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0'
26208
26209   * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t)
26210     _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0'
26211
26212   * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t)
26213     _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0'
26214
26215   * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
26216     _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0'
26217
26218   * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
26219     _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0'
26220
26221   * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
26222     _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0'
26223
26224   * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t)
26225     _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0'
26226
26227   * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t)
26228     _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0'
26229
26230   * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t)
26231     _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0'
26232
26233   * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t)
26234     _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, Q0'
26235
26236   * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
26237     _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0'
26238
26239   * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
26240     _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0'
26241
26242   * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
26243     _Form of expected instruction(s):_ `vmlsl.u8 Q0, D0, D0'
26244
26245   * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
26246     _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0'
26247
26248   * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
26249     _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0'
26250
26251   * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t)
26252     _Form of expected instruction(s):_ `vmlsl.s8 Q0, D0, D0'
26253
26254   * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
26255     _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0'
26256
26257   * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
26258     _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0'
26259
262606.52.3.5 Subtraction
26261....................
26262
26263   * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t)
26264     _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0'
26265
26266   * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t)
26267     _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0'
26268
26269   * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t)
26270     _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0'
26271
26272   * int32x2_t vsub_s32 (int32x2_t, int32x2_t)
26273     _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0'
26274
26275   * int16x4_t vsub_s16 (int16x4_t, int16x4_t)
26276     _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0'
26277
26278   * int8x8_t vsub_s8 (int8x8_t, int8x8_t)
26279     _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0'
26280
26281   * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t)
26282     _Form of expected instruction(s):_ `vsub.i64 D0, D0, D0'
26283
26284   * int64x1_t vsub_s64 (int64x1_t, int64x1_t)
26285     _Form of expected instruction(s):_ `vsub.i64 D0, D0, D0'
26286
26287   * float32x2_t vsub_f32 (float32x2_t, float32x2_t)
26288     _Form of expected instruction(s):_ `vsub.f32 D0, D0, D0'
26289
26290   * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t)
26291     _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0'
26292
26293   * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t)
26294     _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0'
26295
26296   * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t)
26297     _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0'
26298
26299   * int32x4_t vsubq_s32 (int32x4_t, int32x4_t)
26300     _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0'
26301
26302   * int16x8_t vsubq_s16 (int16x8_t, int16x8_t)
26303     _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0'
26304
26305   * int8x16_t vsubq_s8 (int8x16_t, int8x16_t)
26306     _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0'
26307
26308   * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t)
26309     _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0'
26310
26311   * int64x2_t vsubq_s64 (int64x2_t, int64x2_t)
26312     _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0'
26313
26314   * float32x4_t vsubq_f32 (float32x4_t, float32x4_t)
26315     _Form of expected instruction(s):_ `vsub.f32 Q0, Q0, Q0'
26316
26317   * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t)
26318     _Form of expected instruction(s):_ `vsubl.u32 Q0, D0, D0'
26319
26320   * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t)
26321     _Form of expected instruction(s):_ `vsubl.u16 Q0, D0, D0'
26322
26323   * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t)
26324     _Form of expected instruction(s):_ `vsubl.u8 Q0, D0, D0'
26325
26326   * int64x2_t vsubl_s32 (int32x2_t, int32x2_t)
26327     _Form of expected instruction(s):_ `vsubl.s32 Q0, D0, D0'
26328
26329   * int32x4_t vsubl_s16 (int16x4_t, int16x4_t)
26330     _Form of expected instruction(s):_ `vsubl.s16 Q0, D0, D0'
26331
26332   * int16x8_t vsubl_s8 (int8x8_t, int8x8_t)
26333     _Form of expected instruction(s):_ `vsubl.s8 Q0, D0, D0'
26334
26335   * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t)
26336     _Form of expected instruction(s):_ `vsubw.u32 Q0, Q0, D0'
26337
26338   * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t)
26339     _Form of expected instruction(s):_ `vsubw.u16 Q0, Q0, D0'
26340
26341   * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t)
26342     _Form of expected instruction(s):_ `vsubw.u8 Q0, Q0, D0'
26343
26344   * int64x2_t vsubw_s32 (int64x2_t, int32x2_t)
26345     _Form of expected instruction(s):_ `vsubw.s32 Q0, Q0, D0'
26346
26347   * int32x4_t vsubw_s16 (int32x4_t, int16x4_t)
26348     _Form of expected instruction(s):_ `vsubw.s16 Q0, Q0, D0'
26349
26350   * int16x8_t vsubw_s8 (int16x8_t, int8x8_t)
26351     _Form of expected instruction(s):_ `vsubw.s8 Q0, Q0, D0'
26352
26353   * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t)
26354     _Form of expected instruction(s):_ `vhsub.u32 D0, D0, D0'
26355
26356   * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t)
26357     _Form of expected instruction(s):_ `vhsub.u16 D0, D0, D0'
26358
26359   * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t)
26360     _Form of expected instruction(s):_ `vhsub.u8 D0, D0, D0'
26361
26362   * int32x2_t vhsub_s32 (int32x2_t, int32x2_t)
26363     _Form of expected instruction(s):_ `vhsub.s32 D0, D0, D0'
26364
26365   * int16x4_t vhsub_s16 (int16x4_t, int16x4_t)
26366     _Form of expected instruction(s):_ `vhsub.s16 D0, D0, D0'
26367
26368   * int8x8_t vhsub_s8 (int8x8_t, int8x8_t)
26369     _Form of expected instruction(s):_ `vhsub.s8 D0, D0, D0'
26370
26371   * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t)
26372     _Form of expected instruction(s):_ `vhsub.u32 Q0, Q0, Q0'
26373
26374   * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t)
26375     _Form of expected instruction(s):_ `vhsub.u16 Q0, Q0, Q0'
26376
26377   * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t)
26378     _Form of expected instruction(s):_ `vhsub.u8 Q0, Q0, Q0'
26379
26380   * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t)
26381     _Form of expected instruction(s):_ `vhsub.s32 Q0, Q0, Q0'
26382
26383   * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t)
26384     _Form of expected instruction(s):_ `vhsub.s16 Q0, Q0, Q0'
26385
26386   * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t)
26387     _Form of expected instruction(s):_ `vhsub.s8 Q0, Q0, Q0'
26388
26389   * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t)
26390     _Form of expected instruction(s):_ `vqsub.u32 D0, D0, D0'
26391
26392   * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t)
26393     _Form of expected instruction(s):_ `vqsub.u16 D0, D0, D0'
26394
26395   * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t)
26396     _Form of expected instruction(s):_ `vqsub.u8 D0, D0, D0'
26397
26398   * int32x2_t vqsub_s32 (int32x2_t, int32x2_t)
26399     _Form of expected instruction(s):_ `vqsub.s32 D0, D0, D0'
26400
26401   * int16x4_t vqsub_s16 (int16x4_t, int16x4_t)
26402     _Form of expected instruction(s):_ `vqsub.s16 D0, D0, D0'
26403
26404   * int8x8_t vqsub_s8 (int8x8_t, int8x8_t)
26405     _Form of expected instruction(s):_ `vqsub.s8 D0, D0, D0'
26406
26407   * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t)
26408     _Form of expected instruction(s):_ `vqsub.u64 D0, D0, D0'
26409
26410   * int64x1_t vqsub_s64 (int64x1_t, int64x1_t)
26411     _Form of expected instruction(s):_ `vqsub.s64 D0, D0, D0'
26412
26413   * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t)
26414     _Form of expected instruction(s):_ `vqsub.u32 Q0, Q0, Q0'
26415
26416   * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t)
26417     _Form of expected instruction(s):_ `vqsub.u16 Q0, Q0, Q0'
26418
26419   * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t)
26420     _Form of expected instruction(s):_ `vqsub.u8 Q0, Q0, Q0'
26421
26422   * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t)
26423     _Form of expected instruction(s):_ `vqsub.s32 Q0, Q0, Q0'
26424
26425   * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t)
26426     _Form of expected instruction(s):_ `vqsub.s16 Q0, Q0, Q0'
26427
26428   * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t)
26429     _Form of expected instruction(s):_ `vqsub.s8 Q0, Q0, Q0'
26430
26431   * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t)
26432     _Form of expected instruction(s):_ `vqsub.u64 Q0, Q0, Q0'
26433
26434   * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t)
26435     _Form of expected instruction(s):_ `vqsub.s64 Q0, Q0, Q0'
26436
26437   * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t)
26438     _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0'
26439
26440   * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t)
26441     _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0'
26442
26443   * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t)
26444     _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0'
26445
26446   * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t)
26447     _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0'
26448
26449   * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t)
26450     _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0'
26451
26452   * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t)
26453     _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0'
26454
26455   * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t)
26456     _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0'
26457
26458   * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t)
26459     _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0'
26460
26461   * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t)
26462     _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0'
26463
26464   * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t)
26465     _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0'
26466
26467   * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t)
26468     _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0'
26469
26470   * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t)
26471     _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0'
26472
264736.52.3.6 Comparison (equal-to)
26474..............................
26475
26476   * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t)
26477     _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0'
26478
26479   * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t)
26480     _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0'
26481
26482   * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t)
26483     _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
26484
26485   * uint32x2_t vceq_s32 (int32x2_t, int32x2_t)
26486     _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0'
26487
26488   * uint16x4_t vceq_s16 (int16x4_t, int16x4_t)
26489     _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0'
26490
26491   * uint8x8_t vceq_s8 (int8x8_t, int8x8_t)
26492     _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
26493
26494   * uint32x2_t vceq_f32 (float32x2_t, float32x2_t)
26495     _Form of expected instruction(s):_ `vceq.f32 D0, D0, D0'
26496
26497   * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t)
26498     _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
26499
26500   * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t)
26501     _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0'
26502
26503   * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t)
26504     _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0'
26505
26506   * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t)
26507     _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
26508
26509   * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t)
26510     _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0'
26511
26512   * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t)
26513     _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0'
26514
26515   * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t)
26516     _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
26517
26518   * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t)
26519     _Form of expected instruction(s):_ `vceq.f32 Q0, Q0, Q0'
26520
26521   * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t)
26522     _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
26523
265246.52.3.7 Comparison (greater-than-or-equal-to)
26525..............................................
26526
26527   * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t)
26528     _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0'
26529
26530   * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t)
26531     _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0'
26532
26533   * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t)
26534     _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0'
26535
26536   * uint32x2_t vcge_s32 (int32x2_t, int32x2_t)
26537     _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0'
26538
26539   * uint16x4_t vcge_s16 (int16x4_t, int16x4_t)
26540     _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0'
26541
26542   * uint8x8_t vcge_s8 (int8x8_t, int8x8_t)
26543     _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0'
26544
26545   * uint32x2_t vcge_f32 (float32x2_t, float32x2_t)
26546     _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0'
26547
26548   * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t)
26549     _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0'
26550
26551   * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t)
26552     _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0'
26553
26554   * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t)
26555     _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0'
26556
26557   * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t)
26558     _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0'
26559
26560   * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t)
26561     _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0'
26562
26563   * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t)
26564     _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0'
26565
26566   * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t)
26567     _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0'
26568
265696.52.3.8 Comparison (less-than-or-equal-to)
26570...........................................
26571
26572   * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t)
26573     _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0'
26574
26575   * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t)
26576     _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0'
26577
26578   * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t)
26579     _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0'
26580
26581   * uint32x2_t vcle_s32 (int32x2_t, int32x2_t)
26582     _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0'
26583
26584   * uint16x4_t vcle_s16 (int16x4_t, int16x4_t)
26585     _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0'
26586
26587   * uint8x8_t vcle_s8 (int8x8_t, int8x8_t)
26588     _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0'
26589
26590   * uint32x2_t vcle_f32 (float32x2_t, float32x2_t)
26591     _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0'
26592
26593   * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t)
26594     _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0'
26595
26596   * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t)
26597     _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0'
26598
26599   * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t)
26600     _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0'
26601
26602   * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t)
26603     _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0'
26604
26605   * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t)
26606     _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0'
26607
26608   * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t)
26609     _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0'
26610
26611   * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t)
26612     _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0'
26613
266146.52.3.9 Comparison (greater-than)
26615..................................
26616
26617   * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t)
26618     _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0'
26619
26620   * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t)
26621     _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0'
26622
26623   * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t)
26624     _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0'
26625
26626   * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t)
26627     _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0'
26628
26629   * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t)
26630     _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0'
26631
26632   * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t)
26633     _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0'
26634
26635   * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t)
26636     _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0'
26637
26638   * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t)
26639     _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0'
26640
26641   * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t)
26642     _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0'
26643
26644   * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t)
26645     _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0'
26646
26647   * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t)
26648     _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0'
26649
26650   * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t)
26651     _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0'
26652
26653   * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t)
26654     _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0'
26655
26656   * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t)
26657     _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0'
26658
266596.52.3.10 Comparison (less-than)
26660................................
26661
26662   * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t)
26663     _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0'
26664
26665   * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t)
26666     _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0'
26667
26668   * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t)
26669     _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0'
26670
26671   * uint32x2_t vclt_s32 (int32x2_t, int32x2_t)
26672     _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0'
26673
26674   * uint16x4_t vclt_s16 (int16x4_t, int16x4_t)
26675     _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0'
26676
26677   * uint8x8_t vclt_s8 (int8x8_t, int8x8_t)
26678     _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0'
26679
26680   * uint32x2_t vclt_f32 (float32x2_t, float32x2_t)
26681     _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0'
26682
26683   * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t)
26684     _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0'
26685
26686   * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t)
26687     _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0'
26688
26689   * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t)
26690     _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0'
26691
26692   * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t)
26693     _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0'
26694
26695   * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t)
26696     _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0'
26697
26698   * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t)
26699     _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0'
26700
26701   * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t)
26702     _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0'
26703
267046.52.3.11 Comparison (absolute greater-than-or-equal-to)
26705........................................................
26706
26707   * uint32x2_t vcage_f32 (float32x2_t, float32x2_t)
26708     _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0'
26709
26710   * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t)
26711     _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0'
26712
267136.52.3.12 Comparison (absolute less-than-or-equal-to)
26714.....................................................
26715
26716   * uint32x2_t vcale_f32 (float32x2_t, float32x2_t)
26717     _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0'
26718
26719   * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t)
26720     _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0'
26721
267226.52.3.13 Comparison (absolute greater-than)
26723............................................
26724
26725   * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t)
26726     _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0'
26727
26728   * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t)
26729     _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0'
26730
267316.52.3.14 Comparison (absolute less-than)
26732.........................................
26733
26734   * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t)
26735     _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0'
26736
26737   * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t)
26738     _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0'
26739
267406.52.3.15 Test bits
26741...................
26742
26743   * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t)
26744     _Form of expected instruction(s):_ `vtst.32 D0, D0, D0'
26745
26746   * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t)
26747     _Form of expected instruction(s):_ `vtst.16 D0, D0, D0'
26748
26749   * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t)
26750     _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
26751
26752   * uint32x2_t vtst_s32 (int32x2_t, int32x2_t)
26753     _Form of expected instruction(s):_ `vtst.32 D0, D0, D0'
26754
26755   * uint16x4_t vtst_s16 (int16x4_t, int16x4_t)
26756     _Form of expected instruction(s):_ `vtst.16 D0, D0, D0'
26757
26758   * uint8x8_t vtst_s8 (int8x8_t, int8x8_t)
26759     _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
26760
26761   * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t)
26762     _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
26763
26764   * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t)
26765     _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0'
26766
26767   * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t)
26768     _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0'
26769
26770   * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t)
26771     _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
26772
26773   * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t)
26774     _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0'
26775
26776   * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t)
26777     _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0'
26778
26779   * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t)
26780     _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
26781
26782   * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t)
26783     _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
26784
267856.52.3.16 Absolute difference
26786.............................
26787
26788   * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t)
26789     _Form of expected instruction(s):_ `vabd.u32 D0, D0, D0'
26790
26791   * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t)
26792     _Form of expected instruction(s):_ `vabd.u16 D0, D0, D0'
26793
26794   * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t)
26795     _Form of expected instruction(s):_ `vabd.u8 D0, D0, D0'
26796
26797   * int32x2_t vabd_s32 (int32x2_t, int32x2_t)
26798     _Form of expected instruction(s):_ `vabd.s32 D0, D0, D0'
26799
26800   * int16x4_t vabd_s16 (int16x4_t, int16x4_t)
26801     _Form of expected instruction(s):_ `vabd.s16 D0, D0, D0'
26802
26803   * int8x8_t vabd_s8 (int8x8_t, int8x8_t)
26804     _Form of expected instruction(s):_ `vabd.s8 D0, D0, D0'
26805
26806   * float32x2_t vabd_f32 (float32x2_t, float32x2_t)
26807     _Form of expected instruction(s):_ `vabd.f32 D0, D0, D0'
26808
26809   * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t)
26810     _Form of expected instruction(s):_ `vabd.u32 Q0, Q0, Q0'
26811
26812   * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t)
26813     _Form of expected instruction(s):_ `vabd.u16 Q0, Q0, Q0'
26814
26815   * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t)
26816     _Form of expected instruction(s):_ `vabd.u8 Q0, Q0, Q0'
26817
26818   * int32x4_t vabdq_s32 (int32x4_t, int32x4_t)
26819     _Form of expected instruction(s):_ `vabd.s32 Q0, Q0, Q0'
26820
26821   * int16x8_t vabdq_s16 (int16x8_t, int16x8_t)
26822     _Form of expected instruction(s):_ `vabd.s16 Q0, Q0, Q0'
26823
26824   * int8x16_t vabdq_s8 (int8x16_t, int8x16_t)
26825     _Form of expected instruction(s):_ `vabd.s8 Q0, Q0, Q0'
26826
26827   * float32x4_t vabdq_f32 (float32x4_t, float32x4_t)
26828     _Form of expected instruction(s):_ `vabd.f32 Q0, Q0, Q0'
26829
26830   * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t)
26831     _Form of expected instruction(s):_ `vabdl.u32 Q0, D0, D0'
26832
26833   * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t)
26834     _Form of expected instruction(s):_ `vabdl.u16 Q0, D0, D0'
26835
26836   * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t)
26837     _Form of expected instruction(s):_ `vabdl.u8 Q0, D0, D0'
26838
26839   * int64x2_t vabdl_s32 (int32x2_t, int32x2_t)
26840     _Form of expected instruction(s):_ `vabdl.s32 Q0, D0, D0'
26841
26842   * int32x4_t vabdl_s16 (int16x4_t, int16x4_t)
26843     _Form of expected instruction(s):_ `vabdl.s16 Q0, D0, D0'
26844
26845   * int16x8_t vabdl_s8 (int8x8_t, int8x8_t)
26846     _Form of expected instruction(s):_ `vabdl.s8 Q0, D0, D0'
26847
268486.52.3.17 Absolute difference and accumulate
26849............................................
26850
26851   * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
26852     _Form of expected instruction(s):_ `vaba.u32 D0, D0, D0'
26853
26854   * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
26855     _Form of expected instruction(s):_ `vaba.u16 D0, D0, D0'
26856
26857   * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
26858     _Form of expected instruction(s):_ `vaba.u8 D0, D0, D0'
26859
26860   * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t)
26861     _Form of expected instruction(s):_ `vaba.s32 D0, D0, D0'
26862
26863   * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t)
26864     _Form of expected instruction(s):_ `vaba.s16 D0, D0, D0'
26865
26866   * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t)
26867     _Form of expected instruction(s):_ `vaba.s8 D0, D0, D0'
26868
26869   * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
26870     _Form of expected instruction(s):_ `vaba.u32 Q0, Q0, Q0'
26871
26872   * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
26873     _Form of expected instruction(s):_ `vaba.u16 Q0, Q0, Q0'
26874
26875   * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
26876     _Form of expected instruction(s):_ `vaba.u8 Q0, Q0, Q0'
26877
26878   * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t)
26879     _Form of expected instruction(s):_ `vaba.s32 Q0, Q0, Q0'
26880
26881   * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t)
26882     _Form of expected instruction(s):_ `vaba.s16 Q0, Q0, Q0'
26883
26884   * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t)
26885     _Form of expected instruction(s):_ `vaba.s8 Q0, Q0, Q0'
26886
26887   * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
26888     _Form of expected instruction(s):_ `vabal.u32 Q0, D0, D0'
26889
26890   * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
26891     _Form of expected instruction(s):_ `vabal.u16 Q0, D0, D0'
26892
26893   * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
26894     _Form of expected instruction(s):_ `vabal.u8 Q0, D0, D0'
26895
26896   * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t)
26897     _Form of expected instruction(s):_ `vabal.s32 Q0, D0, D0'
26898
26899   * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t)
26900     _Form of expected instruction(s):_ `vabal.s16 Q0, D0, D0'
26901
26902   * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t)
26903     _Form of expected instruction(s):_ `vabal.s8 Q0, D0, D0'
26904
269056.52.3.18 Maximum
26906.................
26907
26908   * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t)
26909     _Form of expected instruction(s):_ `vmax.u32 D0, D0, D0'
26910
26911   * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t)
26912     _Form of expected instruction(s):_ `vmax.u16 D0, D0, D0'
26913
26914   * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t)
26915     _Form of expected instruction(s):_ `vmax.u8 D0, D0, D0'
26916
26917   * int32x2_t vmax_s32 (int32x2_t, int32x2_t)
26918     _Form of expected instruction(s):_ `vmax.s32 D0, D0, D0'
26919
26920   * int16x4_t vmax_s16 (int16x4_t, int16x4_t)
26921     _Form of expected instruction(s):_ `vmax.s16 D0, D0, D0'
26922
26923   * int8x8_t vmax_s8 (int8x8_t, int8x8_t)
26924     _Form of expected instruction(s):_ `vmax.s8 D0, D0, D0'
26925
26926   * float32x2_t vmax_f32 (float32x2_t, float32x2_t)
26927     _Form of expected instruction(s):_ `vmax.f32 D0, D0, D0'
26928
26929   * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t)
26930     _Form of expected instruction(s):_ `vmax.u32 Q0, Q0, Q0'
26931
26932   * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t)
26933     _Form of expected instruction(s):_ `vmax.u16 Q0, Q0, Q0'
26934
26935   * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t)
26936     _Form of expected instruction(s):_ `vmax.u8 Q0, Q0, Q0'
26937
26938   * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t)
26939     _Form of expected instruction(s):_ `vmax.s32 Q0, Q0, Q0'
26940
26941   * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t)
26942     _Form of expected instruction(s):_ `vmax.s16 Q0, Q0, Q0'
26943
26944   * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t)
26945     _Form of expected instruction(s):_ `vmax.s8 Q0, Q0, Q0'
26946
26947   * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t)
26948     _Form of expected instruction(s):_ `vmax.f32 Q0, Q0, Q0'
26949
269506.52.3.19 Minimum
26951.................
26952
26953   * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t)
26954     _Form of expected instruction(s):_ `vmin.u32 D0, D0, D0'
26955
26956   * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t)
26957     _Form of expected instruction(s):_ `vmin.u16 D0, D0, D0'
26958
26959   * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t)
26960     _Form of expected instruction(s):_ `vmin.u8 D0, D0, D0'
26961
26962   * int32x2_t vmin_s32 (int32x2_t, int32x2_t)
26963     _Form of expected instruction(s):_ `vmin.s32 D0, D0, D0'
26964
26965   * int16x4_t vmin_s16 (int16x4_t, int16x4_t)
26966     _Form of expected instruction(s):_ `vmin.s16 D0, D0, D0'
26967
26968   * int8x8_t vmin_s8 (int8x8_t, int8x8_t)
26969     _Form of expected instruction(s):_ `vmin.s8 D0, D0, D0'
26970
26971   * float32x2_t vmin_f32 (float32x2_t, float32x2_t)
26972     _Form of expected instruction(s):_ `vmin.f32 D0, D0, D0'
26973
26974   * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t)
26975     _Form of expected instruction(s):_ `vmin.u32 Q0, Q0, Q0'
26976
26977   * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t)
26978     _Form of expected instruction(s):_ `vmin.u16 Q0, Q0, Q0'
26979
26980   * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t)
26981     _Form of expected instruction(s):_ `vmin.u8 Q0, Q0, Q0'
26982
26983   * int32x4_t vminq_s32 (int32x4_t, int32x4_t)
26984     _Form of expected instruction(s):_ `vmin.s32 Q0, Q0, Q0'
26985
26986   * int16x8_t vminq_s16 (int16x8_t, int16x8_t)
26987     _Form of expected instruction(s):_ `vmin.s16 Q0, Q0, Q0'
26988
26989   * int8x16_t vminq_s8 (int8x16_t, int8x16_t)
26990     _Form of expected instruction(s):_ `vmin.s8 Q0, Q0, Q0'
26991
26992   * float32x4_t vminq_f32 (float32x4_t, float32x4_t)
26993     _Form of expected instruction(s):_ `vmin.f32 Q0, Q0, Q0'
26994
269956.52.3.20 Pairwise add
26996......................
26997
26998   * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t)
26999     _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0'
27000
27001   * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t)
27002     _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0'
27003
27004   * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t)
27005     _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0'
27006
27007   * int32x2_t vpadd_s32 (int32x2_t, int32x2_t)
27008     _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0'
27009
27010   * int16x4_t vpadd_s16 (int16x4_t, int16x4_t)
27011     _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0'
27012
27013   * int8x8_t vpadd_s8 (int8x8_t, int8x8_t)
27014     _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0'
27015
27016   * float32x2_t vpadd_f32 (float32x2_t, float32x2_t)
27017     _Form of expected instruction(s):_ `vpadd.f32 D0, D0, D0'
27018
27019   * uint64x1_t vpaddl_u32 (uint32x2_t)
27020     _Form of expected instruction(s):_ `vpaddl.u32 D0, D0'
27021
27022   * uint32x2_t vpaddl_u16 (uint16x4_t)
27023     _Form of expected instruction(s):_ `vpaddl.u16 D0, D0'
27024
27025   * uint16x4_t vpaddl_u8 (uint8x8_t)
27026     _Form of expected instruction(s):_ `vpaddl.u8 D0, D0'
27027
27028   * int64x1_t vpaddl_s32 (int32x2_t)
27029     _Form of expected instruction(s):_ `vpaddl.s32 D0, D0'
27030
27031   * int32x2_t vpaddl_s16 (int16x4_t)
27032     _Form of expected instruction(s):_ `vpaddl.s16 D0, D0'
27033
27034   * int16x4_t vpaddl_s8 (int8x8_t)
27035     _Form of expected instruction(s):_ `vpaddl.s8 D0, D0'
27036
27037   * uint64x2_t vpaddlq_u32 (uint32x4_t)
27038     _Form of expected instruction(s):_ `vpaddl.u32 Q0, Q0'
27039
27040   * uint32x4_t vpaddlq_u16 (uint16x8_t)
27041     _Form of expected instruction(s):_ `vpaddl.u16 Q0, Q0'
27042
27043   * uint16x8_t vpaddlq_u8 (uint8x16_t)
27044     _Form of expected instruction(s):_ `vpaddl.u8 Q0, Q0'
27045
27046   * int64x2_t vpaddlq_s32 (int32x4_t)
27047     _Form of expected instruction(s):_ `vpaddl.s32 Q0, Q0'
27048
27049   * int32x4_t vpaddlq_s16 (int16x8_t)
27050     _Form of expected instruction(s):_ `vpaddl.s16 Q0, Q0'
27051
27052   * int16x8_t vpaddlq_s8 (int8x16_t)
27053     _Form of expected instruction(s):_ `vpaddl.s8 Q0, Q0'
27054
270556.52.3.21 Pairwise add, single_opcode widen and accumulate
27056..........................................................
27057
27058   * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t)
27059     _Form of expected instruction(s):_ `vpadal.u32 D0, D0'
27060
27061   * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t)
27062     _Form of expected instruction(s):_ `vpadal.u16 D0, D0'
27063
27064   * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t)
27065     _Form of expected instruction(s):_ `vpadal.u8 D0, D0'
27066
27067   * int64x1_t vpadal_s32 (int64x1_t, int32x2_t)
27068     _Form of expected instruction(s):_ `vpadal.s32 D0, D0'
27069
27070   * int32x2_t vpadal_s16 (int32x2_t, int16x4_t)
27071     _Form of expected instruction(s):_ `vpadal.s16 D0, D0'
27072
27073   * int16x4_t vpadal_s8 (int16x4_t, int8x8_t)
27074     _Form of expected instruction(s):_ `vpadal.s8 D0, D0'
27075
27076   * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t)
27077     _Form of expected instruction(s):_ `vpadal.u32 Q0, Q0'
27078
27079   * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t)
27080     _Form of expected instruction(s):_ `vpadal.u16 Q0, Q0'
27081
27082   * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t)
27083     _Form of expected instruction(s):_ `vpadal.u8 Q0, Q0'
27084
27085   * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t)
27086     _Form of expected instruction(s):_ `vpadal.s32 Q0, Q0'
27087
27088   * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t)
27089     _Form of expected instruction(s):_ `vpadal.s16 Q0, Q0'
27090
27091   * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t)
27092     _Form of expected instruction(s):_ `vpadal.s8 Q0, Q0'
27093
270946.52.3.22 Folding maximum
27095.........................
27096
27097   * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t)
27098     _Form of expected instruction(s):_ `vpmax.u32 D0, D0, D0'
27099
27100   * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t)
27101     _Form of expected instruction(s):_ `vpmax.u16 D0, D0, D0'
27102
27103   * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t)
27104     _Form of expected instruction(s):_ `vpmax.u8 D0, D0, D0'
27105
27106   * int32x2_t vpmax_s32 (int32x2_t, int32x2_t)
27107     _Form of expected instruction(s):_ `vpmax.s32 D0, D0, D0'
27108
27109   * int16x4_t vpmax_s16 (int16x4_t, int16x4_t)
27110     _Form of expected instruction(s):_ `vpmax.s16 D0, D0, D0'
27111
27112   * int8x8_t vpmax_s8 (int8x8_t, int8x8_t)
27113     _Form of expected instruction(s):_ `vpmax.s8 D0, D0, D0'
27114
27115   * float32x2_t vpmax_f32 (float32x2_t, float32x2_t)
27116     _Form of expected instruction(s):_ `vpmax.f32 D0, D0, D0'
27117
271186.52.3.23 Folding minimum
27119.........................
27120
27121   * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t)
27122     _Form of expected instruction(s):_ `vpmin.u32 D0, D0, D0'
27123
27124   * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t)
27125     _Form of expected instruction(s):_ `vpmin.u16 D0, D0, D0'
27126
27127   * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t)
27128     _Form of expected instruction(s):_ `vpmin.u8 D0, D0, D0'
27129
27130   * int32x2_t vpmin_s32 (int32x2_t, int32x2_t)
27131     _Form of expected instruction(s):_ `vpmin.s32 D0, D0, D0'
27132
27133   * int16x4_t vpmin_s16 (int16x4_t, int16x4_t)
27134     _Form of expected instruction(s):_ `vpmin.s16 D0, D0, D0'
27135
27136   * int8x8_t vpmin_s8 (int8x8_t, int8x8_t)
27137     _Form of expected instruction(s):_ `vpmin.s8 D0, D0, D0'
27138
27139   * float32x2_t vpmin_f32 (float32x2_t, float32x2_t)
27140     _Form of expected instruction(s):_ `vpmin.f32 D0, D0, D0'
27141
271426.52.3.24 Reciprocal step
27143.........................
27144
27145   * float32x2_t vrecps_f32 (float32x2_t, float32x2_t)
27146     _Form of expected instruction(s):_ `vrecps.f32 D0, D0, D0'
27147
27148   * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t)
27149     _Form of expected instruction(s):_ `vrecps.f32 Q0, Q0, Q0'
27150
27151   * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t)
27152     _Form of expected instruction(s):_ `vrsqrts.f32 D0, D0, D0'
27153
27154   * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t)
27155     _Form of expected instruction(s):_ `vrsqrts.f32 Q0, Q0, Q0'
27156
271576.52.3.25 Vector shift left
27158...........................
27159
27160   * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t)
27161     _Form of expected instruction(s):_ `vshl.u32 D0, D0, D0'
27162
27163   * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t)
27164     _Form of expected instruction(s):_ `vshl.u16 D0, D0, D0'
27165
27166   * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t)
27167     _Form of expected instruction(s):_ `vshl.u8 D0, D0, D0'
27168
27169   * int32x2_t vshl_s32 (int32x2_t, int32x2_t)
27170     _Form of expected instruction(s):_ `vshl.s32 D0, D0, D0'
27171
27172   * int16x4_t vshl_s16 (int16x4_t, int16x4_t)
27173     _Form of expected instruction(s):_ `vshl.s16 D0, D0, D0'
27174
27175   * int8x8_t vshl_s8 (int8x8_t, int8x8_t)
27176     _Form of expected instruction(s):_ `vshl.s8 D0, D0, D0'
27177
27178   * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t)
27179     _Form of expected instruction(s):_ `vshl.u64 D0, D0, D0'
27180
27181   * int64x1_t vshl_s64 (int64x1_t, int64x1_t)
27182     _Form of expected instruction(s):_ `vshl.s64 D0, D0, D0'
27183
27184   * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t)
27185     _Form of expected instruction(s):_ `vshl.u32 Q0, Q0, Q0'
27186
27187   * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t)
27188     _Form of expected instruction(s):_ `vshl.u16 Q0, Q0, Q0'
27189
27190   * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t)
27191     _Form of expected instruction(s):_ `vshl.u8 Q0, Q0, Q0'
27192
27193   * int32x4_t vshlq_s32 (int32x4_t, int32x4_t)
27194     _Form of expected instruction(s):_ `vshl.s32 Q0, Q0, Q0'
27195
27196   * int16x8_t vshlq_s16 (int16x8_t, int16x8_t)
27197     _Form of expected instruction(s):_ `vshl.s16 Q0, Q0, Q0'
27198
27199   * int8x16_t vshlq_s8 (int8x16_t, int8x16_t)
27200     _Form of expected instruction(s):_ `vshl.s8 Q0, Q0, Q0'
27201
27202   * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t)
27203     _Form of expected instruction(s):_ `vshl.u64 Q0, Q0, Q0'
27204
27205   * int64x2_t vshlq_s64 (int64x2_t, int64x2_t)
27206     _Form of expected instruction(s):_ `vshl.s64 Q0, Q0, Q0'
27207
27208   * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t)
27209     _Form of expected instruction(s):_ `vrshl.u32 D0, D0, D0'
27210
27211   * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t)
27212     _Form of expected instruction(s):_ `vrshl.u16 D0, D0, D0'
27213
27214   * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t)
27215     _Form of expected instruction(s):_ `vrshl.u8 D0, D0, D0'
27216
27217   * int32x2_t vrshl_s32 (int32x2_t, int32x2_t)
27218     _Form of expected instruction(s):_ `vrshl.s32 D0, D0, D0'
27219
27220   * int16x4_t vrshl_s16 (int16x4_t, int16x4_t)
27221     _Form of expected instruction(s):_ `vrshl.s16 D0, D0, D0'
27222
27223   * int8x8_t vrshl_s8 (int8x8_t, int8x8_t)
27224     _Form of expected instruction(s):_ `vrshl.s8 D0, D0, D0'
27225
27226   * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t)
27227     _Form of expected instruction(s):_ `vrshl.u64 D0, D0, D0'
27228
27229   * int64x1_t vrshl_s64 (int64x1_t, int64x1_t)
27230     _Form of expected instruction(s):_ `vrshl.s64 D0, D0, D0'
27231
27232   * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t)
27233     _Form of expected instruction(s):_ `vrshl.u32 Q0, Q0, Q0'
27234
27235   * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t)
27236     _Form of expected instruction(s):_ `vrshl.u16 Q0, Q0, Q0'
27237
27238   * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t)
27239     _Form of expected instruction(s):_ `vrshl.u8 Q0, Q0, Q0'
27240
27241   * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t)
27242     _Form of expected instruction(s):_ `vrshl.s32 Q0, Q0, Q0'
27243
27244   * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t)
27245     _Form of expected instruction(s):_ `vrshl.s16 Q0, Q0, Q0'
27246
27247   * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t)
27248     _Form of expected instruction(s):_ `vrshl.s8 Q0, Q0, Q0'
27249
27250   * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t)
27251     _Form of expected instruction(s):_ `vrshl.u64 Q0, Q0, Q0'
27252
27253   * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t)
27254     _Form of expected instruction(s):_ `vrshl.s64 Q0, Q0, Q0'
27255
27256   * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t)
27257     _Form of expected instruction(s):_ `vqshl.u32 D0, D0, D0'
27258
27259   * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t)
27260     _Form of expected instruction(s):_ `vqshl.u16 D0, D0, D0'
27261
27262   * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t)
27263     _Form of expected instruction(s):_ `vqshl.u8 D0, D0, D0'
27264
27265   * int32x2_t vqshl_s32 (int32x2_t, int32x2_t)
27266     _Form of expected instruction(s):_ `vqshl.s32 D0, D0, D0'
27267
27268   * int16x4_t vqshl_s16 (int16x4_t, int16x4_t)
27269     _Form of expected instruction(s):_ `vqshl.s16 D0, D0, D0'
27270
27271   * int8x8_t vqshl_s8 (int8x8_t, int8x8_t)
27272     _Form of expected instruction(s):_ `vqshl.s8 D0, D0, D0'
27273
27274   * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t)
27275     _Form of expected instruction(s):_ `vqshl.u64 D0, D0, D0'
27276
27277   * int64x1_t vqshl_s64 (int64x1_t, int64x1_t)
27278     _Form of expected instruction(s):_ `vqshl.s64 D0, D0, D0'
27279
27280   * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t)
27281     _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, Q0'
27282
27283   * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t)
27284     _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, Q0'
27285
27286   * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t)
27287     _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, Q0'
27288
27289   * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t)
27290     _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, Q0'
27291
27292   * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t)
27293     _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, Q0'
27294
27295   * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t)
27296     _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, Q0'
27297
27298   * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t)
27299     _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, Q0'
27300
27301   * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t)
27302     _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, Q0'
27303
27304   * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t)
27305     _Form of expected instruction(s):_ `vqrshl.u32 D0, D0, D0'
27306
27307   * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t)
27308     _Form of expected instruction(s):_ `vqrshl.u16 D0, D0, D0'
27309
27310   * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t)
27311     _Form of expected instruction(s):_ `vqrshl.u8 D0, D0, D0'
27312
27313   * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t)
27314     _Form of expected instruction(s):_ `vqrshl.s32 D0, D0, D0'
27315
27316   * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t)
27317     _Form of expected instruction(s):_ `vqrshl.s16 D0, D0, D0'
27318
27319   * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t)
27320     _Form of expected instruction(s):_ `vqrshl.s8 D0, D0, D0'
27321
27322   * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t)
27323     _Form of expected instruction(s):_ `vqrshl.u64 D0, D0, D0'
27324
27325   * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t)
27326     _Form of expected instruction(s):_ `vqrshl.s64 D0, D0, D0'
27327
27328   * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t)
27329     _Form of expected instruction(s):_ `vqrshl.u32 Q0, Q0, Q0'
27330
27331   * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t)
27332     _Form of expected instruction(s):_ `vqrshl.u16 Q0, Q0, Q0'
27333
27334   * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t)
27335     _Form of expected instruction(s):_ `vqrshl.u8 Q0, Q0, Q0'
27336
27337   * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t)
27338     _Form of expected instruction(s):_ `vqrshl.s32 Q0, Q0, Q0'
27339
27340   * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t)
27341     _Form of expected instruction(s):_ `vqrshl.s16 Q0, Q0, Q0'
27342
27343   * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t)
27344     _Form of expected instruction(s):_ `vqrshl.s8 Q0, Q0, Q0'
27345
27346   * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t)
27347     _Form of expected instruction(s):_ `vqrshl.u64 Q0, Q0, Q0'
27348
27349   * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t)
27350     _Form of expected instruction(s):_ `vqrshl.s64 Q0, Q0, Q0'
27351
273526.52.3.26 Vector shift left by constant
27353.......................................
27354
27355   * uint32x2_t vshl_n_u32 (uint32x2_t, const int)
27356     _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0'
27357
27358   * uint16x4_t vshl_n_u16 (uint16x4_t, const int)
27359     _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0'
27360
27361   * uint8x8_t vshl_n_u8 (uint8x8_t, const int)
27362     _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0'
27363
27364   * int32x2_t vshl_n_s32 (int32x2_t, const int)
27365     _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0'
27366
27367   * int16x4_t vshl_n_s16 (int16x4_t, const int)
27368     _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0'
27369
27370   * int8x8_t vshl_n_s8 (int8x8_t, const int)
27371     _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0'
27372
27373   * uint64x1_t vshl_n_u64 (uint64x1_t, const int)
27374     _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0'
27375
27376   * int64x1_t vshl_n_s64 (int64x1_t, const int)
27377     _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0'
27378
27379   * uint32x4_t vshlq_n_u32 (uint32x4_t, const int)
27380     _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0'
27381
27382   * uint16x8_t vshlq_n_u16 (uint16x8_t, const int)
27383     _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0'
27384
27385   * uint8x16_t vshlq_n_u8 (uint8x16_t, const int)
27386     _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0'
27387
27388   * int32x4_t vshlq_n_s32 (int32x4_t, const int)
27389     _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0'
27390
27391   * int16x8_t vshlq_n_s16 (int16x8_t, const int)
27392     _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0'
27393
27394   * int8x16_t vshlq_n_s8 (int8x16_t, const int)
27395     _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0'
27396
27397   * uint64x2_t vshlq_n_u64 (uint64x2_t, const int)
27398     _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0'
27399
27400   * int64x2_t vshlq_n_s64 (int64x2_t, const int)
27401     _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0'
27402
27403   * uint32x2_t vqshl_n_u32 (uint32x2_t, const int)
27404     _Form of expected instruction(s):_ `vqshl.u32 D0, D0, #0'
27405
27406   * uint16x4_t vqshl_n_u16 (uint16x4_t, const int)
27407     _Form of expected instruction(s):_ `vqshl.u16 D0, D0, #0'
27408
27409   * uint8x8_t vqshl_n_u8 (uint8x8_t, const int)
27410     _Form of expected instruction(s):_ `vqshl.u8 D0, D0, #0'
27411
27412   * int32x2_t vqshl_n_s32 (int32x2_t, const int)
27413     _Form of expected instruction(s):_ `vqshl.s32 D0, D0, #0'
27414
27415   * int16x4_t vqshl_n_s16 (int16x4_t, const int)
27416     _Form of expected instruction(s):_ `vqshl.s16 D0, D0, #0'
27417
27418   * int8x8_t vqshl_n_s8 (int8x8_t, const int)
27419     _Form of expected instruction(s):_ `vqshl.s8 D0, D0, #0'
27420
27421   * uint64x1_t vqshl_n_u64 (uint64x1_t, const int)
27422     _Form of expected instruction(s):_ `vqshl.u64 D0, D0, #0'
27423
27424   * int64x1_t vqshl_n_s64 (int64x1_t, const int)
27425     _Form of expected instruction(s):_ `vqshl.s64 D0, D0, #0'
27426
27427   * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int)
27428     _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, #0'
27429
27430   * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int)
27431     _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, #0'
27432
27433   * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int)
27434     _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, #0'
27435
27436   * int32x4_t vqshlq_n_s32 (int32x4_t, const int)
27437     _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, #0'
27438
27439   * int16x8_t vqshlq_n_s16 (int16x8_t, const int)
27440     _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, #0'
27441
27442   * int8x16_t vqshlq_n_s8 (int8x16_t, const int)
27443     _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, #0'
27444
27445   * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int)
27446     _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, #0'
27447
27448   * int64x2_t vqshlq_n_s64 (int64x2_t, const int)
27449     _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, #0'
27450
27451   * uint64x1_t vqshlu_n_s64 (int64x1_t, const int)
27452     _Form of expected instruction(s):_ `vqshlu.s64 D0, D0, #0'
27453
27454   * uint32x2_t vqshlu_n_s32 (int32x2_t, const int)
27455     _Form of expected instruction(s):_ `vqshlu.s32 D0, D0, #0'
27456
27457   * uint16x4_t vqshlu_n_s16 (int16x4_t, const int)
27458     _Form of expected instruction(s):_ `vqshlu.s16 D0, D0, #0'
27459
27460   * uint8x8_t vqshlu_n_s8 (int8x8_t, const int)
27461     _Form of expected instruction(s):_ `vqshlu.s8 D0, D0, #0'
27462
27463   * uint64x2_t vqshluq_n_s64 (int64x2_t, const int)
27464     _Form of expected instruction(s):_ `vqshlu.s64 Q0, Q0, #0'
27465
27466   * uint32x4_t vqshluq_n_s32 (int32x4_t, const int)
27467     _Form of expected instruction(s):_ `vqshlu.s32 Q0, Q0, #0'
27468
27469   * uint16x8_t vqshluq_n_s16 (int16x8_t, const int)
27470     _Form of expected instruction(s):_ `vqshlu.s16 Q0, Q0, #0'
27471
27472   * uint8x16_t vqshluq_n_s8 (int8x16_t, const int)
27473     _Form of expected instruction(s):_ `vqshlu.s8 Q0, Q0, #0'
27474
27475   * uint64x2_t vshll_n_u32 (uint32x2_t, const int)
27476     _Form of expected instruction(s):_ `vshll.u32 Q0, D0, #0'
27477
27478   * uint32x4_t vshll_n_u16 (uint16x4_t, const int)
27479     _Form of expected instruction(s):_ `vshll.u16 Q0, D0, #0'
27480
27481   * uint16x8_t vshll_n_u8 (uint8x8_t, const int)
27482     _Form of expected instruction(s):_ `vshll.u8 Q0, D0, #0'
27483
27484   * int64x2_t vshll_n_s32 (int32x2_t, const int)
27485     _Form of expected instruction(s):_ `vshll.s32 Q0, D0, #0'
27486
27487   * int32x4_t vshll_n_s16 (int16x4_t, const int)
27488     _Form of expected instruction(s):_ `vshll.s16 Q0, D0, #0'
27489
27490   * int16x8_t vshll_n_s8 (int8x8_t, const int)
27491     _Form of expected instruction(s):_ `vshll.s8 Q0, D0, #0'
27492
274936.52.3.27 Vector shift right by constant
27494........................................
27495
27496   * uint32x2_t vshr_n_u32 (uint32x2_t, const int)
27497     _Form of expected instruction(s):_ `vshr.u32 D0, D0, #0'
27498
27499   * uint16x4_t vshr_n_u16 (uint16x4_t, const int)
27500     _Form of expected instruction(s):_ `vshr.u16 D0, D0, #0'
27501
27502   * uint8x8_t vshr_n_u8 (uint8x8_t, const int)
27503     _Form of expected instruction(s):_ `vshr.u8 D0, D0, #0'
27504
27505   * int32x2_t vshr_n_s32 (int32x2_t, const int)
27506     _Form of expected instruction(s):_ `vshr.s32 D0, D0, #0'
27507
27508   * int16x4_t vshr_n_s16 (int16x4_t, const int)
27509     _Form of expected instruction(s):_ `vshr.s16 D0, D0, #0'
27510
27511   * int8x8_t vshr_n_s8 (int8x8_t, const int)
27512     _Form of expected instruction(s):_ `vshr.s8 D0, D0, #0'
27513
27514   * uint64x1_t vshr_n_u64 (uint64x1_t, const int)
27515     _Form of expected instruction(s):_ `vshr.u64 D0, D0, #0'
27516
27517   * int64x1_t vshr_n_s64 (int64x1_t, const int)
27518     _Form of expected instruction(s):_ `vshr.s64 D0, D0, #0'
27519
27520   * uint32x4_t vshrq_n_u32 (uint32x4_t, const int)
27521     _Form of expected instruction(s):_ `vshr.u32 Q0, Q0, #0'
27522
27523   * uint16x8_t vshrq_n_u16 (uint16x8_t, const int)
27524     _Form of expected instruction(s):_ `vshr.u16 Q0, Q0, #0'
27525
27526   * uint8x16_t vshrq_n_u8 (uint8x16_t, const int)
27527     _Form of expected instruction(s):_ `vshr.u8 Q0, Q0, #0'
27528
27529   * int32x4_t vshrq_n_s32 (int32x4_t, const int)
27530     _Form of expected instruction(s):_ `vshr.s32 Q0, Q0, #0'
27531
27532   * int16x8_t vshrq_n_s16 (int16x8_t, const int)
27533     _Form of expected instruction(s):_ `vshr.s16 Q0, Q0, #0'
27534
27535   * int8x16_t vshrq_n_s8 (int8x16_t, const int)
27536     _Form of expected instruction(s):_ `vshr.s8 Q0, Q0, #0'
27537
27538   * uint64x2_t vshrq_n_u64 (uint64x2_t, const int)
27539     _Form of expected instruction(s):_ `vshr.u64 Q0, Q0, #0'
27540
27541   * int64x2_t vshrq_n_s64 (int64x2_t, const int)
27542     _Form of expected instruction(s):_ `vshr.s64 Q0, Q0, #0'
27543
27544   * uint32x2_t vrshr_n_u32 (uint32x2_t, const int)
27545     _Form of expected instruction(s):_ `vrshr.u32 D0, D0, #0'
27546
27547   * uint16x4_t vrshr_n_u16 (uint16x4_t, const int)
27548     _Form of expected instruction(s):_ `vrshr.u16 D0, D0, #0'
27549
27550   * uint8x8_t vrshr_n_u8 (uint8x8_t, const int)
27551     _Form of expected instruction(s):_ `vrshr.u8 D0, D0, #0'
27552
27553   * int32x2_t vrshr_n_s32 (int32x2_t, const int)
27554     _Form of expected instruction(s):_ `vrshr.s32 D0, D0, #0'
27555
27556   * int16x4_t vrshr_n_s16 (int16x4_t, const int)
27557     _Form of expected instruction(s):_ `vrshr.s16 D0, D0, #0'
27558
27559   * int8x8_t vrshr_n_s8 (int8x8_t, const int)
27560     _Form of expected instruction(s):_ `vrshr.s8 D0, D0, #0'
27561
27562   * uint64x1_t vrshr_n_u64 (uint64x1_t, const int)
27563     _Form of expected instruction(s):_ `vrshr.u64 D0, D0, #0'
27564
27565   * int64x1_t vrshr_n_s64 (int64x1_t, const int)
27566     _Form of expected instruction(s):_ `vrshr.s64 D0, D0, #0'
27567
27568   * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int)
27569     _Form of expected instruction(s):_ `vrshr.u32 Q0, Q0, #0'
27570
27571   * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int)
27572     _Form of expected instruction(s):_ `vrshr.u16 Q0, Q0, #0'
27573
27574   * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int)
27575     _Form of expected instruction(s):_ `vrshr.u8 Q0, Q0, #0'
27576
27577   * int32x4_t vrshrq_n_s32 (int32x4_t, const int)
27578     _Form of expected instruction(s):_ `vrshr.s32 Q0, Q0, #0'
27579
27580   * int16x8_t vrshrq_n_s16 (int16x8_t, const int)
27581     _Form of expected instruction(s):_ `vrshr.s16 Q0, Q0, #0'
27582
27583   * int8x16_t vrshrq_n_s8 (int8x16_t, const int)
27584     _Form of expected instruction(s):_ `vrshr.s8 Q0, Q0, #0'
27585
27586   * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int)
27587     _Form of expected instruction(s):_ `vrshr.u64 Q0, Q0, #0'
27588
27589   * int64x2_t vrshrq_n_s64 (int64x2_t, const int)
27590     _Form of expected instruction(s):_ `vrshr.s64 Q0, Q0, #0'
27591
27592   * uint32x2_t vshrn_n_u64 (uint64x2_t, const int)
27593     _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0'
27594
27595   * uint16x4_t vshrn_n_u32 (uint32x4_t, const int)
27596     _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0'
27597
27598   * uint8x8_t vshrn_n_u16 (uint16x8_t, const int)
27599     _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0'
27600
27601   * int32x2_t vshrn_n_s64 (int64x2_t, const int)
27602     _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0'
27603
27604   * int16x4_t vshrn_n_s32 (int32x4_t, const int)
27605     _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0'
27606
27607   * int8x8_t vshrn_n_s16 (int16x8_t, const int)
27608     _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0'
27609
27610   * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int)
27611     _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0'
27612
27613   * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int)
27614     _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0'
27615
27616   * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int)
27617     _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0'
27618
27619   * int32x2_t vrshrn_n_s64 (int64x2_t, const int)
27620     _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0'
27621
27622   * int16x4_t vrshrn_n_s32 (int32x4_t, const int)
27623     _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0'
27624
27625   * int8x8_t vrshrn_n_s16 (int16x8_t, const int)
27626     _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0'
27627
27628   * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int)
27629     _Form of expected instruction(s):_ `vqshrn.u64 D0, Q0, #0'
27630
27631   * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int)
27632     _Form of expected instruction(s):_ `vqshrn.u32 D0, Q0, #0'
27633
27634   * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int)
27635     _Form of expected instruction(s):_ `vqshrn.u16 D0, Q0, #0'
27636
27637   * int32x2_t vqshrn_n_s64 (int64x2_t, const int)
27638     _Form of expected instruction(s):_ `vqshrn.s64 D0, Q0, #0'
27639
27640   * int16x4_t vqshrn_n_s32 (int32x4_t, const int)
27641     _Form of expected instruction(s):_ `vqshrn.s32 D0, Q0, #0'
27642
27643   * int8x8_t vqshrn_n_s16 (int16x8_t, const int)
27644     _Form of expected instruction(s):_ `vqshrn.s16 D0, Q0, #0'
27645
27646   * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int)
27647     _Form of expected instruction(s):_ `vqrshrn.u64 D0, Q0, #0'
27648
27649   * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int)
27650     _Form of expected instruction(s):_ `vqrshrn.u32 D0, Q0, #0'
27651
27652   * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int)
27653     _Form of expected instruction(s):_ `vqrshrn.u16 D0, Q0, #0'
27654
27655   * int32x2_t vqrshrn_n_s64 (int64x2_t, const int)
27656     _Form of expected instruction(s):_ `vqrshrn.s64 D0, Q0, #0'
27657
27658   * int16x4_t vqrshrn_n_s32 (int32x4_t, const int)
27659     _Form of expected instruction(s):_ `vqrshrn.s32 D0, Q0, #0'
27660
27661   * int8x8_t vqrshrn_n_s16 (int16x8_t, const int)
27662     _Form of expected instruction(s):_ `vqrshrn.s16 D0, Q0, #0'
27663
27664   * uint32x2_t vqshrun_n_s64 (int64x2_t, const int)
27665     _Form of expected instruction(s):_ `vqshrun.s64 D0, Q0, #0'
27666
27667   * uint16x4_t vqshrun_n_s32 (int32x4_t, const int)
27668     _Form of expected instruction(s):_ `vqshrun.s32 D0, Q0, #0'
27669
27670   * uint8x8_t vqshrun_n_s16 (int16x8_t, const int)
27671     _Form of expected instruction(s):_ `vqshrun.s16 D0, Q0, #0'
27672
27673   * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int)
27674     _Form of expected instruction(s):_ `vqrshrun.s64 D0, Q0, #0'
27675
27676   * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int)
27677     _Form of expected instruction(s):_ `vqrshrun.s32 D0, Q0, #0'
27678
27679   * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int)
27680     _Form of expected instruction(s):_ `vqrshrun.s16 D0, Q0, #0'
27681
276826.52.3.28 Vector shift right by constant and accumulate
27683.......................................................
27684
27685   * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int)
27686     _Form of expected instruction(s):_ `vsra.u32 D0, D0, #0'
27687
27688   * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int)
27689     _Form of expected instruction(s):_ `vsra.u16 D0, D0, #0'
27690
27691   * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int)
27692     _Form of expected instruction(s):_ `vsra.u8 D0, D0, #0'
27693
27694   * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int)
27695     _Form of expected instruction(s):_ `vsra.s32 D0, D0, #0'
27696
27697   * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int)
27698     _Form of expected instruction(s):_ `vsra.s16 D0, D0, #0'
27699
27700   * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int)
27701     _Form of expected instruction(s):_ `vsra.s8 D0, D0, #0'
27702
27703   * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int)
27704     _Form of expected instruction(s):_ `vsra.u64 D0, D0, #0'
27705
27706   * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int)
27707     _Form of expected instruction(s):_ `vsra.s64 D0, D0, #0'
27708
27709   * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
27710     _Form of expected instruction(s):_ `vsra.u32 Q0, Q0, #0'
27711
27712   * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
27713     _Form of expected instruction(s):_ `vsra.u16 Q0, Q0, #0'
27714
27715   * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
27716     _Form of expected instruction(s):_ `vsra.u8 Q0, Q0, #0'
27717
27718   * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int)
27719     _Form of expected instruction(s):_ `vsra.s32 Q0, Q0, #0'
27720
27721   * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int)
27722     _Form of expected instruction(s):_ `vsra.s16 Q0, Q0, #0'
27723
27724   * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int)
27725     _Form of expected instruction(s):_ `vsra.s8 Q0, Q0, #0'
27726
27727   * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
27728     _Form of expected instruction(s):_ `vsra.u64 Q0, Q0, #0'
27729
27730   * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int)
27731     _Form of expected instruction(s):_ `vsra.s64 Q0, Q0, #0'
27732
27733   * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int)
27734     _Form of expected instruction(s):_ `vrsra.u32 D0, D0, #0'
27735
27736   * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int)
27737     _Form of expected instruction(s):_ `vrsra.u16 D0, D0, #0'
27738
27739   * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int)
27740     _Form of expected instruction(s):_ `vrsra.u8 D0, D0, #0'
27741
27742   * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int)
27743     _Form of expected instruction(s):_ `vrsra.s32 D0, D0, #0'
27744
27745   * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int)
27746     _Form of expected instruction(s):_ `vrsra.s16 D0, D0, #0'
27747
27748   * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int)
27749     _Form of expected instruction(s):_ `vrsra.s8 D0, D0, #0'
27750
27751   * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int)
27752     _Form of expected instruction(s):_ `vrsra.u64 D0, D0, #0'
27753
27754   * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int)
27755     _Form of expected instruction(s):_ `vrsra.s64 D0, D0, #0'
27756
27757   * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
27758     _Form of expected instruction(s):_ `vrsra.u32 Q0, Q0, #0'
27759
27760   * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
27761     _Form of expected instruction(s):_ `vrsra.u16 Q0, Q0, #0'
27762
27763   * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
27764     _Form of expected instruction(s):_ `vrsra.u8 Q0, Q0, #0'
27765
27766   * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int)
27767     _Form of expected instruction(s):_ `vrsra.s32 Q0, Q0, #0'
27768
27769   * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int)
27770     _Form of expected instruction(s):_ `vrsra.s16 Q0, Q0, #0'
27771
27772   * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int)
27773     _Form of expected instruction(s):_ `vrsra.s8 Q0, Q0, #0'
27774
27775   * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
27776     _Form of expected instruction(s):_ `vrsra.u64 Q0, Q0, #0'
27777
27778   * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int)
27779     _Form of expected instruction(s):_ `vrsra.s64 Q0, Q0, #0'
27780
277816.52.3.29 Vector shift right and insert
27782.......................................
27783
27784   * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int)
27785     _Form of expected instruction(s):_ `vsri.32 D0, D0, #0'
27786
27787   * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int)
27788     _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
27789
27790   * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int)
27791     _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
27792
27793   * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int)
27794     _Form of expected instruction(s):_ `vsri.32 D0, D0, #0'
27795
27796   * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int)
27797     _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
27798
27799   * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int)
27800     _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
27801
27802   * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int)
27803     _Form of expected instruction(s):_ `vsri.64 D0, D0, #0'
27804
27805   * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int)
27806     _Form of expected instruction(s):_ `vsri.64 D0, D0, #0'
27807
27808   * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int)
27809     _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
27810
27811   * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int)
27812     _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
27813
27814   * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int)
27815     _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0'
27816
27817   * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int)
27818     _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
27819
27820   * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int)
27821     _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
27822
27823   * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int)
27824     _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0'
27825
27826   * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int)
27827     _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
27828
27829   * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int)
27830     _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
27831
27832   * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int)
27833     _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0'
27834
27835   * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int)
27836     _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0'
27837
27838   * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int)
27839     _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
27840
27841   * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int)
27842     _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
27843
278446.52.3.30 Vector shift left and insert
27845......................................
27846
27847   * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int)
27848     _Form of expected instruction(s):_ `vsli.32 D0, D0, #0'
27849
27850   * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int)
27851     _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
27852
27853   * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int)
27854     _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
27855
27856   * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int)
27857     _Form of expected instruction(s):_ `vsli.32 D0, D0, #0'
27858
27859   * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int)
27860     _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
27861
27862   * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int)
27863     _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
27864
27865   * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int)
27866     _Form of expected instruction(s):_ `vsli.64 D0, D0, #0'
27867
27868   * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int)
27869     _Form of expected instruction(s):_ `vsli.64 D0, D0, #0'
27870
27871   * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int)
27872     _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
27873
27874   * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int)
27875     _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
27876
27877   * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int)
27878     _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0'
27879
27880   * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int)
27881     _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
27882
27883   * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int)
27884     _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
27885
27886   * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int)
27887     _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0'
27888
27889   * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int)
27890     _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
27891
27892   * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int)
27893     _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
27894
27895   * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int)
27896     _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0'
27897
27898   * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int)
27899     _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0'
27900
27901   * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int)
27902     _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
27903
27904   * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int)
27905     _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
27906
279076.52.3.31 Absolute value
27908........................
27909
27910   * float32x2_t vabs_f32 (float32x2_t)
27911     _Form of expected instruction(s):_ `vabs.f32 D0, D0'
27912
27913   * int32x2_t vabs_s32 (int32x2_t)
27914     _Form of expected instruction(s):_ `vabs.s32 D0, D0'
27915
27916   * int16x4_t vabs_s16 (int16x4_t)
27917     _Form of expected instruction(s):_ `vabs.s16 D0, D0'
27918
27919   * int8x8_t vabs_s8 (int8x8_t)
27920     _Form of expected instruction(s):_ `vabs.s8 D0, D0'
27921
27922   * float32x4_t vabsq_f32 (float32x4_t)
27923     _Form of expected instruction(s):_ `vabs.f32 Q0, Q0'
27924
27925   * int32x4_t vabsq_s32 (int32x4_t)
27926     _Form of expected instruction(s):_ `vabs.s32 Q0, Q0'
27927
27928   * int16x8_t vabsq_s16 (int16x8_t)
27929     _Form of expected instruction(s):_ `vabs.s16 Q0, Q0'
27930
27931   * int8x16_t vabsq_s8 (int8x16_t)
27932     _Form of expected instruction(s):_ `vabs.s8 Q0, Q0'
27933
27934   * int32x2_t vqabs_s32 (int32x2_t)
27935     _Form of expected instruction(s):_ `vqabs.s32 D0, D0'
27936
27937   * int16x4_t vqabs_s16 (int16x4_t)
27938     _Form of expected instruction(s):_ `vqabs.s16 D0, D0'
27939
27940   * int8x8_t vqabs_s8 (int8x8_t)
27941     _Form of expected instruction(s):_ `vqabs.s8 D0, D0'
27942
27943   * int32x4_t vqabsq_s32 (int32x4_t)
27944     _Form of expected instruction(s):_ `vqabs.s32 Q0, Q0'
27945
27946   * int16x8_t vqabsq_s16 (int16x8_t)
27947     _Form of expected instruction(s):_ `vqabs.s16 Q0, Q0'
27948
27949   * int8x16_t vqabsq_s8 (int8x16_t)
27950     _Form of expected instruction(s):_ `vqabs.s8 Q0, Q0'
27951
279526.52.3.32 Negation
27953..................
27954
27955   * float32x2_t vneg_f32 (float32x2_t)
27956     _Form of expected instruction(s):_ `vneg.f32 D0, D0'
27957
27958   * int32x2_t vneg_s32 (int32x2_t)
27959     _Form of expected instruction(s):_ `vneg.s32 D0, D0'
27960
27961   * int16x4_t vneg_s16 (int16x4_t)
27962     _Form of expected instruction(s):_ `vneg.s16 D0, D0'
27963
27964   * int8x8_t vneg_s8 (int8x8_t)
27965     _Form of expected instruction(s):_ `vneg.s8 D0, D0'
27966
27967   * float32x4_t vnegq_f32 (float32x4_t)
27968     _Form of expected instruction(s):_ `vneg.f32 Q0, Q0'
27969
27970   * int32x4_t vnegq_s32 (int32x4_t)
27971     _Form of expected instruction(s):_ `vneg.s32 Q0, Q0'
27972
27973   * int16x8_t vnegq_s16 (int16x8_t)
27974     _Form of expected instruction(s):_ `vneg.s16 Q0, Q0'
27975
27976   * int8x16_t vnegq_s8 (int8x16_t)
27977     _Form of expected instruction(s):_ `vneg.s8 Q0, Q0'
27978
27979   * int32x2_t vqneg_s32 (int32x2_t)
27980     _Form of expected instruction(s):_ `vqneg.s32 D0, D0'
27981
27982   * int16x4_t vqneg_s16 (int16x4_t)
27983     _Form of expected instruction(s):_ `vqneg.s16 D0, D0'
27984
27985   * int8x8_t vqneg_s8 (int8x8_t)
27986     _Form of expected instruction(s):_ `vqneg.s8 D0, D0'
27987
27988   * int32x4_t vqnegq_s32 (int32x4_t)
27989     _Form of expected instruction(s):_ `vqneg.s32 Q0, Q0'
27990
27991   * int16x8_t vqnegq_s16 (int16x8_t)
27992     _Form of expected instruction(s):_ `vqneg.s16 Q0, Q0'
27993
27994   * int8x16_t vqnegq_s8 (int8x16_t)
27995     _Form of expected instruction(s):_ `vqneg.s8 Q0, Q0'
27996
279976.52.3.33 Bitwise not
27998.....................
27999
28000   * uint32x2_t vmvn_u32 (uint32x2_t)
28001     _Form of expected instruction(s):_ `vmvn D0, D0'
28002
28003   * uint16x4_t vmvn_u16 (uint16x4_t)
28004     _Form of expected instruction(s):_ `vmvn D0, D0'
28005
28006   * uint8x8_t vmvn_u8 (uint8x8_t)
28007     _Form of expected instruction(s):_ `vmvn D0, D0'
28008
28009   * int32x2_t vmvn_s32 (int32x2_t)
28010     _Form of expected instruction(s):_ `vmvn D0, D0'
28011
28012   * int16x4_t vmvn_s16 (int16x4_t)
28013     _Form of expected instruction(s):_ `vmvn D0, D0'
28014
28015   * int8x8_t vmvn_s8 (int8x8_t)
28016     _Form of expected instruction(s):_ `vmvn D0, D0'
28017
28018   * poly8x8_t vmvn_p8 (poly8x8_t)
28019     _Form of expected instruction(s):_ `vmvn D0, D0'
28020
28021   * uint32x4_t vmvnq_u32 (uint32x4_t)
28022     _Form of expected instruction(s):_ `vmvn Q0, Q0'
28023
28024   * uint16x8_t vmvnq_u16 (uint16x8_t)
28025     _Form of expected instruction(s):_ `vmvn Q0, Q0'
28026
28027   * uint8x16_t vmvnq_u8 (uint8x16_t)
28028     _Form of expected instruction(s):_ `vmvn Q0, Q0'
28029
28030   * int32x4_t vmvnq_s32 (int32x4_t)
28031     _Form of expected instruction(s):_ `vmvn Q0, Q0'
28032
28033   * int16x8_t vmvnq_s16 (int16x8_t)
28034     _Form of expected instruction(s):_ `vmvn Q0, Q0'
28035
28036   * int8x16_t vmvnq_s8 (int8x16_t)
28037     _Form of expected instruction(s):_ `vmvn Q0, Q0'
28038
28039   * poly8x16_t vmvnq_p8 (poly8x16_t)
28040     _Form of expected instruction(s):_ `vmvn Q0, Q0'
28041
280426.52.3.34 Count leading sign bits
28043.................................
28044
28045   * int32x2_t vcls_s32 (int32x2_t)
28046     _Form of expected instruction(s):_ `vcls.s32 D0, D0'
28047
28048   * int16x4_t vcls_s16 (int16x4_t)
28049     _Form of expected instruction(s):_ `vcls.s16 D0, D0'
28050
28051   * int8x8_t vcls_s8 (int8x8_t)
28052     _Form of expected instruction(s):_ `vcls.s8 D0, D0'
28053
28054   * int32x4_t vclsq_s32 (int32x4_t)
28055     _Form of expected instruction(s):_ `vcls.s32 Q0, Q0'
28056
28057   * int16x8_t vclsq_s16 (int16x8_t)
28058     _Form of expected instruction(s):_ `vcls.s16 Q0, Q0'
28059
28060   * int8x16_t vclsq_s8 (int8x16_t)
28061     _Form of expected instruction(s):_ `vcls.s8 Q0, Q0'
28062
280636.52.3.35 Count leading zeros
28064.............................
28065
28066   * uint32x2_t vclz_u32 (uint32x2_t)
28067     _Form of expected instruction(s):_ `vclz.i32 D0, D0'
28068
28069   * uint16x4_t vclz_u16 (uint16x4_t)
28070     _Form of expected instruction(s):_ `vclz.i16 D0, D0'
28071
28072   * uint8x8_t vclz_u8 (uint8x8_t)
28073     _Form of expected instruction(s):_ `vclz.i8 D0, D0'
28074
28075   * int32x2_t vclz_s32 (int32x2_t)
28076     _Form of expected instruction(s):_ `vclz.i32 D0, D0'
28077
28078   * int16x4_t vclz_s16 (int16x4_t)
28079     _Form of expected instruction(s):_ `vclz.i16 D0, D0'
28080
28081   * int8x8_t vclz_s8 (int8x8_t)
28082     _Form of expected instruction(s):_ `vclz.i8 D0, D0'
28083
28084   * uint32x4_t vclzq_u32 (uint32x4_t)
28085     _Form of expected instruction(s):_ `vclz.i32 Q0, Q0'
28086
28087   * uint16x8_t vclzq_u16 (uint16x8_t)
28088     _Form of expected instruction(s):_ `vclz.i16 Q0, Q0'
28089
28090   * uint8x16_t vclzq_u8 (uint8x16_t)
28091     _Form of expected instruction(s):_ `vclz.i8 Q0, Q0'
28092
28093   * int32x4_t vclzq_s32 (int32x4_t)
28094     _Form of expected instruction(s):_ `vclz.i32 Q0, Q0'
28095
28096   * int16x8_t vclzq_s16 (int16x8_t)
28097     _Form of expected instruction(s):_ `vclz.i16 Q0, Q0'
28098
28099   * int8x16_t vclzq_s8 (int8x16_t)
28100     _Form of expected instruction(s):_ `vclz.i8 Q0, Q0'
28101
281026.52.3.36 Count number of set bits
28103..................................
28104
28105   * uint8x8_t vcnt_u8 (uint8x8_t)
28106     _Form of expected instruction(s):_ `vcnt.8 D0, D0'
28107
28108   * int8x8_t vcnt_s8 (int8x8_t)
28109     _Form of expected instruction(s):_ `vcnt.8 D0, D0'
28110
28111   * poly8x8_t vcnt_p8 (poly8x8_t)
28112     _Form of expected instruction(s):_ `vcnt.8 D0, D0'
28113
28114   * uint8x16_t vcntq_u8 (uint8x16_t)
28115     _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
28116
28117   * int8x16_t vcntq_s8 (int8x16_t)
28118     _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
28119
28120   * poly8x16_t vcntq_p8 (poly8x16_t)
28121     _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
28122
281236.52.3.37 Reciprocal estimate
28124.............................
28125
28126   * float32x2_t vrecpe_f32 (float32x2_t)
28127     _Form of expected instruction(s):_ `vrecpe.f32 D0, D0'
28128
28129   * uint32x2_t vrecpe_u32 (uint32x2_t)
28130     _Form of expected instruction(s):_ `vrecpe.u32 D0, D0'
28131
28132   * float32x4_t vrecpeq_f32 (float32x4_t)
28133     _Form of expected instruction(s):_ `vrecpe.f32 Q0, Q0'
28134
28135   * uint32x4_t vrecpeq_u32 (uint32x4_t)
28136     _Form of expected instruction(s):_ `vrecpe.u32 Q0, Q0'
28137
281386.52.3.38 Reciprocal square-root estimate
28139.........................................
28140
28141   * float32x2_t vrsqrte_f32 (float32x2_t)
28142     _Form of expected instruction(s):_ `vrsqrte.f32 D0, D0'
28143
28144   * uint32x2_t vrsqrte_u32 (uint32x2_t)
28145     _Form of expected instruction(s):_ `vrsqrte.u32 D0, D0'
28146
28147   * float32x4_t vrsqrteq_f32 (float32x4_t)
28148     _Form of expected instruction(s):_ `vrsqrte.f32 Q0, Q0'
28149
28150   * uint32x4_t vrsqrteq_u32 (uint32x4_t)
28151     _Form of expected instruction(s):_ `vrsqrte.u32 Q0, Q0'
28152
281536.52.3.39 Get lanes from a vector
28154.................................
28155
28156   * uint32_t vget_lane_u32 (uint32x2_t, const int)
28157     _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
28158
28159   * uint16_t vget_lane_u16 (uint16x4_t, const int)
28160     _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
28161
28162   * uint8_t vget_lane_u8 (uint8x8_t, const int)
28163     _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
28164
28165   * int32_t vget_lane_s32 (int32x2_t, const int)
28166     _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
28167
28168   * int16_t vget_lane_s16 (int16x4_t, const int)
28169     _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]'
28170
28171   * int8_t vget_lane_s8 (int8x8_t, const int)
28172     _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]'
28173
28174   * float32_t vget_lane_f32 (float32x2_t, const int)
28175     _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
28176
28177   * poly16_t vget_lane_p16 (poly16x4_t, const int)
28178     _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
28179
28180   * poly8_t vget_lane_p8 (poly8x8_t, const int)
28181     _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
28182
28183   * uint64_t vget_lane_u64 (uint64x1_t, const int)
28184     _Form of expected instruction(s):_ `vmov R0, R0, D0'
28185
28186   * int64_t vget_lane_s64 (int64x1_t, const int)
28187     _Form of expected instruction(s):_ `vmov R0, R0, D0'
28188
28189   * uint32_t vgetq_lane_u32 (uint32x4_t, const int)
28190     _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
28191
28192   * uint16_t vgetq_lane_u16 (uint16x8_t, const int)
28193     _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
28194
28195   * uint8_t vgetq_lane_u8 (uint8x16_t, const int)
28196     _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
28197
28198   * int32_t vgetq_lane_s32 (int32x4_t, const int)
28199     _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
28200
28201   * int16_t vgetq_lane_s16 (int16x8_t, const int)
28202     _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]'
28203
28204   * int8_t vgetq_lane_s8 (int8x16_t, const int)
28205     _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]'
28206
28207   * float32_t vgetq_lane_f32 (float32x4_t, const int)
28208     _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
28209
28210   * poly16_t vgetq_lane_p16 (poly16x8_t, const int)
28211     _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
28212
28213   * poly8_t vgetq_lane_p8 (poly8x16_t, const int)
28214     _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
28215
28216   * uint64_t vgetq_lane_u64 (uint64x2_t, const int)
28217     _Form of expected instruction(s):_ `vmov R0, R0, D0'
28218
28219   * int64_t vgetq_lane_s64 (int64x2_t, const int)
28220     _Form of expected instruction(s):_ `vmov R0, R0, D0'
28221
282226.52.3.40 Set lanes in a vector
28223...............................
28224
28225   * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int)
28226     _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
28227
28228   * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int)
28229     _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
28230
28231   * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int)
28232     _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
28233
28234   * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int)
28235     _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
28236
28237   * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int)
28238     _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
28239
28240   * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int)
28241     _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
28242
28243   * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int)
28244     _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
28245
28246   * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int)
28247     _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
28248
28249   * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int)
28250     _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
28251
28252   * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int)
28253     _Form of expected instruction(s):_ `vmov D0, R0, R0'
28254
28255   * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int)
28256     _Form of expected instruction(s):_ `vmov D0, R0, R0'
28257
28258   * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int)
28259     _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
28260
28261   * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int)
28262     _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
28263
28264   * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int)
28265     _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
28266
28267   * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int)
28268     _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
28269
28270   * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int)
28271     _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
28272
28273   * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int)
28274     _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
28275
28276   * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int)
28277     _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
28278
28279   * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int)
28280     _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
28281
28282   * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int)
28283     _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
28284
28285   * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int)
28286     _Form of expected instruction(s):_ `vmov D0, R0, R0'
28287
28288   * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int)
28289     _Form of expected instruction(s):_ `vmov D0, R0, R0'
28290
282916.52.3.41 Create vector from literal bit pattern
28292................................................
28293
28294   * uint32x2_t vcreate_u32 (uint64_t)
28295
28296   * uint16x4_t vcreate_u16 (uint64_t)
28297
28298   * uint8x8_t vcreate_u8 (uint64_t)
28299
28300   * int32x2_t vcreate_s32 (uint64_t)
28301
28302   * int16x4_t vcreate_s16 (uint64_t)
28303
28304   * int8x8_t vcreate_s8 (uint64_t)
28305
28306   * uint64x1_t vcreate_u64 (uint64_t)
28307
28308   * int64x1_t vcreate_s64 (uint64_t)
28309
28310   * float32x2_t vcreate_f32 (uint64_t)
28311
28312   * poly16x4_t vcreate_p16 (uint64_t)
28313
28314   * poly8x8_t vcreate_p8 (uint64_t)
28315
283166.52.3.42 Set all lanes to the same value
28317.........................................
28318
28319   * uint32x2_t vdup_n_u32 (uint32_t)
28320     _Form of expected instruction(s):_ `vdup.32 D0, R0'
28321
28322   * uint16x4_t vdup_n_u16 (uint16_t)
28323     _Form of expected instruction(s):_ `vdup.16 D0, R0'
28324
28325   * uint8x8_t vdup_n_u8 (uint8_t)
28326     _Form of expected instruction(s):_ `vdup.8 D0, R0'
28327
28328   * int32x2_t vdup_n_s32 (int32_t)
28329     _Form of expected instruction(s):_ `vdup.32 D0, R0'
28330
28331   * int16x4_t vdup_n_s16 (int16_t)
28332     _Form of expected instruction(s):_ `vdup.16 D0, R0'
28333
28334   * int8x8_t vdup_n_s8 (int8_t)
28335     _Form of expected instruction(s):_ `vdup.8 D0, R0'
28336
28337   * float32x2_t vdup_n_f32 (float32_t)
28338     _Form of expected instruction(s):_ `vdup.32 D0, R0'
28339
28340   * poly16x4_t vdup_n_p16 (poly16_t)
28341     _Form of expected instruction(s):_ `vdup.16 D0, R0'
28342
28343   * poly8x8_t vdup_n_p8 (poly8_t)
28344     _Form of expected instruction(s):_ `vdup.8 D0, R0'
28345
28346   * uint64x1_t vdup_n_u64 (uint64_t)
28347     _Form of expected instruction(s):_ `vmov D0, R0, R0'
28348
28349   * int64x1_t vdup_n_s64 (int64_t)
28350     _Form of expected instruction(s):_ `vmov D0, R0, R0'
28351
28352   * uint32x4_t vdupq_n_u32 (uint32_t)
28353     _Form of expected instruction(s):_ `vdup.32 Q0, R0'
28354
28355   * uint16x8_t vdupq_n_u16 (uint16_t)
28356     _Form of expected instruction(s):_ `vdup.16 Q0, R0'
28357
28358   * uint8x16_t vdupq_n_u8 (uint8_t)
28359     _Form of expected instruction(s):_ `vdup.8 Q0, R0'
28360
28361   * int32x4_t vdupq_n_s32 (int32_t)
28362     _Form of expected instruction(s):_ `vdup.32 Q0, R0'
28363
28364   * int16x8_t vdupq_n_s16 (int16_t)
28365     _Form of expected instruction(s):_ `vdup.16 Q0, R0'
28366
28367   * int8x16_t vdupq_n_s8 (int8_t)
28368     _Form of expected instruction(s):_ `vdup.8 Q0, R0'
28369
28370   * float32x4_t vdupq_n_f32 (float32_t)
28371     _Form of expected instruction(s):_ `vdup.32 Q0, R0'
28372
28373   * poly16x8_t vdupq_n_p16 (poly16_t)
28374     _Form of expected instruction(s):_ `vdup.16 Q0, R0'
28375
28376   * poly8x16_t vdupq_n_p8 (poly8_t)
28377     _Form of expected instruction(s):_ `vdup.8 Q0, R0'
28378
28379   * uint64x2_t vdupq_n_u64 (uint64_t)
28380     _Form of expected instruction(s):_ `vmov D0, R0, R0'
28381
28382   * int64x2_t vdupq_n_s64 (int64_t)
28383     _Form of expected instruction(s):_ `vmov D0, R0, R0'
28384
28385   * uint32x2_t vmov_n_u32 (uint32_t)
28386     _Form of expected instruction(s):_ `vdup.32 D0, R0'
28387
28388   * uint16x4_t vmov_n_u16 (uint16_t)
28389     _Form of expected instruction(s):_ `vdup.16 D0, R0'
28390
28391   * uint8x8_t vmov_n_u8 (uint8_t)
28392     _Form of expected instruction(s):_ `vdup.8 D0, R0'
28393
28394   * int32x2_t vmov_n_s32 (int32_t)
28395     _Form of expected instruction(s):_ `vdup.32 D0, R0'
28396
28397   * int16x4_t vmov_n_s16 (int16_t)
28398     _Form of expected instruction(s):_ `vdup.16 D0, R0'
28399
28400   * int8x8_t vmov_n_s8 (int8_t)
28401     _Form of expected instruction(s):_ `vdup.8 D0, R0'
28402
28403   * float32x2_t vmov_n_f32 (float32_t)
28404     _Form of expected instruction(s):_ `vdup.32 D0, R0'
28405
28406   * poly16x4_t vmov_n_p16 (poly16_t)
28407     _Form of expected instruction(s):_ `vdup.16 D0, R0'
28408
28409   * poly8x8_t vmov_n_p8 (poly8_t)
28410     _Form of expected instruction(s):_ `vdup.8 D0, R0'
28411
28412   * uint64x1_t vmov_n_u64 (uint64_t)
28413     _Form of expected instruction(s):_ `vmov D0, R0, R0'
28414
28415   * int64x1_t vmov_n_s64 (int64_t)
28416     _Form of expected instruction(s):_ `vmov D0, R0, R0'
28417
28418   * uint32x4_t vmovq_n_u32 (uint32_t)
28419     _Form of expected instruction(s):_ `vdup.32 Q0, R0'
28420
28421   * uint16x8_t vmovq_n_u16 (uint16_t)
28422     _Form of expected instruction(s):_ `vdup.16 Q0, R0'
28423
28424   * uint8x16_t vmovq_n_u8 (uint8_t)
28425     _Form of expected instruction(s):_ `vdup.8 Q0, R0'
28426
28427   * int32x4_t vmovq_n_s32 (int32_t)
28428     _Form of expected instruction(s):_ `vdup.32 Q0, R0'
28429
28430   * int16x8_t vmovq_n_s16 (int16_t)
28431     _Form of expected instruction(s):_ `vdup.16 Q0, R0'
28432
28433   * int8x16_t vmovq_n_s8 (int8_t)
28434     _Form of expected instruction(s):_ `vdup.8 Q0, R0'
28435
28436   * float32x4_t vmovq_n_f32 (float32_t)
28437     _Form of expected instruction(s):_ `vdup.32 Q0, R0'
28438
28439   * poly16x8_t vmovq_n_p16 (poly16_t)
28440     _Form of expected instruction(s):_ `vdup.16 Q0, R0'
28441
28442   * poly8x16_t vmovq_n_p8 (poly8_t)
28443     _Form of expected instruction(s):_ `vdup.8 Q0, R0'
28444
28445   * uint64x2_t vmovq_n_u64 (uint64_t)
28446     _Form of expected instruction(s):_ `vmov D0, R0, R0'
28447
28448   * int64x2_t vmovq_n_s64 (int64_t)
28449     _Form of expected instruction(s):_ `vmov D0, R0, R0'
28450
28451   * uint32x2_t vdup_lane_u32 (uint32x2_t, const int)
28452     _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
28453
28454   * uint16x4_t vdup_lane_u16 (uint16x4_t, const int)
28455     _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
28456
28457   * uint8x8_t vdup_lane_u8 (uint8x8_t, const int)
28458     _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
28459
28460   * int32x2_t vdup_lane_s32 (int32x2_t, const int)
28461     _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
28462
28463   * int16x4_t vdup_lane_s16 (int16x4_t, const int)
28464     _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
28465
28466   * int8x8_t vdup_lane_s8 (int8x8_t, const int)
28467     _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
28468
28469   * float32x2_t vdup_lane_f32 (float32x2_t, const int)
28470     _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
28471
28472   * poly16x4_t vdup_lane_p16 (poly16x4_t, const int)
28473     _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
28474
28475   * poly8x8_t vdup_lane_p8 (poly8x8_t, const int)
28476     _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
28477
28478   * uint64x1_t vdup_lane_u64 (uint64x1_t, const int)
28479
28480   * int64x1_t vdup_lane_s64 (int64x1_t, const int)
28481
28482   * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int)
28483     _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
28484
28485   * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int)
28486     _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
28487
28488   * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int)
28489     _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
28490
28491   * int32x4_t vdupq_lane_s32 (int32x2_t, const int)
28492     _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
28493
28494   * int16x8_t vdupq_lane_s16 (int16x4_t, const int)
28495     _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
28496
28497   * int8x16_t vdupq_lane_s8 (int8x8_t, const int)
28498     _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
28499
28500   * float32x4_t vdupq_lane_f32 (float32x2_t, const int)
28501     _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
28502
28503   * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int)
28504     _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
28505
28506   * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int)
28507     _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
28508
28509   * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int)
28510
28511   * int64x2_t vdupq_lane_s64 (int64x1_t, const int)
28512
285136.52.3.43 Combining vectors
28514...........................
28515
28516   * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t)
28517
28518   * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t)
28519
28520   * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t)
28521
28522   * int32x4_t vcombine_s32 (int32x2_t, int32x2_t)
28523
28524   * int16x8_t vcombine_s16 (int16x4_t, int16x4_t)
28525
28526   * int8x16_t vcombine_s8 (int8x8_t, int8x8_t)
28527
28528   * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t)
28529
28530   * int64x2_t vcombine_s64 (int64x1_t, int64x1_t)
28531
28532   * float32x4_t vcombine_f32 (float32x2_t, float32x2_t)
28533
28534   * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t)
28535
28536   * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t)
28537
285386.52.3.44 Splitting vectors
28539...........................
28540
28541   * uint32x2_t vget_high_u32 (uint32x4_t)
28542
28543   * uint16x4_t vget_high_u16 (uint16x8_t)
28544
28545   * uint8x8_t vget_high_u8 (uint8x16_t)
28546
28547   * int32x2_t vget_high_s32 (int32x4_t)
28548
28549   * int16x4_t vget_high_s16 (int16x8_t)
28550
28551   * int8x8_t vget_high_s8 (int8x16_t)
28552
28553   * uint64x1_t vget_high_u64 (uint64x2_t)
28554
28555   * int64x1_t vget_high_s64 (int64x2_t)
28556
28557   * float32x2_t vget_high_f32 (float32x4_t)
28558
28559   * poly16x4_t vget_high_p16 (poly16x8_t)
28560
28561   * poly8x8_t vget_high_p8 (poly8x16_t)
28562
28563   * uint32x2_t vget_low_u32 (uint32x4_t)
28564     _Form of expected instruction(s):_ `vmov D0, D0'
28565
28566   * uint16x4_t vget_low_u16 (uint16x8_t)
28567     _Form of expected instruction(s):_ `vmov D0, D0'
28568
28569   * uint8x8_t vget_low_u8 (uint8x16_t)
28570     _Form of expected instruction(s):_ `vmov D0, D0'
28571
28572   * int32x2_t vget_low_s32 (int32x4_t)
28573     _Form of expected instruction(s):_ `vmov D0, D0'
28574
28575   * int16x4_t vget_low_s16 (int16x8_t)
28576     _Form of expected instruction(s):_ `vmov D0, D0'
28577
28578   * int8x8_t vget_low_s8 (int8x16_t)
28579     _Form of expected instruction(s):_ `vmov D0, D0'
28580
28581   * uint64x1_t vget_low_u64 (uint64x2_t)
28582     _Form of expected instruction(s):_ `vmov D0, D0'
28583
28584   * int64x1_t vget_low_s64 (int64x2_t)
28585     _Form of expected instruction(s):_ `vmov D0, D0'
28586
28587   * float32x2_t vget_low_f32 (float32x4_t)
28588     _Form of expected instruction(s):_ `vmov D0, D0'
28589
28590   * poly16x4_t vget_low_p16 (poly16x8_t)
28591     _Form of expected instruction(s):_ `vmov D0, D0'
28592
28593   * poly8x8_t vget_low_p8 (poly8x16_t)
28594     _Form of expected instruction(s):_ `vmov D0, D0'
28595
285966.52.3.45 Conversions
28597.....................
28598
28599   * float32x2_t vcvt_f32_u32 (uint32x2_t)
28600     _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0'
28601
28602   * float32x2_t vcvt_f32_s32 (int32x2_t)
28603     _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0'
28604
28605   * uint32x2_t vcvt_u32_f32 (float32x2_t)
28606     _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0'
28607
28608   * int32x2_t vcvt_s32_f32 (float32x2_t)
28609     _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0'
28610
28611   * float32x4_t vcvtq_f32_u32 (uint32x4_t)
28612     _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0'
28613
28614   * float32x4_t vcvtq_f32_s32 (int32x4_t)
28615     _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0'
28616
28617   * uint32x4_t vcvtq_u32_f32 (float32x4_t)
28618     _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0'
28619
28620   * int32x4_t vcvtq_s32_f32 (float32x4_t)
28621     _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0'
28622
28623   * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int)
28624     _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0, #0'
28625
28626   * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int)
28627     _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0, #0'
28628
28629   * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int)
28630     _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0, #0'
28631
28632   * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int)
28633     _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0, #0'
28634
28635   * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int)
28636     _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0, #0'
28637
28638   * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int)
28639     _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0, #0'
28640
28641   * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int)
28642     _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0, #0'
28643
28644   * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int)
28645     _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0, #0'
28646
286476.52.3.46 Move, single_opcode narrowing
28648.......................................
28649
28650   * uint32x2_t vmovn_u64 (uint64x2_t)
28651     _Form of expected instruction(s):_ `vmovn.i64 D0, Q0'
28652
28653   * uint16x4_t vmovn_u32 (uint32x4_t)
28654     _Form of expected instruction(s):_ `vmovn.i32 D0, Q0'
28655
28656   * uint8x8_t vmovn_u16 (uint16x8_t)
28657     _Form of expected instruction(s):_ `vmovn.i16 D0, Q0'
28658
28659   * int32x2_t vmovn_s64 (int64x2_t)
28660     _Form of expected instruction(s):_ `vmovn.i64 D0, Q0'
28661
28662   * int16x4_t vmovn_s32 (int32x4_t)
28663     _Form of expected instruction(s):_ `vmovn.i32 D0, Q0'
28664
28665   * int8x8_t vmovn_s16 (int16x8_t)
28666     _Form of expected instruction(s):_ `vmovn.i16 D0, Q0'
28667
28668   * uint32x2_t vqmovn_u64 (uint64x2_t)
28669     _Form of expected instruction(s):_ `vqmovn.u64 D0, Q0'
28670
28671   * uint16x4_t vqmovn_u32 (uint32x4_t)
28672     _Form of expected instruction(s):_ `vqmovn.u32 D0, Q0'
28673
28674   * uint8x8_t vqmovn_u16 (uint16x8_t)
28675     _Form of expected instruction(s):_ `vqmovn.u16 D0, Q0'
28676
28677   * int32x2_t vqmovn_s64 (int64x2_t)
28678     _Form of expected instruction(s):_ `vqmovn.s64 D0, Q0'
28679
28680   * int16x4_t vqmovn_s32 (int32x4_t)
28681     _Form of expected instruction(s):_ `vqmovn.s32 D0, Q0'
28682
28683   * int8x8_t vqmovn_s16 (int16x8_t)
28684     _Form of expected instruction(s):_ `vqmovn.s16 D0, Q0'
28685
28686   * uint32x2_t vqmovun_s64 (int64x2_t)
28687     _Form of expected instruction(s):_ `vqmovun.s64 D0, Q0'
28688
28689   * uint16x4_t vqmovun_s32 (int32x4_t)
28690     _Form of expected instruction(s):_ `vqmovun.s32 D0, Q0'
28691
28692   * uint8x8_t vqmovun_s16 (int16x8_t)
28693     _Form of expected instruction(s):_ `vqmovun.s16 D0, Q0'
28694
286956.52.3.47 Move, single_opcode long
28696..................................
28697
28698   * uint64x2_t vmovl_u32 (uint32x2_t)
28699     _Form of expected instruction(s):_ `vmovl.u32 Q0, D0'
28700
28701   * uint32x4_t vmovl_u16 (uint16x4_t)
28702     _Form of expected instruction(s):_ `vmovl.u16 Q0, D0'
28703
28704   * uint16x8_t vmovl_u8 (uint8x8_t)
28705     _Form of expected instruction(s):_ `vmovl.u8 Q0, D0'
28706
28707   * int64x2_t vmovl_s32 (int32x2_t)
28708     _Form of expected instruction(s):_ `vmovl.s32 Q0, D0'
28709
28710   * int32x4_t vmovl_s16 (int16x4_t)
28711     _Form of expected instruction(s):_ `vmovl.s16 Q0, D0'
28712
28713   * int16x8_t vmovl_s8 (int8x8_t)
28714     _Form of expected instruction(s):_ `vmovl.s8 Q0, D0'
28715
287166.52.3.48 Table lookup
28717......................
28718
28719   * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t)
28720     _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
28721
28722   * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t)
28723     _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
28724
28725   * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t)
28726     _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
28727
28728   * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t)
28729     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
28730
28731   * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t)
28732     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
28733
28734   * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t)
28735     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
28736
28737   * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t)
28738     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
28739
28740   * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t)
28741     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
28742
28743   * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t)
28744     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
28745
28746   * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t)
28747     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
28748     D0'
28749
28750   * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t)
28751     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
28752     D0'
28753
28754   * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t)
28755     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
28756     D0'
28757
287586.52.3.49 Extended table lookup
28759...............................
28760
28761   * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t)
28762     _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
28763
28764   * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t)
28765     _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
28766
28767   * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
28768     _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
28769
28770   * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t)
28771     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
28772
28773   * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t)
28774     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
28775
28776   * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t)
28777     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
28778
28779   * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t)
28780     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
28781
28782   * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t)
28783     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
28784
28785   * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t)
28786     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
28787
28788   * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t)
28789     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
28790     D0'
28791
28792   * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t)
28793     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
28794     D0'
28795
28796   * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t)
28797     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
28798     D0'
28799
288006.52.3.50 Multiply, lane
28801........................
28802
28803   * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int)
28804     _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]'
28805
28806   * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int)
28807     _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
28808
28809   * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int)
28810     _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
28811
28812   * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int)
28813     _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
28814
28815   * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int)
28816     _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
28817
28818   * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int)
28819     _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]'
28820
28821   * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int)
28822     _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
28823
28824   * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int)
28825     _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
28826
28827   * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int)
28828     _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
28829
28830   * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int)
28831     _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
28832
288336.52.3.51 Long multiply, lane
28834.............................
28835
28836   * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int)
28837     _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]'
28838
28839   * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int)
28840     _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]'
28841
28842   * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int)
28843     _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]'
28844
28845   * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int)
28846     _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]'
28847
288486.52.3.52 Saturating doubling long multiply, lane
28849.................................................
28850
28851   * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int)
28852     _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]'
28853
28854   * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int)
28855     _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]'
28856
288576.52.3.53 Saturating doubling multiply high, lane
28858.................................................
28859
28860   * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
28861     _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]'
28862
28863   * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
28864     _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]'
28865
28866   * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
28867     _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]'
28868
28869   * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
28870     _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]'
28871
28872   * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
28873     _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]'
28874
28875   * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
28876     _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]'
28877
28878   * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
28879     _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]'
28880
28881   * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
28882     _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]'
28883
288846.52.3.54 Multiply-accumulate, lane
28885...................................
28886
28887   * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
28888     const int)
28889     _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]'
28890
28891   * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t,
28892     const int)
28893     _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
28894
28895   * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t,
28896     const int)
28897     _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
28898
28899   * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
28900     int)
28901     _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
28902
28903   * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
28904     int)
28905     _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
28906
28907   * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
28908     const int)
28909     _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]'
28910
28911   * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
28912     const int)
28913     _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
28914
28915   * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
28916     const int)
28917     _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
28918
28919   * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
28920     int)
28921     _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
28922
28923   * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
28924     int)
28925     _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
28926
28927   * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
28928     const int)
28929     _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]'
28930
28931   * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
28932     const int)
28933     _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]'
28934
28935   * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
28936     int)
28937     _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]'
28938
28939   * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
28940     int)
28941     _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]'
28942
28943   * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
28944     int)
28945     _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]'
28946
28947   * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
28948     int)
28949     _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]'
28950
289516.52.3.55 Multiply-subtract, lane
28952.................................
28953
28954   * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
28955     const int)
28956     _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]'
28957
28958   * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t,
28959     const int)
28960     _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
28961
28962   * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t,
28963     const int)
28964     _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
28965
28966   * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
28967     int)
28968     _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
28969
28970   * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
28971     int)
28972     _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
28973
28974   * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
28975     const int)
28976     _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]'
28977
28978   * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
28979     const int)
28980     _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
28981
28982   * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
28983     const int)
28984     _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
28985
28986   * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
28987     int)
28988     _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
28989
28990   * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
28991     int)
28992     _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
28993
28994   * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
28995     const int)
28996     _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]'
28997
28998   * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
28999     const int)
29000     _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]'
29001
29002   * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
29003     int)
29004     _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]'
29005
29006   * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
29007     int)
29008     _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]'
29009
29010   * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
29011     int)
29012     _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]'
29013
29014   * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
29015     int)
29016     _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]'
29017
290186.52.3.56 Vector multiply by scalar
29019...................................
29020
29021   * float32x2_t vmul_n_f32 (float32x2_t, float32_t)
29022     _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]'
29023
29024   * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t)
29025     _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
29026
29027   * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t)
29028     _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
29029
29030   * int32x2_t vmul_n_s32 (int32x2_t, int32_t)
29031     _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
29032
29033   * int16x4_t vmul_n_s16 (int16x4_t, int16_t)
29034     _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
29035
29036   * float32x4_t vmulq_n_f32 (float32x4_t, float32_t)
29037     _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]'
29038
29039   * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t)
29040     _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
29041
29042   * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t)
29043     _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
29044
29045   * int32x4_t vmulq_n_s32 (int32x4_t, int32_t)
29046     _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
29047
29048   * int16x8_t vmulq_n_s16 (int16x8_t, int16_t)
29049     _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
29050
290516.52.3.57 Vector long multiply by scalar
29052........................................
29053
29054   * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t)
29055     _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]'
29056
29057   * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t)
29058     _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]'
29059
29060   * int64x2_t vmull_n_s32 (int32x2_t, int32_t)
29061     _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]'
29062
29063   * int32x4_t vmull_n_s16 (int16x4_t, int16_t)
29064     _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]'
29065
290666.52.3.58 Vector saturating doubling long multiply by scalar
29067............................................................
29068
29069   * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t)
29070     _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]'
29071
29072   * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t)
29073     _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]'
29074
290756.52.3.59 Vector saturating doubling multiply high by scalar
29076............................................................
29077
29078   * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t)
29079     _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]'
29080
29081   * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t)
29082     _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]'
29083
29084   * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t)
29085     _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]'
29086
29087   * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t)
29088     _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]'
29089
29090   * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t)
29091     _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]'
29092
29093   * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t)
29094     _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]'
29095
29096   * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t)
29097     _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]'
29098
29099   * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t)
29100     _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]'
29101
291026.52.3.60 Vector multiply-accumulate by scalar
29103..............................................
29104
29105   * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t)
29106     _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]'
29107
29108   * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
29109     _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
29110
29111   * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
29112     _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
29113
29114   * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t)
29115     _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
29116
29117   * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t)
29118     _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
29119
29120   * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t)
29121     _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]'
29122
29123   * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
29124     _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
29125
29126   * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
29127     _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
29128
29129   * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t)
29130     _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
29131
29132   * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t)
29133     _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
29134
29135   * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
29136     _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]'
29137
29138   * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
29139     _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]'
29140
29141   * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
29142     _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]'
29143
29144   * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
29145     _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]'
29146
29147   * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
29148     _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]'
29149
29150   * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
29151     _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]'
29152
291536.52.3.61 Vector multiply-subtract by scalar
29154............................................
29155
29156   * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t)
29157     _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]'
29158
29159   * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
29160     _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
29161
29162   * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
29163     _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
29164
29165   * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t)
29166     _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
29167
29168   * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t)
29169     _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
29170
29171   * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t)
29172     _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]'
29173
29174   * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
29175     _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
29176
29177   * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
29178     _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
29179
29180   * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t)
29181     _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
29182
29183   * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t)
29184     _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
29185
29186   * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
29187     _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]'
29188
29189   * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
29190     _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]'
29191
29192   * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
29193     _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]'
29194
29195   * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
29196     _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]'
29197
29198   * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
29199     _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]'
29200
29201   * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
29202     _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]'
29203
292046.52.3.62 Vector extract
29205........................
29206
29207   * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int)
29208     _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
29209
29210   * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int)
29211     _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
29212
29213   * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int)
29214     _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
29215
29216   * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int)
29217     _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
29218
29219   * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int)
29220     _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
29221
29222   * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int)
29223     _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
29224
29225   * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int)
29226     _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0'
29227
29228   * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int)
29229     _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0'
29230
29231   * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int)
29232     _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
29233
29234   * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int)
29235     _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
29236
29237   * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int)
29238     _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
29239
29240   * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int)
29241     _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
29242
29243   * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int)
29244     _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
29245
29246   * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int)
29247     _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
29248
29249   * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int)
29250     _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
29251
29252   * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int)
29253     _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
29254
29255   * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int)
29256     _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
29257
29258   * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int)
29259     _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0'
29260
29261   * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int)
29262     _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0'
29263
29264   * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int)
29265     _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
29266
29267   * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int)
29268     _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
29269
29270   * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int)
29271     _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
29272
292736.52.3.63 Reverse elements
29274..........................
29275
29276   * uint32x2_t vrev64_u32 (uint32x2_t)
29277     _Form of expected instruction(s):_ `vrev64.32 D0, D0'
29278
29279   * uint16x4_t vrev64_u16 (uint16x4_t)
29280     _Form of expected instruction(s):_ `vrev64.16 D0, D0'
29281
29282   * uint8x8_t vrev64_u8 (uint8x8_t)
29283     _Form of expected instruction(s):_ `vrev64.8 D0, D0'
29284
29285   * int32x2_t vrev64_s32 (int32x2_t)
29286     _Form of expected instruction(s):_ `vrev64.32 D0, D0'
29287
29288   * int16x4_t vrev64_s16 (int16x4_t)
29289     _Form of expected instruction(s):_ `vrev64.16 D0, D0'
29290
29291   * int8x8_t vrev64_s8 (int8x8_t)
29292     _Form of expected instruction(s):_ `vrev64.8 D0, D0'
29293
29294   * float32x2_t vrev64_f32 (float32x2_t)
29295     _Form of expected instruction(s):_ `vrev64.32 D0, D0'
29296
29297   * poly16x4_t vrev64_p16 (poly16x4_t)
29298     _Form of expected instruction(s):_ `vrev64.16 D0, D0'
29299
29300   * poly8x8_t vrev64_p8 (poly8x8_t)
29301     _Form of expected instruction(s):_ `vrev64.8 D0, D0'
29302
29303   * uint32x4_t vrev64q_u32 (uint32x4_t)
29304     _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
29305
29306   * uint16x8_t vrev64q_u16 (uint16x8_t)
29307     _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
29308
29309   * uint8x16_t vrev64q_u8 (uint8x16_t)
29310     _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
29311
29312   * int32x4_t vrev64q_s32 (int32x4_t)
29313     _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
29314
29315   * int16x8_t vrev64q_s16 (int16x8_t)
29316     _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
29317
29318   * int8x16_t vrev64q_s8 (int8x16_t)
29319     _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
29320
29321   * float32x4_t vrev64q_f32 (float32x4_t)
29322     _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
29323
29324   * poly16x8_t vrev64q_p16 (poly16x8_t)
29325     _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
29326
29327   * poly8x16_t vrev64q_p8 (poly8x16_t)
29328     _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
29329
29330   * uint16x4_t vrev32_u16 (uint16x4_t)
29331     _Form of expected instruction(s):_ `vrev32.16 D0, D0'
29332
29333   * int16x4_t vrev32_s16 (int16x4_t)
29334     _Form of expected instruction(s):_ `vrev32.16 D0, D0'
29335
29336   * uint8x8_t vrev32_u8 (uint8x8_t)
29337     _Form of expected instruction(s):_ `vrev32.8 D0, D0'
29338
29339   * int8x8_t vrev32_s8 (int8x8_t)
29340     _Form of expected instruction(s):_ `vrev32.8 D0, D0'
29341
29342   * poly16x4_t vrev32_p16 (poly16x4_t)
29343     _Form of expected instruction(s):_ `vrev32.16 D0, D0'
29344
29345   * poly8x8_t vrev32_p8 (poly8x8_t)
29346     _Form of expected instruction(s):_ `vrev32.8 D0, D0'
29347
29348   * uint16x8_t vrev32q_u16 (uint16x8_t)
29349     _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
29350
29351   * int16x8_t vrev32q_s16 (int16x8_t)
29352     _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
29353
29354   * uint8x16_t vrev32q_u8 (uint8x16_t)
29355     _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
29356
29357   * int8x16_t vrev32q_s8 (int8x16_t)
29358     _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
29359
29360   * poly16x8_t vrev32q_p16 (poly16x8_t)
29361     _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
29362
29363   * poly8x16_t vrev32q_p8 (poly8x16_t)
29364     _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
29365
29366   * uint8x8_t vrev16_u8 (uint8x8_t)
29367     _Form of expected instruction(s):_ `vrev16.8 D0, D0'
29368
29369   * int8x8_t vrev16_s8 (int8x8_t)
29370     _Form of expected instruction(s):_ `vrev16.8 D0, D0'
29371
29372   * poly8x8_t vrev16_p8 (poly8x8_t)
29373     _Form of expected instruction(s):_ `vrev16.8 D0, D0'
29374
29375   * uint8x16_t vrev16q_u8 (uint8x16_t)
29376     _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
29377
29378   * int8x16_t vrev16q_s8 (int8x16_t)
29379     _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
29380
29381   * poly8x16_t vrev16q_p8 (poly8x16_t)
29382     _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
29383
293846.52.3.64 Bit selection
29385.......................
29386
29387   * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
29388     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
29389     D0, D0, D0' _or_ `vbif D0, D0, D0'
29390
29391   * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
29392     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
29393     D0, D0, D0' _or_ `vbif D0, D0, D0'
29394
29395   * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
29396     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
29397     D0, D0, D0' _or_ `vbif D0, D0, D0'
29398
29399   * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t)
29400     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
29401     D0, D0, D0' _or_ `vbif D0, D0, D0'
29402
29403   * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t)
29404     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
29405     D0, D0, D0' _or_ `vbif D0, D0, D0'
29406
29407   * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t)
29408     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
29409     D0, D0, D0' _or_ `vbif D0, D0, D0'
29410
29411   * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t)
29412     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
29413     D0, D0, D0' _or_ `vbif D0, D0, D0'
29414
29415   * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t)
29416     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
29417     D0, D0, D0' _or_ `vbif D0, D0, D0'
29418
29419   * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t)
29420     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
29421     D0, D0, D0' _or_ `vbif D0, D0, D0'
29422
29423   * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t)
29424     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
29425     D0, D0, D0' _or_ `vbif D0, D0, D0'
29426
29427   * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t)
29428     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
29429     D0, D0, D0' _or_ `vbif D0, D0, D0'
29430
29431   * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
29432     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
29433     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
29434
29435   * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
29436     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
29437     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
29438
29439   * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
29440     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
29441     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
29442
29443   * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t)
29444     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
29445     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
29446
29447   * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t)
29448     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
29449     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
29450
29451   * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t)
29452     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
29453     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
29454
29455   * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t)
29456     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
29457     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
29458
29459   * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t)
29460     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
29461     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
29462
29463   * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t)
29464     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
29465     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
29466
29467   * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t)
29468     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
29469     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
29470
29471   * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t)
29472     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
29473     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
29474
294756.52.3.65 Transpose elements
29476............................
29477
29478   * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t)
29479     _Form of expected instruction(s):_ `vtrn.32 D0, D1'
29480
29481   * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t)
29482     _Form of expected instruction(s):_ `vtrn.16 D0, D1'
29483
29484   * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t)
29485     _Form of expected instruction(s):_ `vtrn.8 D0, D1'
29486
29487   * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t)
29488     _Form of expected instruction(s):_ `vtrn.32 D0, D1'
29489
29490   * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t)
29491     _Form of expected instruction(s):_ `vtrn.16 D0, D1'
29492
29493   * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t)
29494     _Form of expected instruction(s):_ `vtrn.8 D0, D1'
29495
29496   * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t)
29497     _Form of expected instruction(s):_ `vtrn.32 D0, D1'
29498
29499   * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t)
29500     _Form of expected instruction(s):_ `vtrn.16 D0, D1'
29501
29502   * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t)
29503     _Form of expected instruction(s):_ `vtrn.8 D0, D1'
29504
29505   * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t)
29506     _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
29507
29508   * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t)
29509     _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
29510
29511   * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t)
29512     _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
29513
29514   * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t)
29515     _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
29516
29517   * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t)
29518     _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
29519
29520   * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t)
29521     _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
29522
29523   * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t)
29524     _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
29525
29526   * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t)
29527     _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
29528
29529   * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t)
29530     _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
29531
295326.52.3.66 Zip elements
29533......................
29534
29535   * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t)
29536     _Form of expected instruction(s):_ `vzip.32 D0, D1'
29537
29538   * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t)
29539     _Form of expected instruction(s):_ `vzip.16 D0, D1'
29540
29541   * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t)
29542     _Form of expected instruction(s):_ `vzip.8 D0, D1'
29543
29544   * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t)
29545     _Form of expected instruction(s):_ `vzip.32 D0, D1'
29546
29547   * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t)
29548     _Form of expected instruction(s):_ `vzip.16 D0, D1'
29549
29550   * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t)
29551     _Form of expected instruction(s):_ `vzip.8 D0, D1'
29552
29553   * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t)
29554     _Form of expected instruction(s):_ `vzip.32 D0, D1'
29555
29556   * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t)
29557     _Form of expected instruction(s):_ `vzip.16 D0, D1'
29558
29559   * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t)
29560     _Form of expected instruction(s):_ `vzip.8 D0, D1'
29561
29562   * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t)
29563     _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
29564
29565   * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t)
29566     _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
29567
29568   * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t)
29569     _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
29570
29571   * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t)
29572     _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
29573
29574   * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t)
29575     _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
29576
29577   * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t)
29578     _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
29579
29580   * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t)
29581     _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
29582
29583   * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t)
29584     _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
29585
29586   * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t)
29587     _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
29588
295896.52.3.67 Unzip elements
29590........................
29591
29592   * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t)
29593     _Form of expected instruction(s):_ `vuzp.32 D0, D1'
29594
29595   * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t)
29596     _Form of expected instruction(s):_ `vuzp.16 D0, D1'
29597
29598   * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t)
29599     _Form of expected instruction(s):_ `vuzp.8 D0, D1'
29600
29601   * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t)
29602     _Form of expected instruction(s):_ `vuzp.32 D0, D1'
29603
29604   * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t)
29605     _Form of expected instruction(s):_ `vuzp.16 D0, D1'
29606
29607   * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t)
29608     _Form of expected instruction(s):_ `vuzp.8 D0, D1'
29609
29610   * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t)
29611     _Form of expected instruction(s):_ `vuzp.32 D0, D1'
29612
29613   * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t)
29614     _Form of expected instruction(s):_ `vuzp.16 D0, D1'
29615
29616   * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t)
29617     _Form of expected instruction(s):_ `vuzp.8 D0, D1'
29618
29619   * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t)
29620     _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
29621
29622   * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t)
29623     _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
29624
29625   * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t)
29626     _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
29627
29628   * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t)
29629     _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
29630
29631   * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t)
29632     _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
29633
29634   * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t)
29635     _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
29636
29637   * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t)
29638     _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
29639
29640   * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t)
29641     _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
29642
29643   * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t)
29644     _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
29645
296466.52.3.68 Element/structure loads, VLD1 variants
29647................................................
29648
29649   * uint32x2_t vld1_u32 (const uint32_t *)
29650     _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
29651
29652   * uint16x4_t vld1_u16 (const uint16_t *)
29653     _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
29654
29655   * uint8x8_t vld1_u8 (const uint8_t *)
29656     _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
29657
29658   * int32x2_t vld1_s32 (const int32_t *)
29659     _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
29660
29661   * int16x4_t vld1_s16 (const int16_t *)
29662     _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
29663
29664   * int8x8_t vld1_s8 (const int8_t *)
29665     _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
29666
29667   * uint64x1_t vld1_u64 (const uint64_t *)
29668     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
29669
29670   * int64x1_t vld1_s64 (const int64_t *)
29671     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
29672
29673   * float32x2_t vld1_f32 (const float32_t *)
29674     _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
29675
29676   * poly16x4_t vld1_p16 (const poly16_t *)
29677     _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
29678
29679   * poly8x8_t vld1_p8 (const poly8_t *)
29680     _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
29681
29682   * uint32x4_t vld1q_u32 (const uint32_t *)
29683     _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
29684
29685   * uint16x8_t vld1q_u16 (const uint16_t *)
29686     _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
29687
29688   * uint8x16_t vld1q_u8 (const uint8_t *)
29689     _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
29690
29691   * int32x4_t vld1q_s32 (const int32_t *)
29692     _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
29693
29694   * int16x8_t vld1q_s16 (const int16_t *)
29695     _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
29696
29697   * int8x16_t vld1q_s8 (const int8_t *)
29698     _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
29699
29700   * uint64x2_t vld1q_u64 (const uint64_t *)
29701     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
29702
29703   * int64x2_t vld1q_s64 (const int64_t *)
29704     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
29705
29706   * float32x4_t vld1q_f32 (const float32_t *)
29707     _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
29708
29709   * poly16x8_t vld1q_p16 (const poly16_t *)
29710     _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
29711
29712   * poly8x16_t vld1q_p8 (const poly8_t *)
29713     _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
29714
29715   * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int)
29716     _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
29717
29718   * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int)
29719     _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
29720
29721   * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int)
29722     _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
29723
29724   * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int)
29725     _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
29726
29727   * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int)
29728     _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
29729
29730   * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int)
29731     _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
29732
29733   * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const
29734     int)
29735     _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
29736
29737   * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int)
29738     _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
29739
29740   * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int)
29741     _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
29742
29743   * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int)
29744     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
29745
29746   * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int)
29747     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
29748
29749   * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int)
29750     _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
29751
29752   * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int)
29753     _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
29754
29755   * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int)
29756     _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
29757
29758   * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int)
29759     _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
29760
29761   * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int)
29762     _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
29763
29764   * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int)
29765     _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
29766
29767   * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const
29768     int)
29769     _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
29770
29771   * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int)
29772     _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
29773
29774   * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int)
29775     _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
29776
29777   * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int)
29778     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
29779
29780   * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int)
29781     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
29782
29783   * uint32x2_t vld1_dup_u32 (const uint32_t *)
29784     _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
29785
29786   * uint16x4_t vld1_dup_u16 (const uint16_t *)
29787     _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
29788
29789   * uint8x8_t vld1_dup_u8 (const uint8_t *)
29790     _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
29791
29792   * int32x2_t vld1_dup_s32 (const int32_t *)
29793     _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
29794
29795   * int16x4_t vld1_dup_s16 (const int16_t *)
29796     _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
29797
29798   * int8x8_t vld1_dup_s8 (const int8_t *)
29799     _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
29800
29801   * float32x2_t vld1_dup_f32 (const float32_t *)
29802     _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
29803
29804   * poly16x4_t vld1_dup_p16 (const poly16_t *)
29805     _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
29806
29807   * poly8x8_t vld1_dup_p8 (const poly8_t *)
29808     _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
29809
29810   * uint64x1_t vld1_dup_u64 (const uint64_t *)
29811     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
29812
29813   * int64x1_t vld1_dup_s64 (const int64_t *)
29814     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
29815
29816   * uint32x4_t vld1q_dup_u32 (const uint32_t *)
29817     _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
29818
29819   * uint16x8_t vld1q_dup_u16 (const uint16_t *)
29820     _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
29821
29822   * uint8x16_t vld1q_dup_u8 (const uint8_t *)
29823     _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
29824
29825   * int32x4_t vld1q_dup_s32 (const int32_t *)
29826     _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
29827
29828   * int16x8_t vld1q_dup_s16 (const int16_t *)
29829     _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
29830
29831   * int8x16_t vld1q_dup_s8 (const int8_t *)
29832     _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
29833
29834   * float32x4_t vld1q_dup_f32 (const float32_t *)
29835     _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
29836
29837   * poly16x8_t vld1q_dup_p16 (const poly16_t *)
29838     _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
29839
29840   * poly8x16_t vld1q_dup_p8 (const poly8_t *)
29841     _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
29842
29843   * uint64x2_t vld1q_dup_u64 (const uint64_t *)
29844     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
29845
29846   * int64x2_t vld1q_dup_s64 (const int64_t *)
29847     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
29848
298496.52.3.69 Element/structure stores, VST1 variants
29850.................................................
29851
29852   * void vst1_u32 (uint32_t *, uint32x2_t)
29853     _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
29854
29855   * void vst1_u16 (uint16_t *, uint16x4_t)
29856     _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
29857
29858   * void vst1_u8 (uint8_t *, uint8x8_t)
29859     _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
29860
29861   * void vst1_s32 (int32_t *, int32x2_t)
29862     _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
29863
29864   * void vst1_s16 (int16_t *, int16x4_t)
29865     _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
29866
29867   * void vst1_s8 (int8_t *, int8x8_t)
29868     _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
29869
29870   * void vst1_u64 (uint64_t *, uint64x1_t)
29871     _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
29872
29873   * void vst1_s64 (int64_t *, int64x1_t)
29874     _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
29875
29876   * void vst1_f32 (float32_t *, float32x2_t)
29877     _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
29878
29879   * void vst1_p16 (poly16_t *, poly16x4_t)
29880     _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
29881
29882   * void vst1_p8 (poly8_t *, poly8x8_t)
29883     _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
29884
29885   * void vst1q_u32 (uint32_t *, uint32x4_t)
29886     _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
29887
29888   * void vst1q_u16 (uint16_t *, uint16x8_t)
29889     _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
29890
29891   * void vst1q_u8 (uint8_t *, uint8x16_t)
29892     _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
29893
29894   * void vst1q_s32 (int32_t *, int32x4_t)
29895     _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
29896
29897   * void vst1q_s16 (int16_t *, int16x8_t)
29898     _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
29899
29900   * void vst1q_s8 (int8_t *, int8x16_t)
29901     _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
29902
29903   * void vst1q_u64 (uint64_t *, uint64x2_t)
29904     _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
29905
29906   * void vst1q_s64 (int64_t *, int64x2_t)
29907     _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
29908
29909   * void vst1q_f32 (float32_t *, float32x4_t)
29910     _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
29911
29912   * void vst1q_p16 (poly16_t *, poly16x8_t)
29913     _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
29914
29915   * void vst1q_p8 (poly8_t *, poly8x16_t)
29916     _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
29917
29918   * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int)
29919     _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
29920
29921   * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int)
29922     _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
29923
29924   * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int)
29925     _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
29926
29927   * void vst1_lane_s32 (int32_t *, int32x2_t, const int)
29928     _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
29929
29930   * void vst1_lane_s16 (int16_t *, int16x4_t, const int)
29931     _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
29932
29933   * void vst1_lane_s8 (int8_t *, int8x8_t, const int)
29934     _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
29935
29936   * void vst1_lane_f32 (float32_t *, float32x2_t, const int)
29937     _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
29938
29939   * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int)
29940     _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
29941
29942   * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int)
29943     _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
29944
29945   * void vst1_lane_s64 (int64_t *, int64x1_t, const int)
29946     _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
29947
29948   * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int)
29949     _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
29950
29951   * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int)
29952     _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
29953
29954   * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int)
29955     _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
29956
29957   * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int)
29958     _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
29959
29960   * void vst1q_lane_s32 (int32_t *, int32x4_t, const int)
29961     _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
29962
29963   * void vst1q_lane_s16 (int16_t *, int16x8_t, const int)
29964     _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
29965
29966   * void vst1q_lane_s8 (int8_t *, int8x16_t, const int)
29967     _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
29968
29969   * void vst1q_lane_f32 (float32_t *, float32x4_t, const int)
29970     _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
29971
29972   * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int)
29973     _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
29974
29975   * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int)
29976     _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
29977
29978   * void vst1q_lane_s64 (int64_t *, int64x2_t, const int)
29979     _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
29980
29981   * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int)
29982     _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
29983
299846.52.3.70 Element/structure loads, VLD2 variants
29985................................................
29986
29987   * uint32x2x2_t vld2_u32 (const uint32_t *)
29988     _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
29989
29990   * uint16x4x2_t vld2_u16 (const uint16_t *)
29991     _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
29992
29993   * uint8x8x2_t vld2_u8 (const uint8_t *)
29994     _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
29995
29996   * int32x2x2_t vld2_s32 (const int32_t *)
29997     _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
29998
29999   * int16x4x2_t vld2_s16 (const int16_t *)
30000     _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
30001
30002   * int8x8x2_t vld2_s8 (const int8_t *)
30003     _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
30004
30005   * float32x2x2_t vld2_f32 (const float32_t *)
30006     _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
30007
30008   * poly16x4x2_t vld2_p16 (const poly16_t *)
30009     _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
30010
30011   * poly8x8x2_t vld2_p8 (const poly8_t *)
30012     _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
30013
30014   * uint64x1x2_t vld2_u64 (const uint64_t *)
30015     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
30016
30017   * int64x1x2_t vld2_s64 (const int64_t *)
30018     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
30019
30020   * uint32x4x2_t vld2q_u32 (const uint32_t *)
30021     _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
30022
30023   * uint16x8x2_t vld2q_u16 (const uint16_t *)
30024     _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
30025
30026   * uint8x16x2_t vld2q_u8 (const uint8_t *)
30027     _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
30028
30029   * int32x4x2_t vld2q_s32 (const int32_t *)
30030     _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
30031
30032   * int16x8x2_t vld2q_s16 (const int16_t *)
30033     _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
30034
30035   * int8x16x2_t vld2q_s8 (const int8_t *)
30036     _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
30037
30038   * float32x4x2_t vld2q_f32 (const float32_t *)
30039     _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
30040
30041   * poly16x8x2_t vld2q_p16 (const poly16_t *)
30042     _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
30043
30044   * poly8x16x2_t vld2q_p8 (const poly8_t *)
30045     _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
30046
30047   * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const
30048     int)
30049     _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
30050
30051   * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const
30052     int)
30053     _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
30054
30055   * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int)
30056     _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
30057
30058   * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int)
30059     _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
30060
30061   * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int)
30062     _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
30063
30064   * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int)
30065     _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
30066
30067   * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t,
30068     const int)
30069     _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
30070
30071   * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const
30072     int)
30073     _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
30074
30075   * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int)
30076     _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
30077
30078   * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const
30079     int)
30080     _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
30081
30082   * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const
30083     int)
30084     _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
30085
30086   * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const
30087     int)
30088     _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
30089
30090   * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const
30091     int)
30092     _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
30093
30094   * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t,
30095     const int)
30096     _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
30097
30098   * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const
30099     int)
30100     _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
30101
30102   * uint32x2x2_t vld2_dup_u32 (const uint32_t *)
30103     _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
30104
30105   * uint16x4x2_t vld2_dup_u16 (const uint16_t *)
30106     _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
30107
30108   * uint8x8x2_t vld2_dup_u8 (const uint8_t *)
30109     _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
30110
30111   * int32x2x2_t vld2_dup_s32 (const int32_t *)
30112     _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
30113
30114   * int16x4x2_t vld2_dup_s16 (const int16_t *)
30115     _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
30116
30117   * int8x8x2_t vld2_dup_s8 (const int8_t *)
30118     _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
30119
30120   * float32x2x2_t vld2_dup_f32 (const float32_t *)
30121     _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
30122
30123   * poly16x4x2_t vld2_dup_p16 (const poly16_t *)
30124     _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
30125
30126   * poly8x8x2_t vld2_dup_p8 (const poly8_t *)
30127     _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
30128
30129   * uint64x1x2_t vld2_dup_u64 (const uint64_t *)
30130     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
30131
30132   * int64x1x2_t vld2_dup_s64 (const int64_t *)
30133     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
30134
301356.52.3.71 Element/structure stores, VST2 variants
30136.................................................
30137
30138   * void vst2_u32 (uint32_t *, uint32x2x2_t)
30139     _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
30140
30141   * void vst2_u16 (uint16_t *, uint16x4x2_t)
30142     _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
30143
30144   * void vst2_u8 (uint8_t *, uint8x8x2_t)
30145     _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
30146
30147   * void vst2_s32 (int32_t *, int32x2x2_t)
30148     _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
30149
30150   * void vst2_s16 (int16_t *, int16x4x2_t)
30151     _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
30152
30153   * void vst2_s8 (int8_t *, int8x8x2_t)
30154     _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
30155
30156   * void vst2_f32 (float32_t *, float32x2x2_t)
30157     _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
30158
30159   * void vst2_p16 (poly16_t *, poly16x4x2_t)
30160     _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
30161
30162   * void vst2_p8 (poly8_t *, poly8x8x2_t)
30163     _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
30164
30165   * void vst2_u64 (uint64_t *, uint64x1x2_t)
30166     _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
30167
30168   * void vst2_s64 (int64_t *, int64x1x2_t)
30169     _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
30170
30171   * void vst2q_u32 (uint32_t *, uint32x4x2_t)
30172     _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
30173
30174   * void vst2q_u16 (uint16_t *, uint16x8x2_t)
30175     _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
30176
30177   * void vst2q_u8 (uint8_t *, uint8x16x2_t)
30178     _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
30179
30180   * void vst2q_s32 (int32_t *, int32x4x2_t)
30181     _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
30182
30183   * void vst2q_s16 (int16_t *, int16x8x2_t)
30184     _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
30185
30186   * void vst2q_s8 (int8_t *, int8x16x2_t)
30187     _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
30188
30189   * void vst2q_f32 (float32_t *, float32x4x2_t)
30190     _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
30191
30192   * void vst2q_p16 (poly16_t *, poly16x8x2_t)
30193     _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
30194
30195   * void vst2q_p8 (poly8_t *, poly8x16x2_t)
30196     _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
30197
30198   * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int)
30199     _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
30200
30201   * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int)
30202     _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
30203
30204   * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int)
30205     _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
30206
30207   * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int)
30208     _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
30209
30210   * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int)
30211     _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
30212
30213   * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int)
30214     _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
30215
30216   * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int)
30217     _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
30218
30219   * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int)
30220     _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
30221
30222   * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int)
30223     _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
30224
30225   * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int)
30226     _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
30227
30228   * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int)
30229     _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
30230
30231   * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int)
30232     _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
30233
30234   * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int)
30235     _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
30236
30237   * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int)
30238     _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
30239
30240   * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int)
30241     _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
30242
302436.52.3.72 Element/structure loads, VLD3 variants
30244................................................
30245
30246   * uint32x2x3_t vld3_u32 (const uint32_t *)
30247     _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
30248
30249   * uint16x4x3_t vld3_u16 (const uint16_t *)
30250     _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
30251
30252   * uint8x8x3_t vld3_u8 (const uint8_t *)
30253     _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
30254
30255   * int32x2x3_t vld3_s32 (const int32_t *)
30256     _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
30257
30258   * int16x4x3_t vld3_s16 (const int16_t *)
30259     _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
30260
30261   * int8x8x3_t vld3_s8 (const int8_t *)
30262     _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
30263
30264   * float32x2x3_t vld3_f32 (const float32_t *)
30265     _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
30266
30267   * poly16x4x3_t vld3_p16 (const poly16_t *)
30268     _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
30269
30270   * poly8x8x3_t vld3_p8 (const poly8_t *)
30271     _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
30272
30273   * uint64x1x3_t vld3_u64 (const uint64_t *)
30274     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
30275
30276   * int64x1x3_t vld3_s64 (const int64_t *)
30277     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
30278
30279   * uint32x4x3_t vld3q_u32 (const uint32_t *)
30280     _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
30281
30282   * uint16x8x3_t vld3q_u16 (const uint16_t *)
30283     _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
30284
30285   * uint8x16x3_t vld3q_u8 (const uint8_t *)
30286     _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
30287
30288   * int32x4x3_t vld3q_s32 (const int32_t *)
30289     _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
30290
30291   * int16x8x3_t vld3q_s16 (const int16_t *)
30292     _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
30293
30294   * int8x16x3_t vld3q_s8 (const int8_t *)
30295     _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
30296
30297   * float32x4x3_t vld3q_f32 (const float32_t *)
30298     _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
30299
30300   * poly16x8x3_t vld3q_p16 (const poly16_t *)
30301     _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
30302
30303   * poly8x16x3_t vld3q_p8 (const poly8_t *)
30304     _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
30305
30306   * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const
30307     int)
30308     _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
30309     [R0]'
30310
30311   * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const
30312     int)
30313     _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
30314     [R0]'
30315
30316   * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int)
30317     _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
30318     [R0]'
30319
30320   * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int)
30321     _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
30322     [R0]'
30323
30324   * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int)
30325     _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
30326     [R0]'
30327
30328   * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int)
30329     _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
30330     [R0]'
30331
30332   * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t,
30333     const int)
30334     _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
30335     [R0]'
30336
30337   * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const
30338     int)
30339     _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
30340     [R0]'
30341
30342   * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int)
30343     _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
30344     [R0]'
30345
30346   * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const
30347     int)
30348     _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
30349     [R0]'
30350
30351   * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const
30352     int)
30353     _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
30354     [R0]'
30355
30356   * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const
30357     int)
30358     _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
30359     [R0]'
30360
30361   * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const
30362     int)
30363     _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
30364     [R0]'
30365
30366   * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t,
30367     const int)
30368     _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
30369     [R0]'
30370
30371   * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const
30372     int)
30373     _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
30374     [R0]'
30375
30376   * uint32x2x3_t vld3_dup_u32 (const uint32_t *)
30377     _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
30378     [R0]'
30379
30380   * uint16x4x3_t vld3_dup_u16 (const uint16_t *)
30381     _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
30382     [R0]'
30383
30384   * uint8x8x3_t vld3_dup_u8 (const uint8_t *)
30385     _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
30386     [R0]'
30387
30388   * int32x2x3_t vld3_dup_s32 (const int32_t *)
30389     _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
30390     [R0]'
30391
30392   * int16x4x3_t vld3_dup_s16 (const int16_t *)
30393     _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
30394     [R0]'
30395
30396   * int8x8x3_t vld3_dup_s8 (const int8_t *)
30397     _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
30398     [R0]'
30399
30400   * float32x2x3_t vld3_dup_f32 (const float32_t *)
30401     _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
30402     [R0]'
30403
30404   * poly16x4x3_t vld3_dup_p16 (const poly16_t *)
30405     _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
30406     [R0]'
30407
30408   * poly8x8x3_t vld3_dup_p8 (const poly8_t *)
30409     _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
30410     [R0]'
30411
30412   * uint64x1x3_t vld3_dup_u64 (const uint64_t *)
30413     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
30414
30415   * int64x1x3_t vld3_dup_s64 (const int64_t *)
30416     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
30417
304186.52.3.73 Element/structure stores, VST3 variants
30419.................................................
30420
30421   * void vst3_u32 (uint32_t *, uint32x2x3_t)
30422     _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
30423
30424   * void vst3_u16 (uint16_t *, uint16x4x3_t)
30425     _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
30426
30427   * void vst3_u8 (uint8_t *, uint8x8x3_t)
30428     _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
30429
30430   * void vst3_s32 (int32_t *, int32x2x3_t)
30431     _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
30432
30433   * void vst3_s16 (int16_t *, int16x4x3_t)
30434     _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
30435
30436   * void vst3_s8 (int8_t *, int8x8x3_t)
30437     _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
30438
30439   * void vst3_f32 (float32_t *, float32x2x3_t)
30440     _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
30441
30442   * void vst3_p16 (poly16_t *, poly16x4x3_t)
30443     _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
30444
30445   * void vst3_p8 (poly8_t *, poly8x8x3_t)
30446     _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
30447
30448   * void vst3_u64 (uint64_t *, uint64x1x3_t)
30449     _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
30450
30451   * void vst3_s64 (int64_t *, int64x1x3_t)
30452     _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
30453
30454   * void vst3q_u32 (uint32_t *, uint32x4x3_t)
30455     _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
30456
30457   * void vst3q_u16 (uint16_t *, uint16x8x3_t)
30458     _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
30459
30460   * void vst3q_u8 (uint8_t *, uint8x16x3_t)
30461     _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
30462
30463   * void vst3q_s32 (int32_t *, int32x4x3_t)
30464     _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
30465
30466   * void vst3q_s16 (int16_t *, int16x8x3_t)
30467     _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
30468
30469   * void vst3q_s8 (int8_t *, int8x16x3_t)
30470     _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
30471
30472   * void vst3q_f32 (float32_t *, float32x4x3_t)
30473     _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
30474
30475   * void vst3q_p16 (poly16_t *, poly16x8x3_t)
30476     _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
30477
30478   * void vst3q_p8 (poly8_t *, poly8x16x3_t)
30479     _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
30480
30481   * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int)
30482     _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
30483     [R0]'
30484
30485   * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int)
30486     _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
30487     [R0]'
30488
30489   * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int)
30490     _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
30491     [R0]'
30492
30493   * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int)
30494     _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
30495     [R0]'
30496
30497   * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int)
30498     _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
30499     [R0]'
30500
30501   * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int)
30502     _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
30503     [R0]'
30504
30505   * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int)
30506     _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
30507     [R0]'
30508
30509   * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int)
30510     _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
30511     [R0]'
30512
30513   * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int)
30514     _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
30515     [R0]'
30516
30517   * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int)
30518     _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
30519     [R0]'
30520
30521   * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int)
30522     _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
30523     [R0]'
30524
30525   * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int)
30526     _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
30527     [R0]'
30528
30529   * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int)
30530     _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
30531     [R0]'
30532
30533   * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int)
30534     _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
30535     [R0]'
30536
30537   * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int)
30538     _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
30539     [R0]'
30540
305416.52.3.74 Element/structure loads, VLD4 variants
30542................................................
30543
30544   * uint32x2x4_t vld4_u32 (const uint32_t *)
30545     _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
30546
30547   * uint16x4x4_t vld4_u16 (const uint16_t *)
30548     _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
30549
30550   * uint8x8x4_t vld4_u8 (const uint8_t *)
30551     _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
30552
30553   * int32x2x4_t vld4_s32 (const int32_t *)
30554     _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
30555
30556   * int16x4x4_t vld4_s16 (const int16_t *)
30557     _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
30558
30559   * int8x8x4_t vld4_s8 (const int8_t *)
30560     _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
30561
30562   * float32x2x4_t vld4_f32 (const float32_t *)
30563     _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
30564
30565   * poly16x4x4_t vld4_p16 (const poly16_t *)
30566     _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
30567
30568   * poly8x8x4_t vld4_p8 (const poly8_t *)
30569     _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
30570
30571   * uint64x1x4_t vld4_u64 (const uint64_t *)
30572     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
30573
30574   * int64x1x4_t vld4_s64 (const int64_t *)
30575     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
30576
30577   * uint32x4x4_t vld4q_u32 (const uint32_t *)
30578     _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
30579
30580   * uint16x8x4_t vld4q_u16 (const uint16_t *)
30581     _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
30582
30583   * uint8x16x4_t vld4q_u8 (const uint8_t *)
30584     _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
30585
30586   * int32x4x4_t vld4q_s32 (const int32_t *)
30587     _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
30588
30589   * int16x8x4_t vld4q_s16 (const int16_t *)
30590     _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
30591
30592   * int8x16x4_t vld4q_s8 (const int8_t *)
30593     _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
30594
30595   * float32x4x4_t vld4q_f32 (const float32_t *)
30596     _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
30597
30598   * poly16x8x4_t vld4q_p16 (const poly16_t *)
30599     _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
30600
30601   * poly8x16x4_t vld4q_p8 (const poly8_t *)
30602     _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
30603
30604   * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const
30605     int)
30606     _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
30607     D3[0]}, [R0]'
30608
30609   * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const
30610     int)
30611     _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
30612     D3[0]}, [R0]'
30613
30614   * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int)
30615     _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
30616     D3[0]}, [R0]'
30617
30618   * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int)
30619     _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
30620     D3[0]}, [R0]'
30621
30622   * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int)
30623     _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
30624     D3[0]}, [R0]'
30625
30626   * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int)
30627     _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
30628     D3[0]}, [R0]'
30629
30630   * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t,
30631     const int)
30632     _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
30633     D3[0]}, [R0]'
30634
30635   * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const
30636     int)
30637     _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
30638     D3[0]}, [R0]'
30639
30640   * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int)
30641     _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
30642     D3[0]}, [R0]'
30643
30644   * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const
30645     int)
30646     _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
30647     D3[0]}, [R0]'
30648
30649   * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const
30650     int)
30651     _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
30652     D3[0]}, [R0]'
30653
30654   * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const
30655     int)
30656     _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
30657     D3[0]}, [R0]'
30658
30659   * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const
30660     int)
30661     _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
30662     D3[0]}, [R0]'
30663
30664   * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t,
30665     const int)
30666     _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
30667     D3[0]}, [R0]'
30668
30669   * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const
30670     int)
30671     _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
30672     D3[0]}, [R0]'
30673
30674   * uint32x2x4_t vld4_dup_u32 (const uint32_t *)
30675     _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
30676     D3[]}, [R0]'
30677
30678   * uint16x4x4_t vld4_dup_u16 (const uint16_t *)
30679     _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
30680     D3[]}, [R0]'
30681
30682   * uint8x8x4_t vld4_dup_u8 (const uint8_t *)
30683     _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
30684     D3[]}, [R0]'
30685
30686   * int32x2x4_t vld4_dup_s32 (const int32_t *)
30687     _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
30688     D3[]}, [R0]'
30689
30690   * int16x4x4_t vld4_dup_s16 (const int16_t *)
30691     _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
30692     D3[]}, [R0]'
30693
30694   * int8x8x4_t vld4_dup_s8 (const int8_t *)
30695     _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
30696     D3[]}, [R0]'
30697
30698   * float32x2x4_t vld4_dup_f32 (const float32_t *)
30699     _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
30700     D3[]}, [R0]'
30701
30702   * poly16x4x4_t vld4_dup_p16 (const poly16_t *)
30703     _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
30704     D3[]}, [R0]'
30705
30706   * poly8x8x4_t vld4_dup_p8 (const poly8_t *)
30707     _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
30708     D3[]}, [R0]'
30709
30710   * uint64x1x4_t vld4_dup_u64 (const uint64_t *)
30711     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
30712
30713   * int64x1x4_t vld4_dup_s64 (const int64_t *)
30714     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
30715
307166.52.3.75 Element/structure stores, VST4 variants
30717.................................................
30718
30719   * void vst4_u32 (uint32_t *, uint32x2x4_t)
30720     _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
30721
30722   * void vst4_u16 (uint16_t *, uint16x4x4_t)
30723     _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
30724
30725   * void vst4_u8 (uint8_t *, uint8x8x4_t)
30726     _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
30727
30728   * void vst4_s32 (int32_t *, int32x2x4_t)
30729     _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
30730
30731   * void vst4_s16 (int16_t *, int16x4x4_t)
30732     _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
30733
30734   * void vst4_s8 (int8_t *, int8x8x4_t)
30735     _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
30736
30737   * void vst4_f32 (float32_t *, float32x2x4_t)
30738     _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
30739
30740   * void vst4_p16 (poly16_t *, poly16x4x4_t)
30741     _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
30742
30743   * void vst4_p8 (poly8_t *, poly8x8x4_t)
30744     _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
30745
30746   * void vst4_u64 (uint64_t *, uint64x1x4_t)
30747     _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
30748
30749   * void vst4_s64 (int64_t *, int64x1x4_t)
30750     _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
30751
30752   * void vst4q_u32 (uint32_t *, uint32x4x4_t)
30753     _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
30754
30755   * void vst4q_u16 (uint16_t *, uint16x8x4_t)
30756     _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
30757
30758   * void vst4q_u8 (uint8_t *, uint8x16x4_t)
30759     _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
30760
30761   * void vst4q_s32 (int32_t *, int32x4x4_t)
30762     _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
30763
30764   * void vst4q_s16 (int16_t *, int16x8x4_t)
30765     _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
30766
30767   * void vst4q_s8 (int8_t *, int8x16x4_t)
30768     _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
30769
30770   * void vst4q_f32 (float32_t *, float32x4x4_t)
30771     _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
30772
30773   * void vst4q_p16 (poly16_t *, poly16x8x4_t)
30774     _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
30775
30776   * void vst4q_p8 (poly8_t *, poly8x16x4_t)
30777     _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
30778
30779   * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int)
30780     _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
30781     D3[0]}, [R0]'
30782
30783   * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int)
30784     _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
30785     D3[0]}, [R0]'
30786
30787   * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int)
30788     _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
30789     D3[0]}, [R0]'
30790
30791   * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int)
30792     _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
30793     D3[0]}, [R0]'
30794
30795   * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int)
30796     _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
30797     D3[0]}, [R0]'
30798
30799   * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int)
30800     _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
30801     D3[0]}, [R0]'
30802
30803   * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int)
30804     _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
30805     D3[0]}, [R0]'
30806
30807   * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int)
30808     _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
30809     D3[0]}, [R0]'
30810
30811   * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int)
30812     _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
30813     D3[0]}, [R0]'
30814
30815   * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int)
30816     _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
30817     D3[0]}, [R0]'
30818
30819   * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int)
30820     _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
30821     D3[0]}, [R0]'
30822
30823   * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int)
30824     _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
30825     D3[0]}, [R0]'
30826
30827   * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int)
30828     _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
30829     D3[0]}, [R0]'
30830
30831   * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int)
30832     _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
30833     D3[0]}, [R0]'
30834
30835   * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int)
30836     _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
30837     D3[0]}, [R0]'
30838
308396.52.3.76 Logical operations (AND)
30840..................................
30841
30842   * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t)
30843     _Form of expected instruction(s):_ `vand D0, D0, D0'
30844
30845   * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t)
30846     _Form of expected instruction(s):_ `vand D0, D0, D0'
30847
30848   * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t)
30849     _Form of expected instruction(s):_ `vand D0, D0, D0'
30850
30851   * int32x2_t vand_s32 (int32x2_t, int32x2_t)
30852     _Form of expected instruction(s):_ `vand D0, D0, D0'
30853
30854   * int16x4_t vand_s16 (int16x4_t, int16x4_t)
30855     _Form of expected instruction(s):_ `vand D0, D0, D0'
30856
30857   * int8x8_t vand_s8 (int8x8_t, int8x8_t)
30858     _Form of expected instruction(s):_ `vand D0, D0, D0'
30859
30860   * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t)
30861     _Form of expected instruction(s):_ `vand D0, D0, D0'
30862
30863   * int64x1_t vand_s64 (int64x1_t, int64x1_t)
30864     _Form of expected instruction(s):_ `vand D0, D0, D0'
30865
30866   * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t)
30867     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
30868
30869   * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t)
30870     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
30871
30872   * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t)
30873     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
30874
30875   * int32x4_t vandq_s32 (int32x4_t, int32x4_t)
30876     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
30877
30878   * int16x8_t vandq_s16 (int16x8_t, int16x8_t)
30879     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
30880
30881   * int8x16_t vandq_s8 (int8x16_t, int8x16_t)
30882     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
30883
30884   * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t)
30885     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
30886
30887   * int64x2_t vandq_s64 (int64x2_t, int64x2_t)
30888     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
30889
308906.52.3.77 Logical operations (OR)
30891.................................
30892
30893   * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t)
30894     _Form of expected instruction(s):_ `vorr D0, D0, D0'
30895
30896   * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t)
30897     _Form of expected instruction(s):_ `vorr D0, D0, D0'
30898
30899   * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t)
30900     _Form of expected instruction(s):_ `vorr D0, D0, D0'
30901
30902   * int32x2_t vorr_s32 (int32x2_t, int32x2_t)
30903     _Form of expected instruction(s):_ `vorr D0, D0, D0'
30904
30905   * int16x4_t vorr_s16 (int16x4_t, int16x4_t)
30906     _Form of expected instruction(s):_ `vorr D0, D0, D0'
30907
30908   * int8x8_t vorr_s8 (int8x8_t, int8x8_t)
30909     _Form of expected instruction(s):_ `vorr D0, D0, D0'
30910
30911   * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t)
30912     _Form of expected instruction(s):_ `vorr D0, D0, D0'
30913
30914   * int64x1_t vorr_s64 (int64x1_t, int64x1_t)
30915     _Form of expected instruction(s):_ `vorr D0, D0, D0'
30916
30917   * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t)
30918     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
30919
30920   * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t)
30921     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
30922
30923   * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t)
30924     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
30925
30926   * int32x4_t vorrq_s32 (int32x4_t, int32x4_t)
30927     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
30928
30929   * int16x8_t vorrq_s16 (int16x8_t, int16x8_t)
30930     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
30931
30932   * int8x16_t vorrq_s8 (int8x16_t, int8x16_t)
30933     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
30934
30935   * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t)
30936     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
30937
30938   * int64x2_t vorrq_s64 (int64x2_t, int64x2_t)
30939     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
30940
309416.52.3.78 Logical operations (exclusive OR)
30942...........................................
30943
30944   * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t)
30945     _Form of expected instruction(s):_ `veor D0, D0, D0'
30946
30947   * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t)
30948     _Form of expected instruction(s):_ `veor D0, D0, D0'
30949
30950   * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t)
30951     _Form of expected instruction(s):_ `veor D0, D0, D0'
30952
30953   * int32x2_t veor_s32 (int32x2_t, int32x2_t)
30954     _Form of expected instruction(s):_ `veor D0, D0, D0'
30955
30956   * int16x4_t veor_s16 (int16x4_t, int16x4_t)
30957     _Form of expected instruction(s):_ `veor D0, D0, D0'
30958
30959   * int8x8_t veor_s8 (int8x8_t, int8x8_t)
30960     _Form of expected instruction(s):_ `veor D0, D0, D0'
30961
30962   * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t)
30963     _Form of expected instruction(s):_ `veor D0, D0, D0'
30964
30965   * int64x1_t veor_s64 (int64x1_t, int64x1_t)
30966     _Form of expected instruction(s):_ `veor D0, D0, D0'
30967
30968   * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t)
30969     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
30970
30971   * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t)
30972     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
30973
30974   * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t)
30975     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
30976
30977   * int32x4_t veorq_s32 (int32x4_t, int32x4_t)
30978     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
30979
30980   * int16x8_t veorq_s16 (int16x8_t, int16x8_t)
30981     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
30982
30983   * int8x16_t veorq_s8 (int8x16_t, int8x16_t)
30984     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
30985
30986   * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t)
30987     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
30988
30989   * int64x2_t veorq_s64 (int64x2_t, int64x2_t)
30990     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
30991
309926.52.3.79 Logical operations (AND-NOT)
30993......................................
30994
30995   * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t)
30996     _Form of expected instruction(s):_ `vbic D0, D0, D0'
30997
30998   * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t)
30999     _Form of expected instruction(s):_ `vbic D0, D0, D0'
31000
31001   * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t)
31002     _Form of expected instruction(s):_ `vbic D0, D0, D0'
31003
31004   * int32x2_t vbic_s32 (int32x2_t, int32x2_t)
31005     _Form of expected instruction(s):_ `vbic D0, D0, D0'
31006
31007   * int16x4_t vbic_s16 (int16x4_t, int16x4_t)
31008     _Form of expected instruction(s):_ `vbic D0, D0, D0'
31009
31010   * int8x8_t vbic_s8 (int8x8_t, int8x8_t)
31011     _Form of expected instruction(s):_ `vbic D0, D0, D0'
31012
31013   * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t)
31014     _Form of expected instruction(s):_ `vbic D0, D0, D0'
31015
31016   * int64x1_t vbic_s64 (int64x1_t, int64x1_t)
31017     _Form of expected instruction(s):_ `vbic D0, D0, D0'
31018
31019   * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t)
31020     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
31021
31022   * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t)
31023     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
31024
31025   * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t)
31026     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
31027
31028   * int32x4_t vbicq_s32 (int32x4_t, int32x4_t)
31029     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
31030
31031   * int16x8_t vbicq_s16 (int16x8_t, int16x8_t)
31032     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
31033
31034   * int8x16_t vbicq_s8 (int8x16_t, int8x16_t)
31035     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
31036
31037   * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t)
31038     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
31039
31040   * int64x2_t vbicq_s64 (int64x2_t, int64x2_t)
31041     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
31042
310436.52.3.80 Logical operations (OR-NOT)
31044.....................................
31045
31046   * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t)
31047     _Form of expected instruction(s):_ `vorn D0, D0, D0'
31048
31049   * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t)
31050     _Form of expected instruction(s):_ `vorn D0, D0, D0'
31051
31052   * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t)
31053     _Form of expected instruction(s):_ `vorn D0, D0, D0'
31054
31055   * int32x2_t vorn_s32 (int32x2_t, int32x2_t)
31056     _Form of expected instruction(s):_ `vorn D0, D0, D0'
31057
31058   * int16x4_t vorn_s16 (int16x4_t, int16x4_t)
31059     _Form of expected instruction(s):_ `vorn D0, D0, D0'
31060
31061   * int8x8_t vorn_s8 (int8x8_t, int8x8_t)
31062     _Form of expected instruction(s):_ `vorn D0, D0, D0'
31063
31064   * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t)
31065     _Form of expected instruction(s):_ `vorn D0, D0, D0'
31066
31067   * int64x1_t vorn_s64 (int64x1_t, int64x1_t)
31068     _Form of expected instruction(s):_ `vorn D0, D0, D0'
31069
31070   * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t)
31071     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
31072
31073   * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t)
31074     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
31075
31076   * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t)
31077     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
31078
31079   * int32x4_t vornq_s32 (int32x4_t, int32x4_t)
31080     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
31081
31082   * int16x8_t vornq_s16 (int16x8_t, int16x8_t)
31083     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
31084
31085   * int8x16_t vornq_s8 (int8x16_t, int8x16_t)
31086     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
31087
31088   * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t)
31089     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
31090
31091   * int64x2_t vornq_s64 (int64x2_t, int64x2_t)
31092     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
31093
310946.52.3.81 Reinterpret casts
31095...........................
31096
31097   * poly8x8_t vreinterpret_p8_u32 (uint32x2_t)
31098
31099   * poly8x8_t vreinterpret_p8_u16 (uint16x4_t)
31100
31101   * poly8x8_t vreinterpret_p8_u8 (uint8x8_t)
31102
31103   * poly8x8_t vreinterpret_p8_s32 (int32x2_t)
31104
31105   * poly8x8_t vreinterpret_p8_s16 (int16x4_t)
31106
31107   * poly8x8_t vreinterpret_p8_s8 (int8x8_t)
31108
31109   * poly8x8_t vreinterpret_p8_u64 (uint64x1_t)
31110
31111   * poly8x8_t vreinterpret_p8_s64 (int64x1_t)
31112
31113   * poly8x8_t vreinterpret_p8_f32 (float32x2_t)
31114
31115   * poly8x8_t vreinterpret_p8_p16 (poly16x4_t)
31116
31117   * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t)
31118
31119   * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t)
31120
31121   * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t)
31122
31123   * poly8x16_t vreinterpretq_p8_s32 (int32x4_t)
31124
31125   * poly8x16_t vreinterpretq_p8_s16 (int16x8_t)
31126
31127   * poly8x16_t vreinterpretq_p8_s8 (int8x16_t)
31128
31129   * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t)
31130
31131   * poly8x16_t vreinterpretq_p8_s64 (int64x2_t)
31132
31133   * poly8x16_t vreinterpretq_p8_f32 (float32x4_t)
31134
31135   * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t)
31136
31137   * poly16x4_t vreinterpret_p16_u32 (uint32x2_t)
31138
31139   * poly16x4_t vreinterpret_p16_u16 (uint16x4_t)
31140
31141   * poly16x4_t vreinterpret_p16_u8 (uint8x8_t)
31142
31143   * poly16x4_t vreinterpret_p16_s32 (int32x2_t)
31144
31145   * poly16x4_t vreinterpret_p16_s16 (int16x4_t)
31146
31147   * poly16x4_t vreinterpret_p16_s8 (int8x8_t)
31148
31149   * poly16x4_t vreinterpret_p16_u64 (uint64x1_t)
31150
31151   * poly16x4_t vreinterpret_p16_s64 (int64x1_t)
31152
31153   * poly16x4_t vreinterpret_p16_f32 (float32x2_t)
31154
31155   * poly16x4_t vreinterpret_p16_p8 (poly8x8_t)
31156
31157   * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t)
31158
31159   * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t)
31160
31161   * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t)
31162
31163   * poly16x8_t vreinterpretq_p16_s32 (int32x4_t)
31164
31165   * poly16x8_t vreinterpretq_p16_s16 (int16x8_t)
31166
31167   * poly16x8_t vreinterpretq_p16_s8 (int8x16_t)
31168
31169   * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t)
31170
31171   * poly16x8_t vreinterpretq_p16_s64 (int64x2_t)
31172
31173   * poly16x8_t vreinterpretq_p16_f32 (float32x4_t)
31174
31175   * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t)
31176
31177   * float32x2_t vreinterpret_f32_u32 (uint32x2_t)
31178
31179   * float32x2_t vreinterpret_f32_u16 (uint16x4_t)
31180
31181   * float32x2_t vreinterpret_f32_u8 (uint8x8_t)
31182
31183   * float32x2_t vreinterpret_f32_s32 (int32x2_t)
31184
31185   * float32x2_t vreinterpret_f32_s16 (int16x4_t)
31186
31187   * float32x2_t vreinterpret_f32_s8 (int8x8_t)
31188
31189   * float32x2_t vreinterpret_f32_u64 (uint64x1_t)
31190
31191   * float32x2_t vreinterpret_f32_s64 (int64x1_t)
31192
31193   * float32x2_t vreinterpret_f32_p16 (poly16x4_t)
31194
31195   * float32x2_t vreinterpret_f32_p8 (poly8x8_t)
31196
31197   * float32x4_t vreinterpretq_f32_u32 (uint32x4_t)
31198
31199   * float32x4_t vreinterpretq_f32_u16 (uint16x8_t)
31200
31201   * float32x4_t vreinterpretq_f32_u8 (uint8x16_t)
31202
31203   * float32x4_t vreinterpretq_f32_s32 (int32x4_t)
31204
31205   * float32x4_t vreinterpretq_f32_s16 (int16x8_t)
31206
31207   * float32x4_t vreinterpretq_f32_s8 (int8x16_t)
31208
31209   * float32x4_t vreinterpretq_f32_u64 (uint64x2_t)
31210
31211   * float32x4_t vreinterpretq_f32_s64 (int64x2_t)
31212
31213   * float32x4_t vreinterpretq_f32_p16 (poly16x8_t)
31214
31215   * float32x4_t vreinterpretq_f32_p8 (poly8x16_t)
31216
31217   * int64x1_t vreinterpret_s64_u32 (uint32x2_t)
31218
31219   * int64x1_t vreinterpret_s64_u16 (uint16x4_t)
31220
31221   * int64x1_t vreinterpret_s64_u8 (uint8x8_t)
31222
31223   * int64x1_t vreinterpret_s64_s32 (int32x2_t)
31224
31225   * int64x1_t vreinterpret_s64_s16 (int16x4_t)
31226
31227   * int64x1_t vreinterpret_s64_s8 (int8x8_t)
31228
31229   * int64x1_t vreinterpret_s64_u64 (uint64x1_t)
31230
31231   * int64x1_t vreinterpret_s64_f32 (float32x2_t)
31232
31233   * int64x1_t vreinterpret_s64_p16 (poly16x4_t)
31234
31235   * int64x1_t vreinterpret_s64_p8 (poly8x8_t)
31236
31237   * int64x2_t vreinterpretq_s64_u32 (uint32x4_t)
31238
31239   * int64x2_t vreinterpretq_s64_u16 (uint16x8_t)
31240
31241   * int64x2_t vreinterpretq_s64_u8 (uint8x16_t)
31242
31243   * int64x2_t vreinterpretq_s64_s32 (int32x4_t)
31244
31245   * int64x2_t vreinterpretq_s64_s16 (int16x8_t)
31246
31247   * int64x2_t vreinterpretq_s64_s8 (int8x16_t)
31248
31249   * int64x2_t vreinterpretq_s64_u64 (uint64x2_t)
31250
31251   * int64x2_t vreinterpretq_s64_f32 (float32x4_t)
31252
31253   * int64x2_t vreinterpretq_s64_p16 (poly16x8_t)
31254
31255   * int64x2_t vreinterpretq_s64_p8 (poly8x16_t)
31256
31257   * uint64x1_t vreinterpret_u64_u32 (uint32x2_t)
31258
31259   * uint64x1_t vreinterpret_u64_u16 (uint16x4_t)
31260
31261   * uint64x1_t vreinterpret_u64_u8 (uint8x8_t)
31262
31263   * uint64x1_t vreinterpret_u64_s32 (int32x2_t)
31264
31265   * uint64x1_t vreinterpret_u64_s16 (int16x4_t)
31266
31267   * uint64x1_t vreinterpret_u64_s8 (int8x8_t)
31268
31269   * uint64x1_t vreinterpret_u64_s64 (int64x1_t)
31270
31271   * uint64x1_t vreinterpret_u64_f32 (float32x2_t)
31272
31273   * uint64x1_t vreinterpret_u64_p16 (poly16x4_t)
31274
31275   * uint64x1_t vreinterpret_u64_p8 (poly8x8_t)
31276
31277   * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t)
31278
31279   * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t)
31280
31281   * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t)
31282
31283   * uint64x2_t vreinterpretq_u64_s32 (int32x4_t)
31284
31285   * uint64x2_t vreinterpretq_u64_s16 (int16x8_t)
31286
31287   * uint64x2_t vreinterpretq_u64_s8 (int8x16_t)
31288
31289   * uint64x2_t vreinterpretq_u64_s64 (int64x2_t)
31290
31291   * uint64x2_t vreinterpretq_u64_f32 (float32x4_t)
31292
31293   * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t)
31294
31295   * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t)
31296
31297   * int8x8_t vreinterpret_s8_u32 (uint32x2_t)
31298
31299   * int8x8_t vreinterpret_s8_u16 (uint16x4_t)
31300
31301   * int8x8_t vreinterpret_s8_u8 (uint8x8_t)
31302
31303   * int8x8_t vreinterpret_s8_s32 (int32x2_t)
31304
31305   * int8x8_t vreinterpret_s8_s16 (int16x4_t)
31306
31307   * int8x8_t vreinterpret_s8_u64 (uint64x1_t)
31308
31309   * int8x8_t vreinterpret_s8_s64 (int64x1_t)
31310
31311   * int8x8_t vreinterpret_s8_f32 (float32x2_t)
31312
31313   * int8x8_t vreinterpret_s8_p16 (poly16x4_t)
31314
31315   * int8x8_t vreinterpret_s8_p8 (poly8x8_t)
31316
31317   * int8x16_t vreinterpretq_s8_u32 (uint32x4_t)
31318
31319   * int8x16_t vreinterpretq_s8_u16 (uint16x8_t)
31320
31321   * int8x16_t vreinterpretq_s8_u8 (uint8x16_t)
31322
31323   * int8x16_t vreinterpretq_s8_s32 (int32x4_t)
31324
31325   * int8x16_t vreinterpretq_s8_s16 (int16x8_t)
31326
31327   * int8x16_t vreinterpretq_s8_u64 (uint64x2_t)
31328
31329   * int8x16_t vreinterpretq_s8_s64 (int64x2_t)
31330
31331   * int8x16_t vreinterpretq_s8_f32 (float32x4_t)
31332
31333   * int8x16_t vreinterpretq_s8_p16 (poly16x8_t)
31334
31335   * int8x16_t vreinterpretq_s8_p8 (poly8x16_t)
31336
31337   * int16x4_t vreinterpret_s16_u32 (uint32x2_t)
31338
31339   * int16x4_t vreinterpret_s16_u16 (uint16x4_t)
31340
31341   * int16x4_t vreinterpret_s16_u8 (uint8x8_t)
31342
31343   * int16x4_t vreinterpret_s16_s32 (int32x2_t)
31344
31345   * int16x4_t vreinterpret_s16_s8 (int8x8_t)
31346
31347   * int16x4_t vreinterpret_s16_u64 (uint64x1_t)
31348
31349   * int16x4_t vreinterpret_s16_s64 (int64x1_t)
31350
31351   * int16x4_t vreinterpret_s16_f32 (float32x2_t)
31352
31353   * int16x4_t vreinterpret_s16_p16 (poly16x4_t)
31354
31355   * int16x4_t vreinterpret_s16_p8 (poly8x8_t)
31356
31357   * int16x8_t vreinterpretq_s16_u32 (uint32x4_t)
31358
31359   * int16x8_t vreinterpretq_s16_u16 (uint16x8_t)
31360
31361   * int16x8_t vreinterpretq_s16_u8 (uint8x16_t)
31362
31363   * int16x8_t vreinterpretq_s16_s32 (int32x4_t)
31364
31365   * int16x8_t vreinterpretq_s16_s8 (int8x16_t)
31366
31367   * int16x8_t vreinterpretq_s16_u64 (uint64x2_t)
31368
31369   * int16x8_t vreinterpretq_s16_s64 (int64x2_t)
31370
31371   * int16x8_t vreinterpretq_s16_f32 (float32x4_t)
31372
31373   * int16x8_t vreinterpretq_s16_p16 (poly16x8_t)
31374
31375   * int16x8_t vreinterpretq_s16_p8 (poly8x16_t)
31376
31377   * int32x2_t vreinterpret_s32_u32 (uint32x2_t)
31378
31379   * int32x2_t vreinterpret_s32_u16 (uint16x4_t)
31380
31381   * int32x2_t vreinterpret_s32_u8 (uint8x8_t)
31382
31383   * int32x2_t vreinterpret_s32_s16 (int16x4_t)
31384
31385   * int32x2_t vreinterpret_s32_s8 (int8x8_t)
31386
31387   * int32x2_t vreinterpret_s32_u64 (uint64x1_t)
31388
31389   * int32x2_t vreinterpret_s32_s64 (int64x1_t)
31390
31391   * int32x2_t vreinterpret_s32_f32 (float32x2_t)
31392
31393   * int32x2_t vreinterpret_s32_p16 (poly16x4_t)
31394
31395   * int32x2_t vreinterpret_s32_p8 (poly8x8_t)
31396
31397   * int32x4_t vreinterpretq_s32_u32 (uint32x4_t)
31398
31399   * int32x4_t vreinterpretq_s32_u16 (uint16x8_t)
31400
31401   * int32x4_t vreinterpretq_s32_u8 (uint8x16_t)
31402
31403   * int32x4_t vreinterpretq_s32_s16 (int16x8_t)
31404
31405   * int32x4_t vreinterpretq_s32_s8 (int8x16_t)
31406
31407   * int32x4_t vreinterpretq_s32_u64 (uint64x2_t)
31408
31409   * int32x4_t vreinterpretq_s32_s64 (int64x2_t)
31410
31411   * int32x4_t vreinterpretq_s32_f32 (float32x4_t)
31412
31413   * int32x4_t vreinterpretq_s32_p16 (poly16x8_t)
31414
31415   * int32x4_t vreinterpretq_s32_p8 (poly8x16_t)
31416
31417   * uint8x8_t vreinterpret_u8_u32 (uint32x2_t)
31418
31419   * uint8x8_t vreinterpret_u8_u16 (uint16x4_t)
31420
31421   * uint8x8_t vreinterpret_u8_s32 (int32x2_t)
31422
31423   * uint8x8_t vreinterpret_u8_s16 (int16x4_t)
31424
31425   * uint8x8_t vreinterpret_u8_s8 (int8x8_t)
31426
31427   * uint8x8_t vreinterpret_u8_u64 (uint64x1_t)
31428
31429   * uint8x8_t vreinterpret_u8_s64 (int64x1_t)
31430
31431   * uint8x8_t vreinterpret_u8_f32 (float32x2_t)
31432
31433   * uint8x8_t vreinterpret_u8_p16 (poly16x4_t)
31434
31435   * uint8x8_t vreinterpret_u8_p8 (poly8x8_t)
31436
31437   * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t)
31438
31439   * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t)
31440
31441   * uint8x16_t vreinterpretq_u8_s32 (int32x4_t)
31442
31443   * uint8x16_t vreinterpretq_u8_s16 (int16x8_t)
31444
31445   * uint8x16_t vreinterpretq_u8_s8 (int8x16_t)
31446
31447   * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t)
31448
31449   * uint8x16_t vreinterpretq_u8_s64 (int64x2_t)
31450
31451   * uint8x16_t vreinterpretq_u8_f32 (float32x4_t)
31452
31453   * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t)
31454
31455   * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t)
31456
31457   * uint16x4_t vreinterpret_u16_u32 (uint32x2_t)
31458
31459   * uint16x4_t vreinterpret_u16_u8 (uint8x8_t)
31460
31461   * uint16x4_t vreinterpret_u16_s32 (int32x2_t)
31462
31463   * uint16x4_t vreinterpret_u16_s16 (int16x4_t)
31464
31465   * uint16x4_t vreinterpret_u16_s8 (int8x8_t)
31466
31467   * uint16x4_t vreinterpret_u16_u64 (uint64x1_t)
31468
31469   * uint16x4_t vreinterpret_u16_s64 (int64x1_t)
31470
31471   * uint16x4_t vreinterpret_u16_f32 (float32x2_t)
31472
31473   * uint16x4_t vreinterpret_u16_p16 (poly16x4_t)
31474
31475   * uint16x4_t vreinterpret_u16_p8 (poly8x8_t)
31476
31477   * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t)
31478
31479   * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t)
31480
31481   * uint16x8_t vreinterpretq_u16_s32 (int32x4_t)
31482
31483   * uint16x8_t vreinterpretq_u16_s16 (int16x8_t)
31484
31485   * uint16x8_t vreinterpretq_u16_s8 (int8x16_t)
31486
31487   * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t)
31488
31489   * uint16x8_t vreinterpretq_u16_s64 (int64x2_t)
31490
31491   * uint16x8_t vreinterpretq_u16_f32 (float32x4_t)
31492
31493   * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t)
31494
31495   * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t)
31496
31497   * uint32x2_t vreinterpret_u32_u16 (uint16x4_t)
31498
31499   * uint32x2_t vreinterpret_u32_u8 (uint8x8_t)
31500
31501   * uint32x2_t vreinterpret_u32_s32 (int32x2_t)
31502
31503   * uint32x2_t vreinterpret_u32_s16 (int16x4_t)
31504
31505   * uint32x2_t vreinterpret_u32_s8 (int8x8_t)
31506
31507   * uint32x2_t vreinterpret_u32_u64 (uint64x1_t)
31508
31509   * uint32x2_t vreinterpret_u32_s64 (int64x1_t)
31510
31511   * uint32x2_t vreinterpret_u32_f32 (float32x2_t)
31512
31513   * uint32x2_t vreinterpret_u32_p16 (poly16x4_t)
31514
31515   * uint32x2_t vreinterpret_u32_p8 (poly8x8_t)
31516
31517   * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t)
31518
31519   * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t)
31520
31521   * uint32x4_t vreinterpretq_u32_s32 (int32x4_t)
31522
31523   * uint32x4_t vreinterpretq_u32_s16 (int16x8_t)
31524
31525   * uint32x4_t vreinterpretq_u32_s8 (int8x16_t)
31526
31527   * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t)
31528
31529   * uint32x4_t vreinterpretq_u32_s64 (int64x2_t)
31530
31531   * uint32x4_t vreinterpretq_u32_f32 (float32x4_t)
31532
31533   * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t)
31534
31535   * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t)
31536
31537
31538File: gcc.info,  Node: Blackfin Built-in Functions,  Next: FR-V Built-in Functions,  Prev: ARM NEON Intrinsics,  Up: Target Builtins
31539
315406.52.4 Blackfin Built-in Functions
31541----------------------------------
31542
31543Currently, there are two Blackfin-specific built-in functions.  These
31544are used for generating `CSYNC' and `SSYNC' machine insns without using
31545inline assembly; by using these built-in functions the compiler can
31546automatically add workarounds for hardware errata involving these
31547instructions.  These functions are named as follows:
31548
31549     void __builtin_bfin_csync (void)
31550     void __builtin_bfin_ssync (void)
31551
31552
31553File: gcc.info,  Node: FR-V Built-in Functions,  Next: X86 Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins
31554
315556.52.5 FR-V Built-in Functions
31556------------------------------
31557
31558GCC provides many FR-V-specific built-in functions.  In general, these
31559functions are intended to be compatible with those described by `FR-V
31560Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.
31561The two exceptions are `__MDUNPACKH' and `__MBTOHE', the gcc forms of
31562which pass 128-bit values by pointer rather than by value.
31563
31564 Most of the functions are named after specific FR-V instructions.
31565Such functions are said to be "directly mapped" and are summarized here
31566in tabular form.
31567
31568* Menu:
31569
31570* Argument Types::
31571* Directly-mapped Integer Functions::
31572* Directly-mapped Media Functions::
31573* Raw read/write Functions::
31574* Other Built-in Functions::
31575
31576
31577File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
31578
315796.52.5.1 Argument Types
31580.......................
31581
31582The arguments to the built-in functions can be divided into three
31583groups: register numbers, compile-time constants and run-time values.
31584In order to make this classification clear at a glance, the arguments
31585and return values are given the following pseudo types:
31586
31587Pseudo type    Real C type            Constant?   Description
31588`uh'           `unsigned short'       No          an unsigned halfword
31589`uw1'          `unsigned int'         No          an unsigned word
31590`sw1'          `int'                  No          a signed word
31591`uw2'          `unsigned long long'   No          an unsigned doubleword
31592`sw2'          `long long'            No          a signed doubleword
31593`const'        `int'                  Yes         an integer constant
31594`acc'          `int'                  Yes         an ACC register number
31595`iacc'         `int'                  Yes         an IACC register number
31596
31597 These pseudo types are not defined by GCC, they are simply a notational
31598convenience used in this manual.
31599
31600 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at
31601run time.  They correspond to register operands in the underlying FR-V
31602instructions.
31603
31604 `const' arguments represent immediate operands in the underlying FR-V
31605instructions.  They must be compile-time constants.
31606
31607 `acc' arguments are evaluated at compile time and specify the number
31608of an accumulator register.  For example, an `acc' argument of 2 will
31609select the ACC2 register.
31610
31611 `iacc' arguments are similar to `acc' arguments but specify the number
31612of an IACC register.  See *note Other Built-in Functions:: for more
31613details.
31614
31615
31616File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions
31617
316186.52.5.2 Directly-mapped Integer Functions
31619..........................................
31620
31621The functions listed below map directly to FR-V I-type instructions.
31622
31623Function prototype               Example usage           Assembly output
31624`sw1 __ADDSS (sw1, sw1)'         `C = __ADDSS (A, B)'    `ADDSS A,B,C'
31625`sw1 __SCAN (sw1, sw1)'          `C = __SCAN (A, B)'     `SCAN A,B,C'
31626`sw1 __SCUTSS (sw1)'             `B = __SCUTSS (A)'      `SCUTSS A,B'
31627`sw1 __SLASS (sw1, sw1)'         `C = __SLASS (A, B)'    `SLASS A,B,C'
31628`void __SMASS (sw1, sw1)'        `__SMASS (A, B)'        `SMASS A,B'
31629`void __SMSSS (sw1, sw1)'        `__SMSSS (A, B)'        `SMSSS A,B'
31630`void __SMU (sw1, sw1)'          `__SMU (A, B)'          `SMU A,B'
31631`sw2 __SMUL (sw1, sw1)'          `C = __SMUL (A, B)'     `SMUL A,B,C'
31632`sw1 __SUBSS (sw1, sw1)'         `C = __SUBSS (A, B)'    `SUBSS A,B,C'
31633`uw2 __UMUL (uw1, uw1)'          `C = __UMUL (A, B)'     `UMUL A,B,C'
31634
31635
31636File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
31637
316386.52.5.3 Directly-mapped Media Functions
31639........................................
31640
31641The functions listed below map directly to FR-V M-type instructions.
31642
31643Function prototype               Example usage           Assembly output
31644`uw1 __MABSHS (sw1)'             `B = __MABSHS (A)'      `MABSHS A,B'
31645`void __MADDACCS (acc, acc)'     `__MADDACCS (B, A)'     `MADDACCS A,B'
31646`sw1 __MADDHSS (sw1, sw1)'       `C = __MADDHSS (A, B)'  `MADDHSS A,B,C'
31647`uw1 __MADDHUS (uw1, uw1)'       `C = __MADDHUS (A, B)'  `MADDHUS A,B,C'
31648`uw1 __MAND (uw1, uw1)'          `C = __MAND (A, B)'     `MAND A,B,C'
31649`void __MASACCS (acc, acc)'      `__MASACCS (B, A)'      `MASACCS A,B'
31650`uw1 __MAVEH (uw1, uw1)'         `C = __MAVEH (A, B)'    `MAVEH A,B,C'
31651`uw2 __MBTOH (uw1)'              `B = __MBTOH (A)'       `MBTOH A,B'
31652`void __MBTOHE (uw1 *, uw1)'     `__MBTOHE (&B, A)'      `MBTOHE A,B'
31653`void __MCLRACC (acc)'           `__MCLRACC (A)'         `MCLRACC A'
31654`void __MCLRACCA (void)'         `__MCLRACCA ()'         `MCLRACCA'
31655`uw1 __Mcop1 (uw1, uw1)'         `C = __Mcop1 (A, B)'    `Mcop1 A,B,C'
31656`uw1 __Mcop2 (uw1, uw1)'         `C = __Mcop2 (A, B)'    `Mcop2 A,B,C'
31657`uw1 __MCPLHI (uw2, const)'      `C = __MCPLHI (A, B)'   `MCPLHI A,#B,C'
31658`uw1 __MCPLI (uw2, const)'       `C = __MCPLI (A, B)'    `MCPLI A,#B,C'
31659`void __MCPXIS (acc, sw1, sw1)'  `__MCPXIS (C, A, B)'    `MCPXIS A,B,C'
31660`void __MCPXIU (acc, uw1, uw1)'  `__MCPXIU (C, A, B)'    `MCPXIU A,B,C'
31661`void __MCPXRS (acc, sw1, sw1)'  `__MCPXRS (C, A, B)'    `MCPXRS A,B,C'
31662`void __MCPXRU (acc, uw1, uw1)'  `__MCPXRU (C, A, B)'    `MCPXRU A,B,C'
31663`uw1 __MCUT (acc, uw1)'          `C = __MCUT (A, B)'     `MCUT A,B,C'
31664`uw1 __MCUTSS (acc, sw1)'        `C = __MCUTSS (A, B)'   `MCUTSS A,B,C'
31665`void __MDADDACCS (acc, acc)'    `__MDADDACCS (B, A)'    `MDADDACCS A,B'
31666`void __MDASACCS (acc, acc)'     `__MDASACCS (B, A)'     `MDASACCS A,B'
31667`uw2 __MDCUTSSI (acc, const)'    `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C'
31668`uw2 __MDPACKH (uw2, uw2)'       `C = __MDPACKH (A, B)'  `MDPACKH A,B,C'
31669`uw2 __MDROTLI (uw2, const)'     `C = __MDROTLI (A, B)'  `MDROTLI A,#B,C'
31670`void __MDSUBACCS (acc, acc)'    `__MDSUBACCS (B, A)'    `MDSUBACCS A,B'
31671`void __MDUNPACKH (uw1 *, uw2)'  `__MDUNPACKH (&B, A)'   `MDUNPACKH A,B'
31672`uw2 __MEXPDHD (uw1, const)'     `C = __MEXPDHD (A, B)'  `MEXPDHD A,#B,C'
31673`uw1 __MEXPDHW (uw1, const)'     `C = __MEXPDHW (A, B)'  `MEXPDHW A,#B,C'
31674`uw1 __MHDSETH (uw1, const)'     `C = __MHDSETH (A, B)'  `MHDSETH A,#B,C'
31675`sw1 __MHDSETS (const)'          `B = __MHDSETS (A)'     `MHDSETS #A,B'
31676`uw1 __MHSETHIH (uw1, const)'    `B = __MHSETHIH (B, A)' `MHSETHIH #A,B'
31677`sw1 __MHSETHIS (sw1, const)'    `B = __MHSETHIS (B, A)' `MHSETHIS #A,B'
31678`uw1 __MHSETLOH (uw1, const)'    `B = __MHSETLOH (B, A)' `MHSETLOH #A,B'
31679`sw1 __MHSETLOS (sw1, const)'    `B = __MHSETLOS (B, A)' `MHSETLOS #A,B'
31680`uw1 __MHTOB (uw2)'              `B = __MHTOB (A)'       `MHTOB A,B'
31681`void __MMACHS (acc, sw1, sw1)'  `__MMACHS (C, A, B)'    `MMACHS A,B,C'
31682`void __MMACHU (acc, uw1, uw1)'  `__MMACHU (C, A, B)'    `MMACHU A,B,C'
31683`void __MMRDHS (acc, sw1, sw1)'  `__MMRDHS (C, A, B)'    `MMRDHS A,B,C'
31684`void __MMRDHU (acc, uw1, uw1)'  `__MMRDHU (C, A, B)'    `MMRDHU A,B,C'
31685`void __MMULHS (acc, sw1, sw1)'  `__MMULHS (C, A, B)'    `MMULHS A,B,C'
31686`void __MMULHU (acc, uw1, uw1)'  `__MMULHU (C, A, B)'    `MMULHU A,B,C'
31687`void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)'   `MMULXHS A,B,C'
31688`void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)'   `MMULXHU A,B,C'
31689`uw1 __MNOT (uw1)'               `B = __MNOT (A)'        `MNOT A,B'
31690`uw1 __MOR (uw1, uw1)'           `C = __MOR (A, B)'      `MOR A,B,C'
31691`uw1 __MPACKH (uh, uh)'          `C = __MPACKH (A, B)'   `MPACKH A,B,C'
31692`sw2 __MQADDHSS (sw2, sw2)'      `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C'
31693`uw2 __MQADDHUS (uw2, uw2)'      `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C'
31694`void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)'   `MQCPXIS A,B,C'
31695`void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)'   `MQCPXIU A,B,C'
31696`void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)'   `MQCPXRS A,B,C'
31697`void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)'   `MQCPXRU A,B,C'
31698`sw2 __MQLCLRHS (sw2, sw2)'      `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C'
31699`sw2 __MQLMTHS (sw2, sw2)'       `C = __MQLMTHS (A, B)'  `MQLMTHS A,B,C'
31700`void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)'   `MQMACHS A,B,C'
31701`void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)'   `MQMACHU A,B,C'
31702`void __MQMACXHS (acc, sw2,      `__MQMACXHS (C, A, B)'  `MQMACXHS A,B,C'
31703sw2)'
31704`void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)'   `MQMULHS A,B,C'
31705`void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)'   `MQMULHU A,B,C'
31706`void __MQMULXHS (acc, sw2,      `__MQMULXHS (C, A, B)'  `MQMULXHS A,B,C'
31707sw2)'
31708`void __MQMULXHU (acc, uw2,      `__MQMULXHU (C, A, B)'  `MQMULXHU A,B,C'
31709uw2)'
31710`sw2 __MQSATHS (sw2, sw2)'       `C = __MQSATHS (A, B)'  `MQSATHS A,B,C'
31711`uw2 __MQSLLHI (uw2, int)'       `C = __MQSLLHI (A, B)'  `MQSLLHI A,B,C'
31712`sw2 __MQSRAHI (sw2, int)'       `C = __MQSRAHI (A, B)'  `MQSRAHI A,B,C'
31713`sw2 __MQSUBHSS (sw2, sw2)'      `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C'
31714`uw2 __MQSUBHUS (uw2, uw2)'      `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C'
31715`void __MQXMACHS (acc, sw2,      `__MQXMACHS (C, A, B)'  `MQXMACHS A,B,C'
31716sw2)'
31717`void __MQXMACXHS (acc, sw2,     `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C'
31718sw2)'
31719`uw1 __MRDACC (acc)'             `B = __MRDACC (A)'      `MRDACC A,B'
31720`uw1 __MRDACCG (acc)'            `B = __MRDACCG (A)'     `MRDACCG A,B'
31721`uw1 __MROTLI (uw1, const)'      `C = __MROTLI (A, B)'   `MROTLI A,#B,C'
31722`uw1 __MROTRI (uw1, const)'      `C = __MROTRI (A, B)'   `MROTRI A,#B,C'
31723`sw1 __MSATHS (sw1, sw1)'        `C = __MSATHS (A, B)'   `MSATHS A,B,C'
31724`uw1 __MSATHU (uw1, uw1)'        `C = __MSATHU (A, B)'   `MSATHU A,B,C'
31725`uw1 __MSLLHI (uw1, const)'      `C = __MSLLHI (A, B)'   `MSLLHI A,#B,C'
31726`sw1 __MSRAHI (sw1, const)'      `C = __MSRAHI (A, B)'   `MSRAHI A,#B,C'
31727`uw1 __MSRLHI (uw1, const)'      `C = __MSRLHI (A, B)'   `MSRLHI A,#B,C'
31728`void __MSUBACCS (acc, acc)'     `__MSUBACCS (B, A)'     `MSUBACCS A,B'
31729`sw1 __MSUBHSS (sw1, sw1)'       `C = __MSUBHSS (A, B)'  `MSUBHSS A,B,C'
31730`uw1 __MSUBHUS (uw1, uw1)'       `C = __MSUBHUS (A, B)'  `MSUBHUS A,B,C'
31731`void __MTRAP (void)'            `__MTRAP ()'            `MTRAP'
31732`uw2 __MUNPACKH (uw1)'           `B = __MUNPACKH (A)'    `MUNPACKH A,B'
31733`uw1 __MWCUT (uw2, uw1)'         `C = __MWCUT (A, B)'    `MWCUT A,B,C'
31734`void __MWTACC (acc, uw1)'       `__MWTACC (B, A)'       `MWTACC A,B'
31735`void __MWTACCG (acc, uw1)'      `__MWTACCG (B, A)'      `MWTACCG A,B'
31736`uw1 __MXOR (uw1, uw1)'          `C = __MXOR (A, B)'     `MXOR A,B,C'
31737
31738
31739File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
31740
317416.52.5.4 Raw read/write Functions
31742.................................
31743
31744This sections describes built-in functions related to read and write
31745instructions to access memory.  These functions generate `membar'
31746instructions to flush the I/O load and stores where appropriate, as
31747described in Fujitsu's manual described above.
31748
31749`unsigned char __builtin_read8 (void *DATA)'
31750
31751`unsigned short __builtin_read16 (void *DATA)'
31752
31753`unsigned long __builtin_read32 (void *DATA)'
31754
31755`unsigned long long __builtin_read64 (void *DATA)'
31756
31757`void __builtin_write8 (void *DATA, unsigned char DATUM)'
31758
31759`void __builtin_write16 (void *DATA, unsigned short DATUM)'
31760
31761`void __builtin_write32 (void *DATA, unsigned long DATUM)'
31762
31763`void __builtin_write64 (void *DATA, unsigned long long DATUM)'
31764
31765
31766File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
31767
317686.52.5.5 Other Built-in Functions
31769.................................
31770
31771This section describes built-in functions that are not named after a
31772specific FR-V instruction.
31773
31774`sw2 __IACCreadll (iacc REG)'
31775     Return the full 64-bit value of IACC0.  The REG argument is
31776     reserved for future expansion and must be 0.
31777
31778`sw1 __IACCreadl (iacc REG)'
31779     Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
31780     Other values of REG are rejected as invalid.
31781
31782`void __IACCsetll (iacc REG, sw2 X)'
31783     Set the full 64-bit value of IACC0 to X.  The REG argument is
31784     reserved for future expansion and must be 0.
31785
31786`void __IACCsetl (iacc REG, sw1 X)'
31787     Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
31788     values of REG are rejected as invalid.
31789
31790`void __data_prefetch0 (const void *X)'
31791     Use the `dcpl' instruction to load the contents of address X into
31792     the data cache.
31793
31794`void __data_prefetch (const void *X)'
31795     Use the `nldub' instruction to load the contents of address X into
31796     the data cache.  The instruction will be issued in slot I1.
31797
31798
31799File: gcc.info,  Node: X86 Built-in Functions,  Next: MIPS DSP Built-in Functions,  Prev: FR-V Built-in Functions,  Up: Target Builtins
31800
318016.52.6 X86 Built-in Functions
31802-----------------------------
31803
31804These built-in functions are available for the i386 and x86-64 family
31805of computers, depending on the command-line switches used.
31806
31807 Note that, if you specify command-line switches such as `-msse', the
31808compiler could use the extended instruction sets even if the built-ins
31809are not used explicitly in the program.  For this reason, applications
31810which perform runtime CPU detection must compile separate files for each
31811supported architecture, using the appropriate flags.  In particular,
31812the file containing the CPU detection code should be compiled without
31813these options.
31814
31815 The following machine modes are available for use with MMX built-in
31816functions (*note Vector Extensions::): `V2SI' for a vector of two
3181732-bit integers, `V4HI' for a vector of four 16-bit integers, and
31818`V8QI' for a vector of eight 8-bit integers.  Some of the built-in
31819functions operate on MMX registers as a whole 64-bit entity, these use
31820`V1DI' as their mode.
31821
31822 If 3DNow! extensions are enabled, `V2SF' is used as a mode for a vector
31823of two 32-bit floating point values.
31824
31825 If SSE extensions are enabled, `V4SF' is used for a vector of four
3182632-bit floating point values.  Some instructions use a vector of four
3182732-bit integers, these use `V4SI'.  Finally, some instructions operate
31828on an entire vector register, interpreting it as a 128-bit integer,
31829these use mode `TI'.
31830
31831 In 64-bit mode, the x86-64 family of processors uses additional
31832built-in functions for efficient use of `TF' (`__float128') 128-bit
31833floating point and `TC' 128-bit complex floating point values.
31834
31835 The following floating point built-in functions are available in 64-bit
31836mode.  All of them implement the function that is part of the name.
31837
31838     __float128 __builtin_fabsq (__float128)
31839     __float128 __builtin_copysignq (__float128, __float128)
31840
31841 The following floating point built-in functions are made available in
31842the 64-bit mode.
31843
31844`__float128 __builtin_infq (void)'
31845     Similar to `__builtin_inf', except the return type is `__float128'.
31846
31847`__float128 __builtin_huge_valq (void)'
31848     Similar to `__builtin_huge_val', except the return type is
31849     `__float128'.
31850
31851 The following built-in functions are made available by `-mmmx'.  All
31852of them generate the machine instruction that is part of the name.
31853
31854     v8qi __builtin_ia32_paddb (v8qi, v8qi)
31855     v4hi __builtin_ia32_paddw (v4hi, v4hi)
31856     v2si __builtin_ia32_paddd (v2si, v2si)
31857     v8qi __builtin_ia32_psubb (v8qi, v8qi)
31858     v4hi __builtin_ia32_psubw (v4hi, v4hi)
31859     v2si __builtin_ia32_psubd (v2si, v2si)
31860     v8qi __builtin_ia32_paddsb (v8qi, v8qi)
31861     v4hi __builtin_ia32_paddsw (v4hi, v4hi)
31862     v8qi __builtin_ia32_psubsb (v8qi, v8qi)
31863     v4hi __builtin_ia32_psubsw (v4hi, v4hi)
31864     v8qi __builtin_ia32_paddusb (v8qi, v8qi)
31865     v4hi __builtin_ia32_paddusw (v4hi, v4hi)
31866     v8qi __builtin_ia32_psubusb (v8qi, v8qi)
31867     v4hi __builtin_ia32_psubusw (v4hi, v4hi)
31868     v4hi __builtin_ia32_pmullw (v4hi, v4hi)
31869     v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
31870     di __builtin_ia32_pand (di, di)
31871     di __builtin_ia32_pandn (di,di)
31872     di __builtin_ia32_por (di, di)
31873     di __builtin_ia32_pxor (di, di)
31874     v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
31875     v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
31876     v2si __builtin_ia32_pcmpeqd (v2si, v2si)
31877     v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
31878     v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
31879     v2si __builtin_ia32_pcmpgtd (v2si, v2si)
31880     v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
31881     v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
31882     v2si __builtin_ia32_punpckhdq (v2si, v2si)
31883     v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
31884     v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
31885     v2si __builtin_ia32_punpckldq (v2si, v2si)
31886     v8qi __builtin_ia32_packsswb (v4hi, v4hi)
31887     v4hi __builtin_ia32_packssdw (v2si, v2si)
31888     v8qi __builtin_ia32_packuswb (v4hi, v4hi)
31889
31890     v4hi __builtin_ia32_psllw (v4hi, v4hi)
31891     v2si __builtin_ia32_pslld (v2si, v2si)
31892     v1di __builtin_ia32_psllq (v1di, v1di)
31893     v4hi __builtin_ia32_psrlw (v4hi, v4hi)
31894     v2si __builtin_ia32_psrld (v2si, v2si)
31895     v1di __builtin_ia32_psrlq (v1di, v1di)
31896     v4hi __builtin_ia32_psraw (v4hi, v4hi)
31897     v2si __builtin_ia32_psrad (v2si, v2si)
31898     v4hi __builtin_ia32_psllwi (v4hi, int)
31899     v2si __builtin_ia32_pslldi (v2si, int)
31900     v1di __builtin_ia32_psllqi (v1di, int)
31901     v4hi __builtin_ia32_psrlwi (v4hi, int)
31902     v2si __builtin_ia32_psrldi (v2si, int)
31903     v1di __builtin_ia32_psrlqi (v1di, int)
31904     v4hi __builtin_ia32_psrawi (v4hi, int)
31905     v2si __builtin_ia32_psradi (v2si, int)
31906
31907 The following built-in functions are made available either with
31908`-msse', or with a combination of `-m3dnow' and `-march=athlon'.  All
31909of them generate the machine instruction that is part of the name.
31910
31911     v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
31912     v8qi __builtin_ia32_pavgb (v8qi, v8qi)
31913     v4hi __builtin_ia32_pavgw (v4hi, v4hi)
31914     v1di __builtin_ia32_psadbw (v8qi, v8qi)
31915     v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
31916     v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
31917     v8qi __builtin_ia32_pminub (v8qi, v8qi)
31918     v4hi __builtin_ia32_pminsw (v4hi, v4hi)
31919     int __builtin_ia32_pextrw (v4hi, int)
31920     v4hi __builtin_ia32_pinsrw (v4hi, int, int)
31921     int __builtin_ia32_pmovmskb (v8qi)
31922     void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
31923     void __builtin_ia32_movntq (di *, di)
31924     void __builtin_ia32_sfence (void)
31925
31926 The following built-in functions are available when `-msse' is used.
31927All of them generate the machine instruction that is part of the name.
31928
31929     int __builtin_ia32_comieq (v4sf, v4sf)
31930     int __builtin_ia32_comineq (v4sf, v4sf)
31931     int __builtin_ia32_comilt (v4sf, v4sf)
31932     int __builtin_ia32_comile (v4sf, v4sf)
31933     int __builtin_ia32_comigt (v4sf, v4sf)
31934     int __builtin_ia32_comige (v4sf, v4sf)
31935     int __builtin_ia32_ucomieq (v4sf, v4sf)
31936     int __builtin_ia32_ucomineq (v4sf, v4sf)
31937     int __builtin_ia32_ucomilt (v4sf, v4sf)
31938     int __builtin_ia32_ucomile (v4sf, v4sf)
31939     int __builtin_ia32_ucomigt (v4sf, v4sf)
31940     int __builtin_ia32_ucomige (v4sf, v4sf)
31941     v4sf __builtin_ia32_addps (v4sf, v4sf)
31942     v4sf __builtin_ia32_subps (v4sf, v4sf)
31943     v4sf __builtin_ia32_mulps (v4sf, v4sf)
31944     v4sf __builtin_ia32_divps (v4sf, v4sf)
31945     v4sf __builtin_ia32_addss (v4sf, v4sf)
31946     v4sf __builtin_ia32_subss (v4sf, v4sf)
31947     v4sf __builtin_ia32_mulss (v4sf, v4sf)
31948     v4sf __builtin_ia32_divss (v4sf, v4sf)
31949     v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
31950     v4si __builtin_ia32_cmpltps (v4sf, v4sf)
31951     v4si __builtin_ia32_cmpleps (v4sf, v4sf)
31952     v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
31953     v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
31954     v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
31955     v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
31956     v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
31957     v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
31958     v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
31959     v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
31960     v4si __builtin_ia32_cmpordps (v4sf, v4sf)
31961     v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
31962     v4si __builtin_ia32_cmpltss (v4sf, v4sf)
31963     v4si __builtin_ia32_cmpless (v4sf, v4sf)
31964     v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
31965     v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
31966     v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
31967     v4si __builtin_ia32_cmpnless (v4sf, v4sf)
31968     v4si __builtin_ia32_cmpordss (v4sf, v4sf)
31969     v4sf __builtin_ia32_maxps (v4sf, v4sf)
31970     v4sf __builtin_ia32_maxss (v4sf, v4sf)
31971     v4sf __builtin_ia32_minps (v4sf, v4sf)
31972     v4sf __builtin_ia32_minss (v4sf, v4sf)
31973     v4sf __builtin_ia32_andps (v4sf, v4sf)
31974     v4sf __builtin_ia32_andnps (v4sf, v4sf)
31975     v4sf __builtin_ia32_orps (v4sf, v4sf)
31976     v4sf __builtin_ia32_xorps (v4sf, v4sf)
31977     v4sf __builtin_ia32_movss (v4sf, v4sf)
31978     v4sf __builtin_ia32_movhlps (v4sf, v4sf)
31979     v4sf __builtin_ia32_movlhps (v4sf, v4sf)
31980     v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
31981     v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
31982     v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
31983     v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
31984     v2si __builtin_ia32_cvtps2pi (v4sf)
31985     int __builtin_ia32_cvtss2si (v4sf)
31986     v2si __builtin_ia32_cvttps2pi (v4sf)
31987     int __builtin_ia32_cvttss2si (v4sf)
31988     v4sf __builtin_ia32_rcpps (v4sf)
31989     v4sf __builtin_ia32_rsqrtps (v4sf)
31990     v4sf __builtin_ia32_sqrtps (v4sf)
31991     v4sf __builtin_ia32_rcpss (v4sf)
31992     v4sf __builtin_ia32_rsqrtss (v4sf)
31993     v4sf __builtin_ia32_sqrtss (v4sf)
31994     v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
31995     void __builtin_ia32_movntps (float *, v4sf)
31996     int __builtin_ia32_movmskps (v4sf)
31997
31998 The following built-in functions are available when `-msse' is used.
31999
32000`v4sf __builtin_ia32_loadaps (float *)'
32001     Generates the `movaps' machine instruction as a load from memory.
32002
32003`void __builtin_ia32_storeaps (float *, v4sf)'
32004     Generates the `movaps' machine instruction as a store to memory.
32005
32006`v4sf __builtin_ia32_loadups (float *)'
32007     Generates the `movups' machine instruction as a load from memory.
32008
32009`void __builtin_ia32_storeups (float *, v4sf)'
32010     Generates the `movups' machine instruction as a store to memory.
32011
32012`v4sf __builtin_ia32_loadsss (float *)'
32013     Generates the `movss' machine instruction as a load from memory.
32014
32015`void __builtin_ia32_storess (float *, v4sf)'
32016     Generates the `movss' machine instruction as a store to memory.
32017
32018`v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)'
32019     Generates the `movhps' machine instruction as a load from memory.
32020
32021`v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)'
32022     Generates the `movlps' machine instruction as a load from memory
32023
32024`void __builtin_ia32_storehps (v2sf *, v4sf)'
32025     Generates the `movhps' machine instruction as a store to memory.
32026
32027`void __builtin_ia32_storelps (v2sf *, v4sf)'
32028     Generates the `movlps' machine instruction as a store to memory.
32029
32030 The following built-in functions are available when `-msse2' is used.
32031All of them generate the machine instruction that is part of the name.
32032
32033     int __builtin_ia32_comisdeq (v2df, v2df)
32034     int __builtin_ia32_comisdlt (v2df, v2df)
32035     int __builtin_ia32_comisdle (v2df, v2df)
32036     int __builtin_ia32_comisdgt (v2df, v2df)
32037     int __builtin_ia32_comisdge (v2df, v2df)
32038     int __builtin_ia32_comisdneq (v2df, v2df)
32039     int __builtin_ia32_ucomisdeq (v2df, v2df)
32040     int __builtin_ia32_ucomisdlt (v2df, v2df)
32041     int __builtin_ia32_ucomisdle (v2df, v2df)
32042     int __builtin_ia32_ucomisdgt (v2df, v2df)
32043     int __builtin_ia32_ucomisdge (v2df, v2df)
32044     int __builtin_ia32_ucomisdneq (v2df, v2df)
32045     v2df __builtin_ia32_cmpeqpd (v2df, v2df)
32046     v2df __builtin_ia32_cmpltpd (v2df, v2df)
32047     v2df __builtin_ia32_cmplepd (v2df, v2df)
32048     v2df __builtin_ia32_cmpgtpd (v2df, v2df)
32049     v2df __builtin_ia32_cmpgepd (v2df, v2df)
32050     v2df __builtin_ia32_cmpunordpd (v2df, v2df)
32051     v2df __builtin_ia32_cmpneqpd (v2df, v2df)
32052     v2df __builtin_ia32_cmpnltpd (v2df, v2df)
32053     v2df __builtin_ia32_cmpnlepd (v2df, v2df)
32054     v2df __builtin_ia32_cmpngtpd (v2df, v2df)
32055     v2df __builtin_ia32_cmpngepd (v2df, v2df)
32056     v2df __builtin_ia32_cmpordpd (v2df, v2df)
32057     v2df __builtin_ia32_cmpeqsd (v2df, v2df)
32058     v2df __builtin_ia32_cmpltsd (v2df, v2df)
32059     v2df __builtin_ia32_cmplesd (v2df, v2df)
32060     v2df __builtin_ia32_cmpunordsd (v2df, v2df)
32061     v2df __builtin_ia32_cmpneqsd (v2df, v2df)
32062     v2df __builtin_ia32_cmpnltsd (v2df, v2df)
32063     v2df __builtin_ia32_cmpnlesd (v2df, v2df)
32064     v2df __builtin_ia32_cmpordsd (v2df, v2df)
32065     v2di __builtin_ia32_paddq (v2di, v2di)
32066     v2di __builtin_ia32_psubq (v2di, v2di)
32067     v2df __builtin_ia32_addpd (v2df, v2df)
32068     v2df __builtin_ia32_subpd (v2df, v2df)
32069     v2df __builtin_ia32_mulpd (v2df, v2df)
32070     v2df __builtin_ia32_divpd (v2df, v2df)
32071     v2df __builtin_ia32_addsd (v2df, v2df)
32072     v2df __builtin_ia32_subsd (v2df, v2df)
32073     v2df __builtin_ia32_mulsd (v2df, v2df)
32074     v2df __builtin_ia32_divsd (v2df, v2df)
32075     v2df __builtin_ia32_minpd (v2df, v2df)
32076     v2df __builtin_ia32_maxpd (v2df, v2df)
32077     v2df __builtin_ia32_minsd (v2df, v2df)
32078     v2df __builtin_ia32_maxsd (v2df, v2df)
32079     v2df __builtin_ia32_andpd (v2df, v2df)
32080     v2df __builtin_ia32_andnpd (v2df, v2df)
32081     v2df __builtin_ia32_orpd (v2df, v2df)
32082     v2df __builtin_ia32_xorpd (v2df, v2df)
32083     v2df __builtin_ia32_movsd (v2df, v2df)
32084     v2df __builtin_ia32_unpckhpd (v2df, v2df)
32085     v2df __builtin_ia32_unpcklpd (v2df, v2df)
32086     v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
32087     v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
32088     v4si __builtin_ia32_paddd128 (v4si, v4si)
32089     v2di __builtin_ia32_paddq128 (v2di, v2di)
32090     v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
32091     v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
32092     v4si __builtin_ia32_psubd128 (v4si, v4si)
32093     v2di __builtin_ia32_psubq128 (v2di, v2di)
32094     v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
32095     v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
32096     v2di __builtin_ia32_pand128 (v2di, v2di)
32097     v2di __builtin_ia32_pandn128 (v2di, v2di)
32098     v2di __builtin_ia32_por128 (v2di, v2di)
32099     v2di __builtin_ia32_pxor128 (v2di, v2di)
32100     v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
32101     v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
32102     v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
32103     v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
32104     v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
32105     v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
32106     v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
32107     v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
32108     v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
32109     v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
32110     v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
32111     v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
32112     v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
32113     v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
32114     v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
32115     v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
32116     v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
32117     v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
32118     v4si __builtin_ia32_punpckldq128 (v4si, v4si)
32119     v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
32120     v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
32121     v8hi __builtin_ia32_packssdw128 (v4si, v4si)
32122     v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
32123     v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
32124     void __builtin_ia32_maskmovdqu (v16qi, v16qi)
32125     v2df __builtin_ia32_loadupd (double *)
32126     void __builtin_ia32_storeupd (double *, v2df)
32127     v2df __builtin_ia32_loadhpd (v2df, double const *)
32128     v2df __builtin_ia32_loadlpd (v2df, double const *)
32129     int __builtin_ia32_movmskpd (v2df)
32130     int __builtin_ia32_pmovmskb128 (v16qi)
32131     void __builtin_ia32_movnti (int *, int)
32132     void __builtin_ia32_movntpd (double *, v2df)
32133     void __builtin_ia32_movntdq (v2df *, v2df)
32134     v4si __builtin_ia32_pshufd (v4si, int)
32135     v8hi __builtin_ia32_pshuflw (v8hi, int)
32136     v8hi __builtin_ia32_pshufhw (v8hi, int)
32137     v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
32138     v2df __builtin_ia32_sqrtpd (v2df)
32139     v2df __builtin_ia32_sqrtsd (v2df)
32140     v2df __builtin_ia32_shufpd (v2df, v2df, int)
32141     v2df __builtin_ia32_cvtdq2pd (v4si)
32142     v4sf __builtin_ia32_cvtdq2ps (v4si)
32143     v4si __builtin_ia32_cvtpd2dq (v2df)
32144     v2si __builtin_ia32_cvtpd2pi (v2df)
32145     v4sf __builtin_ia32_cvtpd2ps (v2df)
32146     v4si __builtin_ia32_cvttpd2dq (v2df)
32147     v2si __builtin_ia32_cvttpd2pi (v2df)
32148     v2df __builtin_ia32_cvtpi2pd (v2si)
32149     int __builtin_ia32_cvtsd2si (v2df)
32150     int __builtin_ia32_cvttsd2si (v2df)
32151     long long __builtin_ia32_cvtsd2si64 (v2df)
32152     long long __builtin_ia32_cvttsd2si64 (v2df)
32153     v4si __builtin_ia32_cvtps2dq (v4sf)
32154     v2df __builtin_ia32_cvtps2pd (v4sf)
32155     v4si __builtin_ia32_cvttps2dq (v4sf)
32156     v2df __builtin_ia32_cvtsi2sd (v2df, int)
32157     v2df __builtin_ia32_cvtsi642sd (v2df, long long)
32158     v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
32159     v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
32160     void __builtin_ia32_clflush (const void *)
32161     void __builtin_ia32_lfence (void)
32162     void __builtin_ia32_mfence (void)
32163     v16qi __builtin_ia32_loaddqu (const char *)
32164     void __builtin_ia32_storedqu (char *, v16qi)
32165     v1di __builtin_ia32_pmuludq (v2si, v2si)
32166     v2di __builtin_ia32_pmuludq128 (v4si, v4si)
32167     v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
32168     v4si __builtin_ia32_pslld128 (v4si, v4si)
32169     v2di __builtin_ia32_psllq128 (v2di, v2di)
32170     v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
32171     v4si __builtin_ia32_psrld128 (v4si, v4si)
32172     v2di __builtin_ia32_psrlq128 (v2di, v2di)
32173     v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
32174     v4si __builtin_ia32_psrad128 (v4si, v4si)
32175     v2di __builtin_ia32_pslldqi128 (v2di, int)
32176     v8hi __builtin_ia32_psllwi128 (v8hi, int)
32177     v4si __builtin_ia32_pslldi128 (v4si, int)
32178     v2di __builtin_ia32_psllqi128 (v2di, int)
32179     v2di __builtin_ia32_psrldqi128 (v2di, int)
32180     v8hi __builtin_ia32_psrlwi128 (v8hi, int)
32181     v4si __builtin_ia32_psrldi128 (v4si, int)
32182     v2di __builtin_ia32_psrlqi128 (v2di, int)
32183     v8hi __builtin_ia32_psrawi128 (v8hi, int)
32184     v4si __builtin_ia32_psradi128 (v4si, int)
32185     v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
32186     v2di __builtin_ia32_movq128 (v2di)
32187
32188 The following built-in functions are available when `-msse3' is used.
32189All of them generate the machine instruction that is part of the name.
32190
32191     v2df __builtin_ia32_addsubpd (v2df, v2df)
32192     v4sf __builtin_ia32_addsubps (v4sf, v4sf)
32193     v2df __builtin_ia32_haddpd (v2df, v2df)
32194     v4sf __builtin_ia32_haddps (v4sf, v4sf)
32195     v2df __builtin_ia32_hsubpd (v2df, v2df)
32196     v4sf __builtin_ia32_hsubps (v4sf, v4sf)
32197     v16qi __builtin_ia32_lddqu (char const *)
32198     void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
32199     v2df __builtin_ia32_movddup (v2df)
32200     v4sf __builtin_ia32_movshdup (v4sf)
32201     v4sf __builtin_ia32_movsldup (v4sf)
32202     void __builtin_ia32_mwait (unsigned int, unsigned int)
32203
32204 The following built-in functions are available when `-msse3' is used.
32205
32206`v2df __builtin_ia32_loadddup (double const *)'
32207     Generates the `movddup' machine instruction as a load from memory.
32208
32209 The following built-in functions are available when `-mssse3' is used.
32210All of them generate the machine instruction that is part of the name
32211with MMX registers.
32212
32213     v2si __builtin_ia32_phaddd (v2si, v2si)
32214     v4hi __builtin_ia32_phaddw (v4hi, v4hi)
32215     v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
32216     v2si __builtin_ia32_phsubd (v2si, v2si)
32217     v4hi __builtin_ia32_phsubw (v4hi, v4hi)
32218     v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
32219     v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
32220     v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
32221     v8qi __builtin_ia32_pshufb (v8qi, v8qi)
32222     v8qi __builtin_ia32_psignb (v8qi, v8qi)
32223     v2si __builtin_ia32_psignd (v2si, v2si)
32224     v4hi __builtin_ia32_psignw (v4hi, v4hi)
32225     v1di __builtin_ia32_palignr (v1di, v1di, int)
32226     v8qi __builtin_ia32_pabsb (v8qi)
32227     v2si __builtin_ia32_pabsd (v2si)
32228     v4hi __builtin_ia32_pabsw (v4hi)
32229
32230 The following built-in functions are available when `-mssse3' is used.
32231All of them generate the machine instruction that is part of the name
32232with SSE registers.
32233
32234     v4si __builtin_ia32_phaddd128 (v4si, v4si)
32235     v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
32236     v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
32237     v4si __builtin_ia32_phsubd128 (v4si, v4si)
32238     v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
32239     v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
32240     v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
32241     v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
32242     v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
32243     v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
32244     v4si __builtin_ia32_psignd128 (v4si, v4si)
32245     v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
32246     v2di __builtin_ia32_palignr128 (v2di, v2di, int)
32247     v16qi __builtin_ia32_pabsb128 (v16qi)
32248     v4si __builtin_ia32_pabsd128 (v4si)
32249     v8hi __builtin_ia32_pabsw128 (v8hi)
32250
32251 The following built-in functions are available when `-msse4.1' is
32252used.  All of them generate the machine instruction that is part of the
32253name.
32254
32255     v2df __builtin_ia32_blendpd (v2df, v2df, const int)
32256     v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
32257     v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
32258     v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
32259     v2df __builtin_ia32_dppd (v2df, v2df, const int)
32260     v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
32261     v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
32262     v2di __builtin_ia32_movntdqa (v2di *);
32263     v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
32264     v8hi __builtin_ia32_packusdw128 (v4si, v4si)
32265     v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
32266     v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
32267     v2di __builtin_ia32_pcmpeqq (v2di, v2di)
32268     v8hi __builtin_ia32_phminposuw128 (v8hi)
32269     v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
32270     v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
32271     v4si __builtin_ia32_pmaxud128 (v4si, v4si)
32272     v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
32273     v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
32274     v4si __builtin_ia32_pminsd128 (v4si, v4si)
32275     v4si __builtin_ia32_pminud128 (v4si, v4si)
32276     v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
32277     v4si __builtin_ia32_pmovsxbd128 (v16qi)
32278     v2di __builtin_ia32_pmovsxbq128 (v16qi)
32279     v8hi __builtin_ia32_pmovsxbw128 (v16qi)
32280     v2di __builtin_ia32_pmovsxdq128 (v4si)
32281     v4si __builtin_ia32_pmovsxwd128 (v8hi)
32282     v2di __builtin_ia32_pmovsxwq128 (v8hi)
32283     v4si __builtin_ia32_pmovzxbd128 (v16qi)
32284     v2di __builtin_ia32_pmovzxbq128 (v16qi)
32285     v8hi __builtin_ia32_pmovzxbw128 (v16qi)
32286     v2di __builtin_ia32_pmovzxdq128 (v4si)
32287     v4si __builtin_ia32_pmovzxwd128 (v8hi)
32288     v2di __builtin_ia32_pmovzxwq128 (v8hi)
32289     v2di __builtin_ia32_pmuldq128 (v4si, v4si)
32290     v4si __builtin_ia32_pmulld128 (v4si, v4si)
32291     int __builtin_ia32_ptestc128 (v2di, v2di)
32292     int __builtin_ia32_ptestnzc128 (v2di, v2di)
32293     int __builtin_ia32_ptestz128 (v2di, v2di)
32294     v2df __builtin_ia32_roundpd (v2df, const int)
32295     v4sf __builtin_ia32_roundps (v4sf, const int)
32296     v2df __builtin_ia32_roundsd (v2df, v2df, const int)
32297     v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
32298
32299 The following built-in functions are available when `-msse4.1' is used.
32300
32301`v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)'
32302     Generates the `insertps' machine instruction.
32303
32304`int __builtin_ia32_vec_ext_v16qi (v16qi, const int)'
32305     Generates the `pextrb' machine instruction.
32306
32307`v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)'
32308     Generates the `pinsrb' machine instruction.
32309
32310`v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)'
32311     Generates the `pinsrd' machine instruction.
32312
32313`v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)'
32314     Generates the `pinsrq' machine instruction in 64bit mode.
32315
32316 The following built-in functions are changed to generate new SSE4.1
32317instructions when `-msse4.1' is used.
32318
32319`float __builtin_ia32_vec_ext_v4sf (v4sf, const int)'
32320     Generates the `extractps' machine instruction.
32321
32322`int __builtin_ia32_vec_ext_v4si (v4si, const int)'
32323     Generates the `pextrd' machine instruction.
32324
32325`long long __builtin_ia32_vec_ext_v2di (v2di, const int)'
32326     Generates the `pextrq' machine instruction in 64bit mode.
32327
32328 The following built-in functions are available when `-msse4.2' is
32329used.  All of them generate the machine instruction that is part of the
32330name.
32331
32332     v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
32333     int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
32334     int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
32335     int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
32336     int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
32337     int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
32338     int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
32339     v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
32340     int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
32341     int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
32342     int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
32343     int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
32344     int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
32345     int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
32346     v2di __builtin_ia32_pcmpgtq (v2di, v2di)
32347
32348 The following built-in functions are available when `-msse4.2' is used.
32349
32350`unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)'
32351     Generates the `crc32b' machine instruction.
32352
32353`unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)'
32354     Generates the `crc32w' machine instruction.
32355
32356`unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)'
32357     Generates the `crc32l' machine instruction.
32358
32359`unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)'
32360     Generates the `crc32q' machine instruction.
32361
32362 The following built-in functions are changed to generate new SSE4.2
32363instructions when `-msse4.2' is used.
32364
32365`int __builtin_popcount (unsigned int)'
32366     Generates the `popcntl' machine instruction.
32367
32368`int __builtin_popcountl (unsigned long)'
32369     Generates the `popcntl' or `popcntq' machine instruction,
32370     depending on the size of `unsigned long'.
32371
32372`int __builtin_popcountll (unsigned long long)'
32373     Generates the `popcntq' machine instruction.
32374
32375 The following built-in functions are available when `-mavx' is used.
32376All of them generate the machine instruction that is part of the name.
32377
32378     v4df __builtin_ia32_addpd256 (v4df,v4df)
32379     v8sf __builtin_ia32_addps256 (v8sf,v8sf)
32380     v4df __builtin_ia32_addsubpd256 (v4df,v4df)
32381     v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
32382     v4df __builtin_ia32_andnpd256 (v4df,v4df)
32383     v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
32384     v4df __builtin_ia32_andpd256 (v4df,v4df)
32385     v8sf __builtin_ia32_andps256 (v8sf,v8sf)
32386     v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
32387     v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
32388     v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
32389     v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
32390     v2df __builtin_ia32_cmppd (v2df,v2df,int)
32391     v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
32392     v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
32393     v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
32394     v2df __builtin_ia32_cmpsd (v2df,v2df,int)
32395     v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
32396     v4df __builtin_ia32_cvtdq2pd256 (v4si)
32397     v8sf __builtin_ia32_cvtdq2ps256 (v8si)
32398     v4si __builtin_ia32_cvtpd2dq256 (v4df)
32399     v4sf __builtin_ia32_cvtpd2ps256 (v4df)
32400     v8si __builtin_ia32_cvtps2dq256 (v8sf)
32401     v4df __builtin_ia32_cvtps2pd256 (v4sf)
32402     v4si __builtin_ia32_cvttpd2dq256 (v4df)
32403     v8si __builtin_ia32_cvttps2dq256 (v8sf)
32404     v4df __builtin_ia32_divpd256 (v4df,v4df)
32405     v8sf __builtin_ia32_divps256 (v8sf,v8sf)
32406     v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
32407     v4df __builtin_ia32_haddpd256 (v4df,v4df)
32408     v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
32409     v4df __builtin_ia32_hsubpd256 (v4df,v4df)
32410     v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
32411     v32qi __builtin_ia32_lddqu256 (pcchar)
32412     v32qi __builtin_ia32_loaddqu256 (pcchar)
32413     v4df __builtin_ia32_loadupd256 (pcdouble)
32414     v8sf __builtin_ia32_loadups256 (pcfloat)
32415     v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
32416     v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
32417     v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
32418     v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
32419     void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
32420     void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
32421     void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
32422     void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
32423     v4df __builtin_ia32_maxpd256 (v4df,v4df)
32424     v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
32425     v4df __builtin_ia32_minpd256 (v4df,v4df)
32426     v8sf __builtin_ia32_minps256 (v8sf,v8sf)
32427     v4df __builtin_ia32_movddup256 (v4df)
32428     int __builtin_ia32_movmskpd256 (v4df)
32429     int __builtin_ia32_movmskps256 (v8sf)
32430     v8sf __builtin_ia32_movshdup256 (v8sf)
32431     v8sf __builtin_ia32_movsldup256 (v8sf)
32432     v4df __builtin_ia32_mulpd256 (v4df,v4df)
32433     v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
32434     v4df __builtin_ia32_orpd256 (v4df,v4df)
32435     v8sf __builtin_ia32_orps256 (v8sf,v8sf)
32436     v2df __builtin_ia32_pd_pd256 (v4df)
32437     v4df __builtin_ia32_pd256_pd (v2df)
32438     v4sf __builtin_ia32_ps_ps256 (v8sf)
32439     v8sf __builtin_ia32_ps256_ps (v4sf)
32440     int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
32441     int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
32442     int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
32443     v8sf __builtin_ia32_rcpps256 (v8sf)
32444     v4df __builtin_ia32_roundpd256 (v4df,int)
32445     v8sf __builtin_ia32_roundps256 (v8sf,int)
32446     v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
32447     v8sf __builtin_ia32_rsqrtps256 (v8sf)
32448     v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
32449     v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
32450     v4si __builtin_ia32_si_si256 (v8si)
32451     v8si __builtin_ia32_si256_si (v4si)
32452     v4df __builtin_ia32_sqrtpd256 (v4df)
32453     v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
32454     v8sf __builtin_ia32_sqrtps256 (v8sf)
32455     void __builtin_ia32_storedqu256 (pchar,v32qi)
32456     void __builtin_ia32_storeupd256 (pdouble,v4df)
32457     void __builtin_ia32_storeups256 (pfloat,v8sf)
32458     v4df __builtin_ia32_subpd256 (v4df,v4df)
32459     v8sf __builtin_ia32_subps256 (v8sf,v8sf)
32460     v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
32461     v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
32462     v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
32463     v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
32464     v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
32465     v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
32466     v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
32467     v4sf __builtin_ia32_vbroadcastss (pcfloat)
32468     v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
32469     v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
32470     v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
32471     v4si __builtin_ia32_vextractf128_si256 (v8si,int)
32472     v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
32473     v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
32474     v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
32475     v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
32476     v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
32477     v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
32478     v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
32479     v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
32480     v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
32481     v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
32482     v2df __builtin_ia32_vpermilpd (v2df,int)
32483     v4df __builtin_ia32_vpermilpd256 (v4df,int)
32484     v4sf __builtin_ia32_vpermilps (v4sf,int)
32485     v8sf __builtin_ia32_vpermilps256 (v8sf,int)
32486     v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
32487     v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
32488     v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
32489     v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
32490     int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
32491     int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
32492     int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
32493     int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
32494     int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
32495     int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
32496     int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
32497     int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
32498     int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
32499     int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
32500     int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
32501     int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
32502     void __builtin_ia32_vzeroall (void)
32503     void __builtin_ia32_vzeroupper (void)
32504     v4df __builtin_ia32_xorpd256 (v4df,v4df)
32505     v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
32506
32507 The following built-in functions are available when `-maes' is used.
32508All of them generate the machine instruction that is part of the name.
32509
32510     v2di __builtin_ia32_aesenc128 (v2di, v2di)
32511     v2di __builtin_ia32_aesenclast128 (v2di, v2di)
32512     v2di __builtin_ia32_aesdec128 (v2di, v2di)
32513     v2di __builtin_ia32_aesdeclast128 (v2di, v2di)
32514     v2di __builtin_ia32_aeskeygenassist128 (v2di, const int)
32515     v2di __builtin_ia32_aesimc128 (v2di)
32516
32517 The following built-in function is available when `-mpclmul' is used.
32518
32519`v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)'
32520     Generates the `pclmulqdq' machine instruction.
32521
32522 The following built-in functions are available when `-msse4a' is used.
32523All of them generate the machine instruction that is part of the name.
32524
32525     void __builtin_ia32_movntsd (double *, v2df)
32526     void __builtin_ia32_movntss (float *, v4sf)
32527     v2di __builtin_ia32_extrq  (v2di, v16qi)
32528     v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int)
32529     v2di __builtin_ia32_insertq (v2di, v2di)
32530     v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int)
32531
32532 The following built-in functions are available when `-mxop' is used.
32533     v2df __builtin_ia32_vfrczpd (v2df)
32534     v4sf __builtin_ia32_vfrczps (v4sf)
32535     v2df __builtin_ia32_vfrczsd (v2df, v2df)
32536     v4sf __builtin_ia32_vfrczss (v4sf, v4sf)
32537     v4df __builtin_ia32_vfrczpd256 (v4df)
32538     v8sf __builtin_ia32_vfrczps256 (v8sf)
32539     v2di __builtin_ia32_vpcmov (v2di, v2di, v2di)
32540     v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di)
32541     v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si)
32542     v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi)
32543     v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi)
32544     v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df)
32545     v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf)
32546     v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di)
32547     v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si)
32548     v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi)
32549     v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi)
32550     v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df)
32551     v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf)
32552     v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi)
32553     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
32554     v4si __builtin_ia32_vpcomeqd (v4si, v4si)
32555     v2di __builtin_ia32_vpcomeqq (v2di, v2di)
32556     v16qi __builtin_ia32_vpcomequb (v16qi, v16qi)
32557     v4si __builtin_ia32_vpcomequd (v4si, v4si)
32558     v2di __builtin_ia32_vpcomequq (v2di, v2di)
32559     v8hi __builtin_ia32_vpcomequw (v8hi, v8hi)
32560     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
32561     v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi)
32562     v4si __builtin_ia32_vpcomfalsed (v4si, v4si)
32563     v2di __builtin_ia32_vpcomfalseq (v2di, v2di)
32564     v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi)
32565     v4si __builtin_ia32_vpcomfalseud (v4si, v4si)
32566     v2di __builtin_ia32_vpcomfalseuq (v2di, v2di)
32567     v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi)
32568     v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi)
32569     v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi)
32570     v4si __builtin_ia32_vpcomged (v4si, v4si)
32571     v2di __builtin_ia32_vpcomgeq (v2di, v2di)
32572     v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi)
32573     v4si __builtin_ia32_vpcomgeud (v4si, v4si)
32574     v2di __builtin_ia32_vpcomgeuq (v2di, v2di)
32575     v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi)
32576     v8hi __builtin_ia32_vpcomgew (v8hi, v8hi)
32577     v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi)
32578     v4si __builtin_ia32_vpcomgtd (v4si, v4si)
32579     v2di __builtin_ia32_vpcomgtq (v2di, v2di)
32580     v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi)
32581     v4si __builtin_ia32_vpcomgtud (v4si, v4si)
32582     v2di __builtin_ia32_vpcomgtuq (v2di, v2di)
32583     v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi)
32584     v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi)
32585     v16qi __builtin_ia32_vpcomleb (v16qi, v16qi)
32586     v4si __builtin_ia32_vpcomled (v4si, v4si)
32587     v2di __builtin_ia32_vpcomleq (v2di, v2di)
32588     v16qi __builtin_ia32_vpcomleub (v16qi, v16qi)
32589     v4si __builtin_ia32_vpcomleud (v4si, v4si)
32590     v2di __builtin_ia32_vpcomleuq (v2di, v2di)
32591     v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi)
32592     v8hi __builtin_ia32_vpcomlew (v8hi, v8hi)
32593     v16qi __builtin_ia32_vpcomltb (v16qi, v16qi)
32594     v4si __builtin_ia32_vpcomltd (v4si, v4si)
32595     v2di __builtin_ia32_vpcomltq (v2di, v2di)
32596     v16qi __builtin_ia32_vpcomltub (v16qi, v16qi)
32597     v4si __builtin_ia32_vpcomltud (v4si, v4si)
32598     v2di __builtin_ia32_vpcomltuq (v2di, v2di)
32599     v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi)
32600     v8hi __builtin_ia32_vpcomltw (v8hi, v8hi)
32601     v16qi __builtin_ia32_vpcomneb (v16qi, v16qi)
32602     v4si __builtin_ia32_vpcomned (v4si, v4si)
32603     v2di __builtin_ia32_vpcomneq (v2di, v2di)
32604     v16qi __builtin_ia32_vpcomneub (v16qi, v16qi)
32605     v4si __builtin_ia32_vpcomneud (v4si, v4si)
32606     v2di __builtin_ia32_vpcomneuq (v2di, v2di)
32607     v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi)
32608     v8hi __builtin_ia32_vpcomnew (v8hi, v8hi)
32609     v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi)
32610     v4si __builtin_ia32_vpcomtrued (v4si, v4si)
32611     v2di __builtin_ia32_vpcomtrueq (v2di, v2di)
32612     v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi)
32613     v4si __builtin_ia32_vpcomtrueud (v4si, v4si)
32614     v2di __builtin_ia32_vpcomtrueuq (v2di, v2di)
32615     v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi)
32616     v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi)
32617     v4si __builtin_ia32_vphaddbd (v16qi)
32618     v2di __builtin_ia32_vphaddbq (v16qi)
32619     v8hi __builtin_ia32_vphaddbw (v16qi)
32620     v2di __builtin_ia32_vphadddq (v4si)
32621     v4si __builtin_ia32_vphaddubd (v16qi)
32622     v2di __builtin_ia32_vphaddubq (v16qi)
32623     v8hi __builtin_ia32_vphaddubw (v16qi)
32624     v2di __builtin_ia32_vphaddudq (v4si)
32625     v4si __builtin_ia32_vphadduwd (v8hi)
32626     v2di __builtin_ia32_vphadduwq (v8hi)
32627     v4si __builtin_ia32_vphaddwd (v8hi)
32628     v2di __builtin_ia32_vphaddwq (v8hi)
32629     v8hi __builtin_ia32_vphsubbw (v16qi)
32630     v2di __builtin_ia32_vphsubdq (v4si)
32631     v4si __builtin_ia32_vphsubwd (v8hi)
32632     v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si)
32633     v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di)
32634     v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di)
32635     v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si)
32636     v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di)
32637     v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di)
32638     v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si)
32639     v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi)
32640     v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si)
32641     v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi)
32642     v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si)
32643     v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si)
32644     v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi)
32645     v16qi __builtin_ia32_vprotb (v16qi, v16qi)
32646     v4si __builtin_ia32_vprotd (v4si, v4si)
32647     v2di __builtin_ia32_vprotq (v2di, v2di)
32648     v8hi __builtin_ia32_vprotw (v8hi, v8hi)
32649     v16qi __builtin_ia32_vpshab (v16qi, v16qi)
32650     v4si __builtin_ia32_vpshad (v4si, v4si)
32651     v2di __builtin_ia32_vpshaq (v2di, v2di)
32652     v8hi __builtin_ia32_vpshaw (v8hi, v8hi)
32653     v16qi __builtin_ia32_vpshlb (v16qi, v16qi)
32654     v4si __builtin_ia32_vpshld (v4si, v4si)
32655     v2di __builtin_ia32_vpshlq (v2di, v2di)
32656     v8hi __builtin_ia32_vpshlw (v8hi, v8hi)
32657
32658 The following built-in functions are available when `-mfma4' is used.
32659All of them generate the machine instruction that is part of the name
32660with MMX registers.
32661
32662     v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df)
32663     v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf)
32664     v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df)
32665     v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf)
32666     v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df)
32667     v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf)
32668     v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df)
32669     v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf)
32670     v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df)
32671     v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf)
32672     v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df)
32673     v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf)
32674     v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df)
32675     v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf)
32676     v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df)
32677     v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf)
32678     v2df __builtin_ia32_fmaddsubpd  (v2df, v2df, v2df)
32679     v4sf __builtin_ia32_fmaddsubps  (v4sf, v4sf, v4sf)
32680     v2df __builtin_ia32_fmsubaddpd  (v2df, v2df, v2df)
32681     v4sf __builtin_ia32_fmsubaddps  (v4sf, v4sf, v4sf)
32682     v4df __builtin_ia32_fmaddpd256 (v4df, v4df, v4df)
32683     v8sf __builtin_ia32_fmaddps256 (v8sf, v8sf, v8sf)
32684     v4df __builtin_ia32_fmsubpd256 (v4df, v4df, v4df)
32685     v8sf __builtin_ia32_fmsubps256 (v8sf, v8sf, v8sf)
32686     v4df __builtin_ia32_fnmaddpd256 (v4df, v4df, v4df)
32687     v8sf __builtin_ia32_fnmaddps256 (v8sf, v8sf, v8sf)
32688     v4df __builtin_ia32_fnmsubpd256 (v4df, v4df, v4df)
32689     v8sf __builtin_ia32_fnmsubps256 (v8sf, v8sf, v8sf)
32690     v4df __builtin_ia32_fmaddsubpd256 (v4df, v4df, v4df)
32691     v8sf __builtin_ia32_fmaddsubps256 (v8sf, v8sf, v8sf)
32692     v4df __builtin_ia32_fmsubaddpd256 (v4df, v4df, v4df)
32693     v8sf __builtin_ia32_fmsubaddps256 (v8sf, v8sf, v8sf)
32694
32695 The following built-in functions are available when `-mlwp' is used.
32696
32697     void __builtin_ia32_llwpcb16 (void *);
32698     void __builtin_ia32_llwpcb32 (void *);
32699     void __builtin_ia32_llwpcb64 (void *);
32700     void * __builtin_ia32_llwpcb16 (void);
32701     void * __builtin_ia32_llwpcb32 (void);
32702     void * __builtin_ia32_llwpcb64 (void);
32703     void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short)
32704     void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int)
32705     void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int)
32706     unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short)
32707     unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int)
32708     unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int)
32709
32710 The following built-in functions are available when `-m3dnow' is used.
32711All of them generate the machine instruction that is part of the name.
32712
32713     void __builtin_ia32_femms (void)
32714     v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
32715     v2si __builtin_ia32_pf2id (v2sf)
32716     v2sf __builtin_ia32_pfacc (v2sf, v2sf)
32717     v2sf __builtin_ia32_pfadd (v2sf, v2sf)
32718     v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
32719     v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
32720     v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
32721     v2sf __builtin_ia32_pfmax (v2sf, v2sf)
32722     v2sf __builtin_ia32_pfmin (v2sf, v2sf)
32723     v2sf __builtin_ia32_pfmul (v2sf, v2sf)
32724     v2sf __builtin_ia32_pfrcp (v2sf)
32725     v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
32726     v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
32727     v2sf __builtin_ia32_pfrsqrt (v2sf)
32728     v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf)
32729     v2sf __builtin_ia32_pfsub (v2sf, v2sf)
32730     v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
32731     v2sf __builtin_ia32_pi2fd (v2si)
32732     v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
32733
32734 The following built-in functions are available when both `-m3dnow' and
32735`-march=athlon' are used.  All of them generate the machine instruction
32736that is part of the name.
32737
32738     v2si __builtin_ia32_pf2iw (v2sf)
32739     v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
32740     v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
32741     v2sf __builtin_ia32_pi2fw (v2si)
32742     v2sf __builtin_ia32_pswapdsf (v2sf)
32743     v2si __builtin_ia32_pswapdsi (v2si)
32744
32745
32746File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: X86 Built-in Functions,  Up: Target Builtins
32747
327486.52.7 MIPS DSP Built-in Functions
32749----------------------------------
32750
32751The MIPS DSP Application-Specific Extension (ASE) includes new
32752instructions that are designed to improve the performance of DSP and
32753media applications.  It provides instructions that operate on packed
327548-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.
32755
32756 GCC supports MIPS DSP operations using both the generic vector
32757extensions (*note Vector Extensions::) and a collection of
32758MIPS-specific built-in functions.  Both kinds of support are enabled by
32759the `-mdsp' command-line option.
32760
32761 Revision 2 of the ASE was introduced in the second half of 2006.  This
32762revision adds extra instructions to the original ASE, but is otherwise
32763backwards-compatible with it.  You can select revision 2 using the
32764command-line option `-mdspr2'; this option implies `-mdsp'.
32765
32766 The SCOUNT and POS bits of the DSP control register are global.  The
32767WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and
32768POS bits.  During optimization, the compiler will not delete these
32769instructions and it will not delete calls to functions containing these
32770instructions.
32771
32772 At present, GCC only provides support for operations on 32-bit
32773vectors.  The vector type associated with 8-bit integer data is usually
32774called `v4i8', the vector type associated with Q7 is usually called
32775`v4q7', the vector type associated with 16-bit integer data is usually
32776called `v2i16', and the vector type associated with Q15 is usually
32777called `v2q15'.  They can be defined in C as follows:
32778
32779     typedef signed char v4i8 __attribute__ ((vector_size(4)));
32780     typedef signed char v4q7 __attribute__ ((vector_size(4)));
32781     typedef short v2i16 __attribute__ ((vector_size(4)));
32782     typedef short v2q15 __attribute__ ((vector_size(4)));
32783
32784 `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same
32785way as aggregates.  For example:
32786
32787     v4i8 a = {1, 2, 3, 4};
32788     v4i8 b;
32789     b = (v4i8) {5, 6, 7, 8};
32790
32791     v2q15 c = {0x0fcb, 0x3a75};
32792     v2q15 d;
32793     d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
32794
32795 _Note:_ The CPU's endianness determines the order in which values are
32796packed.  On little-endian targets, the first value is the least
32797significant and the last value is the most significant.  The opposite
32798order applies to big-endian targets.  For example, the code above will
32799set the lowest byte of `a' to `1' on little-endian targets and `4' on
32800big-endian targets.
32801
32802 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
32803representation.  As shown in this example, the integer representation
32804of a Q7 value can be obtained by multiplying the fractional value by
32805`0x1.0p7'.  The equivalent for Q15 values is to multiply by `0x1.0p15'.
32806The equivalent for Q31 values is to multiply by `0x1.0p31'.
32807
32808 The table below lists the `v4i8' and `v2q15' operations for which
32809hardware support exists.  `a' and `b' are `v4i8' values, and `c' and
32810`d' are `v2q15' values.
32811
32812C code                               MIPS instruction
32813`a + b'                              `addu.qb'
32814`c + d'                              `addq.ph'
32815`a - b'                              `subu.qb'
32816`c - d'                              `subq.ph'
32817
32818 The table below lists the `v2i16' operation for which hardware support
32819exists for the DSP ASE REV 2.  `e' and `f' are `v2i16' values.
32820
32821C code                               MIPS instruction
32822`e * f'                              `mul.ph'
32823
32824 It is easier to describe the DSP built-in functions if we first define
32825the following types:
32826
32827     typedef int q31;
32828     typedef int i32;
32829     typedef unsigned int ui32;
32830     typedef long long a64;
32831
32832 `q31' and `i32' are actually the same as `int', but we use `q31' to
32833indicate a Q31 fractional value and `i32' to indicate a 32-bit integer
32834value.  Similarly, `a64' is the same as `long long', but we use `a64'
32835to indicate values that will be placed in one of the four DSP
32836accumulators (`$ac0', `$ac1', `$ac2' or `$ac3').
32837
32838 Also, some built-in functions prefer or require immediate numbers as
32839parameters, because the corresponding DSP instructions accept both
32840immediate numbers and register operands, or accept immediate numbers
32841only.  The immediate parameters are listed as follows.
32842
32843     imm0_3: 0 to 3.
32844     imm0_7: 0 to 7.
32845     imm0_15: 0 to 15.
32846     imm0_31: 0 to 31.
32847     imm0_63: 0 to 63.
32848     imm0_255: 0 to 255.
32849     imm_n32_31: -32 to 31.
32850     imm_n512_511: -512 to 511.
32851
32852 The following built-in functions map directly to a particular MIPS DSP
32853instruction.  Please refer to the architecture specification for
32854details on what each instruction does.
32855
32856     v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
32857     v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
32858     q31 __builtin_mips_addq_s_w (q31, q31)
32859     v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
32860     v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
32861     v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
32862     v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
32863     q31 __builtin_mips_subq_s_w (q31, q31)
32864     v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
32865     v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
32866     i32 __builtin_mips_addsc (i32, i32)
32867     i32 __builtin_mips_addwc (i32, i32)
32868     i32 __builtin_mips_modsub (i32, i32)
32869     i32 __builtin_mips_raddu_w_qb (v4i8)
32870     v2q15 __builtin_mips_absq_s_ph (v2q15)
32871     q31 __builtin_mips_absq_s_w (q31)
32872     v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
32873     v2q15 __builtin_mips_precrq_ph_w (q31, q31)
32874     v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
32875     v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
32876     q31 __builtin_mips_preceq_w_phl (v2q15)
32877     q31 __builtin_mips_preceq_w_phr (v2q15)
32878     v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
32879     v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
32880     v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
32881     v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
32882     v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
32883     v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
32884     v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
32885     v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
32886     v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
32887     v4i8 __builtin_mips_shll_qb (v4i8, i32)
32888     v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
32889     v2q15 __builtin_mips_shll_ph (v2q15, i32)
32890     v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
32891     v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
32892     q31 __builtin_mips_shll_s_w (q31, imm0_31)
32893     q31 __builtin_mips_shll_s_w (q31, i32)
32894     v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
32895     v4i8 __builtin_mips_shrl_qb (v4i8, i32)
32896     v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
32897     v2q15 __builtin_mips_shra_ph (v2q15, i32)
32898     v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
32899     v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
32900     q31 __builtin_mips_shra_r_w (q31, imm0_31)
32901     q31 __builtin_mips_shra_r_w (q31, i32)
32902     v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
32903     v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
32904     v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
32905     q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
32906     q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
32907     a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
32908     a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
32909     a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
32910     a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
32911     a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
32912     a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
32913     a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
32914     a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
32915     a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
32916     a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
32917     a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
32918     a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
32919     a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
32920     i32 __builtin_mips_bitrev (i32)
32921     i32 __builtin_mips_insv (i32, i32)
32922     v4i8 __builtin_mips_repl_qb (imm0_255)
32923     v4i8 __builtin_mips_repl_qb (i32)
32924     v2q15 __builtin_mips_repl_ph (imm_n512_511)
32925     v2q15 __builtin_mips_repl_ph (i32)
32926     void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
32927     void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
32928     void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
32929     i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
32930     i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
32931     i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
32932     void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
32933     void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
32934     void __builtin_mips_cmp_le_ph (v2q15, v2q15)
32935     v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
32936     v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
32937     v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
32938     i32 __builtin_mips_extr_w (a64, imm0_31)
32939     i32 __builtin_mips_extr_w (a64, i32)
32940     i32 __builtin_mips_extr_r_w (a64, imm0_31)
32941     i32 __builtin_mips_extr_s_h (a64, i32)
32942     i32 __builtin_mips_extr_rs_w (a64, imm0_31)
32943     i32 __builtin_mips_extr_rs_w (a64, i32)
32944     i32 __builtin_mips_extr_s_h (a64, imm0_31)
32945     i32 __builtin_mips_extr_r_w (a64, i32)
32946     i32 __builtin_mips_extp (a64, imm0_31)
32947     i32 __builtin_mips_extp (a64, i32)
32948     i32 __builtin_mips_extpdp (a64, imm0_31)
32949     i32 __builtin_mips_extpdp (a64, i32)
32950     a64 __builtin_mips_shilo (a64, imm_n32_31)
32951     a64 __builtin_mips_shilo (a64, i32)
32952     a64 __builtin_mips_mthlip (a64, i32)
32953     void __builtin_mips_wrdsp (i32, imm0_63)
32954     i32 __builtin_mips_rddsp (imm0_63)
32955     i32 __builtin_mips_lbux (void *, i32)
32956     i32 __builtin_mips_lhx (void *, i32)
32957     i32 __builtin_mips_lwx (void *, i32)
32958     i32 __builtin_mips_bposge32 (void)
32959
32960 The following built-in functions map directly to a particular MIPS DSP
32961REV 2 instruction.  Please refer to the architecture specification for
32962details on what each instruction does.
32963
32964     v4q7 __builtin_mips_absq_s_qb (v4q7);
32965     v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
32966     v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
32967     v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
32968     v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
32969     i32 __builtin_mips_append (i32, i32, imm0_31);
32970     i32 __builtin_mips_balign (i32, i32, imm0_3);
32971     i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
32972     i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
32973     i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
32974     a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
32975     a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
32976     a64 __builtin_mips_madd (a64, i32, i32);
32977     a64 __builtin_mips_maddu (a64, ui32, ui32);
32978     a64 __builtin_mips_msub (a64, i32, i32);
32979     a64 __builtin_mips_msubu (a64, ui32, ui32);
32980     v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
32981     v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
32982     q31 __builtin_mips_mulq_rs_w (q31, q31);
32983     v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
32984     q31 __builtin_mips_mulq_s_w (q31, q31);
32985     a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
32986     a64 __builtin_mips_mult (i32, i32);
32987     a64 __builtin_mips_multu (ui32, ui32);
32988     v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
32989     v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
32990     v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
32991     i32 __builtin_mips_prepend (i32, i32, imm0_31);
32992     v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
32993     v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
32994     v4i8 __builtin_mips_shra_qb (v4i8, i32);
32995     v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
32996     v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
32997     v2i16 __builtin_mips_shrl_ph (v2i16, i32);
32998     v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
32999     v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
33000     v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
33001     v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
33002     v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
33003     v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
33004     q31 __builtin_mips_addqh_w (q31, q31);
33005     q31 __builtin_mips_addqh_r_w (q31, q31);
33006     v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
33007     v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
33008     q31 __builtin_mips_subqh_w (q31, q31);
33009     q31 __builtin_mips_subqh_r_w (q31, q31);
33010     a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
33011     a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
33012     a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
33013     a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
33014     a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
33015     a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);
33016
33017
33018File: gcc.info,  Node: MIPS Paired-Single Support,  Next: MIPS Loongson Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins
33019
330206.52.8 MIPS Paired-Single Support
33021---------------------------------
33022
33023The MIPS64 architecture includes a number of instructions that operate
33024on pairs of single-precision floating-point values.  Each pair is
33025packed into a 64-bit floating-point register, with one element being
33026designated the "upper half" and the other being designated the "lower
33027half".
33028
33029 GCC supports paired-single operations using both the generic vector
33030extensions (*note Vector Extensions::) and a collection of
33031MIPS-specific built-in functions.  Both kinds of support are enabled by
33032the `-mpaired-single' command-line option.
33033
33034 The vector type associated with paired-single values is usually called
33035`v2sf'.  It can be defined in C as follows:
33036
33037     typedef float v2sf __attribute__ ((vector_size (8)));
33038
33039 `v2sf' values are initialized in the same way as aggregates.  For
33040example:
33041
33042     v2sf a = {1.5, 9.1};
33043     v2sf b;
33044     float e, f;
33045     b = (v2sf) {e, f};
33046
33047 _Note:_ The CPU's endianness determines which value is stored in the
33048upper half of a register and which value is stored in the lower half.
33049On little-endian targets, the first value is the lower one and the
33050second value is the upper one.  The opposite order applies to
33051big-endian targets.  For example, the code above will set the lower
33052half of `a' to `1.5' on little-endian targets and `9.1' on big-endian
33053targets.
33054
33055
33056File: gcc.info,  Node: MIPS Loongson Built-in Functions,  Next: Other MIPS Built-in Functions,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
33057
330586.52.9 MIPS Loongson Built-in Functions
33059---------------------------------------
33060
33061GCC provides intrinsics to access the SIMD instructions provided by the
33062ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
33063available after inclusion of the `loongson.h' header file, operate on
33064the following 64-bit vector types:
33065
33066   * `uint8x8_t', a vector of eight unsigned 8-bit integers;
33067
33068   * `uint16x4_t', a vector of four unsigned 16-bit integers;
33069
33070   * `uint32x2_t', a vector of two unsigned 32-bit integers;
33071
33072   * `int8x8_t', a vector of eight signed 8-bit integers;
33073
33074   * `int16x4_t', a vector of four signed 16-bit integers;
33075
33076   * `int32x2_t', a vector of two signed 32-bit integers.
33077
33078 The intrinsics provided are listed below; each is named after the
33079machine instruction to which it corresponds, with suffixes added as
33080appropriate to distinguish intrinsics that expand to the same machine
33081instruction yet have different argument types.  Refer to the
33082architecture documentation for a description of the functionality of
33083each instruction.
33084
33085     int16x4_t packsswh (int32x2_t s, int32x2_t t);
33086     int8x8_t packsshb (int16x4_t s, int16x4_t t);
33087     uint8x8_t packushb (uint16x4_t s, uint16x4_t t);
33088     uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t);
33089     uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t);
33090     uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t);
33091     int32x2_t paddw_s (int32x2_t s, int32x2_t t);
33092     int16x4_t paddh_s (int16x4_t s, int16x4_t t);
33093     int8x8_t paddb_s (int8x8_t s, int8x8_t t);
33094     uint64_t paddd_u (uint64_t s, uint64_t t);
33095     int64_t paddd_s (int64_t s, int64_t t);
33096     int16x4_t paddsh (int16x4_t s, int16x4_t t);
33097     int8x8_t paddsb (int8x8_t s, int8x8_t t);
33098     uint16x4_t paddush (uint16x4_t s, uint16x4_t t);
33099     uint8x8_t paddusb (uint8x8_t s, uint8x8_t t);
33100     uint64_t pandn_ud (uint64_t s, uint64_t t);
33101     uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t);
33102     uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t);
33103     uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t);
33104     int64_t pandn_sd (int64_t s, int64_t t);
33105     int32x2_t pandn_sw (int32x2_t s, int32x2_t t);
33106     int16x4_t pandn_sh (int16x4_t s, int16x4_t t);
33107     int8x8_t pandn_sb (int8x8_t s, int8x8_t t);
33108     uint16x4_t pavgh (uint16x4_t s, uint16x4_t t);
33109     uint8x8_t pavgb (uint8x8_t s, uint8x8_t t);
33110     uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t);
33111     uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t);
33112     uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t);
33113     int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t);
33114     int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t);
33115     int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t);
33116     uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t);
33117     uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t);
33118     uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t);
33119     int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t);
33120     int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t);
33121     int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t);
33122     uint16x4_t pextrh_u (uint16x4_t s, int field);
33123     int16x4_t pextrh_s (int16x4_t s, int field);
33124     uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t);
33125     uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t);
33126     uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t);
33127     uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t);
33128     int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t);
33129     int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t);
33130     int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t);
33131     int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t);
33132     int32x2_t pmaddhw (int16x4_t s, int16x4_t t);
33133     int16x4_t pmaxsh (int16x4_t s, int16x4_t t);
33134     uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t);
33135     int16x4_t pminsh (int16x4_t s, int16x4_t t);
33136     uint8x8_t pminub (uint8x8_t s, uint8x8_t t);
33137     uint8x8_t pmovmskb_u (uint8x8_t s);
33138     int8x8_t pmovmskb_s (int8x8_t s);
33139     uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t);
33140     int16x4_t pmulhh (int16x4_t s, int16x4_t t);
33141     int16x4_t pmullh (int16x4_t s, int16x4_t t);
33142     int64_t pmuluw (uint32x2_t s, uint32x2_t t);
33143     uint8x8_t pasubub (uint8x8_t s, uint8x8_t t);
33144     uint16x4_t biadd (uint8x8_t s);
33145     uint16x4_t psadbh (uint8x8_t s, uint8x8_t t);
33146     uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order);
33147     int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order);
33148     uint16x4_t psllh_u (uint16x4_t s, uint8_t amount);
33149     int16x4_t psllh_s (int16x4_t s, uint8_t amount);
33150     uint32x2_t psllw_u (uint32x2_t s, uint8_t amount);
33151     int32x2_t psllw_s (int32x2_t s, uint8_t amount);
33152     uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount);
33153     int16x4_t psrlh_s (int16x4_t s, uint8_t amount);
33154     uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount);
33155     int32x2_t psrlw_s (int32x2_t s, uint8_t amount);
33156     uint16x4_t psrah_u (uint16x4_t s, uint8_t amount);
33157     int16x4_t psrah_s (int16x4_t s, uint8_t amount);
33158     uint32x2_t psraw_u (uint32x2_t s, uint8_t amount);
33159     int32x2_t psraw_s (int32x2_t s, uint8_t amount);
33160     uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t);
33161     uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t);
33162     uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t);
33163     int32x2_t psubw_s (int32x2_t s, int32x2_t t);
33164     int16x4_t psubh_s (int16x4_t s, int16x4_t t);
33165     int8x8_t psubb_s (int8x8_t s, int8x8_t t);
33166     uint64_t psubd_u (uint64_t s, uint64_t t);
33167     int64_t psubd_s (int64_t s, int64_t t);
33168     int16x4_t psubsh (int16x4_t s, int16x4_t t);
33169     int8x8_t psubsb (int8x8_t s, int8x8_t t);
33170     uint16x4_t psubush (uint16x4_t s, uint16x4_t t);
33171     uint8x8_t psubusb (uint8x8_t s, uint8x8_t t);
33172     uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t);
33173     uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t);
33174     uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t);
33175     int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t);
33176     int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t);
33177     int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t);
33178     uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t);
33179     uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t);
33180     uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t);
33181     int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t);
33182     int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t);
33183     int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t);
33184
33185* Menu:
33186
33187* Paired-Single Arithmetic::
33188* Paired-Single Built-in Functions::
33189* MIPS-3D Built-in Functions::
33190
33191
33192File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
33193
331946.52.9.1 Paired-Single Arithmetic
33195.................................
33196
33197The table below lists the `v2sf' operations for which hardware support
33198exists.  `a', `b' and `c' are `v2sf' values and `x' is an integral
33199value.
33200
33201C code                               MIPS instruction
33202`a + b'                              `add.ps'
33203`a - b'                              `sub.ps'
33204`-a'                                 `neg.ps'
33205`a * b'                              `mul.ps'
33206`a * b + c'                          `madd.ps'
33207`a * b - c'                          `msub.ps'
33208`-(a * b + c)'                       `nmadd.ps'
33209`-(a * b - c)'                       `nmsub.ps'
33210`x ? a : b'                          `movn.ps'/`movz.ps'
33211
33212 Note that the multiply-accumulate instructions can be disabled using
33213the command-line option `-mno-fused-madd'.
33214
33215
33216File: gcc.info,  Node: Paired-Single Built-in Functions,  Next: MIPS-3D Built-in Functions,  Prev: Paired-Single Arithmetic,  Up: MIPS Loongson Built-in Functions
33217
332186.52.9.2 Paired-Single Built-in Functions
33219.........................................
33220
33221The following paired-single functions map directly to a particular MIPS
33222instruction.  Please refer to the architecture specification for
33223details on what each instruction does.
33224
33225`v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
33226     Pair lower lower (`pll.ps').
33227
33228`v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
33229     Pair upper lower (`pul.ps').
33230
33231`v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
33232     Pair lower upper (`plu.ps').
33233
33234`v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
33235     Pair upper upper (`puu.ps').
33236
33237`v2sf __builtin_mips_cvt_ps_s (float, float)'
33238     Convert pair to paired single (`cvt.ps.s').
33239
33240`float __builtin_mips_cvt_s_pl (v2sf)'
33241     Convert pair lower to single (`cvt.s.pl').
33242
33243`float __builtin_mips_cvt_s_pu (v2sf)'
33244     Convert pair upper to single (`cvt.s.pu').
33245
33246`v2sf __builtin_mips_abs_ps (v2sf)'
33247     Absolute value (`abs.ps').
33248
33249`v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
33250     Align variable (`alnv.ps').
33251
33252     _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
33253     otherwise the result will be unpredictable.  Please read the
33254     instruction description for details.
33255
33256 The following multi-instruction functions are also available.  In each
33257case, COND can be any of the 16 floating-point conditions: `f', `un',
33258`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
33259`lt', `nge', `le' or `ngt'.
33260
33261`v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
33262`v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
33263     Conditional move based on floating point comparison (`c.COND.ps',
33264     `movt.ps'/`movf.ps').
33265
33266     The `movt' functions return the value X computed by:
33267
33268          c.COND.ps CC,A,B
33269          mov.ps X,C
33270          movt.ps X,D,CC
33271
33272     The `movf' functions are similar but use `movf.ps' instead of
33273     `movt.ps'.
33274
33275`int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
33276`int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
33277     Comparison of two paired-single values (`c.COND.ps',
33278     `bc1t'/`bc1f').
33279
33280     These functions compare A and B using `c.COND.ps' and return
33281     either the upper or lower half of the result.  For example:
33282
33283          v2sf a, b;
33284          if (__builtin_mips_upper_c_eq_ps (a, b))
33285            upper_halves_are_equal ();
33286          else
33287            upper_halves_are_unequal ();
33288
33289          if (__builtin_mips_lower_c_eq_ps (a, b))
33290            lower_halves_are_equal ();
33291          else
33292            lower_halves_are_unequal ();
33293
33294
33295File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
33296
332976.52.9.3 MIPS-3D Built-in Functions
33298...................................
33299
33300The MIPS-3D Application-Specific Extension (ASE) includes additional
33301paired-single instructions that are designed to improve the performance
33302of 3D graphics operations.  Support for these instructions is controlled
33303by the `-mips3d' command-line option.
33304
33305 The functions listed below map directly to a particular MIPS-3D
33306instruction.  Please refer to the architecture specification for more
33307details on what each instruction does.
33308
33309`v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
33310     Reduction add (`addr.ps').
33311
33312`v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
33313     Reduction multiply (`mulr.ps').
33314
33315`v2sf __builtin_mips_cvt_pw_ps (v2sf)'
33316     Convert paired single to paired word (`cvt.pw.ps').
33317
33318`v2sf __builtin_mips_cvt_ps_pw (v2sf)'
33319     Convert paired word to paired single (`cvt.ps.pw').
33320
33321`float __builtin_mips_recip1_s (float)'
33322`double __builtin_mips_recip1_d (double)'
33323`v2sf __builtin_mips_recip1_ps (v2sf)'
33324     Reduced precision reciprocal (sequence step 1) (`recip1.FMT').
33325
33326`float __builtin_mips_recip2_s (float, float)'
33327`double __builtin_mips_recip2_d (double, double)'
33328`v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
33329     Reduced precision reciprocal (sequence step 2) (`recip2.FMT').
33330
33331`float __builtin_mips_rsqrt1_s (float)'
33332`double __builtin_mips_rsqrt1_d (double)'
33333`v2sf __builtin_mips_rsqrt1_ps (v2sf)'
33334     Reduced precision reciprocal square root (sequence step 1)
33335     (`rsqrt1.FMT').
33336
33337`float __builtin_mips_rsqrt2_s (float, float)'
33338`double __builtin_mips_rsqrt2_d (double, double)'
33339`v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
33340     Reduced precision reciprocal square root (sequence step 2)
33341     (`rsqrt2.FMT').
33342
33343 The following multi-instruction functions are also available.  In each
33344case, COND can be any of the 16 floating-point conditions: `f', `un',
33345`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
33346`lt', `nge', `le' or `ngt'.
33347
33348`int __builtin_mips_cabs_COND_s (float A, float B)'
33349`int __builtin_mips_cabs_COND_d (double A, double B)'
33350     Absolute comparison of two scalar values (`cabs.COND.FMT',
33351     `bc1t'/`bc1f').
33352
33353     These functions compare A and B using `cabs.COND.s' or
33354     `cabs.COND.d' and return the result as a boolean value.  For
33355     example:
33356
33357          float a, b;
33358          if (__builtin_mips_cabs_eq_s (a, b))
33359            true ();
33360          else
33361            false ();
33362
33363`int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
33364`int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
33365     Absolute comparison of two paired-single values (`cabs.COND.ps',
33366     `bc1t'/`bc1f').
33367
33368     These functions compare A and B using `cabs.COND.ps' and return
33369     either the upper or lower half of the result.  For example:
33370
33371          v2sf a, b;
33372          if (__builtin_mips_upper_cabs_eq_ps (a, b))
33373            upper_halves_are_equal ();
33374          else
33375            upper_halves_are_unequal ();
33376
33377          if (__builtin_mips_lower_cabs_eq_ps (a, b))
33378            lower_halves_are_equal ();
33379          else
33380            lower_halves_are_unequal ();
33381
33382`v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
33383`v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
33384     Conditional move based on absolute comparison (`cabs.COND.ps',
33385     `movt.ps'/`movf.ps').
33386
33387     The `movt' functions return the value X computed by:
33388
33389          cabs.COND.ps CC,A,B
33390          mov.ps X,C
33391          movt.ps X,D,CC
33392
33393     The `movf' functions are similar but use `movf.ps' instead of
33394     `movt.ps'.
33395
33396`int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
33397`int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
33398`int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
33399`int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
33400     Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps',
33401     `bc1any2t'/`bc1any2f').
33402
33403     These functions compare A and B using `c.COND.ps' or
33404     `cabs.COND.ps'.  The `any' forms return true if either result is
33405     true and the `all' forms return true if both results are true.
33406     For example:
33407
33408          v2sf a, b;
33409          if (__builtin_mips_any_c_eq_ps (a, b))
33410            one_is_true ();
33411          else
33412            both_are_false ();
33413
33414          if (__builtin_mips_all_c_eq_ps (a, b))
33415            both_are_true ();
33416          else
33417            one_is_false ();
33418
33419`int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
33420`int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
33421`int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
33422`int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
33423     Comparison of four paired-single values
33424     (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f').
33425
33426     These functions use `c.COND.ps' or `cabs.COND.ps' to compare A
33427     with B and to compare C with D.  The `any' forms return true if
33428     any of the four results are true and the `all' forms return true
33429     if all four results are true.  For example:
33430
33431          v2sf a, b, c, d;
33432          if (__builtin_mips_any_c_eq_4s (a, b, c, d))
33433            some_are_true ();
33434          else
33435            all_are_false ();
33436
33437          if (__builtin_mips_all_c_eq_4s (a, b, c, d))
33438            all_are_true ();
33439          else
33440            some_are_false ();
33441
33442
33443File: gcc.info,  Node: picoChip Built-in Functions,  Next: PowerPC AltiVec/VSX Built-in Functions,  Prev: Other MIPS Built-in Functions,  Up: Target Builtins
33444
334456.52.10 picoChip Built-in Functions
33446-----------------------------------
33447
33448GCC provides an interface to selected machine instructions from the
33449picoChip instruction set.
33450
33451`int __builtin_sbc (int VALUE)'
33452     Sign bit count.  Return the number of consecutive bits in VALUE
33453     which have the same value as the sign-bit.  The result is the
33454     number of leading sign bits minus one, giving the number of
33455     redundant sign bits in VALUE.
33456
33457`int __builtin_byteswap (int VALUE)'
33458     Byte swap.  Return the result of swapping the upper and lower
33459     bytes of VALUE.
33460
33461`int __builtin_brev (int VALUE)'
33462     Bit reversal.  Return the result of reversing the bits in VALUE.
33463     Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so
33464     on.
33465
33466`int __builtin_adds (int X, int Y)'
33467     Saturating addition.  Return the result of adding X and Y, storing
33468     the value 32767 if the result overflows.
33469
33470`int __builtin_subs (int X, int Y)'
33471     Saturating subtraction.  Return the result of subtracting Y from
33472     X, storing the value -32768 if the result overflows.
33473
33474`void __builtin_halt (void)'
33475     Halt.  The processor will stop execution.  This built-in is useful
33476     for implementing assertions.
33477
33478
33479
33480File: gcc.info,  Node: Other MIPS Built-in Functions,  Next: picoChip Built-in Functions,  Prev: MIPS Loongson Built-in Functions,  Up: Target Builtins
33481
334826.52.11 Other MIPS Built-in Functions
33483-------------------------------------
33484
33485GCC provides other MIPS-specific built-in functions:
33486
33487`void __builtin_mips_cache (int OP, const volatile void *ADDR)'
33488     Insert a `cache' instruction with operands OP and ADDR.  GCC
33489     defines the preprocessor macro `___GCC_HAVE_BUILTIN_MIPS_CACHE'
33490     when this function is available.
33491
33492
33493File: gcc.info,  Node: PowerPC AltiVec/VSX Built-in Functions,  Next: RX Built-in Functions,  Prev: picoChip Built-in Functions,  Up: Target Builtins
33494
334956.52.12 PowerPC AltiVec Built-in Functions
33496------------------------------------------
33497
33498GCC provides an interface for the PowerPC family of processors to access
33499the AltiVec operations described in Motorola's AltiVec Programming
33500Interface Manual.  The interface is made available by including
33501`<altivec.h>' and using `-maltivec' and `-mabi=altivec'.  The interface
33502supports the following vector types.
33503
33504     vector unsigned char
33505     vector signed char
33506     vector bool char
33507
33508     vector unsigned short
33509     vector signed short
33510     vector bool short
33511     vector pixel
33512
33513     vector unsigned int
33514     vector signed int
33515     vector bool int
33516     vector float
33517
33518 If `-mvsx' is used the following additional vector types are
33519implemented.
33520
33521     vector unsigned long
33522     vector signed long
33523     vector double
33524
33525 The long types are only implemented for 64-bit code generation, and
33526the long type is only used in the floating point/integer conversion
33527instructions.
33528
33529 GCC's implementation of the high-level language interface available
33530from C and C++ code differs from Motorola's documentation in several
33531ways.
33532
33533   * A vector constant is a list of constant expressions within curly
33534     braces.
33535
33536   * A vector initializer requires no cast if the vector constant is of
33537     the same type as the variable it is initializing.
33538
33539   * If `signed' or `unsigned' is omitted, the signedness of the vector
33540     type is the default signedness of the base type.  The default
33541     varies depending on the operating system, so a portable program
33542     should always specify the signedness.
33543
33544   * Compiling with `-maltivec' adds keywords `__vector', `vector',
33545     `__pixel', `pixel', `__bool' and `bool'.  When compiling ISO C,
33546     the context-sensitive substitution of the keywords `vector',
33547     `pixel' and `bool' is disabled.  To use them, you must include
33548     `<altivec.h>' instead.
33549
33550   * GCC allows using a `typedef' name as the type specifier for a
33551     vector type.
33552
33553   * For C, overloaded functions are implemented with macros so the
33554     following does not work:
33555
33556            vec_add ((vector signed int){1, 2, 3, 4}, foo);
33557
33558     Since `vec_add' is a macro, the vector constant in the example is
33559     treated as four separate arguments.  Wrap the entire argument in
33560     parentheses for this to work.
33561
33562 _Note:_ Only the `<altivec.h>' interface is supported.  Internally,
33563GCC uses built-in functions to achieve the functionality in the
33564aforementioned header file, but they are not supported and are subject
33565to change without notice.
33566
33567 The following interfaces are supported for the generic and specific
33568AltiVec operations and the AltiVec predicates.  In cases where there is
33569a direct mapping between generic and specific operations, only the
33570generic names are shown here, although the specific operations can also
33571be used.
33572
33573 Arguments that are documented as `const int' require literal integral
33574values within the range required for that operation.
33575
33576     vector signed char vec_abs (vector signed char);
33577     vector signed short vec_abs (vector signed short);
33578     vector signed int vec_abs (vector signed int);
33579     vector float vec_abs (vector float);
33580
33581     vector signed char vec_abss (vector signed char);
33582     vector signed short vec_abss (vector signed short);
33583     vector signed int vec_abss (vector signed int);
33584
33585     vector signed char vec_add (vector bool char, vector signed char);
33586     vector signed char vec_add (vector signed char, vector bool char);
33587     vector signed char vec_add (vector signed char, vector signed char);
33588     vector unsigned char vec_add (vector bool char, vector unsigned char);
33589     vector unsigned char vec_add (vector unsigned char, vector bool char);
33590     vector unsigned char vec_add (vector unsigned char,
33591                                   vector unsigned char);
33592     vector signed short vec_add (vector bool short, vector signed short);
33593     vector signed short vec_add (vector signed short, vector bool short);
33594     vector signed short vec_add (vector signed short, vector signed short);
33595     vector unsigned short vec_add (vector bool short,
33596                                    vector unsigned short);
33597     vector unsigned short vec_add (vector unsigned short,
33598                                    vector bool short);
33599     vector unsigned short vec_add (vector unsigned short,
33600                                    vector unsigned short);
33601     vector signed int vec_add (vector bool int, vector signed int);
33602     vector signed int vec_add (vector signed int, vector bool int);
33603     vector signed int vec_add (vector signed int, vector signed int);
33604     vector unsigned int vec_add (vector bool int, vector unsigned int);
33605     vector unsigned int vec_add (vector unsigned int, vector bool int);
33606     vector unsigned int vec_add (vector unsigned int, vector unsigned int);
33607     vector float vec_add (vector float, vector float);
33608
33609     vector float vec_vaddfp (vector float, vector float);
33610
33611     vector signed int vec_vadduwm (vector bool int, vector signed int);
33612     vector signed int vec_vadduwm (vector signed int, vector bool int);
33613     vector signed int vec_vadduwm (vector signed int, vector signed int);
33614     vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
33615     vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
33616     vector unsigned int vec_vadduwm (vector unsigned int,
33617                                      vector unsigned int);
33618
33619     vector signed short vec_vadduhm (vector bool short,
33620                                      vector signed short);
33621     vector signed short vec_vadduhm (vector signed short,
33622                                      vector bool short);
33623     vector signed short vec_vadduhm (vector signed short,
33624                                      vector signed short);
33625     vector unsigned short vec_vadduhm (vector bool short,
33626                                        vector unsigned short);
33627     vector unsigned short vec_vadduhm (vector unsigned short,
33628                                        vector bool short);
33629     vector unsigned short vec_vadduhm (vector unsigned short,
33630                                        vector unsigned short);
33631
33632     vector signed char vec_vaddubm (vector bool char, vector signed char);
33633     vector signed char vec_vaddubm (vector signed char, vector bool char);
33634     vector signed char vec_vaddubm (vector signed char, vector signed char);
33635     vector unsigned char vec_vaddubm (vector bool char,
33636                                       vector unsigned char);
33637     vector unsigned char vec_vaddubm (vector unsigned char,
33638                                       vector bool char);
33639     vector unsigned char vec_vaddubm (vector unsigned char,
33640                                       vector unsigned char);
33641
33642     vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
33643
33644     vector unsigned char vec_adds (vector bool char, vector unsigned char);
33645     vector unsigned char vec_adds (vector unsigned char, vector bool char);
33646     vector unsigned char vec_adds (vector unsigned char,
33647                                    vector unsigned char);
33648     vector signed char vec_adds (vector bool char, vector signed char);
33649     vector signed char vec_adds (vector signed char, vector bool char);
33650     vector signed char vec_adds (vector signed char, vector signed char);
33651     vector unsigned short vec_adds (vector bool short,
33652                                     vector unsigned short);
33653     vector unsigned short vec_adds (vector unsigned short,
33654                                     vector bool short);
33655     vector unsigned short vec_adds (vector unsigned short,
33656                                     vector unsigned short);
33657     vector signed short vec_adds (vector bool short, vector signed short);
33658     vector signed short vec_adds (vector signed short, vector bool short);
33659     vector signed short vec_adds (vector signed short, vector signed short);
33660     vector unsigned int vec_adds (vector bool int, vector unsigned int);
33661     vector unsigned int vec_adds (vector unsigned int, vector bool int);
33662     vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
33663     vector signed int vec_adds (vector bool int, vector signed int);
33664     vector signed int vec_adds (vector signed int, vector bool int);
33665     vector signed int vec_adds (vector signed int, vector signed int);
33666
33667     vector signed int vec_vaddsws (vector bool int, vector signed int);
33668     vector signed int vec_vaddsws (vector signed int, vector bool int);
33669     vector signed int vec_vaddsws (vector signed int, vector signed int);
33670
33671     vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
33672     vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
33673     vector unsigned int vec_vadduws (vector unsigned int,
33674                                      vector unsigned int);
33675
33676     vector signed short vec_vaddshs (vector bool short,
33677                                      vector signed short);
33678     vector signed short vec_vaddshs (vector signed short,
33679                                      vector bool short);
33680     vector signed short vec_vaddshs (vector signed short,
33681                                      vector signed short);
33682
33683     vector unsigned short vec_vadduhs (vector bool short,
33684                                        vector unsigned short);
33685     vector unsigned short vec_vadduhs (vector unsigned short,
33686                                        vector bool short);
33687     vector unsigned short vec_vadduhs (vector unsigned short,
33688                                        vector unsigned short);
33689
33690     vector signed char vec_vaddsbs (vector bool char, vector signed char);
33691     vector signed char vec_vaddsbs (vector signed char, vector bool char);
33692     vector signed char vec_vaddsbs (vector signed char, vector signed char);
33693
33694     vector unsigned char vec_vaddubs (vector bool char,
33695                                       vector unsigned char);
33696     vector unsigned char vec_vaddubs (vector unsigned char,
33697                                       vector bool char);
33698     vector unsigned char vec_vaddubs (vector unsigned char,
33699                                       vector unsigned char);
33700
33701     vector float vec_and (vector float, vector float);
33702     vector float vec_and (vector float, vector bool int);
33703     vector float vec_and (vector bool int, vector float);
33704     vector bool int vec_and (vector bool int, vector bool int);
33705     vector signed int vec_and (vector bool int, vector signed int);
33706     vector signed int vec_and (vector signed int, vector bool int);
33707     vector signed int vec_and (vector signed int, vector signed int);
33708     vector unsigned int vec_and (vector bool int, vector unsigned int);
33709     vector unsigned int vec_and (vector unsigned int, vector bool int);
33710     vector unsigned int vec_and (vector unsigned int, vector unsigned int);
33711     vector bool short vec_and (vector bool short, vector bool short);
33712     vector signed short vec_and (vector bool short, vector signed short);
33713     vector signed short vec_and (vector signed short, vector bool short);
33714     vector signed short vec_and (vector signed short, vector signed short);
33715     vector unsigned short vec_and (vector bool short,
33716                                    vector unsigned short);
33717     vector unsigned short vec_and (vector unsigned short,
33718                                    vector bool short);
33719     vector unsigned short vec_and (vector unsigned short,
33720                                    vector unsigned short);
33721     vector signed char vec_and (vector bool char, vector signed char);
33722     vector bool char vec_and (vector bool char, vector bool char);
33723     vector signed char vec_and (vector signed char, vector bool char);
33724     vector signed char vec_and (vector signed char, vector signed char);
33725     vector unsigned char vec_and (vector bool char, vector unsigned char);
33726     vector unsigned char vec_and (vector unsigned char, vector bool char);
33727     vector unsigned char vec_and (vector unsigned char,
33728                                   vector unsigned char);
33729
33730     vector float vec_andc (vector float, vector float);
33731     vector float vec_andc (vector float, vector bool int);
33732     vector float vec_andc (vector bool int, vector float);
33733     vector bool int vec_andc (vector bool int, vector bool int);
33734     vector signed int vec_andc (vector bool int, vector signed int);
33735     vector signed int vec_andc (vector signed int, vector bool int);
33736     vector signed int vec_andc (vector signed int, vector signed int);
33737     vector unsigned int vec_andc (vector bool int, vector unsigned int);
33738     vector unsigned int vec_andc (vector unsigned int, vector bool int);
33739     vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
33740     vector bool short vec_andc (vector bool short, vector bool short);
33741     vector signed short vec_andc (vector bool short, vector signed short);
33742     vector signed short vec_andc (vector signed short, vector bool short);
33743     vector signed short vec_andc (vector signed short, vector signed short);
33744     vector unsigned short vec_andc (vector bool short,
33745                                     vector unsigned short);
33746     vector unsigned short vec_andc (vector unsigned short,
33747                                     vector bool short);
33748     vector unsigned short vec_andc (vector unsigned short,
33749                                     vector unsigned short);
33750     vector signed char vec_andc (vector bool char, vector signed char);
33751     vector bool char vec_andc (vector bool char, vector bool char);
33752     vector signed char vec_andc (vector signed char, vector bool char);
33753     vector signed char vec_andc (vector signed char, vector signed char);
33754     vector unsigned char vec_andc (vector bool char, vector unsigned char);
33755     vector unsigned char vec_andc (vector unsigned char, vector bool char);
33756     vector unsigned char vec_andc (vector unsigned char,
33757                                    vector unsigned char);
33758
33759     vector unsigned char vec_avg (vector unsigned char,
33760                                   vector unsigned char);
33761     vector signed char vec_avg (vector signed char, vector signed char);
33762     vector unsigned short vec_avg (vector unsigned short,
33763                                    vector unsigned short);
33764     vector signed short vec_avg (vector signed short, vector signed short);
33765     vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
33766     vector signed int vec_avg (vector signed int, vector signed int);
33767
33768     vector signed int vec_vavgsw (vector signed int, vector signed int);
33769
33770     vector unsigned int vec_vavguw (vector unsigned int,
33771                                     vector unsigned int);
33772
33773     vector signed short vec_vavgsh (vector signed short,
33774                                     vector signed short);
33775
33776     vector unsigned short vec_vavguh (vector unsigned short,
33777                                       vector unsigned short);
33778
33779     vector signed char vec_vavgsb (vector signed char, vector signed char);
33780
33781     vector unsigned char vec_vavgub (vector unsigned char,
33782                                      vector unsigned char);
33783
33784     vector float vec_copysign (vector float);
33785
33786     vector float vec_ceil (vector float);
33787
33788     vector signed int vec_cmpb (vector float, vector float);
33789
33790     vector bool char vec_cmpeq (vector signed char, vector signed char);
33791     vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
33792     vector bool short vec_cmpeq (vector signed short, vector signed short);
33793     vector bool short vec_cmpeq (vector unsigned short,
33794                                  vector unsigned short);
33795     vector bool int vec_cmpeq (vector signed int, vector signed int);
33796     vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
33797     vector bool int vec_cmpeq (vector float, vector float);
33798
33799     vector bool int vec_vcmpeqfp (vector float, vector float);
33800
33801     vector bool int vec_vcmpequw (vector signed int, vector signed int);
33802     vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
33803
33804     vector bool short vec_vcmpequh (vector signed short,
33805                                     vector signed short);
33806     vector bool short vec_vcmpequh (vector unsigned short,
33807                                     vector unsigned short);
33808
33809     vector bool char vec_vcmpequb (vector signed char, vector signed char);
33810     vector bool char vec_vcmpequb (vector unsigned char,
33811                                    vector unsigned char);
33812
33813     vector bool int vec_cmpge (vector float, vector float);
33814
33815     vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
33816     vector bool char vec_cmpgt (vector signed char, vector signed char);
33817     vector bool short vec_cmpgt (vector unsigned short,
33818                                  vector unsigned short);
33819     vector bool short vec_cmpgt (vector signed short, vector signed short);
33820     vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
33821     vector bool int vec_cmpgt (vector signed int, vector signed int);
33822     vector bool int vec_cmpgt (vector float, vector float);
33823
33824     vector bool int vec_vcmpgtfp (vector float, vector float);
33825
33826     vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
33827
33828     vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
33829
33830     vector bool short vec_vcmpgtsh (vector signed short,
33831                                     vector signed short);
33832
33833     vector bool short vec_vcmpgtuh (vector unsigned short,
33834                                     vector unsigned short);
33835
33836     vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
33837
33838     vector bool char vec_vcmpgtub (vector unsigned char,
33839                                    vector unsigned char);
33840
33841     vector bool int vec_cmple (vector float, vector float);
33842
33843     vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
33844     vector bool char vec_cmplt (vector signed char, vector signed char);
33845     vector bool short vec_cmplt (vector unsigned short,
33846                                  vector unsigned short);
33847     vector bool short vec_cmplt (vector signed short, vector signed short);
33848     vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
33849     vector bool int vec_cmplt (vector signed int, vector signed int);
33850     vector bool int vec_cmplt (vector float, vector float);
33851
33852     vector float vec_ctf (vector unsigned int, const int);
33853     vector float vec_ctf (vector signed int, const int);
33854
33855     vector float vec_vcfsx (vector signed int, const int);
33856
33857     vector float vec_vcfux (vector unsigned int, const int);
33858
33859     vector signed int vec_cts (vector float, const int);
33860
33861     vector unsigned int vec_ctu (vector float, const int);
33862
33863     void vec_dss (const int);
33864
33865     void vec_dssall (void);
33866
33867     void vec_dst (const vector unsigned char *, int, const int);
33868     void vec_dst (const vector signed char *, int, const int);
33869     void vec_dst (const vector bool char *, int, const int);
33870     void vec_dst (const vector unsigned short *, int, const int);
33871     void vec_dst (const vector signed short *, int, const int);
33872     void vec_dst (const vector bool short *, int, const int);
33873     void vec_dst (const vector pixel *, int, const int);
33874     void vec_dst (const vector unsigned int *, int, const int);
33875     void vec_dst (const vector signed int *, int, const int);
33876     void vec_dst (const vector bool int *, int, const int);
33877     void vec_dst (const vector float *, int, const int);
33878     void vec_dst (const unsigned char *, int, const int);
33879     void vec_dst (const signed char *, int, const int);
33880     void vec_dst (const unsigned short *, int, const int);
33881     void vec_dst (const short *, int, const int);
33882     void vec_dst (const unsigned int *, int, const int);
33883     void vec_dst (const int *, int, const int);
33884     void vec_dst (const unsigned long *, int, const int);
33885     void vec_dst (const long *, int, const int);
33886     void vec_dst (const float *, int, const int);
33887
33888     void vec_dstst (const vector unsigned char *, int, const int);
33889     void vec_dstst (const vector signed char *, int, const int);
33890     void vec_dstst (const vector bool char *, int, const int);
33891     void vec_dstst (const vector unsigned short *, int, const int);
33892     void vec_dstst (const vector signed short *, int, const int);
33893     void vec_dstst (const vector bool short *, int, const int);
33894     void vec_dstst (const vector pixel *, int, const int);
33895     void vec_dstst (const vector unsigned int *, int, const int);
33896     void vec_dstst (const vector signed int *, int, const int);
33897     void vec_dstst (const vector bool int *, int, const int);
33898     void vec_dstst (const vector float *, int, const int);
33899     void vec_dstst (const unsigned char *, int, const int);
33900     void vec_dstst (const signed char *, int, const int);
33901     void vec_dstst (const unsigned short *, int, const int);
33902     void vec_dstst (const short *, int, const int);
33903     void vec_dstst (const unsigned int *, int, const int);
33904     void vec_dstst (const int *, int, const int);
33905     void vec_dstst (const unsigned long *, int, const int);
33906     void vec_dstst (const long *, int, const int);
33907     void vec_dstst (const float *, int, const int);
33908
33909     void vec_dststt (const vector unsigned char *, int, const int);
33910     void vec_dststt (const vector signed char *, int, const int);
33911     void vec_dststt (const vector bool char *, int, const int);
33912     void vec_dststt (const vector unsigned short *, int, const int);
33913     void vec_dststt (const vector signed short *, int, const int);
33914     void vec_dststt (const vector bool short *, int, const int);
33915     void vec_dststt (const vector pixel *, int, const int);
33916     void vec_dststt (const vector unsigned int *, int, const int);
33917     void vec_dststt (const vector signed int *, int, const int);
33918     void vec_dststt (const vector bool int *, int, const int);
33919     void vec_dststt (const vector float *, int, const int);
33920     void vec_dststt (const unsigned char *, int, const int);
33921     void vec_dststt (const signed char *, int, const int);
33922     void vec_dststt (const unsigned short *, int, const int);
33923     void vec_dststt (const short *, int, const int);
33924     void vec_dststt (const unsigned int *, int, const int);
33925     void vec_dststt (const int *, int, const int);
33926     void vec_dststt (const unsigned long *, int, const int);
33927     void vec_dststt (const long *, int, const int);
33928     void vec_dststt (const float *, int, const int);
33929
33930     void vec_dstt (const vector unsigned char *, int, const int);
33931     void vec_dstt (const vector signed char *, int, const int);
33932     void vec_dstt (const vector bool char *, int, const int);
33933     void vec_dstt (const vector unsigned short *, int, const int);
33934     void vec_dstt (const vector signed short *, int, const int);
33935     void vec_dstt (const vector bool short *, int, const int);
33936     void vec_dstt (const vector pixel *, int, const int);
33937     void vec_dstt (const vector unsigned int *, int, const int);
33938     void vec_dstt (const vector signed int *, int, const int);
33939     void vec_dstt (const vector bool int *, int, const int);
33940     void vec_dstt (const vector float *, int, const int);
33941     void vec_dstt (const unsigned char *, int, const int);
33942     void vec_dstt (const signed char *, int, const int);
33943     void vec_dstt (const unsigned short *, int, const int);
33944     void vec_dstt (const short *, int, const int);
33945     void vec_dstt (const unsigned int *, int, const int);
33946     void vec_dstt (const int *, int, const int);
33947     void vec_dstt (const unsigned long *, int, const int);
33948     void vec_dstt (const long *, int, const int);
33949     void vec_dstt (const float *, int, const int);
33950
33951     vector float vec_expte (vector float);
33952
33953     vector float vec_floor (vector float);
33954
33955     vector float vec_ld (int, const vector float *);
33956     vector float vec_ld (int, const float *);
33957     vector bool int vec_ld (int, const vector bool int *);
33958     vector signed int vec_ld (int, const vector signed int *);
33959     vector signed int vec_ld (int, const int *);
33960     vector signed int vec_ld (int, const long *);
33961     vector unsigned int vec_ld (int, const vector unsigned int *);
33962     vector unsigned int vec_ld (int, const unsigned int *);
33963     vector unsigned int vec_ld (int, const unsigned long *);
33964     vector bool short vec_ld (int, const vector bool short *);
33965     vector pixel vec_ld (int, const vector pixel *);
33966     vector signed short vec_ld (int, const vector signed short *);
33967     vector signed short vec_ld (int, const short *);
33968     vector unsigned short vec_ld (int, const vector unsigned short *);
33969     vector unsigned short vec_ld (int, const unsigned short *);
33970     vector bool char vec_ld (int, const vector bool char *);
33971     vector signed char vec_ld (int, const vector signed char *);
33972     vector signed char vec_ld (int, const signed char *);
33973     vector unsigned char vec_ld (int, const vector unsigned char *);
33974     vector unsigned char vec_ld (int, const unsigned char *);
33975
33976     vector signed char vec_lde (int, const signed char *);
33977     vector unsigned char vec_lde (int, const unsigned char *);
33978     vector signed short vec_lde (int, const short *);
33979     vector unsigned short vec_lde (int, const unsigned short *);
33980     vector float vec_lde (int, const float *);
33981     vector signed int vec_lde (int, const int *);
33982     vector unsigned int vec_lde (int, const unsigned int *);
33983     vector signed int vec_lde (int, const long *);
33984     vector unsigned int vec_lde (int, const unsigned long *);
33985
33986     vector float vec_lvewx (int, float *);
33987     vector signed int vec_lvewx (int, int *);
33988     vector unsigned int vec_lvewx (int, unsigned int *);
33989     vector signed int vec_lvewx (int, long *);
33990     vector unsigned int vec_lvewx (int, unsigned long *);
33991
33992     vector signed short vec_lvehx (int, short *);
33993     vector unsigned short vec_lvehx (int, unsigned short *);
33994
33995     vector signed char vec_lvebx (int, char *);
33996     vector unsigned char vec_lvebx (int, unsigned char *);
33997
33998     vector float vec_ldl (int, const vector float *);
33999     vector float vec_ldl (int, const float *);
34000     vector bool int vec_ldl (int, const vector bool int *);
34001     vector signed int vec_ldl (int, const vector signed int *);
34002     vector signed int vec_ldl (int, const int *);
34003     vector signed int vec_ldl (int, const long *);
34004     vector unsigned int vec_ldl (int, const vector unsigned int *);
34005     vector unsigned int vec_ldl (int, const unsigned int *);
34006     vector unsigned int vec_ldl (int, const unsigned long *);
34007     vector bool short vec_ldl (int, const vector bool short *);
34008     vector pixel vec_ldl (int, const vector pixel *);
34009     vector signed short vec_ldl (int, const vector signed short *);
34010     vector signed short vec_ldl (int, const short *);
34011     vector unsigned short vec_ldl (int, const vector unsigned short *);
34012     vector unsigned short vec_ldl (int, const unsigned short *);
34013     vector bool char vec_ldl (int, const vector bool char *);
34014     vector signed char vec_ldl (int, const vector signed char *);
34015     vector signed char vec_ldl (int, const signed char *);
34016     vector unsigned char vec_ldl (int, const vector unsigned char *);
34017     vector unsigned char vec_ldl (int, const unsigned char *);
34018
34019     vector float vec_loge (vector float);
34020
34021     vector unsigned char vec_lvsl (int, const volatile unsigned char *);
34022     vector unsigned char vec_lvsl (int, const volatile signed char *);
34023     vector unsigned char vec_lvsl (int, const volatile unsigned short *);
34024     vector unsigned char vec_lvsl (int, const volatile short *);
34025     vector unsigned char vec_lvsl (int, const volatile unsigned int *);
34026     vector unsigned char vec_lvsl (int, const volatile int *);
34027     vector unsigned char vec_lvsl (int, const volatile unsigned long *);
34028     vector unsigned char vec_lvsl (int, const volatile long *);
34029     vector unsigned char vec_lvsl (int, const volatile float *);
34030
34031     vector unsigned char vec_lvsr (int, const volatile unsigned char *);
34032     vector unsigned char vec_lvsr (int, const volatile signed char *);
34033     vector unsigned char vec_lvsr (int, const volatile unsigned short *);
34034     vector unsigned char vec_lvsr (int, const volatile short *);
34035     vector unsigned char vec_lvsr (int, const volatile unsigned int *);
34036     vector unsigned char vec_lvsr (int, const volatile int *);
34037     vector unsigned char vec_lvsr (int, const volatile unsigned long *);
34038     vector unsigned char vec_lvsr (int, const volatile long *);
34039     vector unsigned char vec_lvsr (int, const volatile float *);
34040
34041     vector float vec_madd (vector float, vector float, vector float);
34042
34043     vector signed short vec_madds (vector signed short,
34044                                    vector signed short,
34045                                    vector signed short);
34046
34047     vector unsigned char vec_max (vector bool char, vector unsigned char);
34048     vector unsigned char vec_max (vector unsigned char, vector bool char);
34049     vector unsigned char vec_max (vector unsigned char,
34050                                   vector unsigned char);
34051     vector signed char vec_max (vector bool char, vector signed char);
34052     vector signed char vec_max (vector signed char, vector bool char);
34053     vector signed char vec_max (vector signed char, vector signed char);
34054     vector unsigned short vec_max (vector bool short,
34055                                    vector unsigned short);
34056     vector unsigned short vec_max (vector unsigned short,
34057                                    vector bool short);
34058     vector unsigned short vec_max (vector unsigned short,
34059                                    vector unsigned short);
34060     vector signed short vec_max (vector bool short, vector signed short);
34061     vector signed short vec_max (vector signed short, vector bool short);
34062     vector signed short vec_max (vector signed short, vector signed short);
34063     vector unsigned int vec_max (vector bool int, vector unsigned int);
34064     vector unsigned int vec_max (vector unsigned int, vector bool int);
34065     vector unsigned int vec_max (vector unsigned int, vector unsigned int);
34066     vector signed int vec_max (vector bool int, vector signed int);
34067     vector signed int vec_max (vector signed int, vector bool int);
34068     vector signed int vec_max (vector signed int, vector signed int);
34069     vector float vec_max (vector float, vector float);
34070
34071     vector float vec_vmaxfp (vector float, vector float);
34072
34073     vector signed int vec_vmaxsw (vector bool int, vector signed int);
34074     vector signed int vec_vmaxsw (vector signed int, vector bool int);
34075     vector signed int vec_vmaxsw (vector signed int, vector signed int);
34076
34077     vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
34078     vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
34079     vector unsigned int vec_vmaxuw (vector unsigned int,
34080                                     vector unsigned int);
34081
34082     vector signed short vec_vmaxsh (vector bool short, vector signed short);
34083     vector signed short vec_vmaxsh (vector signed short, vector bool short);
34084     vector signed short vec_vmaxsh (vector signed short,
34085                                     vector signed short);
34086
34087     vector unsigned short vec_vmaxuh (vector bool short,
34088                                       vector unsigned short);
34089     vector unsigned short vec_vmaxuh (vector unsigned short,
34090                                       vector bool short);
34091     vector unsigned short vec_vmaxuh (vector unsigned short,
34092                                       vector unsigned short);
34093
34094     vector signed char vec_vmaxsb (vector bool char, vector signed char);
34095     vector signed char vec_vmaxsb (vector signed char, vector bool char);
34096     vector signed char vec_vmaxsb (vector signed char, vector signed char);
34097
34098     vector unsigned char vec_vmaxub (vector bool char,
34099                                      vector unsigned char);
34100     vector unsigned char vec_vmaxub (vector unsigned char,
34101                                      vector bool char);
34102     vector unsigned char vec_vmaxub (vector unsigned char,
34103                                      vector unsigned char);
34104
34105     vector bool char vec_mergeh (vector bool char, vector bool char);
34106     vector signed char vec_mergeh (vector signed char, vector signed char);
34107     vector unsigned char vec_mergeh (vector unsigned char,
34108                                      vector unsigned char);
34109     vector bool short vec_mergeh (vector bool short, vector bool short);
34110     vector pixel vec_mergeh (vector pixel, vector pixel);
34111     vector signed short vec_mergeh (vector signed short,
34112                                     vector signed short);
34113     vector unsigned short vec_mergeh (vector unsigned short,
34114                                       vector unsigned short);
34115     vector float vec_mergeh (vector float, vector float);
34116     vector bool int vec_mergeh (vector bool int, vector bool int);
34117     vector signed int vec_mergeh (vector signed int, vector signed int);
34118     vector unsigned int vec_mergeh (vector unsigned int,
34119                                     vector unsigned int);
34120
34121     vector float vec_vmrghw (vector float, vector float);
34122     vector bool int vec_vmrghw (vector bool int, vector bool int);
34123     vector signed int vec_vmrghw (vector signed int, vector signed int);
34124     vector unsigned int vec_vmrghw (vector unsigned int,
34125                                     vector unsigned int);
34126
34127     vector bool short vec_vmrghh (vector bool short, vector bool short);
34128     vector signed short vec_vmrghh (vector signed short,
34129                                     vector signed short);
34130     vector unsigned short vec_vmrghh (vector unsigned short,
34131                                       vector unsigned short);
34132     vector pixel vec_vmrghh (vector pixel, vector pixel);
34133
34134     vector bool char vec_vmrghb (vector bool char, vector bool char);
34135     vector signed char vec_vmrghb (vector signed char, vector signed char);
34136     vector unsigned char vec_vmrghb (vector unsigned char,
34137                                      vector unsigned char);
34138
34139     vector bool char vec_mergel (vector bool char, vector bool char);
34140     vector signed char vec_mergel (vector signed char, vector signed char);
34141     vector unsigned char vec_mergel (vector unsigned char,
34142                                      vector unsigned char);
34143     vector bool short vec_mergel (vector bool short, vector bool short);
34144     vector pixel vec_mergel (vector pixel, vector pixel);
34145     vector signed short vec_mergel (vector signed short,
34146                                     vector signed short);
34147     vector unsigned short vec_mergel (vector unsigned short,
34148                                       vector unsigned short);
34149     vector float vec_mergel (vector float, vector float);
34150     vector bool int vec_mergel (vector bool int, vector bool int);
34151     vector signed int vec_mergel (vector signed int, vector signed int);
34152     vector unsigned int vec_mergel (vector unsigned int,
34153                                     vector unsigned int);
34154
34155     vector float vec_vmrglw (vector float, vector float);
34156     vector signed int vec_vmrglw (vector signed int, vector signed int);
34157     vector unsigned int vec_vmrglw (vector unsigned int,
34158                                     vector unsigned int);
34159     vector bool int vec_vmrglw (vector bool int, vector bool int);
34160
34161     vector bool short vec_vmrglh (vector bool short, vector bool short);
34162     vector signed short vec_vmrglh (vector signed short,
34163                                     vector signed short);
34164     vector unsigned short vec_vmrglh (vector unsigned short,
34165                                       vector unsigned short);
34166     vector pixel vec_vmrglh (vector pixel, vector pixel);
34167
34168     vector bool char vec_vmrglb (vector bool char, vector bool char);
34169     vector signed char vec_vmrglb (vector signed char, vector signed char);
34170     vector unsigned char vec_vmrglb (vector unsigned char,
34171                                      vector unsigned char);
34172
34173     vector unsigned short vec_mfvscr (void);
34174
34175     vector unsigned char vec_min (vector bool char, vector unsigned char);
34176     vector unsigned char vec_min (vector unsigned char, vector bool char);
34177     vector unsigned char vec_min (vector unsigned char,
34178                                   vector unsigned char);
34179     vector signed char vec_min (vector bool char, vector signed char);
34180     vector signed char vec_min (vector signed char, vector bool char);
34181     vector signed char vec_min (vector signed char, vector signed char);
34182     vector unsigned short vec_min (vector bool short,
34183                                    vector unsigned short);
34184     vector unsigned short vec_min (vector unsigned short,
34185                                    vector bool short);
34186     vector unsigned short vec_min (vector unsigned short,
34187                                    vector unsigned short);
34188     vector signed short vec_min (vector bool short, vector signed short);
34189     vector signed short vec_min (vector signed short, vector bool short);
34190     vector signed short vec_min (vector signed short, vector signed short);
34191     vector unsigned int vec_min (vector bool int, vector unsigned int);
34192     vector unsigned int vec_min (vector unsigned int, vector bool int);
34193     vector unsigned int vec_min (vector unsigned int, vector unsigned int);
34194     vector signed int vec_min (vector bool int, vector signed int);
34195     vector signed int vec_min (vector signed int, vector bool int);
34196     vector signed int vec_min (vector signed int, vector signed int);
34197     vector float vec_min (vector float, vector float);
34198
34199     vector float vec_vminfp (vector float, vector float);
34200
34201     vector signed int vec_vminsw (vector bool int, vector signed int);
34202     vector signed int vec_vminsw (vector signed int, vector bool int);
34203     vector signed int vec_vminsw (vector signed int, vector signed int);
34204
34205     vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
34206     vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
34207     vector unsigned int vec_vminuw (vector unsigned int,
34208                                     vector unsigned int);
34209
34210     vector signed short vec_vminsh (vector bool short, vector signed short);
34211     vector signed short vec_vminsh (vector signed short, vector bool short);
34212     vector signed short vec_vminsh (vector signed short,
34213                                     vector signed short);
34214
34215     vector unsigned short vec_vminuh (vector bool short,
34216                                       vector unsigned short);
34217     vector unsigned short vec_vminuh (vector unsigned short,
34218                                       vector bool short);
34219     vector unsigned short vec_vminuh (vector unsigned short,
34220                                       vector unsigned short);
34221
34222     vector signed char vec_vminsb (vector bool char, vector signed char);
34223     vector signed char vec_vminsb (vector signed char, vector bool char);
34224     vector signed char vec_vminsb (vector signed char, vector signed char);
34225
34226     vector unsigned char vec_vminub (vector bool char,
34227                                      vector unsigned char);
34228     vector unsigned char vec_vminub (vector unsigned char,
34229                                      vector bool char);
34230     vector unsigned char vec_vminub (vector unsigned char,
34231                                      vector unsigned char);
34232
34233     vector signed short vec_mladd (vector signed short,
34234                                    vector signed short,
34235                                    vector signed short);
34236     vector signed short vec_mladd (vector signed short,
34237                                    vector unsigned short,
34238                                    vector unsigned short);
34239     vector signed short vec_mladd (vector unsigned short,
34240                                    vector signed short,
34241                                    vector signed short);
34242     vector unsigned short vec_mladd (vector unsigned short,
34243                                      vector unsigned short,
34244                                      vector unsigned short);
34245
34246     vector signed short vec_mradds (vector signed short,
34247                                     vector signed short,
34248                                     vector signed short);
34249
34250     vector unsigned int vec_msum (vector unsigned char,
34251                                   vector unsigned char,
34252                                   vector unsigned int);
34253     vector signed int vec_msum (vector signed char,
34254                                 vector unsigned char,
34255                                 vector signed int);
34256     vector unsigned int vec_msum (vector unsigned short,
34257                                   vector unsigned short,
34258                                   vector unsigned int);
34259     vector signed int vec_msum (vector signed short,
34260                                 vector signed short,
34261                                 vector signed int);
34262
34263     vector signed int vec_vmsumshm (vector signed short,
34264                                     vector signed short,
34265                                     vector signed int);
34266
34267     vector unsigned int vec_vmsumuhm (vector unsigned short,
34268                                       vector unsigned short,
34269                                       vector unsigned int);
34270
34271     vector signed int vec_vmsummbm (vector signed char,
34272                                     vector unsigned char,
34273                                     vector signed int);
34274
34275     vector unsigned int vec_vmsumubm (vector unsigned char,
34276                                       vector unsigned char,
34277                                       vector unsigned int);
34278
34279     vector unsigned int vec_msums (vector unsigned short,
34280                                    vector unsigned short,
34281                                    vector unsigned int);
34282     vector signed int vec_msums (vector signed short,
34283                                  vector signed short,
34284                                  vector signed int);
34285
34286     vector signed int vec_vmsumshs (vector signed short,
34287                                     vector signed short,
34288                                     vector signed int);
34289
34290     vector unsigned int vec_vmsumuhs (vector unsigned short,
34291                                       vector unsigned short,
34292                                       vector unsigned int);
34293
34294     void vec_mtvscr (vector signed int);
34295     void vec_mtvscr (vector unsigned int);
34296     void vec_mtvscr (vector bool int);
34297     void vec_mtvscr (vector signed short);
34298     void vec_mtvscr (vector unsigned short);
34299     void vec_mtvscr (vector bool short);
34300     void vec_mtvscr (vector pixel);
34301     void vec_mtvscr (vector signed char);
34302     void vec_mtvscr (vector unsigned char);
34303     void vec_mtvscr (vector bool char);
34304
34305     vector unsigned short vec_mule (vector unsigned char,
34306                                     vector unsigned char);
34307     vector signed short vec_mule (vector signed char,
34308                                   vector signed char);
34309     vector unsigned int vec_mule (vector unsigned short,
34310                                   vector unsigned short);
34311     vector signed int vec_mule (vector signed short, vector signed short);
34312
34313     vector signed int vec_vmulesh (vector signed short,
34314                                    vector signed short);
34315
34316     vector unsigned int vec_vmuleuh (vector unsigned short,
34317                                      vector unsigned short);
34318
34319     vector signed short vec_vmulesb (vector signed char,
34320                                      vector signed char);
34321
34322     vector unsigned short vec_vmuleub (vector unsigned char,
34323                                       vector unsigned char);
34324
34325     vector unsigned short vec_mulo (vector unsigned char,
34326                                     vector unsigned char);
34327     vector signed short vec_mulo (vector signed char, vector signed char);
34328     vector unsigned int vec_mulo (vector unsigned short,
34329                                   vector unsigned short);
34330     vector signed int vec_mulo (vector signed short, vector signed short);
34331
34332     vector signed int vec_vmulosh (vector signed short,
34333                                    vector signed short);
34334
34335     vector unsigned int vec_vmulouh (vector unsigned short,
34336                                      vector unsigned short);
34337
34338     vector signed short vec_vmulosb (vector signed char,
34339                                      vector signed char);
34340
34341     vector unsigned short vec_vmuloub (vector unsigned char,
34342                                        vector unsigned char);
34343
34344     vector float vec_nmsub (vector float, vector float, vector float);
34345
34346     vector float vec_nor (vector float, vector float);
34347     vector signed int vec_nor (vector signed int, vector signed int);
34348     vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
34349     vector bool int vec_nor (vector bool int, vector bool int);
34350     vector signed short vec_nor (vector signed short, vector signed short);
34351     vector unsigned short vec_nor (vector unsigned short,
34352                                    vector unsigned short);
34353     vector bool short vec_nor (vector bool short, vector bool short);
34354     vector signed char vec_nor (vector signed char, vector signed char);
34355     vector unsigned char vec_nor (vector unsigned char,
34356                                   vector unsigned char);
34357     vector bool char vec_nor (vector bool char, vector bool char);
34358
34359     vector float vec_or (vector float, vector float);
34360     vector float vec_or (vector float, vector bool int);
34361     vector float vec_or (vector bool int, vector float);
34362     vector bool int vec_or (vector bool int, vector bool int);
34363     vector signed int vec_or (vector bool int, vector signed int);
34364     vector signed int vec_or (vector signed int, vector bool int);
34365     vector signed int vec_or (vector signed int, vector signed int);
34366     vector unsigned int vec_or (vector bool int, vector unsigned int);
34367     vector unsigned int vec_or (vector unsigned int, vector bool int);
34368     vector unsigned int vec_or (vector unsigned int, vector unsigned int);
34369     vector bool short vec_or (vector bool short, vector bool short);
34370     vector signed short vec_or (vector bool short, vector signed short);
34371     vector signed short vec_or (vector signed short, vector bool short);
34372     vector signed short vec_or (vector signed short, vector signed short);
34373     vector unsigned short vec_or (vector bool short, vector unsigned short);
34374     vector unsigned short vec_or (vector unsigned short, vector bool short);
34375     vector unsigned short vec_or (vector unsigned short,
34376                                   vector unsigned short);
34377     vector signed char vec_or (vector bool char, vector signed char);
34378     vector bool char vec_or (vector bool char, vector bool char);
34379     vector signed char vec_or (vector signed char, vector bool char);
34380     vector signed char vec_or (vector signed char, vector signed char);
34381     vector unsigned char vec_or (vector bool char, vector unsigned char);
34382     vector unsigned char vec_or (vector unsigned char, vector bool char);
34383     vector unsigned char vec_or (vector unsigned char,
34384                                  vector unsigned char);
34385
34386     vector signed char vec_pack (vector signed short, vector signed short);
34387     vector unsigned char vec_pack (vector unsigned short,
34388                                    vector unsigned short);
34389     vector bool char vec_pack (vector bool short, vector bool short);
34390     vector signed short vec_pack (vector signed int, vector signed int);
34391     vector unsigned short vec_pack (vector unsigned int,
34392                                     vector unsigned int);
34393     vector bool short vec_pack (vector bool int, vector bool int);
34394
34395     vector bool short vec_vpkuwum (vector bool int, vector bool int);
34396     vector signed short vec_vpkuwum (vector signed int, vector signed int);
34397     vector unsigned short vec_vpkuwum (vector unsigned int,
34398                                        vector unsigned int);
34399
34400     vector bool char vec_vpkuhum (vector bool short, vector bool short);
34401     vector signed char vec_vpkuhum (vector signed short,
34402                                     vector signed short);
34403     vector unsigned char vec_vpkuhum (vector unsigned short,
34404                                       vector unsigned short);
34405
34406     vector pixel vec_packpx (vector unsigned int, vector unsigned int);
34407
34408     vector unsigned char vec_packs (vector unsigned short,
34409                                     vector unsigned short);
34410     vector signed char vec_packs (vector signed short, vector signed short);
34411     vector unsigned short vec_packs (vector unsigned int,
34412                                      vector unsigned int);
34413     vector signed short vec_packs (vector signed int, vector signed int);
34414
34415     vector signed short vec_vpkswss (vector signed int, vector signed int);
34416
34417     vector unsigned short vec_vpkuwus (vector unsigned int,
34418                                        vector unsigned int);
34419
34420     vector signed char vec_vpkshss (vector signed short,
34421                                     vector signed short);
34422
34423     vector unsigned char vec_vpkuhus (vector unsigned short,
34424                                       vector unsigned short);
34425
34426     vector unsigned char vec_packsu (vector unsigned short,
34427                                      vector unsigned short);
34428     vector unsigned char vec_packsu (vector signed short,
34429                                      vector signed short);
34430     vector unsigned short vec_packsu (vector unsigned int,
34431                                       vector unsigned int);
34432     vector unsigned short vec_packsu (vector signed int, vector signed int);
34433
34434     vector unsigned short vec_vpkswus (vector signed int,
34435                                        vector signed int);
34436
34437     vector unsigned char vec_vpkshus (vector signed short,
34438                                       vector signed short);
34439
34440     vector float vec_perm (vector float,
34441                            vector float,
34442                            vector unsigned char);
34443     vector signed int vec_perm (vector signed int,
34444                                 vector signed int,
34445                                 vector unsigned char);
34446     vector unsigned int vec_perm (vector unsigned int,
34447                                   vector unsigned int,
34448                                   vector unsigned char);
34449     vector bool int vec_perm (vector bool int,
34450                               vector bool int,
34451                               vector unsigned char);
34452     vector signed short vec_perm (vector signed short,
34453                                   vector signed short,
34454                                   vector unsigned char);
34455     vector unsigned short vec_perm (vector unsigned short,
34456                                     vector unsigned short,
34457                                     vector unsigned char);
34458     vector bool short vec_perm (vector bool short,
34459                                 vector bool short,
34460                                 vector unsigned char);
34461     vector pixel vec_perm (vector pixel,
34462                            vector pixel,
34463                            vector unsigned char);
34464     vector signed char vec_perm (vector signed char,
34465                                  vector signed char,
34466                                  vector unsigned char);
34467     vector unsigned char vec_perm (vector unsigned char,
34468                                    vector unsigned char,
34469                                    vector unsigned char);
34470     vector bool char vec_perm (vector bool char,
34471                                vector bool char,
34472                                vector unsigned char);
34473
34474     vector float vec_re (vector float);
34475
34476     vector signed char vec_rl (vector signed char,
34477                                vector unsigned char);
34478     vector unsigned char vec_rl (vector unsigned char,
34479                                  vector unsigned char);
34480     vector signed short vec_rl (vector signed short, vector unsigned short);
34481     vector unsigned short vec_rl (vector unsigned short,
34482                                   vector unsigned short);
34483     vector signed int vec_rl (vector signed int, vector unsigned int);
34484     vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
34485
34486     vector signed int vec_vrlw (vector signed int, vector unsigned int);
34487     vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
34488
34489     vector signed short vec_vrlh (vector signed short,
34490                                   vector unsigned short);
34491     vector unsigned short vec_vrlh (vector unsigned short,
34492                                     vector unsigned short);
34493
34494     vector signed char vec_vrlb (vector signed char, vector unsigned char);
34495     vector unsigned char vec_vrlb (vector unsigned char,
34496                                    vector unsigned char);
34497
34498     vector float vec_round (vector float);
34499
34500     vector float vec_rsqrte (vector float);
34501
34502     vector float vec_sel (vector float, vector float, vector bool int);
34503     vector float vec_sel (vector float, vector float, vector unsigned int);
34504     vector signed int vec_sel (vector signed int,
34505                                vector signed int,
34506                                vector bool int);
34507     vector signed int vec_sel (vector signed int,
34508                                vector signed int,
34509                                vector unsigned int);
34510     vector unsigned int vec_sel (vector unsigned int,
34511                                  vector unsigned int,
34512                                  vector bool int);
34513     vector unsigned int vec_sel (vector unsigned int,
34514                                  vector unsigned int,
34515                                  vector unsigned int);
34516     vector bool int vec_sel (vector bool int,
34517                              vector bool int,
34518                              vector bool int);
34519     vector bool int vec_sel (vector bool int,
34520                              vector bool int,
34521                              vector unsigned int);
34522     vector signed short vec_sel (vector signed short,
34523                                  vector signed short,
34524                                  vector bool short);
34525     vector signed short vec_sel (vector signed short,
34526                                  vector signed short,
34527                                  vector unsigned short);
34528     vector unsigned short vec_sel (vector unsigned short,
34529                                    vector unsigned short,
34530                                    vector bool short);
34531     vector unsigned short vec_sel (vector unsigned short,
34532                                    vector unsigned short,
34533                                    vector unsigned short);
34534     vector bool short vec_sel (vector bool short,
34535                                vector bool short,
34536                                vector bool short);
34537     vector bool short vec_sel (vector bool short,
34538                                vector bool short,
34539                                vector unsigned short);
34540     vector signed char vec_sel (vector signed char,
34541                                 vector signed char,
34542                                 vector bool char);
34543     vector signed char vec_sel (vector signed char,
34544                                 vector signed char,
34545                                 vector unsigned char);
34546     vector unsigned char vec_sel (vector unsigned char,
34547                                   vector unsigned char,
34548                                   vector bool char);
34549     vector unsigned char vec_sel (vector unsigned char,
34550                                   vector unsigned char,
34551                                   vector unsigned char);
34552     vector bool char vec_sel (vector bool char,
34553                               vector bool char,
34554                               vector bool char);
34555     vector bool char vec_sel (vector bool char,
34556                               vector bool char,
34557                               vector unsigned char);
34558
34559     vector signed char vec_sl (vector signed char,
34560                                vector unsigned char);
34561     vector unsigned char vec_sl (vector unsigned char,
34562                                  vector unsigned char);
34563     vector signed short vec_sl (vector signed short, vector unsigned short);
34564     vector unsigned short vec_sl (vector unsigned short,
34565                                   vector unsigned short);
34566     vector signed int vec_sl (vector signed int, vector unsigned int);
34567     vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
34568
34569     vector signed int vec_vslw (vector signed int, vector unsigned int);
34570     vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
34571
34572     vector signed short vec_vslh (vector signed short,
34573                                   vector unsigned short);
34574     vector unsigned short vec_vslh (vector unsigned short,
34575                                     vector unsigned short);
34576
34577     vector signed char vec_vslb (vector signed char, vector unsigned char);
34578     vector unsigned char vec_vslb (vector unsigned char,
34579                                    vector unsigned char);
34580
34581     vector float vec_sld (vector float, vector float, const int);
34582     vector signed int vec_sld (vector signed int,
34583                                vector signed int,
34584                                const int);
34585     vector unsigned int vec_sld (vector unsigned int,
34586                                  vector unsigned int,
34587                                  const int);
34588     vector bool int vec_sld (vector bool int,
34589                              vector bool int,
34590                              const int);
34591     vector signed short vec_sld (vector signed short,
34592                                  vector signed short,
34593                                  const int);
34594     vector unsigned short vec_sld (vector unsigned short,
34595                                    vector unsigned short,
34596                                    const int);
34597     vector bool short vec_sld (vector bool short,
34598                                vector bool short,
34599                                const int);
34600     vector pixel vec_sld (vector pixel,
34601                           vector pixel,
34602                           const int);
34603     vector signed char vec_sld (vector signed char,
34604                                 vector signed char,
34605                                 const int);
34606     vector unsigned char vec_sld (vector unsigned char,
34607                                   vector unsigned char,
34608                                   const int);
34609     vector bool char vec_sld (vector bool char,
34610                               vector bool char,
34611                               const int);
34612
34613     vector signed int vec_sll (vector signed int,
34614                                vector unsigned int);
34615     vector signed int vec_sll (vector signed int,
34616                                vector unsigned short);
34617     vector signed int vec_sll (vector signed int,
34618                                vector unsigned char);
34619     vector unsigned int vec_sll (vector unsigned int,
34620                                  vector unsigned int);
34621     vector unsigned int vec_sll (vector unsigned int,
34622                                  vector unsigned short);
34623     vector unsigned int vec_sll (vector unsigned int,
34624                                  vector unsigned char);
34625     vector bool int vec_sll (vector bool int,
34626                              vector unsigned int);
34627     vector bool int vec_sll (vector bool int,
34628                              vector unsigned short);
34629     vector bool int vec_sll (vector bool int,
34630                              vector unsigned char);
34631     vector signed short vec_sll (vector signed short,
34632                                  vector unsigned int);
34633     vector signed short vec_sll (vector signed short,
34634                                  vector unsigned short);
34635     vector signed short vec_sll (vector signed short,
34636                                  vector unsigned char);
34637     vector unsigned short vec_sll (vector unsigned short,
34638                                    vector unsigned int);
34639     vector unsigned short vec_sll (vector unsigned short,
34640                                    vector unsigned short);
34641     vector unsigned short vec_sll (vector unsigned short,
34642                                    vector unsigned char);
34643     vector bool short vec_sll (vector bool short, vector unsigned int);
34644     vector bool short vec_sll (vector bool short, vector unsigned short);
34645     vector bool short vec_sll (vector bool short, vector unsigned char);
34646     vector pixel vec_sll (vector pixel, vector unsigned int);
34647     vector pixel vec_sll (vector pixel, vector unsigned short);
34648     vector pixel vec_sll (vector pixel, vector unsigned char);
34649     vector signed char vec_sll (vector signed char, vector unsigned int);
34650     vector signed char vec_sll (vector signed char, vector unsigned short);
34651     vector signed char vec_sll (vector signed char, vector unsigned char);
34652     vector unsigned char vec_sll (vector unsigned char,
34653                                   vector unsigned int);
34654     vector unsigned char vec_sll (vector unsigned char,
34655                                   vector unsigned short);
34656     vector unsigned char vec_sll (vector unsigned char,
34657                                   vector unsigned char);
34658     vector bool char vec_sll (vector bool char, vector unsigned int);
34659     vector bool char vec_sll (vector bool char, vector unsigned short);
34660     vector bool char vec_sll (vector bool char, vector unsigned char);
34661
34662     vector float vec_slo (vector float, vector signed char);
34663     vector float vec_slo (vector float, vector unsigned char);
34664     vector signed int vec_slo (vector signed int, vector signed char);
34665     vector signed int vec_slo (vector signed int, vector unsigned char);
34666     vector unsigned int vec_slo (vector unsigned int, vector signed char);
34667     vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
34668     vector signed short vec_slo (vector signed short, vector signed char);
34669     vector signed short vec_slo (vector signed short, vector unsigned char);
34670     vector unsigned short vec_slo (vector unsigned short,
34671                                    vector signed char);
34672     vector unsigned short vec_slo (vector unsigned short,
34673                                    vector unsigned char);
34674     vector pixel vec_slo (vector pixel, vector signed char);
34675     vector pixel vec_slo (vector pixel, vector unsigned char);
34676     vector signed char vec_slo (vector signed char, vector signed char);
34677     vector signed char vec_slo (vector signed char, vector unsigned char);
34678     vector unsigned char vec_slo (vector unsigned char, vector signed char);
34679     vector unsigned char vec_slo (vector unsigned char,
34680                                   vector unsigned char);
34681
34682     vector signed char vec_splat (vector signed char, const int);
34683     vector unsigned char vec_splat (vector unsigned char, const int);
34684     vector bool char vec_splat (vector bool char, const int);
34685     vector signed short vec_splat (vector signed short, const int);
34686     vector unsigned short vec_splat (vector unsigned short, const int);
34687     vector bool short vec_splat (vector bool short, const int);
34688     vector pixel vec_splat (vector pixel, const int);
34689     vector float vec_splat (vector float, const int);
34690     vector signed int vec_splat (vector signed int, const int);
34691     vector unsigned int vec_splat (vector unsigned int, const int);
34692     vector bool int vec_splat (vector bool int, const int);
34693
34694     vector float vec_vspltw (vector float, const int);
34695     vector signed int vec_vspltw (vector signed int, const int);
34696     vector unsigned int vec_vspltw (vector unsigned int, const int);
34697     vector bool int vec_vspltw (vector bool int, const int);
34698
34699     vector bool short vec_vsplth (vector bool short, const int);
34700     vector signed short vec_vsplth (vector signed short, const int);
34701     vector unsigned short vec_vsplth (vector unsigned short, const int);
34702     vector pixel vec_vsplth (vector pixel, const int);
34703
34704     vector signed char vec_vspltb (vector signed char, const int);
34705     vector unsigned char vec_vspltb (vector unsigned char, const int);
34706     vector bool char vec_vspltb (vector bool char, const int);
34707
34708     vector signed char vec_splat_s8 (const int);
34709
34710     vector signed short vec_splat_s16 (const int);
34711
34712     vector signed int vec_splat_s32 (const int);
34713
34714     vector unsigned char vec_splat_u8 (const int);
34715
34716     vector unsigned short vec_splat_u16 (const int);
34717
34718     vector unsigned int vec_splat_u32 (const int);
34719
34720     vector signed char vec_sr (vector signed char, vector unsigned char);
34721     vector unsigned char vec_sr (vector unsigned char,
34722                                  vector unsigned char);
34723     vector signed short vec_sr (vector signed short,
34724                                 vector unsigned short);
34725     vector unsigned short vec_sr (vector unsigned short,
34726                                   vector unsigned short);
34727     vector signed int vec_sr (vector signed int, vector unsigned int);
34728     vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
34729
34730     vector signed int vec_vsrw (vector signed int, vector unsigned int);
34731     vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
34732
34733     vector signed short vec_vsrh (vector signed short,
34734                                   vector unsigned short);
34735     vector unsigned short vec_vsrh (vector unsigned short,
34736                                     vector unsigned short);
34737
34738     vector signed char vec_vsrb (vector signed char, vector unsigned char);
34739     vector unsigned char vec_vsrb (vector unsigned char,
34740                                    vector unsigned char);
34741
34742     vector signed char vec_sra (vector signed char, vector unsigned char);
34743     vector unsigned char vec_sra (vector unsigned char,
34744                                   vector unsigned char);
34745     vector signed short vec_sra (vector signed short,
34746                                  vector unsigned short);
34747     vector unsigned short vec_sra (vector unsigned short,
34748                                    vector unsigned short);
34749     vector signed int vec_sra (vector signed int, vector unsigned int);
34750     vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
34751
34752     vector signed int vec_vsraw (vector signed int, vector unsigned int);
34753     vector unsigned int vec_vsraw (vector unsigned int,
34754                                    vector unsigned int);
34755
34756     vector signed short vec_vsrah (vector signed short,
34757                                    vector unsigned short);
34758     vector unsigned short vec_vsrah (vector unsigned short,
34759                                      vector unsigned short);
34760
34761     vector signed char vec_vsrab (vector signed char, vector unsigned char);
34762     vector unsigned char vec_vsrab (vector unsigned char,
34763                                     vector unsigned char);
34764
34765     vector signed int vec_srl (vector signed int, vector unsigned int);
34766     vector signed int vec_srl (vector signed int, vector unsigned short);
34767     vector signed int vec_srl (vector signed int, vector unsigned char);
34768     vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
34769     vector unsigned int vec_srl (vector unsigned int,
34770                                  vector unsigned short);
34771     vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
34772     vector bool int vec_srl (vector bool int, vector unsigned int);
34773     vector bool int vec_srl (vector bool int, vector unsigned short);
34774     vector bool int vec_srl (vector bool int, vector unsigned char);
34775     vector signed short vec_srl (vector signed short, vector unsigned int);
34776     vector signed short vec_srl (vector signed short,
34777                                  vector unsigned short);
34778     vector signed short vec_srl (vector signed short, vector unsigned char);
34779     vector unsigned short vec_srl (vector unsigned short,
34780                                    vector unsigned int);
34781     vector unsigned short vec_srl (vector unsigned short,
34782                                    vector unsigned short);
34783     vector unsigned short vec_srl (vector unsigned short,
34784                                    vector unsigned char);
34785     vector bool short vec_srl (vector bool short, vector unsigned int);
34786     vector bool short vec_srl (vector bool short, vector unsigned short);
34787     vector bool short vec_srl (vector bool short, vector unsigned char);
34788     vector pixel vec_srl (vector pixel, vector unsigned int);
34789     vector pixel vec_srl (vector pixel, vector unsigned short);
34790     vector pixel vec_srl (vector pixel, vector unsigned char);
34791     vector signed char vec_srl (vector signed char, vector unsigned int);
34792     vector signed char vec_srl (vector signed char, vector unsigned short);
34793     vector signed char vec_srl (vector signed char, vector unsigned char);
34794     vector unsigned char vec_srl (vector unsigned char,
34795                                   vector unsigned int);
34796     vector unsigned char vec_srl (vector unsigned char,
34797                                   vector unsigned short);
34798     vector unsigned char vec_srl (vector unsigned char,
34799                                   vector unsigned char);
34800     vector bool char vec_srl (vector bool char, vector unsigned int);
34801     vector bool char vec_srl (vector bool char, vector unsigned short);
34802     vector bool char vec_srl (vector bool char, vector unsigned char);
34803
34804     vector float vec_sro (vector float, vector signed char);
34805     vector float vec_sro (vector float, vector unsigned char);
34806     vector signed int vec_sro (vector signed int, vector signed char);
34807     vector signed int vec_sro (vector signed int, vector unsigned char);
34808     vector unsigned int vec_sro (vector unsigned int, vector signed char);
34809     vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
34810     vector signed short vec_sro (vector signed short, vector signed char);
34811     vector signed short vec_sro (vector signed short, vector unsigned char);
34812     vector unsigned short vec_sro (vector unsigned short,
34813                                    vector signed char);
34814     vector unsigned short vec_sro (vector unsigned short,
34815                                    vector unsigned char);
34816     vector pixel vec_sro (vector pixel, vector signed char);
34817     vector pixel vec_sro (vector pixel, vector unsigned char);
34818     vector signed char vec_sro (vector signed char, vector signed char);
34819     vector signed char vec_sro (vector signed char, vector unsigned char);
34820     vector unsigned char vec_sro (vector unsigned char, vector signed char);
34821     vector unsigned char vec_sro (vector unsigned char,
34822                                   vector unsigned char);
34823
34824     void vec_st (vector float, int, vector float *);
34825     void vec_st (vector float, int, float *);
34826     void vec_st (vector signed int, int, vector signed int *);
34827     void vec_st (vector signed int, int, int *);
34828     void vec_st (vector unsigned int, int, vector unsigned int *);
34829     void vec_st (vector unsigned int, int, unsigned int *);
34830     void vec_st (vector bool int, int, vector bool int *);
34831     void vec_st (vector bool int, int, unsigned int *);
34832     void vec_st (vector bool int, int, int *);
34833     void vec_st (vector signed short, int, vector signed short *);
34834     void vec_st (vector signed short, int, short *);
34835     void vec_st (vector unsigned short, int, vector unsigned short *);
34836     void vec_st (vector unsigned short, int, unsigned short *);
34837     void vec_st (vector bool short, int, vector bool short *);
34838     void vec_st (vector bool short, int, unsigned short *);
34839     void vec_st (vector pixel, int, vector pixel *);
34840     void vec_st (vector pixel, int, unsigned short *);
34841     void vec_st (vector pixel, int, short *);
34842     void vec_st (vector bool short, int, short *);
34843     void vec_st (vector signed char, int, vector signed char *);
34844     void vec_st (vector signed char, int, signed char *);
34845     void vec_st (vector unsigned char, int, vector unsigned char *);
34846     void vec_st (vector unsigned char, int, unsigned char *);
34847     void vec_st (vector bool char, int, vector bool char *);
34848     void vec_st (vector bool char, int, unsigned char *);
34849     void vec_st (vector bool char, int, signed char *);
34850
34851     void vec_ste (vector signed char, int, signed char *);
34852     void vec_ste (vector unsigned char, int, unsigned char *);
34853     void vec_ste (vector bool char, int, signed char *);
34854     void vec_ste (vector bool char, int, unsigned char *);
34855     void vec_ste (vector signed short, int, short *);
34856     void vec_ste (vector unsigned short, int, unsigned short *);
34857     void vec_ste (vector bool short, int, short *);
34858     void vec_ste (vector bool short, int, unsigned short *);
34859     void vec_ste (vector pixel, int, short *);
34860     void vec_ste (vector pixel, int, unsigned short *);
34861     void vec_ste (vector float, int, float *);
34862     void vec_ste (vector signed int, int, int *);
34863     void vec_ste (vector unsigned int, int, unsigned int *);
34864     void vec_ste (vector bool int, int, int *);
34865     void vec_ste (vector bool int, int, unsigned int *);
34866
34867     void vec_stvewx (vector float, int, float *);
34868     void vec_stvewx (vector signed int, int, int *);
34869     void vec_stvewx (vector unsigned int, int, unsigned int *);
34870     void vec_stvewx (vector bool int, int, int *);
34871     void vec_stvewx (vector bool int, int, unsigned int *);
34872
34873     void vec_stvehx (vector signed short, int, short *);
34874     void vec_stvehx (vector unsigned short, int, unsigned short *);
34875     void vec_stvehx (vector bool short, int, short *);
34876     void vec_stvehx (vector bool short, int, unsigned short *);
34877     void vec_stvehx (vector pixel, int, short *);
34878     void vec_stvehx (vector pixel, int, unsigned short *);
34879
34880     void vec_stvebx (vector signed char, int, signed char *);
34881     void vec_stvebx (vector unsigned char, int, unsigned char *);
34882     void vec_stvebx (vector bool char, int, signed char *);
34883     void vec_stvebx (vector bool char, int, unsigned char *);
34884
34885     void vec_stl (vector float, int, vector float *);
34886     void vec_stl (vector float, int, float *);
34887     void vec_stl (vector signed int, int, vector signed int *);
34888     void vec_stl (vector signed int, int, int *);
34889     void vec_stl (vector unsigned int, int, vector unsigned int *);
34890     void vec_stl (vector unsigned int, int, unsigned int *);
34891     void vec_stl (vector bool int, int, vector bool int *);
34892     void vec_stl (vector bool int, int, unsigned int *);
34893     void vec_stl (vector bool int, int, int *);
34894     void vec_stl (vector signed short, int, vector signed short *);
34895     void vec_stl (vector signed short, int, short *);
34896     void vec_stl (vector unsigned short, int, vector unsigned short *);
34897     void vec_stl (vector unsigned short, int, unsigned short *);
34898     void vec_stl (vector bool short, int, vector bool short *);
34899     void vec_stl (vector bool short, int, unsigned short *);
34900     void vec_stl (vector bool short, int, short *);
34901     void vec_stl (vector pixel, int, vector pixel *);
34902     void vec_stl (vector pixel, int, unsigned short *);
34903     void vec_stl (vector pixel, int, short *);
34904     void vec_stl (vector signed char, int, vector signed char *);
34905     void vec_stl (vector signed char, int, signed char *);
34906     void vec_stl (vector unsigned char, int, vector unsigned char *);
34907     void vec_stl (vector unsigned char, int, unsigned char *);
34908     void vec_stl (vector bool char, int, vector bool char *);
34909     void vec_stl (vector bool char, int, unsigned char *);
34910     void vec_stl (vector bool char, int, signed char *);
34911
34912     vector signed char vec_sub (vector bool char, vector signed char);
34913     vector signed char vec_sub (vector signed char, vector bool char);
34914     vector signed char vec_sub (vector signed char, vector signed char);
34915     vector unsigned char vec_sub (vector bool char, vector unsigned char);
34916     vector unsigned char vec_sub (vector unsigned char, vector bool char);
34917     vector unsigned char vec_sub (vector unsigned char,
34918                                   vector unsigned char);
34919     vector signed short vec_sub (vector bool short, vector signed short);
34920     vector signed short vec_sub (vector signed short, vector bool short);
34921     vector signed short vec_sub (vector signed short, vector signed short);
34922     vector unsigned short vec_sub (vector bool short,
34923                                    vector unsigned short);
34924     vector unsigned short vec_sub (vector unsigned short,
34925                                    vector bool short);
34926     vector unsigned short vec_sub (vector unsigned short,
34927                                    vector unsigned short);
34928     vector signed int vec_sub (vector bool int, vector signed int);
34929     vector signed int vec_sub (vector signed int, vector bool int);
34930     vector signed int vec_sub (vector signed int, vector signed int);
34931     vector unsigned int vec_sub (vector bool int, vector unsigned int);
34932     vector unsigned int vec_sub (vector unsigned int, vector bool int);
34933     vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
34934     vector float vec_sub (vector float, vector float);
34935
34936     vector float vec_vsubfp (vector float, vector float);
34937
34938     vector signed int vec_vsubuwm (vector bool int, vector signed int);
34939     vector signed int vec_vsubuwm (vector signed int, vector bool int);
34940     vector signed int vec_vsubuwm (vector signed int, vector signed int);
34941     vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
34942     vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
34943     vector unsigned int vec_vsubuwm (vector unsigned int,
34944                                      vector unsigned int);
34945
34946     vector signed short vec_vsubuhm (vector bool short,
34947                                      vector signed short);
34948     vector signed short vec_vsubuhm (vector signed short,
34949                                      vector bool short);
34950     vector signed short vec_vsubuhm (vector signed short,
34951                                      vector signed short);
34952     vector unsigned short vec_vsubuhm (vector bool short,
34953                                        vector unsigned short);
34954     vector unsigned short vec_vsubuhm (vector unsigned short,
34955                                        vector bool short);
34956     vector unsigned short vec_vsubuhm (vector unsigned short,
34957                                        vector unsigned short);
34958
34959     vector signed char vec_vsububm (vector bool char, vector signed char);
34960     vector signed char vec_vsububm (vector signed char, vector bool char);
34961     vector signed char vec_vsububm (vector signed char, vector signed char);
34962     vector unsigned char vec_vsububm (vector bool char,
34963                                       vector unsigned char);
34964     vector unsigned char vec_vsububm (vector unsigned char,
34965                                       vector bool char);
34966     vector unsigned char vec_vsububm (vector unsigned char,
34967                                       vector unsigned char);
34968
34969     vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
34970
34971     vector unsigned char vec_subs (vector bool char, vector unsigned char);
34972     vector unsigned char vec_subs (vector unsigned char, vector bool char);
34973     vector unsigned char vec_subs (vector unsigned char,
34974                                    vector unsigned char);
34975     vector signed char vec_subs (vector bool char, vector signed char);
34976     vector signed char vec_subs (vector signed char, vector bool char);
34977     vector signed char vec_subs (vector signed char, vector signed char);
34978     vector unsigned short vec_subs (vector bool short,
34979                                     vector unsigned short);
34980     vector unsigned short vec_subs (vector unsigned short,
34981                                     vector bool short);
34982     vector unsigned short vec_subs (vector unsigned short,
34983                                     vector unsigned short);
34984     vector signed short vec_subs (vector bool short, vector signed short);
34985     vector signed short vec_subs (vector signed short, vector bool short);
34986     vector signed short vec_subs (vector signed short, vector signed short);
34987     vector unsigned int vec_subs (vector bool int, vector unsigned int);
34988     vector unsigned int vec_subs (vector unsigned int, vector bool int);
34989     vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
34990     vector signed int vec_subs (vector bool int, vector signed int);
34991     vector signed int vec_subs (vector signed int, vector bool int);
34992     vector signed int vec_subs (vector signed int, vector signed int);
34993
34994     vector signed int vec_vsubsws (vector bool int, vector signed int);
34995     vector signed int vec_vsubsws (vector signed int, vector bool int);
34996     vector signed int vec_vsubsws (vector signed int, vector signed int);
34997
34998     vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
34999     vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
35000     vector unsigned int vec_vsubuws (vector unsigned int,
35001                                      vector unsigned int);
35002
35003     vector signed short vec_vsubshs (vector bool short,
35004                                      vector signed short);
35005     vector signed short vec_vsubshs (vector signed short,
35006                                      vector bool short);
35007     vector signed short vec_vsubshs (vector signed short,
35008                                      vector signed short);
35009
35010     vector unsigned short vec_vsubuhs (vector bool short,
35011                                        vector unsigned short);
35012     vector unsigned short vec_vsubuhs (vector unsigned short,
35013                                        vector bool short);
35014     vector unsigned short vec_vsubuhs (vector unsigned short,
35015                                        vector unsigned short);
35016
35017     vector signed char vec_vsubsbs (vector bool char, vector signed char);
35018     vector signed char vec_vsubsbs (vector signed char, vector bool char);
35019     vector signed char vec_vsubsbs (vector signed char, vector signed char);
35020
35021     vector unsigned char vec_vsububs (vector bool char,
35022                                       vector unsigned char);
35023     vector unsigned char vec_vsububs (vector unsigned char,
35024                                       vector bool char);
35025     vector unsigned char vec_vsububs (vector unsigned char,
35026                                       vector unsigned char);
35027
35028     vector unsigned int vec_sum4s (vector unsigned char,
35029                                    vector unsigned int);
35030     vector signed int vec_sum4s (vector signed char, vector signed int);
35031     vector signed int vec_sum4s (vector signed short, vector signed int);
35032
35033     vector signed int vec_vsum4shs (vector signed short, vector signed int);
35034
35035     vector signed int vec_vsum4sbs (vector signed char, vector signed int);
35036
35037     vector unsigned int vec_vsum4ubs (vector unsigned char,
35038                                       vector unsigned int);
35039
35040     vector signed int vec_sum2s (vector signed int, vector signed int);
35041
35042     vector signed int vec_sums (vector signed int, vector signed int);
35043
35044     vector float vec_trunc (vector float);
35045
35046     vector signed short vec_unpackh (vector signed char);
35047     vector bool short vec_unpackh (vector bool char);
35048     vector signed int vec_unpackh (vector signed short);
35049     vector bool int vec_unpackh (vector bool short);
35050     vector unsigned int vec_unpackh (vector pixel);
35051
35052     vector bool int vec_vupkhsh (vector bool short);
35053     vector signed int vec_vupkhsh (vector signed short);
35054
35055     vector unsigned int vec_vupkhpx (vector pixel);
35056
35057     vector bool short vec_vupkhsb (vector bool char);
35058     vector signed short vec_vupkhsb (vector signed char);
35059
35060     vector signed short vec_unpackl (vector signed char);
35061     vector bool short vec_unpackl (vector bool char);
35062     vector unsigned int vec_unpackl (vector pixel);
35063     vector signed int vec_unpackl (vector signed short);
35064     vector bool int vec_unpackl (vector bool short);
35065
35066     vector unsigned int vec_vupklpx (vector pixel);
35067
35068     vector bool int vec_vupklsh (vector bool short);
35069     vector signed int vec_vupklsh (vector signed short);
35070
35071     vector bool short vec_vupklsb (vector bool char);
35072     vector signed short vec_vupklsb (vector signed char);
35073
35074     vector float vec_xor (vector float, vector float);
35075     vector float vec_xor (vector float, vector bool int);
35076     vector float vec_xor (vector bool int, vector float);
35077     vector bool int vec_xor (vector bool int, vector bool int);
35078     vector signed int vec_xor (vector bool int, vector signed int);
35079     vector signed int vec_xor (vector signed int, vector bool int);
35080     vector signed int vec_xor (vector signed int, vector signed int);
35081     vector unsigned int vec_xor (vector bool int, vector unsigned int);
35082     vector unsigned int vec_xor (vector unsigned int, vector bool int);
35083     vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
35084     vector bool short vec_xor (vector bool short, vector bool short);
35085     vector signed short vec_xor (vector bool short, vector signed short);
35086     vector signed short vec_xor (vector signed short, vector bool short);
35087     vector signed short vec_xor (vector signed short, vector signed short);
35088     vector unsigned short vec_xor (vector bool short,
35089                                    vector unsigned short);
35090     vector unsigned short vec_xor (vector unsigned short,
35091                                    vector bool short);
35092     vector unsigned short vec_xor (vector unsigned short,
35093                                    vector unsigned short);
35094     vector signed char vec_xor (vector bool char, vector signed char);
35095     vector bool char vec_xor (vector bool char, vector bool char);
35096     vector signed char vec_xor (vector signed char, vector bool char);
35097     vector signed char vec_xor (vector signed char, vector signed char);
35098     vector unsigned char vec_xor (vector bool char, vector unsigned char);
35099     vector unsigned char vec_xor (vector unsigned char, vector bool char);
35100     vector unsigned char vec_xor (vector unsigned char,
35101                                   vector unsigned char);
35102
35103     int vec_all_eq (vector signed char, vector bool char);
35104     int vec_all_eq (vector signed char, vector signed char);
35105     int vec_all_eq (vector unsigned char, vector bool char);
35106     int vec_all_eq (vector unsigned char, vector unsigned char);
35107     int vec_all_eq (vector bool char, vector bool char);
35108     int vec_all_eq (vector bool char, vector unsigned char);
35109     int vec_all_eq (vector bool char, vector signed char);
35110     int vec_all_eq (vector signed short, vector bool short);
35111     int vec_all_eq (vector signed short, vector signed short);
35112     int vec_all_eq (vector unsigned short, vector bool short);
35113     int vec_all_eq (vector unsigned short, vector unsigned short);
35114     int vec_all_eq (vector bool short, vector bool short);
35115     int vec_all_eq (vector bool short, vector unsigned short);
35116     int vec_all_eq (vector bool short, vector signed short);
35117     int vec_all_eq (vector pixel, vector pixel);
35118     int vec_all_eq (vector signed int, vector bool int);
35119     int vec_all_eq (vector signed int, vector signed int);
35120     int vec_all_eq (vector unsigned int, vector bool int);
35121     int vec_all_eq (vector unsigned int, vector unsigned int);
35122     int vec_all_eq (vector bool int, vector bool int);
35123     int vec_all_eq (vector bool int, vector unsigned int);
35124     int vec_all_eq (vector bool int, vector signed int);
35125     int vec_all_eq (vector float, vector float);
35126
35127     int vec_all_ge (vector bool char, vector unsigned char);
35128     int vec_all_ge (vector unsigned char, vector bool char);
35129     int vec_all_ge (vector unsigned char, vector unsigned char);
35130     int vec_all_ge (vector bool char, vector signed char);
35131     int vec_all_ge (vector signed char, vector bool char);
35132     int vec_all_ge (vector signed char, vector signed char);
35133     int vec_all_ge (vector bool short, vector unsigned short);
35134     int vec_all_ge (vector unsigned short, vector bool short);
35135     int vec_all_ge (vector unsigned short, vector unsigned short);
35136     int vec_all_ge (vector signed short, vector signed short);
35137     int vec_all_ge (vector bool short, vector signed short);
35138     int vec_all_ge (vector signed short, vector bool short);
35139     int vec_all_ge (vector bool int, vector unsigned int);
35140     int vec_all_ge (vector unsigned int, vector bool int);
35141     int vec_all_ge (vector unsigned int, vector unsigned int);
35142     int vec_all_ge (vector bool int, vector signed int);
35143     int vec_all_ge (vector signed int, vector bool int);
35144     int vec_all_ge (vector signed int, vector signed int);
35145     int vec_all_ge (vector float, vector float);
35146
35147     int vec_all_gt (vector bool char, vector unsigned char);
35148     int vec_all_gt (vector unsigned char, vector bool char);
35149     int vec_all_gt (vector unsigned char, vector unsigned char);
35150     int vec_all_gt (vector bool char, vector signed char);
35151     int vec_all_gt (vector signed char, vector bool char);
35152     int vec_all_gt (vector signed char, vector signed char);
35153     int vec_all_gt (vector bool short, vector unsigned short);
35154     int vec_all_gt (vector unsigned short, vector bool short);
35155     int vec_all_gt (vector unsigned short, vector unsigned short);
35156     int vec_all_gt (vector bool short, vector signed short);
35157     int vec_all_gt (vector signed short, vector bool short);
35158     int vec_all_gt (vector signed short, vector signed short);
35159     int vec_all_gt (vector bool int, vector unsigned int);
35160     int vec_all_gt (vector unsigned int, vector bool int);
35161     int vec_all_gt (vector unsigned int, vector unsigned int);
35162     int vec_all_gt (vector bool int, vector signed int);
35163     int vec_all_gt (vector signed int, vector bool int);
35164     int vec_all_gt (vector signed int, vector signed int);
35165     int vec_all_gt (vector float, vector float);
35166
35167     int vec_all_in (vector float, vector float);
35168
35169     int vec_all_le (vector bool char, vector unsigned char);
35170     int vec_all_le (vector unsigned char, vector bool char);
35171     int vec_all_le (vector unsigned char, vector unsigned char);
35172     int vec_all_le (vector bool char, vector signed char);
35173     int vec_all_le (vector signed char, vector bool char);
35174     int vec_all_le (vector signed char, vector signed char);
35175     int vec_all_le (vector bool short, vector unsigned short);
35176     int vec_all_le (vector unsigned short, vector bool short);
35177     int vec_all_le (vector unsigned short, vector unsigned short);
35178     int vec_all_le (vector bool short, vector signed short);
35179     int vec_all_le (vector signed short, vector bool short);
35180     int vec_all_le (vector signed short, vector signed short);
35181     int vec_all_le (vector bool int, vector unsigned int);
35182     int vec_all_le (vector unsigned int, vector bool int);
35183     int vec_all_le (vector unsigned int, vector unsigned int);
35184     int vec_all_le (vector bool int, vector signed int);
35185     int vec_all_le (vector signed int, vector bool int);
35186     int vec_all_le (vector signed int, vector signed int);
35187     int vec_all_le (vector float, vector float);
35188
35189     int vec_all_lt (vector bool char, vector unsigned char);
35190     int vec_all_lt (vector unsigned char, vector bool char);
35191     int vec_all_lt (vector unsigned char, vector unsigned char);
35192     int vec_all_lt (vector bool char, vector signed char);
35193     int vec_all_lt (vector signed char, vector bool char);
35194     int vec_all_lt (vector signed char, vector signed char);
35195     int vec_all_lt (vector bool short, vector unsigned short);
35196     int vec_all_lt (vector unsigned short, vector bool short);
35197     int vec_all_lt (vector unsigned short, vector unsigned short);
35198     int vec_all_lt (vector bool short, vector signed short);
35199     int vec_all_lt (vector signed short, vector bool short);
35200     int vec_all_lt (vector signed short, vector signed short);
35201     int vec_all_lt (vector bool int, vector unsigned int);
35202     int vec_all_lt (vector unsigned int, vector bool int);
35203     int vec_all_lt (vector unsigned int, vector unsigned int);
35204     int vec_all_lt (vector bool int, vector signed int);
35205     int vec_all_lt (vector signed int, vector bool int);
35206     int vec_all_lt (vector signed int, vector signed int);
35207     int vec_all_lt (vector float, vector float);
35208
35209     int vec_all_nan (vector float);
35210
35211     int vec_all_ne (vector signed char, vector bool char);
35212     int vec_all_ne (vector signed char, vector signed char);
35213     int vec_all_ne (vector unsigned char, vector bool char);
35214     int vec_all_ne (vector unsigned char, vector unsigned char);
35215     int vec_all_ne (vector bool char, vector bool char);
35216     int vec_all_ne (vector bool char, vector unsigned char);
35217     int vec_all_ne (vector bool char, vector signed char);
35218     int vec_all_ne (vector signed short, vector bool short);
35219     int vec_all_ne (vector signed short, vector signed short);
35220     int vec_all_ne (vector unsigned short, vector bool short);
35221     int vec_all_ne (vector unsigned short, vector unsigned short);
35222     int vec_all_ne (vector bool short, vector bool short);
35223     int vec_all_ne (vector bool short, vector unsigned short);
35224     int vec_all_ne (vector bool short, vector signed short);
35225     int vec_all_ne (vector pixel, vector pixel);
35226     int vec_all_ne (vector signed int, vector bool int);
35227     int vec_all_ne (vector signed int, vector signed int);
35228     int vec_all_ne (vector unsigned int, vector bool int);
35229     int vec_all_ne (vector unsigned int, vector unsigned int);
35230     int vec_all_ne (vector bool int, vector bool int);
35231     int vec_all_ne (vector bool int, vector unsigned int);
35232     int vec_all_ne (vector bool int, vector signed int);
35233     int vec_all_ne (vector float, vector float);
35234
35235     int vec_all_nge (vector float, vector float);
35236
35237     int vec_all_ngt (vector float, vector float);
35238
35239     int vec_all_nle (vector float, vector float);
35240
35241     int vec_all_nlt (vector float, vector float);
35242
35243     int vec_all_numeric (vector float);
35244
35245     int vec_any_eq (vector signed char, vector bool char);
35246     int vec_any_eq (vector signed char, vector signed char);
35247     int vec_any_eq (vector unsigned char, vector bool char);
35248     int vec_any_eq (vector unsigned char, vector unsigned char);
35249     int vec_any_eq (vector bool char, vector bool char);
35250     int vec_any_eq (vector bool char, vector unsigned char);
35251     int vec_any_eq (vector bool char, vector signed char);
35252     int vec_any_eq (vector signed short, vector bool short);
35253     int vec_any_eq (vector signed short, vector signed short);
35254     int vec_any_eq (vector unsigned short, vector bool short);
35255     int vec_any_eq (vector unsigned short, vector unsigned short);
35256     int vec_any_eq (vector bool short, vector bool short);
35257     int vec_any_eq (vector bool short, vector unsigned short);
35258     int vec_any_eq (vector bool short, vector signed short);
35259     int vec_any_eq (vector pixel, vector pixel);
35260     int vec_any_eq (vector signed int, vector bool int);
35261     int vec_any_eq (vector signed int, vector signed int);
35262     int vec_any_eq (vector unsigned int, vector bool int);
35263     int vec_any_eq (vector unsigned int, vector unsigned int);
35264     int vec_any_eq (vector bool int, vector bool int);
35265     int vec_any_eq (vector bool int, vector unsigned int);
35266     int vec_any_eq (vector bool int, vector signed int);
35267     int vec_any_eq (vector float, vector float);
35268
35269     int vec_any_ge (vector signed char, vector bool char);
35270     int vec_any_ge (vector unsigned char, vector bool char);
35271     int vec_any_ge (vector unsigned char, vector unsigned char);
35272     int vec_any_ge (vector signed char, vector signed char);
35273     int vec_any_ge (vector bool char, vector unsigned char);
35274     int vec_any_ge (vector bool char, vector signed char);
35275     int vec_any_ge (vector unsigned short, vector bool short);
35276     int vec_any_ge (vector unsigned short, vector unsigned short);
35277     int vec_any_ge (vector signed short, vector signed short);
35278     int vec_any_ge (vector signed short, vector bool short);
35279     int vec_any_ge (vector bool short, vector unsigned short);
35280     int vec_any_ge (vector bool short, vector signed short);
35281     int vec_any_ge (vector signed int, vector bool int);
35282     int vec_any_ge (vector unsigned int, vector bool int);
35283     int vec_any_ge (vector unsigned int, vector unsigned int);
35284     int vec_any_ge (vector signed int, vector signed int);
35285     int vec_any_ge (vector bool int, vector unsigned int);
35286     int vec_any_ge (vector bool int, vector signed int);
35287     int vec_any_ge (vector float, vector float);
35288
35289     int vec_any_gt (vector bool char, vector unsigned char);
35290     int vec_any_gt (vector unsigned char, vector bool char);
35291     int vec_any_gt (vector unsigned char, vector unsigned char);
35292     int vec_any_gt (vector bool char, vector signed char);
35293     int vec_any_gt (vector signed char, vector bool char);
35294     int vec_any_gt (vector signed char, vector signed char);
35295     int vec_any_gt (vector bool short, vector unsigned short);
35296     int vec_any_gt (vector unsigned short, vector bool short);
35297     int vec_any_gt (vector unsigned short, vector unsigned short);
35298     int vec_any_gt (vector bool short, vector signed short);
35299     int vec_any_gt (vector signed short, vector bool short);
35300     int vec_any_gt (vector signed short, vector signed short);
35301     int vec_any_gt (vector bool int, vector unsigned int);
35302     int vec_any_gt (vector unsigned int, vector bool int);
35303     int vec_any_gt (vector unsigned int, vector unsigned int);
35304     int vec_any_gt (vector bool int, vector signed int);
35305     int vec_any_gt (vector signed int, vector bool int);
35306     int vec_any_gt (vector signed int, vector signed int);
35307     int vec_any_gt (vector float, vector float);
35308
35309     int vec_any_le (vector bool char, vector unsigned char);
35310     int vec_any_le (vector unsigned char, vector bool char);
35311     int vec_any_le (vector unsigned char, vector unsigned char);
35312     int vec_any_le (vector bool char, vector signed char);
35313     int vec_any_le (vector signed char, vector bool char);
35314     int vec_any_le (vector signed char, vector signed char);
35315     int vec_any_le (vector bool short, vector unsigned short);
35316     int vec_any_le (vector unsigned short, vector bool short);
35317     int vec_any_le (vector unsigned short, vector unsigned short);
35318     int vec_any_le (vector bool short, vector signed short);
35319     int vec_any_le (vector signed short, vector bool short);
35320     int vec_any_le (vector signed short, vector signed short);
35321     int vec_any_le (vector bool int, vector unsigned int);
35322     int vec_any_le (vector unsigned int, vector bool int);
35323     int vec_any_le (vector unsigned int, vector unsigned int);
35324     int vec_any_le (vector bool int, vector signed int);
35325     int vec_any_le (vector signed int, vector bool int);
35326     int vec_any_le (vector signed int, vector signed int);
35327     int vec_any_le (vector float, vector float);
35328
35329     int vec_any_lt (vector bool char, vector unsigned char);
35330     int vec_any_lt (vector unsigned char, vector bool char);
35331     int vec_any_lt (vector unsigned char, vector unsigned char);
35332     int vec_any_lt (vector bool char, vector signed char);
35333     int vec_any_lt (vector signed char, vector bool char);
35334     int vec_any_lt (vector signed char, vector signed char);
35335     int vec_any_lt (vector bool short, vector unsigned short);
35336     int vec_any_lt (vector unsigned short, vector bool short);
35337     int vec_any_lt (vector unsigned short, vector unsigned short);
35338     int vec_any_lt (vector bool short, vector signed short);
35339     int vec_any_lt (vector signed short, vector bool short);
35340     int vec_any_lt (vector signed short, vector signed short);
35341     int vec_any_lt (vector bool int, vector unsigned int);
35342     int vec_any_lt (vector unsigned int, vector bool int);
35343     int vec_any_lt (vector unsigned int, vector unsigned int);
35344     int vec_any_lt (vector bool int, vector signed int);
35345     int vec_any_lt (vector signed int, vector bool int);
35346     int vec_any_lt (vector signed int, vector signed int);
35347     int vec_any_lt (vector float, vector float);
35348
35349     int vec_any_nan (vector float);
35350
35351     int vec_any_ne (vector signed char, vector bool char);
35352     int vec_any_ne (vector signed char, vector signed char);
35353     int vec_any_ne (vector unsigned char, vector bool char);
35354     int vec_any_ne (vector unsigned char, vector unsigned char);
35355     int vec_any_ne (vector bool char, vector bool char);
35356     int vec_any_ne (vector bool char, vector unsigned char);
35357     int vec_any_ne (vector bool char, vector signed char);
35358     int vec_any_ne (vector signed short, vector bool short);
35359     int vec_any_ne (vector signed short, vector signed short);
35360     int vec_any_ne (vector unsigned short, vector bool short);
35361     int vec_any_ne (vector unsigned short, vector unsigned short);
35362     int vec_any_ne (vector bool short, vector bool short);
35363     int vec_any_ne (vector bool short, vector unsigned short);
35364     int vec_any_ne (vector bool short, vector signed short);
35365     int vec_any_ne (vector pixel, vector pixel);
35366     int vec_any_ne (vector signed int, vector bool int);
35367     int vec_any_ne (vector signed int, vector signed int);
35368     int vec_any_ne (vector unsigned int, vector bool int);
35369     int vec_any_ne (vector unsigned int, vector unsigned int);
35370     int vec_any_ne (vector bool int, vector bool int);
35371     int vec_any_ne (vector bool int, vector unsigned int);
35372     int vec_any_ne (vector bool int, vector signed int);
35373     int vec_any_ne (vector float, vector float);
35374
35375     int vec_any_nge (vector float, vector float);
35376
35377     int vec_any_ngt (vector float, vector float);
35378
35379     int vec_any_nle (vector float, vector float);
35380
35381     int vec_any_nlt (vector float, vector float);
35382
35383     int vec_any_numeric (vector float);
35384
35385     int vec_any_out (vector float, vector float);
35386
35387 If the vector/scalar (VSX) instruction set is available, the following
35388additional functions are available:
35389
35390     vector double vec_abs (vector double);
35391     vector double vec_add (vector double, vector double);
35392     vector double vec_and (vector double, vector double);
35393     vector double vec_and (vector double, vector bool long);
35394     vector double vec_and (vector bool long, vector double);
35395     vector double vec_andc (vector double, vector double);
35396     vector double vec_andc (vector double, vector bool long);
35397     vector double vec_andc (vector bool long, vector double);
35398     vector double vec_ceil (vector double);
35399     vector bool long vec_cmpeq (vector double, vector double);
35400     vector bool long vec_cmpge (vector double, vector double);
35401     vector bool long vec_cmpgt (vector double, vector double);
35402     vector bool long vec_cmple (vector double, vector double);
35403     vector bool long vec_cmplt (vector double, vector double);
35404     vector float vec_div (vector float, vector float);
35405     vector double vec_div (vector double, vector double);
35406     vector double vec_floor (vector double);
35407     vector double vec_ld (int, const vector double *);
35408     vector double vec_ld (int, const double *);
35409     vector double vec_ldl (int, const vector double *);
35410     vector double vec_ldl (int, const double *);
35411     vector unsigned char vec_lvsl (int, const volatile double *);
35412     vector unsigned char vec_lvsr (int, const volatile double *);
35413     vector double vec_madd (vector double, vector double, vector double);
35414     vector double vec_max (vector double, vector double);
35415     vector double vec_min (vector double, vector double);
35416     vector float vec_msub (vector float, vector float, vector float);
35417     vector double vec_msub (vector double, vector double, vector double);
35418     vector float vec_mul (vector float, vector float);
35419     vector double vec_mul (vector double, vector double);
35420     vector float vec_nearbyint (vector float);
35421     vector double vec_nearbyint (vector double);
35422     vector float vec_nmadd (vector float, vector float, vector float);
35423     vector double vec_nmadd (vector double, vector double, vector double);
35424     vector double vec_nmsub (vector double, vector double, vector double);
35425     vector double vec_nor (vector double, vector double);
35426     vector double vec_or (vector double, vector double);
35427     vector double vec_or (vector double, vector bool long);
35428     vector double vec_or (vector bool long, vector double);
35429     vector double vec_perm (vector double,
35430                             vector double,
35431                             vector unsigned char);
35432     vector float vec_rint (vector float);
35433     vector double vec_rint (vector double);
35434     vector double vec_sel (vector double, vector double, vector bool long);
35435     vector double vec_sel (vector double, vector double, vector unsigned long);
35436     vector double vec_sub (vector double, vector double);
35437     vector float vec_sqrt (vector float);
35438     vector double vec_sqrt (vector double);
35439     void vec_st (vector double, int, vector double *);
35440     void vec_st (vector double, int, double *);
35441     vector double vec_trunc (vector double);
35442     vector double vec_xor (vector double, vector double);
35443     vector double vec_xor (vector double, vector bool long);
35444     vector double vec_xor (vector bool long, vector double);
35445     int vec_all_eq (vector double, vector double);
35446     int vec_all_ge (vector double, vector double);
35447     int vec_all_gt (vector double, vector double);
35448     int vec_all_le (vector double, vector double);
35449     int vec_all_lt (vector double, vector double);
35450     int vec_all_nan (vector double);
35451     int vec_all_ne (vector double, vector double);
35452     int vec_all_nge (vector double, vector double);
35453     int vec_all_ngt (vector double, vector double);
35454     int vec_all_nle (vector double, vector double);
35455     int vec_all_nlt (vector double, vector double);
35456     int vec_all_numeric (vector double);
35457     int vec_any_eq (vector double, vector double);
35458     int vec_any_ge (vector double, vector double);
35459     int vec_any_gt (vector double, vector double);
35460     int vec_any_le (vector double, vector double);
35461     int vec_any_lt (vector double, vector double);
35462     int vec_any_nan (vector double);
35463     int vec_any_ne (vector double, vector double);
35464     int vec_any_nge (vector double, vector double);
35465     int vec_any_ngt (vector double, vector double);
35466     int vec_any_nle (vector double, vector double);
35467     int vec_any_nlt (vector double, vector double);
35468     int vec_any_numeric (vector double);
35469
35470     vector double vec_vsx_ld (int, const vector double *);
35471     vector double vec_vsx_ld (int, const double *);
35472     vector float vec_vsx_ld (int, const vector float *);
35473     vector float vec_vsx_ld (int, const float *);
35474     vector bool int vec_vsx_ld (int, const vector bool int *);
35475     vector signed int vec_vsx_ld (int, const vector signed int *);
35476     vector signed int vec_vsx_ld (int, const int *);
35477     vector signed int vec_vsx_ld (int, const long *);
35478     vector unsigned int vec_vsx_ld (int, const vector unsigned int *);
35479     vector unsigned int vec_vsx_ld (int, const unsigned int *);
35480     vector unsigned int vec_vsx_ld (int, const unsigned long *);
35481     vector bool short vec_vsx_ld (int, const vector bool short *);
35482     vector pixel vec_vsx_ld (int, const vector pixel *);
35483     vector signed short vec_vsx_ld (int, const vector signed short *);
35484     vector signed short vec_vsx_ld (int, const short *);
35485     vector unsigned short vec_vsx_ld (int, const vector unsigned short *);
35486     vector unsigned short vec_vsx_ld (int, const unsigned short *);
35487     vector bool char vec_vsx_ld (int, const vector bool char *);
35488     vector signed char vec_vsx_ld (int, const vector signed char *);
35489     vector signed char vec_vsx_ld (int, const signed char *);
35490     vector unsigned char vec_vsx_ld (int, const vector unsigned char *);
35491     vector unsigned char vec_vsx_ld (int, const unsigned char *);
35492
35493     void vec_vsx_st (vector double, int, vector double *);
35494     void vec_vsx_st (vector double, int, double *);
35495     void vec_vsx_st (vector float, int, vector float *);
35496     void vec_vsx_st (vector float, int, float *);
35497     void vec_vsx_st (vector signed int, int, vector signed int *);
35498     void vec_vsx_st (vector signed int, int, int *);
35499     void vec_vsx_st (vector unsigned int, int, vector unsigned int *);
35500     void vec_vsx_st (vector unsigned int, int, unsigned int *);
35501     void vec_vsx_st (vector bool int, int, vector bool int *);
35502     void vec_vsx_st (vector bool int, int, unsigned int *);
35503     void vec_vsx_st (vector bool int, int, int *);
35504     void vec_vsx_st (vector signed short, int, vector signed short *);
35505     void vec_vsx_st (vector signed short, int, short *);
35506     void vec_vsx_st (vector unsigned short, int, vector unsigned short *);
35507     void vec_vsx_st (vector unsigned short, int, unsigned short *);
35508     void vec_vsx_st (vector bool short, int, vector bool short *);
35509     void vec_vsx_st (vector bool short, int, unsigned short *);
35510     void vec_vsx_st (vector pixel, int, vector pixel *);
35511     void vec_vsx_st (vector pixel, int, unsigned short *);
35512     void vec_vsx_st (vector pixel, int, short *);
35513     void vec_vsx_st (vector bool short, int, short *);
35514     void vec_vsx_st (vector signed char, int, vector signed char *);
35515     void vec_vsx_st (vector signed char, int, signed char *);
35516     void vec_vsx_st (vector unsigned char, int, vector unsigned char *);
35517     void vec_vsx_st (vector unsigned char, int, unsigned char *);
35518     void vec_vsx_st (vector bool char, int, vector bool char *);
35519     void vec_vsx_st (vector bool char, int, unsigned char *);
35520     void vec_vsx_st (vector bool char, int, signed char *);
35521
35522 Note that the `vec_ld' and `vec_st' builtins will always generate the
35523Altivec `LVX' and `STVX' instructions even if the VSX instruction set
35524is available.  The `vec_vsx_ld' and `vec_vsx_st' builtins will always
35525generate the VSX `LXVD2X', `LXVW4X', `STXVD2X', and `STXVW4X'
35526instructions.
35527
35528 GCC provides a few other builtins on Powerpc to access certain
35529instructions:
35530     float __builtin_recipdivf (float, float);
35531     float __builtin_rsqrtf (float);
35532     double __builtin_recipdiv (double, double);
35533     long __builtin_bpermd (long, long);
35534     int __builtin_bswap16 (int);
35535
35536
35537File: gcc.info,  Node: RX Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: PowerPC AltiVec/VSX Built-in Functions,  Up: Target Builtins
35538
355396.52.13 RX Built-in Functions
35540-----------------------------
35541
35542GCC supports some of the RX instructions which cannot be expressed in
35543the C programming language via the use of built-in functions.  The
35544following functions are supported:
35545
35546 -- Built-in Function: void __builtin_rx_brk (void)
35547     Generates the `brk' machine instruction.
35548
35549 -- Built-in Function: void __builtin_rx_clrpsw (int)
35550     Generates the `clrpsw' machine instruction to clear the specified
35551     bit in the processor status word.
35552
35553 -- Built-in Function: void __builtin_rx_int (int)
35554     Generates the `int' machine instruction to generate an interrupt
35555     with the specified value.
35556
35557 -- Built-in Function: void __builtin_rx_machi (int, int)
35558     Generates the `machi' machine instruction to add the result of
35559     multiplying the top 16-bits of the two arguments into the
35560     accumulator.
35561
35562 -- Built-in Function: void __builtin_rx_maclo (int, int)
35563     Generates the `maclo' machine instruction to add the result of
35564     multiplying the bottom 16-bits of the two arguments into the
35565     accumulator.
35566
35567 -- Built-in Function: void __builtin_rx_mulhi (int, int)
35568     Generates the `mulhi' machine instruction to place the result of
35569     multiplying the top 16-bits of the two arguments into the
35570     accumulator.
35571
35572 -- Built-in Function: void __builtin_rx_mullo (int, int)
35573     Generates the `mullo' machine instruction to place the result of
35574     multiplying the bottom 16-bits of the two arguments into the
35575     accumulator.
35576
35577 -- Built-in Function: int __builtin_rx_mvfachi (void)
35578     Generates the `mvfachi' machine instruction to read the top
35579     32-bits of the accumulator.
35580
35581 -- Built-in Function: int __builtin_rx_mvfacmi (void)
35582     Generates the `mvfacmi' machine instruction to read the middle
35583     32-bits of the accumulator.
35584
35585 -- Built-in Function: int __builtin_rx_mvfc (int)
35586     Generates the `mvfc' machine instruction which reads the control
35587     register specified in its argument and returns its value.
35588
35589 -- Built-in Function: void __builtin_rx_mvtachi (int)
35590     Generates the `mvtachi' machine instruction to set the top 32-bits
35591     of the accumulator.
35592
35593 -- Built-in Function: void __builtin_rx_mvtaclo (int)
35594     Generates the `mvtaclo' machine instruction to set the bottom
35595     32-bits of the accumulator.
35596
35597 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val)
35598     Generates the `mvtc' machine instruction which sets control
35599     register number `reg' to `val'.
35600
35601 -- Built-in Function: void __builtin_rx_mvtipl (int)
35602     Generates the `mvtipl' machine instruction set the interrupt
35603     priority level.
35604
35605 -- Built-in Function: void __builtin_rx_racw (int)
35606     Generates the `racw' machine instruction to round the accumulator
35607     according to the specified mode.
35608
35609 -- Built-in Function: int __builtin_rx_revw (int)
35610     Generates the `revw' machine instruction which swaps the bytes in
35611     the argument so that bits 0-7 now occupy bits 8-15 and vice versa,
35612     and also bits 16-23 occupy bits 24-31 and vice versa.
35613
35614 -- Built-in Function: void __builtin_rx_rmpa (void)
35615     Generates the `rmpa' machine instruction which initiates a
35616     repeated multiply and accumulate sequence.
35617
35618 -- Built-in Function: void __builtin_rx_round (float)
35619     Generates the `round' machine instruction which returns the
35620     floating point argument rounded according to the current rounding
35621     mode set in the floating point status word register.
35622
35623 -- Built-in Function: int __builtin_rx_sat (int)
35624     Generates the `sat' machine instruction which returns the
35625     saturated value of the argument.
35626
35627 -- Built-in Function: void __builtin_rx_setpsw (int)
35628     Generates the `setpsw' machine instruction to set the specified
35629     bit in the processor status word.
35630
35631 -- Built-in Function: void __builtin_rx_wait (void)
35632     Generates the `wait' machine instruction.
35633
35634
35635File: gcc.info,  Node: SPARC VIS Built-in Functions,  Next: SPU Built-in Functions,  Prev: RX Built-in Functions,  Up: Target Builtins
35636
356376.52.14 SPARC VIS Built-in Functions
35638------------------------------------
35639
35640GCC supports SIMD operations on the SPARC using both the generic vector
35641extensions (*note Vector Extensions::) as well as built-in functions for
35642the SPARC Visual Instruction Set (VIS).  When you use the `-mvis'
35643switch, the VIS extension is exposed as the following built-in
35644functions:
35645
35646     typedef int v2si __attribute__ ((vector_size (8)));
35647     typedef short v4hi __attribute__ ((vector_size (8)));
35648     typedef short v2hi __attribute__ ((vector_size (4)));
35649     typedef char v8qi __attribute__ ((vector_size (8)));
35650     typedef char v4qi __attribute__ ((vector_size (4)));
35651
35652     void * __builtin_vis_alignaddr (void *, long);
35653     int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
35654     v2si __builtin_vis_faligndatav2si (v2si, v2si);
35655     v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
35656     v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
35657
35658     v4hi __builtin_vis_fexpand (v4qi);
35659
35660     v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
35661     v4hi __builtin_vis_fmul8x16au (v4qi, v4hi);
35662     v4hi __builtin_vis_fmul8x16al (v4qi, v4hi);
35663     v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
35664     v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
35665     v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
35666     v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
35667
35668     v4qi __builtin_vis_fpack16 (v4hi);
35669     v8qi __builtin_vis_fpack32 (v2si, v2si);
35670     v2hi __builtin_vis_fpackfix (v2si);
35671     v8qi __builtin_vis_fpmerge (v4qi, v4qi);
35672
35673     int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
35674
35675
35676File: gcc.info,  Node: SPU Built-in Functions,  Prev: SPARC VIS Built-in Functions,  Up: Target Builtins
35677
356786.52.15 SPU Built-in Functions
35679------------------------------
35680
35681GCC provides extensions for the SPU processor as described in the
35682Sony/Toshiba/IBM SPU Language Extensions Specification, which can be
35683found at `http://cell.scei.co.jp/' or
35684`http://www.ibm.com/developerworks/power/cell/'.  GCC's implementation
35685differs in several ways.
35686
35687   * The optional extension of specifying vector constants in
35688     parentheses is not supported.
35689
35690   * A vector initializer requires no cast if the vector constant is of
35691     the same type as the variable it is initializing.
35692
35693   * If `signed' or `unsigned' is omitted, the signedness of the vector
35694     type is the default signedness of the base type.  The default
35695     varies depending on the operating system, so a portable program
35696     should always specify the signedness.
35697
35698   * By default, the keyword `__vector' is added. The macro `vector' is
35699     defined in `<spu_intrinsics.h>' and can be undefined.
35700
35701   * GCC allows using a `typedef' name as the type specifier for a
35702     vector type.
35703
35704   * For C, overloaded functions are implemented with macros so the
35705     following does not work:
35706
35707            spu_add ((vector signed int){1, 2, 3, 4}, foo);
35708
35709     Since `spu_add' is a macro, the vector constant in the example is
35710     treated as four separate arguments.  Wrap the entire argument in
35711     parentheses for this to work.
35712
35713   * The extended version of `__builtin_expect' is not supported.
35714
35715
35716 _Note:_ Only the interface described in the aforementioned
35717specification is supported. Internally, GCC uses built-in functions to
35718implement the required functionality, but these are not supported and
35719are subject to change without notice.
35720
35721
35722File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions
35723
357246.53 Format Checks Specific to Particular Target Machines
35725=========================================================
35726
35727For some target machines, GCC supports additional options to the format
35728attribute (*note Declaring Attributes of Functions: Function
35729Attributes.).
35730
35731* Menu:
35732
35733* Solaris Format Checks::
35734
35735
35736File: gcc.info,  Node: Solaris Format Checks,  Up: Target Format Checks
35737
357386.53.1 Solaris Format Checks
35739----------------------------
35740
35741Solaris targets support the `cmn_err' (or `__cmn_err__') format check.
35742`cmn_err' accepts a subset of the standard `printf' conversions, and
35743the two-argument `%b' conversion for displaying bit-fields.  See the
35744Solaris man page for `cmn_err' for more information.
35745
35746
35747File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
35748
357496.54 Pragmas Accepted by GCC
35750============================
35751
35752GCC supports several types of pragmas, primarily in order to compile
35753code originally written for other compilers.  Note that in general we
35754do not recommend the use of pragmas; *Note Function Attributes::, for
35755further explanation.
35756
35757* Menu:
35758
35759* ARM Pragmas::
35760* M32C Pragmas::
35761* MeP Pragmas::
35762* RS/6000 and PowerPC Pragmas::
35763* Darwin Pragmas::
35764* Solaris Pragmas::
35765* Symbol-Renaming Pragmas::
35766* Structure-Packing Pragmas::
35767* Weak Pragmas::
35768* Diagnostic Pragmas::
35769* Visibility Pragmas::
35770* Push/Pop Macro Pragmas::
35771* Function Specific Option Pragmas::
35772
35773
35774File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Up: Pragmas
35775
357766.54.1 ARM Pragmas
35777------------------
35778
35779The ARM target defines pragmas for controlling the default addition of
35780`long_call' and `short_call' attributes to functions.  *Note Function
35781Attributes::, for information about the effects of these attributes.
35782
35783`long_calls'
35784     Set all subsequent functions to have the `long_call' attribute.
35785
35786`no_long_calls'
35787     Set all subsequent functions to have the `short_call' attribute.
35788
35789`long_calls_off'
35790     Do not affect the `long_call' or `short_call' attributes of
35791     subsequent functions.
35792
35793
35794File: gcc.info,  Node: M32C Pragmas,  Next: MeP Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
35795
357966.54.2 M32C Pragmas
35797-------------------
35798
35799`memregs NUMBER'
35800     Overrides the command line option `-memregs=' for the current
35801     file.  Use with care!  This pragma must be before any function in
35802     the file, and mixing different memregs values in different objects
35803     may make them incompatible.  This pragma is useful when a
35804     performance-critical function uses a memreg for temporary values,
35805     as it may allow you to reduce the number of memregs used.
35806
35807
35808
35809File: gcc.info,  Node: MeP Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: M32C Pragmas,  Up: Pragmas
35810
358116.54.3 MeP Pragmas
35812------------------
35813
35814`custom io_volatile (on|off)'
35815     Overrides the command line option `-mio-volatile' for the current
35816     file.  Note that for compatibility with future GCC releases, this
35817     option should only be used once before any `io' variables in each
35818     file.
35819
35820`GCC coprocessor available REGISTERS'
35821     Specifies which coprocessor registers are available to the register
35822     allocator.  REGISTERS may be a single register, register range
35823     separated by ellipses, or comma-separated list of those.  Example:
35824
35825          #pragma GCC coprocessor available $c0...$c10, $c28
35826
35827`GCC coprocessor call_saved REGISTERS'
35828     Specifies which coprocessor registers are to be saved and restored
35829     by any function using them.  REGISTERS may be a single register,
35830     register range separated by ellipses, or comma-separated list of
35831     those.  Example:
35832
35833          #pragma GCC coprocessor call_saved $c4...$c6, $c31
35834
35835`GCC coprocessor subclass '(A|B|C|D)' = REGISTERS'
35836     Creates and defines a register class.  These register classes can
35837     be used by inline `asm' constructs.  REGISTERS may be a single
35838     register, register range separated by ellipses, or comma-separated
35839     list of those.  Example:
35840
35841          #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6
35842
35843          asm ("cpfoo %0" : "=B" (x));
35844
35845`GCC disinterrupt NAME , NAME ...'
35846     For the named functions, the compiler adds code to disable
35847     interrupts for the duration of those functions.  Any functions so
35848     named, which are not encountered in the source, cause a warning
35849     that the pragma was not used.  Examples:
35850
35851          #pragma disinterrupt foo
35852          #pragma disinterrupt bar, grill
35853          int foo () { ... }
35854
35855`GCC call NAME , NAME ...'
35856     For the named functions, the compiler always uses a
35857     register-indirect call model when calling the named functions.
35858     Examples:
35859
35860          extern int foo ();
35861          #pragma call foo
35862
35863
35864
35865File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: Darwin Pragmas,  Prev: MeP Pragmas,  Up: Pragmas
35866
358676.54.4 RS/6000 and PowerPC Pragmas
35868----------------------------------
35869
35870The RS/6000 and PowerPC targets define one pragma for controlling
35871whether or not the `longcall' attribute is added to function
35872declarations by default.  This pragma overrides the `-mlongcall'
35873option, but not the `longcall' and `shortcall' attributes.  *Note
35874RS/6000 and PowerPC Options::, for more information about when long
35875calls are and are not necessary.
35876
35877`longcall (1)'
35878     Apply the `longcall' attribute to all subsequent function
35879     declarations.
35880
35881`longcall (0)'
35882     Do not apply the `longcall' attribute to subsequent function
35883     declarations.
35884
35885
35886File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
35887
358886.54.5 Darwin Pragmas
35889---------------------
35890
35891The following pragmas are available for all architectures running the
35892Darwin operating system.  These are useful for compatibility with other
35893Mac OS compilers.
35894
35895`mark TOKENS...'
35896     This pragma is accepted, but has no effect.
35897
35898`options align=ALIGNMENT'
35899     This pragma sets the alignment of fields in structures.  The
35900     values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or
35901     `power', to emulate PowerPC alignment.  Uses of this pragma nest
35902     properly; to restore the previous setting, use `reset' for the
35903     ALIGNMENT.
35904
35905`segment TOKENS...'
35906     This pragma is accepted, but has no effect.
35907
35908`unused (VAR [, VAR]...)'
35909     This pragma declares variables to be possibly unused.  GCC will not
35910     produce warnings for the listed variables.  The effect is similar
35911     to that of the `unused' attribute, except that this pragma may
35912     appear anywhere within the variables' scopes.
35913
35914
35915File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
35916
359176.54.6 Solaris Pragmas
35918----------------------
35919
35920The Solaris target supports `#pragma redefine_extname' (*note
35921Symbol-Renaming Pragmas::).  It also supports additional `#pragma'
35922directives for compatibility with the system compiler.
35923
35924`align ALIGNMENT (VARIABLE [, VARIABLE]...)'
35925     Increase the minimum alignment of each VARIABLE to ALIGNMENT.
35926     This is the same as GCC's `aligned' attribute *note Variable
35927     Attributes::).  Macro expansion occurs on the arguments to this
35928     pragma when compiling C and Objective-C.  It does not currently
35929     occur when compiling C++, but this is a bug which may be fixed in
35930     a future release.
35931
35932`fini (FUNCTION [, FUNCTION]...)'
35933     This pragma causes each listed FUNCTION to be called after main,
35934     or during shared module unloading, by adding a call to the `.fini'
35935     section.
35936
35937`init (FUNCTION [, FUNCTION]...)'
35938     This pragma causes each listed FUNCTION to be called during
35939     initialization (before `main') or during shared module loading, by
35940     adding a call to the `.init' section.
35941
35942
35943
35944File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Packing Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
35945
359466.54.7 Symbol-Renaming Pragmas
35947------------------------------
35948
35949For compatibility with the Solaris and Tru64 UNIX system headers, GCC
35950supports two `#pragma' directives which change the name used in
35951assembly for a given declaration.  `#pragma extern_prefix' is only
35952available on platforms whose system headers need it. To get this effect
35953on all platforms supported by GCC, use the asm labels extension (*note
35954Asm Labels::).
35955
35956`redefine_extname OLDNAME NEWNAME'
35957     This pragma gives the C function OLDNAME the assembly symbol
35958     NEWNAME.  The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' will
35959     be defined if this pragma is available (currently on all
35960     platforms).
35961
35962`extern_prefix STRING'
35963     This pragma causes all subsequent external function and variable
35964     declarations to have STRING prepended to their assembly symbols.
35965     This effect may be terminated with another `extern_prefix' pragma
35966     whose argument is an empty string.  The preprocessor macro
35967     `__PRAGMA_EXTERN_PREFIX' will be defined if this pragma is
35968     available (currently only on Tru64 UNIX).
35969
35970 These pragmas and the asm labels extension interact in a complicated
35971manner.  Here are some corner cases you may want to be aware of.
35972
35973  1. Both pragmas silently apply only to declarations with external
35974     linkage.  Asm labels do not have this restriction.
35975
35976  2. In C++, both pragmas silently apply only to declarations with "C"
35977     linkage.  Again, asm labels do not have this restriction.
35978
35979  3. If any of the three ways of changing the assembly name of a
35980     declaration is applied to a declaration whose assembly name has
35981     already been determined (either by a previous use of one of these
35982     features, or because the compiler needed the assembly name in
35983     order to generate code), and the new name is different, a warning
35984     issues and the name does not change.
35985
35986  4. The OLDNAME used by `#pragma redefine_extname' is always the
35987     C-language name.
35988
35989  5. If `#pragma extern_prefix' is in effect, and a declaration occurs
35990     with an asm label attached, the prefix is silently ignored for
35991     that declaration.
35992
35993  6. If `#pragma extern_prefix' and `#pragma redefine_extname' apply to
35994     the same declaration, whichever triggered first wins, and a
35995     warning issues if they contradict each other.  (We would like to
35996     have `#pragma redefine_extname' always win, for consistency with
35997     asm labels, but if `#pragma extern_prefix' triggers first we have
35998     no way of knowing that that happened.)
35999
36000
36001File: gcc.info,  Node: Structure-Packing Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas
36002
360036.54.8 Structure-Packing Pragmas
36004--------------------------------
36005
36006For compatibility with Microsoft Windows compilers, GCC supports a set
36007of `#pragma' directives which change the maximum alignment of members
36008of structures (other than zero-width bitfields), unions, and classes
36009subsequently defined. The N value below always is required to be a
36010small power of two and specifies the new alignment in bytes.
36011
36012  1. `#pragma pack(N)' simply sets the new alignment.
36013
36014  2. `#pragma pack()' sets the alignment to the one that was in effect
36015     when compilation started (see also command line option
36016     `-fpack-struct[=<n>]' *note Code Gen Options::).
36017
36018  3. `#pragma pack(push[,N])' pushes the current alignment setting on
36019     an internal stack and then optionally sets the new alignment.
36020
36021  4. `#pragma pack(pop)' restores the alignment setting to the one
36022     saved at the top of the internal stack (and removes that stack
36023     entry).  Note that `#pragma pack([N])' does not influence this
36024     internal stack; thus it is possible to have `#pragma pack(push)'
36025     followed by multiple `#pragma pack(N)' instances and finalized by
36026     a single `#pragma pack(pop)'.
36027
36028 Some targets, e.g. i386 and powerpc, support the `ms_struct' `#pragma'
36029which lays out a structure as the documented `__attribute__
36030((ms_struct))'.
36031  1. `#pragma ms_struct on' turns on the layout for structures declared.
36032
36033  2. `#pragma ms_struct off' turns off the layout for structures
36034     declared.
36035
36036  3. `#pragma ms_struct reset' goes back to the default layout.
36037
36038
36039File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Packing Pragmas,  Up: Pragmas
36040
360416.54.9 Weak Pragmas
36042-------------------
36043
36044For compatibility with SVR4, GCC supports a set of `#pragma' directives
36045for declaring symbols to be weak, and defining weak aliases.
36046
36047`#pragma weak SYMBOL'
36048     This pragma declares SYMBOL to be weak, as if the declaration had
36049     the attribute of the same name.  The pragma may appear before or
36050     after the declaration of SYMBOL, but must appear before either its
36051     first use or its definition.  It is not an error for SYMBOL to
36052     never be defined at all.
36053
36054`#pragma weak SYMBOL1 = SYMBOL2'
36055     This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
36056     an error if SYMBOL2 is not defined in the current translation unit.
36057
36058
36059File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas
36060
360616.54.10 Diagnostic Pragmas
36062--------------------------
36063
36064GCC allows the user to selectively enable or disable certain types of
36065diagnostics, and change the kind of the diagnostic.  For example, a
36066project's policy might require that all sources compile with `-Werror'
36067but certain files might have exceptions allowing specific types of
36068warnings.  Or, a project might selectively enable diagnostics and treat
36069them as errors depending on which preprocessor macros are defined.
36070
36071`#pragma GCC diagnostic KIND OPTION'
36072     Modifies the disposition of a diagnostic.  Note that not all
36073     diagnostics are modifiable; at the moment only warnings (normally
36074     controlled by `-W...') can be controlled, and not all of them.
36075     Use `-fdiagnostics-show-option' to determine which diagnostics are
36076     controllable and which option controls them.
36077
36078     KIND is `error' to treat this diagnostic as an error, `warning' to
36079     treat it like a warning (even if `-Werror' is in effect), or
36080     `ignored' if the diagnostic is to be ignored.  OPTION is a double
36081     quoted string which matches the command line option.
36082
36083          #pragma GCC diagnostic warning "-Wformat"
36084          #pragma GCC diagnostic error "-Wformat"
36085          #pragma GCC diagnostic ignored "-Wformat"
36086
36087     Note that these pragmas override any command line options.  Also,
36088     while it is syntactically valid to put these pragmas anywhere in
36089     your sources, the only supported location for them is before any
36090     data or functions are defined.  Doing otherwise may result in
36091     unpredictable results depending on how the optimizer manages your
36092     sources.  If the same option is listed multiple times, the last
36093     one specified is the one that is in effect.  This pragma is not
36094     intended to be a general purpose replacement for command line
36095     options, but for implementing strict control over project policies.
36096
36097
36098 GCC also offers a simple mechanism for printing messages during
36099compilation.
36100
36101`#pragma message STRING'
36102     Prints STRING as a compiler message on compilation.  The message
36103     is informational only, and is neither a compilation warning nor an
36104     error.
36105
36106          #pragma message "Compiling " __FILE__ "..."
36107
36108     STRING may be parenthesized, and is printed with location
36109     information.  For example,
36110
36111          #define DO_PRAGMA(x) _Pragma (#x)
36112          #define TODO(x) DO_PRAGMA(message ("TODO - " #x))
36113
36114          TODO(Remember to fix this)
36115
36116     prints `/tmp/file.c:4: note: #pragma message: TODO - Remember to
36117     fix this'.
36118
36119
36120
36121File: gcc.info,  Node: Visibility Pragmas,  Next: Push/Pop Macro Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas
36122
361236.54.11 Visibility Pragmas
36124--------------------------
36125
36126`#pragma GCC visibility push(VISIBILITY)'
36127`#pragma GCC visibility pop'
36128     This pragma allows the user to set the visibility for multiple
36129     declarations without having to give each a visibility attribute
36130     *Note Function Attributes::, for more information about visibility
36131     and the attribute syntax.
36132
36133     In C++, `#pragma GCC visibility' affects only namespace-scope
36134     declarations.  Class members and template specializations are not
36135     affected; if you want to override the visibility for a particular
36136     member or instantiation, you must use an attribute.
36137
36138
36139
36140File: gcc.info,  Node: Push/Pop Macro Pragmas,  Next: Function Specific Option Pragmas,  Prev: Visibility Pragmas,  Up: Pragmas
36141
361426.54.12 Push/Pop Macro Pragmas
36143------------------------------
36144
36145For compatibility with Microsoft Windows compilers, GCC supports
36146`#pragma push_macro("MACRO_NAME")' and `#pragma
36147pop_macro("MACRO_NAME")'.
36148
36149`#pragma push_macro("MACRO_NAME")'
36150     This pragma saves the value of the macro named as MACRO_NAME to
36151     the top of the stack for this macro.
36152
36153`#pragma pop_macro("MACRO_NAME")'
36154     This pragma sets the value of the macro named as MACRO_NAME to the
36155     value on top of the stack for this macro. If the stack for
36156     MACRO_NAME is empty, the value of the macro remains unchanged.
36157
36158 For example:
36159
36160     #define X  1
36161     #pragma push_macro("X")
36162     #undef X
36163     #define X -1
36164     #pragma pop_macro("X")
36165     int x [X];
36166
36167 In this example, the definition of X as 1 is saved by `#pragma
36168push_macro' and restored by `#pragma pop_macro'.
36169
36170
36171File: gcc.info,  Node: Function Specific Option Pragmas,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas
36172
361736.54.13 Function Specific Option Pragmas
36174----------------------------------------
36175
36176`#pragma GCC target ("STRING"...)'
36177     This pragma allows you to set target specific options for functions
36178     defined later in the source file.  One or more strings can be
36179     specified.  Each function that is defined after this point will be
36180     as if `attribute((target("STRING")))' was specified for that
36181     function.  The parenthesis around the options is optional.  *Note
36182     Function Attributes::, for more information about the `target'
36183     attribute and the attribute syntax.
36184
36185     The `#pragma GCC target' pragma is not implemented in GCC versions
36186     earlier than 4.4, and is currently only implemented for the 386
36187     and x86_64 backends.
36188
36189`#pragma GCC optimize ("STRING"...)'
36190     This pragma allows you to set global optimization options for
36191     functions defined later in the source file.  One or more strings
36192     can be specified.  Each function that is defined after this point
36193     will be as if `attribute((optimize("STRING")))' was specified for
36194     that function.  The parenthesis around the options is optional.
36195     *Note Function Attributes::, for more information about the
36196     `optimize' attribute and the attribute syntax.
36197
36198     The `#pragma GCC optimize' pragma is not implemented in GCC
36199     versions earlier than 4.4.
36200
36201`#pragma GCC push_options'
36202`#pragma GCC pop_options'
36203     These pragmas maintain a stack of the current target and
36204     optimization options.  It is intended for include files where you
36205     temporarily want to switch to using a different `#pragma GCC
36206     target' or `#pragma GCC optimize' and then to pop back to the
36207     previous options.
36208
36209     The `#pragma GCC push_options' and `#pragma GCC pop_options'
36210     pragmas are not implemented in GCC versions earlier than 4.4.
36211
36212`#pragma GCC reset_options'
36213     This pragma clears the current `#pragma GCC target' and `#pragma
36214     GCC optimize' to use the default switches as specified on the
36215     command line.
36216
36217     The `#pragma GCC reset_options' pragma is not implemented in GCC
36218     versions earlier than 4.4.
36219
36220
36221File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
36222
362236.55 Unnamed struct/union fields within structs/unions
36224======================================================
36225
36226For compatibility with other compilers, GCC allows you to define a
36227structure or union that contains, as fields, structures and unions
36228without names.  For example:
36229
36230     struct {
36231       int a;
36232       union {
36233         int b;
36234         float c;
36235       };
36236       int d;
36237     } foo;
36238
36239 In this example, the user would be able to access members of the
36240unnamed union with code like `foo.b'.  Note that only unnamed structs
36241and unions are allowed, you may not have, for example, an unnamed `int'.
36242
36243 You must never create such structures that cause ambiguous field
36244definitions.  For example, this structure:
36245
36246     struct {
36247       int a;
36248       struct {
36249         int a;
36250       };
36251     } foo;
36252
36253 It is ambiguous which `a' is being referred to with `foo.a'.  Such
36254constructs are not supported and must be avoided.  In the future, such
36255constructs may be detected and treated as compilation errors.
36256
36257 Unless `-fms-extensions' is used, the unnamed field must be a
36258structure or union definition without a tag (for example, `struct { int
36259a; };').  If `-fms-extensions' is used, the field may also be a
36260definition with a tag such as `struct foo { int a; };', a reference to
36261a previously defined structure or union such as `struct foo;', or a
36262reference to a `typedef' name for a previously defined structure or
36263union type.
36264
36265
36266File: gcc.info,  Node: Thread-Local,  Next: Binary constants,  Prev: Unnamed Fields,  Up: C Extensions
36267
362686.56 Thread-Local Storage
36269=========================
36270
36271Thread-local storage (TLS) is a mechanism by which variables are
36272allocated such that there is one instance of the variable per extant
36273thread.  The run-time model GCC uses to implement this originates in
36274the IA-64 processor-specific ABI, but has since been migrated to other
36275processors as well.  It requires significant support from the linker
36276(`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and
36277`libpthread.so'), so it is not available everywhere.
36278
36279 At the user level, the extension is visible with a new storage class
36280keyword: `__thread'.  For example:
36281
36282     __thread int i;
36283     extern __thread struct state s;
36284     static __thread char *p;
36285
36286 The `__thread' specifier may be used alone, with the `extern' or
36287`static' specifiers, but with no other storage class specifier.  When
36288used with `extern' or `static', `__thread' must appear immediately
36289after the other storage class specifier.
36290
36291 The `__thread' specifier may be applied to any global, file-scoped
36292static, function-scoped static, or static data member of a class.  It
36293may not be applied to block-scoped automatic or non-static data member.
36294
36295 When the address-of operator is applied to a thread-local variable, it
36296is evaluated at run-time and returns the address of the current thread's
36297instance of that variable.  An address so obtained may be used by any
36298thread.  When a thread terminates, any pointers to thread-local
36299variables in that thread become invalid.
36300
36301 No static initialization may refer to the address of a thread-local
36302variable.
36303
36304 In C++, if an initializer is present for a thread-local variable, it
36305must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
36306standard.
36307
36308 See ELF Handling For Thread-Local Storage
36309(http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of
36310the four thread-local storage addressing models, and how the run-time
36311is expected to function.
36312
36313* Menu:
36314
36315* C99 Thread-Local Edits::
36316* C++98 Thread-Local Edits::
36317
36318
36319File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
36320
363216.56.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
36322-------------------------------------------------------
36323
36324The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
36325document the exact semantics of the language extension.
36326
36327   * `5.1.2  Execution environments'
36328
36329     Add new text after paragraph 1
36330
36331          Within either execution environment, a "thread" is a flow of
36332          control within a program.  It is implementation defined
36333          whether or not there may be more than one thread associated
36334          with a program.  It is implementation defined how threads
36335          beyond the first are created, the name and type of the
36336          function called at thread startup, and how threads may be
36337          terminated.  However, objects with thread storage duration
36338          shall be initialized before thread startup.
36339
36340   * `6.2.4  Storage durations of objects'
36341
36342     Add new text before paragraph 3
36343
36344          An object whose identifier is declared with the storage-class
36345          specifier `__thread' has "thread storage duration".  Its
36346          lifetime is the entire execution of the thread, and its
36347          stored value is initialized only once, prior to thread
36348          startup.
36349
36350   * `6.4.1  Keywords'
36351
36352     Add `__thread'.
36353
36354   * `6.7.1  Storage-class specifiers'
36355
36356     Add `__thread' to the list of storage class specifiers in
36357     paragraph 1.
36358
36359     Change paragraph 2 to
36360
36361          With the exception of `__thread', at most one storage-class
36362          specifier may be given [...].  The `__thread' specifier may
36363          be used alone, or immediately following `extern' or `static'.
36364
36365     Add new text after paragraph 6
36366
36367          The declaration of an identifier for a variable that has
36368          block scope that specifies `__thread' shall also specify
36369          either `extern' or `static'.
36370
36371          The `__thread' specifier shall be used only with variables.
36372
36373
36374File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
36375
363766.56.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
36377--------------------------------------------------------
36378
36379The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
36380that document the exact semantics of the language extension.
36381
36382   * [intro.execution]
36383
36384     New text after paragraph 4
36385
36386          A "thread" is a flow of control within the abstract machine.
36387          It is implementation defined whether or not there may be more
36388          than one thread.
36389
36390     New text after paragraph 7
36391
36392          It is unspecified whether additional action must be taken to
36393          ensure when and whether side effects are visible to other
36394          threads.
36395
36396   * [lex.key]
36397
36398     Add `__thread'.
36399
36400   * [basic.start.main]
36401
36402     Add after paragraph 5
36403
36404          The thread that begins execution at the `main' function is
36405          called the "main thread".  It is implementation defined how
36406          functions beginning threads other than the main thread are
36407          designated or typed.  A function so designated, as well as
36408          the `main' function, is called a "thread startup function".
36409          It is implementation defined what happens if a thread startup
36410          function returns.  It is implementation defined what happens
36411          to other threads when any thread calls `exit'.
36412
36413   * [basic.start.init]
36414
36415     Add after paragraph 4
36416
36417          The storage for an object of thread storage duration shall be
36418          statically initialized before the first statement of the
36419          thread startup function.  An object of thread storage
36420          duration shall not require dynamic initialization.
36421
36422   * [basic.start.term]
36423
36424     Add after paragraph 3
36425
36426          The type of an object with thread storage duration shall not
36427          have a non-trivial destructor, nor shall it be an array type
36428          whose elements (directly or indirectly) have non-trivial
36429          destructors.
36430
36431   * [basic.stc]
36432
36433     Add "thread storage duration" to the list in paragraph 1.
36434
36435     Change paragraph 2
36436
36437          Thread, static, and automatic storage durations are
36438          associated with objects introduced by declarations [...].
36439
36440     Add `__thread' to the list of specifiers in paragraph 3.
36441
36442   * [basic.stc.thread]
36443
36444     New section before [basic.stc.static]
36445
36446          The keyword `__thread' applied to a non-local object gives the
36447          object thread storage duration.
36448
36449          A local variable or class data member declared both `static'
36450          and `__thread' gives the variable or member thread storage
36451          duration.
36452
36453   * [basic.stc.static]
36454
36455     Change paragraph 1
36456
36457          All objects which have neither thread storage duration,
36458          dynamic storage duration nor are local [...].
36459
36460   * [dcl.stc]
36461
36462     Add `__thread' to the list in paragraph 1.
36463
36464     Change paragraph 1
36465
36466          With the exception of `__thread', at most one
36467          STORAGE-CLASS-SPECIFIER shall appear in a given
36468          DECL-SPECIFIER-SEQ.  The `__thread' specifier may be used
36469          alone, or immediately following the `extern' or `static'
36470          specifiers.  [...]
36471
36472     Add after paragraph 5
36473
36474          The `__thread' specifier can be applied only to the names of
36475          objects and to anonymous unions.
36476
36477   * [class.mem]
36478
36479     Add after paragraph 6
36480
36481          Non-`static' members shall not be `__thread'.
36482
36483
36484File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions
36485
364866.57 Binary constants using the `0b' prefix
36487===========================================
36488
36489Integer constants can be written as binary constants, consisting of a
36490sequence of `0' and `1' digits, prefixed by `0b' or `0B'.  This is
36491particularly useful in environments that operate a lot on the bit-level
36492(like microcontrollers).
36493
36494 The following statements are identical:
36495
36496     i =       42;
36497     i =     0x2a;
36498     i =      052;
36499     i = 0b101010;
36500
36501 The type of these constants follows the same rules as for octal or
36502hexadecimal integer constants, so suffixes like `L' or `UL' can be
36503applied.
36504
36505
36506File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C++ Implementation,  Up: Top
36507
365087 Extensions to the C++ Language
36509********************************
36510
36511The GNU compiler provides these extensions to the C++ language (and you
36512can also use most of the C language extensions in your C++ programs).
36513If you want to write code that checks whether these features are
36514available, you can test for the GNU compiler the same way as for C
36515programs: check for a predefined macro `__GNUC__'.  You can also use
36516`__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
36517(cpp)Common Predefined Macros.).
36518
36519* Menu:
36520
36521* Volatiles::           What constitutes an access to a volatile object.
36522* Restricted Pointers:: C99 restricted pointers and references.
36523* Vague Linkage::       Where G++ puts inlines, vtables and such.
36524* C++ Interface::       You can use a single C++ header file for both
36525                        declarations and definitions.
36526* Template Instantiation:: Methods for ensuring that exactly one copy of
36527                        each needed template instantiation is emitted.
36528* Bound member functions:: You can extract a function pointer to the
36529                        method denoted by a `->*' or `.*' expression.
36530* C++ Attributes::      Variable, function, and type attributes for C++ only.
36531* Namespace Association:: Strong using-directives for namespace association.
36532* Type Traits::         Compiler support for type traits
36533* Java Exceptions::     Tweaking exception handling to work with Java.
36534* Deprecated Features:: Things will disappear from g++.
36535* Backwards Compatibility:: Compatibilities with earlier definitions of C++.
36536
36537
36538File: gcc.info,  Node: Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions
36539
365407.1 When is a Volatile Object Accessed?
36541=======================================
36542
36543Both the C and C++ standard have the concept of volatile objects.  These
36544are normally accessed by pointers and used for accessing hardware.  The
36545standards encourage compilers to refrain from optimizations concerning
36546accesses to volatile objects.  The C standard leaves it implementation
36547defined  as to what constitutes a volatile access.  The C++ standard
36548omits to specify this, except to say that C++ should behave in a
36549similar manner to C with respect to volatiles, where possible.  The
36550minimum either standard specifies is that at a sequence point all
36551previous accesses to volatile objects have stabilized and no subsequent
36552accesses have occurred.  Thus an implementation is free to reorder and
36553combine volatile accesses which occur between sequence points, but
36554cannot do so for accesses across a sequence point.  The use of
36555volatiles does not allow you to violate the restriction on updating
36556objects multiple times within a sequence point.
36557
36558 *Note Volatile qualifier and the C compiler: Qualifiers implementation.
36559
36560 The behavior differs slightly between C and C++ in the non-obvious
36561cases:
36562
36563     volatile int *src = SOMEVALUE;
36564     *src;
36565
36566 With C, such expressions are rvalues, and GCC interprets this either
36567as a read of the volatile object being pointed to or only as request to
36568evaluate the side-effects.  The C++ standard specifies that such
36569expressions do not undergo lvalue to rvalue conversion, and that the
36570type of the dereferenced object may be incomplete.  The C++ standard
36571does not specify explicitly that it is this lvalue to rvalue conversion
36572which may be responsible for causing an access.  However, there is
36573reason to believe that it is, because otherwise certain simple
36574expressions become undefined.  However, because it would surprise most
36575programmers, G++ treats dereferencing a pointer to volatile object of
36576complete type when the value is unused as GCC would do for an
36577equivalent type in C.  When the object has incomplete type, G++ issues
36578a warning; if you wish to force an error, you must force a conversion
36579to rvalue with, for instance, a static cast.
36580
36581 When using a reference to volatile, G++ does not treat equivalent
36582expressions as accesses to volatiles, but instead issues a warning that
36583no volatile is accessed.  The rationale for this is that otherwise it
36584becomes difficult to determine where volatile access occur, and not
36585possible to ignore the return value from functions returning volatile
36586references.  Again, if you wish to force a read, cast the reference to
36587an rvalue.
36588
36589
36590File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: Volatiles,  Up: C++ Extensions
36591
365927.2 Restricting Pointer Aliasing
36593================================
36594
36595As with the C front end, G++ understands the C99 feature of restricted
36596pointers, specified with the `__restrict__', or `__restrict' type
36597qualifier.  Because you cannot compile C++ by specifying the `-std=c99'
36598language flag, `restrict' is not a keyword in C++.
36599
36600 In addition to allowing restricted pointers, you can specify restricted
36601references, which indicate that the reference is not aliased in the
36602local context.
36603
36604     void fn (int *__restrict__ rptr, int &__restrict__ rref)
36605     {
36606       /* ... */
36607     }
36608
36609In the body of `fn', RPTR points to an unaliased integer and RREF
36610refers to a (different) unaliased integer.
36611
36612 You may also specify whether a member function's THIS pointer is
36613unaliased by using `__restrict__' as a member function qualifier.
36614
36615     void T::fn () __restrict__
36616     {
36617       /* ... */
36618     }
36619
36620Within the body of `T::fn', THIS will have the effective definition `T
36621*__restrict__ const this'.  Notice that the interpretation of a
36622`__restrict__' member function qualifier is different to that of
36623`const' or `volatile' qualifier, in that it is applied to the pointer
36624rather than the object.  This is consistent with other compilers which
36625implement restricted pointers.
36626
36627 As with all outermost parameter qualifiers, `__restrict__' is ignored
36628in function definition matching.  This means you only need to specify
36629`__restrict__' in a function definition, rather than in a function
36630prototype as well.
36631
36632
36633File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
36634
366357.3 Vague Linkage
36636=================
36637
36638There are several constructs in C++ which require space in the object
36639file but are not clearly tied to a single translation unit.  We say that
36640these constructs have "vague linkage".  Typically such constructs are
36641emitted wherever they are needed, though sometimes we can be more
36642clever.
36643
36644Inline Functions
36645     Inline functions are typically defined in a header file which can
36646     be included in many different compilations.  Hopefully they can
36647     usually be inlined, but sometimes an out-of-line copy is
36648     necessary, if the address of the function is taken or if inlining
36649     fails.  In general, we emit an out-of-line copy in all translation
36650     units where one is needed.  As an exception, we only emit inline
36651     virtual functions with the vtable, since it will always require a
36652     copy.
36653
36654     Local static variables and string constants used in an inline
36655     function are also considered to have vague linkage, since they
36656     must be shared between all inlined and out-of-line instances of
36657     the function.
36658
36659VTables
36660     C++ virtual functions are implemented in most compilers using a
36661     lookup table, known as a vtable.  The vtable contains pointers to
36662     the virtual functions provided by a class, and each object of the
36663     class contains a pointer to its vtable (or vtables, in some
36664     multiple-inheritance situations).  If the class declares any
36665     non-inline, non-pure virtual functions, the first one is chosen as
36666     the "key method" for the class, and the vtable is only emitted in
36667     the translation unit where the key method is defined.
36668
36669     _Note:_ If the chosen key method is later defined as inline, the
36670     vtable will still be emitted in every translation unit which
36671     defines it.  Make sure that any inline virtuals are declared
36672     inline in the class body, even if they are not defined there.
36673
36674type_info objects
36675     C++ requires information about types to be written out in order to
36676     implement `dynamic_cast', `typeid' and exception handling.  For
36677     polymorphic classes (classes with virtual functions), the type_info
36678     object is written out along with the vtable so that `dynamic_cast'
36679     can determine the dynamic type of a class object at runtime.  For
36680     all other types, we write out the type_info object when it is
36681     used: when applying `typeid' to an expression, throwing an object,
36682     or referring to a type in a catch clause or exception
36683     specification.
36684
36685Template Instantiations
36686     Most everything in this section also applies to template
36687     instantiations, but there are other options as well.  *Note
36688     Where's the Template?: Template Instantiation.
36689
36690
36691 When used with GNU ld version 2.8 or later on an ELF system such as
36692GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
36693these constructs will be discarded at link time.  This is known as
36694COMDAT support.
36695
36696 On targets that don't support COMDAT, but do support weak symbols, GCC
36697will use them.  This way one copy will override all the others, but the
36698unused copies will still take up space in the executable.
36699
36700 For targets which do not support either COMDAT or weak symbols, most
36701entities with vague linkage will be emitted as local symbols to avoid
36702duplicate definition errors from the linker.  This will not happen for
36703local statics in inlines, however, as having multiple copies will
36704almost certainly break things.
36705
36706 *Note Declarations and Definitions in One Header: C++ Interface, for
36707another way to control placement of these constructs.
36708
36709
36710File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
36711
367127.4 #pragma interface and implementation
36713========================================
36714
36715`#pragma interface' and `#pragma implementation' provide the user with
36716a way of explicitly directing the compiler to emit entities with vague
36717linkage (and debugging information) in a particular translation unit.
36718
36719 _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most
36720cases, because of COMDAT support and the "key method" heuristic
36721mentioned in *note Vague Linkage::.  Using them can actually cause your
36722program to grow due to unnecessary out-of-line copies of inline
36723functions.  Currently (3.4) the only benefit of these `#pragma's is
36724reduced duplication of debugging information, and that should be
36725addressed soon on DWARF 2 targets with the use of COMDAT groups.
36726
36727`#pragma interface'
36728`#pragma interface "SUBDIR/OBJECTS.h"'
36729     Use this directive in _header files_ that define object classes,
36730     to save space in most of the object files that use those classes.
36731     Normally, local copies of certain information (backup copies of
36732     inline member functions, debugging information, and the internal
36733     tables that implement virtual functions) must be kept in each
36734     object file that includes class definitions.  You can use this
36735     pragma to avoid such duplication.  When a header file containing
36736     `#pragma interface' is included in a compilation, this auxiliary
36737     information will not be generated (unless the main input source
36738     file itself uses `#pragma implementation').  Instead, the object
36739     files will contain references to be resolved at link time.
36740
36741     The second form of this directive is useful for the case where you
36742     have multiple headers with the same name in different directories.
36743     If you use this form, you must specify the same string to `#pragma
36744     implementation'.
36745
36746`#pragma implementation'
36747`#pragma implementation "OBJECTS.h"'
36748     Use this pragma in a _main input file_, when you want full output
36749     from included header files to be generated (and made globally
36750     visible).  The included header file, in turn, should use `#pragma
36751     interface'.  Backup copies of inline member functions, debugging
36752     information, and the internal tables used to implement virtual
36753     functions are all generated in implementation files.
36754
36755     If you use `#pragma implementation' with no argument, it applies to
36756     an include file with the same basename(1) as your source file.
36757     For example, in `allclass.cc', giving just `#pragma implementation'
36758     by itself is equivalent to `#pragma implementation "allclass.h"'.
36759
36760     In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as
36761     an implementation file whenever you would include it from
36762     `allclass.cc' even if you never specified `#pragma
36763     implementation'.  This was deemed to be more trouble than it was
36764     worth, however, and disabled.
36765
36766     Use the string argument if you want a single implementation file to
36767     include code from multiple header files.  (You must also use
36768     `#include' to include the header file; `#pragma implementation'
36769     only specifies how to use the file--it doesn't actually include
36770     it.)
36771
36772     There is no way to split up the contents of a single header file
36773     into multiple implementation files.
36774
36775 `#pragma implementation' and `#pragma interface' also have an effect
36776on function inlining.
36777
36778 If you define a class in a header file marked with `#pragma
36779interface', the effect on an inline function defined in that class is
36780similar to an explicit `extern' declaration--the compiler emits no code
36781at all to define an independent version of the function.  Its
36782definition is used only for inlining with its callers.
36783
36784 Conversely, when you include the same header file in a main source file
36785that declares it as `#pragma implementation', the compiler emits code
36786for the function itself; this defines a version of the function that
36787can be found via pointers (or by callers compiled without inlining).
36788If all calls to the function can be inlined, you can avoid emitting the
36789function by compiling with `-fno-implement-inlines'.  If any calls were
36790not inlined, you will get linker errors.
36791
36792 ---------- Footnotes ----------
36793
36794 (1) A file's "basename" was the name stripped of all leading path
36795information and of trailing suffixes, such as `.h' or `.C' or `.cc'.
36796
36797
36798File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
36799
368007.5 Where's the Template?
36801=========================
36802
36803C++ templates are the first language feature to require more
36804intelligence from the environment than one usually finds on a UNIX
36805system.  Somehow the compiler and linker have to make sure that each
36806template instance occurs exactly once in the executable if it is needed,
36807and not at all otherwise.  There are two basic approaches to this
36808problem, which are referred to as the Borland model and the Cfront
36809model.
36810
36811Borland model
36812     Borland C++ solved the template instantiation problem by adding
36813     the code equivalent of common blocks to their linker; the compiler
36814     emits template instances in each translation unit that uses them,
36815     and the linker collapses them together.  The advantage of this
36816     model is that the linker only has to consider the object files
36817     themselves; there is no external complexity to worry about.  This
36818     disadvantage is that compilation time is increased because the
36819     template code is being compiled repeatedly.  Code written for this
36820     model tends to include definitions of all templates in the header
36821     file, since they must be seen to be instantiated.
36822
36823Cfront model
36824     The AT&T C++ translator, Cfront, solved the template instantiation
36825     problem by creating the notion of a template repository, an
36826     automatically maintained place where template instances are
36827     stored.  A more modern version of the repository works as follows:
36828     As individual object files are built, the compiler places any
36829     template definitions and instantiations encountered in the
36830     repository.  At link time, the link wrapper adds in the objects in
36831     the repository and compiles any needed instances that were not
36832     previously emitted.  The advantages of this model are more optimal
36833     compilation speed and the ability to use the system linker; to
36834     implement the Borland model a compiler vendor also needs to
36835     replace the linker.  The disadvantages are vastly increased
36836     complexity, and thus potential for error; for some code this can be
36837     just as transparent, but in practice it can been very difficult to
36838     build multiple programs in one directory and one program in
36839     multiple directories.  Code written for this model tends to
36840     separate definitions of non-inline member templates into a
36841     separate file, which should be compiled separately.
36842
36843 When used with GNU ld version 2.8 or later on an ELF system such as
36844GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the
36845Borland model.  On other systems, G++ implements neither automatic
36846model.
36847
36848 A future version of G++ will support a hybrid model whereby the
36849compiler will emit any instantiations for which the template definition
36850is included in the compile, and store template definitions and
36851instantiation context information into the object file for the rest.
36852The link wrapper will extract that information as necessary and invoke
36853the compiler to produce the remaining instantiations.  The linker will
36854then combine duplicate instantiations.
36855
36856 In the mean time, you have the following options for dealing with
36857template instantiations:
36858
36859  1. Compile your template-using code with `-frepo'.  The compiler will
36860     generate files with the extension `.rpo' listing all of the
36861     template instantiations used in the corresponding object files
36862     which could be instantiated there; the link wrapper, `collect2',
36863     will then update the `.rpo' files to tell the compiler where to
36864     place those instantiations and rebuild any affected object files.
36865     The link-time overhead is negligible after the first pass, as the
36866     compiler will continue to place the instantiations in the same
36867     files.
36868
36869     This is your best option for application code written for the
36870     Borland model, as it will just work.  Code written for the Cfront
36871     model will need to be modified so that the template definitions
36872     are available at one or more points of instantiation; usually this
36873     is as simple as adding `#include <tmethods.cc>' to the end of each
36874     template header.
36875
36876     For library code, if you want the library to provide all of the
36877     template instantiations it needs, just try to link all of its
36878     object files together; the link will fail, but cause the
36879     instantiations to be generated as a side effect.  Be warned,
36880     however, that this may cause conflicts if multiple libraries try
36881     to provide the same instantiations.  For greater control, use
36882     explicit instantiation as described in the next option.
36883
36884  2. Compile your code with `-fno-implicit-templates' to disable the
36885     implicit generation of template instances, and explicitly
36886     instantiate all the ones you use.  This approach requires more
36887     knowledge of exactly which instances you need than do the others,
36888     but it's less mysterious and allows greater control.  You can
36889     scatter the explicit instantiations throughout your program,
36890     perhaps putting them in the translation units where the instances
36891     are used or the translation units that define the templates
36892     themselves; you can put all of the explicit instantiations you
36893     need into one big file; or you can create small files like
36894
36895          #include "Foo.h"
36896          #include "Foo.cc"
36897
36898          template class Foo<int>;
36899          template ostream& operator <<
36900                          (ostream&, const Foo<int>&);
36901
36902     for each of the instances you need, and create a template
36903     instantiation library from those.
36904
36905     If you are using Cfront-model code, you can probably get away with
36906     not using `-fno-implicit-templates' when compiling files that don't
36907     `#include' the member template definitions.
36908
36909     If you use one big file to do the instantiations, you may want to
36910     compile it without `-fno-implicit-templates' so you get all of the
36911     instances required by your explicit instantiations (but not by any
36912     other files) without having to specify them as well.
36913
36914     G++ has extended the template instantiation syntax given in the ISO
36915     standard to allow forward declaration of explicit instantiations
36916     (with `extern'), instantiation of the compiler support data for a
36917     template class (i.e. the vtable) without instantiating any of its
36918     members (with `inline'), and instantiation of only the static data
36919     members of a template class, without the support data or member
36920     functions (with (`static'):
36921
36922          extern template int max (int, int);
36923          inline template class Foo<int>;
36924          static template class Foo<int>;
36925
36926  3. Do nothing.  Pretend G++ does implement automatic instantiation
36927     management.  Code written for the Borland model will work fine, but
36928     each translation unit will contain instances of each of the
36929     templates it uses.  In a large program, this can lead to an
36930     unacceptable amount of code duplication.
36931
36932
36933File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
36934
369357.6 Extracting the function pointer from a bound pointer to member function
36936===========================================================================
36937
36938In C++, pointer to member functions (PMFs) are implemented using a wide
36939pointer of sorts to handle all the possible call mechanisms; the PMF
36940needs to store information about how to adjust the `this' pointer, and
36941if the function pointed to is virtual, where to find the vtable, and
36942where in the vtable to look for the member function.  If you are using
36943PMFs in an inner loop, you should really reconsider that decision.  If
36944that is not an option, you can extract the pointer to the function that
36945would be called for a given object/PMF pair and call it directly inside
36946the inner loop, to save a bit of time.
36947
36948 Note that you will still be paying the penalty for the call through a
36949function pointer; on most modern architectures, such a call defeats the
36950branch prediction features of the CPU.  This is also true of normal
36951virtual function calls.
36952
36953 The syntax for this extension is
36954
36955     extern A a;
36956     extern int (A::*fp)();
36957     typedef int (*fptr)(A *);
36958
36959     fptr p = (fptr)(a.*fp);
36960
36961 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no
36962object is needed to obtain the address of the function.  They can be
36963converted to function pointers directly:
36964
36965     fptr p1 = (fptr)(&A::foo);
36966
36967 You must specify `-Wno-pmf-conversions' to use this extension.
36968
36969
36970File: gcc.info,  Node: C++ Attributes,  Next: Namespace Association,  Prev: Bound member functions,  Up: C++ Extensions
36971
369727.7 C++-Specific Variable, Function, and Type Attributes
36973========================================================
36974
36975Some attributes only make sense for C++ programs.
36976
36977`init_priority (PRIORITY)'
36978     In Standard C++, objects defined at namespace scope are guaranteed
36979     to be initialized in an order in strict accordance with that of
36980     their definitions _in a given translation unit_.  No guarantee is
36981     made for initializations across translation units.  However, GNU
36982     C++ allows users to control the order of initialization of objects
36983     defined at namespace scope with the `init_priority' attribute by
36984     specifying a relative PRIORITY, a constant integral expression
36985     currently bounded between 101 and 65535 inclusive.  Lower numbers
36986     indicate a higher priority.
36987
36988     In the following example, `A' would normally be created before
36989     `B', but the `init_priority' attribute has reversed that order:
36990
36991          Some_Class  A  __attribute__ ((init_priority (2000)));
36992          Some_Class  B  __attribute__ ((init_priority (543)));
36993
36994     Note that the particular values of PRIORITY do not matter; only
36995     their relative ordering.
36996
36997`java_interface'
36998     This type attribute informs C++ that the class is a Java
36999     interface.  It may only be applied to classes declared within an
37000     `extern "Java"' block.  Calls to methods declared in this
37001     interface will be dispatched using GCJ's interface table
37002     mechanism, instead of regular virtual table dispatch.
37003
37004
37005 See also *note Namespace Association::.
37006
37007
37008File: gcc.info,  Node: Namespace Association,  Next: Type Traits,  Prev: C++ Attributes,  Up: C++ Extensions
37009
370107.8 Namespace Association
37011=========================
37012
37013*Caution:* The semantics of this extension are not fully defined.
37014Users should refrain from using this extension as its semantics may
37015change subtly over time.  It is possible that this extension will be
37016removed in future versions of G++.
37017
37018 A using-directive with `__attribute ((strong))' is stronger than a
37019normal using-directive in two ways:
37020
37021   * Templates from the used namespace can be specialized and explicitly
37022     instantiated as though they were members of the using namespace.
37023
37024   * The using namespace is considered an associated namespace of all
37025     templates in the used namespace for purposes of argument-dependent
37026     name lookup.
37027
37028 The used namespace must be nested within the using namespace so that
37029normal unqualified lookup works properly.
37030
37031 This is useful for composing a namespace transparently from
37032implementation namespaces.  For example:
37033
37034     namespace std {
37035       namespace debug {
37036         template <class T> struct A { };
37037       }
37038       using namespace debug __attribute ((__strong__));
37039       template <> struct A<int> { };   // ok to specialize
37040
37041       template <class T> void f (A<T>);
37042     }
37043
37044     int main()
37045     {
37046       f (std::A<float>());             // lookup finds std::f
37047       f (std::A<int>());
37048     }
37049
37050
37051File: gcc.info,  Node: Type Traits,  Next: Java Exceptions,  Prev: Namespace Association,  Up: C++ Extensions
37052
370537.9 Type Traits
37054===============
37055
37056The C++ front-end implements syntactic extensions that allow to
37057determine at compile time various characteristics of a type (or of a
37058pair of types).
37059
37060`__has_nothrow_assign (type)'
37061     If `type' is const qualified or is a reference type then the trait
37062     is false.  Otherwise if `__has_trivial_assign (type)' is true then
37063     the trait is true, else if `type' is a cv class or union type with
37064     copy assignment operators that are known not to throw an exception
37065     then the trait is true, else it is false.  Requires: `type' shall
37066     be a complete type, an array type of unknown bound, or is a `void'
37067     type.
37068
37069`__has_nothrow_copy (type)'
37070     If `__has_trivial_copy (type)' is true then the trait is true,
37071     else if `type' is a cv class or union type with copy constructors
37072     that are known not to throw an exception then the trait is true,
37073     else it is false.  Requires: `type' shall be a complete type, an
37074     array type of unknown bound, or is a `void' type.
37075
37076`__has_nothrow_constructor (type)'
37077     If `__has_trivial_constructor (type)' is true then the trait is
37078     true, else if `type' is a cv class or union type (or array
37079     thereof) with a default constructor that is known not to throw an
37080     exception then the trait is true, else it is false.  Requires:
37081     `type' shall be a complete type, an array type of unknown bound,
37082     or is a `void' type.
37083
37084`__has_trivial_assign (type)'
37085     If `type' is const qualified or is a reference type then the trait
37086     is false.  Otherwise if `__is_pod (type)' is true then the trait is
37087     true, else if `type' is a cv class or union type with a trivial
37088     copy assignment ([class.copy]) then the trait is true, else it is
37089     false.  Requires: `type' shall be a complete type, an array type
37090     of unknown bound, or is a `void' type.
37091
37092`__has_trivial_copy (type)'
37093     If `__is_pod (type)' is true or `type' is a reference type then
37094     the trait is true, else if `type' is a cv class or union type with
37095     a trivial copy constructor ([class.copy]) then the trait is true,
37096     else it is false.  Requires: `type' shall be a complete type, an
37097     array type of unknown bound, or is a `void' type.
37098
37099`__has_trivial_constructor (type)'
37100     If `__is_pod (type)' is true then the trait is true, else if
37101     `type' is a cv class or union type (or array thereof) with a
37102     trivial default constructor ([class.ctor]) then the trait is true,
37103     else it is false.  Requires: `type' shall be a complete type, an
37104     array type of unknown bound, or is a `void' type.
37105
37106`__has_trivial_destructor (type)'
37107     If `__is_pod (type)' is true or `type' is a reference type then
37108     the trait is true, else if `type' is a cv class or union type (or
37109     array thereof) with a trivial destructor ([class.dtor]) then the
37110     trait is true, else it is false.  Requires: `type' shall be a
37111     complete type, an array type of unknown bound, or is a `void' type.
37112
37113`__has_virtual_destructor (type)'
37114     If `type' is a class type with a virtual destructor ([class.dtor])
37115     then the trait is true, else it is false.  Requires: `type'  shall
37116     be a complete type, an array type of unknown bound, or is a `void'
37117     type.
37118
37119`__is_abstract (type)'
37120     If `type' is an abstract class ([class.abstract]) then the trait
37121     is true, else it is false.  Requires: `type' shall be a complete
37122     type, an array type of unknown bound, or is a `void' type.
37123
37124`__is_base_of (base_type, derived_type)'
37125     If `base_type' is a base class of `derived_type' ([class.derived])
37126     then the trait is true, otherwise it is false.  Top-level cv
37127     qualifications of `base_type' and `derived_type' are ignored.  For
37128     the purposes of this trait, a class type is considered is own
37129     base.  Requires: if `__is_class (base_type)' and `__is_class
37130     (derived_type)' are true and `base_type' and `derived_type' are
37131     not the same type (disregarding cv-qualifiers), `derived_type'
37132     shall be a complete type.  Diagnostic is produced if this
37133     requirement is not met.
37134
37135`__is_class (type)'
37136     If `type' is a cv class type, and not a union type
37137     ([basic.compound]) the trait is true, else it is false.
37138
37139`__is_empty (type)'
37140     If `__is_class (type)' is false then the trait is false.
37141     Otherwise `type' is considered empty if and only if: `type' has no
37142     non-static data members, or all non-static data members, if any,
37143     are bit-fields of length 0, and `type' has no virtual members, and
37144     `type' has no virtual base classes, and `type' has no base classes
37145     `base_type' for which `__is_empty (base_type)' is false.
37146     Requires: `type' shall be a complete type, an array type of
37147     unknown bound, or is a `void' type.
37148
37149`__is_enum (type)'
37150     If `type' is a cv enumeration type ([basic.compound]) the trait is
37151     true, else it is false.
37152
37153`__is_pod (type)'
37154     If `type' is a cv POD type ([basic.types]) then the trait is true,
37155     else it is false.  Requires: `type' shall be a complete type, an
37156     array type of unknown bound, or is a `void' type.
37157
37158`__is_polymorphic (type)'
37159     If `type' is a polymorphic class ([class.virtual]) then the trait
37160     is true, else it is false.  Requires: `type' shall be a complete
37161     type, an array type of unknown bound, or is a `void' type.
37162
37163`__is_union (type)'
37164     If `type' is a cv union type ([basic.compound]) the trait is true,
37165     else it is false.
37166
37167
37168
37169File: gcc.info,  Node: Java Exceptions,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions
37170
371717.10 Java Exceptions
37172====================
37173
37174The Java language uses a slightly different exception handling model
37175from C++.  Normally, GNU C++ will automatically detect when you are
37176writing C++ code that uses Java exceptions, and handle them
37177appropriately.  However, if C++ code only needs to execute destructors
37178when Java exceptions are thrown through it, GCC will guess incorrectly.
37179Sample problematic code is:
37180
37181       struct S { ~S(); };
37182       extern void bar();    // is written in Java, and may throw exceptions
37183       void foo()
37184       {
37185         S s;
37186         bar();
37187       }
37188
37189The usual effect of an incorrect guess is a link failure, complaining of
37190a missing routine called `__gxx_personality_v0'.
37191
37192 You can inform the compiler that Java exceptions are to be used in a
37193translation unit, irrespective of what it might think, by writing
37194`#pragma GCC java_exceptions' at the head of the file.  This `#pragma'
37195must appear before any functions that throw or catch exceptions, or run
37196destructors when exceptions are thrown through them.
37197
37198 You cannot mix Java and C++ exceptions in the same translation unit.
37199It is believed to be safe to throw a C++ exception from one file through
37200another file compiled for the Java exception model, or vice versa, but
37201there may be bugs in this area.
37202
37203
37204File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: Java Exceptions,  Up: C++ Extensions
37205
372067.11 Deprecated Features
37207========================
37208
37209In the past, the GNU C++ compiler was extended to experiment with new
37210features, at a time when the C++ language was still evolving.  Now that
37211the C++ standard is complete, some of those features are superseded by
37212superior alternatives.  Using the old features might cause a warning in
37213some cases that the feature will be dropped in the future.  In other
37214cases, the feature might be gone already.
37215
37216 While the list below is not exhaustive, it documents some of the
37217options that are now deprecated:
37218
37219`-fexternal-templates'
37220`-falt-external-templates'
37221     These are two of the many ways for G++ to implement template
37222     instantiation.  *Note Template Instantiation::.  The C++ standard
37223     clearly defines how template definitions have to be organized
37224     across implementation units.  G++ has an implicit instantiation
37225     mechanism that should work just fine for standard-conforming code.
37226
37227`-fstrict-prototype'
37228`-fno-strict-prototype'
37229     Previously it was possible to use an empty prototype parameter
37230     list to indicate an unspecified number of parameters (like C),
37231     rather than no parameters, as C++ demands.  This feature has been
37232     removed, except where it is required for backwards compatibility.
37233     *Note Backwards Compatibility::.
37234
37235 G++ allows a virtual function returning `void *' to be overridden by
37236one returning a different pointer type.  This extension to the
37237covariant return type rules is now deprecated and will be removed from a
37238future version.
37239
37240 The G++ minimum and maximum operators (`<?' and `>?') and their
37241compound forms (`<?=') and `>?=') have been deprecated and are now
37242removed from G++.  Code using these operators should be modified to use
37243`std::min' and `std::max' instead.
37244
37245 The named return value extension has been deprecated, and is now
37246removed from G++.
37247
37248 The use of initializer lists with new expressions has been deprecated,
37249and is now removed from G++.
37250
37251 Floating and complex non-type template parameters have been deprecated,
37252and are now removed from G++.
37253
37254 The implicit typename extension has been deprecated and is now removed
37255from G++.
37256
37257 The use of default arguments in function pointers, function typedefs
37258and other places where they are not permitted by the standard is
37259deprecated and will be removed from a future version of G++.
37260
37261 G++ allows floating-point literals to appear in integral constant
37262expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is
37263deprecated and will be removed from a future version.
37264
37265 G++ allows static data members of const floating-point type to be
37266declared with an initializer in a class definition. The standard only
37267allows initializers for static members of const integral types and const
37268enumeration types so this extension has been deprecated and will be
37269removed from a future version.
37270
37271
37272File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
37273
372747.12 Backwards Compatibility
37275============================
37276
37277Now that there is a definitive ISO standard C++, G++ has a specification
37278to adhere to.  The C++ language evolved over time, and features that
37279used to be acceptable in previous drafts of the standard, such as the
37280ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
37281to allow compilation of C++ written to such drafts, G++ contains some
37282backwards compatibilities.  _All such backwards compatibility features
37283are liable to disappear in future versions of G++._ They should be
37284considered deprecated.   *Note Deprecated Features::.
37285
37286`For scope'
37287     If a variable is declared at for scope, it used to remain in scope
37288     until the end of the scope which contained the for statement
37289     (rather than just within the for scope).  G++ retains this, but
37290     issues a warning, if such a variable is accessed outside the for
37291     scope.
37292
37293`Implicit C language'
37294     Old C system header files did not contain an `extern "C" {...}'
37295     scope to set the language.  On such systems, all header files are
37296     implicitly scoped inside a C language scope.  Also, an empty
37297     prototype `()' will be treated as an unspecified number of
37298     arguments, rather than no arguments, as C++ demands.
37299
37300
37301File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
37302
373038 GNU Objective-C runtime features
37304**********************************
37305
37306This document is meant to describe some of the GNU Objective-C runtime
37307features.  It is not intended to teach you Objective-C, there are
37308several resources on the Internet that present the language.  Questions
37309and comments about this document to Ovidiu Predescu <ovidiu@cup.hp.com>.
37310
37311* Menu:
37312
37313* Executing code before main::
37314* Type encoding::
37315* Garbage Collection::
37316* Constant string objects::
37317* compatibility_alias::
37318
37319
37320File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: Objective-C,  Up: Objective-C
37321
373228.1 `+load': Executing code before main
37323=======================================
37324
37325The GNU Objective-C runtime provides a way that allows you to execute
37326code before the execution of the program enters the `main' function.
37327The code is executed on a per-class and a per-category basis, through a
37328special class method `+load'.
37329
37330 This facility is very useful if you want to initialize global variables
37331which can be accessed by the program directly, without sending a message
37332to the class first.  The usual way to initialize global variables, in
37333the `+initialize' method, might not be useful because `+initialize' is
37334only called when the first message is sent to a class object, which in
37335some cases could be too late.
37336
37337 Suppose for example you have a `FileStream' class that declares
37338`Stdin', `Stdout' and `Stderr' as global variables, like below:
37339
37340
37341     FileStream *Stdin = nil;
37342     FileStream *Stdout = nil;
37343     FileStream *Stderr = nil;
37344
37345     @implementation FileStream
37346
37347     + (void)initialize
37348     {
37349         Stdin = [[FileStream new] initWithFd:0];
37350         Stdout = [[FileStream new] initWithFd:1];
37351         Stderr = [[FileStream new] initWithFd:2];
37352     }
37353
37354     /* Other methods here */
37355     @end
37356
37357 In this example, the initialization of `Stdin', `Stdout' and `Stderr'
37358in `+initialize' occurs too late.  The programmer can send a message to
37359one of these objects before the variables are actually initialized,
37360thus sending messages to the `nil' object.  The `+initialize' method
37361which actually initializes the global variables is not invoked until
37362the first message is sent to the class object.  The solution would
37363require these variables to be initialized just before entering `main'.
37364
37365 The correct solution of the above problem is to use the `+load' method
37366instead of `+initialize':
37367
37368
37369     @implementation FileStream
37370
37371     + (void)load
37372     {
37373         Stdin = [[FileStream new] initWithFd:0];
37374         Stdout = [[FileStream new] initWithFd:1];
37375         Stderr = [[FileStream new] initWithFd:2];
37376     }
37377
37378     /* Other methods here */
37379     @end
37380
37381 The `+load' is a method that is not overridden by categories.  If a
37382class and a category of it both implement `+load', both methods are
37383invoked.  This allows some additional initializations to be performed in
37384a category.
37385
37386 This mechanism is not intended to be a replacement for `+initialize'.
37387You should be aware of its limitations when you decide to use it
37388instead of `+initialize'.
37389
37390* Menu:
37391
37392* What you can and what you cannot do in +load::
37393
37394
37395File: gcc.info,  Node: What you can and what you cannot do in +load,  Prev: Executing code before main,  Up: Executing code before main
37396
373978.1.1 What you can and what you cannot do in `+load'
37398----------------------------------------------------
37399
37400The `+load' implementation in the GNU runtime guarantees you the
37401following things:
37402
37403   * you can write whatever C code you like;
37404
37405   * you can send messages to Objective-C constant strings (`@"this is a
37406     constant string"');
37407
37408   * you can allocate and send messages to objects whose class is
37409     implemented in the same file;
37410
37411   * the `+load' implementation of all super classes of a class are
37412     executed before the `+load' of that class is executed;
37413
37414   * the `+load' implementation of a class is executed before the
37415     `+load' implementation of any category.
37416
37417
37418 In particular, the following things, even if they can work in a
37419particular case, are not guaranteed:
37420
37421   * allocation of or sending messages to arbitrary objects;
37422
37423   * allocation of or sending messages to objects whose classes have a
37424     category implemented in the same file;
37425
37426
37427 You should make no assumptions about receiving `+load' in sibling
37428classes when you write `+load' of a class.  The order in which sibling
37429classes receive `+load' is not guaranteed.
37430
37431 The order in which `+load' and `+initialize' are called could be
37432problematic if this matters.  If you don't allocate objects inside
37433`+load', it is guaranteed that `+load' is called before `+initialize'.
37434If you create an object inside `+load' the `+initialize' method of
37435object's class is invoked even if `+load' was not invoked.  Note if you
37436explicitly call `+load' on a class, `+initialize' will be called first.
37437To avoid possible problems try to implement only one of these methods.
37438
37439 The `+load' method is also invoked when a bundle is dynamically loaded
37440into your running program.  This happens automatically without any
37441intervening operation from you.  When you write bundles and you need to
37442write `+load' you can safely create and send messages to objects whose
37443classes already exist in the running program.  The same restrictions as
37444above apply to classes defined in bundle.
37445
37446
37447File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
37448
374498.2 Type encoding
37450=================
37451
37452The Objective-C compiler generates type encodings for all the types.
37453These type encodings are used at runtime to find out information about
37454selectors and methods and about objects and classes.
37455
37456 The types are encoded in the following way:
37457
37458`_Bool'            `B'
37459`char'             `c'
37460`unsigned char'    `C'
37461`short'            `s'
37462`unsigned short'   `S'
37463`int'              `i'
37464`unsigned int'     `I'
37465`long'             `l'
37466`unsigned long'    `L'
37467`long long'        `q'
37468`unsigned long     `Q'
37469long'
37470`float'            `f'
37471`double'           `d'
37472`void'             `v'
37473`id'               `@'
37474`Class'            `#'
37475`SEL'              `:'
37476`char*'            `*'
37477unknown type       `?'
37478Complex types      `j' followed by the inner type.  For example
37479                   `_Complex double' is encoded as "jd".
37480bit-fields         `b' followed by the starting position of the
37481                   bit-field, the type of the bit-field and the size of
37482                   the bit-field (the bit-fields encoding was changed
37483                   from the NeXT's compiler encoding, see below)
37484
37485 The encoding of bit-fields has changed to allow bit-fields to be
37486properly handled by the runtime functions that compute sizes and
37487alignments of types that contain bit-fields.  The previous encoding
37488contained only the size of the bit-field.  Using only this information
37489it is not possible to reliably compute the size occupied by the
37490bit-field.  This is very important in the presence of the Boehm's
37491garbage collector because the objects are allocated using the typed
37492memory facility available in this collector.  The typed memory
37493allocation requires information about where the pointers are located
37494inside the object.
37495
37496 The position in the bit-field is the position, counting in bits, of the
37497bit closest to the beginning of the structure.
37498
37499 The non-atomic types are encoded as follows:
37500
37501pointers       `^' followed by the pointed type.
37502arrays         `[' followed by the number of elements in the array
37503               followed by the type of the elements followed by `]'
37504structures     `{' followed by the name of the structure (or `?' if the
37505               structure is unnamed), the `=' sign, the type of the
37506               members and by `}'
37507unions         `(' followed by the name of the structure (or `?' if the
37508               union is unnamed), the `=' sign, the type of the members
37509               followed by `)'
37510
37511 Here are some types and their encodings, as they are generated by the
37512compiler on an i386 machine:
37513
37514
37515Objective-C type   Compiler encoding
37516     int a[10];    `[10i]'
37517     struct {      `{?=i[3f]b128i3b131i2c}'
37518       int i;
37519       float f[3];
37520       int a:3;
37521       int b:2;
37522       char c;
37523     }
37524
37525
37526 In addition to the types the compiler also encodes the type
37527specifiers.  The table below describes the encoding of the current
37528Objective-C type specifiers:
37529
37530
37531Specifier          Encoding
37532`const'            `r'
37533`in'               `n'
37534`inout'            `N'
37535`out'              `o'
37536`bycopy'           `O'
37537`oneway'           `V'
37538
37539
37540 The type specifiers are encoded just before the type.  Unlike types
37541however, the type specifiers are only encoded when they appear in method
37542argument types.
37543
37544
37545File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
37546
375478.3 Garbage Collection
37548======================
37549
37550Support for a new memory management policy has been added by using a
37551powerful conservative garbage collector, known as the
37552Boehm-Demers-Weiser conservative garbage collector.  It is available
37553from `http://www.hpl.hp.com/personal/Hans_Boehm/gc/'.
37554
37555 To enable the support for it you have to configure the compiler using
37556an additional argument, `--enable-objc-gc'.  You need to have garbage
37557collector installed before building the compiler.  This will build an
37558additional runtime library which has several enhancements to support
37559the garbage collector.  The new library has a new name, `libobjc_gc.a'
37560to not conflict with the non-garbage-collected library.
37561
37562 When the garbage collector is used, the objects are allocated using the
37563so-called typed memory allocation mechanism available in the
37564Boehm-Demers-Weiser collector.  This mode requires precise information
37565on where pointers are located inside objects.  This information is
37566computed once per class, immediately after the class has been
37567initialized.
37568
37569 There is a new runtime function `class_ivar_set_gcinvisible()' which
37570can be used to declare a so-called "weak pointer" reference.  Such a
37571pointer is basically hidden for the garbage collector; this can be
37572useful in certain situations, especially when you want to keep track of
37573the allocated objects, yet allow them to be collected.  This kind of
37574pointers can only be members of objects, you cannot declare a global
37575pointer as a weak reference.  Every type which is a pointer type can be
37576declared a weak pointer, including `id', `Class' and `SEL'.
37577
37578 Here is an example of how to use this feature.  Suppose you want to
37579implement a class whose instances hold a weak pointer reference; the
37580following class does this:
37581
37582
37583     @interface WeakPointer : Object
37584     {
37585         const void* weakPointer;
37586     }
37587
37588     - initWithPointer:(const void*)p;
37589     - (const void*)weakPointer;
37590     @end
37591
37592
37593     @implementation WeakPointer
37594
37595     + (void)initialize
37596     {
37597       class_ivar_set_gcinvisible (self, "weakPointer", YES);
37598     }
37599
37600     - initWithPointer:(const void*)p
37601     {
37602       weakPointer = p;
37603       return self;
37604     }
37605
37606     - (const void*)weakPointer
37607     {
37608       return weakPointer;
37609     }
37610
37611     @end
37612
37613 Weak pointers are supported through a new type character specifier
37614represented by the `!' character.  The `class_ivar_set_gcinvisible()'
37615function adds or removes this specifier to the string type description
37616of the instance variable named as argument.
37617
37618
37619File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
37620
376218.4 Constant string objects
37622===========================
37623
37624GNU Objective-C provides constant string objects that are generated
37625directly by the compiler.  You declare a constant string object by
37626prefixing a C constant string with the character `@':
37627
37628       id myString = @"this is a constant string object";
37629
37630 The constant string objects are by default instances of the
37631`NXConstantString' class which is provided by the GNU Objective-C
37632runtime.  To get the definition of this class you must include the
37633`objc/NXConstStr.h' header file.
37634
37635 User defined libraries may want to implement their own constant string
37636class.  To be able to support them, the GNU Objective-C compiler
37637provides a new command line options
37638`-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
37639to a strict structure, the same as `NXConstantString''s structure:
37640
37641
37642     @interface MyConstantStringClass
37643     {
37644       Class isa;
37645       char *c_string;
37646       unsigned int len;
37647     }
37648     @end
37649
37650 `NXConstantString' inherits from `Object'; user class libraries may
37651choose to inherit the customized constant string class from a different
37652class than `Object'.  There is no requirement in the methods the
37653constant string class has to implement, but the final ivar layout of
37654the class must be the compatible with the given structure.
37655
37656 When the compiler creates the statically allocated constant string
37657object, the `c_string' field will be filled by the compiler with the
37658string; the `length' field will be filled by the compiler with the
37659string length; the `isa' pointer will be filled with `NULL' by the
37660compiler, and it will later be fixed up automatically at runtime by the
37661GNU Objective-C runtime library to point to the class which was set by
37662the `-fconstant-string-class' option when the object file is loaded (if
37663you wonder how it works behind the scenes, the name of the class to
37664use, and the list of static objects to fixup, are stored by the
37665compiler in the object file in a place where the GNU runtime library
37666will find them at runtime).
37667
37668 As a result, when a file is compiled with the
37669`-fconstant-string-class' option, all the constant string objects will
37670be instances of the class specified as argument to this option.  It is
37671possible to have multiple compilation units referring to different
37672constant string classes, neither the compiler nor the linker impose any
37673restrictions in doing this.
37674
37675
37676File: gcc.info,  Node: compatibility_alias,  Prev: Constant string objects,  Up: Objective-C
37677
376788.5 compatibility_alias
37679=======================
37680
37681This is a feature of the Objective-C compiler rather than of the
37682runtime, anyway since it is documented nowhere and its existence was
37683forgotten, we are documenting it here.
37684
37685 The keyword `@compatibility_alias' allows you to define a class name
37686as equivalent to another class name.  For example:
37687
37688     @compatibility_alias WOApplication GSWApplication;
37689
37690 tells the compiler that each time it encounters `WOApplication' as a
37691class name, it should replace it with `GSWApplication' (that is,
37692`WOApplication' is just an alias for `GSWApplication').
37693
37694 There are some constraints on how this can be used--
37695
37696   * `WOApplication' (the alias) must not be an existing class;
37697
37698   * `GSWApplication' (the real class) must be an existing class.
37699
37700
37701
37702File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
37703
377049 Binary Compatibility
37705**********************
37706
37707Binary compatibility encompasses several related concepts:
37708
37709"application binary interface (ABI)"
37710     The set of runtime conventions followed by all of the tools that
37711     deal with binary representations of a program, including
37712     compilers, assemblers, linkers, and language runtime support.
37713     Some ABIs are formal with a written specification, possibly
37714     designed by multiple interested parties.  Others are simply the
37715     way things are actually done by a particular set of tools.
37716
37717"ABI conformance"
37718     A compiler conforms to an ABI if it generates code that follows
37719     all of the specifications enumerated by that ABI.  A library
37720     conforms to an ABI if it is implemented according to that ABI.  An
37721     application conforms to an ABI if it is built using tools that
37722     conform to that ABI and does not contain source code that
37723     specifically changes behavior specified by the ABI.
37724
37725"calling conventions"
37726     Calling conventions are a subset of an ABI that specify of how
37727     arguments are passed and function results are returned.
37728
37729"interoperability"
37730     Different sets of tools are interoperable if they generate files
37731     that can be used in the same program.  The set of tools includes
37732     compilers, assemblers, linkers, libraries, header files, startup
37733     files, and debuggers.  Binaries produced by different sets of
37734     tools are not interoperable unless they implement the same ABI.
37735     This applies to different versions of the same tools as well as
37736     tools from different vendors.
37737
37738"intercallability"
37739     Whether a function in a binary built by one set of tools can call a
37740     function in a binary built by a different set of tools is a subset
37741     of interoperability.
37742
37743"implementation-defined features"
37744     Language standards include lists of implementation-defined
37745     features whose behavior can vary from one implementation to
37746     another.  Some of these features are normally covered by a
37747     platform's ABI and others are not.  The features that are not
37748     covered by an ABI generally affect how a program behaves, but not
37749     intercallability.
37750
37751"compatibility"
37752     Conformance to the same ABI and the same behavior of
37753     implementation-defined features are both relevant for
37754     compatibility.
37755
37756 The application binary interface implemented by a C or C++ compiler
37757affects code generation and runtime support for:
37758
37759   * size and alignment of data types
37760
37761   * layout of structured types
37762
37763   * calling conventions
37764
37765   * register usage conventions
37766
37767   * interfaces for runtime arithmetic support
37768
37769   * object file formats
37770
37771 In addition, the application binary interface implemented by a C++
37772compiler affects code generation and runtime support for:
37773   * name mangling
37774
37775   * exception handling
37776
37777   * invoking constructors and destructors
37778
37779   * layout, alignment, and padding of classes
37780
37781   * layout and alignment of virtual tables
37782
37783 Some GCC compilation options cause the compiler to generate code that
37784does not conform to the platform's default ABI.  Other options cause
37785different program behavior for implementation-defined features that are
37786not covered by an ABI.  These options are provided for consistency with
37787other compilers that do not follow the platform's default ABI or the
37788usual behavior of implementation-defined features for the platform.  Be
37789very careful about using such options.
37790
37791 Most platforms have a well-defined ABI that covers C code, but ABIs
37792that cover C++ functionality are not yet common.
37793
37794 Starting with GCC 3.2, GCC binary conventions for C++ are based on a
37795written, vendor-neutral C++ ABI that was designed to be specific to
3779664-bit Itanium but also includes generic specifications that apply to
37797any platform.  This C++ ABI is also implemented by other compiler
37798vendors on some platforms, notably GNU/Linux and BSD systems.  We have
37799tried hard to provide a stable ABI that will be compatible with future
37800GCC releases, but it is possible that we will encounter problems that
37801make this difficult.  Such problems could include different
37802interpretations of the C++ ABI by different vendors, bugs in the ABI, or
37803bugs in the implementation of the ABI in different compilers.  GCC's
37804`-Wabi' switch warns when G++ generates code that is probably not
37805compatible with the C++ ABI.
37806
37807 The C++ library used with a C++ compiler includes the Standard C++
37808Library, with functionality defined in the C++ Standard, plus language
37809runtime support.  The runtime support is included in a C++ ABI, but
37810there is no formal ABI for the Standard C++ Library.  Two
37811implementations of that library are interoperable if one follows the
37812de-facto ABI of the other and if they are both built with the same
37813compiler, or with compilers that conform to the same ABI for C++
37814compiler and runtime support.
37815
37816 When G++ and another C++ compiler conform to the same C++ ABI, but the
37817implementations of the Standard C++ Library that they normally use do
37818not follow the same ABI for the Standard C++ Library, object files
37819built with those compilers can be used in the same program only if they
37820use the same C++ library.  This requires specifying the location of the
37821C++ library header files when invoking the compiler whose usual library
37822is not being used.  The location of GCC's C++ header files depends on
37823how the GCC build was configured, but can be seen by using the G++ `-v'
37824option.  With default configuration options for G++ 3.3 the compile
37825line for a different C++ compiler needs to include
37826
37827         -IGCC_INSTALL_DIRECTORY/include/c++/3.3
37828
37829 Similarly, compiling code with G++ that must use a C++ library other
37830than the GNU C++ library requires specifying the location of the header
37831files for that other library.
37832
37833 The most straightforward way to link a program to use a particular C++
37834library is to use a C++ driver that specifies that C++ library by
37835default.  The `g++' driver, for example, tells the linker where to find
37836GCC's C++ library (`libstdc++') plus the other libraries and startup
37837files it needs, in the proper order.
37838
37839 If a program must use a different C++ library and it's not possible to
37840do the final link using a C++ driver that uses that library by default,
37841it is necessary to tell `g++' the location and name of that library.
37842It might also be necessary to specify different startup files and other
37843runtime support libraries, and to suppress the use of GCC's support
37844libraries with one or more of the options `-nostdlib', `-nostartfiles',
37845and `-nodefaultlibs'.
37846
37847
37848File: gcc.info,  Node: Gcov,  Next: Trouble,  Prev: Compatibility,  Up: Top
37849
3785010 `gcov'--a Test Coverage Program
37851**********************************
37852
37853`gcov' is a tool you can use in conjunction with GCC to test code
37854coverage in your programs.
37855
37856* Menu:
37857
37858* Gcov Intro::                  Introduction to gcov.
37859* Invoking Gcov::               How to use gcov.
37860* Gcov and Optimization::       Using gcov with GCC optimization.
37861* Gcov Data Files::             The files used by gcov.
37862* Cross-profiling::             Data file relocation.
37863
37864
37865File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
37866
3786710.1 Introduction to `gcov'
37868===========================
37869
37870`gcov' is a test coverage program.  Use it in concert with GCC to
37871analyze your programs to help create more efficient, faster running
37872code and to discover untested parts of your program.  You can use
37873`gcov' as a profiling tool to help discover where your optimization
37874efforts will best affect your code.  You can also use `gcov' along with
37875the other profiling tool, `gprof', to assess which parts of your code
37876use the greatest amount of computing time.
37877
37878 Profiling tools help you analyze your code's performance.  Using a
37879profiler such as `gcov' or `gprof', you can find out some basic
37880performance statistics, such as:
37881
37882   * how often each line of code executes
37883
37884   * what lines of code are actually executed
37885
37886   * how much computing time each section of code uses
37887
37888 Once you know these things about how your code works when compiled, you
37889can look at each module to see which modules should be optimized.
37890`gcov' helps you determine where to work on optimization.
37891
37892 Software developers also use coverage testing in concert with
37893testsuites, to make sure software is actually good enough for a release.
37894Testsuites can verify that a program works as expected; a coverage
37895program tests to see how much of the program is exercised by the
37896testsuite.  Developers can then determine what kinds of test cases need
37897to be added to the testsuites to create both better testing and a better
37898final product.
37899
37900 You should compile your code without optimization if you plan to use
37901`gcov' because the optimization, by combining some lines of code into
37902one function, may not give you as much information as you need to look
37903for `hot spots' where the code is using a great deal of computer time.
37904Likewise, because `gcov' accumulates statistics by line (at the lowest
37905resolution), it works best with a programming style that places only
37906one statement on each line.  If you use complicated macros that expand
37907to loops or to other control structures, the statistics are less
37908helpful--they only report on the line where the macro call appears.  If
37909your complex macros behave like functions, you can replace them with
37910inline functions to solve this problem.
37911
37912 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how
37913many times each line of a source file `SOURCEFILE.c' has executed.  You
37914can use these logfiles along with `gprof' to aid in fine-tuning the
37915performance of your programs.  `gprof' gives timing information you can
37916use along with the information you get from `gcov'.
37917
37918 `gcov' works only on code compiled with GCC.  It is not compatible
37919with any other profiling or test coverage mechanism.
37920
37921
37922File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
37923
3792410.2 Invoking `gcov'
37925====================
37926
37927     gcov [OPTIONS] SOURCEFILES
37928
37929 `gcov' accepts the following options:
37930
37931`-h'
37932`--help'
37933     Display help about using `gcov' (on the standard output), and exit
37934     without doing any further processing.
37935
37936`-v'
37937`--version'
37938     Display the `gcov' version number (on the standard output), and
37939     exit without doing any further processing.
37940
37941`-a'
37942`--all-blocks'
37943     Write individual execution counts for every basic block.  Normally
37944     gcov outputs execution counts only for the main blocks of a line.
37945     With this option you can determine if blocks within a single line
37946     are not being executed.
37947
37948`-b'
37949`--branch-probabilities'
37950     Write branch frequencies to the output file, and write branch
37951     summary info to the standard output.  This option allows you to
37952     see how often each branch in your program was taken.
37953     Unconditional branches will not be shown, unless the `-u' option
37954     is given.
37955
37956`-c'
37957`--branch-counts'
37958     Write branch frequencies as the number of branches taken, rather
37959     than the percentage of branches taken.
37960
37961`-n'
37962`--no-output'
37963     Do not create the `gcov' output file.
37964
37965`-l'
37966`--long-file-names'
37967     Create long file names for included source files.  For example, if
37968     the header file `x.h' contains code, and was included in the file
37969     `a.c', then running `gcov' on the file `a.c' will produce an
37970     output file called `a.c##x.h.gcov' instead of `x.h.gcov'.  This
37971     can be useful if `x.h' is included in multiple source files.  If
37972     you use the `-p' option, both the including and included file
37973     names will be complete path names.
37974
37975`-p'
37976`--preserve-paths'
37977     Preserve complete path information in the names of generated
37978     `.gcov' files.  Without this option, just the filename component is
37979     used.  With this option, all directories are used, with `/'
37980     characters translated to `#' characters, `.' directory components
37981     removed and `..' components renamed to `^'.  This is useful if
37982     sourcefiles are in several different directories.  It also affects
37983     the `-l' option.
37984
37985`-f'
37986`--function-summaries'
37987     Output summaries for each function in addition to the file level
37988     summary.
37989
37990`-o DIRECTORY|FILE'
37991`--object-directory DIRECTORY'
37992`--object-file FILE'
37993     Specify either the directory containing the gcov data files, or the
37994     object path name.  The `.gcno', and `.gcda' data files are
37995     searched for using this option.  If a directory is specified, the
37996     data files are in that directory and named after the source file
37997     name, without its extension.  If a file is specified here, the
37998     data files are named after that file, without its extension.  If
37999     this option is not supplied, it defaults to the current directory.
38000
38001`-u'
38002`--unconditional-branches'
38003     When branch probabilities are given, include those of
38004     unconditional branches.  Unconditional branches are normally not
38005     interesting.
38006
38007
38008 `gcov' should be run with the current directory the same as that when
38009you invoked the compiler.  Otherwise it will not be able to locate the
38010source files.  `gcov' produces files called `MANGLEDNAME.gcov' in the
38011current directory.  These contain the coverage information of the
38012source file they correspond to.  One `.gcov' file is produced for each
38013source file containing code, which was compiled to produce the data
38014files.  The MANGLEDNAME part of the output file name is usually simply
38015the source file name, but can be something more complicated if the `-l'
38016or `-p' options are given.  Refer to those options for details.
38017
38018 The `.gcov' files contain the `:' separated fields along with program
38019source code.  The format is
38020
38021     EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
38022
38023 Additional block information may succeed each line, when requested by
38024command line option.  The EXECUTION_COUNT is `-' for lines containing
38025no code and `#####' for lines which were never executed.  Some lines of
38026information at the start have LINE_NUMBER of zero.
38027
38028 The preamble lines are of the form
38029
38030     -:0:TAG:VALUE
38031
38032 The ordering and number of these preamble lines will be augmented as
38033`gcov' development progresses -- do not rely on them remaining
38034unchanged.  Use TAG to locate a particular preamble line.
38035
38036 The additional block information is of the form
38037
38038     TAG INFORMATION
38039
38040 The INFORMATION is human readable, but designed to be simple enough
38041for machine parsing too.
38042
38043 When printing percentages, 0% and 100% are only printed when the values
38044are _exactly_ 0% and 100% respectively.  Other values which would
38045conventionally be rounded to 0% or 100% are instead printed as the
38046nearest non-boundary value.
38047
38048 When using `gcov', you must first compile your program with two
38049special GCC options: `-fprofile-arcs -ftest-coverage'.  This tells the
38050compiler to generate additional information needed by gcov (basically a
38051flow graph of the program) and also includes additional code in the
38052object files for generating the extra profiling information needed by
38053gcov.  These additional files are placed in the directory where the
38054object file is located.
38055
38056 Running the program will cause profile output to be generated.  For
38057each source file compiled with `-fprofile-arcs', an accompanying
38058`.gcda' file will be placed in the object file directory.
38059
38060 Running `gcov' with your program's source file names as arguments will
38061now produce a listing of the code along with frequency of execution for
38062each line.  For example, if your program is called `tmp.c', this is
38063what you see when you use the basic `gcov' facility:
38064
38065     $ gcc -fprofile-arcs -ftest-coverage tmp.c
38066     $ a.out
38067     $ gcov tmp.c
38068     90.00% of 10 source lines executed in file tmp.c
38069     Creating tmp.c.gcov.
38070
38071 The file `tmp.c.gcov' contains output from `gcov'.  Here is a sample:
38072
38073             -:    0:Source:tmp.c
38074             -:    0:Graph:tmp.gcno
38075             -:    0:Data:tmp.gcda
38076             -:    0:Runs:1
38077             -:    0:Programs:1
38078             -:    1:#include <stdio.h>
38079             -:    2:
38080             -:    3:int main (void)
38081             1:    4:{
38082             1:    5:  int i, total;
38083             -:    6:
38084             1:    7:  total = 0;
38085             -:    8:
38086            11:    9:  for (i = 0; i < 10; i++)
38087            10:   10:    total += i;
38088             -:   11:
38089             1:   12:  if (total != 45)
38090         #####:   13:    printf ("Failure\n");
38091             -:   14:  else
38092             1:   15:    printf ("Success\n");
38093             1:   16:  return 0;
38094             -:   17:}
38095
38096 When you use the `-a' option, you will get individual block counts,
38097and the output looks like this:
38098
38099             -:    0:Source:tmp.c
38100             -:    0:Graph:tmp.gcno
38101             -:    0:Data:tmp.gcda
38102             -:    0:Runs:1
38103             -:    0:Programs:1
38104             -:    1:#include <stdio.h>
38105             -:    2:
38106             -:    3:int main (void)
38107             1:    4:{
38108             1:    4-block  0
38109             1:    5:  int i, total;
38110             -:    6:
38111             1:    7:  total = 0;
38112             -:    8:
38113            11:    9:  for (i = 0; i < 10; i++)
38114            11:    9-block  0
38115            10:   10:    total += i;
38116            10:   10-block  0
38117             -:   11:
38118             1:   12:  if (total != 45)
38119             1:   12-block  0
38120         #####:   13:    printf ("Failure\n");
38121         $$$$$:   13-block  0
38122             -:   14:  else
38123             1:   15:    printf ("Success\n");
38124             1:   15-block  0
38125             1:   16:  return 0;
38126             1:   16-block  0
38127             -:   17:}
38128
38129 In this mode, each basic block is only shown on one line - the last
38130line of the block.  A multi-line block will only contribute to the
38131execution count of that last line, and other lines will not be shown to
38132contain code, unless previous blocks end on those lines.  The total
38133execution count of a line is shown and subsequent lines show the
38134execution counts for individual blocks that end on that line.  After
38135each block, the branch and call counts of the block will be shown, if
38136the `-b' option is given.
38137
38138 Because of the way GCC instruments calls, a call count can be shown
38139after a line with no individual blocks.  As you can see, line 13
38140contains a basic block that was not executed.
38141
38142 When you use the `-b' option, your output looks like this:
38143
38144     $ gcov -b tmp.c
38145     90.00% of 10 source lines executed in file tmp.c
38146     80.00% of 5 branches executed in file tmp.c
38147     80.00% of 5 branches taken at least once in file tmp.c
38148     50.00% of 2 calls executed in file tmp.c
38149     Creating tmp.c.gcov.
38150
38151 Here is a sample of a resulting `tmp.c.gcov' file:
38152
38153             -:    0:Source:tmp.c
38154             -:    0:Graph:tmp.gcno
38155             -:    0:Data:tmp.gcda
38156             -:    0:Runs:1
38157             -:    0:Programs:1
38158             -:    1:#include <stdio.h>
38159             -:    2:
38160             -:    3:int main (void)
38161     function main called 1 returned 1 blocks executed 75%
38162             1:    4:{
38163             1:    5:  int i, total;
38164             -:    6:
38165             1:    7:  total = 0;
38166             -:    8:
38167            11:    9:  for (i = 0; i < 10; i++)
38168     branch  0 taken 91% (fallthrough)
38169     branch  1 taken 9%
38170            10:   10:    total += i;
38171             -:   11:
38172             1:   12:  if (total != 45)
38173     branch  0 taken 0% (fallthrough)
38174     branch  1 taken 100%
38175         #####:   13:    printf ("Failure\n");
38176     call    0 never executed
38177             -:   14:  else
38178             1:   15:    printf ("Success\n");
38179     call    0 called 1 returned 100%
38180             1:   16:  return 0;
38181             -:   17:}
38182
38183 For each function, a line is printed showing how many times the
38184function is called, how many times it returns and what percentage of the
38185function's blocks were executed.
38186
38187 For each basic block, a line is printed after the last line of the
38188basic block describing the branch or call that ends the basic block.
38189There can be multiple branches and calls listed for a single source
38190line if there are multiple basic blocks that end on that line.  In this
38191case, the branches and calls are each given a number.  There is no
38192simple way to map these branches and calls back to source constructs.
38193In general, though, the lowest numbered branch or call will correspond
38194to the leftmost construct on the source line.
38195
38196 For a branch, if it was executed at least once, then a percentage
38197indicating the number of times the branch was taken divided by the
38198number of times the branch was executed will be printed.  Otherwise, the
38199message "never executed" is printed.
38200
38201 For a call, if it was executed at least once, then a percentage
38202indicating the number of times the call returned divided by the number
38203of times the call was executed will be printed.  This will usually be
38204100%, but may be less for functions that call `exit' or `longjmp', and
38205thus may not return every time they are called.
38206
38207 The execution counts are cumulative.  If the example program were
38208executed again without removing the `.gcda' file, the count for the
38209number of times each line in the source was executed would be added to
38210the results of the previous run(s).  This is potentially useful in
38211several ways.  For example, it could be used to accumulate data over a
38212number of program runs as part of a test verification suite, or to
38213provide more accurate long-term information over a large number of
38214program runs.
38215
38216 The data in the `.gcda' files is saved immediately before the program
38217exits.  For each source file compiled with `-fprofile-arcs', the
38218profiling code first attempts to read in an existing `.gcda' file; if
38219the file doesn't match the executable (differing number of basic block
38220counts) it will ignore the contents of the file.  It then adds in the
38221new execution counts and finally writes the data to the file.
38222
38223
38224File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
38225
3822610.3 Using `gcov' with GCC Optimization
38227=======================================
38228
38229If you plan to use `gcov' to help optimize your code, you must first
38230compile your program with two special GCC options: `-fprofile-arcs
38231-ftest-coverage'.  Aside from that, you can use any other GCC options;
38232but if you want to prove that every single line in your program was
38233executed, you should not compile with optimization at the same time.
38234On some machines the optimizer can eliminate some simple code lines by
38235combining them with other lines.  For example, code like this:
38236
38237     if (a != b)
38238       c = 1;
38239     else
38240       c = 0;
38241
38242can be compiled into one instruction on some machines.  In this case,
38243there is no way for `gcov' to calculate separate execution counts for
38244each line because there isn't separate code for each line.  Hence the
38245`gcov' output looks like this if you compiled the program with
38246optimization:
38247
38248           100:   12:if (a != b)
38249           100:   13:  c = 1;
38250           100:   14:else
38251           100:   15:  c = 0;
38252
38253 The output shows that this block of code, combined by optimization,
38254executed 100 times.  In one sense this result is correct, because there
38255was only one instruction representing all four of these lines.  However,
38256the output does not indicate how many times the result was 0 and how
38257many times the result was 1.
38258
38259 Inlineable functions can create unexpected line counts.  Line counts
38260are shown for the source code of the inlineable function, but what is
38261shown depends on where the function is inlined, or if it is not inlined
38262at all.
38263
38264 If the function is not inlined, the compiler must emit an out of line
38265copy of the function, in any object file that needs it.  If `fileA.o'
38266and `fileB.o' both contain out of line bodies of a particular
38267inlineable function, they will also both contain coverage counts for
38268that function.  When `fileA.o' and `fileB.o' are linked together, the
38269linker will, on many systems, select one of those out of line bodies
38270for all calls to that function, and remove or ignore the other.
38271Unfortunately, it will not remove the coverage counters for the unused
38272function body.  Hence when instrumented, all but one use of that
38273function will show zero counts.
38274
38275 If the function is inlined in several places, the block structure in
38276each location might not be the same.  For instance, a condition might
38277now be calculable at compile time in some instances.  Because the
38278coverage of all the uses of the inline function will be shown for the
38279same source lines, the line counts themselves might seem inconsistent.
38280
38281
38282File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
38283
3828410.4 Brief description of `gcov' data files
38285===========================================
38286
38287`gcov' uses two files for profiling.  The names of these files are
38288derived from the original _object_ file by substituting the file suffix
38289with either `.gcno', or `.gcda'.  All of these files are placed in the
38290same directory as the object file, and contain data stored in a
38291platform-independent format.
38292
38293 The `.gcno' file is generated when the source file is compiled with
38294the GCC `-ftest-coverage' option.  It contains information to
38295reconstruct the basic block graphs and assign source line numbers to
38296blocks.
38297
38298 The `.gcda' file is generated when a program containing object files
38299built with the GCC `-fprofile-arcs' option is executed.  A separate
38300`.gcda' file is created for each object file compiled with this option.
38301It contains arc transition counts, and some summary information.
38302
38303 The full details of the file format is specified in `gcov-io.h', and
38304functions provided in that header file should be used to access the
38305coverage files.
38306
38307
38308File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov
38309
3831010.5 Data file relocation to support cross-profiling
38311====================================================
38312
38313Running the program will cause profile output to be generated.  For each
38314source file compiled with `-fprofile-arcs', an accompanying `.gcda'
38315file will be placed in the object file directory. That implicitly
38316requires running the program on the same system as it was built or
38317having the same absolute directory structure on the target system. The
38318program will try to create the needed directory structure, if it is not
38319already present.
38320
38321 To support cross-profiling, a program compiled with `-fprofile-arcs'
38322can relocate the data files based on two environment variables:
38323
38324   * GCOV_PREFIX contains the prefix to add to the absolute paths in
38325     the object file. Prefix must be absolute as well, otherwise its
38326     value is ignored. The default is no prefix.
38327
38328   * GCOV_PREFIX_STRIP indicates the how many initial directory names
38329     to strip off the hardwired absolute paths. Default value is 0.
38330
38331     _Note:_ GCOV_PREFIX_STRIP has no effect if GCOV_PREFIX is
38332     undefined, empty or non-absolute.
38333
38334 For example, if the object file `/user/build/foo.o' was built with
38335`-fprofile-arcs', the final executable will try to create the data file
38336`/user/build/foo.gcda' when running on the target system.  This will
38337fail if the corresponding directory does not exist and it is unable to
38338create it.  This can be overcome by, for example, setting the
38339environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'.
38340Such a setting will name the data file `/target/run/build/foo.gcda'.
38341
38342 You must move the data files to the expected directory tree in order to
38343use them for profile directed optimizations (`--use-profile'), or to
38344use the `gcov' tool.
38345
38346
38347File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Gcov,  Up: Top
38348
3834911 Known Causes of Trouble with GCC
38350***********************************
38351
38352This section describes known problems that affect users of GCC.  Most
38353of these are not GCC bugs per se--if they were, we would fix them.  But
38354the result for a user may be like the result of a bug.
38355
38356 Some of these problems are due to bugs in other software, some are
38357missing features that are too much work to add, and some are places
38358where people's opinions differ as to what is best.
38359
38360* Menu:
38361
38362* Actual Bugs::         Bugs we will fix later.
38363* Cross-Compiler Problems:: Common problems of cross compiling with GCC.
38364* Interoperation::      Problems using GCC with other compilers,
38365                        and with certain linkers, assemblers and debuggers.
38366* Incompatibilities::   GCC is incompatible with traditional C.
38367* Fixed Headers::       GCC uses corrected versions of system header files.
38368                        This is necessary, but doesn't always work smoothly.
38369* Standard Libraries::  GCC uses the system C library, which might not be
38370                        compliant with the ISO C standard.
38371* Disappointments::     Regrettable things we can't change, but not quite bugs.
38372* C++ Misunderstandings:: Common misunderstandings with GNU C++.
38373* Non-bugs::            Things we think are right, but some others disagree.
38374* Warnings and Errors:: Which problems in your code get warnings,
38375                        and which get errors.
38376
38377
38378File: gcc.info,  Node: Actual Bugs,  Next: Cross-Compiler Problems,  Up: Trouble
38379
3838011.1 Actual Bugs We Haven't Fixed Yet
38381=====================================
38382
38383   * The `fixincludes' script interacts badly with automounters; if the
38384     directory of system header files is automounted, it tends to be
38385     unmounted while `fixincludes' is running.  This would seem to be a
38386     bug in the automounter.  We don't know any good way to work around
38387     it.
38388
38389
38390File: gcc.info,  Node: Cross-Compiler Problems,  Next: Interoperation,  Prev: Actual Bugs,  Up: Trouble
38391
3839211.2 Cross-Compiler Problems
38393============================
38394
38395You may run into problems with cross compilation on certain machines,
38396for several reasons.
38397
38398   * At present, the program `mips-tfile' which adds debug support to
38399     object files on MIPS systems does not work in a cross compile
38400     environment.
38401
38402
38403File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Cross-Compiler Problems,  Up: Trouble
38404
3840511.3 Interoperation
38406===================
38407
38408This section lists various difficulties encountered in using GCC
38409together with other compilers or with the assemblers, linkers,
38410libraries and debuggers on certain systems.
38411
38412   * On many platforms, GCC supports a different ABI for C++ than do
38413     other compilers, so the object files compiled by GCC cannot be
38414     used with object files generated by another C++ compiler.
38415
38416     An area where the difference is most apparent is name mangling.
38417     The use of different name mangling is intentional, to protect you
38418     from more subtle problems.  Compilers differ as to many internal
38419     details of C++ implementation, including: how class instances are
38420     laid out, how multiple inheritance is implemented, and how virtual
38421     function calls are handled.  If the name encoding were made the
38422     same, your programs would link against libraries provided from
38423     other compilers--but the programs would then crash when run.
38424     Incompatible libraries are then detected at link time, rather than
38425     at run time.
38426
38427   * On some BSD systems, including some versions of Ultrix, use of
38428     profiling causes static variable destructors (currently used only
38429     in C++) not to be run.
38430
38431   * On some SGI systems, when you use `-lgl_s' as an option, it gets
38432     translated magically to `-lgl_s -lX11_s -lc_s'.  Naturally, this
38433     does not happen when you use GCC.  You must specify all three
38434     options explicitly.
38435
38436   * On a SPARC, GCC aligns all values of type `double' on an 8-byte
38437     boundary, and it expects every `double' to be so aligned.  The Sun
38438     compiler usually gives `double' values 8-byte alignment, with one
38439     exception: function arguments of type `double' may not be aligned.
38440
38441     As a result, if a function compiled with Sun CC takes the address
38442     of an argument of type `double' and passes this pointer of type
38443     `double *' to a function compiled with GCC, dereferencing the
38444     pointer may cause a fatal signal.
38445
38446     One way to solve this problem is to compile your entire program
38447     with GCC.  Another solution is to modify the function that is
38448     compiled with Sun CC to copy the argument into a local variable;
38449     local variables are always properly aligned.  A third solution is
38450     to modify the function that uses the pointer to dereference it via
38451     the following function `access_double' instead of directly with
38452     `*':
38453
38454          inline double
38455          access_double (double *unaligned_ptr)
38456          {
38457            union d2i { double d; int i[2]; };
38458
38459            union d2i *p = (union d2i *) unaligned_ptr;
38460            union d2i u;
38461
38462            u.i[0] = p->i[0];
38463            u.i[1] = p->i[1];
38464
38465            return u.d;
38466          }
38467
38468     Storing into the pointer can be done likewise with the same union.
38469
38470   * On Solaris, the `malloc' function in the `libmalloc.a' library may
38471     allocate memory that is only 4 byte aligned.  Since GCC on the
38472     SPARC assumes that doubles are 8 byte aligned, this may result in a
38473     fatal signal if doubles are stored in memory allocated by the
38474     `libmalloc.a' library.
38475
38476     The solution is to not use the `libmalloc.a' library.  Use instead
38477     `malloc' and related functions from `libc.a'; they do not have
38478     this problem.
38479
38480   * On the HP PA machine, ADB sometimes fails to work on functions
38481     compiled with GCC.  Specifically, it fails to work on functions
38482     that use `alloca' or variable-size arrays.  This is because GCC
38483     doesn't generate HP-UX unwind descriptors for such functions.  It
38484     may even be impossible to generate them.
38485
38486   * Debugging (`-g') is not supported on the HP PA machine, unless you
38487     use the preliminary GNU tools.
38488
38489   * Taking the address of a label may generate errors from the HP-UX
38490     PA assembler.  GAS for the PA does not have this problem.
38491
38492   * Using floating point parameters for indirect calls to static
38493     functions will not work when using the HP assembler.  There simply
38494     is no way for GCC to specify what registers hold arguments for
38495     static functions when using the HP assembler.  GAS for the PA does
38496     not have this problem.
38497
38498   * In extremely rare cases involving some very large functions you may
38499     receive errors from the HP linker complaining about an out of
38500     bounds unconditional branch offset.  This used to occur more often
38501     in previous versions of GCC, but is now exceptionally rare.  If
38502     you should run into it, you can work around by making your
38503     function smaller.
38504
38505   * GCC compiled code sometimes emits warnings from the HP-UX
38506     assembler of the form:
38507
38508          (warning) Use of GR3 when
38509            frame >= 8192 may cause conflict.
38510
38511     These warnings are harmless and can be safely ignored.
38512
38513   * In extremely rare cases involving some very large functions you may
38514     receive errors from the AIX Assembler complaining about a
38515     displacement that is too large.  If you should run into it, you
38516     can work around by making your function smaller.
38517
38518   * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker
38519     semantics which merges global symbols between libraries and
38520     applications, especially necessary for C++ streams functionality.
38521     This is not the default behavior of AIX shared libraries and
38522     dynamic linking.  `libstdc++.a' is built on AIX with
38523     "runtime-linking" enabled so that symbol merging can occur.  To
38524     utilize this feature, the application linked with `libstdc++.a'
38525     must include the `-Wl,-brtl' flag on the link line.  G++ cannot
38526     impose this because this option may interfere with the semantics
38527     of the user program and users may not always use `g++' to link his
38528     or her application.  Applications are not required to use the
38529     `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a'
38530     library which is not dependent on the symbol merging semantics
38531     will continue to function correctly.
38532
38533   * An application can interpose its own definition of functions for
38534     functions invoked by `libstdc++.a' with "runtime-linking" enabled
38535     on AIX.  To accomplish this the application must be linked with
38536     "runtime-linking" option and the functions explicitly must be
38537     exported by the application (`-Wl,-brtl,-bE:exportfile').
38538
38539   * AIX on the RS/6000 provides support (NLS) for environments outside
38540     of the United States.  Compilers and assemblers use NLS to support
38541     locale-specific representations of various objects including
38542     floating-point numbers (`.' vs `,' for separating decimal
38543     fractions).  There have been problems reported where the library
38544     linked with GCC does not produce the same floating-point formats
38545     that the assembler accepts.  If you have this problem, set the
38546     `LANG' environment variable to `C' or `En_US'.
38547
38548   * Even if you specify `-fdollars-in-identifiers', you cannot
38549     successfully use `$' in identifiers on the RS/6000 due to a
38550     restriction in the IBM assembler.  GAS supports these identifiers.
38551
38552
38553
38554File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble
38555
3855611.4 Incompatibilities of GCC
38557=============================
38558
38559There are several noteworthy incompatibilities between GNU C and K&R
38560(non-ISO) versions of C.
38561
38562   * GCC normally makes string constants read-only.  If several
38563     identical-looking string constants are used, GCC stores only one
38564     copy of the string.
38565
38566     One consequence is that you cannot call `mktemp' with a string
38567     constant argument.  The function `mktemp' always alters the string
38568     its argument points to.
38569
38570     Another consequence is that `sscanf' does not work on some very
38571     old systems when passed a string constant as its format control
38572     string or input.  This is because `sscanf' incorrectly tries to
38573     write into the string constant.  Likewise `fscanf' and `scanf'.
38574
38575     The solution to these problems is to change the program to use
38576     `char'-array variables with initialization strings for these
38577     purposes instead of string constants.
38578
38579   * `-2147483648' is positive.
38580
38581     This is because 2147483648 cannot fit in the type `int', so
38582     (following the ISO C rules) its data type is `unsigned long int'.
38583     Negating this value yields 2147483648 again.
38584
38585   * GCC does not substitute macro arguments when they appear inside of
38586     string constants.  For example, the following macro in GCC
38587
38588          #define foo(a) "a"
38589
38590     will produce output `"a"' regardless of what the argument A is.
38591
38592   * When you use `setjmp' and `longjmp', the only automatic variables
38593     guaranteed to remain valid are those declared `volatile'.  This is
38594     a consequence of automatic register allocation.  Consider this
38595     function:
38596
38597          jmp_buf j;
38598
38599          foo ()
38600          {
38601            int a, b;
38602
38603            a = fun1 ();
38604            if (setjmp (j))
38605              return a;
38606
38607            a = fun2 ();
38608            /* `longjmp (j)' may occur in `fun3'. */
38609            return a + fun3 ();
38610          }
38611
38612     Here `a' may or may not be restored to its first value when the
38613     `longjmp' occurs.  If `a' is allocated in a register, then its
38614     first value is restored; otherwise, it keeps the last value stored
38615     in it.
38616
38617     If you use the `-W' option with the `-O' option, you will get a
38618     warning when GCC thinks such a problem might be possible.
38619
38620   * Programs that use preprocessing directives in the middle of macro
38621     arguments do not work with GCC.  For example, a program like this
38622     will not work:
38623
38624          foobar (
38625          #define luser
38626                  hack)
38627
38628     ISO C does not permit such a construct.
38629
38630   * K&R compilers allow comments to cross over an inclusion boundary
38631     (i.e. started in an include file and ended in the including file).
38632
38633   * Declarations of external variables and functions within a block
38634     apply only to the block containing the declaration.  In other
38635     words, they have the same scope as any other declaration in the
38636     same place.
38637
38638     In some other C compilers, an `extern' declaration affects all the
38639     rest of the file even if it happens within a block.
38640
38641   * In traditional C, you can combine `long', etc., with a typedef
38642     name, as shown here:
38643
38644          typedef int foo;
38645          typedef long foo bar;
38646
38647     In ISO C, this is not allowed: `long' and other type modifiers
38648     require an explicit `int'.
38649
38650   * PCC allows typedef names to be used as function parameters.
38651
38652   * Traditional C allows the following erroneous pair of declarations
38653     to appear together in a given scope:
38654
38655          typedef int foo;
38656          typedef foo foo;
38657
38658   * GCC treats all characters of identifiers as significant.
38659     According to K&R-1 (2.2), "No more than the first eight characters
38660     are significant, although more may be used.".  Also according to
38661     K&R-1 (2.2), "An identifier is a sequence of letters and digits;
38662     the first character must be a letter.  The underscore _ counts as
38663     a letter.", but GCC also allows dollar signs in identifiers.
38664
38665   * PCC allows whitespace in the middle of compound assignment
38666     operators such as `+='.  GCC, following the ISO standard, does not
38667     allow this.
38668
38669   * GCC complains about unterminated character constants inside of
38670     preprocessing conditionals that fail.  Some programs have English
38671     comments enclosed in conditionals that are guaranteed to fail; if
38672     these comments contain apostrophes, GCC will probably report an
38673     error.  For example, this code would produce an error:
38674
38675          #if 0
38676          You can't expect this to work.
38677          #endif
38678
38679     The best solution to such a problem is to put the text into an
38680     actual C comment delimited by `/*...*/'.
38681
38682   * Many user programs contain the declaration `long time ();'.  In the
38683     past, the system header files on many systems did not actually
38684     declare `time', so it did not matter what type your program
38685     declared it to return.  But in systems with ISO C headers, `time'
38686     is declared to return `time_t', and if that is not the same as
38687     `long', then `long time ();' is erroneous.
38688
38689     The solution is to change your program to use appropriate system
38690     headers (`<time.h>' on systems with ISO C headers) and not to
38691     declare `time' if the system header files declare it, or failing
38692     that to use `time_t' as the return type of `time'.
38693
38694   * When compiling functions that return `float', PCC converts it to a
38695     double.  GCC actually returns a `float'.  If you are concerned
38696     with PCC compatibility, you should declare your functions to return
38697     `double'; you might as well say what you mean.
38698
38699   * When compiling functions that return structures or unions, GCC
38700     output code normally uses a method different from that used on most
38701     versions of Unix.  As a result, code compiled with GCC cannot call
38702     a structure-returning function compiled with PCC, and vice versa.
38703
38704     The method used by GCC is as follows: a structure or union which is
38705     1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
38706     union with any other size is stored into an address supplied by
38707     the caller (usually in a special, fixed register, but on some
38708     machines it is passed on the stack).  The target hook
38709     `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
38710
38711     By contrast, PCC on most target machines returns structures and
38712     unions of any size by copying the data into an area of static
38713     storage, and then returning the address of that storage as if it
38714     were a pointer value.  The caller must copy the data from that
38715     memory area to the place where the value is wanted.  GCC does not
38716     use this method because it is slower and nonreentrant.
38717
38718     On some newer machines, PCC uses a reentrant convention for all
38719     structure and union returning.  GCC on most of these machines uses
38720     a compatible convention when returning structures and unions in
38721     memory, but still returns small structures and unions in registers.
38722
38723     You can tell GCC to use a compatible convention for all structure
38724     and union returning with the option `-fpcc-struct-return'.
38725
38726   * GCC complains about program fragments such as `0x74ae-0x4000'
38727     which appear to be two hexadecimal constants separated by the minus
38728     operator.  Actually, this string is a single "preprocessing token".
38729     Each such token must correspond to one token in C.  Since this
38730     does not, GCC prints an error message.  Although it may appear
38731     obvious that what is meant is an operator and two values, the ISO
38732     C standard specifically requires that this be treated as erroneous.
38733
38734     A "preprocessing token" is a "preprocessing number" if it begins
38735     with a digit and is followed by letters, underscores, digits,
38736     periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-'
38737     character sequences.  (In strict C90 mode, the sequences `p+',
38738     `p-', `P+' and `P-' cannot appear in preprocessing numbers.)
38739
38740     To make the above program fragment valid, place whitespace in
38741     front of the minus sign.  This whitespace will end the
38742     preprocessing number.
38743
38744
38745File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
38746
3874711.5 Fixed Header Files
38748=======================
38749
38750GCC needs to install corrected versions of some system header files.
38751This is because most target systems have some header files that won't
38752work with GCC unless they are changed.  Some have bugs, some are
38753incompatible with ISO C, and some depend on special features of other
38754compilers.
38755
38756 Installing GCC automatically creates and installs the fixed header
38757files, by running a program called `fixincludes'.  Normally, you don't
38758need to pay attention to this.  But there are cases where it doesn't do
38759the right thing automatically.
38760
38761   * If you update the system's header files, such as by installing a
38762     new system version, the fixed header files of GCC are not
38763     automatically updated.  They can be updated using the `mkheaders'
38764     script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
38765
38766   * On some systems, header file directories contain machine-specific
38767     symbolic links in certain places.  This makes it possible to share
38768     most of the header files among hosts running the same version of
38769     the system on different machine models.
38770
38771     The programs that fix the header files do not understand this
38772     special way of using symbolic links; therefore, the directory of
38773     fixed header files is good only for the machine model used to
38774     build it.
38775
38776     It is possible to make separate sets of fixed header files for the
38777     different machine models, and arrange a structure of symbolic
38778     links so as to use the proper set, but you'll have to do this by
38779     hand.
38780
38781
38782File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
38783
3878411.6 Standard Libraries
38785=======================
38786
38787GCC by itself attempts to be a conforming freestanding implementation.
38788*Note Language Standards Supported by GCC: Standards, for details of
38789what this means.  Beyond the library facilities required of such an
38790implementation, the rest of the C library is supplied by the vendor of
38791the operating system.  If that C library doesn't conform to the C
38792standards, then your programs might get warnings (especially when using
38793`-Wall') that you don't expect.
38794
38795 For example, the `sprintf' function on SunOS 4.1.3 returns `char *'
38796while the C standard says that `sprintf' returns an `int'.  The
38797`fixincludes' program could make the prototype for this function match
38798the Standard, but that would be wrong, since the function will still
38799return `char *'.
38800
38801 If you need a Standard compliant library, then you need to find one, as
38802GCC does not provide one.  The GNU C library (called `glibc') provides
38803ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
38804HURD-based GNU systems; no recent version of it supports other systems,
38805though some very old versions did.  Version 2.2 of the GNU C library
38806includes nearly complete C99 support.  You could also ask your
38807operating system vendor if newer libraries are available.
38808
38809
38810File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
38811
3881211.7 Disappointments and Misunderstandings
38813==========================================
38814
38815These problems are perhaps regrettable, but we don't know any practical
38816way around them.
38817
38818   * Certain local variables aren't recognized by debuggers when you
38819     compile with optimization.
38820
38821     This occurs because sometimes GCC optimizes the variable out of
38822     existence.  There is no way to tell the debugger how to compute the
38823     value such a variable "would have had", and it is not clear that
38824     would be desirable anyway.  So GCC simply does not mention the
38825     eliminated variable when it writes debugging information.
38826
38827     You have to expect a certain amount of disagreement between the
38828     executable and your source code, when you use optimization.
38829
38830   * Users often think it is a bug when GCC reports an error for code
38831     like this:
38832
38833          int foo (struct mumble *);
38834
38835          struct mumble { ... };
38836
38837          int foo (struct mumble *x)
38838          { ... }
38839
38840     This code really is erroneous, because the scope of `struct
38841     mumble' in the prototype is limited to the argument list
38842     containing it.  It does not refer to the `struct mumble' defined
38843     with file scope immediately below--they are two unrelated types
38844     with similar names in different scopes.
38845
38846     But in the definition of `foo', the file-scope type is used
38847     because that is available to be inherited.  Thus, the definition
38848     and the prototype do not match, and you get an error.
38849
38850     This behavior may seem silly, but it's what the ISO standard
38851     specifies.  It is easy enough for you to make your code work by
38852     moving the definition of `struct mumble' above the prototype.
38853     It's not worth being incompatible with ISO C just to avoid an
38854     error for the example shown above.
38855
38856   * Accesses to bit-fields even in volatile objects works by accessing
38857     larger objects, such as a byte or a word.  You cannot rely on what
38858     size of object is accessed in order to read or write the
38859     bit-field; it may even vary for a given bit-field according to the
38860     precise usage.
38861
38862     If you care about controlling the amount of memory that is
38863     accessed, use volatile but do not use bit-fields.
38864
38865   * GCC comes with shell scripts to fix certain known problems in
38866     system header files.  They install corrected copies of various
38867     header files in a special directory where only GCC will normally
38868     look for them.  The scripts adapt to various systems by searching
38869     all the system header files for the problem cases that we know
38870     about.
38871
38872     If new system header files are installed, nothing automatically
38873     arranges to update the corrected header files.  They can be
38874     updated using the `mkheaders' script installed in
38875     `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
38876
38877   * On 68000 and x86 systems, for instance, you can get paradoxical
38878     results if you test the precise values of floating point numbers.
38879     For example, you can find that a floating point value which is not
38880     a NaN is not equal to itself.  This results from the fact that the
38881     floating point registers hold a few more bits of precision than
38882     fit in a `double' in memory.  Compiled code moves values between
38883     memory and floating point registers at its convenience, and moving
38884     them into memory truncates them.
38885
38886     You can partially avoid this problem by using the `-ffloat-store'
38887     option (*note Optimize Options::).
38888
38889   * On AIX and other platforms without weak symbol support, templates
38890     need to be instantiated explicitly and symbols for static members
38891     of templates will not be generated.
38892
38893   * On AIX, GCC scans object files and library archives for static
38894     constructors and destructors when linking an application before the
38895     linker prunes unreferenced symbols.  This is necessary to prevent
38896     the AIX linker from mistakenly assuming that static constructor or
38897     destructor are unused and removing them before the scanning can
38898     occur.  All static constructors and destructors found will be
38899     referenced even though the modules in which they occur may not be
38900     used by the program.  This may lead to both increased executable
38901     size and unexpected symbol references.
38902
38903
38904File: gcc.info,  Node: C++ Misunderstandings,  Next: Non-bugs,  Prev: Disappointments,  Up: Trouble
38905
3890611.8 Common Misunderstandings with GNU C++
38907==========================================
38908
38909C++ is a complex language and an evolving one, and its standard
38910definition (the ISO C++ standard) was only recently completed.  As a
38911result, your C++ compiler may occasionally surprise you, even when its
38912behavior is correct.  This section discusses some areas that frequently
38913give rise to questions of this sort.
38914
38915* Menu:
38916
38917* Static Definitions::  Static member declarations are not definitions
38918* Name lookup::         Name lookup, templates, and accessing members of base classes
38919* Temporaries::         Temporaries may vanish before you expect
38920* Copy Assignment::     Copy Assignment operators copy virtual bases twice
38921
38922
38923File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
38924
3892511.8.1 Declare _and_ Define Static Members
38926------------------------------------------
38927
38928When a class has static data members, it is not enough to _declare_ the
38929static member; you must also _define_ it.  For example:
38930
38931     class Foo
38932     {
38933       ...
38934       void method();
38935       static int bar;
38936     };
38937
38938 This declaration only establishes that the class `Foo' has an `int'
38939named `Foo::bar', and a member function named `Foo::method'.  But you
38940still need to define _both_ `method' and `bar' elsewhere.  According to
38941the ISO standard, you must supply an initializer in one (and only one)
38942source file, such as:
38943
38944     int Foo::bar = 0;
38945
38946 Other C++ compilers may not correctly implement the standard behavior.
38947As a result, when you switch to `g++' from one of these compilers, you
38948may discover that a program that appeared to work correctly in fact
38949does not conform to the standard: `g++' reports as undefined symbols
38950any static data members that lack definitions.
38951
38952
38953File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
38954
3895511.8.2 Name lookup, templates, and accessing members of base classes
38956--------------------------------------------------------------------
38957
38958The C++ standard prescribes that all names that are not dependent on
38959template parameters are bound to their present definitions when parsing
38960a template function or class.(1)  Only names that are dependent are
38961looked up at the point of instantiation.  For example, consider
38962
38963       void foo(double);
38964
38965       struct A {
38966         template <typename T>
38967         void f () {
38968           foo (1);        // 1
38969           int i = N;      // 2
38970           T t;
38971           t.bar();        // 3
38972           foo (t);        // 4
38973         }
38974
38975         static const int N;
38976       };
38977
38978 Here, the names `foo' and `N' appear in a context that does not depend
38979on the type of `T'.  The compiler will thus require that they are
38980defined in the context of use in the template, not only before the
38981point of instantiation, and will here use `::foo(double)' and `A::N',
38982respectively.  In particular, it will convert the integer value to a
38983`double' when passing it to `::foo(double)'.
38984
38985 Conversely, `bar' and the call to `foo' in the fourth marked line are
38986used in contexts that do depend on the type of `T', so they are only
38987looked up at the point of instantiation, and you can provide
38988declarations for them after declaring the template, but before
38989instantiating it.  In particular, if you instantiate `A::f<int>', the
38990last line will call an overloaded `::foo(int)' if one was provided,
38991even if after the declaration of `struct A'.
38992
38993 This distinction between lookup of dependent and non-dependent names is
38994called two-stage (or dependent) name lookup.  G++ implements it since
38995version 3.4.
38996
38997 Two-stage name lookup sometimes leads to situations with behavior
38998different from non-template codes.  The most common is probably this:
38999
39000       template <typename T> struct Base {
39001         int i;
39002       };
39003
39004       template <typename T> struct Derived : public Base<T> {
39005         int get_i() { return i; }
39006       };
39007
39008 In `get_i()', `i' is not used in a dependent context, so the compiler
39009will look for a name declared at the enclosing namespace scope (which
39010is the global scope here).  It will not look into the base class, since
39011that is dependent and you may declare specializations of `Base' even
39012after declaring `Derived', so the compiler can't really know what `i'
39013would refer to.  If there is no global variable `i', then you will get
39014an error message.
39015
39016 In order to make it clear that you want the member of the base class,
39017you need to defer lookup until instantiation time, at which the base
39018class is known.  For this, you need to access `i' in a dependent
39019context, by either using `this->i' (remember that `this' is of type
39020`Derived<T>*', so is obviously dependent), or using `Base<T>::i'.
39021Alternatively, `Base<T>::i' might be brought into scope by a
39022`using'-declaration.
39023
39024 Another, similar example involves calling member functions of a base
39025class:
39026
39027       template <typename T> struct Base {
39028           int f();
39029       };
39030
39031       template <typename T> struct Derived : Base<T> {
39032           int g() { return f(); };
39033       };
39034
39035 Again, the call to `f()' is not dependent on template arguments (there
39036are no arguments that depend on the type `T', and it is also not
39037otherwise specified that the call should be in a dependent context).
39038Thus a global declaration of such a function must be available, since
39039the one in the base class is not visible until instantiation time.  The
39040compiler will consequently produce the following error message:
39041
39042       x.cc: In member function `int Derived<T>::g()':
39043       x.cc:6: error: there are no arguments to `f' that depend on a template
39044          parameter, so a declaration of `f' must be available
39045       x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
39046          allowing the use of an undeclared name is deprecated)
39047
39048 To make the code valid either use `this->f()', or `Base<T>::f()'.
39049Using the `-fpermissive' flag will also let the compiler accept the
39050code, by marking all function calls for which no declaration is visible
39051at the time of definition of the template for later lookup at
39052instantiation time, as if it were a dependent call.  We do not
39053recommend using `-fpermissive' to work around invalid code, and it will
39054also only catch cases where functions in base classes are called, not
39055where variables in base classes are used (as in the example above).
39056
39057 Note that some compilers (including G++ versions prior to 3.4) get
39058these examples wrong and accept above code without an error.  Those
39059compilers do not implement two-stage name lookup correctly.
39060
39061 ---------- Footnotes ----------
39062
39063 (1) The C++ standard just uses the term "dependent" for names that
39064depend on the type or value of template parameters.  This shorter term
39065will also be used in the rest of this section.
39066
39067
39068File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
39069
3907011.8.3 Temporaries May Vanish Before You Expect
39071-----------------------------------------------
39072
39073It is dangerous to use pointers or references to _portions_ of a
39074temporary object.  The compiler may very well delete the object before
39075you expect it to, leaving a pointer to garbage.  The most common place
39076where this problem crops up is in classes like string classes,
39077especially ones that define a conversion function to type `char *' or
39078`const char *'--which is one reason why the standard `string' class
39079requires you to call the `c_str' member function.  However, any class
39080that returns a pointer to some internal structure is potentially
39081subject to this problem.
39082
39083 For example, a program may use a function `strfunc' that returns
39084`string' objects, and another function `charfunc' that operates on
39085pointers to `char':
39086
39087     string strfunc ();
39088     void charfunc (const char *);
39089
39090     void
39091     f ()
39092     {
39093       const char *p = strfunc().c_str();
39094       ...
39095       charfunc (p);
39096       ...
39097       charfunc (p);
39098     }
39099
39100In this situation, it may seem reasonable to save a pointer to the C
39101string returned by the `c_str' member function and use that rather than
39102call `c_str' repeatedly.  However, the temporary string created by the
39103call to `strfunc' is destroyed after `p' is initialized, at which point
39104`p' is left pointing to freed memory.
39105
39106 Code like this may run successfully under some other compilers,
39107particularly obsolete cfront-based compilers that delete temporaries
39108along with normal local variables.  However, the GNU C++ behavior is
39109standard-conforming, so if your program depends on late destruction of
39110temporaries it is not portable.
39111
39112 The safe way to write such code is to give the temporary a name, which
39113forces it to remain until the end of the scope of the name.  For
39114example:
39115
39116     const string& tmp = strfunc ();
39117     charfunc (tmp.c_str ());
39118
39119
39120File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
39121
3912211.8.4 Implicit Copy-Assignment for Virtual Bases
39123-------------------------------------------------
39124
39125When a base class is virtual, only one subobject of the base class
39126belongs to each full object.  Also, the constructors and destructors are
39127invoked only once, and called from the most-derived class.  However,
39128such objects behave unspecified when being assigned.  For example:
39129
39130     struct Base{
39131       char *name;
39132       Base(char *n) : name(strdup(n)){}
39133       Base& operator= (const Base& other){
39134        free (name);
39135        name = strdup (other.name);
39136       }
39137     };
39138
39139     struct A:virtual Base{
39140       int val;
39141       A():Base("A"){}
39142     };
39143
39144     struct B:virtual Base{
39145       int bval;
39146       B():Base("B"){}
39147     };
39148
39149     struct Derived:public A, public B{
39150       Derived():Base("Derived"){}
39151     };
39152
39153     void func(Derived &d1, Derived &d2)
39154     {
39155       d1 = d2;
39156     }
39157
39158 The C++ standard specifies that `Base::Base' is only called once when
39159constructing or copy-constructing a Derived object.  It is unspecified
39160whether `Base::operator=' is called more than once when the implicit
39161copy-assignment for Derived objects is invoked (as it is inside `func'
39162in the example).
39163
39164 G++ implements the "intuitive" algorithm for copy-assignment: assign
39165all direct bases, then assign all members.  In that algorithm, the
39166virtual base subobject can be encountered more than once.  In the
39167example, copying proceeds in the following order: `val', `name' (via
39168`strdup'), `bval', and `name' again.
39169
39170 If application code relies on copy-assignment, a user-defined
39171copy-assignment operator removes any uncertainties.  With such an
39172operator, the application can define whether and how the virtual base
39173subobject is assigned.
39174
39175
39176File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: C++ Misunderstandings,  Up: Trouble
39177
3917811.9 Certain Changes We Don't Want to Make
39179==========================================
39180
39181This section lists changes that people frequently request, but which we
39182do not make because we think GCC is better without them.
39183
39184   * Checking the number and type of arguments to a function which has
39185     an old-fashioned definition and no prototype.
39186
39187     Such a feature would work only occasionally--only for calls that
39188     appear in the same file as the called function, following the
39189     definition.  The only way to check all calls reliably is to add a
39190     prototype for the function.  But adding a prototype eliminates the
39191     motivation for this feature.  So the feature is not worthwhile.
39192
39193   * Warning about using an expression whose type is signed as a shift
39194     count.
39195
39196     Shift count operands are probably signed more often than unsigned.
39197     Warning about this would cause far more annoyance than good.
39198
39199   * Warning about assigning a signed value to an unsigned variable.
39200
39201     Such assignments must be very common; warning about them would
39202     cause more annoyance than good.
39203
39204   * Warning when a non-void function value is ignored.
39205
39206     C contains many standard functions that return a value that most
39207     programs choose to ignore.  One obvious example is `printf'.
39208     Warning about this practice only leads the defensive programmer to
39209     clutter programs with dozens of casts to `void'.  Such casts are
39210     required so frequently that they become visual noise.  Writing
39211     those casts becomes so automatic that they no longer convey useful
39212     information about the intentions of the programmer.  For functions
39213     where the return value should never be ignored, use the
39214     `warn_unused_result' function attribute (*note Function
39215     Attributes::).
39216
39217   * Making `-fshort-enums' the default.
39218
39219     This would cause storage layout to be incompatible with most other
39220     C compilers.  And it doesn't seem very important, given that you
39221     can get the same result in other ways.  The case where it matters
39222     most is when the enumeration-valued object is inside a structure,
39223     and in that case you can specify a field width explicitly.
39224
39225   * Making bit-fields unsigned by default on particular machines where
39226     "the ABI standard" says to do so.
39227
39228     The ISO C standard leaves it up to the implementation whether a
39229     bit-field declared plain `int' is signed or not.  This in effect
39230     creates two alternative dialects of C.
39231
39232     The GNU C compiler supports both dialects; you can specify the
39233     signed dialect with `-fsigned-bitfields' and the unsigned dialect
39234     with `-funsigned-bitfields'.  However, this leaves open the
39235     question of which dialect to use by default.
39236
39237     Currently, the preferred dialect makes plain bit-fields signed,
39238     because this is simplest.  Since `int' is the same as `signed int'
39239     in every other context, it is cleanest for them to be the same in
39240     bit-fields as well.
39241
39242     Some computer manufacturers have published Application Binary
39243     Interface standards which specify that plain bit-fields should be
39244     unsigned.  It is a mistake, however, to say anything about this
39245     issue in an ABI.  This is because the handling of plain bit-fields
39246     distinguishes two dialects of C.  Both dialects are meaningful on
39247     every type of machine.  Whether a particular object file was
39248     compiled using signed bit-fields or unsigned is of no concern to
39249     other object files, even if they access the same bit-fields in the
39250     same data structures.
39251
39252     A given program is written in one or the other of these two
39253     dialects.  The program stands a chance to work on most any machine
39254     if it is compiled with the proper dialect.  It is unlikely to work
39255     at all if compiled with the wrong dialect.
39256
39257     Many users appreciate the GNU C compiler because it provides an
39258     environment that is uniform across machines.  These users would be
39259     inconvenienced if the compiler treated plain bit-fields
39260     differently on certain machines.
39261
39262     Occasionally users write programs intended only for a particular
39263     machine type.  On these occasions, the users would benefit if the
39264     GNU C compiler were to support by default the same dialect as the
39265     other compilers on that machine.  But such applications are rare.
39266     And users writing a program to run on more than one type of
39267     machine cannot possibly benefit from this kind of compatibility.
39268
39269     This is why GCC does and will treat plain bit-fields in the same
39270     fashion on all types of machines (by default).
39271
39272     There are some arguments for making bit-fields unsigned by default
39273     on all machines.  If, for example, this becomes a universal de
39274     facto standard, it would make sense for GCC to go along with it.
39275     This is something to be considered in the future.
39276
39277     (Of course, users strongly concerned about portability should
39278     indicate explicitly in each bit-field whether it is signed or not.
39279     In this way, they write programs which have the same meaning in
39280     both C dialects.)
39281
39282   * Undefining `__STDC__' when `-ansi' is not used.
39283
39284     Currently, GCC defines `__STDC__' unconditionally.  This provides
39285     good results in practice.
39286
39287     Programmers normally use conditionals on `__STDC__' to ask whether
39288     it is safe to use certain features of ISO C, such as function
39289     prototypes or ISO token concatenation.  Since plain `gcc' supports
39290     all the features of ISO C, the correct answer to these questions is
39291     "yes".
39292
39293     Some users try to use `__STDC__' to check for the availability of
39294     certain library facilities.  This is actually incorrect usage in
39295     an ISO C program, because the ISO C standard says that a conforming
39296     freestanding implementation should define `__STDC__' even though it
39297     does not have the library facilities.  `gcc -ansi -pedantic' is a
39298     conforming freestanding implementation, and it is therefore
39299     required to define `__STDC__', even though it does not come with
39300     an ISO C library.
39301
39302     Sometimes people say that defining `__STDC__' in a compiler that
39303     does not completely conform to the ISO C standard somehow violates
39304     the standard.  This is illogical.  The standard is a standard for
39305     compilers that claim to support ISO C, such as `gcc -ansi'--not
39306     for other compilers such as plain `gcc'.  Whatever the ISO C
39307     standard says is relevant to the design of plain `gcc' without
39308     `-ansi' only for pragmatic reasons, not as a requirement.
39309
39310     GCC normally defines `__STDC__' to be 1, and in addition defines
39311     `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std'
39312     option for strict conformance to some version of ISO C.  On some
39313     hosts, system include files use a different convention, where
39314     `__STDC__' is normally 0, but is 1 if the user specifies strict
39315     conformance to the C Standard.  GCC follows the host convention
39316     when processing system include files, but when processing user
39317     files it follows the usual GNU C convention.
39318
39319   * Undefining `__STDC__' in C++.
39320
39321     Programs written to compile with C++-to-C translators get the
39322     value of `__STDC__' that goes with the C compiler that is
39323     subsequently used.  These programs must test `__STDC__' to
39324     determine what kind of C preprocessor that compiler uses: whether
39325     they should concatenate tokens in the ISO C fashion or in the
39326     traditional fashion.
39327
39328     These programs work properly with GNU C++ if `__STDC__' is defined.
39329     They would not work otherwise.
39330
39331     In addition, many header files are written to provide prototypes
39332     in ISO C but not in traditional C.  Many of these header files can
39333     work without change in C++ provided `__STDC__' is defined.  If
39334     `__STDC__' is not defined, they will all fail, and will all need
39335     to be changed to test explicitly for C++ as well.
39336
39337   * Deleting "empty" loops.
39338
39339     Historically, GCC has not deleted "empty" loops under the
39340     assumption that the most likely reason you would put one in a
39341     program is to have a delay, so deleting them will not make real
39342     programs run any faster.
39343
39344     However, the rationale here is that optimization of a nonempty loop
39345     cannot produce an empty one. This held for carefully written C
39346     compiled with less powerful optimizers but is not always the case
39347     for carefully written C++ or with more powerful optimizers.  Thus
39348     GCC will remove operations from loops whenever it can determine
39349     those operations are not externally visible (apart from the time
39350     taken to execute them, of course).  In case the loop can be proved
39351     to be finite, GCC will also remove the loop itself.
39352
39353     Be aware of this when performing timing tests, for instance the
39354     following loop can be completely removed, provided
39355     `some_expression' can provably not change any global state.
39356
39357          {
39358             int sum = 0;
39359             int ix;
39360
39361             for (ix = 0; ix != 10000; ix++)
39362                sum += some_expression;
39363          }
39364
39365     Even though `sum' is accumulated in the loop, no use is made of
39366     that summation, so the accumulation can be removed.
39367
39368   * Making side effects happen in the same order as in some other
39369     compiler.
39370
39371     It is never safe to depend on the order of evaluation of side
39372     effects.  For example, a function call like this may very well
39373     behave differently from one compiler to another:
39374
39375          void func (int, int);
39376
39377          int i = 2;
39378          func (i++, i++);
39379
39380     There is no guarantee (in either the C or the C++ standard language
39381     definitions) that the increments will be evaluated in any
39382     particular order.  Either increment might happen first.  `func'
39383     might get the arguments `2, 3', or it might get `3, 2', or even
39384     `2, 2'.
39385
39386   * Making certain warnings into errors by default.
39387
39388     Some ISO C testsuites report failure when the compiler does not
39389     produce an error message for a certain program.
39390
39391     ISO C requires a "diagnostic" message for certain kinds of invalid
39392     programs, but a warning is defined by GCC to count as a
39393     diagnostic.  If GCC produces a warning but not an error, that is
39394     correct ISO C support.  If testsuites call this "failure", they
39395     should be run with the GCC option `-pedantic-errors', which will
39396     turn these warnings into errors.
39397
39398
39399
39400File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
39401
3940211.10 Warning Messages and Error Messages
39403=========================================
39404
39405The GNU compiler can produce two kinds of diagnostics: errors and
39406warnings.  Each kind has a different purpose:
39407
39408     "Errors" report problems that make it impossible to compile your
39409     program.  GCC reports errors with the source file name and line
39410     number where the problem is apparent.
39411
39412     "Warnings" report other unusual conditions in your code that _may_
39413     indicate a problem, although compilation can (and does) proceed.
39414     Warning messages also report the source file name and line number,
39415     but include the text `warning:' to distinguish them from error
39416     messages.
39417
39418 Warnings may indicate danger points where you should check to make sure
39419that your program really does what you intend; or the use of obsolete
39420features; or the use of nonstandard features of GNU C or C++.  Many
39421warnings are issued only if you ask for them, with one of the `-W'
39422options (for instance, `-Wall' requests a variety of useful warnings).
39423
39424 GCC always tries to compile your program if possible; it never
39425gratuitously rejects a program whose meaning is clear merely because
39426(for instance) it fails to conform to a standard.  In some cases,
39427however, the C and C++ standards specify that certain extensions are
39428forbidden, and a diagnostic _must_ be issued by a conforming compiler.
39429The `-pedantic' option tells GCC to issue warnings in such cases;
39430`-pedantic-errors' says to make them errors instead.  This does not
39431mean that _all_ non-ISO constructs get warnings or errors.
39432
39433 *Note Options to Request or Suppress Warnings: Warning Options, for
39434more detail on these and related command-line options.
39435
39436
39437File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
39438
3943912 Reporting Bugs
39440*****************
39441
39442Your bug reports play an essential role in making GCC reliable.
39443
39444 When you encounter a problem, the first thing to do is to see if it is
39445already known.  *Note Trouble::.  If it isn't known, then you should
39446report the problem.
39447
39448* Menu:
39449
39450* Criteria:  Bug Criteria.   Have you really found a bug?
39451* Reporting: Bug Reporting.  How to report a bug effectively.
39452* Known: Trouble.            Known problems.
39453* Help: Service.             Where to ask for help.
39454
39455
39456File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
39457
3945812.1 Have You Found a Bug?
39459==========================
39460
39461If you are not sure whether you have found a bug, here are some
39462guidelines:
39463
39464   * If the compiler gets a fatal signal, for any input whatever, that
39465     is a compiler bug.  Reliable compilers never crash.
39466
39467   * If the compiler produces invalid assembly code, for any input
39468     whatever (except an `asm' statement), that is a compiler bug,
39469     unless the compiler reports errors (not just warnings) which would
39470     ordinarily prevent the assembler from being run.
39471
39472   * If the compiler produces valid assembly code that does not
39473     correctly execute the input source code, that is a compiler bug.
39474
39475     However, you must double-check to make sure, because you may have a
39476     program whose behavior is undefined, which happened by chance to
39477     give the desired results with another C or C++ compiler.
39478
39479     For example, in many nonoptimizing compilers, you can write `x;'
39480     at the end of a function instead of `return x;', with the same
39481     results.  But the value of the function is undefined if `return'
39482     is omitted; it is not a bug when GCC produces different results.
39483
39484     Problems often result from expressions with two increment
39485     operators, as in `f (*p++, *p++)'.  Your previous compiler might
39486     have interpreted that expression the way you intended; GCC might
39487     interpret it another way.  Neither compiler is wrong.  The bug is
39488     in your code.
39489
39490     After you have localized the error to a single source line, it
39491     should be easy to check for these things.  If your program is
39492     correct and well defined, you have found a compiler bug.
39493
39494   * If the compiler produces an error message for valid input, that is
39495     a compiler bug.
39496
39497   * If the compiler does not produce an error message for invalid
39498     input, that is a compiler bug.  However, you should note that your
39499     idea of "invalid input" might be someone else's idea of "an
39500     extension" or "support for traditional practice".
39501
39502   * If you are an experienced user of one of the languages GCC
39503     supports, your suggestions for improvement of GCC are welcome in
39504     any case.
39505
39506
39507File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
39508
3950912.2 How and where to Report Bugs
39510=================================
39511
39512Bugs should be reported to the bug database at
39513`http://gcc.gnu.org/bugs.html'.
39514
39515
39516File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
39517
3951813 How To Get Help with GCC
39519***************************
39520
39521If you need help installing, using or changing GCC, there are two ways
39522to find it:
39523
39524   * Send a message to a suitable network mailing list.  First try
39525     <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
39526     that brings no response, try <gcc@gcc.gnu.org>.  For help changing
39527     GCC, ask <gcc@gcc.gnu.org>.  If you think you have found a bug in
39528     GCC, please report it following the instructions at *note Bug
39529     Reporting::.
39530
39531   * Look in the service directory for someone who might help you for a
39532     fee.  The service directory is found at
39533     `http://www.fsf.org/resources/service'.
39534
39535 For further information, see `http://gcc.gnu.org/faq.html#support'.
39536
39537
39538File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
39539
3954014 Contributing to GCC Development
39541**********************************
39542
39543If you would like to help pretest GCC releases to assure they work well,
39544current development sources are available by SVN (see
39545`http://gcc.gnu.org/svn.html').  Source and binary snapshots are also
39546available for FTP; see `http://gcc.gnu.org/snapshots.html'.
39547
39548 If you would like to work on improvements to GCC, please read the
39549advice at these URLs:
39550
39551     `http://gcc.gnu.org/contribute.html'
39552     `http://gcc.gnu.org/contributewhy.html'
39553
39554for information on how to make useful contributions and avoid
39555duplication of effort.  Suggested projects are listed at
39556`http://gcc.gnu.org/projects/'.
39557
39558
39559File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
39560
39561Funding Free Software
39562*********************
39563
39564If you want to have more free software a few years from now, it makes
39565sense for you to help encourage people to contribute funds for its
39566development.  The most effective approach known is to encourage
39567commercial redistributors to donate.
39568
39569 Users of free software systems can boost the pace of development by
39570encouraging for-a-fee distributors to donate part of their selling price
39571to free software developers--the Free Software Foundation, and others.
39572
39573 The way to convince distributors to do this is to demand it and expect
39574it from them.  So when you compare distributors, judge them partly by
39575how much they give to free software development.  Show distributors
39576they must compete to be the one who gives the most.
39577
39578 To make this approach work, you must insist on numbers that you can
39579compare, such as, "We will donate ten dollars to the Frobnitz project
39580for each disk sold."  Don't be satisfied with a vague promise, such as
39581"A portion of the profits are donated," since it doesn't give a basis
39582for comparison.
39583
39584 Even a precise fraction "of the profits from this disk" is not very
39585meaningful, since creative accounting and unrelated business decisions
39586can greatly alter what fraction of the sales price counts as profit.
39587If the price you pay is $50, ten percent of the profit is probably less
39588than a dollar; it might be a few cents, or nothing at all.
39589
39590 Some redistributors do development work themselves.  This is useful
39591too; but to keep everyone honest, you need to inquire how much they do,
39592and what kind.  Some kinds of development make much more long-term
39593difference than others.  For example, maintaining a separate version of
39594a program contributes very little; maintaining the standard version of a
39595program for the whole community contributes much.  Easy new ports
39596contribute little, since someone else would surely do them; difficult
39597ports such as adding a new CPU to the GNU Compiler Collection
39598contribute more; major new features or packages contribute the most.
39599
39600 By establishing the idea that supporting further development is "the
39601proper thing to do" when distributing free software for a fee, we can
39602assure a steady flow of resources into making more free software.
39603
39604     Copyright (C) 1994 Free Software Foundation, Inc.
39605     Verbatim copying and redistribution of this section is permitted
39606     without royalty; alteration is not permitted.
39607
39608
39609File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
39610
39611The GNU Project and GNU/Linux
39612*****************************
39613
39614The GNU Project was launched in 1984 to develop a complete Unix-like
39615operating system which is free software: the GNU system.  (GNU is a
39616recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
39617Variants of the GNU operating system, which use the kernel Linux, are
39618now widely used; though these systems are often referred to as "Linux",
39619they are more accurately called GNU/Linux systems.
39620
39621 For more information, see:
39622     `http://www.gnu.org/'
39623     `http://www.gnu.org/gnu/linux-and-gnu.html'
39624
39625
39626File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
39627
39628GNU General Public License
39629**************************
39630
39631                        Version 3, 29 June 2007
39632
39633     Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
39634
39635     Everyone is permitted to copy and distribute verbatim copies of this
39636     license document, but changing it is not allowed.
39637
39638Preamble
39639========
39640
39641The GNU General Public License is a free, copyleft license for software
39642and other kinds of works.
39643
39644 The licenses for most software and other practical works are designed
39645to take away your freedom to share and change the works.  By contrast,
39646the GNU General Public License is intended to guarantee your freedom to
39647share and change all versions of a program-to make sure it remains free
39648software for all its users.  We, the Free Software Foundation, use the
39649GNU General Public License for most of our software; it applies also to
39650any other work released this way by its authors.  You can apply it to
39651your programs, too.
39652
39653 When we speak of free software, we are referring to freedom, not
39654price.  Our General Public Licenses are designed to make sure that you
39655have the freedom to distribute copies of free software (and charge for
39656them if you wish), that you receive source code or can get it if you
39657want it, that you can change the software or use pieces of it in new
39658free programs, and that you know you can do these things.
39659
39660 To protect your rights, we need to prevent others from denying you
39661these rights or asking you to surrender the rights.  Therefore, you
39662have certain responsibilities if you distribute copies of the software,
39663or if you modify it: responsibilities to respect the freedom of others.
39664
39665 For example, if you distribute copies of such a program, whether
39666gratis or for a fee, you must pass on to the recipients the same
39667freedoms that you received.  You must make sure that they, too, receive
39668or can get the source code.  And you must show them these terms so they
39669know their rights.
39670
39671 Developers that use the GNU GPL protect your rights with two steps:
39672(1) assert copyright on the software, and (2) offer you this License
39673giving you legal permission to copy, distribute and/or modify it.
39674
39675 For the developers' and authors' protection, the GPL clearly explains
39676that there is no warranty for this free software.  For both users' and
39677authors' sake, the GPL requires that modified versions be marked as
39678changed, so that their problems will not be attributed erroneously to
39679authors of previous versions.
39680
39681 Some devices are designed to deny users access to install or run
39682modified versions of the software inside them, although the
39683manufacturer can do so.  This is fundamentally incompatible with the
39684aim of protecting users' freedom to change the software.  The
39685systematic pattern of such abuse occurs in the area of products for
39686individuals to use, which is precisely where it is most unacceptable.
39687Therefore, we have designed this version of the GPL to prohibit the
39688practice for those products.  If such problems arise substantially in
39689other domains, we stand ready to extend this provision to those domains
39690in future versions of the GPL, as needed to protect the freedom of
39691users.
39692
39693 Finally, every program is threatened constantly by software patents.
39694States should not allow patents to restrict development and use of
39695software on general-purpose computers, but in those that do, we wish to
39696avoid the special danger that patents applied to a free program could
39697make it effectively proprietary.  To prevent this, the GPL assures that
39698patents cannot be used to render the program non-free.
39699
39700 The precise terms and conditions for copying, distribution and
39701modification follow.
39702
39703TERMS AND CONDITIONS
39704====================
39705
39706  0. Definitions.
39707
39708     "This License" refers to version 3 of the GNU General Public
39709     License.
39710
39711     "Copyright" also means copyright-like laws that apply to other
39712     kinds of works, such as semiconductor masks.
39713
39714     "The Program" refers to any copyrightable work licensed under this
39715     License.  Each licensee is addressed as "you".  "Licensees" and
39716     "recipients" may be individuals or organizations.
39717
39718     To "modify" a work means to copy from or adapt all or part of the
39719     work in a fashion requiring copyright permission, other than the
39720     making of an exact copy.  The resulting work is called a "modified
39721     version" of the earlier work or a work "based on" the earlier work.
39722
39723     A "covered work" means either the unmodified Program or a work
39724     based on the Program.
39725
39726     To "propagate" a work means to do anything with it that, without
39727     permission, would make you directly or secondarily liable for
39728     infringement under applicable copyright law, except executing it
39729     on a computer or modifying a private copy.  Propagation includes
39730     copying, distribution (with or without modification), making
39731     available to the public, and in some countries other activities as
39732     well.
39733
39734     To "convey" a work means any kind of propagation that enables other
39735     parties to make or receive copies.  Mere interaction with a user
39736     through a computer network, with no transfer of a copy, is not
39737     conveying.
39738
39739     An interactive user interface displays "Appropriate Legal Notices"
39740     to the extent that it includes a convenient and prominently visible
39741     feature that (1) displays an appropriate copyright notice, and (2)
39742     tells the user that there is no warranty for the work (except to
39743     the extent that warranties are provided), that licensees may
39744     convey the work under this License, and how to view a copy of this
39745     License.  If the interface presents a list of user commands or
39746     options, such as a menu, a prominent item in the list meets this
39747     criterion.
39748
39749  1. Source Code.
39750
39751     The "source code" for a work means the preferred form of the work
39752     for making modifications to it.  "Object code" means any
39753     non-source form of a work.
39754
39755     A "Standard Interface" means an interface that either is an
39756     official standard defined by a recognized standards body, or, in
39757     the case of interfaces specified for a particular programming
39758     language, one that is widely used among developers working in that
39759     language.
39760
39761     The "System Libraries" of an executable work include anything,
39762     other than the work as a whole, that (a) is included in the normal
39763     form of packaging a Major Component, but which is not part of that
39764     Major Component, and (b) serves only to enable use of the work
39765     with that Major Component, or to implement a Standard Interface
39766     for which an implementation is available to the public in source
39767     code form.  A "Major Component", in this context, means a major
39768     essential component (kernel, window system, and so on) of the
39769     specific operating system (if any) on which the executable work
39770     runs, or a compiler used to produce the work, or an object code
39771     interpreter used to run it.
39772
39773     The "Corresponding Source" for a work in object code form means all
39774     the source code needed to generate, install, and (for an executable
39775     work) run the object code and to modify the work, including
39776     scripts to control those activities.  However, it does not include
39777     the work's System Libraries, or general-purpose tools or generally
39778     available free programs which are used unmodified in performing
39779     those activities but which are not part of the work.  For example,
39780     Corresponding Source includes interface definition files
39781     associated with source files for the work, and the source code for
39782     shared libraries and dynamically linked subprograms that the work
39783     is specifically designed to require, such as by intimate data
39784     communication or control flow between those subprograms and other
39785     parts of the work.
39786
39787     The Corresponding Source need not include anything that users can
39788     regenerate automatically from other parts of the Corresponding
39789     Source.
39790
39791     The Corresponding Source for a work in source code form is that
39792     same work.
39793
39794  2. Basic Permissions.
39795
39796     All rights granted under this License are granted for the term of
39797     copyright on the Program, and are irrevocable provided the stated
39798     conditions are met.  This License explicitly affirms your unlimited
39799     permission to run the unmodified Program.  The output from running
39800     a covered work is covered by this License only if the output,
39801     given its content, constitutes a covered work.  This License
39802     acknowledges your rights of fair use or other equivalent, as
39803     provided by copyright law.
39804
39805     You may make, run and propagate covered works that you do not
39806     convey, without conditions so long as your license otherwise
39807     remains in force.  You may convey covered works to others for the
39808     sole purpose of having them make modifications exclusively for
39809     you, or provide you with facilities for running those works,
39810     provided that you comply with the terms of this License in
39811     conveying all material for which you do not control copyright.
39812     Those thus making or running the covered works for you must do so
39813     exclusively on your behalf, under your direction and control, on
39814     terms that prohibit them from making any copies of your
39815     copyrighted material outside their relationship with you.
39816
39817     Conveying under any other circumstances is permitted solely under
39818     the conditions stated below.  Sublicensing is not allowed; section
39819     10 makes it unnecessary.
39820
39821  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
39822
39823     No covered work shall be deemed part of an effective technological
39824     measure under any applicable law fulfilling obligations under
39825     article 11 of the WIPO copyright treaty adopted on 20 December
39826     1996, or similar laws prohibiting or restricting circumvention of
39827     such measures.
39828
39829     When you convey a covered work, you waive any legal power to forbid
39830     circumvention of technological measures to the extent such
39831     circumvention is effected by exercising rights under this License
39832     with respect to the covered work, and you disclaim any intention
39833     to limit operation or modification of the work as a means of
39834     enforcing, against the work's users, your or third parties' legal
39835     rights to forbid circumvention of technological measures.
39836
39837  4. Conveying Verbatim Copies.
39838
39839     You may convey verbatim copies of the Program's source code as you
39840     receive it, in any medium, provided that you conspicuously and
39841     appropriately publish on each copy an appropriate copyright notice;
39842     keep intact all notices stating that this License and any
39843     non-permissive terms added in accord with section 7 apply to the
39844     code; keep intact all notices of the absence of any warranty; and
39845     give all recipients a copy of this License along with the Program.
39846
39847     You may charge any price or no price for each copy that you convey,
39848     and you may offer support or warranty protection for a fee.
39849
39850  5. Conveying Modified Source Versions.
39851
39852     You may convey a work based on the Program, or the modifications to
39853     produce it from the Program, in the form of source code under the
39854     terms of section 4, provided that you also meet all of these
39855     conditions:
39856
39857       a. The work must carry prominent notices stating that you
39858          modified it, and giving a relevant date.
39859
39860       b. The work must carry prominent notices stating that it is
39861          released under this License and any conditions added under
39862          section 7.  This requirement modifies the requirement in
39863          section 4 to "keep intact all notices".
39864
39865       c. You must license the entire work, as a whole, under this
39866          License to anyone who comes into possession of a copy.  This
39867          License will therefore apply, along with any applicable
39868          section 7 additional terms, to the whole of the work, and all
39869          its parts, regardless of how they are packaged.  This License
39870          gives no permission to license the work in any other way, but
39871          it does not invalidate such permission if you have separately
39872          received it.
39873
39874       d. If the work has interactive user interfaces, each must display
39875          Appropriate Legal Notices; however, if the Program has
39876          interactive interfaces that do not display Appropriate Legal
39877          Notices, your work need not make them do so.
39878
39879     A compilation of a covered work with other separate and independent
39880     works, which are not by their nature extensions of the covered
39881     work, and which are not combined with it such as to form a larger
39882     program, in or on a volume of a storage or distribution medium, is
39883     called an "aggregate" if the compilation and its resulting
39884     copyright are not used to limit the access or legal rights of the
39885     compilation's users beyond what the individual works permit.
39886     Inclusion of a covered work in an aggregate does not cause this
39887     License to apply to the other parts of the aggregate.
39888
39889  6. Conveying Non-Source Forms.
39890
39891     You may convey a covered work in object code form under the terms
39892     of sections 4 and 5, provided that you also convey the
39893     machine-readable Corresponding Source under the terms of this
39894     License, in one of these ways:
39895
39896       a. Convey the object code in, or embodied in, a physical product
39897          (including a physical distribution medium), accompanied by the
39898          Corresponding Source fixed on a durable physical medium
39899          customarily used for software interchange.
39900
39901       b. Convey the object code in, or embodied in, a physical product
39902          (including a physical distribution medium), accompanied by a
39903          written offer, valid for at least three years and valid for
39904          as long as you offer spare parts or customer support for that
39905          product model, to give anyone who possesses the object code
39906          either (1) a copy of the Corresponding Source for all the
39907          software in the product that is covered by this License, on a
39908          durable physical medium customarily used for software
39909          interchange, for a price no more than your reasonable cost of
39910          physically performing this conveying of source, or (2) access
39911          to copy the Corresponding Source from a network server at no
39912          charge.
39913
39914       c. Convey individual copies of the object code with a copy of
39915          the written offer to provide the Corresponding Source.  This
39916          alternative is allowed only occasionally and noncommercially,
39917          and only if you received the object code with such an offer,
39918          in accord with subsection 6b.
39919
39920       d. Convey the object code by offering access from a designated
39921          place (gratis or for a charge), and offer equivalent access
39922          to the Corresponding Source in the same way through the same
39923          place at no further charge.  You need not require recipients
39924          to copy the Corresponding Source along with the object code.
39925          If the place to copy the object code is a network server, the
39926          Corresponding Source may be on a different server (operated
39927          by you or a third party) that supports equivalent copying
39928          facilities, provided you maintain clear directions next to
39929          the object code saying where to find the Corresponding Source.
39930          Regardless of what server hosts the Corresponding Source, you
39931          remain obligated to ensure that it is available for as long
39932          as needed to satisfy these requirements.
39933
39934       e. Convey the object code using peer-to-peer transmission,
39935          provided you inform other peers where the object code and
39936          Corresponding Source of the work are being offered to the
39937          general public at no charge under subsection 6d.
39938
39939
39940     A separable portion of the object code, whose source code is
39941     excluded from the Corresponding Source as a System Library, need
39942     not be included in conveying the object code work.
39943
39944     A "User Product" is either (1) a "consumer product", which means
39945     any tangible personal property which is normally used for personal,
39946     family, or household purposes, or (2) anything designed or sold for
39947     incorporation into a dwelling.  In determining whether a product
39948     is a consumer product, doubtful cases shall be resolved in favor of
39949     coverage.  For a particular product received by a particular user,
39950     "normally used" refers to a typical or common use of that class of
39951     product, regardless of the status of the particular user or of the
39952     way in which the particular user actually uses, or expects or is
39953     expected to use, the product.  A product is a consumer product
39954     regardless of whether the product has substantial commercial,
39955     industrial or non-consumer uses, unless such uses represent the
39956     only significant mode of use of the product.
39957
39958     "Installation Information" for a User Product means any methods,
39959     procedures, authorization keys, or other information required to
39960     install and execute modified versions of a covered work in that
39961     User Product from a modified version of its Corresponding Source.
39962     The information must suffice to ensure that the continued
39963     functioning of the modified object code is in no case prevented or
39964     interfered with solely because modification has been made.
39965
39966     If you convey an object code work under this section in, or with,
39967     or specifically for use in, a User Product, and the conveying
39968     occurs as part of a transaction in which the right of possession
39969     and use of the User Product is transferred to the recipient in
39970     perpetuity or for a fixed term (regardless of how the transaction
39971     is characterized), the Corresponding Source conveyed under this
39972     section must be accompanied by the Installation Information.  But
39973     this requirement does not apply if neither you nor any third party
39974     retains the ability to install modified object code on the User
39975     Product (for example, the work has been installed in ROM).
39976
39977     The requirement to provide Installation Information does not
39978     include a requirement to continue to provide support service,
39979     warranty, or updates for a work that has been modified or
39980     installed by the recipient, or for the User Product in which it
39981     has been modified or installed.  Access to a network may be denied
39982     when the modification itself materially and adversely affects the
39983     operation of the network or violates the rules and protocols for
39984     communication across the network.
39985
39986     Corresponding Source conveyed, and Installation Information
39987     provided, in accord with this section must be in a format that is
39988     publicly documented (and with an implementation available to the
39989     public in source code form), and must require no special password
39990     or key for unpacking, reading or copying.
39991
39992  7. Additional Terms.
39993
39994     "Additional permissions" are terms that supplement the terms of
39995     this License by making exceptions from one or more of its
39996     conditions.  Additional permissions that are applicable to the
39997     entire Program shall be treated as though they were included in
39998     this License, to the extent that they are valid under applicable
39999     law.  If additional permissions apply only to part of the Program,
40000     that part may be used separately under those permissions, but the
40001     entire Program remains governed by this License without regard to
40002     the additional permissions.
40003
40004     When you convey a copy of a covered work, you may at your option
40005     remove any additional permissions from that copy, or from any part
40006     of it.  (Additional permissions may be written to require their own
40007     removal in certain cases when you modify the work.)  You may place
40008     additional permissions on material, added by you to a covered work,
40009     for which you have or can give appropriate copyright permission.
40010
40011     Notwithstanding any other provision of this License, for material
40012     you add to a covered work, you may (if authorized by the copyright
40013     holders of that material) supplement the terms of this License
40014     with terms:
40015
40016       a. Disclaiming warranty or limiting liability differently from
40017          the terms of sections 15 and 16 of this License; or
40018
40019       b. Requiring preservation of specified reasonable legal notices
40020          or author attributions in that material or in the Appropriate
40021          Legal Notices displayed by works containing it; or
40022
40023       c. Prohibiting misrepresentation of the origin of that material,
40024          or requiring that modified versions of such material be
40025          marked in reasonable ways as different from the original
40026          version; or
40027
40028       d. Limiting the use for publicity purposes of names of licensors
40029          or authors of the material; or
40030
40031       e. Declining to grant rights under trademark law for use of some
40032          trade names, trademarks, or service marks; or
40033
40034       f. Requiring indemnification of licensors and authors of that
40035          material by anyone who conveys the material (or modified
40036          versions of it) with contractual assumptions of liability to
40037          the recipient, for any liability that these contractual
40038          assumptions directly impose on those licensors and authors.
40039
40040     All other non-permissive additional terms are considered "further
40041     restrictions" within the meaning of section 10.  If the Program as
40042     you received it, or any part of it, contains a notice stating that
40043     it is governed by this License along with a term that is a further
40044     restriction, you may remove that term.  If a license document
40045     contains a further restriction but permits relicensing or
40046     conveying under this License, you may add to a covered work
40047     material governed by the terms of that license document, provided
40048     that the further restriction does not survive such relicensing or
40049     conveying.
40050
40051     If you add terms to a covered work in accord with this section, you
40052     must place, in the relevant source files, a statement of the
40053     additional terms that apply to those files, or a notice indicating
40054     where to find the applicable terms.
40055
40056     Additional terms, permissive or non-permissive, may be stated in
40057     the form of a separately written license, or stated as exceptions;
40058     the above requirements apply either way.
40059
40060  8. Termination.
40061
40062     You may not propagate or modify a covered work except as expressly
40063     provided under this License.  Any attempt otherwise to propagate or
40064     modify it is void, and will automatically terminate your rights
40065     under this License (including any patent licenses granted under
40066     the third paragraph of section 11).
40067
40068     However, if you cease all violation of this License, then your
40069     license from a particular copyright holder is reinstated (a)
40070     provisionally, unless and until the copyright holder explicitly
40071     and finally terminates your license, and (b) permanently, if the
40072     copyright holder fails to notify you of the violation by some
40073     reasonable means prior to 60 days after the cessation.
40074
40075     Moreover, your license from a particular copyright holder is
40076     reinstated permanently if the copyright holder notifies you of the
40077     violation by some reasonable means, this is the first time you have
40078     received notice of violation of this License (for any work) from
40079     that copyright holder, and you cure the violation prior to 30 days
40080     after your receipt of the notice.
40081
40082     Termination of your rights under this section does not terminate
40083     the licenses of parties who have received copies or rights from
40084     you under this License.  If your rights have been terminated and
40085     not permanently reinstated, you do not qualify to receive new
40086     licenses for the same material under section 10.
40087
40088  9. Acceptance Not Required for Having Copies.
40089
40090     You are not required to accept this License in order to receive or
40091     run a copy of the Program.  Ancillary propagation of a covered work
40092     occurring solely as a consequence of using peer-to-peer
40093     transmission to receive a copy likewise does not require
40094     acceptance.  However, nothing other than this License grants you
40095     permission to propagate or modify any covered work.  These actions
40096     infringe copyright if you do not accept this License.  Therefore,
40097     by modifying or propagating a covered work, you indicate your
40098     acceptance of this License to do so.
40099
40100 10. Automatic Licensing of Downstream Recipients.
40101
40102     Each time you convey a covered work, the recipient automatically
40103     receives a license from the original licensors, to run, modify and
40104     propagate that work, subject to this License.  You are not
40105     responsible for enforcing compliance by third parties with this
40106     License.
40107
40108     An "entity transaction" is a transaction transferring control of an
40109     organization, or substantially all assets of one, or subdividing an
40110     organization, or merging organizations.  If propagation of a
40111     covered work results from an entity transaction, each party to that
40112     transaction who receives a copy of the work also receives whatever
40113     licenses to the work the party's predecessor in interest had or
40114     could give under the previous paragraph, plus a right to
40115     possession of the Corresponding Source of the work from the
40116     predecessor in interest, if the predecessor has it or can get it
40117     with reasonable efforts.
40118
40119     You may not impose any further restrictions on the exercise of the
40120     rights granted or affirmed under this License.  For example, you
40121     may not impose a license fee, royalty, or other charge for
40122     exercise of rights granted under this License, and you may not
40123     initiate litigation (including a cross-claim or counterclaim in a
40124     lawsuit) alleging that any patent claim is infringed by making,
40125     using, selling, offering for sale, or importing the Program or any
40126     portion of it.
40127
40128 11. Patents.
40129
40130     A "contributor" is a copyright holder who authorizes use under this
40131     License of the Program or a work on which the Program is based.
40132     The work thus licensed is called the contributor's "contributor
40133     version".
40134
40135     A contributor's "essential patent claims" are all patent claims
40136     owned or controlled by the contributor, whether already acquired or
40137     hereafter acquired, that would be infringed by some manner,
40138     permitted by this License, of making, using, or selling its
40139     contributor version, but do not include claims that would be
40140     infringed only as a consequence of further modification of the
40141     contributor version.  For purposes of this definition, "control"
40142     includes the right to grant patent sublicenses in a manner
40143     consistent with the requirements of this License.
40144
40145     Each contributor grants you a non-exclusive, worldwide,
40146     royalty-free patent license under the contributor's essential
40147     patent claims, to make, use, sell, offer for sale, import and
40148     otherwise run, modify and propagate the contents of its
40149     contributor version.
40150
40151     In the following three paragraphs, a "patent license" is any
40152     express agreement or commitment, however denominated, not to
40153     enforce a patent (such as an express permission to practice a
40154     patent or covenant not to sue for patent infringement).  To
40155     "grant" such a patent license to a party means to make such an
40156     agreement or commitment not to enforce a patent against the party.
40157
40158     If you convey a covered work, knowingly relying on a patent
40159     license, and the Corresponding Source of the work is not available
40160     for anyone to copy, free of charge and under the terms of this
40161     License, through a publicly available network server or other
40162     readily accessible means, then you must either (1) cause the
40163     Corresponding Source to be so available, or (2) arrange to deprive
40164     yourself of the benefit of the patent license for this particular
40165     work, or (3) arrange, in a manner consistent with the requirements
40166     of this License, to extend the patent license to downstream
40167     recipients.  "Knowingly relying" means you have actual knowledge
40168     that, but for the patent license, your conveying the covered work
40169     in a country, or your recipient's use of the covered work in a
40170     country, would infringe one or more identifiable patents in that
40171     country that you have reason to believe are valid.
40172
40173     If, pursuant to or in connection with a single transaction or
40174     arrangement, you convey, or propagate by procuring conveyance of, a
40175     covered work, and grant a patent license to some of the parties
40176     receiving the covered work authorizing them to use, propagate,
40177     modify or convey a specific copy of the covered work, then the
40178     patent license you grant is automatically extended to all
40179     recipients of the covered work and works based on it.
40180
40181     A patent license is "discriminatory" if it does not include within
40182     the scope of its coverage, prohibits the exercise of, or is
40183     conditioned on the non-exercise of one or more of the rights that
40184     are specifically granted under this License.  You may not convey a
40185     covered work if you are a party to an arrangement with a third
40186     party that is in the business of distributing software, under
40187     which you make payment to the third party based on the extent of
40188     your activity of conveying the work, and under which the third
40189     party grants, to any of the parties who would receive the covered
40190     work from you, a discriminatory patent license (a) in connection
40191     with copies of the covered work conveyed by you (or copies made
40192     from those copies), or (b) primarily for and in connection with
40193     specific products or compilations that contain the covered work,
40194     unless you entered into that arrangement, or that patent license
40195     was granted, prior to 28 March 2007.
40196
40197     Nothing in this License shall be construed as excluding or limiting
40198     any implied license or other defenses to infringement that may
40199     otherwise be available to you under applicable patent law.
40200
40201 12. No Surrender of Others' Freedom.
40202
40203     If conditions are imposed on you (whether by court order,
40204     agreement or otherwise) that contradict the conditions of this
40205     License, they do not excuse you from the conditions of this
40206     License.  If you cannot convey a covered work so as to satisfy
40207     simultaneously your obligations under this License and any other
40208     pertinent obligations, then as a consequence you may not convey it
40209     at all.  For example, if you agree to terms that obligate you to
40210     collect a royalty for further conveying from those to whom you
40211     convey the Program, the only way you could satisfy both those
40212     terms and this License would be to refrain entirely from conveying
40213     the Program.
40214
40215 13. Use with the GNU Affero General Public License.
40216
40217     Notwithstanding any other provision of this License, you have
40218     permission to link or combine any covered work with a work licensed
40219     under version 3 of the GNU Affero General Public License into a
40220     single combined work, and to convey the resulting work.  The terms
40221     of this License will continue to apply to the part which is the
40222     covered work, but the special requirements of the GNU Affero
40223     General Public License, section 13, concerning interaction through
40224     a network will apply to the combination as such.
40225
40226 14. Revised Versions of this License.
40227
40228     The Free Software Foundation may publish revised and/or new
40229     versions of the GNU General Public License from time to time.
40230     Such new versions will be similar in spirit to the present
40231     version, but may differ in detail to address new problems or
40232     concerns.
40233
40234     Each version is given a distinguishing version number.  If the
40235     Program specifies that a certain numbered version of the GNU
40236     General Public License "or any later version" applies to it, you
40237     have the option of following the terms and conditions either of
40238     that numbered version or of any later version published by the
40239     Free Software Foundation.  If the Program does not specify a
40240     version number of the GNU General Public License, you may choose
40241     any version ever published by the Free Software Foundation.
40242
40243     If the Program specifies that a proxy can decide which future
40244     versions of the GNU General Public License can be used, that
40245     proxy's public statement of acceptance of a version permanently
40246     authorizes you to choose that version for the Program.
40247
40248     Later license versions may give you additional or different
40249     permissions.  However, no additional obligations are imposed on any
40250     author or copyright holder as a result of your choosing to follow a
40251     later version.
40252
40253 15. Disclaimer of Warranty.
40254
40255     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
40256     APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
40257     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
40258     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
40259     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
40260     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE
40261     RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
40262     SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
40263     NECESSARY SERVICING, REPAIR OR CORRECTION.
40264
40265 16. Limitation of Liability.
40266
40267     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
40268     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
40269     AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
40270     FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
40271     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
40272     THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
40273     BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
40274     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
40275     PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
40276     THE POSSIBILITY OF SUCH DAMAGES.
40277
40278 17. Interpretation of Sections 15 and 16.
40279
40280     If the disclaimer of warranty and limitation of liability provided
40281     above cannot be given local legal effect according to their terms,
40282     reviewing courts shall apply local law that most closely
40283     approximates an absolute waiver of all civil liability in
40284     connection with the Program, unless a warranty or assumption of
40285     liability accompanies a copy of the Program in return for a fee.
40286
40287
40288END OF TERMS AND CONDITIONS
40289===========================
40290
40291How to Apply These Terms to Your New Programs
40292=============================================
40293
40294If you develop a new program, and you want it to be of the greatest
40295possible use to the public, the best way to achieve this is to make it
40296free software which everyone can redistribute and change under these
40297terms.
40298
40299 To do so, attach the following notices to the program.  It is safest
40300to attach them to the start of each source file to most effectively
40301state the exclusion of warranty; and each file should have at least the
40302"copyright" line and a pointer to where the full notice is found.
40303
40304     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
40305     Copyright (C) YEAR NAME OF AUTHOR
40306
40307     This program is free software: you can redistribute it and/or modify
40308     it under the terms of the GNU General Public License as published by
40309     the Free Software Foundation, either version 3 of the License, or (at
40310     your option) any later version.
40311
40312     This program is distributed in the hope that it will be useful, but
40313     WITHOUT ANY WARRANTY; without even the implied warranty of
40314     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
40315     General Public License for more details.
40316
40317     You should have received a copy of the GNU General Public License
40318     along with this program.  If not, see `http://www.gnu.org/licenses/'.
40319
40320 Also add information on how to contact you by electronic and paper
40321mail.
40322
40323 If the program does terminal interaction, make it output a short
40324notice like this when it starts in an interactive mode:
40325
40326     PROGRAM Copyright (C) YEAR NAME OF AUTHOR
40327     This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
40328     This is free software, and you are welcome to redistribute it
40329     under certain conditions; type `show c' for details.
40330
40331 The hypothetical commands `show w' and `show c' should show the
40332appropriate parts of the General Public License.  Of course, your
40333program's commands might be different; for a GUI interface, you would
40334use an "about box".
40335
40336 You should also get your employer (if you work as a programmer) or
40337school, if any, to sign a "copyright disclaimer" for the program, if
40338necessary.  For more information on this, and how to apply and follow
40339the GNU GPL, see `http://www.gnu.org/licenses/'.
40340
40341 The GNU General Public License does not permit incorporating your
40342program into proprietary programs.  If your program is a subroutine
40343library, you may consider it more useful to permit linking proprietary
40344applications with the library.  If this is what you want to do, use the
40345GNU Lesser General Public License instead of this License.  But first,
40346please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.
40347
40348
40349File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
40350
40351GNU Free Documentation License
40352******************************
40353
40354                      Version 1.2, November 2002
40355
40356     Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
40357     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
40358
40359     Everyone is permitted to copy and distribute verbatim copies
40360     of this license document, but changing it is not allowed.
40361
40362  0. PREAMBLE
40363
40364     The purpose of this License is to make a manual, textbook, or other
40365     functional and useful document "free" in the sense of freedom: to
40366     assure everyone the effective freedom to copy and redistribute it,
40367     with or without modifying it, either commercially or
40368     noncommercially.  Secondarily, this License preserves for the
40369     author and publisher a way to get credit for their work, while not
40370     being considered responsible for modifications made by others.
40371
40372     This License is a kind of "copyleft", which means that derivative
40373     works of the document must themselves be free in the same sense.
40374     It complements the GNU General Public License, which is a copyleft
40375     license designed for free software.
40376
40377     We have designed this License in order to use it for manuals for
40378     free software, because free software needs free documentation: a
40379     free program should come with manuals providing the same freedoms
40380     that the software does.  But this License is not limited to
40381     software manuals; it can be used for any textual work, regardless
40382     of subject matter or whether it is published as a printed book.
40383     We recommend this License principally for works whose purpose is
40384     instruction or reference.
40385
40386  1. APPLICABILITY AND DEFINITIONS
40387
40388     This License applies to any manual or other work, in any medium,
40389     that contains a notice placed by the copyright holder saying it
40390     can be distributed under the terms of this License.  Such a notice
40391     grants a world-wide, royalty-free license, unlimited in duration,
40392     to use that work under the conditions stated herein.  The
40393     "Document", below, refers to any such manual or work.  Any member
40394     of the public is a licensee, and is addressed as "you".  You
40395     accept the license if you copy, modify or distribute the work in a
40396     way requiring permission under copyright law.
40397
40398     A "Modified Version" of the Document means any work containing the
40399     Document or a portion of it, either copied verbatim, or with
40400     modifications and/or translated into another language.
40401
40402     A "Secondary Section" is a named appendix or a front-matter section
40403     of the Document that deals exclusively with the relationship of the
40404     publishers or authors of the Document to the Document's overall
40405     subject (or to related matters) and contains nothing that could
40406     fall directly within that overall subject.  (Thus, if the Document
40407     is in part a textbook of mathematics, a Secondary Section may not
40408     explain any mathematics.)  The relationship could be a matter of
40409     historical connection with the subject or with related matters, or
40410     of legal, commercial, philosophical, ethical or political position
40411     regarding them.
40412
40413     The "Invariant Sections" are certain Secondary Sections whose
40414     titles are designated, as being those of Invariant Sections, in
40415     the notice that says that the Document is released under this
40416     License.  If a section does not fit the above definition of
40417     Secondary then it is not allowed to be designated as Invariant.
40418     The Document may contain zero Invariant Sections.  If the Document
40419     does not identify any Invariant Sections then there are none.
40420
40421     The "Cover Texts" are certain short passages of text that are
40422     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
40423     that says that the Document is released under this License.  A
40424     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
40425     be at most 25 words.
40426
40427     A "Transparent" copy of the Document means a machine-readable copy,
40428     represented in a format whose specification is available to the
40429     general public, that is suitable for revising the document
40430     straightforwardly with generic text editors or (for images
40431     composed of pixels) generic paint programs or (for drawings) some
40432     widely available drawing editor, and that is suitable for input to
40433     text formatters or for automatic translation to a variety of
40434     formats suitable for input to text formatters.  A copy made in an
40435     otherwise Transparent file format whose markup, or absence of
40436     markup, has been arranged to thwart or discourage subsequent
40437     modification by readers is not Transparent.  An image format is
40438     not Transparent if used for any substantial amount of text.  A
40439     copy that is not "Transparent" is called "Opaque".
40440
40441     Examples of suitable formats for Transparent copies include plain
40442     ASCII without markup, Texinfo input format, LaTeX input format,
40443     SGML or XML using a publicly available DTD, and
40444     standard-conforming simple HTML, PostScript or PDF designed for
40445     human modification.  Examples of transparent image formats include
40446     PNG, XCF and JPG.  Opaque formats include proprietary formats that
40447     can be read and edited only by proprietary word processors, SGML or
40448     XML for which the DTD and/or processing tools are not generally
40449     available, and the machine-generated HTML, PostScript or PDF
40450     produced by some word processors for output purposes only.
40451
40452     The "Title Page" means, for a printed book, the title page itself,
40453     plus such following pages as are needed to hold, legibly, the
40454     material this License requires to appear in the title page.  For
40455     works in formats which do not have any title page as such, "Title
40456     Page" means the text near the most prominent appearance of the
40457     work's title, preceding the beginning of the body of the text.
40458
40459     A section "Entitled XYZ" means a named subunit of the Document
40460     whose title either is precisely XYZ or contains XYZ in parentheses
40461     following text that translates XYZ in another language.  (Here XYZ
40462     stands for a specific section name mentioned below, such as
40463     "Acknowledgements", "Dedications", "Endorsements", or "History".)
40464     To "Preserve the Title" of such a section when you modify the
40465     Document means that it remains a section "Entitled XYZ" according
40466     to this definition.
40467
40468     The Document may include Warranty Disclaimers next to the notice
40469     which states that this License applies to the Document.  These
40470     Warranty Disclaimers are considered to be included by reference in
40471     this License, but only as regards disclaiming warranties: any other
40472     implication that these Warranty Disclaimers may have is void and
40473     has no effect on the meaning of this License.
40474
40475  2. VERBATIM COPYING
40476
40477     You may copy and distribute the Document in any medium, either
40478     commercially or noncommercially, provided that this License, the
40479     copyright notices, and the license notice saying this License
40480     applies to the Document are reproduced in all copies, and that you
40481     add no other conditions whatsoever to those of this License.  You
40482     may not use technical measures to obstruct or control the reading
40483     or further copying of the copies you make or distribute.  However,
40484     you may accept compensation in exchange for copies.  If you
40485     distribute a large enough number of copies you must also follow
40486     the conditions in section 3.
40487
40488     You may also lend copies, under the same conditions stated above,
40489     and you may publicly display copies.
40490
40491  3. COPYING IN QUANTITY
40492
40493     If you publish printed copies (or copies in media that commonly
40494     have printed covers) of the Document, numbering more than 100, and
40495     the Document's license notice requires Cover Texts, you must
40496     enclose the copies in covers that carry, clearly and legibly, all
40497     these Cover Texts: Front-Cover Texts on the front cover, and
40498     Back-Cover Texts on the back cover.  Both covers must also clearly
40499     and legibly identify you as the publisher of these copies.  The
40500     front cover must present the full title with all words of the
40501     title equally prominent and visible.  You may add other material
40502     on the covers in addition.  Copying with changes limited to the
40503     covers, as long as they preserve the title of the Document and
40504     satisfy these conditions, can be treated as verbatim copying in
40505     other respects.
40506
40507     If the required texts for either cover are too voluminous to fit
40508     legibly, you should put the first ones listed (as many as fit
40509     reasonably) on the actual cover, and continue the rest onto
40510     adjacent pages.
40511
40512     If you publish or distribute Opaque copies of the Document
40513     numbering more than 100, you must either include a
40514     machine-readable Transparent copy along with each Opaque copy, or
40515     state in or with each Opaque copy a computer-network location from
40516     which the general network-using public has access to download
40517     using public-standard network protocols a complete Transparent
40518     copy of the Document, free of added material.  If you use the
40519     latter option, you must take reasonably prudent steps, when you
40520     begin distribution of Opaque copies in quantity, to ensure that
40521     this Transparent copy will remain thus accessible at the stated
40522     location until at least one year after the last time you
40523     distribute an Opaque copy (directly or through your agents or
40524     retailers) of that edition to the public.
40525
40526     It is requested, but not required, that you contact the authors of
40527     the Document well before redistributing any large number of
40528     copies, to give them a chance to provide you with an updated
40529     version of the Document.
40530
40531  4. MODIFICATIONS
40532
40533     You may copy and distribute a Modified Version of the Document
40534     under the conditions of sections 2 and 3 above, provided that you
40535     release the Modified Version under precisely this License, with
40536     the Modified Version filling the role of the Document, thus
40537     licensing distribution and modification of the Modified Version to
40538     whoever possesses a copy of it.  In addition, you must do these
40539     things in the Modified Version:
40540
40541       A. Use in the Title Page (and on the covers, if any) a title
40542          distinct from that of the Document, and from those of
40543          previous versions (which should, if there were any, be listed
40544          in the History section of the Document).  You may use the
40545          same title as a previous version if the original publisher of
40546          that version gives permission.
40547
40548       B. List on the Title Page, as authors, one or more persons or
40549          entities responsible for authorship of the modifications in
40550          the Modified Version, together with at least five of the
40551          principal authors of the Document (all of its principal
40552          authors, if it has fewer than five), unless they release you
40553          from this requirement.
40554
40555       C. State on the Title page the name of the publisher of the
40556          Modified Version, as the publisher.
40557
40558       D. Preserve all the copyright notices of the Document.
40559
40560       E. Add an appropriate copyright notice for your modifications
40561          adjacent to the other copyright notices.
40562
40563       F. Include, immediately after the copyright notices, a license
40564          notice giving the public permission to use the Modified
40565          Version under the terms of this License, in the form shown in
40566          the Addendum below.
40567
40568       G. Preserve in that license notice the full lists of Invariant
40569          Sections and required Cover Texts given in the Document's
40570          license notice.
40571
40572       H. Include an unaltered copy of this License.
40573
40574       I. Preserve the section Entitled "History", Preserve its Title,
40575          and add to it an item stating at least the title, year, new
40576          authors, and publisher of the Modified Version as given on
40577          the Title Page.  If there is no section Entitled "History" in
40578          the Document, create one stating the title, year, authors,
40579          and publisher of the Document as given on its Title Page,
40580          then add an item describing the Modified Version as stated in
40581          the previous sentence.
40582
40583       J. Preserve the network location, if any, given in the Document
40584          for public access to a Transparent copy of the Document, and
40585          likewise the network locations given in the Document for
40586          previous versions it was based on.  These may be placed in
40587          the "History" section.  You may omit a network location for a
40588          work that was published at least four years before the
40589          Document itself, or if the original publisher of the version
40590          it refers to gives permission.
40591
40592       K. For any section Entitled "Acknowledgements" or "Dedications",
40593          Preserve the Title of the section, and preserve in the
40594          section all the substance and tone of each of the contributor
40595          acknowledgements and/or dedications given therein.
40596
40597       L. Preserve all the Invariant Sections of the Document,
40598          unaltered in their text and in their titles.  Section numbers
40599          or the equivalent are not considered part of the section
40600          titles.
40601
40602       M. Delete any section Entitled "Endorsements".  Such a section
40603          may not be included in the Modified Version.
40604
40605       N. Do not retitle any existing section to be Entitled
40606          "Endorsements" or to conflict in title with any Invariant
40607          Section.
40608
40609       O. Preserve any Warranty Disclaimers.
40610
40611     If the Modified Version includes new front-matter sections or
40612     appendices that qualify as Secondary Sections and contain no
40613     material copied from the Document, you may at your option
40614     designate some or all of these sections as invariant.  To do this,
40615     add their titles to the list of Invariant Sections in the Modified
40616     Version's license notice.  These titles must be distinct from any
40617     other section titles.
40618
40619     You may add a section Entitled "Endorsements", provided it contains
40620     nothing but endorsements of your Modified Version by various
40621     parties--for example, statements of peer review or that the text
40622     has been approved by an organization as the authoritative
40623     definition of a standard.
40624
40625     You may add a passage of up to five words as a Front-Cover Text,
40626     and a passage of up to 25 words as a Back-Cover Text, to the end
40627     of the list of Cover Texts in the Modified Version.  Only one
40628     passage of Front-Cover Text and one of Back-Cover Text may be
40629     added by (or through arrangements made by) any one entity.  If the
40630     Document already includes a cover text for the same cover,
40631     previously added by you or by arrangement made by the same entity
40632     you are acting on behalf of, you may not add another; but you may
40633     replace the old one, on explicit permission from the previous
40634     publisher that added the old one.
40635
40636     The author(s) and publisher(s) of the Document do not by this
40637     License give permission to use their names for publicity for or to
40638     assert or imply endorsement of any Modified Version.
40639
40640  5. COMBINING DOCUMENTS
40641
40642     You may combine the Document with other documents released under
40643     this License, under the terms defined in section 4 above for
40644     modified versions, provided that you include in the combination
40645     all of the Invariant Sections of all of the original documents,
40646     unmodified, and list them all as Invariant Sections of your
40647     combined work in its license notice, and that you preserve all
40648     their Warranty Disclaimers.
40649
40650     The combined work need only contain one copy of this License, and
40651     multiple identical Invariant Sections may be replaced with a single
40652     copy.  If there are multiple Invariant Sections with the same name
40653     but different contents, make the title of each such section unique
40654     by adding at the end of it, in parentheses, the name of the
40655     original author or publisher of that section if known, or else a
40656     unique number.  Make the same adjustment to the section titles in
40657     the list of Invariant Sections in the license notice of the
40658     combined work.
40659
40660     In the combination, you must combine any sections Entitled
40661     "History" in the various original documents, forming one section
40662     Entitled "History"; likewise combine any sections Entitled
40663     "Acknowledgements", and any sections Entitled "Dedications".  You
40664     must delete all sections Entitled "Endorsements."
40665
40666  6. COLLECTIONS OF DOCUMENTS
40667
40668     You may make a collection consisting of the Document and other
40669     documents released under this License, and replace the individual
40670     copies of this License in the various documents with a single copy
40671     that is included in the collection, provided that you follow the
40672     rules of this License for verbatim copying of each of the
40673     documents in all other respects.
40674
40675     You may extract a single document from such a collection, and
40676     distribute it individually under this License, provided you insert
40677     a copy of this License into the extracted document, and follow
40678     this License in all other respects regarding verbatim copying of
40679     that document.
40680
40681  7. AGGREGATION WITH INDEPENDENT WORKS
40682
40683     A compilation of the Document or its derivatives with other
40684     separate and independent documents or works, in or on a volume of
40685     a storage or distribution medium, is called an "aggregate" if the
40686     copyright resulting from the compilation is not used to limit the
40687     legal rights of the compilation's users beyond what the individual
40688     works permit.  When the Document is included in an aggregate, this
40689     License does not apply to the other works in the aggregate which
40690     are not themselves derivative works of the Document.
40691
40692     If the Cover Text requirement of section 3 is applicable to these
40693     copies of the Document, then if the Document is less than one half
40694     of the entire aggregate, the Document's Cover Texts may be placed
40695     on covers that bracket the Document within the aggregate, or the
40696     electronic equivalent of covers if the Document is in electronic
40697     form.  Otherwise they must appear on printed covers that bracket
40698     the whole aggregate.
40699
40700  8. TRANSLATION
40701
40702     Translation is considered a kind of modification, so you may
40703     distribute translations of the Document under the terms of section
40704     4.  Replacing Invariant Sections with translations requires special
40705     permission from their copyright holders, but you may include
40706     translations of some or all Invariant Sections in addition to the
40707     original versions of these Invariant Sections.  You may include a
40708     translation of this License, and all the license notices in the
40709     Document, and any Warranty Disclaimers, provided that you also
40710     include the original English version of this License and the
40711     original versions of those notices and disclaimers.  In case of a
40712     disagreement between the translation and the original version of
40713     this License or a notice or disclaimer, the original version will
40714     prevail.
40715
40716     If a section in the Document is Entitled "Acknowledgements",
40717     "Dedications", or "History", the requirement (section 4) to
40718     Preserve its Title (section 1) will typically require changing the
40719     actual title.
40720
40721  9. TERMINATION
40722
40723     You may not copy, modify, sublicense, or distribute the Document
40724     except as expressly provided for under this License.  Any other
40725     attempt to copy, modify, sublicense or distribute the Document is
40726     void, and will automatically terminate your rights under this
40727     License.  However, parties who have received copies, or rights,
40728     from you under this License will not have their licenses
40729     terminated so long as such parties remain in full compliance.
40730
40731 10. FUTURE REVISIONS OF THIS LICENSE
40732
40733     The Free Software Foundation may publish new, revised versions of
40734     the GNU Free Documentation License from time to time.  Such new
40735     versions will be similar in spirit to the present version, but may
40736     differ in detail to address new problems or concerns.  See
40737     `http://www.gnu.org/copyleft/'.
40738
40739     Each version of the License is given a distinguishing version
40740     number.  If the Document specifies that a particular numbered
40741     version of this License "or any later version" applies to it, you
40742     have the option of following the terms and conditions either of
40743     that specified version or of any later version that has been
40744     published (not as a draft) by the Free Software Foundation.  If
40745     the Document does not specify a version number of this License,
40746     you may choose any version ever published (not as a draft) by the
40747     Free Software Foundation.
40748
40749ADDENDUM: How to use this License for your documents
40750====================================================
40751
40752To use this License in a document you have written, include a copy of
40753the License in the document and put the following copyright and license
40754notices just after the title page:
40755
40756       Copyright (C)  YEAR  YOUR NAME.
40757       Permission is granted to copy, distribute and/or modify this document
40758       under the terms of the GNU Free Documentation License, Version 1.2
40759       or any later version published by the Free Software Foundation;
40760       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
40761       Texts.  A copy of the license is included in the section entitled ``GNU
40762       Free Documentation License''.
40763
40764 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
40765replace the "with...Texts." line with this:
40766
40767         with the Invariant Sections being LIST THEIR TITLES, with
40768         the Front-Cover Texts being LIST, and with the Back-Cover Texts
40769         being LIST.
40770
40771 If you have Invariant Sections without Cover Texts, or some other
40772combination of the three, merge those two alternatives to suit the
40773situation.
40774
40775 If your document contains nontrivial examples of program code, we
40776recommend releasing these examples in parallel under your choice of
40777free software license, such as the GNU General Public License, to
40778permit their use in free software.
40779
40780
40781File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
40782
40783Contributors to GCC
40784*******************
40785
40786The GCC project would like to thank its many contributors.  Without
40787them the project would not have been nearly as successful as it has
40788been.  Any omissions in this list are accidental.  Feel free to contact
40789<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
40790some of your contributions are not listed.  Please keep this list in
40791alphabetical order.
40792
40793   * Analog Devices helped implement the support for complex data types
40794     and iterators.
40795
40796   * John David Anglin for threading-related fixes and improvements to
40797     libstdc++-v3, and the HP-UX port.
40798
40799   * James van Artsdalen wrote the code that makes efficient use of the
40800     Intel 80387 register stack.
40801
40802   * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
40803     Series port.
40804
40805   * Alasdair Baird for various bug fixes.
40806
40807   * Giovanni Bajo for analyzing lots of complicated C++ problem
40808     reports.
40809
40810   * Peter Barada for his work to improve code generation for new
40811     ColdFire cores.
40812
40813   * Gerald Baumgartner added the signature extension to the C++ front
40814     end.
40815
40816   * Godmar Back for his Java improvements and encouragement.
40817
40818   * Scott Bambrough for help porting the Java compiler.
40819
40820   * Wolfgang Bangerth for processing tons of bug reports.
40821
40822   * Jon Beniston for his Microsoft Windows port of Java and port to
40823     Lattice Mico32.
40824
40825   * Daniel Berlin for better DWARF2 support, faster/better
40826     optimizations, improved alias analysis, plus migrating GCC to
40827     Bugzilla.
40828
40829   * Geoff Berry for his Java object serialization work and various
40830     patches.
40831
40832   * Uros Bizjak for the implementation of x87 math built-in functions
40833     and for various middle end and i386 back end improvements and bug
40834     fixes.
40835
40836   * Eric Blake for helping to make GCJ and libgcj conform to the
40837     specifications.
40838
40839   * Janne Blomqvist for contributions to GNU Fortran.
40840
40841   * Segher Boessenkool for various fixes.
40842
40843   * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
40844     other Java work.
40845
40846   * Neil Booth for work on cpplib, lang hooks, debug hooks and other
40847     miscellaneous clean-ups.
40848
40849   * Steven Bosscher for integrating the GNU Fortran front end into GCC
40850     and for contributing to the tree-ssa branch.
40851
40852   * Eric Botcazou for fixing middle- and backend bugs left and right.
40853
40854   * Per Bothner for his direction via the steering committee and
40855     various improvements to the infrastructure for supporting new
40856     languages.  Chill front end implementation.  Initial
40857     implementations of cpplib, fix-header, config.guess, libio, and
40858     past C++ library (libg++) maintainer.  Dreaming up, designing and
40859     implementing much of GCJ.
40860
40861   * Devon Bowen helped port GCC to the Tahoe.
40862
40863   * Don Bowman for mips-vxworks contributions.
40864
40865   * Dave Brolley for work on cpplib and Chill.
40866
40867   * Paul Brook for work on the ARM architecture and maintaining GNU
40868     Fortran.
40869
40870   * Robert Brown implemented the support for Encore 32000 systems.
40871
40872   * Christian Bruel for improvements to local store elimination.
40873
40874   * Herman A.J. ten Brugge for various fixes.
40875
40876   * Joerg Brunsmann for Java compiler hacking and help with the GCJ
40877     FAQ.
40878
40879   * Joe Buck for his direction via the steering committee.
40880
40881   * Craig Burley for leadership of the G77 Fortran effort.
40882
40883   * Stephan Buys for contributing Doxygen notes for libstdc++.
40884
40885   * Paolo Carlini for libstdc++ work: lots of efficiency improvements
40886     to the C++ strings, streambufs and formatted I/O, hard detective
40887     work on the frustrating localization issues, and keeping up with
40888     the problem reports.
40889
40890   * John Carr for his alias work, SPARC hacking, infrastructure
40891     improvements, previous contributions to the steering committee,
40892     loop optimizations, etc.
40893
40894   * Stephane Carrez for 68HC11 and 68HC12 ports.
40895
40896   * Steve Chamberlain for support for the Renesas SH and H8 processors
40897     and the PicoJava processor, and for GCJ config fixes.
40898
40899   * Glenn Chambers for help with the GCJ FAQ.
40900
40901   * John-Marc Chandonia for various libgcj patches.
40902
40903   * Denis Chertykov for contributing and maintaining the AVR port, the
40904     first GCC port for an 8-bit architecture.
40905
40906   * Scott Christley for his Objective-C contributions.
40907
40908   * Eric Christopher for his Java porting help and clean-ups.
40909
40910   * Branko Cibej for more warning contributions.
40911
40912   * The GNU Classpath project for all of their merged runtime code.
40913
40914   * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, `--help',
40915     and other random hacking.
40916
40917   * Michael Cook for libstdc++ cleanup patches to reduce warnings.
40918
40919   * R. Kelley Cook for making GCC buildable from a read-only directory
40920     as well as other miscellaneous build process and documentation
40921     clean-ups.
40922
40923   * Ralf Corsepius for SH testing and minor bug fixing.
40924
40925   * Stan Cox for care and feeding of the x86 port and lots of behind
40926     the scenes hacking.
40927
40928   * Alex Crain provided changes for the 3b1.
40929
40930   * Ian Dall for major improvements to the NS32k port.
40931
40932   * Paul Dale for his work to add uClinux platform support to the m68k
40933     backend.
40934
40935   * Dario Dariol contributed the four varieties of sample programs
40936     that print a copy of their source.
40937
40938   * Russell Davidson for fstream and stringstream fixes in libstdc++.
40939
40940   * Bud Davis for work on the G77 and GNU Fortran compilers.
40941
40942   * Mo DeJong for GCJ and libgcj bug fixes.
40943
40944   * DJ Delorie for the DJGPP port, build and libiberty maintenance,
40945     various bug fixes, and the M32C and MeP ports.
40946
40947   * Arnaud Desitter for helping to debug GNU Fortran.
40948
40949   * Gabriel Dos Reis for contributions to G++, contributions and
40950     maintenance of GCC diagnostics infrastructure, libstdc++-v3,
40951     including `valarray<>', `complex<>', maintaining the numerics
40952     library (including that pesky `<limits>' :-) and keeping
40953     up-to-date anything to do with numbers.
40954
40955   * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
40956     ISO C99 support, CFG dumping support, etc., plus support of the
40957     C++ runtime libraries including for all kinds of C interface
40958     issues, contributing and maintaining `complex<>', sanity checking
40959     and disbursement, configuration architecture, libio maintenance,
40960     and early math work.
40961
40962   * Zdenek Dvorak for a new loop unroller and various fixes.
40963
40964   * Richard Earnshaw for his ongoing work with the ARM.
40965
40966   * David Edelsohn for his direction via the steering committee,
40967     ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
40968     loop changes, doing the entire AIX port of libstdc++ with his bare
40969     hands, and for ensuring GCC properly keeps working on AIX.
40970
40971   * Kevin Ediger for the floating point formatting of num_put::do_put
40972     in libstdc++.
40973
40974   * Phil Edwards for libstdc++ work including configuration hackery,
40975     documentation maintainer, chief breaker of the web pages, the
40976     occasional iostream bug fix, and work on shared library symbol
40977     versioning.
40978
40979   * Paul Eggert for random hacking all over GCC.
40980
40981   * Mark Elbrecht for various DJGPP improvements, and for libstdc++
40982     configuration support for locales and fstream-related fixes.
40983
40984   * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
40985     iostreams.
40986
40987   * Christian Ehrhardt for dealing with bug reports.
40988
40989   * Ben Elliston for his work to move the Objective-C runtime into its
40990     own subdirectory and for his work on autoconf.
40991
40992   * Revital Eres for work on the PowerPC 750CL port.
40993
40994   * Marc Espie for OpenBSD support.
40995
40996   * Doug Evans for much of the global optimization framework, arc,
40997     m32r, and SPARC work.
40998
40999   * Christopher Faylor for his work on the Cygwin port and for caring
41000     and feeding the gcc.gnu.org box and saving its users tons of spam.
41001
41002   * Fred Fish for BeOS support and Ada fixes.
41003
41004   * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
41005
41006   * Peter Gerwinski for various bug fixes and the Pascal front end.
41007
41008   * Kaveh R. Ghazi for his direction via the steering committee,
41009     amazing work to make `-W -Wall -W* -Werror' useful, and
41010     continuously testing GCC on a plethora of platforms.  Kaveh
41011     extends his gratitude to the CAIP Center at Rutgers University for
41012     providing him with computing resources to work on Free Software
41013     since the late 1980s.
41014
41015   * John Gilmore for a donation to the FSF earmarked improving GNU
41016     Java.
41017
41018   * Judy Goldberg for c++ contributions.
41019
41020   * Torbjorn Granlund for various fixes and the c-torture testsuite,
41021     multiply- and divide-by-constant optimization, improved long long
41022     support, improved leaf function register allocation, and his
41023     direction via the steering committee.
41024
41025   * Anthony Green for his `-Os' contributions, the moxie port, and
41026     Java front end work.
41027
41028   * Stu Grossman for gdb hacking, allowing GCJ developers to debug
41029     Java code.
41030
41031   * Michael K. Gschwind contributed the port to the PDP-11.
41032
41033   * Richard Guenther for his ongoing middle-end contributions and bug
41034     fixes and for release management.
41035
41036   * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
41037     the support for Dwarf symbolic debugging information, and much of
41038     the support for System V Release 4.  He has also worked heavily on
41039     the Intel 386 and 860 support.
41040
41041   * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
41042     GCSE.
41043
41044   * Bruno Haible for improvements in the runtime overhead for EH, new
41045     warnings and assorted bug fixes.
41046
41047   * Andrew Haley for his amazing Java compiler and library efforts.
41048
41049   * Chris Hanson assisted in making GCC work on HP-UX for the 9000
41050     series 300.
41051
41052   * Michael Hayes for various thankless work he's done trying to get
41053     the c30/c40 ports functional.  Lots of loop and unroll
41054     improvements and fixes.
41055
41056   * Dara Hazeghi for wading through myriads of target-specific bug
41057     reports.
41058
41059   * Kate Hedstrom for staking the G77 folks with an initial testsuite.
41060
41061   * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
41062     work, loop opts, and generally fixing lots of old problems we've
41063     ignored for years, flow rewrite and lots of further stuff,
41064     including reviewing tons of patches.
41065
41066   * Aldy Hernandez for working on the PowerPC port, SIMD support, and
41067     various fixes.
41068
41069   * Nobuyuki Hikichi of Software Research Associates, Tokyo,
41070     contributed the support for the Sony NEWS machine.
41071
41072   * Kazu Hirata for caring and feeding the Renesas H8/300 port and
41073     various fixes.
41074
41075   * Katherine Holcomb for work on GNU Fortran.
41076
41077   * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
41078     of testing and bug fixing, particularly of GCC configury code.
41079
41080   * Steve Holmgren for MachTen patches.
41081
41082   * Jan Hubicka for his x86 port improvements.
41083
41084   * Falk Hueffner for working on C and optimization bug reports.
41085
41086   * Bernardo Innocenti for his m68k work, including merging of
41087     ColdFire improvements and uClinux support.
41088
41089   * Christian Iseli for various bug fixes.
41090
41091   * Kamil Iskra for general m68k hacking.
41092
41093   * Lee Iverson for random fixes and MIPS testing.
41094
41095   * Andreas Jaeger for testing and benchmarking of GCC and various bug
41096     fixes.
41097
41098   * Jakub Jelinek for his SPARC work and sibling call optimizations as
41099     well as lots of bug fixes and test cases, and for improving the
41100     Java build system.
41101
41102   * Janis Johnson for ia64 testing and fixes, her quality improvement
41103     sidetracks, and web page maintenance.
41104
41105   * Kean Johnston for SCO OpenServer support and various fixes.
41106
41107   * Tim Josling for the sample language treelang based originally on
41108     Richard Kenner's "toy" language.
41109
41110   * Nicolai Josuttis for additional libstdc++ documentation.
41111
41112   * Klaus Kaempf for his ongoing work to make alpha-vms a viable
41113     target.
41114
41115   * Steven G. Kargl for work on GNU Fortran.
41116
41117   * David Kashtan of SRI adapted GCC to VMS.
41118
41119   * Ryszard Kabatek for many, many libstdc++ bug fixes and
41120     optimizations of strings, especially member functions, and for
41121     auto_ptr fixes.
41122
41123   * Geoffrey Keating for his ongoing work to make the PPC work for
41124     GNU/Linux and his automatic regression tester.
41125
41126   * Brendan Kehoe for his ongoing work with G++ and for a lot of early
41127     work in just about every part of libstdc++.
41128
41129   * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
41130     MIL-STD-1750A.
41131
41132   * Richard Kenner of the New York University Ultracomputer Research
41133     Laboratory wrote the machine descriptions for the AMD 29000, the
41134     DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
41135     support for instruction attributes.  He also made changes to
41136     better support RISC processors including changes to common
41137     subexpression elimination, strength reduction, function calling
41138     sequence handling, and condition code support, in addition to
41139     generalizing the code for frame pointer elimination and delay slot
41140     scheduling.  Richard Kenner was also the head maintainer of GCC
41141     for several years.
41142
41143   * Mumit Khan for various contributions to the Cygwin and Mingw32
41144     ports and maintaining binary releases for Microsoft Windows hosts,
41145     and for massive libstdc++ porting work to Cygwin/Mingw32.
41146
41147   * Robin Kirkham for cpu32 support.
41148
41149   * Mark Klein for PA improvements.
41150
41151   * Thomas Koenig for various bug fixes.
41152
41153   * Bruce Korb for the new and improved fixincludes code.
41154
41155   * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
41156     effort.
41157
41158   * Charles LaBrec contributed the support for the Integrated Solutions
41159     68020 system.
41160
41161   * Asher Langton and Mike Kumbera for contributing Cray pointer
41162     support to GNU Fortran, and for other GNU Fortran improvements.
41163
41164   * Jeff Law for his direction via the steering committee,
41165     coordinating the entire egcs project and GCC 2.95, rolling out
41166     snapshots and releases, handling merges from GCC2, reviewing tons
41167     of patches that might have fallen through the cracks else, and
41168     random but extensive hacking.
41169
41170   * Marc Lehmann for his direction via the steering committee and
41171     helping with analysis and improvements of x86 performance.
41172
41173   * Victor Leikehman for work on GNU Fortran.
41174
41175   * Ted Lemon wrote parts of the RTL reader and printer.
41176
41177   * Kriang Lerdsuwanakij for C++ improvements including template as
41178     template parameter support, and many C++ fixes.
41179
41180   * Warren Levy for tremendous work on libgcj (Java Runtime Library)
41181     and random work on the Java front end.
41182
41183   * Alain Lichnewsky ported GCC to the MIPS CPU.
41184
41185   * Oskar Liljeblad for hacking on AWT and his many Java bug reports
41186     and patches.
41187
41188   * Robert Lipe for OpenServer support, new testsuites, testing, etc.
41189
41190   * Chen Liqin for various S+core related fixes/improvement, and for
41191     maintaining the S+core port.
41192
41193   * Weiwen Liu for testing and various bug fixes.
41194
41195   * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other
41196     diagnostics fixes and improvements.
41197
41198   * Dave Love for his ongoing work with the Fortran front end and
41199     runtime libraries.
41200
41201   * Martin von Lo"wis for internal consistency checking infrastructure,
41202     various C++ improvements including namespace support, and tons of
41203     assistance with libstdc++/compiler merges.
41204
41205   * H.J. Lu for his previous contributions to the steering committee,
41206     many x86 bug reports, prototype patches, and keeping the GNU/Linux
41207     ports working.
41208
41209   * Greg McGary for random fixes and (someday) bounded pointers.
41210
41211   * Andrew MacLeod for his ongoing work in building a real EH system,
41212     various code generation improvements, work on the global
41213     optimizer, etc.
41214
41215   * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
41216     hacking improvements to compile-time performance, overall
41217     knowledge and direction in the area of instruction scheduling, and
41218     design and implementation of the automaton based instruction
41219     scheduler.
41220
41221   * Bob Manson for his behind the scenes work on dejagnu.
41222
41223   * Philip Martin for lots of libstdc++ string and vector iterator
41224     fixes and improvements, and string clean up and testsuites.
41225
41226   * All of the Mauve project contributors, for Java test code.
41227
41228   * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
41229
41230   * Adam Megacz for his work on the Microsoft Windows port of GCJ.
41231
41232   * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
41233     powerpc, haifa, ECOFF debug support, and other assorted hacking.
41234
41235   * Jason Merrill for his direction via the steering committee and
41236     leading the G++ effort.
41237
41238   * Martin Michlmayr for testing GCC on several architectures using the
41239     entire Debian archive.
41240
41241   * David Miller for his direction via the steering committee, lots of
41242     SPARC work, improvements in jump.c and interfacing with the Linux
41243     kernel developers.
41244
41245   * Gary Miller ported GCC to Charles River Data Systems machines.
41246
41247   * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
41248     the entire libstdc++ testsuite namespace-compatible.
41249
41250   * Mark Mitchell for his direction via the steering committee,
41251     mountains of C++ work, load/store hoisting out of loops, alias
41252     analysis improvements, ISO C `restrict' support, and serving as
41253     release manager for GCC 3.x.
41254
41255   * Alan Modra for various GNU/Linux bits and testing.
41256
41257   * Toon Moene for his direction via the steering committee, Fortran
41258     maintenance, and his ongoing work to make us make Fortran run fast.
41259
41260   * Jason Molenda for major help in the care and feeding of all the
41261     services on the gcc.gnu.org (formerly egcs.cygnus.com)
41262     machine--mail, web services, ftp services, etc etc.  Doing all
41263     this work on scrap paper and the backs of envelopes would have
41264     been... difficult.
41265
41266   * Catherine Moore for fixing various ugly problems we have sent her
41267     way, including the haifa bug which was killing the Alpha & PowerPC
41268     Linux kernels.
41269
41270   * Mike Moreton for his various Java patches.
41271
41272   * David Mosberger-Tang for various Alpha improvements, and for the
41273     initial IA-64 port.
41274
41275   * Stephen Moshier contributed the floating point emulator that
41276     assists in cross-compilation and permits support for floating
41277     point numbers wider than 64 bits and for ISO C99 support.
41278
41279   * Bill Moyer for his behind the scenes work on various issues.
41280
41281   * Philippe De Muyter for his work on the m68k port.
41282
41283   * Joseph S. Myers for his work on the PDP-11 port, format checking
41284     and ISO C99 support, and continuous emphasis on (and contributions
41285     to) documentation.
41286
41287   * Nathan Myers for his work on libstdc++-v3: architecture and
41288     authorship through the first three snapshots, including
41289     implementation of locale infrastructure, string, shadow C headers,
41290     and the initial project documentation (DESIGN, CHECKLIST, and so
41291     forth).  Later, more work on MT-safe string and shadow headers.
41292
41293   * Felix Natter for documentation on porting libstdc++.
41294
41295   * Nathanael Nerode for cleaning up the configuration/build process.
41296
41297   * NeXT, Inc. donated the front end that supports the Objective-C
41298     language.
41299
41300   * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
41301     the search engine setup, various documentation fixes and other
41302     small fixes.
41303
41304   * Geoff Noer for his work on getting cygwin native builds working.
41305
41306   * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
41307     tracking web pages, GIMPLE tuples, and assorted fixes.
41308
41309   * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
41310     FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
41311     related infrastructure improvements.
41312
41313   * Alexandre Oliva for various build infrastructure improvements,
41314     scripts and amazing testing work, including keeping libtool issues
41315     sane and happy.
41316
41317   * Stefan Olsson for work on mt_alloc.
41318
41319   * Melissa O'Neill for various NeXT fixes.
41320
41321   * Rainer Orth for random MIPS work, including improvements to GCC's
41322     o32 ABI support, improvements to dejagnu's MIPS support, Java
41323     configuration clean-ups and porting work, and maintaining the
41324     IRIX, Solaris 2, and Tru64 UNIX ports.
41325
41326   * Hartmut Penner for work on the s390 port.
41327
41328   * Paul Petersen wrote the machine description for the Alliant FX/8.
41329
41330   * Alexandre Petit-Bianco for implementing much of the Java compiler
41331     and continued Java maintainership.
41332
41333   * Matthias Pfaller for major improvements to the NS32k port.
41334
41335   * Gerald Pfeifer for his direction via the steering committee,
41336     pointing out lots of problems we need to solve, maintenance of the
41337     web pages, and taking care of documentation maintenance in general.
41338
41339   * Andrew Pinski for processing bug reports by the dozen.
41340
41341   * Ovidiu Predescu for his work on the Objective-C front end and
41342     runtime libraries.
41343
41344   * Jerry Quinn for major performance improvements in C++ formatted
41345     I/O.
41346
41347   * Ken Raeburn for various improvements to checker, MIPS ports and
41348     various cleanups in the compiler.
41349
41350   * Rolf W. Rasmussen for hacking on AWT.
41351
41352   * David Reese of Sun Microsystems contributed to the Solaris on
41353     PowerPC port.
41354
41355   * Volker Reichelt for keeping up with the problem reports.
41356
41357   * Joern Rennecke for maintaining the sh port, loop, regmove & reload
41358     hacking.
41359
41360   * Loren J. Rittle for improvements to libstdc++-v3 including the
41361     FreeBSD port, threading fixes, thread-related configury changes,
41362     critical threading documentation, and solutions to really tricky
41363     I/O problems, as well as keeping GCC properly working on FreeBSD
41364     and continuous testing.
41365
41366   * Craig Rodrigues for processing tons of bug reports.
41367
41368   * Ola Ro"nnerup for work on mt_alloc.
41369
41370   * Gavin Romig-Koch for lots of behind the scenes MIPS work.
41371
41372   * David Ronis inspired and encouraged Craig to rewrite the G77
41373     documentation in texinfo format by contributing a first pass at a
41374     translation of the old `g77-0.5.16/f/DOC' file.
41375
41376   * Ken Rose for fixes to GCC's delay slot filling code.
41377
41378   * Paul Rubin wrote most of the preprocessor.
41379
41380   * Pe'tur Runo'lfsson for major performance improvements in C++
41381     formatted I/O and large file support in C++ filebuf.
41382
41383   * Chip Salzenberg for libstdc++ patches and improvements to locales,
41384     traits, Makefiles, libio, libtool hackery, and "long long" support.
41385
41386   * Juha Sarlin for improvements to the H8 code generator.
41387
41388   * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
41389     300.
41390
41391   * Roger Sayle for improvements to constant folding and GCC's RTL
41392     optimizers as well as for fixing numerous bugs.
41393
41394   * Bradley Schatz for his work on the GCJ FAQ.
41395
41396   * Peter Schauer wrote the code to allow debugging to work on the
41397     Alpha.
41398
41399   * William Schelter did most of the work on the Intel 80386 support.
41400
41401   * Tobias Schlu"ter for work on GNU Fortran.
41402
41403   * Bernd Schmidt for various code generation improvements and major
41404     work in the reload pass as well a serving as release manager for
41405     GCC 2.95.3.
41406
41407   * Peter Schmid for constant testing of libstdc++--especially
41408     application testing, going above and beyond what was requested for
41409     the release criteria--and libstdc++ header file tweaks.
41410
41411   * Jason Schroeder for jcf-dump patches.
41412
41413   * Andreas Schwab for his work on the m68k port.
41414
41415   * Lars Segerlund for work on GNU Fortran.
41416
41417   * Joel Sherrill for his direction via the steering committee, RTEMS
41418     contributions and RTEMS testing.
41419
41420   * Nathan Sidwell for many C++ fixes/improvements.
41421
41422   * Jeffrey Siegal for helping RMS with the original design of GCC,
41423     some code which handles the parse tree and RTL data structures,
41424     constant folding and help with the original VAX & m68k ports.
41425
41426   * Kenny Simpson for prompting libstdc++ fixes due to defect reports
41427     from the LWG (thereby keeping GCC in line with updates from the
41428     ISO).
41429
41430   * Franz Sirl for his ongoing work with making the PPC port stable
41431     for GNU/Linux.
41432
41433   * Andrey Slepuhin for assorted AIX hacking.
41434
41435   * Trevor Smigiel for contributing the SPU port.
41436
41437   * Christopher Smith did the port for Convex machines.
41438
41439   * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
41440
41441   * Randy Smith finished the Sun FPA support.
41442
41443   * Scott Snyder for queue, iterator, istream, and string fixes and
41444     libstdc++ testsuite entries.  Also for providing the patch to G77
41445     to add rudimentary support for `INTEGER*1', `INTEGER*2', and
41446     `LOGICAL*1'.
41447
41448   * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
41449
41450   * Richard Stallman, for writing the original GCC and launching the
41451     GNU project.
41452
41453   * Jan Stein of the Chalmers Computer Society provided support for
41454     Genix, as well as part of the 32000 machine description.
41455
41456   * Nigel Stephens for various mips16 related fixes/improvements.
41457
41458   * Jonathan Stone wrote the machine description for the Pyramid
41459     computer.
41460
41461   * Graham Stott for various infrastructure improvements.
41462
41463   * John Stracke for his Java HTTP protocol fixes.
41464
41465   * Mike Stump for his Elxsi port, G++ contributions over the years
41466     and more recently his vxworks contributions
41467
41468   * Jeff Sturm for Java porting help, bug fixes, and encouragement.
41469
41470   * Shigeya Suzuki for this fixes for the bsdi platforms.
41471
41472   * Ian Lance Taylor for his mips16 work, general configury hacking,
41473     fixincludes, etc.
41474
41475   * Holger Teutsch provided the support for the Clipper CPU.
41476
41477   * Gary Thomas for his ongoing work to make the PPC work for
41478     GNU/Linux.
41479
41480   * Philipp Thomas for random bug fixes throughout the compiler
41481
41482   * Jason Thorpe for thread support in libstdc++ on NetBSD.
41483
41484   * Kresten Krab Thorup wrote the run time support for the Objective-C
41485     language and the fantastic Java bytecode interpreter.
41486
41487   * Michael Tiemann for random bug fixes, the first instruction
41488     scheduler, initial C++ support, function integration, NS32k, SPARC
41489     and M88k machine description work, delay slot scheduling.
41490
41491   * Andreas Tobler for his work porting libgcj to Darwin.
41492
41493   * Teemu Torma for thread safe exception handling support.
41494
41495   * Leonard Tower wrote parts of the parser, RTL generator, and RTL
41496     definitions, and of the VAX machine description.
41497
41498   * Daniel Towner and Hariharan Sandanagobalane contributed and
41499     maintain the picoChip port.
41500
41501   * Tom Tromey for internationalization support and for his many Java
41502     contributions and libgcj maintainership.
41503
41504   * Lassi Tuura for improvements to config.guess to determine HP
41505     processor types.
41506
41507   * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
41508
41509   * Andy Vaught for the design and initial implementation of the GNU
41510     Fortran front end.
41511
41512   * Brent Verner for work with the libstdc++ cshadow files and their
41513     associated configure steps.
41514
41515   * Todd Vierling for contributions for NetBSD ports.
41516
41517   * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
41518     guidance.
41519
41520   * Dean Wakerley for converting the install documentation from HTML
41521     to texinfo in time for GCC 3.0.
41522
41523   * Krister Walfridsson for random bug fixes.
41524
41525   * Feng Wang for contributions to GNU Fortran.
41526
41527   * Stephen M. Webb for time and effort on making libstdc++ shadow
41528     files work with the tricky Solaris 8+ headers, and for pushing the
41529     build-time header tree.
41530
41531   * John Wehle for various improvements for the x86 code generator,
41532     related infrastructure improvements to help x86 code generation,
41533     value range propagation and other work, WE32k port.
41534
41535   * Ulrich Weigand for work on the s390 port.
41536
41537   * Zack Weinberg for major work on cpplib and various other bug fixes.
41538
41539   * Matt Welsh for help with Linux Threads support in GCJ.
41540
41541   * Urban Widmark for help fixing java.io.
41542
41543   * Mark Wielaard for new Java library code and his work integrating
41544     with Classpath.
41545
41546   * Dale Wiles helped port GCC to the Tahoe.
41547
41548   * Bob Wilson from Tensilica, Inc. for the Xtensa port.
41549
41550   * Jim Wilson for his direction via the steering committee, tackling
41551     hard problems in various places that nobody else wanted to work
41552     on, strength reduction and other loop optimizations.
41553
41554   * Paul Woegerer and Tal Agmon for the CRX port.
41555
41556   * Carlo Wood for various fixes.
41557
41558   * Tom Wood for work on the m88k port.
41559
41560   * Canqun Yang for work on GNU Fortran.
41561
41562   * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
41563     description for the Tron architecture (specifically, the Gmicro).
41564
41565   * Kevin Zachmann helped port GCC to the Tahoe.
41566
41567   * Ayal Zaks for Swing Modulo Scheduling (SMS).
41568
41569   * Xiaoqiang Zhang for work on GNU Fortran.
41570
41571   * Gilles Zunino for help porting Java to Irix.
41572
41573
41574 The following people are recognized for their contributions to GNAT,
41575the Ada front end of GCC:
41576   * Bernard Banner
41577
41578   * Romain Berrendonner
41579
41580   * Geert Bosch
41581
41582   * Emmanuel Briot
41583
41584   * Joel Brobecker
41585
41586   * Ben Brosgol
41587
41588   * Vincent Celier
41589
41590   * Arnaud Charlet
41591
41592   * Chien Chieng
41593
41594   * Cyrille Comar
41595
41596   * Cyrille Crozes
41597
41598   * Robert Dewar
41599
41600   * Gary Dismukes
41601
41602   * Robert Duff
41603
41604   * Ed Falis
41605
41606   * Ramon Fernandez
41607
41608   * Sam Figueroa
41609
41610   * Vasiliy Fofanov
41611
41612   * Michael Friess
41613
41614   * Franco Gasperoni
41615
41616   * Ted Giering
41617
41618   * Matthew Gingell
41619
41620   * Laurent Guerby
41621
41622   * Jerome Guitton
41623
41624   * Olivier Hainque
41625
41626   * Jerome Hugues
41627
41628   * Hristian Kirtchev
41629
41630   * Jerome Lambourg
41631
41632   * Bruno Leclerc
41633
41634   * Albert Lee
41635
41636   * Sean McNeil
41637
41638   * Javier Miranda
41639
41640   * Laurent Nana
41641
41642   * Pascal Obry
41643
41644   * Dong-Ik Oh
41645
41646   * Laurent Pautet
41647
41648   * Brett Porter
41649
41650   * Thomas Quinot
41651
41652   * Nicolas Roche
41653
41654   * Pat Rogers
41655
41656   * Jose Ruiz
41657
41658   * Douglas Rupp
41659
41660   * Sergey Rybin
41661
41662   * Gail Schenker
41663
41664   * Ed Schonberg
41665
41666   * Nicolas Setton
41667
41668   * Samuel Tardieu
41669
41670
41671 The following people are recognized for their contributions of new
41672features, bug reports, testing and integration of classpath/libgcj for
41673GCC version 4.1:
41674   * Lillian Angel for `JTree' implementation and lots Free Swing
41675     additions and bug fixes.
41676
41677   * Wolfgang Baer for `GapContent' bug fixes.
41678
41679   * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse
41680     event fixes, lots of Free Swing work including `JTable' editing.
41681
41682   * Stuart Ballard for RMI constant fixes.
41683
41684   * Goffredo Baroncelli for `HTTPURLConnection' fixes.
41685
41686   * Gary Benson for `MessageFormat' fixes.
41687
41688   * Daniel Bonniot for `Serialization' fixes.
41689
41690   * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX'
41691     and `DOM xml:id' support.
41692
41693   * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes.
41694
41695   * Archie Cobbs for build fixes, VM interface updates,
41696     `URLClassLoader' updates.
41697
41698   * Kelley Cook for build fixes.
41699
41700   * Martin Cordova for Suggestions for better `SocketTimeoutException'.
41701
41702   * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite
41703     and improvements.
41704
41705   * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
41706     2D support. Lots of imageio framework additions, lots of AWT and
41707     Free Swing bug fixes.
41708
41709   * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
41710     fixes, better `Proxy' support, bug fixes and IKVM integration.
41711
41712   * Santiago Gala for `AccessControlContext' fixes.
41713
41714   * Nicolas Geoffray for `VMClassLoader' and `AccessController'
41715     improvements.
41716
41717   * David Gilbert for `basic' and `metal' icon and plaf support and
41718     lots of documenting, Lots of Free Swing and metal theme additions.
41719     `MetalIconFactory' implementation.
41720
41721   * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers.
41722
41723   * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj
41724     build speedups.
41725
41726   * Kim Ho for `JFileChooser' implementation.
41727
41728   * Andrew John Hughes for `Locale' and net fixes, URI RFC2986
41729     updates, `Serialization' fixes, `Properties' XML support and
41730     generic branch work, VMIntegration guide update.
41731
41732   * Bastiaan Huisman for `TimeZone' bug fixing.
41733
41734   * Andreas Jaeger for mprec updates.
41735
41736   * Paul Jenner for better `-Werror' support.
41737
41738   * Ito Kazumitsu for `NetworkInterface' implementation and updates.
41739
41740   * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
41741     bug fixes all over. Lots of Free Swing work including styled text.
41742
41743   * Simon Kitching for `String' cleanups and optimization suggestions.
41744
41745   * Michael Koch for configuration fixes, `Locale' updates, bug and
41746     build fixes.
41747
41748   * Guilhem Lavaux for configuration, thread and channel fixes and
41749     Kaffe integration. JCL native `Pointer' updates. Logger bug fixes.
41750
41751   * David Lichteblau for JCL support library global/local reference
41752     cleanups.
41753
41754   * Aaron Luchko for JDWP updates and documentation fixes.
41755
41756   * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex
41757     features.
41758
41759   * Sven de Marothy for BMP imageio support, CSS and `TextLayout'
41760     fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes
41761     and implementing the Qt4 peers.
41762
41763   * Casey Marshall for crypto algorithm fixes, `FileChannel' lock,
41764     `SystemLogger' and `FileHandler' rotate implementations, NIO
41765     `FileChannel.map' support, security and policy updates.
41766
41767   * Bryce McKinlay for RMI work.
41768
41769   * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
41770     testing and documenting.
41771
41772   * Kalle Olavi Niemitalo for build fixes.
41773
41774   * Rainer Orth for build fixes.
41775
41776   * Andrew Overholt for `File' locking fixes.
41777
41778   * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates.
41779
41780   * Olga Rodimina for `MenuSelectionManager' implementation.
41781
41782   * Jan Roehrich for `BasicTreeUI' and `JTree' fixes.
41783
41784   * Julian Scheid for documentation updates and gjdoc support.
41785
41786   * Christian Schlichtherle for zip fixes and cleanups.
41787
41788   * Robert Schuster for documentation updates and beans fixes,
41789     `TreeNode' enumerations and `ActionCommand' and various fixes, XML
41790     and URL, AWT and Free Swing bug fixes.
41791
41792   * Keith Seitz for lots of JDWP work.
41793
41794   * Christian Thalinger for 64-bit cleanups, Configuration and VM
41795     interface fixes and `CACAO' integration, `fdlibm' updates.
41796
41797   * Gael Thomas for `VMClassLoader' boot packages support suggestions.
41798
41799   * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4'
41800     support for Darwin/OS X, `Graphics2D' support, `gtk+' updates.
41801
41802   * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe
41803     integration. `Qt4' build infrastructure, `SHA1PRNG' and
41804     `GdkPixbugDecoder' updates.
41805
41806   * Tom Tromey for Eclipse integration, generics work, lots of bug
41807     fixes and gcj integration including coordinating The Big Merge.
41808
41809   * Mark Wielaard for bug fixes, packaging and release management,
41810     `Clipboard' implementation, system call interrupts and network
41811     timeouts and `GdkPixpufDecoder' fixes.
41812
41813
41814 In addition to the above, all of which also contributed time and
41815energy in testing GCC, we would like to thank the following for their
41816contributions to testing:
41817
41818   * Michael Abd-El-Malek
41819
41820   * Thomas Arend
41821
41822   * Bonzo Armstrong
41823
41824   * Steven Ashe
41825
41826   * Chris Baldwin
41827
41828   * David Billinghurst
41829
41830   * Jim Blandy
41831
41832   * Stephane Bortzmeyer
41833
41834   * Horst von Brand
41835
41836   * Frank Braun
41837
41838   * Rodney Brown
41839
41840   * Sidney Cadot
41841
41842   * Bradford Castalia
41843
41844   * Robert Clark
41845
41846   * Jonathan Corbet
41847
41848   * Ralph Doncaster
41849
41850   * Richard Emberson
41851
41852   * Levente Farkas
41853
41854   * Graham Fawcett
41855
41856   * Mark Fernyhough
41857
41858   * Robert A. French
41859
41860   * Jo"rgen Freyh
41861
41862   * Mark K. Gardner
41863
41864   * Charles-Antoine Gauthier
41865
41866   * Yung Shing Gene
41867
41868   * David Gilbert
41869
41870   * Simon Gornall
41871
41872   * Fred Gray
41873
41874   * John Griffin
41875
41876   * Patrik Hagglund
41877
41878   * Phil Hargett
41879
41880   * Amancio Hasty
41881
41882   * Takafumi Hayashi
41883
41884   * Bryan W. Headley
41885
41886   * Kevin B. Hendricks
41887
41888   * Joep Jansen
41889
41890   * Christian Joensson
41891
41892   * Michel Kern
41893
41894   * David Kidd
41895
41896   * Tobias Kuipers
41897
41898   * Anand Krishnaswamy
41899
41900   * A. O. V. Le Blanc
41901
41902   * llewelly
41903
41904   * Damon Love
41905
41906   * Brad Lucier
41907
41908   * Matthias Klose
41909
41910   * Martin Knoblauch
41911
41912   * Rick Lutowski
41913
41914   * Jesse Macnish
41915
41916   * Stefan Morrell
41917
41918   * Anon A. Mous
41919
41920   * Matthias Mueller
41921
41922   * Pekka Nikander
41923
41924   * Rick Niles
41925
41926   * Jon Olson
41927
41928   * Magnus Persson
41929
41930   * Chris Pollard
41931
41932   * Richard Polton
41933
41934   * Derk Reefman
41935
41936   * David Rees
41937
41938   * Paul Reilly
41939
41940   * Tom Reilly
41941
41942   * Torsten Rueger
41943
41944   * Danny Sadinoff
41945
41946   * Marc Schifer
41947
41948   * Erik Schnetter
41949
41950   * Wayne K. Schroll
41951
41952   * David Schuler
41953
41954   * Vin Shelton
41955
41956   * Tim Souder
41957
41958   * Adam Sulmicki
41959
41960   * Bill Thorson
41961
41962   * George Talbot
41963
41964   * Pedro A. M. Vazquez
41965
41966   * Gregory Warnes
41967
41968   * Ian Watson
41969
41970   * David E. Young
41971
41972   * And many others
41973
41974 And finally we'd like to thank everyone who uses the compiler, provides
41975feedback and generally reminds us why we're doing this work in the first
41976place.
41977
41978
41979File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
41980
41981Option Index
41982************
41983
41984GCC's command line options are indexed here without any initial `-' or
41985`--'.  Where an option has both positive and negative forms (such as
41986`-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
41987indexed under the most appropriate form; it may sometimes be useful to
41988look up both forms.
41989
41990�[index�]
41991* Menu:
41992
41993* ###:                                   Overall Options.    (line  204)
41994* -mcpu:                                 RX Options.         (line   31)
41995* -patch:                                RX Options.         (line   31)
41996* A:                                     Preprocessor Options.
41997                                                             (line  541)
41998* all_load:                              Darwin Options.     (line  112)
41999* allowable_client:                      Darwin Options.     (line  199)
42000* ansi <1>:                              Non-bugs.           (line  107)
42001* ansi <2>:                              Other Builtins.     (line   22)
42002* ansi <3>:                              Preprocessor Options.
42003                                                             (line  326)
42004* ansi <4>:                              C Dialect Options.  (line   11)
42005* ansi:                                  Standards.          (line   16)
42006* arch_errors_fatal:                     Darwin Options.     (line  116)
42007* aux-info:                              C Dialect Options.  (line  143)
42008* b:                                     Target Options.     (line   13)
42009* B:                                     Directory Options.  (line   41)
42010* Bdynamic:                              VxWorks Options.    (line   22)
42011* bind_at_load:                          Darwin Options.     (line  120)
42012* Bstatic:                               VxWorks Options.    (line   22)
42013* bundle:                                Darwin Options.     (line  125)
42014* bundle_loader:                         Darwin Options.     (line  129)
42015* c:                                     Link Options.       (line   20)
42016* C:                                     Preprocessor Options.
42017                                                             (line  599)
42018* c:                                     Overall Options.    (line  159)
42019* client_name:                           Darwin Options.     (line  199)
42020* combine:                               Overall Options.    (line  215)
42021* compatibility_version:                 Darwin Options.     (line  199)
42022* coverage:                              Debugging Options.  (line  336)
42023* current_version:                       Darwin Options.     (line  199)
42024* D:                                     Preprocessor Options.
42025                                                             (line   34)
42026* d:                                     Debugging Options.  (line  400)
42027* dA:                                    Debugging Options.  (line  603)
42028* dD <1>:                                Preprocessor Options.
42029                                                             (line  573)
42030* dD:                                    Debugging Options.  (line  607)
42031* dead_strip:                            Darwin Options.     (line  199)
42032* dependency-file:                       Darwin Options.     (line  199)
42033* dH:                                    Debugging Options.  (line  611)
42034* dI:                                    Preprocessor Options.
42035                                                             (line  582)
42036* dM:                                    Preprocessor Options.
42037                                                             (line  557)
42038* dm:                                    Debugging Options.  (line  614)
42039* dN:                                    Preprocessor Options.
42040                                                             (line  579)
42041* dP:                                    Debugging Options.  (line  623)
42042* dp:                                    Debugging Options.  (line  618)
42043* dU:                                    Preprocessor Options.
42044                                                             (line  586)
42045* dumpmachine:                           Debugging Options.  (line 1101)
42046* dumpspecs:                             Debugging Options.  (line 1109)
42047* dumpversion:                           Debugging Options.  (line 1105)
42048* dv:                                    Debugging Options.  (line  627)
42049* dx:                                    Debugging Options.  (line  632)
42050* dy:                                    Debugging Options.  (line  636)
42051* dylib_file:                            Darwin Options.     (line  199)
42052* dylinker_install_name:                 Darwin Options.     (line  199)
42053* dynamic:                               Darwin Options.     (line  199)
42054* dynamiclib:                            Darwin Options.     (line  133)
42055* E <1>:                                 Link Options.       (line   20)
42056* E:                                     Overall Options.    (line  180)
42057* EB <1>:                                MIPS Options.       (line    7)
42058* EB:                                    ARC Options.        (line   12)
42059* EL <1>:                                MIPS Options.       (line   10)
42060* EL:                                    ARC Options.        (line    9)
42061* exported_symbols_list:                 Darwin Options.     (line  199)
42062* F:                                     Darwin Options.     (line   32)
42063* fabi-version:                          C++ Dialect Options.
42064                                                             (line   20)
42065* falign-functions:                      Optimize Options.   (line 1284)
42066* falign-jumps:                          Optimize Options.   (line 1334)
42067* falign-labels:                         Optimize Options.   (line 1302)
42068* falign-loops:                          Optimize Options.   (line 1320)
42069* fargument-alias:                       Code Gen Options.   (line  415)
42070* fargument-noalias:                     Code Gen Options.   (line  415)
42071* fargument-noalias-anything:            Code Gen Options.   (line  415)
42072* fargument-noalias-global:              Code Gen Options.   (line  415)
42073* fassociative-math:                     Optimize Options.   (line 1759)
42074* fasynchronous-unwind-tables:           Code Gen Options.   (line   64)
42075* fauto-inc-dec:                         Optimize Options.   (line  477)
42076* fbounds-check:                         Code Gen Options.   (line   15)
42077* fbranch-probabilities:                 Optimize Options.   (line 1887)
42078* fbranch-target-load-optimize:          Optimize Options.   (line 1995)
42079* fbranch-target-load-optimize2:         Optimize Options.   (line 2001)
42080* fbtr-bb-exclusive:                     Optimize Options.   (line 2005)
42081* fcall-saved:                           Code Gen Options.   (line  262)
42082* fcall-used:                            Code Gen Options.   (line  248)
42083* fcaller-saves:                         Optimize Options.   (line  743)
42084* fcheck-data-deps:                      Optimize Options.   (line  989)
42085* fcheck-new:                            C++ Dialect Options.
42086                                                             (line   41)
42087* fcommon:                               Variable Attributes.
42088                                                             (line  105)
42089* fcompare-debug:                        Debugging Options.  (line  156)
42090* fcompare-debug-second:                 Debugging Options.  (line  182)
42091* fcond-mismatch:                        C Dialect Options.  (line  261)
42092* fconserve-space:                       C++ Dialect Options.
42093                                                             (line   51)
42094* fconserve-stack:                       Optimize Options.   (line  756)
42095* fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
42096                                                             (line   30)
42097* fcprop-registers:                      Optimize Options.   (line 1617)
42098* fcrossjumping:                         Optimize Options.   (line  470)
42099* fcse-follow-jumps:                     Optimize Options.   (line  398)
42100* fcse-skip-blocks:                      Optimize Options.   (line  407)
42101* fcx-fortran-rules:                     Optimize Options.   (line 1873)
42102* fcx-limited-range:                     Optimize Options.   (line 1861)
42103* fdata-sections:                        Optimize Options.   (line 1976)
42104* fdbg-cnt:                              Debugging Options.  (line  389)
42105* fdbg-cnt-list:                         Debugging Options.  (line  386)
42106* fdce:                                  Optimize Options.   (line  483)
42107* fdebug-prefix-map:                     Debugging Options.  (line  283)
42108* fdelayed-branch:                       Optimize Options.   (line  592)
42109* fdelete-null-pointer-checks:           Optimize Options.   (line  506)
42110* fdiagnostics-show-location:            Language Independent Options.
42111                                                             (line   21)
42112* fdiagnostics-show-option:              Language Independent Options.
42113                                                             (line   36)
42114* fdirectives-only:                      Preprocessor Options.
42115                                                             (line  449)
42116* fdollars-in-identifiers <1>:           Interoperation.     (line  146)
42117* fdollars-in-identifiers:               Preprocessor Options.
42118                                                             (line  471)
42119* fdse:                                  Optimize Options.   (line  487)
42120* fdump-class-hierarchy:                 Debugging Options.  (line  666)
42121* fdump-final-insns:                     Debugging Options.  (line  150)
42122* fdump-ipa:                             Debugging Options.  (line  674)
42123* fdump-noaddr:                          Debugging Options.  (line  639)
42124* fdump-rtl-alignments:                  Debugging Options.  (line  415)
42125* fdump-rtl-all:                         Debugging Options.  (line  600)
42126* fdump-rtl-asmcons:                     Debugging Options.  (line  418)
42127* fdump-rtl-auto_inc_dec:                Debugging Options.  (line  422)
42128* fdump-rtl-barriers:                    Debugging Options.  (line  426)
42129* fdump-rtl-bbpart:                      Debugging Options.  (line  429)
42130* fdump-rtl-bbro:                        Debugging Options.  (line  432)
42131* fdump-rtl-btl2:                        Debugging Options.  (line  436)
42132* fdump-rtl-bypass:                      Debugging Options.  (line  440)
42133* fdump-rtl-ce1:                         Debugging Options.  (line  451)
42134* fdump-rtl-ce2:                         Debugging Options.  (line  451)
42135* fdump-rtl-ce3:                         Debugging Options.  (line  451)
42136* fdump-rtl-combine:                     Debugging Options.  (line  443)
42137* fdump-rtl-compgotos:                   Debugging Options.  (line  446)
42138* fdump-rtl-cprop_hardreg:               Debugging Options.  (line  455)
42139* fdump-rtl-csa:                         Debugging Options.  (line  458)
42140* fdump-rtl-cse1:                        Debugging Options.  (line  462)
42141* fdump-rtl-cse2:                        Debugging Options.  (line  462)
42142* fdump-rtl-dbr:                         Debugging Options.  (line  469)
42143* fdump-rtl-dce:                         Debugging Options.  (line  466)
42144* fdump-rtl-dce1:                        Debugging Options.  (line  473)
42145* fdump-rtl-dce2:                        Debugging Options.  (line  473)
42146* fdump-rtl-dfinish:                     Debugging Options.  (line  597)
42147* fdump-rtl-dfinit:                      Debugging Options.  (line  597)
42148* fdump-rtl-eh:                          Debugging Options.  (line  477)
42149* fdump-rtl-eh_ranges:                   Debugging Options.  (line  480)
42150* fdump-rtl-expand:                      Debugging Options.  (line  483)
42151* fdump-rtl-fwprop1:                     Debugging Options.  (line  487)
42152* fdump-rtl-fwprop2:                     Debugging Options.  (line  487)
42153* fdump-rtl-gcse1:                       Debugging Options.  (line  492)
42154* fdump-rtl-gcse2:                       Debugging Options.  (line  492)
42155* fdump-rtl-init-regs:                   Debugging Options.  (line  496)
42156* fdump-rtl-initvals:                    Debugging Options.  (line  499)
42157* fdump-rtl-into_cfglayout:              Debugging Options.  (line  502)
42158* fdump-rtl-ira:                         Debugging Options.  (line  505)
42159* fdump-rtl-jump:                        Debugging Options.  (line  508)
42160* fdump-rtl-loop2:                       Debugging Options.  (line  511)
42161* fdump-rtl-mach:                        Debugging Options.  (line  515)
42162* fdump-rtl-mode_sw:                     Debugging Options.  (line  519)
42163* fdump-rtl-outof_cfglayout:             Debugging Options.  (line  525)
42164* fdump-rtl-peephole2:                   Debugging Options.  (line  528)
42165* fdump-rtl-postreload:                  Debugging Options.  (line  531)
42166* fdump-rtl-pro_and_epilogue:            Debugging Options.  (line  534)
42167* fdump-rtl-regclass:                    Debugging Options.  (line  597)
42168* fdump-rtl-regmove:                     Debugging Options.  (line  537)
42169* fdump-rtl-rnreg:                       Debugging Options.  (line  522)
42170* fdump-rtl-sched1:                      Debugging Options.  (line  541)
42171* fdump-rtl-sched2:                      Debugging Options.  (line  541)
42172* fdump-rtl-see:                         Debugging Options.  (line  545)
42173* fdump-rtl-seqabstr:                    Debugging Options.  (line  548)
42174* fdump-rtl-shorten:                     Debugging Options.  (line  551)
42175* fdump-rtl-sibling:                     Debugging Options.  (line  554)
42176* fdump-rtl-sms:                         Debugging Options.  (line  567)
42177* fdump-rtl-split1:                      Debugging Options.  (line  561)
42178* fdump-rtl-split2:                      Debugging Options.  (line  561)
42179* fdump-rtl-split3:                      Debugging Options.  (line  561)
42180* fdump-rtl-split4:                      Debugging Options.  (line  561)
42181* fdump-rtl-split5:                      Debugging Options.  (line  561)
42182* fdump-rtl-stack:                       Debugging Options.  (line  571)
42183* fdump-rtl-subreg1:                     Debugging Options.  (line  577)
42184* fdump-rtl-subreg2:                     Debugging Options.  (line  577)
42185* fdump-rtl-subregs_of_mode_finish:      Debugging Options.  (line  597)
42186* fdump-rtl-subregs_of_mode_init:        Debugging Options.  (line  597)
42187* fdump-rtl-unshare:                     Debugging Options.  (line  581)
42188* fdump-rtl-vartrack:                    Debugging Options.  (line  584)
42189* fdump-rtl-vregs:                       Debugging Options.  (line  587)
42190* fdump-rtl-web:                         Debugging Options.  (line  590)
42191* fdump-statistics:                      Debugging Options.  (line  692)
42192* fdump-translation-unit:                Debugging Options.  (line  657)
42193* fdump-tree:                            Debugging Options.  (line  703)
42194* fdump-tree-alias:                      Debugging Options.  (line  797)
42195* fdump-tree-all:                        Debugging Options.  (line  887)
42196* fdump-tree-ccp:                        Debugging Options.  (line  801)
42197* fdump-tree-cfg:                        Debugging Options.  (line  777)
42198* fdump-tree-ch:                         Debugging Options.  (line  789)
42199* fdump-tree-copyprop:                   Debugging Options.  (line  817)
42200* fdump-tree-copyrename:                 Debugging Options.  (line  863)
42201* fdump-tree-dce:                        Debugging Options.  (line  825)
42202* fdump-tree-dom:                        Debugging Options.  (line  843)
42203* fdump-tree-dse:                        Debugging Options.  (line  848)
42204* fdump-tree-forwprop:                   Debugging Options.  (line  858)
42205* fdump-tree-fre:                        Debugging Options.  (line  813)
42206* fdump-tree-gimple:                     Debugging Options.  (line  772)
42207* fdump-tree-mudflap:                    Debugging Options.  (line  829)
42208* fdump-tree-nrv:                        Debugging Options.  (line  868)
42209* fdump-tree-optimized:                  Debugging Options.  (line  769)
42210* fdump-tree-original:                   Debugging Options.  (line  766)
42211* fdump-tree-phiopt:                     Debugging Options.  (line  853)
42212* fdump-tree-pre:                        Debugging Options.  (line  809)
42213* fdump-tree-sink:                       Debugging Options.  (line  839)
42214* fdump-tree-slp:                        Debugging Options.  (line  878)
42215* fdump-tree-sra:                        Debugging Options.  (line  834)
42216* fdump-tree-ssa:                        Debugging Options.  (line  793)
42217* fdump-tree-store_copyprop:             Debugging Options.  (line  821)
42218* fdump-tree-storeccp:                   Debugging Options.  (line  805)
42219* fdump-tree-vcg:                        Debugging Options.  (line  781)
42220* fdump-tree-vect:                       Debugging Options.  (line  873)
42221* fdump-tree-vrp:                        Debugging Options.  (line  883)
42222* fdump-unnumbered:                      Debugging Options.  (line  645)
42223* fdump-unnumbered-links:                Debugging Options.  (line  651)
42224* fdwarf2-cfi-asm:                       Debugging Options.  (line  287)
42225* fearly-inlining:                       Optimize Options.   (line  235)
42226* feliminate-dwarf2-dups:                Debugging Options.  (line  195)
42227* feliminate-unused-debug-symbols:       Debugging Options.  (line   52)
42228* feliminate-unused-debug-types:         Debugging Options.  (line 1113)
42229* fenable-icf-debug:                     Debugging Options.  (line  270)
42230* fexceptions:                           Code Gen Options.   (line   34)
42231* fexcess-precision:                     Optimize Options.   (line 1687)
42232* fexec-charset:                         Preprocessor Options.
42233                                                             (line  498)
42234* fexpensive-optimizations:              Optimize Options.   (line  524)
42235* fextended-identifiers:                 Preprocessor Options.
42236                                                             (line  474)
42237* ffast-math:                            Optimize Options.   (line 1710)
42238* ffinite-math-only:                     Optimize Options.   (line 1785)
42239* ffix-and-continue:                     Darwin Options.     (line  106)
42240* ffixed:                                Code Gen Options.   (line  236)
42241* ffloat-store <1>:                      Disappointments.    (line   77)
42242* ffloat-store:                          Optimize Options.   (line 1673)
42243* ffor-scope:                            C++ Dialect Options.
42244                                                             (line  111)
42245* fforward-propagate:                    Optimize Options.   (line  164)
42246* ffreestanding <1>:                     Function Attributes.
42247                                                             (line  437)
42248* ffreestanding <2>:                     Warning Options.    (line  195)
42249* ffreestanding <3>:                     C Dialect Options.  (line  214)
42250* ffreestanding:                         Standards.          (line   84)
42251* ffriend-injection:                     C++ Dialect Options.
42252                                                             (line   81)
42253* ffunction-sections:                    Optimize Options.   (line 1976)
42254* fgcse:                                 Optimize Options.   (line  421)
42255* fgcse-after-reload:                    Optimize Options.   (line  457)
42256* fgcse-las:                             Optimize Options.   (line  450)
42257* fgcse-lm:                              Optimize Options.   (line  432)
42258* fgcse-sm:                              Optimize Options.   (line  441)
42259* fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
42260                                                             (line   39)
42261* fgnu89-inline:                         C Dialect Options.  (line  122)
42262* fgraphite-identity:                    Optimize Options.   (line  975)
42263* fhosted:                               C Dialect Options.  (line  207)
42264* fif-conversion:                        Optimize Options.   (line  491)
42265* fif-conversion2:                       Optimize Options.   (line  500)
42266* filelist:                              Darwin Options.     (line  199)
42267* findirect-data:                        Darwin Options.     (line  106)
42268* findirect-inlining:                    Optimize Options.   (line  208)
42269* finhibit-size-directive:               Code Gen Options.   (line  158)
42270* finline-functions:                     Optimize Options.   (line  216)
42271* finline-functions-called-once:         Optimize Options.   (line  227)
42272* finline-limit:                         Optimize Options.   (line  252)
42273* finline-small-functions:               Optimize Options.   (line  200)
42274* finput-charset:                        Preprocessor Options.
42275                                                             (line  511)
42276* finstrument-functions <1>:             Function Attributes.
42277                                                             (line  785)
42278* finstrument-functions:                 Code Gen Options.   (line  292)
42279* finstrument-functions-exclude-file-list: Code Gen Options. (line  329)
42280* finstrument-functions-exclude-function-list: Code Gen Options.
42281                                                             (line  347)
42282* fipa-cp:                               Optimize Options.   (line  817)
42283* fipa-cp-clone:                         Optimize Options.   (line  825)
42284* fipa-matrix-reorg:                     Optimize Options.   (line  835)
42285* fipa-pta:                              Optimize Options.   (line  813)
42286* fipa-pure-const:                       Optimize Options.   (line  790)
42287* fipa-reference:                        Optimize Options.   (line  794)
42288* fipa-sra:                              Optimize Options.   (line  245)
42289* fipa-struct-reorg:                     Optimize Options.   (line  798)
42290* fira-coalesce:                         Optimize Options.   (line  563)
42291* fira-loop-pressure:                    Optimize Options.   (line  567)
42292* fira-verbose:                          Optimize Options.   (line  587)
42293* fivopts:                               Optimize Options.   (line 1025)
42294* fkeep-inline-functions <1>:            Inline.             (line   51)
42295* fkeep-inline-functions:                Optimize Options.   (line  278)
42296* fkeep-static-consts:                   Optimize Options.   (line  285)
42297* flat_namespace:                        Darwin Options.     (line  199)
42298* flax-vector-conversions:               C Dialect Options.  (line  266)
42299* fleading-underscore:                   Code Gen Options.   (line  432)
42300* flto:                                  Optimize Options.   (line 1392)
42301* fltrans:                               Optimize Options.   (line 1569)
42302* fltrans-output-list:                   Optimize Options.   (line 1580)
42303* fmem-report:                           Debugging Options.  (line  311)
42304* fmerge-all-constants:                  Optimize Options.   (line  304)
42305* fmerge-constants:                      Optimize Options.   (line  294)
42306* fmerge-debug-strings:                  Debugging Options.  (line  275)
42307* fmessage-length:                       Language Independent Options.
42308                                                             (line   15)
42309* fmodulo-sched:                         Optimize Options.   (line  315)
42310* fmodulo-sched-allow-regmoves:          Optimize Options.   (line  320)
42311* fmove-loop-invariants:                 Optimize Options.   (line 1966)
42312* fms-extensions <1>:                    Unnamed Fields.     (line   37)
42313* fms-extensions <2>:                    C++ Dialect Options.
42314                                                             (line  146)
42315* fms-extensions:                        C Dialect Options.  (line  232)
42316* fmudflap:                              Optimize Options.   (line  360)
42317* fmudflapir:                            Optimize Options.   (line  360)
42318* fmudflapth:                            Optimize Options.   (line  360)
42319* fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
42320                                                             (line   43)
42321* fno-access-control:                    C++ Dialect Options.
42322                                                             (line   37)
42323* fno-asm:                               C Dialect Options.  (line  159)
42324* fno-branch-count-reg:                  Optimize Options.   (line  327)
42325* fno-builtin <1>:                       Other Builtins.     (line   14)
42326* fno-builtin <2>:                       Function Attributes.
42327                                                             (line  437)
42328* fno-builtin <3>:                       Warning Options.    (line  195)
42329* fno-builtin:                           C Dialect Options.  (line  173)
42330* fno-common <1>:                        Variable Attributes.
42331                                                             (line  105)
42332* fno-common:                            Code Gen Options.   (line  135)
42333* fno-compare-debug:                     Debugging Options.  (line  156)
42334* fno-deduce-init-list:                  C++ Dialect Options.
42335                                                             (line   63)
42336* fno-default-inline <1>:                Inline.             (line   71)
42337* fno-default-inline <2>:                Optimize Options.   (line  149)
42338* fno-default-inline:                    C++ Dialect Options.
42339                                                             (line  300)
42340* fno-defer-pop:                         Optimize Options.   (line  156)
42341* fno-dwarf2-cfi-asm:                    Debugging Options.  (line  287)
42342* fno-elide-constructors:                C++ Dialect Options.
42343                                                             (line   94)
42344* fno-enforce-eh-specs:                  C++ Dialect Options.
42345                                                             (line  100)
42346* fno-for-scope:                         C++ Dialect Options.
42347                                                             (line  111)
42348* fno-function-cse:                      Optimize Options.   (line  337)
42349* fno-gnu-keywords:                      C++ Dialect Options.
42350                                                             (line  123)
42351* fno-guess-branch-probability:          Optimize Options.   (line 1156)
42352* fno-ident:                             Code Gen Options.   (line  155)
42353* fno-implement-inlines <1>:             C++ Interface.      (line   75)
42354* fno-implement-inlines:                 C++ Dialect Options.
42355                                                             (line  140)
42356* fno-implicit-inline-templates:         C++ Dialect Options.
42357                                                             (line  134)
42358* fno-implicit-templates <1>:            Template Instantiation.
42359                                                             (line   87)
42360* fno-implicit-templates:                C++ Dialect Options.
42361                                                             (line  128)
42362* fno-inline:                            Optimize Options.   (line  194)
42363* fno-ira-share-save-slots:              Optimize Options.   (line  575)
42364* fno-ira-share-spill-slots:             Optimize Options.   (line  581)
42365* fno-jump-tables:                       Code Gen Options.   (line  228)
42366* fno-math-errno:                        Optimize Options.   (line 1724)
42367* fno-merge-debug-strings:               Debugging Options.  (line  275)
42368* fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
42369                                                             (line   49)
42370* fno-nonansi-builtins:                  C++ Dialect Options.
42371                                                             (line  151)
42372* fno-operator-names:                    C++ Dialect Options.
42373                                                             (line  156)
42374* fno-optional-diags:                    C++ Dialect Options.
42375                                                             (line  160)
42376* fno-peephole:                          Optimize Options.   (line 1147)
42377* fno-peephole2:                         Optimize Options.   (line 1147)
42378* fno-pretty-templates:                  C++ Dialect Options.
42379                                                             (line  170)
42380* fno-rtti:                              C++ Dialect Options.
42381                                                             (line  188)
42382* fno-sched-interblock:                  Optimize Options.   (line  618)
42383* fno-sched-spec:                        Optimize Options.   (line  623)
42384* fno-set-stack-executable:              i386 and x86-64 Windows Options.
42385                                                             (line   60)
42386* fno-show-column:                       Preprocessor Options.
42387                                                             (line  536)
42388* fno-signed-bitfields:                  C Dialect Options.  (line  299)
42389* fno-signed-zeros:                      Optimize Options.   (line 1797)
42390* fno-stack-limit:                       Code Gen Options.   (line  398)
42391* fno-threadsafe-statics:                C++ Dialect Options.
42392                                                             (line  210)
42393* fno-toplevel-reorder:                  Optimize Options.   (line 1354)
42394* fno-trapping-math:                     Optimize Options.   (line 1807)
42395* fno-unsigned-bitfields:                C Dialect Options.  (line  299)
42396* fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
42397                                                             (line  223)
42398* fno-var-tracking-assignments:          Debugging Options.  (line 1024)
42399* fno-var-tracking-assignments-toggle:   Debugging Options.  (line 1034)
42400* fno-weak:                              C++ Dialect Options.
42401                                                             (line  285)
42402* fno-working-directory:                 Preprocessor Options.
42403                                                             (line  521)
42404* fno-zero-initialized-in-bss:           Optimize Options.   (line  348)
42405* fnon-call-exceptions:                  Code Gen Options.   (line   48)
42406* fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
42407                                                             (line   56)
42408* fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
42409                                                             (line   81)
42410* fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
42411                                                             (line   85)
42412* fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
42413                                                             (line  170)
42414* fomit-frame-pointer:                   Optimize Options.   (line  173)
42415* fopenmp:                               C Dialect Options.  (line  224)
42416* foptimize-register-move:               Optimize Options.   (line  531)
42417* foptimize-sibling-calls:               Optimize Options.   (line  189)
42418* force_cpusubtype_ALL:                  Darwin Options.     (line  138)
42419* force_flat_namespace:                  Darwin Options.     (line  199)
42420* fpack-struct:                          Code Gen Options.   (line  279)
42421* fpcc-struct-return <1>:                Incompatibilities.  (line  170)
42422* fpcc-struct-return:                    Code Gen Options.   (line   70)
42423* fpch-deps:                             Preprocessor Options.
42424                                                             (line  282)
42425* fpch-preprocess:                       Preprocessor Options.
42426                                                             (line  290)
42427* fpeel-loops:                           Optimize Options.   (line 1958)
42428* fpermissive:                           C++ Dialect Options.
42429                                                             (line  165)
42430* fPIC:                                  Code Gen Options.   (line  205)
42431* fpic:                                  Code Gen Options.   (line  184)
42432* fPIE:                                  Code Gen Options.   (line  218)
42433* fpie:                                  Code Gen Options.   (line  218)
42434* fpost-ipa-mem-report:                  Debugging Options.  (line  317)
42435* fpre-ipa-mem-report:                   Debugging Options.  (line  315)
42436* fpredictive-commoning:                 Optimize Options.   (line 1129)
42437* fprefetch-loop-arrays:                 Optimize Options.   (line 1136)
42438* fpreprocessed:                         Preprocessor Options.
42439                                                             (line  479)
42440* fprofile-arcs <1>:                     Other Builtins.     (line  245)
42441* fprofile-arcs:                         Debugging Options.  (line  321)
42442* fprofile-correction:                   Optimize Options.   (line 1624)
42443* fprofile-dir:                          Optimize Options.   (line 1631)
42444* fprofile-generate:                     Optimize Options.   (line 1641)
42445* fprofile-use:                          Optimize Options.   (line 1654)
42446* fprofile-values:                       Optimize Options.   (line 1906)
42447* fpu:                                   RX Options.         (line   17)
42448* frandom-seed:                          Debugging Options.  (line  918)
42449* freciprocal-math:                      Optimize Options.   (line 1776)
42450* frecord-gcc-switches:                  Code Gen Options.   (line  174)
42451* freg-struct-return:                    Code Gen Options.   (line   88)
42452* fregmove:                              Optimize Options.   (line  531)
42453* frename-registers:                     Optimize Options.   (line 1925)
42454* freorder-blocks:                       Optimize Options.   (line 1173)
42455* freorder-blocks-and-partition:         Optimize Options.   (line 1179)
42456* freorder-functions:                    Optimize Options.   (line 1190)
42457* freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
42458                                                             (line  174)
42459* frepo <1>:                             Template Instantiation.
42460                                                             (line   62)
42461* frepo:                                 C++ Dialect Options.
42462                                                             (line  183)
42463* frerun-cse-after-loop:                 Optimize Options.   (line  415)
42464* freschedule-modulo-scheduled-loops:    Optimize Options.   (line  719)
42465* frounding-math:                        Optimize Options.   (line 1822)
42466* fsched-critical-path-heuristic:        Optimize Options.   (line  685)
42467* fsched-dep-count-heuristic:            Optimize Options.   (line  712)
42468* fsched-group-heuristic:                Optimize Options.   (line  679)
42469* fsched-last-insn-heuristic:            Optimize Options.   (line  705)
42470* fsched-pressure:                       Optimize Options.   (line  628)
42471* fsched-rank-heuristic:                 Optimize Options.   (line  698)
42472* fsched-spec-insn-heuristic:            Optimize Options.   (line  691)
42473* fsched-spec-load:                      Optimize Options.   (line  637)
42474* fsched-spec-load-dangerous:            Optimize Options.   (line  642)
42475* fsched-stalled-insns:                  Optimize Options.   (line  648)
42476* fsched-stalled-insns-dep:              Optimize Options.   (line  658)
42477* fsched-verbose:                        Debugging Options.  (line  928)
42478* fsched2-use-superblocks:               Optimize Options.   (line  668)
42479* fschedule-insns:                       Optimize Options.   (line  599)
42480* fschedule-insns2:                      Optimize Options.   (line  609)
42481* fsection-anchors:                      Optimize Options.   (line 2021)
42482* fsel-sched-pipelining:                 Optimize Options.   (line  733)
42483* fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  738)
42484* fselective-scheduling:                 Optimize Options.   (line  725)
42485* fselective-scheduling2:                Optimize Options.   (line  729)
42486* fshort-double:                         Code Gen Options.   (line  117)
42487* fshort-enums <1>:                      Non-bugs.           (line   42)
42488* fshort-enums <2>:                      Type Attributes.    (line  113)
42489* fshort-enums <3>:                      Structures unions enumerations and bit-fields implementation.
42490                                                             (line   43)
42491* fshort-enums:                          Code Gen Options.   (line  106)
42492* fshort-wchar:                          Code Gen Options.   (line  125)
42493* fsignaling-nans:                       Optimize Options.   (line 1842)
42494* fsigned-bitfields <1>:                 Non-bugs.           (line   57)
42495* fsigned-bitfields:                     C Dialect Options.  (line  299)
42496* fsigned-char <1>:                      Characters implementation.
42497                                                             (line   31)
42498* fsigned-char:                          C Dialect Options.  (line  289)
42499* fsingle-precision-constant:            Optimize Options.   (line 1857)
42500* fsplit-ivs-in-unroller:                Optimize Options.   (line 1110)
42501* fsplit-wide-types:                     Optimize Options.   (line  390)
42502* fstack-check:                          Code Gen Options.   (line  359)
42503* fstack-limit-register:                 Code Gen Options.   (line  398)
42504* fstack-limit-symbol:                   Code Gen Options.   (line  398)
42505* fstack-protector:                      Optimize Options.   (line 2009)
42506* fstack-protector-all:                  Optimize Options.   (line 2018)
42507* fstats:                                C++ Dialect Options.
42508                                                             (line  198)
42509* fstrict-aliasing:                      Optimize Options.   (line 1203)
42510* fstrict-overflow:                      Optimize Options.   (line 1249)
42511* fsyntax-only:                          Warning Options.    (line   14)
42512* ftabstop:                              Preprocessor Options.
42513                                                             (line  492)
42514* ftemplate-depth:                       C++ Dialect Options.
42515                                                             (line  203)
42516* ftest-coverage:                        Debugging Options.  (line  377)
42517* fthread-jumps:                         Optimize Options.   (line  381)
42518* ftime-report:                          Debugging Options.  (line  307)
42519* ftls-model:                            Code Gen Options.   (line  443)
42520* ftracer:                               Optimize Options.   (line 1093)
42521* ftrapv:                                Code Gen Options.   (line   22)
42522* ftree-builtin-call-dce:                Optimize Options.   (line  863)
42523* ftree-ccp:                             Optimize Options.   (line  849)
42524* ftree-ch:                              Optimize Options.   (line  883)
42525* ftree-copy-prop:                       Optimize Options.   (line  785)
42526* ftree-copyrename:                      Optimize Options.   (line 1049)
42527* ftree-dce:                             Optimize Options.   (line  859)
42528* ftree-dominator-opts:                  Optimize Options.   (line  869)
42529* ftree-dse:                             Optimize Options.   (line  876)
42530* ftree-forwprop:                        Optimize Options.   (line  770)
42531* ftree-fre:                             Optimize Options.   (line  774)
42532* ftree-loop-im:                         Optimize Options.   (line 1010)
42533* ftree-loop-ivcanon:                    Optimize Options.   (line 1019)
42534* ftree-loop-linear:                     Optimize Options.   (line  894)
42535* ftree-loop-optimize:                   Optimize Options.   (line  890)
42536* ftree-parallelize-loops:               Optimize Options.   (line 1030)
42537* ftree-phiprop:                         Optimize Options.   (line  781)
42538* ftree-pre:                             Optimize Options.   (line  766)
42539* ftree-pta:                             Optimize Options.   (line 1039)
42540* ftree-reassoc:                         Optimize Options.   (line  762)
42541* ftree-sink:                            Optimize Options.   (line  845)
42542* ftree-slp-vectorize:                   Optimize Options.   (line 1068)
42543* ftree-sra:                             Optimize Options.   (line 1043)
42544* ftree-ter:                             Optimize Options.   (line 1056)
42545* ftree-vect-loop-version:               Optimize Options.   (line 1072)
42546* ftree-vectorize:                       Optimize Options.   (line 1064)
42547* ftree-vectorizer-verbose:              Debugging Options.  (line  891)
42548* ftree-vrp:                             Optimize Options.   (line 1084)
42549* funit-at-a-time:                       Optimize Options.   (line 1347)
42550* funroll-all-loops:                     Optimize Options.   (line 1104)
42551* funroll-loops:                         Optimize Options.   (line 1098)
42552* funsafe-loop-optimizations:            Optimize Options.   (line  462)
42553* funsafe-math-optimizations:            Optimize Options.   (line 1742)
42554* funsigned-bitfields <1>:               Non-bugs.           (line   57)
42555* funsigned-bitfields <2>:               Structures unions enumerations and bit-fields implementation.
42556                                                             (line   17)
42557* funsigned-bitfields:                   C Dialect Options.  (line  299)
42558* funsigned-char <1>:                    Characters implementation.
42559                                                             (line   31)
42560* funsigned-char:                        C Dialect Options.  (line  271)
42561* funswitch-loops:                       Optimize Options.   (line 1970)
42562* funwind-tables:                        Code Gen Options.   (line   57)
42563* fuse-cxa-atexit:                       C++ Dialect Options.
42564                                                             (line  216)
42565* fvar-tracking:                         Debugging Options.  (line 1014)
42566* fvar-tracking-assignments:             Debugging Options.  (line 1024)
42567* fvar-tracking-assignments-toggle:      Debugging Options.  (line 1034)
42568* fvariable-expansion-in-unroller:       Optimize Options.   (line 1124)
42569* fvect-cost-model:                      Optimize Options.   (line 1081)
42570* fverbose-asm:                          Code Gen Options.   (line  165)
42571* fvisibility:                           Code Gen Options.   (line  451)
42572* fvisibility-inlines-hidden:            C++ Dialect Options.
42573                                                             (line  228)
42574* fvisibility-ms-compat:                 C++ Dialect Options.
42575                                                             (line  256)
42576* fvpt:                                  Optimize Options.   (line 1916)
42577* fweb:                                  Optimize Options.   (line 1366)
42578* fwhole-program:                        Optimize Options.   (line 1377)
42579* fwhopr:                                Optimize Options.   (line 1538)
42580* fwide-exec-charset:                    Preprocessor Options.
42581                                                             (line  503)
42582* fworking-directory:                    Preprocessor Options.
42583                                                             (line  521)
42584* fwpa:                                  Optimize Options.   (line 1554)
42585* fwrapv:                                Code Gen Options.   (line   26)
42586* fzero-link:                            Objective-C and Objective-C++ Dialect Options.
42587                                                             (line  184)
42588* G <1>:                                 System V Options.   (line   10)
42589* G <2>:                                 RS/6000 and PowerPC Options.
42590                                                             (line  682)
42591* G <3>:                                 MIPS Options.       (line  315)
42592* G:                                     M32R/D Options.     (line   57)
42593* g:                                     Debugging Options.  (line   10)
42594* gcoff:                                 Debugging Options.  (line   70)
42595* gdwarf-VERSION:                        Debugging Options.  (line   88)
42596* gen-decls:                             Objective-C and Objective-C++ Dialect Options.
42597                                                             (line  194)
42598* gfull:                                 Darwin Options.     (line   71)
42599* ggdb:                                  Debugging Options.  (line   38)
42600* gno-strict-dwarf:                      Debugging Options.  (line  105)
42601* gstabs:                                Debugging Options.  (line   44)
42602* gstabs+:                               Debugging Options.  (line   64)
42603* gstrict-dwarf:                         Debugging Options.  (line   99)
42604* gtoggle:                               Debugging Options.  (line  142)
42605* gused:                                 Darwin Options.     (line   66)
42606* gvms:                                  Debugging Options.  (line  109)
42607* gxcoff:                                Debugging Options.  (line   75)
42608* gxcoff+:                               Debugging Options.  (line   80)
42609* H:                                     Preprocessor Options.
42610                                                             (line  654)
42611* headerpad_max_install_names:           Darwin Options.     (line  199)
42612* help <1>:                              Preprocessor Options.
42613                                                             (line  646)
42614* help:                                  Overall Options.    (line  231)
42615* I <1>:                                 Directory Options.  (line   10)
42616* I:                                     Preprocessor Options.
42617                                                             (line   65)
42618* I- <1>:                                Directory Options.  (line  107)
42619* I-:                                    Preprocessor Options.
42620                                                             (line  365)
42621* idirafter:                             Preprocessor Options.
42622                                                             (line  407)
42623* iframework:                            Darwin Options.     (line   59)
42624* imacros:                               Preprocessor Options.
42625                                                             (line  398)
42626* image_base:                            Darwin Options.     (line  199)
42627* imultilib:                             Preprocessor Options.
42628                                                             (line  430)
42629* include:                               Preprocessor Options.
42630                                                             (line  387)
42631* init:                                  Darwin Options.     (line  199)
42632* install_name:                          Darwin Options.     (line  199)
42633* iprefix:                               Preprocessor Options.
42634                                                             (line  414)
42635* iquote <1>:                            Directory Options.  (line   31)
42636* iquote:                                Preprocessor Options.
42637                                                             (line  442)
42638* isysroot:                              Preprocessor Options.
42639                                                             (line  426)
42640* isystem:                               Preprocessor Options.
42641                                                             (line  434)
42642* iwithprefix:                           Preprocessor Options.
42643                                                             (line  420)
42644* iwithprefixbefore:                     Preprocessor Options.
42645                                                             (line  420)
42646* keep_private_externs:                  Darwin Options.     (line  199)
42647* L:                                     Directory Options.  (line   37)
42648* l:                                     Link Options.       (line   26)
42649* lobjc:                                 Link Options.       (line   53)
42650* m:                                     RS/6000 and PowerPC Options.
42651                                                             (line  537)
42652* M:                                     Preprocessor Options.
42653                                                             (line  173)
42654* m1:                                    SH Options.         (line    9)
42655* m10:                                   PDP-11 Options.     (line   29)
42656* m128bit-long-double:                   i386 and x86-64 Options.
42657                                                             (line  269)
42658* m16-bit:                               CRIS Options.       (line   64)
42659* m2:                                    SH Options.         (line   12)
42660* m210:                                  MCore Options.      (line   43)
42661* m2a:                                   SH Options.         (line   30)
42662* m2a-nofpu:                             SH Options.         (line   18)
42663* m2a-single:                            SH Options.         (line   26)
42664* m2a-single-only:                       SH Options.         (line   22)
42665* m3:                                    SH Options.         (line   34)
42666* m31:                                   S/390 and zSeries Options.
42667                                                             (line   87)
42668* m32 <1>:                               SPARC Options.      (line  191)
42669* m32 <2>:                               RS/6000 and PowerPC Options.
42670                                                             (line  263)
42671* m32:                                   i386 and x86-64 Options.
42672                                                             (line  636)
42673* m32-bit:                               CRIS Options.       (line   64)
42674* m32bit-doubles:                        RX Options.         (line   10)
42675* m32r:                                  M32R/D Options.     (line   15)
42676* m32r2:                                 M32R/D Options.     (line    9)
42677* m32rx:                                 M32R/D Options.     (line   12)
42678* m340:                                  MCore Options.      (line   43)
42679* m3dnow:                                i386 and x86-64 Options.
42680                                                             (line  443)
42681* m3e:                                   SH Options.         (line   37)
42682* m4:                                    SH Options.         (line   51)
42683* m4-nofpu:                              SH Options.         (line   40)
42684* m4-single:                             SH Options.         (line   47)
42685* m4-single-only:                        SH Options.         (line   43)
42686* m40:                                   PDP-11 Options.     (line   23)
42687* m45:                                   PDP-11 Options.     (line   26)
42688* m4a:                                   SH Options.         (line   66)
42689* m4a-nofpu:                             SH Options.         (line   54)
42690* m4a-single:                            SH Options.         (line   62)
42691* m4a-single-only:                       SH Options.         (line   58)
42692* m4al:                                  SH Options.         (line   69)
42693* m4byte-functions:                      MCore Options.      (line   27)
42694* m5200:                                 M680x0 Options.     (line  146)
42695* m5206e:                                M680x0 Options.     (line  155)
42696* m528x:                                 M680x0 Options.     (line  159)
42697* m5307:                                 M680x0 Options.     (line  163)
42698* m5407:                                 M680x0 Options.     (line  167)
42699* m64 <1>:                               SPARC Options.      (line  191)
42700* m64 <2>:                               S/390 and zSeries Options.
42701                                                             (line   87)
42702* m64 <3>:                               RS/6000 and PowerPC Options.
42703                                                             (line  263)
42704* m64:                                   i386 and x86-64 Options.
42705                                                             (line  636)
42706* m64bit-doubles:                        RX Options.         (line   10)
42707* m68000:                                M680x0 Options.     (line   94)
42708* m68010:                                M680x0 Options.     (line  102)
42709* m68020:                                M680x0 Options.     (line  108)
42710* m68020-40:                             M680x0 Options.     (line  177)
42711* m68020-60:                             M680x0 Options.     (line  186)
42712* m68030:                                M680x0 Options.     (line  113)
42713* m68040:                                M680x0 Options.     (line  118)
42714* m68060:                                M680x0 Options.     (line  127)
42715* m6811:                                 M68hc1x Options.    (line   13)
42716* m6812:                                 M68hc1x Options.    (line   18)
42717* m68881:                                M680x0 Options.     (line  196)
42718* m68hc11:                               M68hc1x Options.    (line   13)
42719* m68hc12:                               M68hc1x Options.    (line   18)
42720* m68hcs12:                              M68hc1x Options.    (line   23)
42721* m68S12:                                M68hc1x Options.    (line   23)
42722* m8-bit:                                CRIS Options.       (line   64)
42723* m96bit-long-double:                    i386 and x86-64 Options.
42724                                                             (line  269)
42725* mabi <1>:                              RS/6000 and PowerPC Options.
42726                                                             (line  568)
42727* mabi <2>:                              i386 and x86-64 Options.
42728                                                             (line  552)
42729* mabi:                                  ARM Options.        (line   10)
42730* mabi=32:                               MIPS Options.       (line  130)
42731* mabi=64:                               MIPS Options.       (line  130)
42732* mabi=eabi:                             MIPS Options.       (line  130)
42733* mabi=gnu:                              MMIX Options.       (line   20)
42734* mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
42735                                                             (line  581)
42736* mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
42737                                                             (line  585)
42738* mabi=mmixware:                         MMIX Options.       (line   20)
42739* mabi=n32:                              MIPS Options.       (line  130)
42740* mabi=no-spe:                           RS/6000 and PowerPC Options.
42741                                                             (line  578)
42742* mabi=o64:                              MIPS Options.       (line  130)
42743* mabi=spe:                              RS/6000 and PowerPC Options.
42744                                                             (line  573)
42745* mabicalls:                             MIPS Options.       (line  154)
42746* mabort-on-noreturn:                    ARM Options.        (line  152)
42747* mabsdiff:                              MeP Options.        (line    7)
42748* mabshi:                                PDP-11 Options.     (line   55)
42749* mac0:                                  PDP-11 Options.     (line   16)
42750* macc-4:                                FRV Options.        (line  113)
42751* macc-8:                                FRV Options.        (line  116)
42752* maccumulate-outgoing-args:             i386 and x86-64 Options.
42753                                                             (line  569)
42754* maddress-space-conversion:             SPU Options.        (line   63)
42755* madjust-unroll:                        SH Options.         (line  213)
42756* mads:                                  RS/6000 and PowerPC Options.
42757                                                             (line  611)
42758* maix-struct-return:                    RS/6000 and PowerPC Options.
42759                                                             (line  561)
42760* maix32:                                RS/6000 and PowerPC Options.
42761                                                             (line  301)
42762* maix64:                                RS/6000 and PowerPC Options.
42763                                                             (line  301)
42764* malign-300:                            H8/300 Options.     (line   31)
42765* malign-double:                         i386 and x86-64 Options.
42766                                                             (line  253)
42767* malign-int:                            M680x0 Options.     (line  266)
42768* malign-labels:                         FRV Options.        (line  104)
42769* malign-loops:                          M32R/D Options.     (line   73)
42770* malign-natural:                        RS/6000 and PowerPC Options.
42771                                                             (line  340)
42772* malign-power:                          RS/6000 and PowerPC Options.
42773                                                             (line  340)
42774* mall-opts:                             MeP Options.        (line   11)
42775* malloc-cc:                             FRV Options.        (line   25)
42776* malpha-as:                             DEC Alpha Options.  (line  159)
42777* maltivec:                              RS/6000 and PowerPC Options.
42778                                                             (line  188)
42779* mam33:                                 MN10300 Options.    (line   17)
42780* mapcs:                                 ARM Options.        (line   22)
42781* mapcs-frame:                           ARM Options.        (line   14)
42782* mapp-regs <1>:                         V850 Options.       (line   57)
42783* mapp-regs:                             SPARC Options.      (line   10)
42784* march <1>:                             S/390 and zSeries Options.
42785                                                             (line  116)
42786* march <2>:                             MIPS Options.       (line   14)
42787* march <3>:                             M680x0 Options.     (line   12)
42788* march <4>:                             i386 and x86-64 Options.
42789                                                             (line  152)
42790* march <5>:                             HPPA Options.       (line    9)
42791* march <6>:                             CRIS Options.       (line   10)
42792* march:                                 ARM Options.        (line  107)
42793* mas100-syntax:                         RX Options.         (line   76)
42794* masm=DIALECT:                          i386 and x86-64 Options.
42795                                                             (line  209)
42796* matomic-updates:                       SPU Options.        (line   78)
42797* mauto-incdec:                          M68hc1x Options.    (line   26)
42798* mauto-pic:                             IA-64 Options.      (line   50)
42799* maverage:                              MeP Options.        (line   16)
42800* mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
42801                                                             (line  409)
42802* mb:                                    SH Options.         (line   74)
42803* mbackchain:                            S/390 and zSeries Options.
42804                                                             (line   35)
42805* mbarrel-shift-enabled:                 LM32 Options.       (line    9)
42806* mbase-addresses:                       MMIX Options.       (line   54)
42807* mbased=:                               MeP Options.        (line   20)
42808* mbcopy:                                PDP-11 Options.     (line   36)
42809* mbcopy-builtin:                        PDP-11 Options.     (line   32)
42810* mbig:                                  RS/6000 and PowerPC Options.
42811                                                             (line  484)
42812* mbig-endian <1>:                       RS/6000 and PowerPC Options.
42813                                                             (line  484)
42814* mbig-endian <2>:                       MCore Options.      (line   39)
42815* mbig-endian <3>:                       IA-64 Options.      (line    9)
42816* mbig-endian:                           ARM Options.        (line   67)
42817* mbig-endian-data:                      RX Options.         (line   43)
42818* mbig-switch <1>:                       V850 Options.       (line   52)
42819* mbig-switch:                           HPPA Options.       (line   23)
42820* mbigtable:                             SH Options.         (line   90)
42821* mbit-align:                            RS/6000 and PowerPC Options.
42822                                                             (line  438)
42823* mbitfield:                             M680x0 Options.     (line  234)
42824* mbitops <1>:                           SH Options.         (line   94)
42825* mbitops:                               MeP Options.        (line   26)
42826* mbranch-cheap:                         PDP-11 Options.     (line   65)
42827* mbranch-cost:                          MIPS Options.       (line  611)
42828* mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
42829* mbranch-expensive:                     PDP-11 Options.     (line   61)
42830* mbranch-hints:                         SPU Options.        (line   27)
42831* mbranch-likely:                        MIPS Options.       (line  618)
42832* mbranch-predict:                       MMIX Options.       (line   49)
42833* mbss-plt:                              RS/6000 and PowerPC Options.
42834                                                             (line  211)
42835* mbuild-constants:                      DEC Alpha Options.  (line  142)
42836* mbwx:                                  DEC Alpha Options.  (line  171)
42837* mc68000:                               M680x0 Options.     (line   94)
42838* mc68020:                               M680x0 Options.     (line  108)
42839* mc=:                                   MeP Options.        (line   31)
42840* mcache-size:                           SPU Options.        (line   70)
42841* mcall-eabi:                            RS/6000 and PowerPC Options.
42842                                                             (line  531)
42843* mcall-freebsd:                         RS/6000 and PowerPC Options.
42844                                                             (line  549)
42845* mcall-gnu:                             RS/6000 and PowerPC Options.
42846                                                             (line  545)
42847* mcall-linux:                           RS/6000 and PowerPC Options.
42848                                                             (line  541)
42849* mcall-netbsd:                          RS/6000 and PowerPC Options.
42850                                                             (line  553)
42851* mcall-prologues:                       AVR Options.        (line   36)
42852* mcall-sysv:                            RS/6000 and PowerPC Options.
42853                                                             (line  523)
42854* mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
42855                                                             (line  531)
42856* mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
42857                                                             (line  534)
42858* mcallee-super-interworking:            ARM Options.        (line  245)
42859* mcaller-super-interworking:            ARM Options.        (line  252)
42860* mcallgraph-data:                       MCore Options.      (line   31)
42861* mcc-init:                              CRIS Options.       (line   41)
42862* mcfv4e:                                M680x0 Options.     (line  171)
42863* mcheck-zero-division:                  MIPS Options.       (line  426)
42864* mcirrus-fix-invalid-insns:             ARM Options.        (line  192)
42865* mcix:                                  DEC Alpha Options.  (line  171)
42866* mcld:                                  i386 and x86-64 Options.
42867                                                             (line  472)
42868* mclip:                                 MeP Options.        (line   35)
42869* mcmodel=embmedany:                     SPARC Options.      (line  213)
42870* mcmodel=kernel:                        i386 and x86-64 Options.
42871                                                             (line  658)
42872* mcmodel=large:                         i386 and x86-64 Options.
42873                                                             (line  670)
42874* mcmodel=medany:                        SPARC Options.      (line  207)
42875* mcmodel=medium:                        i386 and x86-64 Options.
42876                                                             (line  663)
42877* mcmodel=medlow:                        SPARC Options.      (line  196)
42878* mcmodel=medmid:                        SPARC Options.      (line  201)
42879* mcmodel=small:                         i386 and x86-64 Options.
42880                                                             (line  652)
42881* mcmpb:                                 RS/6000 and PowerPC Options.
42882                                                             (line   33)
42883* mcode-readable:                        MIPS Options.       (line  386)
42884* mcond-exec:                            FRV Options.        (line  152)
42885* mcond-move:                            FRV Options.        (line  128)
42886* mconfig=:                              MeP Options.        (line   39)
42887* mconsole:                              i386 and x86-64 Windows Options.
42888                                                             (line    9)
42889* mconst-align:                          CRIS Options.       (line   55)
42890* mconst16:                              Xtensa Options.     (line   10)
42891* mconstant-gp:                          IA-64 Options.      (line   46)
42892* mcop:                                  MeP Options.        (line   48)
42893* mcop32:                                MeP Options.        (line   53)
42894* mcop64:                                MeP Options.        (line   56)
42895* mcorea:                                Blackfin Options.   (line  150)
42896* mcoreb:                                Blackfin Options.   (line  156)
42897* mcpu <1>:                              SPARC Options.      (line   96)
42898* mcpu <2>:                              RS/6000 and PowerPC Options.
42899                                                             (line  119)
42900* mcpu <3>:                              picoChip Options.   (line    9)
42901* mcpu <4>:                              M680x0 Options.     (line   28)
42902* mcpu <5>:                              i386 and x86-64 Options.
42903                                                             (line  157)
42904* mcpu <6>:                              FRV Options.        (line  212)
42905* mcpu <7>:                              DEC Alpha Options.  (line  223)
42906* mcpu <8>:                              CRIS Options.       (line   10)
42907* mcpu <9>:                              ARM Options.        (line   79)
42908* mcpu:                                  ARC Options.        (line   23)
42909* mcpu32:                                M680x0 Options.     (line  137)
42910* mcpu= <1>:                             M32C Options.       (line    7)
42911* mcpu=:                                 Blackfin Options.   (line    7)
42912* mcrc32:                                i386 and x86-64 Options.
42913                                                             (line  508)
42914* mcsync-anomaly:                        Blackfin Options.   (line   56)
42915* mcx16:                                 i386 and x86-64 Options.
42916                                                             (line  486)
42917* mcygwin:                               i386 and x86-64 Windows Options.
42918                                                             (line   16)
42919* MD:                                    Preprocessor Options.
42920                                                             (line  262)
42921* mdalign:                               SH Options.         (line   80)
42922* mdata:                                 ARC Options.        (line   30)
42923* mdata-align:                           CRIS Options.       (line   55)
42924* mdc:                                   MeP Options.        (line   62)
42925* mdebug <1>:                            S/390 and zSeries Options.
42926                                                             (line  112)
42927* mdebug:                                M32R/D Options.     (line   69)
42928* mdebug-main=PREFIX <1>:                IA-64/VMS Options.  (line   13)
42929* mdebug-main=PREFIX:                    DEC Alpha/VMS Options.
42930                                                             (line   13)
42931* mdec-asm:                              PDP-11 Options.     (line   78)
42932* mdisable-callt:                        V850 Options.       (line   80)
42933* mdisable-fpregs:                       HPPA Options.       (line   33)
42934* mdisable-indexing:                     HPPA Options.       (line   40)
42935* mdiv <1>:                              MeP Options.        (line   65)
42936* mdiv <2>:                              MCore Options.      (line   15)
42937* mdiv:                                  M680x0 Options.     (line  208)
42938* mdiv=STRATEGY:                         SH Options.         (line  158)
42939* mdivide-breaks:                        MIPS Options.       (line  432)
42940* mdivide-enabled:                       LM32 Options.       (line   12)
42941* mdivide-traps:                         MIPS Options.       (line  432)
42942* mdivsi3_libfunc=NAME:                  SH Options.         (line  199)
42943* mdll:                                  i386 and x86-64 Windows Options.
42944                                                             (line   30)
42945* mdlmzb:                                RS/6000 and PowerPC Options.
42946                                                             (line  431)
42947* mdmx:                                  MIPS Options.       (line  279)
42948* mdouble:                               FRV Options.        (line   38)
42949* mdouble-float <1>:                     RS/6000 and PowerPC Options.
42950                                                             (line  358)
42951* mdouble-float:                         MIPS Options.       (line  237)
42952* mdsp:                                  MIPS Options.       (line  256)
42953* mdspr2:                                MIPS Options.       (line  262)
42954* mdual-nops:                            SPU Options.        (line   90)
42955* mdwarf2-asm:                           IA-64 Options.      (line   94)
42956* mdword:                                FRV Options.        (line   32)
42957* mdynamic-no-pic:                       RS/6000 and PowerPC Options.
42958                                                             (line  489)
42959* mea32:                                 SPU Options.        (line   55)
42960* mea64:                                 SPU Options.        (line   55)
42961* meabi:                                 RS/6000 and PowerPC Options.
42962                                                             (line  630)
42963* mearly-stop-bits:                      IA-64 Options.      (line  100)
42964* meb <1>:                               Score Options.      (line    9)
42965* meb:                                   MeP Options.        (line   68)
42966* mel <1>:                               Score Options.      (line   12)
42967* mel:                                   MeP Options.        (line   71)
42968* melf <1>:                              MMIX Options.       (line   44)
42969* melf:                                  CRIS Options.       (line   87)
42970* memb:                                  RS/6000 and PowerPC Options.
42971                                                             (line  625)
42972* membedded-data:                        MIPS Options.       (line  373)
42973* memregs=:                              M32C Options.       (line   21)
42974* mep:                                   V850 Options.       (line   16)
42975* mepsilon:                              MMIX Options.       (line   15)
42976* merror-reloc:                          SPU Options.        (line   10)
42977* mesa:                                  S/390 and zSeries Options.
42978                                                             (line   95)
42979* metrax100:                             CRIS Options.       (line   26)
42980* metrax4:                               CRIS Options.       (line   26)
42981* mexplicit-relocs <1>:                  MIPS Options.       (line  417)
42982* mexplicit-relocs:                      DEC Alpha Options.  (line  184)
42983* mextern-sdata:                         MIPS Options.       (line  335)
42984* MF:                                    Preprocessor Options.
42985                                                             (line  208)
42986* mfast-fp:                              Blackfin Options.   (line  129)
42987* mfast-indirect-calls:                  HPPA Options.       (line   52)
42988* mfaster-structs:                       SPARC Options.      (line   71)
42989* mfdpic:                                FRV Options.        (line   56)
42990* mfix:                                  DEC Alpha Options.  (line  171)
42991* mfix-and-continue:                     Darwin Options.     (line  106)
42992* mfix-cortex-m3-ldrd:                   ARC Options.        (line   36)
42993* mfix-r10000:                           MIPS Options.       (line  503)
42994* mfix-r4000:                            MIPS Options.       (line  482)
42995* mfix-r4400:                            MIPS Options.       (line  496)
42996* mfix-sb1:                              MIPS Options.       (line  535)
42997* mfix-vr4120:                           MIPS Options.       (line  514)
42998* mfix-vr4130:                           MIPS Options.       (line  528)
42999* mfixed-cc:                             FRV Options.        (line   28)
43000* mfixed-range <1>:                      SPU Options.        (line   47)
43001* mfixed-range <2>:                      SH Options.         (line  206)
43002* mfixed-range <3>:                      IA-64 Options.      (line  105)
43003* mfixed-range:                          HPPA Options.       (line   59)
43004* mflip-mips16:                          MIPS Options.       (line  110)
43005* mfloat-abi:                            ARM Options.        (line   41)
43006* mfloat-gprs:                           RS/6000 and PowerPC Options.
43007                                                             (line  246)
43008* mfloat-ieee:                           DEC Alpha Options.  (line  179)
43009* mfloat-vax:                            DEC Alpha Options.  (line  179)
43010* mfloat32:                              PDP-11 Options.     (line   52)
43011* mfloat64:                              PDP-11 Options.     (line   48)
43012* mflush-func:                           MIPS Options.       (line  602)
43013* mflush-func=NAME:                      M32R/D Options.     (line   94)
43014* mflush-trap=NUMBER:                    M32R/D Options.     (line   87)
43015* mfmovd:                                SH Options.         (line   97)
43016* mfp:                                   ARM Options.        (line  119)
43017* mfp-exceptions:                        MIPS Options.       (line  629)
43018* mfp-reg:                               DEC Alpha Options.  (line   25)
43019* mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
43020* mfp-trap-mode:                         DEC Alpha Options.  (line   63)
43021* mfp16-format:                          ARM Options.        (line  131)
43022* mfp32:                                 MIPS Options.       (line  220)
43023* mfp64:                                 MIPS Options.       (line  223)
43024* mfpe:                                  ARM Options.        (line  119)
43025* mfpmath <1>:                           i386 and x86-64 Options.
43026                                                             (line  160)
43027* mfpmath:                               Optimize Options.   (line 1702)
43028* mfpr-32:                               FRV Options.        (line   13)
43029* mfpr-64:                               FRV Options.        (line   16)
43030* mfprnd:                                RS/6000 and PowerPC Options.
43031                                                             (line   33)
43032* mfpu <1>:                              SPARC Options.      (line   20)
43033* mfpu <2>:                              RS/6000 and PowerPC Options.
43034                                                             (line  366)
43035* mfpu <3>:                              PDP-11 Options.     (line    9)
43036* mfpu:                                  ARM Options.        (line  119)
43037* mfull-toc:                             RS/6000 and PowerPC Options.
43038                                                             (line  274)
43039* mfused-madd <1>:                       Xtensa Options.     (line   19)
43040* mfused-madd <2>:                       S/390 and zSeries Options.
43041                                                             (line  137)
43042* mfused-madd <3>:                       RS/6000 and PowerPC Options.
43043                                                             (line  418)
43044* mfused-madd <4>:                       MIPS Options.       (line  467)
43045* mfused-madd <5>:                       IA-64 Options.      (line   88)
43046* mfused-madd:                           i386 and x86-64 Options.
43047                                                             (line  467)
43048* mg:                                    VAX Options.        (line   17)
43049* MG:                                    Preprocessor Options.
43050                                                             (line  217)
43051* mgas <1>:                              HPPA Options.       (line   75)
43052* mgas:                                  DEC Alpha Options.  (line  159)
43053* mgen-cell-microcode:                   RS/6000 and PowerPC Options.
43054                                                             (line  199)
43055* mgettrcost=NUMBER:                     SH Options.         (line  228)
43056* mglibc:                                GNU/Linux Options.  (line    9)
43057* mgnu:                                  VAX Options.        (line   13)
43058* mgnu-as:                               IA-64 Options.      (line   18)
43059* mgnu-ld <1>:                           IA-64 Options.      (line   23)
43060* mgnu-ld:                               HPPA Options.       (line  111)
43061* mgotplt:                               CRIS Options.       (line   81)
43062* mgp32:                                 MIPS Options.       (line  214)
43063* mgp64:                                 MIPS Options.       (line  217)
43064* mgpopt:                                MIPS Options.       (line  358)
43065* mgpr-32:                               FRV Options.        (line    7)
43066* mgpr-64:                               FRV Options.        (line   10)
43067* mgprel-ro:                             FRV Options.        (line   79)
43068* mh:                                    H8/300 Options.     (line   14)
43069* mhard-dfp <1>:                         S/390 and zSeries Options.
43070                                                             (line   20)
43071* mhard-dfp:                             RS/6000 and PowerPC Options.
43072                                                             (line   33)
43073* mhard-float <1>:                       SPARC Options.      (line   20)
43074* mhard-float <2>:                       S/390 and zSeries Options.
43075                                                             (line   11)
43076* mhard-float <3>:                       RS/6000 and PowerPC Options.
43077                                                             (line  352)
43078* mhard-float <4>:                       MIPS Options.       (line  226)
43079* mhard-float <5>:                       M680x0 Options.     (line  196)
43080* mhard-float <6>:                       FRV Options.        (line   19)
43081* mhard-float:                           ARM Options.        (line   57)
43082* mhard-quad-float:                      SPARC Options.      (line   41)
43083* mhardlit:                              MCore Options.      (line   10)
43084* mhint-max-distance:                    SPU Options.        (line  102)
43085* mhint-max-nops:                        SPU Options.        (line   96)
43086* mhitachi:                              SH Options.         (line  101)
43087* mhp-ld:                                HPPA Options.       (line  123)
43088* micplb:                                Blackfin Options.   (line  169)
43089* mid-shared-library:                    Blackfin Options.   (line   77)
43090* mieee <1>:                             SH Options.         (line  116)
43091* mieee:                                 DEC Alpha Options.  (line   39)
43092* mieee-conformant:                      DEC Alpha Options.  (line  134)
43093* mieee-fp:                              i386 and x86-64 Options.
43094                                                             (line  215)
43095* mieee-with-inexact:                    DEC Alpha Options.  (line   52)
43096* milp32:                                IA-64 Options.      (line  121)
43097* mimpure-text:                          SPARC Options.      (line   81)
43098* mincoming-stack-boundary:              i386 and x86-64 Options.
43099                                                             (line  383)
43100* mindexed-addressing:                   SH Options.         (line  218)
43101* minline-all-stringops:                 i386 and x86-64 Options.
43102                                                             (line  590)
43103* minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
43104* minline-float-divide-min-latency:      IA-64 Options.      (line   54)
43105* minline-ic_invalidate:                 SH Options.         (line  123)
43106* minline-int-divide-max-throughput:     IA-64 Options.      (line   69)
43107* minline-int-divide-min-latency:        IA-64 Options.      (line   65)
43108* minline-plt <1>:                       FRV Options.        (line   64)
43109* minline-plt:                           Blackfin Options.   (line  134)
43110* minline-sqrt-max-throughput:           IA-64 Options.      (line   80)
43111* minline-sqrt-min-latency:              IA-64 Options.      (line   76)
43112* minline-stringops-dynamically:         i386 and x86-64 Options.
43113                                                             (line  597)
43114* minmax:                                M68hc1x Options.    (line   31)
43115* minsert-sched-nops:                    RS/6000 and PowerPC Options.
43116                                                             (line  511)
43117* mint-register:                         RX Options.         (line  100)
43118* mint16:                                PDP-11 Options.     (line   40)
43119* mint32 <1>:                            PDP-11 Options.     (line   44)
43120* mint32:                                H8/300 Options.     (line   28)
43121* mint8:                                 AVR Options.        (line   43)
43122* minterlink-mips16:                     MIPS Options.       (line  117)
43123* minvalid-symbols:                      SH Options.         (line  251)
43124* mio-volatile:                          MeP Options.        (line   74)
43125* mips1:                                 MIPS Options.       (line   77)
43126* mips16:                                MIPS Options.       (line  102)
43127* mips2:                                 MIPS Options.       (line   80)
43128* mips3:                                 MIPS Options.       (line   83)
43129* mips32:                                MIPS Options.       (line   89)
43130* mips32r2:                              MIPS Options.       (line   92)
43131* mips3d:                                MIPS Options.       (line  285)
43132* mips4:                                 MIPS Options.       (line   86)
43133* mips64:                                MIPS Options.       (line   95)
43134* mips64r2:                              MIPS Options.       (line   98)
43135* misel:                                 RS/6000 and PowerPC Options.
43136                                                             (line  217)
43137* misize:                                SH Options.         (line  135)
43138* missue-rate=NUMBER:                    M32R/D Options.     (line   79)
43139* mivc2:                                 MeP Options.        (line   59)
43140* mjump-in-delay:                        HPPA Options.       (line   28)
43141* mkernel:                               Darwin Options.     (line   84)
43142* mknuthdiv:                             MMIX Options.       (line   33)
43143* ml <1>:                                SH Options.         (line   77)
43144* ml:                                    MeP Options.        (line   78)
43145* mlarge-data:                           DEC Alpha Options.  (line  195)
43146* mlarge-data-threshold=NUMBER:          i386 and x86-64 Options.
43147                                                             (line  295)
43148* mlarge-mem:                            SPU Options.        (line   35)
43149* mlarge-text:                           DEC Alpha Options.  (line  213)
43150* mleadz:                                MeP Options.        (line   81)
43151* mleaf-id-shared-library:               Blackfin Options.   (line   88)
43152* mlibfuncs:                             MMIX Options.       (line   10)
43153* mlibrary-pic:                          FRV Options.        (line  110)
43154* mlinked-fp:                            FRV Options.        (line   94)
43155* mlinker-opt:                           HPPA Options.       (line   85)
43156* mlinux:                                CRIS Options.       (line   91)
43157* mlittle:                               RS/6000 and PowerPC Options.
43158                                                             (line  478)
43159* mlittle-endian <1>:                    SPARC Options.      (line  185)
43160* mlittle-endian <2>:                    RS/6000 and PowerPC Options.
43161                                                             (line  478)
43162* mlittle-endian <3>:                    MCore Options.      (line   39)
43163* mlittle-endian <4>:                    IA-64 Options.      (line   13)
43164* mlittle-endian:                        ARM Options.        (line   63)
43165* mlittle-endian-data:                   RX Options.         (line   43)
43166* mllsc:                                 MIPS Options.       (line  242)
43167* mlocal-sdata:                          MIPS Options.       (line  323)
43168* mlong-calls <1>:                       V850 Options.       (line   10)
43169* mlong-calls <2>:                       MIPS Options.       (line  453)
43170* mlong-calls <3>:                       M68hc1x Options.    (line   35)
43171* mlong-calls <4>:                       FRV Options.        (line   99)
43172* mlong-calls <5>:                       Blackfin Options.   (line  117)
43173* mlong-calls:                           ARM Options.        (line  157)
43174* mlong-double-128:                      S/390 and zSeries Options.
43175                                                             (line   29)
43176* mlong-double-64:                       S/390 and zSeries Options.
43177                                                             (line   29)
43178* mlong-load-store:                      HPPA Options.       (line   66)
43179* mlong32:                               MIPS Options.       (line  298)
43180* mlong64:                               MIPS Options.       (line  293)
43181* mlongcall:                             RS/6000 and PowerPC Options.
43182                                                             (line  696)
43183* mlongcalls:                            Xtensa Options.     (line   67)
43184* mlow-64k:                              Blackfin Options.   (line   66)
43185* mlp64:                                 IA-64 Options.      (line  121)
43186* mm:                                    MeP Options.        (line   84)
43187* MM:                                    Preprocessor Options.
43188                                                             (line  198)
43189* mmac <1>:                              Score Options.      (line   21)
43190* mmac:                                  CRX Options.        (line    9)
43191* mmad:                                  MIPS Options.       (line  462)
43192* mmalloc64 <1>:                         IA-64/VMS Options.  (line   17)
43193* mmalloc64:                             DEC Alpha/VMS Options.
43194                                                             (line   17)
43195* mmangle-cpu:                           ARC Options.        (line   15)
43196* mmax:                                  DEC Alpha Options.  (line  171)
43197* mmax-constant-size:                    RX Options.         (line   82)
43198* mmax-stack-frame:                      CRIS Options.       (line   22)
43199* mmcount-ra-address:                    MIPS Options.       (line  678)
43200* mmcu:                                  AVR Options.        (line    9)
43201* MMD:                                   Preprocessor Options.
43202                                                             (line  278)
43203* mmedia:                                FRV Options.        (line   44)
43204* mmemcpy:                               MIPS Options.       (line  447)
43205* mmemory-latency:                       DEC Alpha Options.  (line  276)
43206* mmfcrf:                                RS/6000 and PowerPC Options.
43207                                                             (line   33)
43208* mmfpgpr:                               RS/6000 and PowerPC Options.
43209                                                             (line   33)
43210* mminimal-toc:                          RS/6000 and PowerPC Options.
43211                                                             (line  274)
43212* mminmax:                               MeP Options.        (line   87)
43213* mmmx:                                  i386 and x86-64 Options.
43214                                                             (line  443)
43215* mmodel=large:                          M32R/D Options.     (line   33)
43216* mmodel=medium:                         M32R/D Options.     (line   27)
43217* mmodel=small:                          M32R/D Options.     (line   18)
43218* mmovbe:                                i386 and x86-64 Options.
43219                                                             (line  504)
43220* mmt:                                   MIPS Options.       (line  290)
43221* mmul-bug-workaround:                   CRIS Options.       (line   31)
43222* mmuladd:                               FRV Options.        (line   50)
43223* mmulhw:                                RS/6000 and PowerPC Options.
43224                                                             (line  424)
43225* mmult:                                 MeP Options.        (line   90)
43226* mmult-bug:                             MN10300 Options.    (line    9)
43227* mmulti-cond-exec:                      FRV Options.        (line  176)
43228* mmulticore:                            Blackfin Options.   (line  138)
43229* mmultiple:                             RS/6000 and PowerPC Options.
43230                                                             (line  377)
43231* mmvcle:                                S/390 and zSeries Options.
43232                                                             (line  105)
43233* mmvme:                                 RS/6000 and PowerPC Options.
43234                                                             (line  606)
43235* mn:                                    H8/300 Options.     (line   20)
43236* mnested-cond-exec:                     FRV Options.        (line  189)
43237* mnew-mnemonics:                        RS/6000 and PowerPC Options.
43238                                                             (line  104)
43239* mnhwloop:                              Score Options.      (line   15)
43240* mno-3dnow:                             i386 and x86-64 Options.
43241                                                             (line  443)
43242* mno-4byte-functions:                   MCore Options.      (line   27)
43243* mno-abicalls:                          MIPS Options.       (line  154)
43244* mno-abshi:                             PDP-11 Options.     (line   58)
43245* mno-ac0:                               PDP-11 Options.     (line   20)
43246* mno-address-space-conversion:          SPU Options.        (line   63)
43247* mno-align-double:                      i386 and x86-64 Options.
43248                                                             (line  253)
43249* mno-align-int:                         M680x0 Options.     (line  266)
43250* mno-align-loops:                       M32R/D Options.     (line   76)
43251* mno-align-stringops:                   i386 and x86-64 Options.
43252                                                             (line  585)
43253* mno-altivec:                           RS/6000 and PowerPC Options.
43254                                                             (line  188)
43255* mno-am33:                              MN10300 Options.    (line   20)
43256* mno-app-regs <1>:                      V850 Options.       (line   61)
43257* mno-app-regs:                          SPARC Options.      (line   10)
43258* mno-as100-syntax:                      RX Options.         (line   76)
43259* mno-atomic-updates:                    SPU Options.        (line   78)
43260* mno-avoid-indexed-addresses:           RS/6000 and PowerPC Options.
43261                                                             (line  409)
43262* mno-backchain:                         S/390 and zSeries Options.
43263                                                             (line   35)
43264* mno-base-addresses:                    MMIX Options.       (line   54)
43265* mno-bit-align:                         RS/6000 and PowerPC Options.
43266                                                             (line  438)
43267* mno-bitfield:                          M680x0 Options.     (line  230)
43268* mno-branch-likely:                     MIPS Options.       (line  618)
43269* mno-branch-predict:                    MMIX Options.       (line   49)
43270* mno-bwx:                               DEC Alpha Options.  (line  171)
43271* mno-callgraph-data:                    MCore Options.      (line   31)
43272* mno-check-zero-division:               MIPS Options.       (line  426)
43273* mno-cirrus-fix-invalid-insns:          ARM Options.        (line  192)
43274* mno-cix:                               DEC Alpha Options.  (line  171)
43275* mno-cmpb:                              RS/6000 and PowerPC Options.
43276                                                             (line   33)
43277* mno-cond-exec:                         FRV Options.        (line  158)
43278* mno-cond-move:                         FRV Options.        (line  134)
43279* mno-const-align:                       CRIS Options.       (line   55)
43280* mno-const16:                           Xtensa Options.     (line   10)
43281* mno-crt0:                              MN10300 Options.    (line   31)
43282* mno-csync-anomaly:                     Blackfin Options.   (line   62)
43283* mno-cygwin:                            i386 and x86-64 Windows Options.
43284                                                             (line   23)
43285* mno-data-align:                        CRIS Options.       (line   55)
43286* mno-debug:                             S/390 and zSeries Options.
43287                                                             (line  112)
43288* mno-div <1>:                           MCore Options.      (line   15)
43289* mno-div:                               M680x0 Options.     (line  208)
43290* mno-dlmzb:                             RS/6000 and PowerPC Options.
43291                                                             (line  431)
43292* mno-double:                            FRV Options.        (line   41)
43293* mno-dsp:                               MIPS Options.       (line  256)
43294* mno-dspr2:                             MIPS Options.       (line  262)
43295* mno-dwarf2-asm:                        IA-64 Options.      (line   94)
43296* mno-dword:                             FRV Options.        (line   35)
43297* mno-eabi:                              RS/6000 and PowerPC Options.
43298                                                             (line  630)
43299* mno-early-stop-bits:                   IA-64 Options.      (line  100)
43300* mno-eflags:                            FRV Options.        (line  125)
43301* mno-embedded-data:                     MIPS Options.       (line  373)
43302* mno-ep:                                V850 Options.       (line   16)
43303* mno-epsilon:                           MMIX Options.       (line   15)
43304* mno-explicit-relocs <1>:               MIPS Options.       (line  417)
43305* mno-explicit-relocs:                   DEC Alpha Options.  (line  184)
43306* mno-extern-sdata:                      MIPS Options.       (line  335)
43307* mno-fancy-math-387:                    i386 and x86-64 Options.
43308                                                             (line  242)
43309* mno-faster-structs:                    SPARC Options.      (line   71)
43310* mno-fix:                               DEC Alpha Options.  (line  171)
43311* mno-fix-r10000:                        MIPS Options.       (line  503)
43312* mno-fix-r4000:                         MIPS Options.       (line  482)
43313* mno-fix-r4400:                         MIPS Options.       (line  496)
43314* mno-float32:                           PDP-11 Options.     (line   48)
43315* mno-float64:                           PDP-11 Options.     (line   52)
43316* mno-flush-func:                        M32R/D Options.     (line   99)
43317* mno-flush-trap:                        M32R/D Options.     (line   91)
43318* mno-fp-in-toc:                         RS/6000 and PowerPC Options.
43319                                                             (line  274)
43320* mno-fp-regs:                           DEC Alpha Options.  (line   25)
43321* mno-fp-ret-in-387:                     i386 and x86-64 Options.
43322                                                             (line  232)
43323* mno-fprnd:                             RS/6000 and PowerPC Options.
43324                                                             (line   33)
43325* mno-fpu:                               SPARC Options.      (line   25)
43326* mno-fused-madd <1>:                    Xtensa Options.     (line   19)
43327* mno-fused-madd <2>:                    S/390 and zSeries Options.
43328                                                             (line  137)
43329* mno-fused-madd <3>:                    RS/6000 and PowerPC Options.
43330                                                             (line  418)
43331* mno-fused-madd <4>:                    MIPS Options.       (line  467)
43332* mno-fused-madd <5>:                    IA-64 Options.      (line   88)
43333* mno-fused-madd:                        i386 and x86-64 Options.
43334                                                             (line  467)
43335* mno-gnu-as:                            IA-64 Options.      (line   18)
43336* mno-gnu-ld:                            IA-64 Options.      (line   23)
43337* mno-gotplt:                            CRIS Options.       (line   81)
43338* mno-gpopt:                             MIPS Options.       (line  358)
43339* mno-hard-dfp <1>:                      S/390 and zSeries Options.
43340                                                             (line   20)
43341* mno-hard-dfp:                          RS/6000 and PowerPC Options.
43342                                                             (line   33)
43343* mno-hardlit:                           MCore Options.      (line   10)
43344* mno-id-shared-library:                 Blackfin Options.   (line   84)
43345* mno-ieee-fp:                           i386 and x86-64 Options.
43346                                                             (line  215)
43347* mno-inline-float-divide:               IA-64 Options.      (line   62)
43348* mno-inline-int-divide:                 IA-64 Options.      (line   73)
43349* mno-inline-sqrt:                       IA-64 Options.      (line   84)
43350* mno-int16:                             PDP-11 Options.     (line   44)
43351* mno-int32:                             PDP-11 Options.     (line   40)
43352* mno-interlink-mips16:                  MIPS Options.       (line  117)
43353* mno-interrupts:                        AVR Options.        (line   32)
43354* mno-isel:                              RS/6000 and PowerPC Options.
43355                                                             (line  217)
43356* mno-knuthdiv:                          MMIX Options.       (line   33)
43357* mno-leaf-id-shared-library:            Blackfin Options.   (line   94)
43358* mno-libfuncs:                          MMIX Options.       (line   10)
43359* mno-llsc:                              MIPS Options.       (line  242)
43360* mno-local-sdata:                       MIPS Options.       (line  323)
43361* mno-long-calls <1>:                    V850 Options.       (line   10)
43362* mno-long-calls <2>:                    MIPS Options.       (line  453)
43363* mno-long-calls <3>:                    M68hc1x Options.    (line   35)
43364* mno-long-calls <4>:                    HPPA Options.       (line  136)
43365* mno-long-calls <5>:                    Blackfin Options.   (line  117)
43366* mno-long-calls:                        ARM Options.        (line  157)
43367* mno-longcall:                          RS/6000 and PowerPC Options.
43368                                                             (line  696)
43369* mno-longcalls:                         Xtensa Options.     (line   67)
43370* mno-low-64k:                           Blackfin Options.   (line   70)
43371* mno-lsim <1>:                          MCore Options.      (line   46)
43372* mno-lsim:                              FR30 Options.       (line   14)
43373* mno-mad:                               MIPS Options.       (line  462)
43374* mno-max:                               DEC Alpha Options.  (line  171)
43375* mno-mcount-ra-address:                 MIPS Options.       (line  678)
43376* mno-mdmx:                              MIPS Options.       (line  279)
43377* mno-media:                             FRV Options.        (line   47)
43378* mno-memcpy:                            MIPS Options.       (line  447)
43379* mno-mfcrf:                             RS/6000 and PowerPC Options.
43380                                                             (line   33)
43381* mno-mfpgpr:                            RS/6000 and PowerPC Options.
43382                                                             (line   33)
43383* mno-mips16:                            MIPS Options.       (line  102)
43384* mno-mips3d:                            MIPS Options.       (line  285)
43385* mno-mmx:                               i386 and x86-64 Options.
43386                                                             (line  443)
43387* mno-mt:                                MIPS Options.       (line  290)
43388* mno-mul-bug-workaround:                CRIS Options.       (line   31)
43389* mno-muladd:                            FRV Options.        (line   53)
43390* mno-mulhw:                             RS/6000 and PowerPC Options.
43391                                                             (line  424)
43392* mno-mult-bug:                          MN10300 Options.    (line   13)
43393* mno-multi-cond-exec:                   FRV Options.        (line  183)
43394* mno-multiple:                          RS/6000 and PowerPC Options.
43395                                                             (line  377)
43396* mno-mvcle:                             S/390 and zSeries Options.
43397                                                             (line  105)
43398* mno-nested-cond-exec:                  FRV Options.        (line  195)
43399* mno-optimize-membar:                   FRV Options.        (line  205)
43400* mno-opts:                              MeP Options.        (line   93)
43401* mno-pack:                              FRV Options.        (line  122)
43402* mno-packed-stack:                      S/390 and zSeries Options.
43403                                                             (line   54)
43404* mno-paired:                            RS/6000 and PowerPC Options.
43405                                                             (line  231)
43406* mno-paired-single:                     MIPS Options.       (line  273)
43407* mno-pic:                               IA-64 Options.      (line   26)
43408* mno-plt:                               MIPS Options.       (line  181)
43409* mno-popcntb:                           RS/6000 and PowerPC Options.
43410                                                             (line   33)
43411* mno-popcntd:                           RS/6000 and PowerPC Options.
43412                                                             (line   33)
43413* mno-power:                             RS/6000 and PowerPC Options.
43414                                                             (line   33)
43415* mno-power2:                            RS/6000 and PowerPC Options.
43416                                                             (line   33)
43417* mno-powerpc:                           RS/6000 and PowerPC Options.
43418                                                             (line   33)
43419* mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
43420                                                             (line   33)
43421* mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
43422                                                             (line   33)
43423* mno-powerpc64:                         RS/6000 and PowerPC Options.
43424                                                             (line   33)
43425* mno-prolog-function:                   V850 Options.       (line   23)
43426* mno-prologue-epilogue:                 CRIS Options.       (line   71)
43427* mno-prototype:                         RS/6000 and PowerPC Options.
43428                                                             (line  590)
43429* mno-push-args:                         i386 and x86-64 Options.
43430                                                             (line  562)
43431* mno-red-zone:                          i386 and x86-64 Options.
43432                                                             (line  644)
43433* mno-register-names:                    IA-64 Options.      (line   37)
43434* mno-regnames:                          RS/6000 and PowerPC Options.
43435                                                             (line  690)
43436* mno-relax-immediate:                   MCore Options.      (line   19)
43437* mno-relocatable:                       RS/6000 and PowerPC Options.
43438                                                             (line  455)
43439* mno-relocatable-lib:                   RS/6000 and PowerPC Options.
43440                                                             (line  463)
43441* mno-rtd:                               M680x0 Options.     (line  261)
43442* mno-scc:                               FRV Options.        (line  146)
43443* mno-sched-ar-data-spec:                IA-64 Options.      (line  135)
43444* mno-sched-ar-in-data-spec:             IA-64 Options.      (line  156)
43445* mno-sched-br-data-spec:                IA-64 Options.      (line  128)
43446* mno-sched-br-in-data-spec:             IA-64 Options.      (line  149)
43447* mno-sched-control-spec:                IA-64 Options.      (line  142)
43448* mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  183)
43449* mno-sched-in-control-spec:             IA-64 Options.      (line  163)
43450* mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  176)
43451* mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  169)
43452* mno-sched-prolog:                      ARM Options.        (line   32)
43453* mno-sdata <1>:                         RS/6000 and PowerPC Options.
43454                                                             (line  677)
43455* mno-sdata:                             IA-64 Options.      (line   42)
43456* mno-sep-data:                          Blackfin Options.   (line  112)
43457* mno-serialize-volatile:                Xtensa Options.     (line   35)
43458* mno-short:                             M680x0 Options.     (line  225)
43459* mno-side-effects:                      CRIS Options.       (line   46)
43460* mno-sim:                               RX Options.         (line   71)
43461* mno-single-exit:                       MMIX Options.       (line   66)
43462* mno-slow-bytes:                        MCore Options.      (line   35)
43463* mno-small-exec:                        S/390 and zSeries Options.
43464                                                             (line   80)
43465* mno-smartmips:                         MIPS Options.       (line  269)
43466* mno-soft-float:                        DEC Alpha Options.  (line   10)
43467* mno-space-regs:                        HPPA Options.       (line   45)
43468* mno-spe:                               RS/6000 and PowerPC Options.
43469                                                             (line  226)
43470* mno-specld-anomaly:                    Blackfin Options.   (line   52)
43471* mno-split:                             PDP-11 Options.     (line   71)
43472* mno-split-addresses:                   MIPS Options.       (line  411)
43473* mno-sse:                               i386 and x86-64 Options.
43474                                                             (line  443)
43475* mno-stack-align:                       CRIS Options.       (line   55)
43476* mno-stack-bias:                        SPARC Options.      (line  222)
43477* mno-strict-align <1>:                  RS/6000 and PowerPC Options.
43478                                                             (line  450)
43479* mno-strict-align:                      M680x0 Options.     (line  286)
43480* mno-string:                            RS/6000 and PowerPC Options.
43481                                                             (line  388)
43482* mno-sum-in-toc:                        RS/6000 and PowerPC Options.
43483                                                             (line  274)
43484* mno-swdiv:                             RS/6000 and PowerPC Options.
43485                                                             (line  178)
43486* mno-sym32:                             MIPS Options.       (line  308)
43487* mno-target-align:                      Xtensa Options.     (line   54)
43488* mno-text-section-literals:             Xtensa Options.     (line   42)
43489* mno-tls-markers:                       RS/6000 and PowerPC Options.
43490                                                             (line  729)
43491* mno-toc:                               RS/6000 and PowerPC Options.
43492                                                             (line  472)
43493* mno-toplevel-symbols:                  MMIX Options.       (line   40)
43494* mno-tpf-trace:                         S/390 and zSeries Options.
43495                                                             (line  131)
43496* mno-unaligned-doubles:                 SPARC Options.      (line   59)
43497* mno-uninit-const-in-rodata:            MIPS Options.       (line  381)
43498* mno-update:                            RS/6000 and PowerPC Options.
43499                                                             (line  399)
43500* mno-v8plus:                            SPARC Options.      (line  170)
43501* mno-vis:                               SPARC Options.      (line  177)
43502* mno-vliw-branch:                       FRV Options.        (line  170)
43503* mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
43504* mno-vrsave:                            RS/6000 and PowerPC Options.
43505                                                             (line  196)
43506* mno-vsx:                               RS/6000 and PowerPC Options.
43507                                                             (line  240)
43508* mno-wide-bitfields:                    MCore Options.      (line   23)
43509* mno-xgot <1>:                          MIPS Options.       (line  191)
43510* mno-xgot:                              M680x0 Options.     (line  318)
43511* mno-xl-compat:                         RS/6000 and PowerPC Options.
43512                                                             (line  309)
43513* mno-zero-extend:                       MMIX Options.       (line   27)
43514* mnobitfield:                           M680x0 Options.     (line  230)
43515* mnomacsave:                            SH Options.         (line  112)
43516* mnominmax:                             M68hc1x Options.    (line   31)
43517* mnop-fun-dllimport:                    i386 and x86-64 Windows Options.
43518                                                             (line   36)
43519* mold-mnemonics:                        RS/6000 and PowerPC Options.
43520                                                             (line  104)
43521* momit-leaf-frame-pointer <1>:          i386 and x86-64 Options.
43522                                                             (line  610)
43523* momit-leaf-frame-pointer:              Blackfin Options.   (line   40)
43524* mone-byte-bool:                        Darwin Options.     (line   92)
43525* moptimize-membar:                      FRV Options.        (line  201)
43526* MP:                                    Preprocessor Options.
43527                                                             (line  227)
43528* mpa-risc-1-0:                          HPPA Options.       (line   19)
43529* mpa-risc-1-1:                          HPPA Options.       (line   19)
43530* mpa-risc-2-0:                          HPPA Options.       (line   19)
43531* mpack:                                 FRV Options.        (line  119)
43532* mpacked-stack:                         S/390 and zSeries Options.
43533                                                             (line   54)
43534* mpadstruct:                            SH Options.         (line  138)
43535* mpaired:                               RS/6000 and PowerPC Options.
43536                                                             (line  231)
43537* mpaired-single:                        MIPS Options.       (line  273)
43538* mpc32:                                 i386 and x86-64 Options.
43539                                                             (line  348)
43540* mpc64:                                 i386 and x86-64 Options.
43541                                                             (line  348)
43542* mpc80:                                 i386 and x86-64 Options.
43543                                                             (line  348)
43544* mpcrel:                                M680x0 Options.     (line  278)
43545* mpdebug:                               CRIS Options.       (line   35)
43546* mpe:                                   RS/6000 and PowerPC Options.
43547                                                             (line  329)
43548* mpe-aligned-commons:                   i386 and x86-64 Windows Options.
43549                                                             (line   67)
43550* mpic-register:                         ARM Options.        (line  188)
43551* mplt:                                  MIPS Options.       (line  181)
43552* mpoke-function-name:                   ARM Options.        (line  202)
43553* mpopcntb:                              RS/6000 and PowerPC Options.
43554                                                             (line   33)
43555* mpopcntd:                              RS/6000 and PowerPC Options.
43556                                                             (line   33)
43557* mportable-runtime:                     HPPA Options.       (line   71)
43558* mpower:                                RS/6000 and PowerPC Options.
43559                                                             (line   33)
43560* mpower2:                               RS/6000 and PowerPC Options.
43561                                                             (line   33)
43562* mpowerpc:                              RS/6000 and PowerPC Options.
43563                                                             (line   33)
43564* mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
43565                                                             (line   33)
43566* mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
43567                                                             (line   33)
43568* mpowerpc64:                            RS/6000 and PowerPC Options.
43569                                                             (line   33)
43570* mprefergot:                            SH Options.         (line  145)
43571* mpreferred-stack-boundary:             i386 and x86-64 Options.
43572                                                             (line  378)
43573* mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
43574                                                             (line  495)
43575* mprolog-function:                      V850 Options.       (line   23)
43576* mprologue-epilogue:                    CRIS Options.       (line   71)
43577* mprototype:                            RS/6000 and PowerPC Options.
43578                                                             (line  590)
43579* mpt-fixed:                             SH Options.         (line  232)
43580* mpush-args <1>:                        i386 and x86-64 Options.
43581                                                             (line  562)
43582* mpush-args:                            CRX Options.        (line   13)
43583* MQ:                                    Preprocessor Options.
43584                                                             (line  253)
43585* mr10k-cache-barrier:                   MIPS Options.       (line  540)
43586* mrecip:                                i386 and x86-64 Options.
43587                                                             (line  514)
43588* mregister-names:                       IA-64 Options.      (line   37)
43589* mregnames:                             RS/6000 and PowerPC Options.
43590                                                             (line  690)
43591* mregparm:                              i386 and x86-64 Options.
43592                                                             (line  325)
43593* mrelax <1>:                            SH Options.         (line   86)
43594* mrelax <2>:                            RX Options.         (line   95)
43595* mrelax <3>:                            MN10300 Options.    (line   34)
43596* mrelax:                                H8/300 Options.     (line    9)
43597* mrelax-immediate:                      MCore Options.      (line   19)
43598* mrelax-pic-calls:                      MIPS Options.       (line  665)
43599* mrelocatable:                          RS/6000 and PowerPC Options.
43600                                                             (line  455)
43601* mrelocatable-lib:                      RS/6000 and PowerPC Options.
43602                                                             (line  463)
43603* mrepeat:                               MeP Options.        (line   96)
43604* mreturn-pointer-on-d0:                 MN10300 Options.    (line   24)
43605* mrodata:                               ARC Options.        (line   30)
43606* mrtd <1>:                              Function Attributes.
43607                                                             (line  177)
43608* mrtd <2>:                              M680x0 Options.     (line  239)
43609* mrtd:                                  i386 and x86-64 Options.
43610                                                             (line  301)
43611* mrtp:                                  VxWorks Options.    (line   11)
43612* ms <1>:                                MeP Options.        (line  100)
43613* ms:                                    H8/300 Options.     (line   17)
43614* ms2600:                                H8/300 Options.     (line   24)
43615* msafe-dma:                             SPU Options.        (line   17)
43616* msafe-hints:                           SPU Options.        (line  107)
43617* msahf:                                 i386 and x86-64 Options.
43618                                                             (line  494)
43619* msatur:                                MeP Options.        (line  105)
43620* msave-acc-in-interrupts:               RX Options.         (line  109)
43621* mscc:                                  FRV Options.        (line  140)
43622* msched-ar-data-spec:                   IA-64 Options.      (line  135)
43623* msched-ar-in-data-spec:                IA-64 Options.      (line  156)
43624* msched-br-data-spec:                   IA-64 Options.      (line  128)
43625* msched-br-in-data-spec:                IA-64 Options.      (line  149)
43626* msched-control-spec:                   IA-64 Options.      (line  142)
43627* msched-costly-dep:                     RS/6000 and PowerPC Options.
43628                                                             (line  502)
43629* msched-count-spec-in-critical-path:    IA-64 Options.      (line  183)
43630* msched-fp-mem-deps-zero-cost:          IA-64 Options.      (line  200)
43631* msched-in-control-spec:                IA-64 Options.      (line  163)
43632* msched-max-memory-insns:               IA-64 Options.      (line  209)
43633* msched-max-memory-insns-hard-limit:    IA-64 Options.      (line  215)
43634* msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  176)
43635* msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  169)
43636* msched-spec-ldc:                       IA-64 Options.      (line  189)
43637* msched-stop-bits-after-every-cycle:    IA-64 Options.      (line  196)
43638* mschedule:                             HPPA Options.       (line   78)
43639* mscore5:                               Score Options.      (line   25)
43640* mscore5u:                              Score Options.      (line   28)
43641* mscore7:                               Score Options.      (line   31)
43642* mscore7d:                              Score Options.      (line   34)
43643* msda:                                  V850 Options.       (line   40)
43644* msdata <1>:                            RS/6000 and PowerPC Options.
43645                                                             (line  664)
43646* msdata:                                IA-64 Options.      (line   42)
43647* msdata=data:                           RS/6000 and PowerPC Options.
43648                                                             (line  669)
43649* msdata=default:                        RS/6000 and PowerPC Options.
43650                                                             (line  664)
43651* msdata=eabi:                           RS/6000 and PowerPC Options.
43652                                                             (line  644)
43653* msdata=none <1>:                       RS/6000 and PowerPC Options.
43654                                                             (line  677)
43655* msdata=none:                           M32R/D Options.     (line   40)
43656* msdata=sdata:                          M32R/D Options.     (line   49)
43657* msdata=sysv:                           RS/6000 and PowerPC Options.
43658                                                             (line  655)
43659* msdata=use:                            M32R/D Options.     (line   53)
43660* msdram <1>:                            MeP Options.        (line  110)
43661* msdram:                                Blackfin Options.   (line  163)
43662* msecure-plt:                           RS/6000 and PowerPC Options.
43663                                                             (line  206)
43664* msel-sched-dont-check-control-spec:    IA-64 Options.      (line  205)
43665* msep-data:                             Blackfin Options.   (line  106)
43666* mserialize-volatile:                   Xtensa Options.     (line   35)
43667* mshared-library-id:                    Blackfin Options.   (line   99)
43668* mshort <1>:                            M68hc1x Options.    (line   40)
43669* mshort:                                M680x0 Options.     (line  219)
43670* msign-extend-enabled:                  LM32 Options.       (line   18)
43671* msim <1>:                              Xstormy16 Options.  (line    9)
43672* msim <2>:                              RX Options.         (line   71)
43673* msim <3>:                              RS/6000 and PowerPC Options.
43674                                                             (line  600)
43675* msim <4>:                              MeP Options.        (line  114)
43676* msim <5>:                              M32C Options.       (line   13)
43677* msim:                                  Blackfin Options.   (line   33)
43678* msimnovec:                             MeP Options.        (line  117)
43679* msimple-fpu:                           RS/6000 and PowerPC Options.
43680                                                             (line  362)
43681* msingle-exit:                          MMIX Options.       (line   66)
43682* msingle-float <1>:                     RS/6000 and PowerPC Options.
43683                                                             (line  358)
43684* msingle-float:                         MIPS Options.       (line  233)
43685* msingle-pic-base:                      ARM Options.        (line  182)
43686* msio:                                  HPPA Options.       (line  105)
43687* mslow-bytes:                           MCore Options.      (line   35)
43688* msmall-data:                           DEC Alpha Options.  (line  195)
43689* msmall-data-limit:                     RX Options.         (line   48)
43690* msmall-exec:                           S/390 and zSeries Options.
43691                                                             (line   80)
43692* msmall-mem:                            SPU Options.        (line   35)
43693* msmall-model:                          FR30 Options.       (line    9)
43694* msmall-text:                           DEC Alpha Options.  (line  213)
43695* msmartmips:                            MIPS Options.       (line  269)
43696* msoft-float <1>:                       SPARC Options.      (line   25)
43697* msoft-float <2>:                       S/390 and zSeries Options.
43698                                                             (line   11)
43699* msoft-float <3>:                       RS/6000 and PowerPC Options.
43700                                                             (line  352)
43701* msoft-float <4>:                       PDP-11 Options.     (line   13)
43702* msoft-float <5>:                       MIPS Options.       (line  229)
43703* msoft-float <6>:                       M680x0 Options.     (line  202)
43704* msoft-float <7>:                       i386 and x86-64 Options.
43705                                                             (line  220)
43706* msoft-float <8>:                       HPPA Options.       (line   91)
43707* msoft-float <9>:                       FRV Options.        (line   22)
43708* msoft-float <10>:                      DEC Alpha Options.  (line   10)
43709* msoft-float:                           ARM Options.        (line   60)
43710* msoft-quad-float:                      SPARC Options.      (line   45)
43711* msoft-reg-count:                       M68hc1x Options.    (line   43)
43712* mspace <1>:                            V850 Options.       (line   30)
43713* mspace:                                SH Options.         (line  142)
43714* mspe:                                  RS/6000 and PowerPC Options.
43715                                                             (line  226)
43716* mspecld-anomaly:                       Blackfin Options.   (line   47)
43717* msplit:                                PDP-11 Options.     (line   68)
43718* msplit-addresses:                      MIPS Options.       (line  411)
43719* msse:                                  i386 and x86-64 Options.
43720                                                             (line  443)
43721* msse2avx:                              i386 and x86-64 Options.
43722                                                             (line  628)
43723* msseregparm:                           i386 and x86-64 Options.
43724                                                             (line  336)
43725* mstack-align:                          CRIS Options.       (line   55)
43726* mstack-bias:                           SPARC Options.      (line  222)
43727* mstack-check-l1:                       Blackfin Options.   (line   73)
43728* mstack-guard:                          S/390 and zSeries Options.
43729                                                             (line  156)
43730* mstack-increment:                      MCore Options.      (line   50)
43731* mstack-size:                           S/390 and zSeries Options.
43732                                                             (line  156)
43733* mstackrealign:                         i386 and x86-64 Options.
43734                                                             (line  369)
43735* mstdmain:                              SPU Options.        (line   40)
43736* mstrict-align <1>:                     RS/6000 and PowerPC Options.
43737                                                             (line  450)
43738* mstrict-align:                         M680x0 Options.     (line  286)
43739* mstring:                               RS/6000 and PowerPC Options.
43740                                                             (line  388)
43741* mstringop-strategy=ALG:                i386 and x86-64 Options.
43742                                                             (line  602)
43743* mstructure-size-boundary:              ARM Options.        (line  137)
43744* msvr4-struct-return:                   RS/6000 and PowerPC Options.
43745                                                             (line  564)
43746* mswdiv:                                RS/6000 and PowerPC Options.
43747                                                             (line  178)
43748* msym32:                                MIPS Options.       (line  308)
43749* msynci:                                MIPS Options.       (line  650)
43750* MT:                                    Preprocessor Options.
43751                                                             (line  239)
43752* mtarget-align:                         Xtensa Options.     (line   54)
43753* mtda:                                  V850 Options.       (line   34)
43754* mtext:                                 ARC Options.        (line   30)
43755* mtext-section-literals:                Xtensa Options.     (line   42)
43756* mtf:                                   MeP Options.        (line  121)
43757* mthread:                               i386 and x86-64 Windows Options.
43758                                                             (line   40)
43759* mthreads:                              i386 and x86-64 Options.
43760                                                             (line  577)
43761* mthumb:                                ARM Options.        (line  223)
43762* mthumb-interwork:                      ARM Options.        (line   25)
43763* mtiny-stack:                           AVR Options.        (line   40)
43764* mtiny=:                                MeP Options.        (line  125)
43765* mtls:                                  FRV Options.        (line   75)
43766* mTLS:                                  FRV Options.        (line   72)
43767* mtls-direct-seg-refs:                  i386 and x86-64 Options.
43768                                                             (line  618)
43769* mtls-markers:                          RS/6000 and PowerPC Options.
43770                                                             (line  729)
43771* mtls-size:                             IA-64 Options.      (line  112)
43772* mtoc:                                  RS/6000 and PowerPC Options.
43773                                                             (line  472)
43774* mtomcat-stats:                         FRV Options.        (line  209)
43775* mtoplevel-symbols:                     MMIX Options.       (line   40)
43776* mtp:                                   ARM Options.        (line  260)
43777* mtpcs-frame:                           ARM Options.        (line  233)
43778* mtpcs-leaf-frame:                      ARM Options.        (line  239)
43779* mtpf-trace:                            S/390 and zSeries Options.
43780                                                             (line  131)
43781* mtrap-precision:                       DEC Alpha Options.  (line  109)
43782* mtune <1>:                             SPARC Options.      (line  158)
43783* mtune <2>:                             S/390 and zSeries Options.
43784                                                             (line  124)
43785* mtune <3>:                             RS/6000 and PowerPC Options.
43786                                                             (line  168)
43787* mtune <4>:                             MIPS Options.       (line   62)
43788* mtune <5>:                             M680x0 Options.     (line   69)
43789* mtune <6>:                             IA-64 Options.      (line  116)
43790* mtune <7>:                             i386 and x86-64 Options.
43791                                                             (line   10)
43792* mtune <8>:                             DEC Alpha Options.  (line  267)
43793* mtune <9>:                             CRIS Options.       (line   16)
43794* mtune:                                 ARM Options.        (line   97)
43795* muclibc:                               GNU/Linux Options.  (line   13)
43796* muls:                                  Score Options.      (line   18)
43797* multcost=NUMBER:                       SH Options.         (line  155)
43798* multi_module:                          Darwin Options.     (line  199)
43799* multilib-library-pic:                  FRV Options.        (line   89)
43800* multiply-enabled:                      LM32 Options.       (line   15)
43801* multiply_defined:                      Darwin Options.     (line  199)
43802* multiply_defined_unused:               Darwin Options.     (line  199)
43803* munaligned-doubles:                    SPARC Options.      (line   59)
43804* municode:                              i386 and x86-64 Windows Options.
43805                                                             (line   44)
43806* muninit-const-in-rodata:               MIPS Options.       (line  381)
43807* munix:                                 VAX Options.        (line    9)
43808* munix-asm:                             PDP-11 Options.     (line   74)
43809* munsafe-dma:                           SPU Options.        (line   17)
43810* mupdate:                               RS/6000 and PowerPC Options.
43811                                                             (line  399)
43812* muser-enabled:                         LM32 Options.       (line   21)
43813* musermode:                             SH Options.         (line  150)
43814* mv850:                                 V850 Options.       (line   49)
43815* mv850e:                                V850 Options.       (line   69)
43816* mv850e1:                               V850 Options.       (line   64)
43817* mv8plus:                               SPARC Options.      (line  170)
43818* mveclibabi:                            i386 and x86-64 Options.
43819                                                             (line  531)
43820* mvis:                                  SPARC Options.      (line  177)
43821* mvliw-branch:                          FRV Options.        (line  164)
43822* mvms-return-codes <1>:                 IA-64/VMS Options.  (line    9)
43823* mvms-return-codes:                     DEC Alpha/VMS Options.
43824                                                             (line    9)
43825* mvolatile-asm-stop:                    IA-64 Options.      (line   32)
43826* mvr4130-align:                         MIPS Options.       (line  639)
43827* mvrsave:                               RS/6000 and PowerPC Options.
43828                                                             (line  196)
43829* mvsx:                                  RS/6000 and PowerPC Options.
43830                                                             (line  240)
43831* mvxworks:                              RS/6000 and PowerPC Options.
43832                                                             (line  621)
43833* mwarn-cell-microcode:                  RS/6000 and PowerPC Options.
43834                                                             (line  202)
43835* mwarn-dynamicstack:                    S/390 and zSeries Options.
43836                                                             (line  150)
43837* mwarn-framesize:                       S/390 and zSeries Options.
43838                                                             (line  142)
43839* mwarn-reloc:                           SPU Options.        (line   10)
43840* mwide-bitfields:                       MCore Options.      (line   23)
43841* mwin32:                                i386 and x86-64 Windows Options.
43842                                                             (line   49)
43843* mwindows:                              i386 and x86-64 Windows Options.
43844                                                             (line   55)
43845* mword-relocations:                     ARM Options.        (line  268)
43846* mwords-little-endian:                  ARM Options.        (line   71)
43847* mxgot <1>:                             MIPS Options.       (line  191)
43848* mxgot:                                 M680x0 Options.     (line  318)
43849* mxilinx-fpu:                           RS/6000 and PowerPC Options.
43850                                                             (line  372)
43851* mxl-compat:                            RS/6000 and PowerPC Options.
43852                                                             (line  309)
43853* myellowknife:                          RS/6000 and PowerPC Options.
43854                                                             (line  616)
43855* mzarch:                                S/390 and zSeries Options.
43856                                                             (line   95)
43857* mzda:                                  V850 Options.       (line   45)
43858* mzero-extend:                          MMIX Options.       (line   27)
43859* no-canonical-prefixes:                 Overall Options.    (line  348)
43860* no-integrated-cpp:                     C Dialect Options.  (line  243)
43861* no_dead_strip_inits_and_terms:         Darwin Options.     (line  199)
43862* noall_load:                            Darwin Options.     (line  199)
43863* nocpp:                                 MIPS Options.       (line  477)
43864* nodefaultlibs:                         Link Options.       (line   62)
43865* nofixprebinding:                       Darwin Options.     (line  199)
43866* nofpu:                                 RX Options.         (line   17)
43867* nolibdld:                              HPPA Options.       (line  188)
43868* nomultidefs:                           Darwin Options.     (line  199)
43869* non-static:                            VxWorks Options.    (line   16)
43870* noprebind:                             Darwin Options.     (line  199)
43871* noseglinkedit:                         Darwin Options.     (line  199)
43872* nostartfiles:                          Link Options.       (line   57)
43873* nostdinc:                              Preprocessor Options.
43874                                                             (line  377)
43875* nostdinc++ <1>:                        Preprocessor Options.
43876                                                             (line  382)
43877* nostdinc++:                            C++ Dialect Options.
43878                                                             (line  292)
43879* nostdlib:                              Link Options.       (line   73)
43880* o:                                     Preprocessor Options.
43881                                                             (line   75)
43882* O:                                     Optimize Options.   (line   39)
43883* o:                                     Overall Options.    (line  187)
43884* O0:                                    Optimize Options.   (line  121)
43885* O1:                                    Optimize Options.   (line   39)
43886* O2:                                    Optimize Options.   (line   79)
43887* O3:                                    Optimize Options.   (line  114)
43888* Os:                                    Optimize Options.   (line  125)
43889* P:                                     Preprocessor Options.
43890                                                             (line  593)
43891* p:                                     Debugging Options.  (line  291)
43892* pagezero_size:                         Darwin Options.     (line  199)
43893* param:                                 Optimize Options.   (line 2045)
43894* pass-exit-codes:                       Overall Options.    (line  145)
43895* pedantic <1>:                          Warnings and Errors.
43896                                                             (line   25)
43897* pedantic <2>:                          Alternate Keywords. (line   29)
43898* pedantic <3>:                          C Extensions.       (line    6)
43899* pedantic <4>:                          Preprocessor Options.
43900                                                             (line  163)
43901* pedantic <5>:                          Warning Options.    (line   53)
43902* pedantic:                              Standards.          (line   16)
43903* pedantic-errors <1>:                   Warnings and Errors.
43904                                                             (line   25)
43905* pedantic-errors <2>:                   Non-bugs.           (line  216)
43906* pedantic-errors <3>:                   Preprocessor Options.
43907                                                             (line  168)
43908* pedantic-errors <4>:                   Warning Options.    (line   95)
43909* pedantic-errors:                       Standards.          (line   16)
43910* pg:                                    Debugging Options.  (line  297)
43911* pie:                                   Link Options.       (line   95)
43912* pipe:                                  Overall Options.    (line  209)
43913* prebind:                               Darwin Options.     (line  199)
43914* prebind_all_twolevel_modules:          Darwin Options.     (line  199)
43915* print-file-name:                       Debugging Options.  (line 1038)
43916* print-libgcc-file-name:                Debugging Options.  (line 1068)
43917* print-multi-directory:                 Debugging Options.  (line 1044)
43918* print-multi-lib:                       Debugging Options.  (line 1049)
43919* print-multi-os-directory:              Debugging Options.  (line 1056)
43920* print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
43921                                                             (line  244)
43922* print-prog-name:                       Debugging Options.  (line 1065)
43923* print-search-dirs:                     Debugging Options.  (line 1076)
43924* print-sysroot:                         Debugging Options.  (line 1089)
43925* print-sysroot-headers-suffix:          Debugging Options.  (line 1096)
43926* private_bundle:                        Darwin Options.     (line  199)
43927* pthread <1>:                           SPARC Options.      (line  242)
43928* pthread:                               RS/6000 and PowerPC Options.
43929                                                             (line  736)
43930* pthreads:                              SPARC Options.      (line  236)
43931* Q:                                     Debugging Options.  (line  303)
43932* Qn:                                    System V Options.   (line   18)
43933* Qy:                                    System V Options.   (line   14)
43934* rdynamic:                              Link Options.       (line  101)
43935* read_only_relocs:                      Darwin Options.     (line  199)
43936* remap:                                 Preprocessor Options.
43937                                                             (line  641)
43938* s:                                     Link Options.       (line  108)
43939* S <1>:                                 Link Options.       (line   20)
43940* S:                                     Overall Options.    (line  170)
43941* save-temps:                            Debugging Options.  (line  946)
43942* save-temps=obj:                        Debugging Options.  (line  972)
43943* sectalign:                             Darwin Options.     (line  199)
43944* sectcreate:                            Darwin Options.     (line  199)
43945* sectobjectsymbols:                     Darwin Options.     (line  199)
43946* sectorder:                             Darwin Options.     (line  199)
43947* seg1addr:                              Darwin Options.     (line  199)
43948* seg_addr_table:                        Darwin Options.     (line  199)
43949* seg_addr_table_filename:               Darwin Options.     (line  199)
43950* segaddr:                               Darwin Options.     (line  199)
43951* seglinkedit:                           Darwin Options.     (line  199)
43952* segprot:                               Darwin Options.     (line  199)
43953* segs_read_only_addr:                   Darwin Options.     (line  199)
43954* segs_read_write_addr:                  Darwin Options.     (line  199)
43955* shared:                                Link Options.       (line  117)
43956* shared-libgcc:                         Link Options.       (line  125)
43957* sim:                                   CRIS Options.       (line   95)
43958* sim2:                                  CRIS Options.       (line  101)
43959* single_module:                         Darwin Options.     (line  199)
43960* specs:                                 Directory Options.  (line   84)
43961* static <1>:                            HPPA Options.       (line  192)
43962* static <2>:                            Darwin Options.     (line  199)
43963* static:                                Link Options.       (line  112)
43964* static-libgcc:                         Link Options.       (line  125)
43965* std <1>:                               Non-bugs.           (line  107)
43966* std <2>:                               Other Builtins.     (line   22)
43967* std <3>:                               C Dialect Options.  (line   47)
43968* std:                                   Standards.          (line   16)
43969* std=:                                  Preprocessor Options.
43970                                                             (line  326)
43971* sub_library:                           Darwin Options.     (line  199)
43972* sub_umbrella:                          Darwin Options.     (line  199)
43973* symbolic:                              Link Options.       (line  172)
43974* sysroot:                               Directory Options.  (line   92)
43975* T:                                     Link Options.       (line  178)
43976* target-help <1>:                       Preprocessor Options.
43977                                                             (line  646)
43978* target-help:                           Overall Options.    (line  240)
43979* threads <1>:                           SPARC Options.      (line  230)
43980* threads:                               HPPA Options.       (line  205)
43981* time:                                  Debugging Options.  (line  987)
43982* traditional <1>:                       Incompatibilities.  (line    6)
43983* traditional:                           C Dialect Options.  (line  255)
43984* traditional-cpp <1>:                   Preprocessor Options.
43985                                                             (line  624)
43986* traditional-cpp:                       C Dialect Options.  (line  255)
43987* trigraphs <1>:                         Preprocessor Options.
43988                                                             (line  628)
43989* trigraphs:                             C Dialect Options.  (line  239)
43990* twolevel_namespace:                    Darwin Options.     (line  199)
43991* u:                                     Link Options.       (line  211)
43992* U:                                     Preprocessor Options.
43993                                                             (line   57)
43994* umbrella:                              Darwin Options.     (line  199)
43995* undef:                                 Preprocessor Options.
43996                                                             (line   61)
43997* undefined:                             Darwin Options.     (line  199)
43998* unexported_symbols_list:               Darwin Options.     (line  199)
43999* V:                                     Target Options.     (line   25)
44000* v <1>:                                 Preprocessor Options.
44001                                                             (line  650)
44002* v:                                     Overall Options.    (line  198)
44003* version <1>:                           Preprocessor Options.
44004                                                             (line  663)
44005* version:                               Overall Options.    (line  352)
44006* W:                                     Incompatibilities.  (line   64)
44007* w:                                     Preprocessor Options.
44008                                                             (line  159)
44009* W:                                     Warning Options.    (line  147)
44010* w:                                     Warning Options.    (line   18)
44011* Wa:                                    Assembler Options.  (line    9)
44012* Wabi:                                  C++ Dialect Options.
44013                                                             (line  306)
44014* Waddress:                              Warning Options.    (line  988)
44015* Waggregate-return:                     Warning Options.    (line 1006)
44016* Wall <1>:                              Standard Libraries. (line    6)
44017* Wall <2>:                              Preprocessor Options.
44018                                                             (line   81)
44019* Wall:                                  Warning Options.    (line   99)
44020* Warray-bounds:                         Warning Options.    (line  700)
44021* Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
44022                                                             (line  198)
44023* Wattributes:                           Warning Options.    (line 1011)
44024* Wbad-function-cast:                    Warning Options.    (line  878)
44025* Wbuiltin-macro-redefined:              Warning Options.    (line 1017)
44026* Wcast-align:                           Warning Options.    (line  909)
44027* Wcast-qual:                            Warning Options.    (line  893)
44028* Wchar-subscripts:                      Warning Options.    (line  185)
44029* Wclobbered:                            Warning Options.    (line  929)
44030* Wcomment <1>:                          Preprocessor Options.
44031                                                             (line   89)
44032* Wcomment:                              Warning Options.    (line  190)
44033* Wcomments:                             Preprocessor Options.
44034                                                             (line   89)
44035* Wconversion:                           Warning Options.    (line  933)
44036* Wconversion-null:                      Warning Options.    (line  951)
44037* Wcoverage-mismatch:                    Language Independent Options.
44038                                                             (line   42)
44039* Wctor-dtor-privacy:                    C++ Dialect Options.
44040                                                             (line  416)
44041* Wdeclaration-after-statement:          Warning Options.    (line  821)
44042* Wdeprecated:                           Warning Options.    (line 1154)
44043* Wdeprecated-declarations:              Warning Options.    (line 1158)
44044* Wdisabled-optimization:                Warning Options.    (line 1284)
44045* Wdiv-by-zero:                          Warning Options.    (line  705)
44046* weak_reference_mismatches:             Darwin Options.     (line  199)
44047* Weffc++:                               C++ Dialect Options.
44048                                                             (line  443)
44049* Wempty-body:                           Warning Options.    (line  955)
44050* Wendif-labels <1>:                     Preprocessor Options.
44051                                                             (line  136)
44052* Wendif-labels:                         Warning Options.    (line  831)
44053* Wenum-compare:                         Warning Options.    (line  959)
44054* Werror <1>:                            Preprocessor Options.
44055                                                             (line  149)
44056* Werror:                                Warning Options.    (line   21)
44057* Werror=:                               Warning Options.    (line   24)
44058* Wextra:                                Warning Options.    (line  147)
44059* Wfatal-errors:                         Warning Options.    (line   38)
44060* Wfloat-equal:                          Warning Options.    (line  721)
44061* Wformat <1>:                           Function Attributes.
44062                                                             (line  398)
44063* Wformat:                               Warning Options.    (line  195)
44064* Wformat-contains-nul:                  Warning Options.    (line  234)
44065* Wformat-extra-args:                    Warning Options.    (line  238)
44066* Wformat-nonliteral <1>:                Function Attributes.
44067                                                             (line  457)
44068* Wformat-nonliteral:                    Warning Options.    (line  256)
44069* Wformat-security:                      Warning Options.    (line  261)
44070* Wformat-y2k:                           Warning Options.    (line  230)
44071* Wformat-zero-length:                   Warning Options.    (line  252)
44072* Wformat=2:                             Warning Options.    (line  272)
44073* Wframe-larger-than:                    Warning Options.    (line  843)
44074* whatsloaded:                           Darwin Options.     (line  199)
44075* whyload:                               Darwin Options.     (line  199)
44076* Wignored-qualifiers:                   Warning Options.    (line  311)
44077* Wimplicit:                             Warning Options.    (line  307)
44078* Wimplicit-function-declaration:        Warning Options.    (line  301)
44079* Wimplicit-int:                         Warning Options.    (line  297)
44080* Winit-self:                            Warning Options.    (line  284)
44081* Winline <1>:                           Inline.             (line   63)
44082* Winline:                               Warning Options.    (line 1224)
44083* Wint-to-pointer-cast:                  Warning Options.    (line 1251)
44084* Winvalid-offsetof:                     Warning Options.    (line 1237)
44085* Winvalid-pch:                          Warning Options.    (line 1259)
44086* Wjump-misses-init:                     Warning Options.    (line  964)
44087* Wl:                                    Link Options.       (line  203)
44088* Wlarger-than-LEN:                      Warning Options.    (line  840)
44089* Wlarger-than=LEN:                      Warning Options.    (line  840)
44090* Wlogical-op:                           Warning Options.    (line 1001)
44091* Wlong-long:                            Warning Options.    (line 1263)
44092* Wmain:                                 Warning Options.    (line  322)
44093* Wmissing-braces:                       Warning Options.    (line  329)
44094* Wmissing-declarations:                 Warning Options.    (line 1052)
44095* Wmissing-field-initializers:           Warning Options.    (line 1060)
44096* Wmissing-format-attribute:             Warning Options.    (line 1086)
44097* Wmissing-include-dirs:                 Warning Options.    (line  339)
44098* Wmissing-noreturn:                     Warning Options.    (line 1078)
44099* Wmissing-parameter-type:               Warning Options.    (line 1038)
44100* Wmissing-prototypes:                   Warning Options.    (line 1046)
44101* Wmultichar:                            Warning Options.    (line 1105)
44102* Wnested-externs:                       Warning Options.    (line 1221)
44103* Wno-abi:                               C++ Dialect Options.
44104                                                             (line  306)
44105* Wno-address:                           Warning Options.    (line  988)
44106* Wno-aggregate-return:                  Warning Options.    (line 1006)
44107* Wno-all:                               Warning Options.    (line   99)
44108* Wno-array-bounds:                      Warning Options.    (line  700)
44109* Wno-assign-intercept:                  Objective-C and Objective-C++ Dialect Options.
44110                                                             (line  198)
44111* Wno-attributes:                        Warning Options.    (line 1011)
44112* Wno-bad-function-cast:                 Warning Options.    (line  878)
44113* Wno-builtin-macro-redefined:           Warning Options.    (line 1017)
44114* Wno-cast-align:                        Warning Options.    (line  909)
44115* Wno-cast-qual:                         Warning Options.    (line  893)
44116* Wno-char-subscripts:                   Warning Options.    (line  185)
44117* Wno-clobbered:                         Warning Options.    (line  929)
44118* Wno-comment:                           Warning Options.    (line  190)
44119* Wno-conversion:                        Warning Options.    (line  933)
44120* Wno-conversion-null:                   Warning Options.    (line  951)
44121* Wno-ctor-dtor-privacy:                 C++ Dialect Options.
44122                                                             (line  416)
44123* Wno-declaration-after-statement:       Warning Options.    (line  821)
44124* Wno-deprecated:                        Warning Options.    (line 1154)
44125* Wno-deprecated-declarations:           Warning Options.    (line 1158)
44126* Wno-disabled-optimization:             Warning Options.    (line 1284)
44127* Wno-div-by-zero:                       Warning Options.    (line  705)
44128* Wno-effc++:                            C++ Dialect Options.
44129                                                             (line  443)
44130* Wno-empty-body:                        Warning Options.    (line  955)
44131* Wno-endif-labels:                      Warning Options.    (line  831)
44132* Wno-enum-compare:                      Warning Options.    (line  959)
44133* Wno-error:                             Warning Options.    (line   21)
44134* Wno-error=:                            Warning Options.    (line   24)
44135* Wno-extra:                             Warning Options.    (line  147)
44136* Wno-fatal-errors:                      Warning Options.    (line   38)
44137* Wno-float-equal:                       Warning Options.    (line  721)
44138* Wno-format:                            Warning Options.    (line  195)
44139* Wno-format-contains-nul:               Warning Options.    (line  234)
44140* Wno-format-extra-args:                 Warning Options.    (line  238)
44141* Wno-format-nonliteral:                 Warning Options.    (line  256)
44142* Wno-format-security:                   Warning Options.    (line  261)
44143* Wno-format-y2k:                        Warning Options.    (line  230)
44144* Wno-format-zero-length:                Warning Options.    (line  252)
44145* Wno-format=2:                          Warning Options.    (line  272)
44146* Wno-ignored-qualifiers:                Warning Options.    (line  311)
44147* Wno-implicit:                          Warning Options.    (line  307)
44148* Wno-implicit-function-declaration:     Warning Options.    (line  301)
44149* Wno-implicit-int:                      Warning Options.    (line  297)
44150* Wno-init-self:                         Warning Options.    (line  284)
44151* Wno-inline:                            Warning Options.    (line 1224)
44152* Wno-int-to-pointer-cast:               Warning Options.    (line 1251)
44153* Wno-invalid-offsetof:                  Warning Options.    (line 1237)
44154* Wno-invalid-pch:                       Warning Options.    (line 1259)
44155* Wno-jump-misses-init:                  Warning Options.    (line  964)
44156* Wno-logical-op:                        Warning Options.    (line 1001)
44157* Wno-long-long:                         Warning Options.    (line 1263)
44158* Wno-main:                              Warning Options.    (line  322)
44159* Wno-missing-braces:                    Warning Options.    (line  329)
44160* Wno-missing-declarations:              Warning Options.    (line 1052)
44161* Wno-missing-field-initializers:        Warning Options.    (line 1060)
44162* Wno-missing-format-attribute:          Warning Options.    (line 1086)
44163* Wno-missing-include-dirs:              Warning Options.    (line  339)
44164* Wno-missing-noreturn:                  Warning Options.    (line 1078)
44165* Wno-missing-parameter-type:            Warning Options.    (line 1038)
44166* Wno-missing-prototypes:                Warning Options.    (line 1046)
44167* Wno-mudflap:                           Warning Options.    (line 1304)
44168* Wno-multichar:                         Warning Options.    (line 1105)
44169* Wno-nested-externs:                    Warning Options.    (line 1221)
44170* Wno-non-template-friend:               C++ Dialect Options.
44171                                                             (line  480)
44172* Wno-non-virtual-dtor:                  C++ Dialect Options.
44173                                                             (line  421)
44174* Wno-nonnull:                           Warning Options.    (line  277)
44175* Wno-old-style-cast:                    C++ Dialect Options.
44176                                                             (line  496)
44177* Wno-old-style-declaration:             Warning Options.    (line 1028)
44178* Wno-old-style-definition:              Warning Options.    (line 1034)
44179* Wno-overflow:                          Warning Options.    (line 1164)
44180* Wno-overlength-strings:                Warning Options.    (line 1308)
44181* Wno-overloaded-virtual:                C++ Dialect Options.
44182                                                             (line  502)
44183* Wno-override-init:                     Warning Options.    (line 1167)
44184* Wno-packed:                            Warning Options.    (line 1175)
44185* Wno-packed-bitfield-compat:            Warning Options.    (line 1192)
44186* Wno-padded:                            Warning Options.    (line 1209)
44187* Wno-parentheses:                       Warning Options.    (line  342)
44188* Wno-pedantic-ms-format:                Warning Options.    (line  858)
44189* Wno-pmf-conversions <1>:               Bound member functions.
44190                                                             (line   35)
44191* Wno-pmf-conversions:                   C++ Dialect Options.
44192                                                             (line  521)
44193* Wno-pointer-arith:                     Warning Options.    (line  864)
44194* Wno-pointer-sign:                      Warning Options.    (line 1293)
44195* Wno-pointer-to-int-cast:               Warning Options.    (line 1255)
44196* Wno-pragmas:                           Warning Options.    (line  603)
44197* Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
44198                                                             (line  202)
44199* Wno-redundant-decls:                   Warning Options.    (line 1216)
44200* Wno-reorder:                           C++ Dialect Options.
44201                                                             (line  427)
44202* Wno-return-type:                       Warning Options.    (line  432)
44203* Wno-selector:                          Objective-C and Objective-C++ Dialect Options.
44204                                                             (line  212)
44205* Wno-sequence-point:                    Warning Options.    (line  386)
44206* Wno-shadow:                            Warning Options.    (line  835)
44207* Wno-sign-compare:                      Warning Options.    (line  975)
44208* Wno-sign-conversion:                   Warning Options.    (line  982)
44209* Wno-sign-promo:                        C++ Dialect Options.
44210                                                             (line  525)
44211* Wno-stack-protector:                   Warning Options.    (line 1299)
44212* Wno-strict-aliasing:                   Warning Options.    (line  608)
44213* Wno-strict-aliasing=n:                 Warning Options.    (line  616)
44214* Wno-strict-null-sentinel:              C++ Dialect Options.
44215                                                             (line  473)
44216* Wno-strict-overflow:                   Warning Options.    (line  649)
44217* Wno-strict-prototypes:                 Warning Options.    (line 1022)
44218* Wno-strict-selector-match:             Objective-C and Objective-C++ Dialect Options.
44219                                                             (line  224)
44220* Wno-switch:                            Warning Options.    (line  447)
44221* Wno-switch-default:                    Warning Options.    (line  455)
44222* Wno-switch-enum:                       Warning Options.    (line  458)
44223* Wno-sync-nand:                         Warning Options.    (line  467)
44224* Wno-system-headers:                    Warning Options.    (line  710)
44225* Wno-traditional:                       Warning Options.    (line  736)
44226* Wno-traditional-conversion:            Warning Options.    (line  813)
44227* Wno-trigraphs:                         Warning Options.    (line  472)
44228* Wno-type-limits:                       Warning Options.    (line  871)
44229* Wno-undeclared-selector:               Objective-C and Objective-C++ Dialect Options.
44230                                                             (line  232)
44231* Wno-undef:                             Warning Options.    (line  828)
44232* Wno-uninitialized:                     Warning Options.    (line  526)
44233* Wno-unknown-pragmas:                   Warning Options.    (line  596)
44234* Wno-unsafe-loop-optimizations:         Warning Options.    (line  852)
44235* Wno-unused:                            Warning Options.    (line  519)
44236* Wno-unused-function:                   Warning Options.    (line  477)
44237* Wno-unused-label:                      Warning Options.    (line  482)
44238* Wno-unused-parameter:                  Warning Options.    (line  489)
44239* Wno-unused-result:                     Warning Options.    (line  496)
44240* Wno-unused-value:                      Warning Options.    (line  509)
44241* Wno-unused-variable:                   Warning Options.    (line  501)
44242* Wno-variadic-macros:                   Warning Options.    (line 1268)
44243* Wno-vla:                               Warning Options.    (line 1274)
44244* Wno-volatile-register-var:             Warning Options.    (line 1278)
44245* Wno-write-strings:                     Warning Options.    (line  915)
44246* Wnon-template-friend:                  C++ Dialect Options.
44247                                                             (line  480)
44248* Wnon-virtual-dtor:                     C++ Dialect Options.
44249                                                             (line  421)
44250* Wnonnull:                              Warning Options.    (line  277)
44251* Wnormalized=:                          Warning Options.    (line 1111)
44252* Wold-style-cast:                       C++ Dialect Options.
44253                                                             (line  496)
44254* Wold-style-declaration:                Warning Options.    (line 1028)
44255* Wold-style-definition:                 Warning Options.    (line 1034)
44256* Woverflow:                             Warning Options.    (line 1164)
44257* Woverlength-strings:                   Warning Options.    (line 1308)
44258* Woverloaded-virtual:                   C++ Dialect Options.
44259                                                             (line  502)
44260* Woverride-init:                        Warning Options.    (line 1167)
44261* Wp:                                    Preprocessor Options.
44262                                                             (line   14)
44263* Wpacked:                               Warning Options.    (line 1175)
44264* Wpacked-bitfield-compat:               Warning Options.    (line 1192)
44265* Wpadded:                               Warning Options.    (line 1209)
44266* Wparentheses:                          Warning Options.    (line  342)
44267* Wpedantic-ms-format:                   Warning Options.    (line  858)
44268* Wpmf-conversions:                      C++ Dialect Options.
44269                                                             (line  521)
44270* Wpointer-arith <1>:                    Pointer Arith.      (line   13)
44271* Wpointer-arith:                        Warning Options.    (line  864)
44272* Wpointer-sign:                         Warning Options.    (line 1293)
44273* Wpointer-to-int-cast:                  Warning Options.    (line 1255)
44274* Wpragmas:                              Warning Options.    (line  603)
44275* Wprotocol:                             Objective-C and Objective-C++ Dialect Options.
44276                                                             (line  202)
44277* wrapper:                               Overall Options.    (line  355)
44278* Wredundant-decls:                      Warning Options.    (line 1216)
44279* Wreorder:                              C++ Dialect Options.
44280                                                             (line  427)
44281* Wreturn-type:                          Warning Options.    (line  432)
44282* Wselector:                             Objective-C and Objective-C++ Dialect Options.
44283                                                             (line  212)
44284* Wsequence-point:                       Warning Options.    (line  386)
44285* Wshadow:                               Warning Options.    (line  835)
44286* Wsign-compare:                         Warning Options.    (line  975)
44287* Wsign-conversion:                      Warning Options.    (line  982)
44288* Wsign-promo:                           C++ Dialect Options.
44289                                                             (line  525)
44290* Wstack-protector:                      Warning Options.    (line 1299)
44291* Wstrict-aliasing:                      Warning Options.    (line  608)
44292* Wstrict-aliasing=n:                    Warning Options.    (line  616)
44293* Wstrict-null-sentinel:                 C++ Dialect Options.
44294                                                             (line  473)
44295* Wstrict-overflow:                      Warning Options.    (line  649)
44296* Wstrict-prototypes:                    Warning Options.    (line 1022)
44297* Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
44298                                                             (line  224)
44299* Wswitch:                               Warning Options.    (line  447)
44300* Wswitch-default:                       Warning Options.    (line  455)
44301* Wswitch-enum:                          Warning Options.    (line  458)
44302* Wsync-nand:                            Warning Options.    (line  467)
44303* Wsystem-headers <1>:                   Preprocessor Options.
44304                                                             (line  153)
44305* Wsystem-headers:                       Warning Options.    (line  710)
44306* Wtraditional <1>:                      Preprocessor Options.
44307                                                             (line  106)
44308* Wtraditional:                          Warning Options.    (line  736)
44309* Wtraditional-conversion:               Warning Options.    (line  813)
44310* Wtrigraphs <1>:                        Preprocessor Options.
44311                                                             (line   94)
44312* Wtrigraphs:                            Warning Options.    (line  472)
44313* Wtype-limits:                          Warning Options.    (line  871)
44314* Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
44315                                                             (line  232)
44316* Wundef <1>:                            Preprocessor Options.
44317                                                             (line  112)
44318* Wundef:                                Warning Options.    (line  828)
44319* Wuninitialized:                        Warning Options.    (line  526)
44320* Wunknown-pragmas:                      Warning Options.    (line  596)
44321* Wunsafe-loop-optimizations:            Warning Options.    (line  852)
44322* Wunsuffixed-float-constants:           Warning Options.    (line 1323)
44323* Wunused:                               Warning Options.    (line  519)
44324* Wunused-function:                      Warning Options.    (line  477)
44325* Wunused-label:                         Warning Options.    (line  482)
44326* Wunused-macros:                        Preprocessor Options.
44327                                                             (line  117)
44328* Wunused-parameter:                     Warning Options.    (line  489)
44329* Wunused-result:                        Warning Options.    (line  496)
44330* Wunused-value:                         Warning Options.    (line  509)
44331* Wunused-variable:                      Warning Options.    (line  501)
44332* Wvariadic-macros:                      Warning Options.    (line 1268)
44333* Wvla:                                  Warning Options.    (line 1274)
44334* Wvolatile-register-var:                Warning Options.    (line 1278)
44335* Wwrite-strings:                        Warning Options.    (line  915)
44336* x <1>:                                 Preprocessor Options.
44337                                                             (line  310)
44338* x:                                     Overall Options.    (line  122)
44339* Xassembler:                            Assembler Options.  (line   13)
44340* Xbind-lazy:                            VxWorks Options.    (line   26)
44341* Xbind-now:                             VxWorks Options.    (line   30)
44342* Xlinker:                               Link Options.       (line  184)
44343* Xpreprocessor:                         Preprocessor Options.
44344                                                             (line   25)
44345* Ym:                                    System V Options.   (line   26)
44346* YP:                                    System V Options.   (line   22)
44347
44348
44349File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
44350
44351Keyword Index
44352*************
44353
44354�[index�]
44355* Menu:
44356
44357* ! in constraint:                       Multi-Alternative.  (line   33)
44358* # in constraint:                       Modifiers.          (line   57)
44359* #pragma:                               Pragmas.            (line    6)
44360* #pragma implementation:                C++ Interface.      (line   39)
44361* #pragma implementation, implied:       C++ Interface.      (line   46)
44362* #pragma interface:                     C++ Interface.      (line   20)
44363* #pragma, reason for not using:         Function Attributes.
44364                                                             (line 1455)
44365* $:                                     Dollar Signs.       (line    6)
44366* % in constraint:                       Modifiers.          (line   45)
44367* %include:                              Spec Files.         (line   27)
44368* %include_noerr:                        Spec Files.         (line   31)
44369* %rename:                               Spec Files.         (line   35)
44370* & in constraint:                       Modifiers.          (line   25)
44371* ':                                     Incompatibilities.  (line  116)
44372* (:                                     Constructing Calls. (line   53)
44373* * in constraint:                       Modifiers.          (line   62)
44374* + in constraint:                       Modifiers.          (line   12)
44375* -lgcc, use with -nodefaultlibs:        Link Options.       (line   82)
44376* -lgcc, use with -nostdlib:             Link Options.       (line   82)
44377* -nodefaultlibs and unresolved references: Link Options.    (line   82)
44378* -nostdlib and unresolved references:   Link Options.       (line   82)
44379* .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
44380                                                             (line  682)
44381* //:                                    C++ Comments.       (line    6)
44382* 0 in constraint:                       Simple Constraints. (line  117)
44383* < in constraint:                       Simple Constraints. (line   48)
44384* = in constraint:                       Modifiers.          (line    8)
44385* > in constraint:                       Simple Constraints. (line   52)
44386* ? in constraint:                       Multi-Alternative.  (line   27)
44387* ?: extensions:                         Conditionals.       (line    6)
44388* ?: side effect:                        Conditionals.       (line   20)
44389* _ in variables in macros:              Typeof.             (line   46)
44390* __builtin___clear_cache:               Other Builtins.     (line  327)
44391* __builtin___fprintf_chk:               Object Size Checking.
44392                                                             (line    6)
44393* __builtin___memcpy_chk:                Object Size Checking.
44394                                                             (line    6)
44395* __builtin___memmove_chk:               Object Size Checking.
44396                                                             (line    6)
44397* __builtin___mempcpy_chk:               Object Size Checking.
44398                                                             (line    6)
44399* __builtin___memset_chk:                Object Size Checking.
44400                                                             (line    6)
44401* __builtin___printf_chk:                Object Size Checking.
44402                                                             (line    6)
44403* __builtin___snprintf_chk:              Object Size Checking.
44404                                                             (line    6)
44405* __builtin___sprintf_chk:               Object Size Checking.
44406                                                             (line    6)
44407* __builtin___stpcpy_chk:                Object Size Checking.
44408                                                             (line    6)
44409* __builtin___strcat_chk:                Object Size Checking.
44410                                                             (line    6)
44411* __builtin___strcpy_chk:                Object Size Checking.
44412                                                             (line    6)
44413* __builtin___strncat_chk:               Object Size Checking.
44414                                                             (line    6)
44415* __builtin___strncpy_chk:               Object Size Checking.
44416                                                             (line    6)
44417* __builtin___vfprintf_chk:              Object Size Checking.
44418                                                             (line    6)
44419* __builtin___vprintf_chk:               Object Size Checking.
44420                                                             (line    6)
44421* __builtin___vsnprintf_chk:             Object Size Checking.
44422                                                             (line    6)
44423* __builtin___vsprintf_chk:              Object Size Checking.
44424                                                             (line    6)
44425* __builtin_apply:                       Constructing Calls. (line   31)
44426* __builtin_apply_args:                  Constructing Calls. (line   20)
44427* __builtin_bswap32:                     Other Builtins.     (line  546)
44428* __builtin_bswap64:                     Other Builtins.     (line  551)
44429* __builtin_choose_expr:                 Other Builtins.     (line  156)
44430* __builtin_clz:                         Other Builtins.     (line  479)
44431* __builtin_clzl:                        Other Builtins.     (line  497)
44432* __builtin_clzll:                       Other Builtins.     (line  517)
44433* __builtin_constant_p:                  Other Builtins.     (line  195)
44434* __builtin_ctz:                         Other Builtins.     (line  483)
44435* __builtin_ctzl:                        Other Builtins.     (line  501)
44436* __builtin_ctzll:                       Other Builtins.     (line  521)
44437* __builtin_expect:                      Other Builtins.     (line  245)
44438* __builtin_extract_return_address:      Return Address.     (line   37)
44439* __builtin_ffs:                         Other Builtins.     (line  475)
44440* __builtin_ffsl:                        Other Builtins.     (line  493)
44441* __builtin_ffsll:                       Other Builtins.     (line  513)
44442* __builtin_fpclassify:                  Other Builtins.     (line    6)
44443* __builtin_frame_address:               Return Address.     (line   51)
44444* __builtin_frob_return_address:         Return Address.     (line   46)
44445* __builtin_huge_val:                    Other Builtins.     (line  378)
44446* __builtin_huge_valf:                   Other Builtins.     (line  383)
44447* __builtin_huge_vall:                   Other Builtins.     (line  386)
44448* __builtin_huge_valq:                   X86 Built-in Functions.
44449                                                             (line   51)
44450* __builtin_inf:                         Other Builtins.     (line  401)
44451* __builtin_infd128:                     Other Builtins.     (line  411)
44452* __builtin_infd32:                      Other Builtins.     (line  405)
44453* __builtin_infd64:                      Other Builtins.     (line  408)
44454* __builtin_inff:                        Other Builtins.     (line  415)
44455* __builtin_infl:                        Other Builtins.     (line  420)
44456* __builtin_infq:                        X86 Built-in Functions.
44457                                                             (line   47)
44458* __builtin_isfinite:                    Other Builtins.     (line    6)
44459* __builtin_isgreater:                   Other Builtins.     (line    6)
44460* __builtin_isgreaterequal:              Other Builtins.     (line    6)
44461* __builtin_isinf_sign:                  Other Builtins.     (line    6)
44462* __builtin_isless:                      Other Builtins.     (line    6)
44463* __builtin_islessequal:                 Other Builtins.     (line    6)
44464* __builtin_islessgreater:               Other Builtins.     (line    6)
44465* __builtin_isnormal:                    Other Builtins.     (line    6)
44466* __builtin_isunordered:                 Other Builtins.     (line    6)
44467* __builtin_nan:                         Other Builtins.     (line  431)
44468* __builtin_nand128:                     Other Builtins.     (line  453)
44469* __builtin_nand32:                      Other Builtins.     (line  447)
44470* __builtin_nand64:                      Other Builtins.     (line  450)
44471* __builtin_nanf:                        Other Builtins.     (line  457)
44472* __builtin_nanl:                        Other Builtins.     (line  460)
44473* __builtin_nans:                        Other Builtins.     (line  464)
44474* __builtin_nansf:                       Other Builtins.     (line  468)
44475* __builtin_nansl:                       Other Builtins.     (line  471)
44476* __builtin_object_size:                 Object Size Checking.
44477                                                             (line    6)
44478* __builtin_offsetof:                    Offsetof.           (line    6)
44479* __builtin_parity:                      Other Builtins.     (line  490)
44480* __builtin_parityl:                     Other Builtins.     (line  509)
44481* __builtin_parityll:                    Other Builtins.     (line  529)
44482* __builtin_popcount:                    Other Builtins.     (line  487)
44483* __builtin_popcountl:                   Other Builtins.     (line  505)
44484* __builtin_popcountll:                  Other Builtins.     (line  525)
44485* __builtin_powi:                        Other Builtins.     (line    6)
44486* __builtin_powif:                       Other Builtins.     (line    6)
44487* __builtin_powil:                       Other Builtins.     (line    6)
44488* __builtin_prefetch:                    Other Builtins.     (line  339)
44489* __builtin_return:                      Constructing Calls. (line   48)
44490* __builtin_return_address:              Return Address.     (line   11)
44491* __builtin_rx_brk:                      RX Built-in Functions.
44492                                                             (line   11)
44493* __builtin_rx_clrpsw:                   RX Built-in Functions.
44494                                                             (line   14)
44495* __builtin_rx_int:                      RX Built-in Functions.
44496                                                             (line   18)
44497* __builtin_rx_machi:                    RX Built-in Functions.
44498                                                             (line   22)
44499* __builtin_rx_maclo:                    RX Built-in Functions.
44500                                                             (line   27)
44501* __builtin_rx_mulhi:                    RX Built-in Functions.
44502                                                             (line   32)
44503* __builtin_rx_mullo:                    RX Built-in Functions.
44504                                                             (line   37)
44505* __builtin_rx_mvfachi:                  RX Built-in Functions.
44506                                                             (line   42)
44507* __builtin_rx_mvfacmi:                  RX Built-in Functions.
44508                                                             (line   46)
44509* __builtin_rx_mvfc:                     RX Built-in Functions.
44510                                                             (line   50)
44511* __builtin_rx_mvtachi:                  RX Built-in Functions.
44512                                                             (line   54)
44513* __builtin_rx_mvtaclo:                  RX Built-in Functions.
44514                                                             (line   58)
44515* __builtin_rx_mvtc:                     RX Built-in Functions.
44516                                                             (line   62)
44517* __builtin_rx_mvtipl:                   RX Built-in Functions.
44518                                                             (line   66)
44519* __builtin_rx_racw:                     RX Built-in Functions.
44520                                                             (line   70)
44521* __builtin_rx_revw:                     RX Built-in Functions.
44522                                                             (line   74)
44523* __builtin_rx_rmpa:                     RX Built-in Functions.
44524                                                             (line   79)
44525* __builtin_rx_round:                    RX Built-in Functions.
44526                                                             (line   83)
44527* __builtin_rx_sat:                      RX Built-in Functions.
44528                                                             (line   88)
44529* __builtin_rx_setpsw:                   RX Built-in Functions.
44530                                                             (line   92)
44531* __builtin_rx_wait:                     RX Built-in Functions.
44532                                                             (line   96)
44533* __builtin_trap:                        Other Builtins.     (line  269)
44534* __builtin_types_compatible_p:          Other Builtins.     (line  110)
44535* __builtin_unreachable:                 Other Builtins.     (line  276)
44536* __complex__ keyword:                   Complex.            (line    6)
44537* __declspec(dllexport):                 Function Attributes.
44538                                                             (line  259)
44539* __declspec(dllimport):                 Function Attributes.
44540                                                             (line  289)
44541* __extension__:                         Alternate Keywords. (line   29)
44542* __float128 data type:                  Floating Types.     (line    6)
44543* __float80 data type:                   Floating Types.     (line    6)
44544* __fp16 data type:                      Half-Precision.     (line    6)
44545* __func__ identifier:                   Function Names.     (line    6)
44546* __FUNCTION__ identifier:               Function Names.     (line    6)
44547* __imag__ keyword:                      Complex.            (line   27)
44548* __PRETTY_FUNCTION__ identifier:        Function Names.     (line    6)
44549* __real__ keyword:                      Complex.            (line   27)
44550* __STDC_HOSTED__:                       Standards.          (line   13)
44551* __sync_add_and_fetch:                  Atomic Builtins.    (line   61)
44552* __sync_and_and_fetch:                  Atomic Builtins.    (line   61)
44553* __sync_bool_compare_and_swap:          Atomic Builtins.    (line   73)
44554* __sync_fetch_and_add:                  Atomic Builtins.    (line   45)
44555* __sync_fetch_and_and:                  Atomic Builtins.    (line   45)
44556* __sync_fetch_and_nand:                 Atomic Builtins.    (line   45)
44557* __sync_fetch_and_or:                   Atomic Builtins.    (line   45)
44558* __sync_fetch_and_sub:                  Atomic Builtins.    (line   45)
44559* __sync_fetch_and_xor:                  Atomic Builtins.    (line   45)
44560* __sync_lock_release:                   Atomic Builtins.    (line  103)
44561* __sync_lock_test_and_set:              Atomic Builtins.    (line   85)
44562* __sync_nand_and_fetch:                 Atomic Builtins.    (line   61)
44563* __sync_or_and_fetch:                   Atomic Builtins.    (line   61)
44564* __sync_sub_and_fetch:                  Atomic Builtins.    (line   61)
44565* __sync_synchronize:                    Atomic Builtins.    (line   82)
44566* __sync_val_compare_and_swap:           Atomic Builtins.    (line   73)
44567* __sync_xor_and_fetch:                  Atomic Builtins.    (line   61)
44568* __thread:                              Thread-Local.       (line    6)
44569* _Accum data type:                      Fixed-Point.        (line    6)
44570* _Complex keyword:                      Complex.            (line    6)
44571* _Decimal128 data type:                 Decimal Float.      (line    6)
44572* _Decimal32 data type:                  Decimal Float.      (line    6)
44573* _Decimal64 data type:                  Decimal Float.      (line    6)
44574* _exit:                                 Other Builtins.     (line    6)
44575* _Exit:                                 Other Builtins.     (line    6)
44576* _Fract data type:                      Fixed-Point.        (line    6)
44577* _Sat data type:                        Fixed-Point.        (line    6)
44578* ABI:                                   Compatibility.      (line    6)
44579* abort:                                 Other Builtins.     (line    6)
44580* abs:                                   Other Builtins.     (line    6)
44581* accessing volatiles:                   Volatiles.          (line    6)
44582* acos:                                  Other Builtins.     (line    6)
44583* acosf:                                 Other Builtins.     (line    6)
44584* acosh:                                 Other Builtins.     (line    6)
44585* acoshf:                                Other Builtins.     (line    6)
44586* acoshl:                                Other Builtins.     (line    6)
44587* acosl:                                 Other Builtins.     (line    6)
44588* Ada:                                   G++ and GCC.        (line    6)
44589* additional floating types:             Floating Types.     (line    6)
44590* address constraints:                   Simple Constraints. (line  144)
44591* address of a label:                    Labels as Values.   (line    6)
44592* address_operand:                       Simple Constraints. (line  148)
44593* alias attribute:                       Function Attributes.
44594                                                             (line   36)
44595* aliasing of parameters:                Code Gen Options.   (line  411)
44596* aligned attribute <1>:                 Type Attributes.    (line   31)
44597* aligned attribute <2>:                 Variable Attributes.
44598                                                             (line   23)
44599* aligned attribute:                     Function Attributes.
44600                                                             (line   49)
44601* alignment:                             Alignment.          (line    6)
44602* alloc_size attribute:                  Function Attributes.
44603                                                             (line   69)
44604* alloca:                                Other Builtins.     (line    6)
44605* alloca vs variable-length arrays:      Variable Length.    (line   26)
44606* Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes.
44607                                                             (line  774)
44608* alternate keywords:                    Alternate Keywords. (line    6)
44609* always_inline function attribute:      Function Attributes.
44610                                                             (line   90)
44611* AMD x86-64 Options:                    i386 and x86-64 Options.
44612                                                             (line    6)
44613* AMD1:                                  Standards.          (line   13)
44614* ANSI C:                                Standards.          (line   13)
44615* ANSI C standard:                       Standards.          (line   13)
44616* ANSI C89:                              Standards.          (line   13)
44617* ANSI support:                          C Dialect Options.  (line   10)
44618* ANSI X3.159-1989:                      Standards.          (line   13)
44619* apostrophes:                           Incompatibilities.  (line  116)
44620* application binary interface:          Compatibility.      (line    6)
44621* ARC Options:                           ARC Options.        (line    6)
44622* ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
44623                                                             (line    6)
44624* ARM options:                           ARM Options.        (line    6)
44625* arrays of length zero:                 Zero Length.        (line    6)
44626* arrays of variable length:             Variable Length.    (line    6)
44627* arrays, non-lvalue:                    Subscripting.       (line    6)
44628* artificial function attribute:         Function Attributes.
44629                                                             (line  133)
44630* asin:                                  Other Builtins.     (line    6)
44631* asinf:                                 Other Builtins.     (line    6)
44632* asinh:                                 Other Builtins.     (line    6)
44633* asinhf:                                Other Builtins.     (line    6)
44634* asinhl:                                Other Builtins.     (line    6)
44635* asinl:                                 Other Builtins.     (line    6)
44636* asm constraints:                       Constraints.        (line    6)
44637* asm expressions:                       Extended Asm.       (line    6)
44638* assembler instructions:                Extended Asm.       (line    6)
44639* assembler names for identifiers:       Asm Labels.         (line    6)
44640* assembly code, invalid:                Bug Criteria.       (line   12)
44641* atan:                                  Other Builtins.     (line    6)
44642* atan2:                                 Other Builtins.     (line    6)
44643* atan2f:                                Other Builtins.     (line    6)
44644* atan2l:                                Other Builtins.     (line    6)
44645* atanf:                                 Other Builtins.     (line    6)
44646* atanh:                                 Other Builtins.     (line    6)
44647* atanhf:                                Other Builtins.     (line    6)
44648* atanhl:                                Other Builtins.     (line    6)
44649* atanl:                                 Other Builtins.     (line    6)
44650* attribute of types:                    Type Attributes.    (line    6)
44651* attribute of variables:                Variable Attributes.
44652                                                             (line    6)
44653* attribute syntax:                      Attribute Syntax.   (line    6)
44654* autoincrement/decrement addressing:    Simple Constraints. (line   30)
44655* automatic inline for C++ member fns:   Inline.             (line   71)
44656* AVR Options:                           AVR Options.        (line    6)
44657* Backwards Compatibility:               Backwards Compatibility.
44658                                                             (line    6)
44659* base class members:                    Name lookup.        (line    6)
44660* bcmp:                                  Other Builtins.     (line    6)
44661* below100 attribute:                    Variable Attributes.
44662                                                             (line  550)
44663* binary compatibility:                  Compatibility.      (line    6)
44664* Binary constants using the 0b prefix:  Binary constants.   (line    6)
44665* Blackfin Options:                      Blackfin Options.   (line    6)
44666* bound pointer to member function:      Bound member functions.
44667                                                             (line    6)
44668* bounds checking:                       Optimize Options.   (line  360)
44669* bug criteria:                          Bug Criteria.       (line    6)
44670* bugs:                                  Bugs.               (line    6)
44671* bugs, known:                           Trouble.            (line    6)
44672* built-in functions <1>:                Other Builtins.     (line    6)
44673* built-in functions:                    C Dialect Options.  (line  173)
44674* bzero:                                 Other Builtins.     (line    6)
44675* C compilation options:                 Invoking GCC.       (line   17)
44676* C intermediate output, nonexistent:    G++ and GCC.        (line   35)
44677* C language extensions:                 C Extensions.       (line    6)
44678* C language, traditional:               C Dialect Options.  (line  253)
44679* C standard:                            Standards.          (line   13)
44680* C standards:                           Standards.          (line   13)
44681* c++:                                   Invoking G++.       (line   14)
44682* C++:                                   G++ and GCC.        (line   30)
44683* C++ comments:                          C++ Comments.       (line    6)
44684* C++ compilation options:               Invoking GCC.       (line   23)
44685* C++ interface and implementation headers: C++ Interface.   (line    6)
44686* C++ language extensions:               C++ Extensions.     (line    6)
44687* C++ member fns, automatically inline:  Inline.             (line   71)
44688* C++ misunderstandings:                 C++ Misunderstandings.
44689                                                             (line    6)
44690* C++ options, command line:             C++ Dialect Options.
44691                                                             (line    6)
44692* C++ pragmas, effect on inlining:       C++ Interface.      (line   66)
44693* C++ source file suffixes:              Invoking G++.       (line    6)
44694* C++ static data, declaring and defining: Static Definitions.
44695                                                             (line    6)
44696* C89:                                   Standards.          (line   13)
44697* C90:                                   Standards.          (line   13)
44698* C94:                                   Standards.          (line   13)
44699* C95:                                   Standards.          (line   13)
44700* C99:                                   Standards.          (line   13)
44701* C9X:                                   Standards.          (line   13)
44702* C_INCLUDE_PATH:                        Environment Variables.
44703                                                             (line  127)
44704* cabs:                                  Other Builtins.     (line    6)
44705* cabsf:                                 Other Builtins.     (line    6)
44706* cabsl:                                 Other Builtins.     (line    6)
44707* cacos:                                 Other Builtins.     (line    6)
44708* cacosf:                                Other Builtins.     (line    6)
44709* cacosh:                                Other Builtins.     (line    6)
44710* cacoshf:                               Other Builtins.     (line    6)
44711* cacoshl:                               Other Builtins.     (line    6)
44712* cacosl:                                Other Builtins.     (line    6)
44713* calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes.
44714                                                             (line  496)
44715* calloc:                                Other Builtins.     (line    6)
44716* carg:                                  Other Builtins.     (line    6)
44717* cargf:                                 Other Builtins.     (line    6)
44718* cargl:                                 Other Builtins.     (line    6)
44719* case labels in initializers:           Designated Inits.   (line    6)
44720* case ranges:                           Case Ranges.        (line    6)
44721* casin:                                 Other Builtins.     (line    6)
44722* casinf:                                Other Builtins.     (line    6)
44723* casinh:                                Other Builtins.     (line    6)
44724* casinhf:                               Other Builtins.     (line    6)
44725* casinhl:                               Other Builtins.     (line    6)
44726* casinl:                                Other Builtins.     (line    6)
44727* cast to a union:                       Cast to Union.      (line    6)
44728* catan:                                 Other Builtins.     (line    6)
44729* catanf:                                Other Builtins.     (line    6)
44730* catanh:                                Other Builtins.     (line    6)
44731* catanhf:                               Other Builtins.     (line    6)
44732* catanhl:                               Other Builtins.     (line    6)
44733* catanl:                                Other Builtins.     (line    6)
44734* cbrt:                                  Other Builtins.     (line    6)
44735* cbrtf:                                 Other Builtins.     (line    6)
44736* cbrtl:                                 Other Builtins.     (line    6)
44737* ccos:                                  Other Builtins.     (line    6)
44738* ccosf:                                 Other Builtins.     (line    6)
44739* ccosh:                                 Other Builtins.     (line    6)
44740* ccoshf:                                Other Builtins.     (line    6)
44741* ccoshl:                                Other Builtins.     (line    6)
44742* ccosl:                                 Other Builtins.     (line    6)
44743* ceil:                                  Other Builtins.     (line    6)
44744* ceilf:                                 Other Builtins.     (line    6)
44745* ceill:                                 Other Builtins.     (line    6)
44746* cexp:                                  Other Builtins.     (line    6)
44747* cexpf:                                 Other Builtins.     (line    6)
44748* cexpl:                                 Other Builtins.     (line    6)
44749* character set, execution:              Preprocessor Options.
44750                                                             (line  498)
44751* character set, input:                  Preprocessor Options.
44752                                                             (line  511)
44753* character set, input normalization:    Warning Options.    (line 1111)
44754* character set, wide execution:         Preprocessor Options.
44755                                                             (line  503)
44756* cimag:                                 Other Builtins.     (line    6)
44757* cimagf:                                Other Builtins.     (line    6)
44758* cimagl:                                Other Builtins.     (line    6)
44759* cleanup attribute:                     Variable Attributes.
44760                                                             (line   89)
44761* clog:                                  Other Builtins.     (line    6)
44762* clogf:                                 Other Builtins.     (line    6)
44763* clogl:                                 Other Builtins.     (line    6)
44764* COBOL:                                 G++ and GCC.        (line   23)
44765* code generation conventions:           Code Gen Options.   (line    6)
44766* code, mixed with declarations:         Mixed Declarations. (line    6)
44767* cold function attribute:               Function Attributes.
44768                                                             (line  949)
44769* command options:                       Invoking GCC.       (line    6)
44770* comments, C++ style:                   C++ Comments.       (line    6)
44771* common attribute:                      Variable Attributes.
44772                                                             (line  105)
44773* comparison of signed and unsigned values, warning: Warning Options.
44774                                                             (line  975)
44775* compiler bugs, reporting:              Bug Reporting.      (line    6)
44776* compiler compared to C++ preprocessor: G++ and GCC.        (line   35)
44777* compiler options, C++:                 C++ Dialect Options.
44778                                                             (line    6)
44779* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
44780                                                             (line    6)
44781* compiler version, specifying:          Target Options.     (line    6)
44782* COMPILER_PATH:                         Environment Variables.
44783                                                             (line   88)
44784* complex conjugation:                   Complex.            (line   34)
44785* complex numbers:                       Complex.            (line    6)
44786* compound literals:                     Compound Literals.  (line    6)
44787* computed gotos:                        Labels as Values.   (line    6)
44788* conditional expressions, extensions:   Conditionals.       (line    6)
44789* conflicting types:                     Disappointments.    (line   21)
44790* conj:                                  Other Builtins.     (line    6)
44791* conjf:                                 Other Builtins.     (line    6)
44792* conjl:                                 Other Builtins.     (line    6)
44793* const applied to function:             Function Attributes.
44794                                                             (line    6)
44795* const function attribute:              Function Attributes.
44796                                                             (line  183)
44797* constants in constraints:              Simple Constraints. (line   60)
44798* constraint modifier characters:        Modifiers.          (line    6)
44799* constraint, matching:                  Simple Constraints. (line  129)
44800* constraints, asm:                      Constraints.        (line    6)
44801* constraints, machine specific:         Machine Constraints.
44802                                                             (line    6)
44803* constructing calls:                    Constructing Calls. (line    6)
44804* constructor expressions:               Compound Literals.  (line    6)
44805* constructor function attribute:        Function Attributes.
44806                                                             (line  211)
44807* contributors:                          Contributors.       (line    6)
44808* copysign:                              Other Builtins.     (line    6)
44809* copysignf:                             Other Builtins.     (line    6)
44810* copysignl:                             Other Builtins.     (line    6)
44811* core dump:                             Bug Criteria.       (line    9)
44812* cos:                                   Other Builtins.     (line    6)
44813* cosf:                                  Other Builtins.     (line    6)
44814* cosh:                                  Other Builtins.     (line    6)
44815* coshf:                                 Other Builtins.     (line    6)
44816* coshl:                                 Other Builtins.     (line    6)
44817* cosl:                                  Other Builtins.     (line    6)
44818* CPATH:                                 Environment Variables.
44819                                                             (line  126)
44820* CPLUS_INCLUDE_PATH:                    Environment Variables.
44821                                                             (line  128)
44822* cpow:                                  Other Builtins.     (line    6)
44823* cpowf:                                 Other Builtins.     (line    6)
44824* cpowl:                                 Other Builtins.     (line    6)
44825* cproj:                                 Other Builtins.     (line    6)
44826* cprojf:                                Other Builtins.     (line    6)
44827* cprojl:                                Other Builtins.     (line    6)
44828* creal:                                 Other Builtins.     (line    6)
44829* crealf:                                Other Builtins.     (line    6)
44830* creall:                                Other Builtins.     (line    6)
44831* CRIS Options:                          CRIS Options.       (line    6)
44832* cross compiling:                       Target Options.     (line    6)
44833* CRX Options:                           CRX Options.        (line    6)
44834* csin:                                  Other Builtins.     (line    6)
44835* csinf:                                 Other Builtins.     (line    6)
44836* csinh:                                 Other Builtins.     (line    6)
44837* csinhf:                                Other Builtins.     (line    6)
44838* csinhl:                                Other Builtins.     (line    6)
44839* csinl:                                 Other Builtins.     (line    6)
44840* csqrt:                                 Other Builtins.     (line    6)
44841* csqrtf:                                Other Builtins.     (line    6)
44842* csqrtl:                                Other Builtins.     (line    6)
44843* ctan:                                  Other Builtins.     (line    6)
44844* ctanf:                                 Other Builtins.     (line    6)
44845* ctanh:                                 Other Builtins.     (line    6)
44846* ctanhf:                                Other Builtins.     (line    6)
44847* ctanhl:                                Other Builtins.     (line    6)
44848* ctanl:                                 Other Builtins.     (line    6)
44849* Darwin options:                        Darwin Options.     (line    6)
44850* dcgettext:                             Other Builtins.     (line    6)
44851* DD integer suffix:                     Decimal Float.      (line    6)
44852* dd integer suffix:                     Decimal Float.      (line    6)
44853* deallocating variable length arrays:   Variable Length.    (line   22)
44854* debugging information options:         Debugging Options.  (line    6)
44855* decimal floating types:                Decimal Float.      (line    6)
44856* declaration scope:                     Incompatibilities.  (line   80)
44857* declarations inside expressions:       Statement Exprs.    (line    6)
44858* declarations, mixed with code:         Mixed Declarations. (line    6)
44859* declaring attributes of functions:     Function Attributes.
44860                                                             (line    6)
44861* declaring static data in C++:          Static Definitions. (line    6)
44862* defining static data in C++:           Static Definitions. (line    6)
44863* dependencies for make as output:       Environment Variables.
44864                                                             (line  154)
44865* dependencies, make:                    Preprocessor Options.
44866                                                             (line  173)
44867* DEPENDENCIES_OUTPUT:                   Environment Variables.
44868                                                             (line  153)
44869* dependent name lookup:                 Name lookup.        (line    6)
44870* deprecated attribute:                  Variable Attributes.
44871                                                             (line  114)
44872* deprecated attribute.:                 Function Attributes.
44873                                                             (line  234)
44874* designated initializers:               Designated Inits.   (line    6)
44875* designator lists:                      Designated Inits.   (line   94)
44876* designators:                           Designated Inits.   (line   61)
44877* destructor function attribute:         Function Attributes.
44878                                                             (line  211)
44879* DF integer suffix:                     Decimal Float.      (line    6)
44880* df integer suffix:                     Decimal Float.      (line    6)
44881* dgettext:                              Other Builtins.     (line    6)
44882* diagnostic messages:                   Language Independent Options.
44883                                                             (line    6)
44884* dialect options:                       C Dialect Options.  (line    6)
44885* digits in constraint:                  Simple Constraints. (line  117)
44886* directory options:                     Directory Options.  (line    6)
44887* disinterrupt attribute:                Function Attributes.
44888                                                             (line  254)
44889* DL integer suffix:                     Decimal Float.      (line    6)
44890* dl integer suffix:                     Decimal Float.      (line    6)
44891* dollar signs in identifier names:      Dollar Signs.       (line    6)
44892* double-word arithmetic:                Long Long.          (line    6)
44893* downward funargs:                      Nested Functions.   (line    6)
44894* drem:                                  Other Builtins.     (line    6)
44895* dremf:                                 Other Builtins.     (line    6)
44896* dreml:                                 Other Builtins.     (line    6)
44897* E in constraint:                       Simple Constraints. (line   79)
44898* earlyclobber operand:                  Modifiers.          (line   25)
44899* eight bit data on the H8/300, H8/300H, and H8S: Function Attributes.
44900                                                             (line  342)
44901* empty structures:                      Empty Structures.   (line    6)
44902* environment variables:                 Environment Variables.
44903                                                             (line    6)
44904* erf:                                   Other Builtins.     (line    6)
44905* erfc:                                  Other Builtins.     (line    6)
44906* erfcf:                                 Other Builtins.     (line    6)
44907* erfcl:                                 Other Builtins.     (line    6)
44908* erff:                                  Other Builtins.     (line    6)
44909* erfl:                                  Other Builtins.     (line    6)
44910* error function attribute:              Function Attributes.
44911                                                             (line  152)
44912* error messages:                        Warnings and Errors.
44913                                                             (line    6)
44914* escaped newlines:                      Escaped Newlines.   (line    6)
44915* exception handler functions on the Blackfin processor: Function Attributes.
44916                                                             (line  352)
44917* exclamation point:                     Multi-Alternative.  (line   33)
44918* exit:                                  Other Builtins.     (line    6)
44919* exp:                                   Other Builtins.     (line    6)
44920* exp10:                                 Other Builtins.     (line    6)
44921* exp10f:                                Other Builtins.     (line    6)
44922* exp10l:                                Other Builtins.     (line    6)
44923* exp2:                                  Other Builtins.     (line    6)
44924* exp2f:                                 Other Builtins.     (line    6)
44925* exp2l:                                 Other Builtins.     (line    6)
44926* expf:                                  Other Builtins.     (line    6)
44927* expl:                                  Other Builtins.     (line    6)
44928* explicit register variables:           Explicit Reg Vars.  (line    6)
44929* expm1:                                 Other Builtins.     (line    6)
44930* expm1f:                                Other Builtins.     (line    6)
44931* expm1l:                                Other Builtins.     (line    6)
44932* expressions containing statements:     Statement Exprs.    (line    6)
44933* expressions, constructor:              Compound Literals.  (line    6)
44934* extended asm:                          Extended Asm.       (line    6)
44935* extensible constraints:                Simple Constraints. (line  153)
44936* extensions, ?::                        Conditionals.       (line    6)
44937* extensions, C language:                C Extensions.       (line    6)
44938* extensions, C++ language:              C++ Extensions.     (line    6)
44939* external declaration scope:            Incompatibilities.  (line   80)
44940* externally_visible attribute.:         Function Attributes.
44941                                                             (line  358)
44942* F in constraint:                       Simple Constraints. (line   84)
44943* fabs:                                  Other Builtins.     (line    6)
44944* fabsf:                                 Other Builtins.     (line    6)
44945* fabsl:                                 Other Builtins.     (line    6)
44946* fatal signal:                          Bug Criteria.       (line    9)
44947* fdim:                                  Other Builtins.     (line    6)
44948* fdimf:                                 Other Builtins.     (line    6)
44949* fdiml:                                 Other Builtins.     (line    6)
44950* FDL, GNU Free Documentation License:   GNU Free Documentation License.
44951                                                             (line    6)
44952* ffs:                                   Other Builtins.     (line    6)
44953* file name suffix:                      Overall Options.    (line   14)
44954* file names:                            Link Options.       (line   10)
44955* fixed-point types:                     Fixed-Point.        (line    6)
44956* flatten function attribute:            Function Attributes.
44957                                                             (line  145)
44958* flexible array members:                Zero Length.        (line    6)
44959* float as function value type:          Incompatibilities.  (line  141)
44960* floating point precision <1>:          Disappointments.    (line   68)
44961* floating point precision:              Optimize Options.   (line 1677)
44962* floor:                                 Other Builtins.     (line    6)
44963* floorf:                                Other Builtins.     (line    6)
44964* floorl:                                Other Builtins.     (line    6)
44965* fma:                                   Other Builtins.     (line    6)
44966* fmaf:                                  Other Builtins.     (line    6)
44967* fmal:                                  Other Builtins.     (line    6)
44968* fmax:                                  Other Builtins.     (line    6)
44969* fmaxf:                                 Other Builtins.     (line    6)
44970* fmaxl:                                 Other Builtins.     (line    6)
44971* fmin:                                  Other Builtins.     (line    6)
44972* fminf:                                 Other Builtins.     (line    6)
44973* fminl:                                 Other Builtins.     (line    6)
44974* fmod:                                  Other Builtins.     (line    6)
44975* fmodf:                                 Other Builtins.     (line    6)
44976* fmodl:                                 Other Builtins.     (line    6)
44977* force_align_arg_pointer attribute:     Function Attributes.
44978                                                             (line  991)
44979* format function attribute:             Function Attributes.
44980                                                             (line  398)
44981* format_arg function attribute:         Function Attributes.
44982                                                             (line  457)
44983* Fortran:                               G++ and GCC.        (line    6)
44984* forwarding calls:                      Constructing Calls. (line    6)
44985* fprintf:                               Other Builtins.     (line    6)
44986* fprintf_unlocked:                      Other Builtins.     (line    6)
44987* fputs:                                 Other Builtins.     (line    6)
44988* fputs_unlocked:                        Other Builtins.     (line    6)
44989* FR30 Options:                          FR30 Options.       (line    6)
44990* freestanding environment:              Standards.          (line   13)
44991* freestanding implementation:           Standards.          (line   13)
44992* frexp:                                 Other Builtins.     (line    6)
44993* frexpf:                                Other Builtins.     (line    6)
44994* frexpl:                                Other Builtins.     (line    6)
44995* FRV Options:                           FRV Options.        (line    6)
44996* fscanf:                                Other Builtins.     (line    6)
44997* fscanf, and constant strings:          Incompatibilities.  (line   17)
44998* function addressability on the M32R/D: Function Attributes.
44999                                                             (line  704)
45000* function attributes:                   Function Attributes.
45001                                                             (line    6)
45002* function pointers, arithmetic:         Pointer Arith.      (line    6)
45003* function prototype declarations:       Function Prototypes.
45004                                                             (line    6)
45005* function without a prologue/epilogue code: Function Attributes.
45006                                                             (line  751)
45007* function, size of pointer to:          Pointer Arith.      (line    6)
45008* functions called via pointer on the RS/6000 and PowerPC: Function Attributes.
45009                                                             (line  658)
45010* functions in arbitrary sections:       Function Attributes.
45011                                                             (line    6)
45012* functions that are passed arguments in registers on the 386: Function Attributes.
45013                                                             (line    6)
45014* functions that behave like malloc:     Function Attributes.
45015                                                             (line    6)
45016* functions that do not pop the argument stack on the 386: Function Attributes.
45017                                                             (line    6)
45018* functions that do pop the argument stack on the 386: Function Attributes.
45019                                                             (line  177)
45020* functions that have different compilation options on the 386: Function Attributes.
45021                                                             (line    6)
45022* functions that have different optimization options: Function Attributes.
45023                                                             (line    6)
45024* functions that have no side effects:   Function Attributes.
45025                                                             (line    6)
45026* functions that never return:           Function Attributes.
45027                                                             (line    6)
45028* functions that pop the argument stack on the 386: Function Attributes.
45029                                                             (line    6)
45030* functions that return more than once:  Function Attributes.
45031                                                             (line    6)
45032* functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
45033                                                             (line  764)
45034* functions which handle memory bank switching: Function Attributes.
45035                                                             (line  363)
45036* functions with non-null pointer arguments: Function Attributes.
45037                                                             (line    6)
45038* functions with printf, scanf, strftime or strfmon style arguments: Function Attributes.
45039                                                             (line    6)
45040* g in constraint:                       Simple Constraints. (line  110)
45041* G in constraint:                       Simple Constraints. (line   88)
45042* g++:                                   Invoking G++.       (line   14)
45043* G++:                                   G++ and GCC.        (line   30)
45044* gamma:                                 Other Builtins.     (line    6)
45045* gamma_r:                               Other Builtins.     (line    6)
45046* gammaf:                                Other Builtins.     (line    6)
45047* gammaf_r:                              Other Builtins.     (line    6)
45048* gammal:                                Other Builtins.     (line    6)
45049* gammal_r:                              Other Builtins.     (line    6)
45050* GCC:                                   G++ and GCC.        (line    6)
45051* GCC command options:                   Invoking GCC.       (line    6)
45052* GCC_EXEC_PREFIX:                       Environment Variables.
45053                                                             (line   52)
45054* gcc_struct:                            Type Attributes.    (line  319)
45055* gcc_struct attribute:                  Variable Attributes.
45056                                                             (line  407)
45057* gcov:                                  Debugging Options.  (line  335)
45058* gettext:                               Other Builtins.     (line    6)
45059* global offset table:                   Code Gen Options.   (line  184)
45060* global register after longjmp:         Global Reg Vars.    (line   66)
45061* global register variables:             Global Reg Vars.    (line    6)
45062* GNAT:                                  G++ and GCC.        (line   30)
45063* GNU C Compiler:                        G++ and GCC.        (line    6)
45064* GNU Compiler Collection:               G++ and GCC.        (line    6)
45065* gnu_inline function attribute:         Function Attributes.
45066                                                             (line   95)
45067* goto with computed label:              Labels as Values.   (line    6)
45068* gprof:                                 Debugging Options.  (line  296)
45069* grouping options:                      Invoking GCC.       (line   26)
45070* H in constraint:                       Simple Constraints. (line   88)
45071* half-precision floating point:         Half-Precision.     (line    6)
45072* hardware models and configurations, specifying: Submodel Options.
45073                                                             (line    6)
45074* hex floats:                            Hex Floats.         (line    6)
45075* HK fixed-suffix:                       Fixed-Point.        (line    6)
45076* hk fixed-suffix:                       Fixed-Point.        (line    6)
45077* hosted environment <1>:                C Dialect Options.  (line  207)
45078* hosted environment:                    Standards.          (line   13)
45079* hosted implementation:                 Standards.          (line   13)
45080* hot function attribute:                Function Attributes.
45081                                                             (line  936)
45082* HPPA Options:                          HPPA Options.       (line    6)
45083* HR fixed-suffix:                       Fixed-Point.        (line    6)
45084* hr fixed-suffix:                       Fixed-Point.        (line    6)
45085* hypot:                                 Other Builtins.     (line    6)
45086* hypotf:                                Other Builtins.     (line    6)
45087* hypotl:                                Other Builtins.     (line    6)
45088* I in constraint:                       Simple Constraints. (line   71)
45089* i in constraint:                       Simple Constraints. (line   60)
45090* i386 and x86-64 Windows Options:       i386 and x86-64 Windows Options.
45091                                                             (line    6)
45092* i386 Options:                          i386 and x86-64 Options.
45093                                                             (line    6)
45094* IA-64 Options:                         IA-64 Options.      (line    6)
45095* IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
45096                                                             (line    6)
45097* identifier names, dollar signs in:     Dollar Signs.       (line    6)
45098* identifiers, names in assembler code:  Asm Labels.         (line    6)
45099* ilogb:                                 Other Builtins.     (line    6)
45100* ilogbf:                                Other Builtins.     (line    6)
45101* ilogbl:                                Other Builtins.     (line    6)
45102* imaxabs:                               Other Builtins.     (line    6)
45103* implementation-defined behavior, C language: C Implementation.
45104                                                             (line    6)
45105* implementation-defined behavior, C++ language: C++ Implementation.
45106                                                             (line    6)
45107* implied #pragma implementation:        C++ Interface.      (line   46)
45108* incompatibilities of GCC:              Incompatibilities.  (line    6)
45109* increment operators:                   Bug Criteria.       (line   17)
45110* index:                                 Other Builtins.     (line    6)
45111* indirect calls on ARM:                 Function Attributes.
45112                                                             (line  648)
45113* indirect calls on MIPS:                Function Attributes.
45114                                                             (line  670)
45115* init_priority attribute:               C++ Attributes.     (line    9)
45116* initializations in expressions:        Compound Literals.  (line    6)
45117* initializers with labeled elements:    Designated Inits.   (line    6)
45118* initializers, non-constant:            Initializers.       (line    6)
45119* inline automatic for C++ member fns:   Inline.             (line   71)
45120* inline functions:                      Inline.             (line    6)
45121* inline functions, omission of:         Inline.             (line   51)
45122* inlining and C++ pragmas:              C++ Interface.      (line   66)
45123* installation trouble:                  Trouble.            (line    6)
45124* integrating function code:             Inline.             (line    6)
45125* Intel 386 Options:                     i386 and x86-64 Options.
45126                                                             (line    6)
45127* interface and implementation headers, C++: C++ Interface.  (line    6)
45128* intermediate C version, nonexistent:   G++ and GCC.        (line   35)
45129* interrupt handler functions:           Function Attributes.
45130                                                             (line  140)
45131* interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes.
45132                                                             (line  612)
45133* interrupt service routines on ARM:     Function Attributes.
45134                                                             (line  627)
45135* interrupt thread functions on fido:    Function Attributes.
45136                                                             (line  619)
45137* introduction:                          Top.                (line    6)
45138* invalid assembly code:                 Bug Criteria.       (line   12)
45139* invalid input:                         Bug Criteria.       (line   42)
45140* invoking g++:                          Invoking G++.       (line   22)
45141* isalnum:                               Other Builtins.     (line    6)
45142* isalpha:                               Other Builtins.     (line    6)
45143* isascii:                               Other Builtins.     (line    6)
45144* isblank:                               Other Builtins.     (line    6)
45145* iscntrl:                               Other Builtins.     (line    6)
45146* isdigit:                               Other Builtins.     (line    6)
45147* isgraph:                               Other Builtins.     (line    6)
45148* islower:                               Other Builtins.     (line    6)
45149* ISO 9899:                              Standards.          (line   13)
45150* ISO C:                                 Standards.          (line   13)
45151* ISO C standard:                        Standards.          (line   13)
45152* ISO C90:                               Standards.          (line   13)
45153* ISO C94:                               Standards.          (line   13)
45154* ISO C95:                               Standards.          (line   13)
45155* ISO C99:                               Standards.          (line   13)
45156* ISO C9X:                               Standards.          (line   13)
45157* ISO support:                           C Dialect Options.  (line   10)
45158* ISO/IEC 9899:                          Standards.          (line   13)
45159* isprint:                               Other Builtins.     (line    6)
45160* ispunct:                               Other Builtins.     (line    6)
45161* isspace:                               Other Builtins.     (line    6)
45162* isupper:                               Other Builtins.     (line    6)
45163* iswalnum:                              Other Builtins.     (line    6)
45164* iswalpha:                              Other Builtins.     (line    6)
45165* iswblank:                              Other Builtins.     (line    6)
45166* iswcntrl:                              Other Builtins.     (line    6)
45167* iswdigit:                              Other Builtins.     (line    6)
45168* iswgraph:                              Other Builtins.     (line    6)
45169* iswlower:                              Other Builtins.     (line    6)
45170* iswprint:                              Other Builtins.     (line    6)
45171* iswpunct:                              Other Builtins.     (line    6)
45172* iswspace:                              Other Builtins.     (line    6)
45173* iswupper:                              Other Builtins.     (line    6)
45174* iswxdigit:                             Other Builtins.     (line    6)
45175* isxdigit:                              Other Builtins.     (line    6)
45176* j0:                                    Other Builtins.     (line    6)
45177* j0f:                                   Other Builtins.     (line    6)
45178* j0l:                                   Other Builtins.     (line    6)
45179* j1:                                    Other Builtins.     (line    6)
45180* j1f:                                   Other Builtins.     (line    6)
45181* j1l:                                   Other Builtins.     (line    6)
45182* Java:                                  G++ and GCC.        (line    6)
45183* java_interface attribute:              C++ Attributes.     (line   29)
45184* jn:                                    Other Builtins.     (line    6)
45185* jnf:                                   Other Builtins.     (line    6)
45186* jnl:                                   Other Builtins.     (line    6)
45187* K fixed-suffix:                        Fixed-Point.        (line    6)
45188* k fixed-suffix:                        Fixed-Point.        (line    6)
45189* keep_interrupts_masked attribute:      Function Attributes.
45190                                                             (line  588)
45191* keywords, alternate:                   Alternate Keywords. (line    6)
45192* known causes of trouble:               Trouble.            (line    6)
45193* l1_data variable attribute:            Variable Attributes.
45194                                                             (line  318)
45195* l1_data_A variable attribute:          Variable Attributes.
45196                                                             (line  318)
45197* l1_data_B variable attribute:          Variable Attributes.
45198                                                             (line  318)
45199* l1_text function attribute:            Function Attributes.
45200                                                             (line  636)
45201* l2 function attribute:                 Function Attributes.
45202                                                             (line  642)
45203* l2 variable attribute:                 Variable Attributes.
45204                                                             (line  326)
45205* labeled elements in initializers:      Designated Inits.   (line    6)
45206* labels as values:                      Labels as Values.   (line    6)
45207* labs:                                  Other Builtins.     (line    6)
45208* LANG:                                  Environment Variables.
45209                                                             (line   21)
45210* language dialect options:              C Dialect Options.  (line    6)
45211* LC_ALL:                                Environment Variables.
45212                                                             (line   21)
45213* LC_CTYPE:                              Environment Variables.
45214                                                             (line   21)
45215* LC_MESSAGES:                           Environment Variables.
45216                                                             (line   21)
45217* ldexp:                                 Other Builtins.     (line    6)
45218* ldexpf:                                Other Builtins.     (line    6)
45219* ldexpl:                                Other Builtins.     (line    6)
45220* length-zero arrays:                    Zero Length.        (line    6)
45221* lgamma:                                Other Builtins.     (line    6)
45222* lgamma_r:                              Other Builtins.     (line    6)
45223* lgammaf:                               Other Builtins.     (line    6)
45224* lgammaf_r:                             Other Builtins.     (line    6)
45225* lgammal:                               Other Builtins.     (line    6)
45226* lgammal_r:                             Other Builtins.     (line    6)
45227* Libraries:                             Link Options.       (line   24)
45228* LIBRARY_PATH:                          Environment Variables.
45229                                                             (line   94)
45230* link options:                          Link Options.       (line    6)
45231* linker script:                         Link Options.       (line  178)
45232* LK fixed-suffix:                       Fixed-Point.        (line    6)
45233* lk fixed-suffix:                       Fixed-Point.        (line    6)
45234* LL integer suffix:                     Long Long.          (line    6)
45235* llabs:                                 Other Builtins.     (line    6)
45236* LLK fixed-suffix:                      Fixed-Point.        (line    6)
45237* llk fixed-suffix:                      Fixed-Point.        (line    6)
45238* LLR fixed-suffix:                      Fixed-Point.        (line    6)
45239* llr fixed-suffix:                      Fixed-Point.        (line    6)
45240* llrint:                                Other Builtins.     (line    6)
45241* llrintf:                               Other Builtins.     (line    6)
45242* llrintl:                               Other Builtins.     (line    6)
45243* llround:                               Other Builtins.     (line    6)
45244* llroundf:                              Other Builtins.     (line    6)
45245* llroundl:                              Other Builtins.     (line    6)
45246* LM32 options:                          LM32 Options.       (line    6)
45247* load address instruction:              Simple Constraints. (line  144)
45248* local labels:                          Local Labels.       (line    6)
45249* local variables in macros:             Typeof.             (line   46)
45250* local variables, specifying registers: Local Reg Vars.     (line    6)
45251* locale:                                Environment Variables.
45252                                                             (line   21)
45253* locale definition:                     Environment Variables.
45254                                                             (line  103)
45255* log:                                   Other Builtins.     (line    6)
45256* log10:                                 Other Builtins.     (line    6)
45257* log10f:                                Other Builtins.     (line    6)
45258* log10l:                                Other Builtins.     (line    6)
45259* log1p:                                 Other Builtins.     (line    6)
45260* log1pf:                                Other Builtins.     (line    6)
45261* log1pl:                                Other Builtins.     (line    6)
45262* log2:                                  Other Builtins.     (line    6)
45263* log2f:                                 Other Builtins.     (line    6)
45264* log2l:                                 Other Builtins.     (line    6)
45265* logb:                                  Other Builtins.     (line    6)
45266* logbf:                                 Other Builtins.     (line    6)
45267* logbl:                                 Other Builtins.     (line    6)
45268* logf:                                  Other Builtins.     (line    6)
45269* logl:                                  Other Builtins.     (line    6)
45270* long long data types:                  Long Long.          (line    6)
45271* longjmp:                               Global Reg Vars.    (line   66)
45272* longjmp incompatibilities:             Incompatibilities.  (line   39)
45273* longjmp warnings:                      Warning Options.    (line  579)
45274* LR fixed-suffix:                       Fixed-Point.        (line    6)
45275* lr fixed-suffix:                       Fixed-Point.        (line    6)
45276* lrint:                                 Other Builtins.     (line    6)
45277* lrintf:                                Other Builtins.     (line    6)
45278* lrintl:                                Other Builtins.     (line    6)
45279* lround:                                Other Builtins.     (line    6)
45280* lroundf:                               Other Builtins.     (line    6)
45281* lroundl:                               Other Builtins.     (line    6)
45282* m in constraint:                       Simple Constraints. (line   17)
45283* M32C options:                          M32C Options.       (line    6)
45284* M32R/D options:                        M32R/D Options.     (line    6)
45285* M680x0 options:                        M680x0 Options.     (line    6)
45286* M68hc1x options:                       M68hc1x Options.    (line    6)
45287* machine dependent options:             Submodel Options.   (line    6)
45288* machine specific constraints:          Machine Constraints.
45289                                                             (line    6)
45290* macro with variable arguments:         Variadic Macros.    (line    6)
45291* macros containing asm:                 Extended Asm.       (line  242)
45292* macros, inline alternative:            Inline.             (line    6)
45293* macros, local labels:                  Local Labels.       (line    6)
45294* macros, local variables in:            Typeof.             (line   46)
45295* macros, statements in expressions:     Statement Exprs.    (line    6)
45296* macros, types of arguments:            Typeof.             (line    6)
45297* make:                                  Preprocessor Options.
45298                                                             (line  173)
45299* malloc:                                Other Builtins.     (line    6)
45300* malloc attribute:                      Function Attributes.
45301                                                             (line  680)
45302* matching constraint:                   Simple Constraints. (line  129)
45303* MCore options:                         MCore Options.      (line    6)
45304* member fns, automatically inline:      Inline.             (line   71)
45305* memchr:                                Other Builtins.     (line    6)
45306* memcmp:                                Other Builtins.     (line    6)
45307* memcpy:                                Other Builtins.     (line    6)
45308* memory references in constraints:      Simple Constraints. (line   17)
45309* mempcpy:                               Other Builtins.     (line    6)
45310* memset:                                Other Builtins.     (line    6)
45311* MeP options:                           MeP Options.        (line    6)
45312* Mercury:                               G++ and GCC.        (line   23)
45313* message formatting:                    Language Independent Options.
45314                                                             (line    6)
45315* messages, warning:                     Warning Options.    (line    6)
45316* messages, warning and error:           Warnings and Errors.
45317                                                             (line    6)
45318* middle-operands, omitted:              Conditionals.       (line    6)
45319* MIPS options:                          MIPS Options.       (line    6)
45320* mips16 attribute:                      Function Attributes.
45321                                                             (line  690)
45322* misunderstandings in C++:              C++ Misunderstandings.
45323                                                             (line    6)
45324* mixed declarations and code:           Mixed Declarations. (line    6)
45325* mktemp, and constant strings:          Incompatibilities.  (line   13)
45326* MMIX Options:                          MMIX Options.       (line    6)
45327* MN10300 options:                       MN10300 Options.    (line    6)
45328* mode attribute:                        Variable Attributes.
45329                                                             (line  134)
45330* modf:                                  Other Builtins.     (line    6)
45331* modff:                                 Other Builtins.     (line    6)
45332* modfl:                                 Other Builtins.     (line    6)
45333* modifiers in constraints:              Modifiers.          (line    6)
45334* ms_abi attribute:                      Function Attributes.
45335                                                             (line  732)
45336* ms_hook_prologue attribute:            Function Attributes.
45337                                                             (line  744)
45338* ms_struct:                             Type Attributes.    (line  319)
45339* ms_struct attribute:                   Variable Attributes.
45340                                                             (line  407)
45341* mudflap:                               Optimize Options.   (line  360)
45342* multiple alternative constraints:      Multi-Alternative.  (line    6)
45343* multiprecision arithmetic:             Long Long.          (line    6)
45344* n in constraint:                       Simple Constraints. (line   65)
45345* named address spaces:                  Named Address Spaces.
45346                                                             (line    6)
45347* names used in assembler code:          Asm Labels.         (line    6)
45348* naming convention, implementation headers: C++ Interface.  (line   46)
45349* nearbyint:                             Other Builtins.     (line    6)
45350* nearbyintf:                            Other Builtins.     (line    6)
45351* nearbyintl:                            Other Builtins.     (line    6)
45352* nested functions:                      Nested Functions.   (line    6)
45353* newlines (escaped):                    Escaped Newlines.   (line    6)
45354* nextafter:                             Other Builtins.     (line    6)
45355* nextafterf:                            Other Builtins.     (line    6)
45356* nextafterl:                            Other Builtins.     (line    6)
45357* nexttoward:                            Other Builtins.     (line    6)
45358* nexttowardf:                           Other Builtins.     (line    6)
45359* nexttowardl:                           Other Builtins.     (line    6)
45360* NFC:                                   Warning Options.    (line 1111)
45361* NFKC:                                  Warning Options.    (line 1111)
45362* NMI handler functions on the Blackfin processor: Function Attributes.
45363                                                             (line  779)
45364* no_instrument_function function attribute: Function Attributes.
45365                                                             (line  785)
45366* noclone function attribute:            Function Attributes.
45367                                                             (line  800)
45368* nocommon attribute:                    Variable Attributes.
45369                                                             (line  105)
45370* noinline function attribute:           Function Attributes.
45371                                                             (line  790)
45372* nomips16 attribute:                    Function Attributes.
45373                                                             (line  690)
45374* non-constant initializers:             Initializers.       (line    6)
45375* non-static inline function:            Inline.             (line   85)
45376* nonnull function attribute:            Function Attributes.
45377                                                             (line  806)
45378* noreturn function attribute:           Function Attributes.
45379                                                             (line  829)
45380* nothrow function attribute:            Function Attributes.
45381                                                             (line  871)
45382* o in constraint:                       Simple Constraints. (line   23)
45383* OBJC_INCLUDE_PATH:                     Environment Variables.
45384                                                             (line  129)
45385* Objective-C <1>:                       Standards.          (line  153)
45386* Objective-C:                           G++ and GCC.        (line    6)
45387* Objective-C and Objective-C++ options, command line: Objective-C and Objective-C++ Dialect Options.
45388                                                             (line    6)
45389* Objective-C++ <1>:                     Standards.          (line  153)
45390* Objective-C++:                         G++ and GCC.        (line    6)
45391* offsettable address:                   Simple Constraints. (line   23)
45392* old-style function definitions:        Function Prototypes.
45393                                                             (line    6)
45394* omitted middle-operands:               Conditionals.       (line    6)
45395* open coding:                           Inline.             (line    6)
45396* openmp parallel:                       C Dialect Options.  (line  224)
45397* operand constraints, asm:              Constraints.        (line    6)
45398* optimize function attribute:           Function Attributes.
45399                                                             (line  879)
45400* optimize options:                      Optimize Options.   (line    6)
45401* options to control diagnostics formatting: Language Independent Options.
45402                                                             (line    6)
45403* options to control warnings:           Warning Options.    (line    6)
45404* options, C++:                          C++ Dialect Options.
45405                                                             (line    6)
45406* options, code generation:              Code Gen Options.   (line    6)
45407* options, debugging:                    Debugging Options.  (line    6)
45408* options, dialect:                      C Dialect Options.  (line    6)
45409* options, directory search:             Directory Options.  (line    6)
45410* options, GCC command:                  Invoking GCC.       (line    6)
45411* options, grouping:                     Invoking GCC.       (line   26)
45412* options, linking:                      Link Options.       (line    6)
45413* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
45414                                                             (line    6)
45415* options, optimization:                 Optimize Options.   (line    6)
45416* options, order:                        Invoking GCC.       (line   30)
45417* options, preprocessor:                 Preprocessor Options.
45418                                                             (line    6)
45419* order of evaluation, side effects:     Non-bugs.           (line  196)
45420* order of options:                      Invoking GCC.       (line   30)
45421* other register constraints:            Simple Constraints. (line  153)
45422* output file option:                    Overall Options.    (line  186)
45423* overloaded virtual fn, warning:        C++ Dialect Options.
45424                                                             (line  502)
45425* p in constraint:                       Simple Constraints. (line  144)
45426* packed attribute:                      Variable Attributes.
45427                                                             (line  145)
45428* parameter forward declaration:         Variable Length.    (line   59)
45429* parameters, aliased:                   Code Gen Options.   (line  411)
45430* Pascal:                                G++ and GCC.        (line   23)
45431* pcs function attribute:                Function Attributes.
45432                                                             (line  896)
45433* PDP-11 Options:                        PDP-11 Options.     (line    6)
45434* PIC:                                   Code Gen Options.   (line  184)
45435* picoChip options:                      picoChip Options.   (line    6)
45436* pmf:                                   Bound member functions.
45437                                                             (line    6)
45438* pointer arguments:                     Function Attributes.
45439                                                             (line  188)
45440* pointer to member function:            Bound member functions.
45441                                                             (line    6)
45442* portions of temporary objects, pointers to: Temporaries.   (line    6)
45443* pow:                                   Other Builtins.     (line    6)
45444* pow10:                                 Other Builtins.     (line    6)
45445* pow10f:                                Other Builtins.     (line    6)
45446* pow10l:                                Other Builtins.     (line    6)
45447* PowerPC options:                       PowerPC Options.    (line    6)
45448* powf:                                  Other Builtins.     (line    6)
45449* powl:                                  Other Builtins.     (line    6)
45450* pragma GCC optimize:                   Function Specific Option Pragmas.
45451                                                             (line   20)
45452* pragma GCC pop_options:                Function Specific Option Pragmas.
45453                                                             (line   33)
45454* pragma GCC push_options:               Function Specific Option Pragmas.
45455                                                             (line   33)
45456* pragma GCC reset_options:              Function Specific Option Pragmas.
45457                                                             (line   43)
45458* pragma GCC target:                     Function Specific Option Pragmas.
45459                                                             (line    7)
45460* pragma, align:                         Solaris Pragmas.    (line   11)
45461* pragma, call:                          MeP Pragmas.        (line   48)
45462* pragma, coprocessor available:         MeP Pragmas.        (line   13)
45463* pragma, coprocessor call_saved:        MeP Pragmas.        (line   20)
45464* pragma, coprocessor subclass:          MeP Pragmas.        (line   28)
45465* pragma, custom io_volatile:            MeP Pragmas.        (line    7)
45466* pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
45467* pragma, disinterrupt:                  MeP Pragmas.        (line   38)
45468* pragma, extern_prefix:                 Symbol-Renaming Pragmas.
45469                                                             (line   20)
45470* pragma, fini:                          Solaris Pragmas.    (line   19)
45471* pragma, init:                          Solaris Pragmas.    (line   24)
45472* pragma, long_calls:                    ARM Pragmas.        (line   11)
45473* pragma, long_calls_off:                ARM Pragmas.        (line   17)
45474* pragma, longcall:                      RS/6000 and PowerPC Pragmas.
45475                                                             (line   14)
45476* pragma, mark:                          Darwin Pragmas.     (line   11)
45477* pragma, memregs:                       M32C Pragmas.       (line    7)
45478* pragma, no_long_calls:                 ARM Pragmas.        (line   14)
45479* pragma, options align:                 Darwin Pragmas.     (line   14)
45480* pragma, pop_macro:                     Push/Pop Macro Pragmas.
45481                                                             (line   15)
45482* pragma, push_macro:                    Push/Pop Macro Pragmas.
45483                                                             (line   11)
45484* pragma, reason for not using:          Function Attributes.
45485                                                             (line 1455)
45486* pragma, redefine_extname:              Symbol-Renaming Pragmas.
45487                                                             (line   14)
45488* pragma, segment:                       Darwin Pragmas.     (line   21)
45489* pragma, unused:                        Darwin Pragmas.     (line   24)
45490* pragma, visibility:                    Visibility Pragmas. (line    8)
45491* pragma, weak:                          Weak Pragmas.       (line   10)
45492* pragmas:                               Pragmas.            (line    6)
45493* pragmas in C++, effect on inlining:    C++ Interface.      (line   66)
45494* pragmas, interface and implementation: C++ Interface.      (line    6)
45495* pragmas, warning of unknown:           Warning Options.    (line  596)
45496* precompiled headers:                   Precompiled Headers.
45497                                                             (line    6)
45498* preprocessing numbers:                 Incompatibilities.  (line  173)
45499* preprocessing tokens:                  Incompatibilities.  (line  173)
45500* preprocessor options:                  Preprocessor Options.
45501                                                             (line    6)
45502* printf:                                Other Builtins.     (line    6)
45503* printf_unlocked:                       Other Builtins.     (line    6)
45504* prof:                                  Debugging Options.  (line  290)
45505* progmem variable attribute:            Variable Attributes.
45506                                                             (line  561)
45507* promotion of formal parameters:        Function Prototypes.
45508                                                             (line    6)
45509* pure function attribute:               Function Attributes.
45510                                                             (line  914)
45511* push address instruction:              Simple Constraints. (line  144)
45512* putchar:                               Other Builtins.     (line    6)
45513* puts:                                  Other Builtins.     (line    6)
45514* Q floating point suffix:               Floating Types.     (line    6)
45515* q floating point suffix:               Floating Types.     (line    6)
45516* qsort, and global register variables:  Global Reg Vars.    (line   42)
45517* question mark:                         Multi-Alternative.  (line   27)
45518* R fixed-suffix:                        Fixed-Point.        (line    6)
45519* r fixed-suffix:                        Fixed-Point.        (line    6)
45520* r in constraint:                       Simple Constraints. (line   56)
45521* ranges in case statements:             Case Ranges.        (line    6)
45522* read-only strings:                     Incompatibilities.  (line    9)
45523* register variable after longjmp:       Global Reg Vars.    (line   66)
45524* registers:                             Extended Asm.       (line    6)
45525* registers for local variables:         Local Reg Vars.     (line    6)
45526* registers in constraints:              Simple Constraints. (line   56)
45527* registers, global allocation:          Explicit Reg Vars.  (line    6)
45528* registers, global variables in:        Global Reg Vars.    (line    6)
45529* regparm attribute:                     Function Attributes.
45530                                                             (line  967)
45531* relocation truncated to fit (ColdFire): M680x0 Options.    (line  328)
45532* relocation truncated to fit (MIPS):    MIPS Options.       (line  199)
45533* remainder:                             Other Builtins.     (line    6)
45534* remainderf:                            Other Builtins.     (line    6)
45535* remainderl:                            Other Builtins.     (line    6)
45536* remquo:                                Other Builtins.     (line    6)
45537* remquof:                               Other Builtins.     (line    6)
45538* remquol:                               Other Builtins.     (line    6)
45539* reordering, warning:                   C++ Dialect Options.
45540                                                             (line  427)
45541* reporting bugs:                        Bugs.               (line    6)
45542* resbank attribute:                     Function Attributes.
45543                                                             (line  999)
45544* rest argument (in macro):              Variadic Macros.    (line    6)
45545* restricted pointers:                   Restricted Pointers.
45546                                                             (line    6)
45547* restricted references:                 Restricted Pointers.
45548                                                             (line    6)
45549* restricted this pointer:               Restricted Pointers.
45550                                                             (line    6)
45551* returns_twice attribute:               Function Attributes.
45552                                                             (line 1013)
45553* rindex:                                Other Builtins.     (line    6)
45554* rint:                                  Other Builtins.     (line    6)
45555* rintf:                                 Other Builtins.     (line    6)
45556* rintl:                                 Other Builtins.     (line    6)
45557* round:                                 Other Builtins.     (line    6)
45558* roundf:                                Other Builtins.     (line    6)
45559* roundl:                                Other Builtins.     (line    6)
45560* RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
45561                                                             (line    6)
45562* RTTI:                                  Vague Linkage.      (line   43)
45563* run-time options:                      Code Gen Options.   (line    6)
45564* RX Options:                            RX Options.         (line    6)
45565* s in constraint:                       Simple Constraints. (line   92)
45566* S/390 and zSeries Options:             S/390 and zSeries Options.
45567                                                             (line    6)
45568* save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes.
45569                                                             (line 1022)
45570* scalb:                                 Other Builtins.     (line    6)
45571* scalbf:                                Other Builtins.     (line    6)
45572* scalbl:                                Other Builtins.     (line    6)
45573* scalbln:                               Other Builtins.     (line    6)
45574* scalblnf:                              Other Builtins.     (line    6)
45575* scalbn:                                Other Builtins.     (line    6)
45576* scalbnf:                               Other Builtins.     (line    6)
45577* scanf, and constant strings:           Incompatibilities.  (line   17)
45578* scanfnl:                               Other Builtins.     (line    6)
45579* scope of a variable length array:      Variable Length.    (line   22)
45580* scope of declaration:                  Disappointments.    (line   21)
45581* scope of external declarations:        Incompatibilities.  (line   80)
45582* Score Options:                         Score Options.      (line    6)
45583* search path:                           Directory Options.  (line    6)
45584* section function attribute:            Function Attributes.
45585                                                             (line 1027)
45586* section variable attribute:            Variable Attributes.
45587                                                             (line  166)
45588* sentinel function attribute:           Function Attributes.
45589                                                             (line 1043)
45590* setjmp:                                Global Reg Vars.    (line   66)
45591* setjmp incompatibilities:              Incompatibilities.  (line   39)
45592* shared strings:                        Incompatibilities.  (line    9)
45593* shared variable attribute:             Variable Attributes.
45594                                                             (line  211)
45595* side effect in ?::                     Conditionals.       (line   20)
45596* side effects, macro argument:          Statement Exprs.    (line   35)
45597* side effects, order of evaluation:     Non-bugs.           (line  196)
45598* signal handler functions on the AVR processors: Function Attributes.
45599                                                             (line 1074)
45600* signbit:                               Other Builtins.     (line    6)
45601* signbitd128:                           Other Builtins.     (line    6)
45602* signbitd32:                            Other Builtins.     (line    6)
45603* signbitd64:                            Other Builtins.     (line    6)
45604* signbitf:                              Other Builtins.     (line    6)
45605* signbitl:                              Other Builtins.     (line    6)
45606* signed and unsigned values, comparison warning: Warning Options.
45607                                                             (line  975)
45608* significand:                           Other Builtins.     (line    6)
45609* significandf:                          Other Builtins.     (line    6)
45610* significandl:                          Other Builtins.     (line    6)
45611* simple constraints:                    Simple Constraints. (line    6)
45612* sin:                                   Other Builtins.     (line    6)
45613* sincos:                                Other Builtins.     (line    6)
45614* sincosf:                               Other Builtins.     (line    6)
45615* sincosl:                               Other Builtins.     (line    6)
45616* sinf:                                  Other Builtins.     (line    6)
45617* sinh:                                  Other Builtins.     (line    6)
45618* sinhf:                                 Other Builtins.     (line    6)
45619* sinhl:                                 Other Builtins.     (line    6)
45620* sinl:                                  Other Builtins.     (line    6)
45621* sizeof:                                Typeof.             (line    6)
45622* smaller data references:               M32R/D Options.     (line   57)
45623* smaller data references (PowerPC):     RS/6000 and PowerPC Options.
45624                                                             (line  682)
45625* snprintf:                              Other Builtins.     (line    6)
45626* SPARC options:                         SPARC Options.      (line    6)
45627* Spec Files:                            Spec Files.         (line    6)
45628* specified registers:                   Explicit Reg Vars.  (line    6)
45629* specifying compiler version and target machine: Target Options.
45630                                                             (line    6)
45631* specifying hardware config:            Submodel Options.   (line    6)
45632* specifying machine version:            Target Options.     (line    6)
45633* specifying registers for local variables: Local Reg Vars.  (line    6)
45634* speed of compilation:                  Precompiled Headers.
45635                                                             (line    6)
45636* sprintf:                               Other Builtins.     (line    6)
45637* SPU options:                           SPU Options.        (line    6)
45638* sqrt:                                  Other Builtins.     (line    6)
45639* sqrtf:                                 Other Builtins.     (line    6)
45640* sqrtl:                                 Other Builtins.     (line    6)
45641* sscanf:                                Other Builtins.     (line    6)
45642* sscanf, and constant strings:          Incompatibilities.  (line   17)
45643* sseregparm attribute:                  Function Attributes.
45644                                                             (line  984)
45645* statements inside expressions:         Statement Exprs.    (line    6)
45646* static data in C++, declaring and defining: Static Definitions.
45647                                                             (line    6)
45648* stpcpy:                                Other Builtins.     (line    6)
45649* stpncpy:                               Other Builtins.     (line    6)
45650* strcasecmp:                            Other Builtins.     (line    6)
45651* strcat:                                Other Builtins.     (line    6)
45652* strchr:                                Other Builtins.     (line    6)
45653* strcmp:                                Other Builtins.     (line    6)
45654* strcpy:                                Other Builtins.     (line    6)
45655* strcspn:                               Other Builtins.     (line    6)
45656* strdup:                                Other Builtins.     (line    6)
45657* strfmon:                               Other Builtins.     (line    6)
45658* strftime:                              Other Builtins.     (line    6)
45659* string constants:                      Incompatibilities.  (line    9)
45660* strlen:                                Other Builtins.     (line    6)
45661* strncasecmp:                           Other Builtins.     (line    6)
45662* strncat:                               Other Builtins.     (line    6)
45663* strncmp:                               Other Builtins.     (line    6)
45664* strncpy:                               Other Builtins.     (line    6)
45665* strndup:                               Other Builtins.     (line    6)
45666* strpbrk:                               Other Builtins.     (line    6)
45667* strrchr:                               Other Builtins.     (line    6)
45668* strspn:                                Other Builtins.     (line    6)
45669* strstr:                                Other Builtins.     (line    6)
45670* struct:                                Unnamed Fields.     (line    6)
45671* structures:                            Incompatibilities.  (line  146)
45672* structures, constructor expression:    Compound Literals.  (line    6)
45673* submodel options:                      Submodel Options.   (line    6)
45674* subscripting:                          Subscripting.       (line    6)
45675* subscripting and function values:      Subscripting.       (line    6)
45676* suffixes for C++ source:               Invoking G++.       (line    6)
45677* SUNPRO_DEPENDENCIES:                   Environment Variables.
45678                                                             (line  169)
45679* suppressing warnings:                  Warning Options.    (line    6)
45680* surprises in C++:                      C++ Misunderstandings.
45681                                                             (line    6)
45682* syntax checking:                       Warning Options.    (line   13)
45683* syscall_linkage attribute:             Function Attributes.
45684                                                             (line 1096)
45685* system headers, warnings from:         Warning Options.    (line  710)
45686* sysv_abi attribute:                    Function Attributes.
45687                                                             (line  732)
45688* tan:                                   Other Builtins.     (line    6)
45689* tanf:                                  Other Builtins.     (line    6)
45690* tanh:                                  Other Builtins.     (line    6)
45691* tanhf:                                 Other Builtins.     (line    6)
45692* tanhl:                                 Other Builtins.     (line    6)
45693* tanl:                                  Other Builtins.     (line    6)
45694* target function attribute:             Function Attributes.
45695                                                             (line 1103)
45696* target machine, specifying:            Target Options.     (line    6)
45697* target options:                        Target Options.     (line    6)
45698* target("abm") attribute:               Function Attributes.
45699                                                             (line 1130)
45700* target("aes") attribute:               Function Attributes.
45701                                                             (line 1135)
45702* target("align-stringops") attribute:   Function Attributes.
45703                                                             (line 1225)
45704* target("arch=ARCH") attribute:         Function Attributes.
45705                                                             (line 1234)
45706* target("cld") attribute:               Function Attributes.
45707                                                             (line 1196)
45708* target("fancy-math-387") attribute:    Function Attributes.
45709                                                             (line 1200)
45710* target("fma4") attribute:              Function Attributes.
45711                                                             (line 1180)
45712* target("fpmath=FPMATH") attribute:     Function Attributes.
45713                                                             (line 1242)
45714* target("fused-madd") attribute:        Function Attributes.
45715                                                             (line 1205)
45716* target("ieee-fp") attribute:           Function Attributes.
45717                                                             (line 1210)
45718* target("inline-all-stringops") attribute: Function Attributes.
45719                                                             (line 1215)
45720* target("inline-stringops-dynamically") attribute: Function Attributes.
45721                                                             (line 1219)
45722* target("lwp") attribute:               Function Attributes.
45723                                                             (line 1188)
45724* target("mmx") attribute:               Function Attributes.
45725                                                             (line 1139)
45726* target("pclmul") attribute:            Function Attributes.
45727                                                             (line 1143)
45728* target("popcnt") attribute:            Function Attributes.
45729                                                             (line 1147)
45730* target("recip") attribute:             Function Attributes.
45731                                                             (line 1229)
45732* target("sse") attribute:               Function Attributes.
45733                                                             (line 1151)
45734* target("sse2") attribute:              Function Attributes.
45735                                                             (line 1155)
45736* target("sse3") attribute:              Function Attributes.
45737                                                             (line 1159)
45738* target("sse4") attribute:              Function Attributes.
45739                                                             (line 1163)
45740* target("sse4.1") attribute:            Function Attributes.
45741                                                             (line 1168)
45742* target("sse4.2") attribute:            Function Attributes.
45743                                                             (line 1172)
45744* target("sse4a") attribute:             Function Attributes.
45745                                                             (line 1176)
45746* target("ssse3") attribute:             Function Attributes.
45747                                                             (line 1192)
45748* target("tune=TUNE") attribute:         Function Attributes.
45749                                                             (line 1238)
45750* target("xop") attribute:               Function Attributes.
45751                                                             (line 1184)
45752* TC1:                                   Standards.          (line   13)
45753* TC2:                                   Standards.          (line   13)
45754* TC3:                                   Standards.          (line   13)
45755* Technical Corrigenda:                  Standards.          (line   13)
45756* Technical Corrigendum 1:               Standards.          (line   13)
45757* Technical Corrigendum 2:               Standards.          (line   13)
45758* Technical Corrigendum 3:               Standards.          (line   13)
45759* template instantiation:                Template Instantiation.
45760                                                             (line    6)
45761* temporaries, lifetime of:              Temporaries.        (line    6)
45762* tgamma:                                Other Builtins.     (line    6)
45763* tgammaf:                               Other Builtins.     (line    6)
45764* tgammal:                               Other Builtins.     (line    6)
45765* Thread-Local Storage:                  Thread-Local.       (line    6)
45766* thunks:                                Nested Functions.   (line    6)
45767* tiny data section on the H8/300H and H8S: Function Attributes.
45768                                                             (line 1260)
45769* TLS:                                   Thread-Local.       (line    6)
45770* tls_model attribute:                   Variable Attributes.
45771                                                             (line  235)
45772* TMPDIR:                                Environment Variables.
45773                                                             (line   45)
45774* toascii:                               Other Builtins.     (line    6)
45775* tolower:                               Other Builtins.     (line    6)
45776* toupper:                               Other Builtins.     (line    6)
45777* towlower:                              Other Builtins.     (line    6)
45778* towupper:                              Other Builtins.     (line    6)
45779* traditional C language:                C Dialect Options.  (line  253)
45780* trunc:                                 Other Builtins.     (line    6)
45781* truncf:                                Other Builtins.     (line    6)
45782* truncl:                                Other Builtins.     (line    6)
45783* two-stage name lookup:                 Name lookup.        (line    6)
45784* type alignment:                        Alignment.          (line    6)
45785* type attributes:                       Type Attributes.    (line    6)
45786* type_info:                             Vague Linkage.      (line   43)
45787* typedef names as function parameters:  Incompatibilities.  (line   97)
45788* typeof:                                Typeof.             (line    6)
45789* UHK fixed-suffix:                      Fixed-Point.        (line    6)
45790* uhk fixed-suffix:                      Fixed-Point.        (line    6)
45791* UHR fixed-suffix:                      Fixed-Point.        (line    6)
45792* uhr fixed-suffix:                      Fixed-Point.        (line    6)
45793* UK fixed-suffix:                       Fixed-Point.        (line    6)
45794* uk fixed-suffix:                       Fixed-Point.        (line    6)
45795* ULK fixed-suffix:                      Fixed-Point.        (line    6)
45796* ulk fixed-suffix:                      Fixed-Point.        (line    6)
45797* ULL integer suffix:                    Long Long.          (line    6)
45798* ULLK fixed-suffix:                     Fixed-Point.        (line    6)
45799* ullk fixed-suffix:                     Fixed-Point.        (line    6)
45800* ULLR fixed-suffix:                     Fixed-Point.        (line    6)
45801* ullr fixed-suffix:                     Fixed-Point.        (line    6)
45802* ULR fixed-suffix:                      Fixed-Point.        (line    6)
45803* ulr fixed-suffix:                      Fixed-Point.        (line    6)
45804* undefined behavior:                    Bug Criteria.       (line   17)
45805* undefined function value:              Bug Criteria.       (line   17)
45806* underscores in variables in macros:    Typeof.             (line   46)
45807* union:                                 Unnamed Fields.     (line    6)
45808* union, casting to a:                   Cast to Union.      (line    6)
45809* unions:                                Incompatibilities.  (line  146)
45810* unknown pragmas, warning:              Warning Options.    (line  596)
45811* unresolved references and -nodefaultlibs: Link Options.    (line   82)
45812* unresolved references and -nostdlib:   Link Options.       (line   82)
45813* unused attribute.:                     Function Attributes.
45814                                                             (line 1272)
45815* UR fixed-suffix:                       Fixed-Point.        (line    6)
45816* ur fixed-suffix:                       Fixed-Point.        (line    6)
45817* use_debug_exception_return attribute:  Function Attributes.
45818                                                             (line  593)
45819* use_shadow_register_set attribute:     Function Attributes.
45820                                                             (line  584)
45821* used attribute.:                       Function Attributes.
45822                                                             (line 1277)
45823* User stack pointer in interrupts on the Blackfin: Function Attributes.
45824                                                             (line  631)
45825* V in constraint:                       Simple Constraints. (line   43)
45826* V850 Options:                          V850 Options.       (line    6)
45827* vague linkage:                         Vague Linkage.      (line    6)
45828* value after longjmp:                   Global Reg Vars.    (line   66)
45829* variable addressability on the IA-64:  Function Attributes.
45830                                                             (line  704)
45831* variable addressability on the M32R/D: Variable Attributes.
45832                                                             (line  336)
45833* variable alignment:                    Alignment.          (line    6)
45834* variable attributes:                   Variable Attributes.
45835                                                             (line    6)
45836* variable number of arguments:          Variadic Macros.    (line    6)
45837* variable-length array scope:           Variable Length.    (line   22)
45838* variable-length arrays:                Variable Length.    (line    6)
45839* variables in specified registers:      Explicit Reg Vars.  (line    6)
45840* variables, local, in macros:           Typeof.             (line   46)
45841* variadic macros:                       Variadic Macros.    (line    6)
45842* VAX options:                           VAX Options.        (line    6)
45843* version_id attribute:                  Function Attributes.
45844                                                             (line 1283)
45845* vfprintf:                              Other Builtins.     (line    6)
45846* vfscanf:                               Other Builtins.     (line    6)
45847* visibility attribute:                  Function Attributes.
45848                                                             (line 1293)
45849* VLAs:                                  Variable Length.    (line    6)
45850* vliw attribute:                        Function Attributes.
45851                                                             (line 1387)
45852* void pointers, arithmetic:             Pointer Arith.      (line    6)
45853* void, size of pointer to:              Pointer Arith.      (line    6)
45854* volatile access:                       Volatiles.          (line    6)
45855* volatile applied to function:          Function Attributes.
45856                                                             (line    6)
45857* volatile read:                         Volatiles.          (line    6)
45858* volatile write:                        Volatiles.          (line    6)
45859* vprintf:                               Other Builtins.     (line    6)
45860* vscanf:                                Other Builtins.     (line    6)
45861* vsnprintf:                             Other Builtins.     (line    6)
45862* vsprintf:                              Other Builtins.     (line    6)
45863* vsscanf:                               Other Builtins.     (line    6)
45864* vtable:                                Vague Linkage.      (line   28)
45865* VxWorks Options:                       VxWorks Options.    (line    6)
45866* W floating point suffix:               Floating Types.     (line    6)
45867* w floating point suffix:               Floating Types.     (line    6)
45868* warn_unused_result attribute:          Function Attributes.
45869                                                             (line 1393)
45870* warning for comparison of signed and unsigned values: Warning Options.
45871                                                             (line  975)
45872* warning for overloaded virtual fn:     C++ Dialect Options.
45873                                                             (line  502)
45874* warning for reordering of member initializers: C++ Dialect Options.
45875                                                             (line  427)
45876* warning for unknown pragmas:           Warning Options.    (line  596)
45877* warning function attribute:            Function Attributes.
45878                                                             (line  165)
45879* warning messages:                      Warning Options.    (line    6)
45880* warnings from system headers:          Warning Options.    (line  710)
45881* warnings vs errors:                    Warnings and Errors.
45882                                                             (line    6)
45883* weak attribute:                        Function Attributes.
45884                                                             (line 1410)
45885* weakref attribute:                     Function Attributes.
45886                                                             (line 1419)
45887* whitespace:                            Incompatibilities.  (line  112)
45888* X in constraint:                       Simple Constraints. (line  114)
45889* X3.159-1989:                           Standards.          (line   13)
45890* x86-64 options:                        x86-64 Options.     (line    6)
45891* x86-64 Options:                        i386 and x86-64 Options.
45892                                                             (line    6)
45893* Xstormy16 Options:                     Xstormy16 Options.  (line    6)
45894* Xtensa Options:                        Xtensa Options.     (line    6)
45895* y0:                                    Other Builtins.     (line    6)
45896* y0f:                                   Other Builtins.     (line    6)
45897* y0l:                                   Other Builtins.     (line    6)
45898* y1:                                    Other Builtins.     (line    6)
45899* y1f:                                   Other Builtins.     (line    6)
45900* y1l:                                   Other Builtins.     (line    6)
45901* yn:                                    Other Builtins.     (line    6)
45902* ynf:                                   Other Builtins.     (line    6)
45903* ynl:                                   Other Builtins.     (line    6)
45904* zero-length arrays:                    Zero Length.        (line    6)
45905* zero-size structures:                  Empty Structures.   (line    6)
45906* zSeries options:                       zSeries Options.    (line    6)
45907
45908
45909
45910Tag Table:
45911Node: Top2076
45912Node: G++ and GCC3842
45913Node: Standards5907
45914Node: Invoking GCC14873
45915Node: Option Summary18624
45916Node: Overall Options53916
45917Node: Invoking G++68423
45918Node: C Dialect Options69946
45919Node: C++ Dialect Options83878
45920Node: Objective-C and Objective-C++ Dialect Options107043
45921Node: Language Independent Options118820
45922Node: Warning Options121590
45923Node: Debugging Options180892
45924Node: Optimize Options226955
45925Ref: Type-punning278437
45926Node: Preprocessor Options347069
45927Ref: Wtrigraphs351167
45928Ref: dashMF355915
45929Ref: fdollars-in-identifiers366456
45930Node: Assembler Options375017
45931Node: Link Options375722
45932Ref: Link Options-Footnote-1386080
45933Node: Directory Options386414
45934Node: Spec Files392476
45935Node: Target Options413286
45936Node: Submodel Options414804
45937Node: ARC Options416573
45938Node: ARM Options418060
45939Node: AVR Options430962
45940Node: Blackfin Options432817
45941Node: CRIS Options440765
45942Node: CRX Options444506
45943Node: Darwin Options444931
45944Node: DEC Alpha Options452423
45945Node: DEC Alpha/VMS Options464339
45946Node: FR30 Options464913
45947Node: FRV Options465488
45948Node: GNU/Linux Options472205
45949Node: H8/300 Options472663
45950Node: HPPA Options473730
45951Node: i386 and x86-64 Options483230
45952Node: i386 and x86-64 Windows Options512233
45953Node: IA-64 Options515462
45954Node: IA-64/VMS Options523480
45955Node: LM32 Options524035
45956Node: M32C Options524564
45957Node: M32R/D Options525854
45958Node: M680x0 Options529441
45959Node: M68hc1x Options543448
45960Node: MCore Options545017
45961Node: MeP Options546524
45962Node: MIPS Options550491
45963Node: MMIX Options578390
45964Node: MN10300 Options580872
45965Node: PDP-11 Options582294
45966Node: picoChip Options584134
45967Node: PowerPC Options586333
45968Node: RS/6000 and PowerPC Options586569
45969Node: RX Options618368
45970Node: S/390 and zSeries Options623952
45971Node: Score Options631883
45972Node: SH Options632711
45973Node: SPARC Options643565
45974Node: SPU Options654538
45975Node: System V Options659542
45976Node: V850 Options660365
45977Node: VAX Options663505
45978Node: VxWorks Options664053
45979Node: x86-64 Options665208
45980Node: Xstormy16 Options665426
45981Node: Xtensa Options665715
45982Node: zSeries Options669862
45983Node: Code Gen Options670058
45984Node: Environment Variables694765
45985Node: Precompiled Headers702661
45986Node: C Implementation708862
45987Node: Translation implementation710525
45988Node: Environment implementation711099
45989Node: Identifiers implementation711649
45990Node: Characters implementation712703
45991Node: Integers implementation715509
45992Node: Floating point implementation717334
45993Node: Arrays and pointers implementation720263
45994Ref: Arrays and pointers implementation-Footnote-1721698
45995Node: Hints implementation721822
45996Node: Structures unions enumerations and bit-fields implementation723288
45997Node: Qualifiers implementation725274
45998Node: Declarators implementation727046
45999Node: Statements implementation727388
46000Node: Preprocessing directives implementation727715
46001Node: Library functions implementation729820
46002Node: Architecture implementation730460
46003Node: Locale-specific behavior implementation731163
46004Node: C++ Implementation731468
46005Node: Conditionally-supported behavior732725
46006Node: C Extensions733208
46007Node: Statement Exprs737924
46008Node: Local Labels742437
46009Node: Labels as Values745416
46010Ref: Labels as Values-Footnote-1747825
46011Node: Nested Functions748008
46012Node: Constructing Calls751941
46013Node: Typeof756664
46014Node: Conditionals759979
46015Node: Long Long760870
46016Node: Complex762371
46017Node: Floating Types764941
46018Node: Half-Precision766021
46019Node: Decimal Float768203
46020Node: Hex Floats770070
46021Node: Fixed-Point771111
46022Node: Named Address Spaces774405
46023Node: Zero Length775439
46024Node: Empty Structures778726
46025Node: Variable Length779142
46026Node: Variadic Macros781795
46027Node: Escaped Newlines784177
46028Node: Subscripting785016
46029Node: Pointer Arith785739
46030Node: Initializers786307
46031Node: Compound Literals786803
46032Node: Designated Inits788978
46033Node: Case Ranges792633
46034Node: Cast to Union793316
46035Node: Mixed Declarations794412
46036Node: Function Attributes794918
46037Node: Attribute Syntax862442
46038Node: Function Prototypes872877
46039Node: C++ Comments874658
46040Node: Dollar Signs875177
46041Node: Character Escapes875642
46042Node: Variable Attributes875936
46043Ref: MeP Variable Attributes890827
46044Ref: i386 Variable Attributes892788
46045Node: Type Attributes898773
46046Ref: MeP Type Attributes912514
46047Ref: i386 Type Attributes912788
46048Ref: PowerPC Type Attributes913628
46049Ref: SPU Type Attributes914490
46050Node: Alignment914781
46051Node: Inline916155
46052Node: Extended Asm921102
46053Ref: Example of asm with clobbered asm reg927188
46054Ref: Extended asm with goto936955
46055Node: Constraints944690
46056Node: Simple Constraints945540
46057Node: Multi-Alternative952211
46058Node: Modifiers953928
46059Node: Machine Constraints956822
46060Node: Asm Labels993175
46061Node: Explicit Reg Vars994851
46062Node: Global Reg Vars996459
46063Node: Local Reg Vars1001009
46064Node: Alternate Keywords1003450
46065Node: Incomplete Enums1004878
46066Node: Function Names1005635
46067Node: Return Address1007797
46068Node: Vector Extensions1011350
46069Node: Offsetof1014855
46070Node: Atomic Builtins1015669
46071Node: Object Size Checking1021047
46072Node: Other Builtins1026475
46073Node: Target Builtins1053135
46074Node: Alpha Built-in Functions1054059
46075Node: ARM iWMMXt Built-in Functions1057058
46076Node: ARM NEON Intrinsics1063777
46077Node: Blackfin Built-in Functions1271609
46078Node: FR-V Built-in Functions1272223
46079Node: Argument Types1273082
46080Node: Directly-mapped Integer Functions1274838
46081Node: Directly-mapped Media Functions1275920
46082Node: Raw read/write Functions1282952
46083Node: Other Built-in Functions1283864
46084Node: X86 Built-in Functions1285053
46085Node: MIPS DSP Built-in Functions1328484
46086Node: MIPS Paired-Single Support1340931
46087Node: MIPS Loongson Built-in Functions1342432
46088Node: Paired-Single Arithmetic1348950
46089Node: Paired-Single Built-in Functions1349896
46090Node: MIPS-3D Built-in Functions1352566
46091Node: picoChip Built-in Functions1357941
46092Node: Other MIPS Built-in Functions1359307
46093Node: PowerPC AltiVec/VSX Built-in Functions1359831
46094Node: RX Built-in Functions1469881
46095Node: SPARC VIS Built-in Functions1473891
46096Node: SPU Built-in Functions1475570
46097Node: Target Format Checks1477352
46098Node: Solaris Format Checks1477759
46099Node: Pragmas1478156
46100Node: ARM Pragmas1478866
46101Node: M32C Pragmas1479469
46102Node: MeP Pragmas1480029
46103Node: RS/6000 and PowerPC Pragmas1482098
46104Node: Darwin Pragmas1482839
46105Node: Solaris Pragmas1483906
46106Node: Symbol-Renaming Pragmas1485067
46107Node: Structure-Packing Pragmas1487701
46108Node: Weak Pragmas1489353
46109Node: Diagnostic Pragmas1490155
46110Node: Visibility Pragmas1492791
46111Node: Push/Pop Macro Pragmas1493543
46112Node: Function Specific Option Pragmas1494516
46113Node: Unnamed Fields1496731
46114Node: Thread-Local1498241
46115Node: C99 Thread-Local Edits1500348
46116Node: C++98 Thread-Local Edits1502360
46117Node: Binary constants1505805
46118Node: C++ Extensions1506476
46119Node: Volatiles1508124
46120Node: Restricted Pointers1510800
46121Node: Vague Linkage1512394
46122Node: C++ Interface1516050
46123Ref: C++ Interface-Footnote-11520347
46124Node: Template Instantiation1520484
46125Node: Bound member functions1527496
46126Node: C++ Attributes1529039
46127Node: Namespace Association1530697
46128Node: Type Traits1532111
46129Node: Java Exceptions1537658
46130Node: Deprecated Features1539055
46131Node: Backwards Compatibility1542020
46132Node: Objective-C1543378
46133Node: Executing code before main1543959
46134Node: What you can and what you cannot do in +load1546565
46135Node: Type encoding1548732
46136Node: Garbage Collection1552119
46137Node: Constant string objects1554743
46138Node: compatibility_alias1557251
46139Node: Compatibility1558129
46140Node: Gcov1564696
46141Node: Gcov Intro1565229
46142Node: Invoking Gcov1567947
46143Node: Gcov and Optimization1579810
46144Node: Gcov Data Files1582465
46145Node: Cross-profiling1583605
46146Node: Trouble1585433
46147Node: Actual Bugs1586918
46148Node: Cross-Compiler Problems1587374
46149Node: Interoperation1587788
46150Node: Incompatibilities1594925
46151Node: Fixed Headers1603076
46152Node: Standard Libraries1604739
46153Node: Disappointments1606111
46154Node: C++ Misunderstandings1610469
46155Node: Static Definitions1611280
46156Node: Name lookup1612333
46157Ref: Name lookup-Footnote-11617111
46158Node: Temporaries1617298
46159Node: Copy Assignment1619274
46160Node: Non-bugs1621081
46161Node: Warnings and Errors1631588
46162Node: Bugs1633352
46163Node: Bug Criteria1633916
46164Node: Bug Reporting1636126
46165Node: Service1636347
46166Node: Contributing1637166
46167Node: Funding1637906
46168Node: GNU Project1640395
46169Node: Copying1641041
46170Node: GNU Free Documentation License1678569
46171Node: Contributors1700975
46172Node: Option Index1737659
46173Node: Keyword Index1907838
46174
46175End Tag Table
46176