Imported Upstream version 4.8.1
[platform/upstream/gcc48.git] / gcc / doc / gcc.info
1 This is doc/gcc.info, produced by makeinfo version 4.13 from
2 /d/gcc-4.8.1/gcc-4.8.1/gcc/doc/gcc.texi.
3
4 Copyright (C) 1988-2013 Free Software Foundation, Inc.
5
6  Permission is granted to copy, distribute and/or modify this document
7 under the terms of the GNU Free Documentation License, Version 1.3 or
8 any later version published by the Free Software Foundation; with the
9 Invariant Sections being "Funding Free Software", the Front-Cover Texts
10 being (a) (see below), and with the Back-Cover Texts being (b) (see
11 below).  A copy of the license is included in the section entitled "GNU
12 Free Documentation License".
13
14  (a) The FSF's Front-Cover Text is:
15
16  A GNU Manual
17
18  (b) The FSF's Back-Cover Text is:
19
20  You have freedom to copy and modify this GNU Manual, like GNU
21 software.  Copies published by the Free Software Foundation raise
22 funds for GNU development.
23
24 INFO-DIR-SECTION Software development
25 START-INFO-DIR-ENTRY
26 * gcc: (gcc).                  The GNU Compiler Collection.
27 * g++: (gcc).                  The GNU C++ compiler.
28 * gcov: (gcc) Gcov.            `gcov'--a test coverage program.
29 END-INFO-DIR-ENTRY
30  This file documents the use of the GNU compilers.
31
32  Copyright (C) 1988-2013 Free Software Foundation, Inc.
33
34  Permission is granted to copy, distribute and/or modify this document
35 under the terms of the GNU Free Documentation License, Version 1.3 or
36 any later version published by the Free Software Foundation; with the
37 Invariant Sections being "Funding Free Software", the Front-Cover Texts
38 being (a) (see below), and with the Back-Cover Texts being (b) (see
39 below).  A copy of the license is included in the section entitled "GNU
40 Free Documentation License".
41
42  (a) The FSF's Front-Cover Text is:
43
44  A GNU Manual
45
46  (b) The FSF's Back-Cover Text is:
47
48  You have freedom to copy and modify this GNU Manual, like GNU
49 software.  Copies published by the Free Software Foundation raise
50 funds for GNU development.
51
52
53 \1f
54 File: gcc.info,  Node: Top,  Next: G++ and GCC,  Up: (DIR)
55
56 Introduction
57 ************
58
59 This manual documents how to use the GNU compilers, as well as their
60 features and incompatibilities, and how to report bugs.  It corresponds
61 to the compilers (GCC) version 4.8.1.  The internals of the GNU
62 compilers, including how to port them to new targets and some
63 information about how to write front ends for new languages, are
64 documented in a separate manual.  *Note Introduction: (gccint)Top.
65
66 * Menu:
67
68 * G++ and GCC::     You can compile C or C++ programs.
69 * Standards::       Language standards supported by GCC.
70 * Invoking GCC::    Command options supported by `gcc'.
71 * C Implementation:: How GCC implements the ISO C specification.
72 * C++ Implementation:: How GCC implements the ISO C++ specification.
73 * C Extensions::    GNU extensions to the C language family.
74 * C++ Extensions::  GNU extensions to the C++ language.
75 * Objective-C::     GNU Objective-C runtime features.
76 * Compatibility::   Binary Compatibility
77 * Gcov::            `gcov'---a test coverage program.
78 * Trouble::         If you have trouble using GCC.
79 * Bugs::            How, why and where to report bugs.
80 * Service::         How to find suppliers of support for GCC.
81 * Contributing::    How to contribute to testing and developing GCC.
82
83 * Funding::         How to help assure funding for free software.
84 * GNU Project::     The GNU Project and GNU/Linux.
85
86 * Copying::         GNU General Public License says
87                     how you can copy and share GCC.
88 * GNU Free Documentation License:: How you can copy and share this manual.
89 * Contributors::    People who have contributed to GCC.
90
91 * Option Index::    Index to command line options.
92 * Keyword Index::   Index of concepts and symbol names.
93
94 \1f
95 File: gcc.info,  Node: G++ and GCC,  Next: Standards,  Prev: Top,  Up: Top
96
97 1 Programming Languages Supported by GCC
98 ****************************************
99
100 GCC stands for "GNU Compiler Collection".  GCC is an integrated
101 distribution of compilers for several major programming languages.
102 These languages currently include C, C++, Objective-C, Objective-C++,
103 Java, Fortran, Ada, and Go.
104
105  The abbreviation "GCC" has multiple meanings in common use.  The
106 current official meaning is "GNU Compiler Collection", which refers
107 generically to the complete suite of tools.  The name historically stood
108 for "GNU C Compiler", and this usage is still common when the emphasis
109 is on compiling C programs.  Finally, the name is also used when
110 speaking of the "language-independent" component of GCC: code shared
111 among the compilers for all supported languages.
112
113  The language-independent component of GCC includes the majority of the
114 optimizers, as well as the "back ends" that generate machine code for
115 various processors.
116
117  The part of a compiler that is specific to a particular language is
118 called the "front end".  In addition to the front ends that are
119 integrated components of GCC, there are several other front ends that
120 are maintained separately.  These support languages such as Pascal,
121 Mercury, and COBOL.  To use these, they must be built together with GCC
122 proper.
123
124  Most of the compilers for languages other than C have their own names.
125 The C++ compiler is G++, the Ada compiler is GNAT, and so on.  When we
126 talk about compiling one of those languages, we might refer to that
127 compiler by its own name, or as GCC.  Either is correct.
128
129  Historically, compilers for many languages, including C++ and Fortran,
130 have been implemented as "preprocessors" which emit another high level
131 language such as C.  None of the compilers included in GCC are
132 implemented this way; they all generate machine code directly.  This
133 sort of preprocessor should not be confused with the "C preprocessor",
134 which is an integral feature of the C, C++, Objective-C and
135 Objective-C++ languages.
136
137 \1f
138 File: gcc.info,  Node: Standards,  Next: Invoking GCC,  Prev: G++ and GCC,  Up: Top
139
140 2 Language Standards Supported by GCC
141 *************************************
142
143 For each language compiled by GCC for which there is a standard, GCC
144 attempts to follow one or more versions of that standard, possibly with
145 some exceptions, and possibly with some extensions.
146
147 2.1 C language
148 ==============
149
150 GCC supports three versions of the C standard, although support for the
151 most recent version is not yet complete.
152
153  The original ANSI C standard (X3.159-1989) was ratified in 1989 and
154 published in 1990.  This standard was ratified as an ISO standard
155 (ISO/IEC 9899:1990) later in 1990.  There were no technical differences
156 between these publications, although the sections of the ANSI standard
157 were renumbered and became clauses in the ISO standard.  This standard,
158 in both its forms, is commonly known as "C89", or occasionally as
159 "C90", from the dates of ratification.  The ANSI standard, but not the
160 ISO standard, also came with a Rationale document.  To select this
161 standard in GCC, use one of the options `-ansi', `-std=c90' or
162 `-std=iso9899:1990'; to obtain all the diagnostics required by the
163 standard, you should also specify `-pedantic' (or `-pedantic-errors' if
164 you want them to be errors rather than warnings).  *Note Options
165 Controlling C Dialect: C Dialect Options.
166
167  Errors in the 1990 ISO C standard were corrected in two Technical
168 Corrigenda published in 1994 and 1996.  GCC does not support the
169 uncorrected version.
170
171  An amendment to the 1990 standard was published in 1995.  This
172 amendment added digraphs and `__STDC_VERSION__' to the language, but
173 otherwise concerned the library.  This amendment is commonly known as
174 "AMD1"; the amended standard is sometimes known as "C94" or "C95".  To
175 select this standard in GCC, use the option `-std=iso9899:199409'
176 (with, as for other standard versions, `-pedantic' to receive all
177 required diagnostics).
178
179  A new edition of the ISO C standard was published in 1999 as ISO/IEC
180 9899:1999, and is commonly known as "C99".  GCC has incomplete support
181 for this standard version; see `http://gcc.gnu.org/c99status.html' for
182 details.  To select this standard, use `-std=c99' or
183 `-std=iso9899:1999'.  (While in development, drafts of this standard
184 version were referred to as "C9X".)
185
186  Errors in the 1999 ISO C standard were corrected in three Technical
187 Corrigenda published in 2001, 2004 and 2007.  GCC does not support the
188 uncorrected version.
189
190  A fourth version of the C standard, known as "C11", was published in
191 2011 as ISO/IEC 9899:2011.  GCC has limited incomplete support for
192 parts of this standard, enabled with `-std=c11' or `-std=iso9899:2011'.
193 (While in development, drafts of this standard version were referred to
194 as "C1X".)
195
196  By default, GCC provides some extensions to the C language that on
197 rare occasions conflict with the C standard.  *Note Extensions to the C
198 Language Family: C Extensions.  Use of the `-std' options listed above
199 will disable these extensions where they conflict with the C standard
200 version selected.  You may also select an extended version of the C
201 language explicitly with `-std=gnu90' (for C90 with GNU extensions),
202 `-std=gnu99' (for C99 with GNU extensions) or `-std=gnu11' (for C11
203 with GNU extensions).  The default, if no C language dialect options
204 are given, is `-std=gnu90'; this will change to `-std=gnu99' or
205 `-std=gnu11' in some future release when the C99 or C11 support is
206 complete.  Some features that are part of the C99 standard are accepted
207 as extensions in C90 mode, and some features that are part of the C11
208 standard are accepted as extensions in C90 and C99 modes.
209
210  The ISO C standard defines (in clause 4) two classes of conforming
211 implementation.  A "conforming hosted implementation" supports the
212 whole standard including all the library facilities; a "conforming
213 freestanding implementation" is only required to provide certain
214 library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>',
215 and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; since C99,
216 also those in `<stdbool.h>' and `<stdint.h>'; and since C11, also those
217 in `<stdalign.h>' and `<stdnoreturn.h>'.  In addition, complex types,
218 added in C99, are not required for freestanding implementations.  The
219 standard also defines two environments for programs, a "freestanding
220 environment", required of all implementations and which may not have
221 library facilities beyond those required of freestanding
222 implementations, where the handling of program startup and termination
223 are implementation-defined, and a "hosted environment", which is not
224 required, in which all the library facilities are provided and startup
225 is through a function `int main (void)' or `int main (int, char *[])'.
226 An OS kernel would be a freestanding environment; a program using the
227 facilities of an operating system would normally be in a hosted
228 implementation.
229
230  GCC aims towards being usable as a conforming freestanding
231 implementation, or as the compiler for a conforming hosted
232 implementation.  By default, it will act as the compiler for a hosted
233 implementation, defining `__STDC_HOSTED__' as `1' and presuming that
234 when the names of ISO C functions are used, they have the semantics
235 defined in the standard.  To make it act as a conforming freestanding
236 implementation for a freestanding environment, use the option
237 `-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not
238 make assumptions about the meanings of function names from the standard
239 library, with exceptions noted below.  To build an OS kernel, you may
240 well still need to make your own arrangements for linking and startup.
241 *Note Options Controlling C Dialect: C Dialect Options.
242
243  GCC does not provide the library facilities required only of hosted
244 implementations, nor yet all the facilities required by C99 of
245 freestanding implementations; to use the facilities of a hosted
246 environment, you will need to find them elsewhere (for example, in the
247 GNU C library).  *Note Standard Libraries: Standard Libraries.
248
249  Most of the compiler support routines used by GCC are present in
250 `libgcc', but there are a few exceptions.  GCC requires the
251 freestanding environment provide `memcpy', `memmove', `memset' and
252 `memcmp'.  Finally, if `__builtin_trap' is used, and the target does
253 not implement the `trap' pattern, then GCC will emit a call to `abort'.
254
255  For references to Technical Corrigenda, Rationale documents and
256 information concerning the history of C that is available online, see
257 `http://gcc.gnu.org/readings.html'
258
259 2.2 C++ language
260 ================
261
262 GCC supports the original ISO C++ standard (1998) and contains
263 experimental support for the second ISO C++ standard (2011).
264
265  The original ISO C++ standard was published as the ISO standard
266 (ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in
267 2003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and
268 C++03, respectively. GCC implements the majority of C++98 (`export' is
269 a notable exception) and most of the changes in C++03.  To select this
270 standard in GCC, use one of the options `-ansi', `-std=c++98', or
271 `-std=c++03'; to obtain all the diagnostics required by the standard,
272 you should also specify `-pedantic' (or `-pedantic-errors' if you want
273 them to be errors rather than warnings).
274
275  A revised ISO C++ standard was published in 2011 as ISO/IEC
276 14882:2011, and is referred to as C++11; before its publication it was
277 commonly referred to as C++0x.  C++11 contains several changes to the
278 C++ language, most of which have been implemented in an experimental
279 C++11 mode in GCC.  For information regarding the C++11 features
280 available in the experimental C++11 mode, see
281 `http://gcc.gnu.org/projects/cxx0x.html'. To select this standard in
282 GCC, use the option `-std=c++11'; to obtain all the diagnostics
283 required by the standard, you should also specify `-pedantic' (or
284 `-pedantic-errors' if you want them to be errors rather than warnings).
285
286  More information about the C++ standards is available on the ISO C++
287 committee's web site at `http://www.open-std.org/jtc1/sc22/wg21/'.
288
289  By default, GCC provides some extensions to the C++ language; *Note
290 Options Controlling C++ Dialect: C++ Dialect Options.  Use of the
291 `-std' option listed above will disable these extensions.  You may also
292 select an extended version of the C++ language explicitly with
293 `-std=gnu++98' (for C++98 with GNU extensions) or `-std=gnu++11' (for
294 C++11 with GNU extensions).  The default, if no C++ language dialect
295 options are given, is `-std=gnu++98'.
296
297 2.3 Objective-C and Objective-C++ languages
298 ===========================================
299
300 GCC supports "traditional" Objective-C (also known as "Objective-C
301 1.0") and contains support for the Objective-C exception and
302 synchronization syntax.  It has also support for a number of
303 "Objective-C 2.0" language extensions, including properties, fast
304 enumeration (only for Objective-C), method attributes and the @optional
305 and @required keywords in protocols.  GCC supports Objective-C++ and
306 features available in Objective-C are also available in Objective-C++.
307
308  GCC by default uses the GNU Objective-C runtime library, which is part
309 of GCC and is not the same as the Apple/NeXT Objective-C runtime
310 library used on Apple systems.  There are a number of differences
311 documented in this manual.  The options `-fgnu-runtime' and
312 `-fnext-runtime' allow you to switch between producing output that
313 works with the GNU Objective-C runtime library and output that works
314 with the Apple/NeXT Objective-C runtime library.
315
316  There is no formal written standard for Objective-C or Objective-C++.
317 The authoritative manual on traditional Objective-C (1.0) is
318 "Object-Oriented Programming and the Objective-C Language", available
319 at a number of web sites:
320    * `http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf'
321      is the original NeXTstep document;
322
323    * `http://objc.toodarkpark.net' is the same document in another
324      format;
325
326    *
327      `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/'
328      has an updated version but make sure you search for "Object
329      Oriented Programming and the Objective-C Programming Language 1.0",
330      not documentation on the newer "Objective-C 2.0" language
331
332  The Objective-C exception and synchronization syntax (that is, the
333 keywords @try, @throw, @catch, @finally and @synchronized) is supported
334 by GCC and is enabled with the option `-fobjc-exceptions'.  The syntax
335 is briefly documented in this manual and in the Objective-C 2.0 manuals
336 from Apple.
337
338  The Objective-C 2.0 language extensions and features are automatically
339 enabled; they include properties (via the @property, @synthesize and
340 @dynamic keywords), fast enumeration (not available in Objective-C++),
341 attributes for methods (such as deprecated, noreturn, sentinel,
342 format), the unused attribute for method arguments, the @package
343 keyword for instance variables and the @optional and @required keywords
344 in protocols.  You can disable all these Objective-C 2.0 language
345 extensions with the option `-fobjc-std=objc1', which causes the
346 compiler to recognize the same Objective-C language syntax recognized
347 by GCC 4.0, and to produce an error if one of the new features is used.
348
349  GCC has currently no support for non-fragile instance variables.
350
351  The authoritative manual on Objective-C 2.0 is available from Apple:
352    *
353      `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/'
354
355  For more information concerning the history of Objective-C that is
356 available online, see `http://gcc.gnu.org/readings.html'
357
358 2.4 Go language
359 ===============
360
361 As of the GCC 4.7.1 release, GCC supports the Go 1 language standard,
362 described at `http://golang.org/doc/go1.html'.
363
364 2.5 References for other languages
365 ==================================
366
367 *Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
368 conformance and compatibility of the Ada compiler.
369
370  *Note Standards: (gfortran)Standards, for details of standards
371 supported by GNU Fortran.
372
373  *Note Compatibility with the Java Platform: (gcj)Compatibility, for
374 details of compatibility between `gcj' and the Java Platform.
375
376 \1f
377 File: gcc.info,  Node: Invoking GCC,  Next: C Implementation,  Prev: Standards,  Up: Top
378
379 3 GCC Command Options
380 *********************
381
382 When you invoke GCC, it normally does preprocessing, compilation,
383 assembly and linking.  The "overall options" allow you to stop this
384 process at an intermediate stage.  For example, the `-c' option says
385 not to run the linker.  Then the output consists of object files output
386 by the assembler.
387
388  Other options are passed on to one stage of processing.  Some options
389 control the preprocessor and others the compiler itself.  Yet other
390 options control the assembler and linker; most of these are not
391 documented here, since you rarely need to use any of them.
392
393  Most of the command-line options that you can use with GCC are useful
394 for C programs; when an option is only useful with another language
395 (usually C++), the explanation says so explicitly.  If the description
396 for a particular option does not mention a source language, you can use
397 that option with all supported languages.
398
399  *Note Compiling C++ Programs: Invoking G++, for a summary of special
400 options for compiling C++ programs.
401
402  The `gcc' program accepts options and file names as operands.  Many
403 options have multi-letter names; therefore multiple single-letter
404 options may _not_ be grouped: `-dv' is very different from `-d -v'.
405
406  You can mix options and other arguments.  For the most part, the order
407 you use doesn't matter.  Order does matter when you use several options
408 of the same kind; for example, if you specify `-L' more than once, the
409 directories are searched in the order specified.  Also, the placement
410 of the `-l' option is significant.
411
412  Many options have long names starting with `-f' or with `-W'--for
413 example, `-fmove-loop-invariants', `-Wformat' and so on.  Most of these
414 have both positive and negative forms; the negative form of `-ffoo' is
415 `-fno-foo'.  This manual documents only one of these two forms,
416 whichever one is not the default.
417
418  *Note Option Index::, for an index to GCC's options.
419
420 * Menu:
421
422 * Option Summary::      Brief list of all options, without explanations.
423 * Overall Options::     Controlling the kind of output:
424                         an executable, object files, assembler files,
425                         or preprocessed source.
426 * Invoking G++::        Compiling C++ programs.
427 * C Dialect Options::   Controlling the variant of C language compiled.
428 * C++ Dialect Options:: Variations on C++.
429 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
430                         and Objective-C++.
431 * Language Independent Options:: Controlling how diagnostics should be
432                         formatted.
433 * Warning Options::     How picky should the compiler be?
434 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
435 * Optimize Options::    How much optimization?
436 * Preprocessor Options:: Controlling header files and macro definitions.
437                          Also, getting dependency information for Make.
438 * Assembler Options::   Passing options to the assembler.
439 * Link Options::        Specifying libraries and so on.
440 * Directory Options::   Where to find header files and libraries.
441                         Where to find the compiler executable files.
442 * Spec Files::          How to pass switches to sub-processes.
443 * Target Options::      Running a cross-compiler, or an old version of GCC.
444 * Submodel Options::    Specifying minor hardware or convention variations,
445                         such as 68010 vs 68020.
446 * Code Gen Options::    Specifying conventions for function calls, data layout
447                         and register usage.
448 * Environment Variables:: Env vars that affect GCC.
449 * Precompiled Headers:: Compiling a header once, and using it many times.
450
451 \1f
452 File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC
453
454 3.1 Option Summary
455 ==================
456
457 Here is a summary of all the options, grouped by type.  Explanations are
458 in the following sections.
459
460 _Overall Options_
461      *Note Options Controlling the Kind of Output: Overall Options.
462           -c  -S  -E  -o FILE  -no-canonical-prefixes
463           -pipe  -pass-exit-codes
464           -x LANGUAGE  -v  -###  --help[=CLASS[,...]]  --target-help
465           --version -wrapper @FILE -fplugin=FILE -fplugin-arg-NAME=ARG
466           -fdump-ada-spec[-slim] -fada-spec-parent=ARG -fdump-go-spec=FILE
467
468 _C Language Options_
469      *Note Options Controlling C Dialect: C Dialect Options.
470           -ansi  -std=STANDARD  -fgnu89-inline
471           -aux-info FILENAME -fallow-parameterless-variadic-functions
472           -fno-asm  -fno-builtin  -fno-builtin-FUNCTION
473           -fhosted  -ffreestanding -fopenmp -fms-extensions -fplan9-extensions
474           -trigraphs  -traditional  -traditional-cpp
475           -fallow-single-precision  -fcond-mismatch -flax-vector-conversions
476           -fsigned-bitfields  -fsigned-char
477           -funsigned-bitfields  -funsigned-char
478
479 _C++ Language Options_
480      *Note Options Controlling C++ Dialect: C++ Dialect Options.
481           -fabi-version=N  -fno-access-control  -fcheck-new
482           -fconstexpr-depth=N  -ffriend-injection
483           -fno-elide-constructors
484           -fno-enforce-eh-specs
485           -ffor-scope  -fno-for-scope  -fno-gnu-keywords
486           -fno-implicit-templates
487           -fno-implicit-inline-templates
488           -fno-implement-inlines  -fms-extensions
489           -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names
490           -fno-optional-diags  -fpermissive
491           -fno-pretty-templates
492           -frepo  -fno-rtti  -fstats  -ftemplate-backtrace-limit=N
493           -ftemplate-depth=N
494           -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++
495           -fno-default-inline  -fvisibility-inlines-hidden
496           -fvisibility-ms-compat
497           -fext-numeric-literals
498           -Wabi  -Wconversion-null  -Wctor-dtor-privacy
499           -Wdelete-non-virtual-dtor -Wliteral-suffix -Wnarrowing
500           -Wnoexcept -Wnon-virtual-dtor  -Wreorder
501           -Weffc++  -Wstrict-null-sentinel
502           -Wno-non-template-friend  -Wold-style-cast
503           -Woverloaded-virtual  -Wno-pmf-conversions
504           -Wsign-promo
505
506 _Objective-C and Objective-C++ Language Options_
507      *Note Options Controlling Objective-C and Objective-C++ Dialects:
508      Objective-C and Objective-C++ Dialect Options.
509           -fconstant-string-class=CLASS-NAME
510           -fgnu-runtime  -fnext-runtime
511           -fno-nil-receivers
512           -fobjc-abi-version=N
513           -fobjc-call-cxx-cdtors
514           -fobjc-direct-dispatch
515           -fobjc-exceptions
516           -fobjc-gc
517           -fobjc-nilcheck
518           -fobjc-std=objc1
519           -freplace-objc-classes
520           -fzero-link
521           -gen-decls
522           -Wassign-intercept
523           -Wno-protocol  -Wselector
524           -Wstrict-selector-match
525           -Wundeclared-selector
526
527 _Language Independent Options_
528      *Note Options to Control Diagnostic Messages Formatting: Language
529      Independent Options.
530           -fmessage-length=N
531           -fdiagnostics-show-location=[once|every-line]
532           -fno-diagnostics-show-option -fno-diagnostics-show-caret
533
534 _Warning Options_
535      *Note Options to Request or Suppress Warnings: Warning Options.
536           -fsyntax-only  -fmax-errors=N  -Wpedantic
537           -pedantic-errors
538           -w  -Wextra  -Wall  -Waddress  -Waggregate-return
539           -Waggressive-loop-optimizations -Warray-bounds
540           -Wno-attributes -Wno-builtin-macro-redefined
541           -Wc++-compat -Wc++11-compat -Wcast-align  -Wcast-qual
542           -Wchar-subscripts -Wclobbered  -Wcomment
543           -Wconversion  -Wcoverage-mismatch  -Wno-cpp  -Wno-deprecated
544           -Wno-deprecated-declarations -Wdisabled-optimization
545           -Wno-div-by-zero -Wdouble-promotion -Wempty-body  -Wenum-compare
546           -Wno-endif-labels -Werror  -Werror=*
547           -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2
548           -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral
549           -Wformat-security  -Wformat-y2k
550           -Wframe-larger-than=LEN -Wno-free-nonheap-object -Wjump-misses-init
551           -Wignored-qualifiers
552           -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int
553           -Winit-self  -Winline -Wmaybe-uninitialized
554           -Wno-int-to-pointer-cast -Wno-invalid-offsetof
555           -Winvalid-pch -Wlarger-than=LEN  -Wunsafe-loop-optimizations
556           -Wlogical-op -Wlong-long
557           -Wmain -Wmaybe-uninitialized -Wmissing-braces  -Wmissing-field-initializers
558           -Wmissing-include-dirs
559           -Wno-mudflap
560           -Wno-multichar  -Wnonnull  -Wno-overflow
561           -Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded
562           -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format
563           -Wpointer-arith  -Wno-pointer-to-int-cast
564           -Wredundant-decls  -Wno-return-local-addr
565           -Wreturn-type  -Wsequence-point  -Wshadow
566           -Wsign-compare  -Wsign-conversion  -Wsizeof-pointer-memaccess
567           -Wstack-protector -Wstack-usage=LEN -Wstrict-aliasing
568           -Wstrict-aliasing=n  -Wstrict-overflow -Wstrict-overflow=N
569           -Wsuggest-attribute=[pure|const|noreturn|format]
570           -Wmissing-format-attribute
571           -Wswitch  -Wswitch-default  -Wswitch-enum -Wsync-nand
572           -Wsystem-headers  -Wtrampolines  -Wtrigraphs  -Wtype-limits  -Wundef
573           -Wuninitialized  -Wunknown-pragmas  -Wno-pragmas
574           -Wunsuffixed-float-constants  -Wunused  -Wunused-function
575           -Wunused-label  -Wunused-local-typedefs -Wunused-parameter
576           -Wno-unused-result -Wunused-value  -Wunused-variable
577           -Wunused-but-set-parameter -Wunused-but-set-variable
578           -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance
579           -Wvla -Wvolatile-register-var  -Wwrite-strings -Wzero-as-null-pointer-constant
580
581 _C and Objective-C-only Warning Options_
582           -Wbad-function-cast  -Wmissing-declarations
583           -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
584           -Wold-style-declaration  -Wold-style-definition
585           -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion
586           -Wdeclaration-after-statement -Wpointer-sign
587
588 _Debugging Options_
589      *Note Options for Debugging Your Program or GCC: Debugging Options.
590           -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
591           -fsanitize=STYLE
592           -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST
593           -fdisable-ipa-PASS_NAME
594           -fdisable-rtl-PASS_NAME
595           -fdisable-rtl-PASS-NAME=RANGE-LIST
596           -fdisable-tree-PASS_NAME
597           -fdisable-tree-PASS-NAME=RANGE-LIST
598           -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links
599           -fdump-translation-unit[-N]
600           -fdump-class-hierarchy[-N]
601           -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline
602           -fdump-passes
603           -fdump-statistics
604           -fdump-tree-all
605           -fdump-tree-original[-N]
606           -fdump-tree-optimized[-N]
607           -fdump-tree-cfg -fdump-tree-alias
608           -fdump-tree-ch
609           -fdump-tree-ssa[-N] -fdump-tree-pre[-N]
610           -fdump-tree-ccp[-N] -fdump-tree-dce[-N]
611           -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N]
612           -fdump-tree-dom[-N]
613           -fdump-tree-dse[-N]
614           -fdump-tree-phiprop[-N]
615           -fdump-tree-phiopt[-N]
616           -fdump-tree-forwprop[-N]
617           -fdump-tree-copyrename[-N]
618           -fdump-tree-nrv -fdump-tree-vect
619           -fdump-tree-sink
620           -fdump-tree-sra[-N]
621           -fdump-tree-forwprop[-N]
622           -fdump-tree-fre[-N]
623           -fdump-tree-vrp[-N]
624           -ftree-vectorizer-verbose=N
625           -fdump-tree-storeccp[-N]
626           -fdump-final-insns=FILE
627           -fcompare-debug[=OPTS]  -fcompare-debug-second
628           -feliminate-dwarf2-dups -fno-eliminate-unused-debug-types
629           -feliminate-unused-debug-symbols -femit-class-debug-always
630           -fenable-KIND-PASS
631           -fenable-KIND-PASS=RANGE-LIST
632           -fdebug-types-section -fmem-report-wpa
633           -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs
634           -fopt-info
635           -fopt-info-OPTIONS[=FILE]
636           -frandom-seed=STRING -fsched-verbose=N
637           -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose
638           -fstack-usage  -ftest-coverage  -ftime-report -fvar-tracking
639           -fvar-tracking-assignments  -fvar-tracking-assignments-toggle
640           -g  -gLEVEL  -gtoggle  -gcoff  -gdwarf-VERSION
641           -ggdb  -grecord-gcc-switches  -gno-record-gcc-switches
642           -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf
643           -gvms  -gxcoff  -gxcoff+
644           -fno-merge-debug-strings -fno-dwarf2-cfi-asm
645           -fdebug-prefix-map=OLD=NEW
646           -femit-struct-debug-baseonly -femit-struct-debug-reduced
647           -femit-struct-debug-detailed[=SPEC-LIST]
648           -p  -pg  -print-file-name=LIBRARY  -print-libgcc-file-name
649           -print-multi-directory  -print-multi-lib  -print-multi-os-directory
650           -print-prog-name=PROGRAM  -print-search-dirs  -Q
651           -print-sysroot -print-sysroot-headers-suffix
652           -save-temps -save-temps=cwd -save-temps=obj -time[=FILE]
653
654 _Optimization Options_
655      *Note Options that Control Optimization: Optimize Options.
656           -faggressive-loop-optimizations -falign-functions[=N]
657           -falign-jumps[=N]
658           -falign-labels[=N] -falign-loops[=N]
659           -fassociative-math -fauto-inc-dec -fbranch-probabilities
660           -fbranch-target-load-optimize -fbranch-target-load-optimize2
661           -fbtr-bb-exclusive -fcaller-saves
662           -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack
663           -fcompare-elim -fcprop-registers -fcrossjumping
664           -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules
665           -fcx-limited-range
666           -fdata-sections -fdce -fdelayed-branch
667           -fdelete-null-pointer-checks -fdevirtualize -fdse
668           -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects
669           -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=STYLE
670           -fforward-propagate -ffp-contract=STYLE -ffunction-sections
671           -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity
672           -fgcse-sm -fhoist-adjacent-loads -fif-conversion
673           -fif-conversion2 -findirect-inlining
674           -finline-functions -finline-functions-called-once -finline-limit=N
675           -finline-small-functions -fipa-cp -fipa-cp-clone
676           -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference
677           -fira-algorithm=ALGORITHM
678           -fira-region=REGION -fira-hoist-pressure
679           -fira-loop-pressure -fno-ira-share-save-slots
680           -fno-ira-share-spill-slots -fira-verbose=N
681           -fivopts -fkeep-inline-functions -fkeep-static-consts
682           -floop-block -floop-interchange -floop-strip-mine -floop-nest-optimize
683           -floop-parallelize-all -flto -flto-compression-level
684           -flto-partition=ALG -flto-report -fmerge-all-constants
685           -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves
686           -fmove-loop-invariants fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg
687           -fno-default-inline
688           -fno-defer-pop -fno-function-cse -fno-guess-branch-probability
689           -fno-inline -fno-math-errno -fno-peephole -fno-peephole2
690           -fno-sched-interblock -fno-sched-spec -fno-signed-zeros
691           -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss
692           -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls
693           -fpartial-inlining -fpeel-loops -fpredictive-commoning
694           -fprefetch-loop-arrays -fprofile-report
695           -fprofile-correction -fprofile-dir=PATH -fprofile-generate
696           -fprofile-generate=PATH
697           -fprofile-use -fprofile-use=PATH -fprofile-values
698           -freciprocal-math -free -fregmove -frename-registers -freorder-blocks
699           -freorder-blocks-and-partition -freorder-functions
700           -frerun-cse-after-loop -freschedule-modulo-scheduled-loops
701           -frounding-math -fsched2-use-superblocks -fsched-pressure
702           -fsched-spec-load -fsched-spec-load-dangerous
703           -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N]
704           -fsched-group-heuristic -fsched-critical-path-heuristic
705           -fsched-spec-insn-heuristic -fsched-rank-heuristic
706           -fsched-last-insn-heuristic -fsched-dep-count-heuristic
707           -fschedule-insns -fschedule-insns2 -fsection-anchors
708           -fselective-scheduling -fselective-scheduling2
709           -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops
710           -fshrink-wrap -fsignaling-nans -fsingle-precision-constant
711           -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector
712           -fstack-protector-all -fstrict-aliasing -fstrict-overflow
713           -fthread-jumps -ftracer -ftree-bit-ccp
714           -ftree-builtin-call-dce -ftree-ccp -ftree-ch
715           -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop
716           -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse
717           -ftree-forwprop -ftree-fre -ftree-loop-if-convert
718           -ftree-loop-if-convert-stores -ftree-loop-im
719           -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns
720           -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize
721           -ftree-parallelize-loops=N -ftree-pre -ftree-partial-pre -ftree-pta
722           -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra
723           -ftree-switch-conversion -ftree-tail-merge
724           -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp
725           -funit-at-a-time -funroll-all-loops -funroll-loops
726           -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops
727           -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb
728           -fwhole-program -fwpa -fuse-ld=LINKER -fuse-linker-plugin
729           --param NAME=VALUE
730           -O  -O0  -O1  -O2  -O3  -Os -Ofast -Og
731
732 _Preprocessor Options_
733      *Note Options Controlling the Preprocessor: Preprocessor Options.
734           -AQUESTION=ANSWER
735           -A-QUESTION[=ANSWER]
736           -C  -dD  -dI  -dM  -dN
737           -DMACRO[=DEFN]  -E  -H
738           -idirafter DIR
739           -include FILE  -imacros FILE
740           -iprefix FILE  -iwithprefix DIR
741           -iwithprefixbefore DIR  -isystem DIR
742           -imultilib DIR -isysroot DIR
743           -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc
744           -P  -fdebug-cpp -ftrack-macro-expansion -fworking-directory
745           -remap -trigraphs  -undef  -UMACRO
746           -Wp,OPTION -Xpreprocessor OPTION -no-integrated-cpp
747
748 _Assembler Option_
749      *Note Passing Options to the Assembler: Assembler Options.
750           -Wa,OPTION  -Xassembler OPTION
751
752 _Linker Options_
753      *Note Options for Linking: Link Options.
754           OBJECT-FILE-NAME  -lLIBRARY
755           -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic
756           -s  -static -static-libgcc -static-libstdc++
757           -static-libasan -static-libtsan
758           -shared -shared-libgcc  -symbolic
759           -T SCRIPT  -Wl,OPTION  -Xlinker OPTION
760           -u SYMBOL
761
762 _Directory Options_
763      *Note Options for Directory Search: Directory Options.
764           -BPREFIX -IDIR -iplugindir=DIR
765           -iquoteDIR -LDIR -specs=FILE -I-
766           --sysroot=DIR --no-sysroot-suffix
767
768 _Machine Dependent Options_
769      *Note Hardware Models and Configurations: Submodel Options.
770
771      _AArch64 Options_
772           -mbig-endian  -mlittle-endian
773           -mgeneral-regs-only
774           -mcmodel=tiny  -mcmodel=small  -mcmodel=large
775           -mstrict-align
776           -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
777           -mtls-dialect=desc  -mtls-dialect=traditional
778           -march=NAME  -mcpu=NAME  -mtune=NAME
779
780      _Adapteva Epiphany Options_
781           -mhalf-reg-file -mprefer-short-insn-regs
782           -mbranch-cost=NUM -mcmove -mnops=NUM -msoft-cmpsf
783           -msplit-lohi -mpost-inc -mpost-modify -mstack-offset=NUM
784           -mround-nearest -mlong-calls -mshort-calls -msmall16
785           -mfp-mode=MODE -mvect-double -max-vect-align=NUM
786           -msplit-vecmove-early -m1reg-REG
787
788      _ARM Options_
789           -mapcs-frame  -mno-apcs-frame
790           -mabi=NAME
791           -mapcs-stack-check  -mno-apcs-stack-check
792           -mapcs-float  -mno-apcs-float
793           -mapcs-reentrant  -mno-apcs-reentrant
794           -msched-prolog  -mno-sched-prolog
795           -mlittle-endian  -mbig-endian  -mwords-little-endian
796           -mfloat-abi=NAME
797           -mfp16-format=NAME
798           -mthumb-interwork  -mno-thumb-interwork
799           -mcpu=NAME  -march=NAME  -mfpu=NAME
800           -mstructure-size-boundary=N
801           -mabort-on-noreturn
802           -mlong-calls  -mno-long-calls
803           -msingle-pic-base  -mno-single-pic-base
804           -mpic-register=REG
805           -mnop-fun-dllimport
806           -mpoke-function-name
807           -mthumb  -marm
808           -mtpcs-frame  -mtpcs-leaf-frame
809           -mcaller-super-interworking  -mcallee-super-interworking
810           -mtp=NAME -mtls-dialect=DIALECT
811           -mword-relocations
812           -mfix-cortex-m3-ldrd
813           -munaligned-access
814
815      _AVR Options_
816           -mmcu=MCU -maccumulate-args -mbranch-cost=COST
817           -mcall-prologues -mint8 -mno-interrupts -mrelax
818           -mstrict-X -mtiny-stack -Waddr-space-convert
819
820      _Blackfin Options_
821           -mcpu=CPU[-SIREVISION]
822           -msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
823           -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly
824           -mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library
825           -mno-id-shared-library  -mshared-library-id=N
826           -mleaf-id-shared-library  -mno-leaf-id-shared-library
827           -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls
828           -mfast-fp -minline-plt -mmulticore  -mcorea  -mcoreb  -msdram
829           -micplb
830
831      _C6X Options_
832           -mbig-endian  -mlittle-endian -march=CPU
833           -msim -msdata=SDATA-TYPE
834
835      _CRIS Options_
836           -mcpu=CPU  -march=CPU  -mtune=CPU
837           -mmax-stack-frame=N  -melinux-stacksize=N
838           -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
839           -mstack-align  -mdata-align  -mconst-align
840           -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
841           -melf  -maout  -melinux  -mlinux  -sim  -sim2
842           -mmul-bug-workaround  -mno-mul-bug-workaround
843
844      _CR16 Options_
845           -mmac
846           -mcr16cplus -mcr16c
847           -msim -mint32 -mbit-ops
848           -mdata-model=MODEL
849
850      _Darwin Options_
851           -all_load  -allowable_client  -arch  -arch_errors_fatal
852           -arch_only  -bind_at_load  -bundle  -bundle_loader
853           -client_name  -compatibility_version  -current_version
854           -dead_strip
855           -dependency-file  -dylib_file  -dylinker_install_name
856           -dynamic  -dynamiclib  -exported_symbols_list
857           -filelist  -flat_namespace  -force_cpusubtype_ALL
858           -force_flat_namespace  -headerpad_max_install_names
859           -iframework
860           -image_base  -init  -install_name  -keep_private_externs
861           -multi_module  -multiply_defined  -multiply_defined_unused
862           -noall_load   -no_dead_strip_inits_and_terms
863           -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit
864           -pagezero_size  -prebind  -prebind_all_twolevel_modules
865           -private_bundle  -read_only_relocs  -sectalign
866           -sectobjectsymbols  -whyload  -seg1addr
867           -sectcreate  -sectobjectsymbols  -sectorder
868           -segaddr -segs_read_only_addr -segs_read_write_addr
869           -seg_addr_table  -seg_addr_table_filename  -seglinkedit
870           -segprot  -segs_read_only_addr  -segs_read_write_addr
871           -single_module  -static  -sub_library  -sub_umbrella
872           -twolevel_namespace  -umbrella  -undefined
873           -unexported_symbols_list  -weak_reference_mismatches
874           -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION
875           -mkernel -mone-byte-bool
876
877      _DEC Alpha Options_
878           -mno-fp-regs  -msoft-float
879           -mieee  -mieee-with-inexact  -mieee-conformant
880           -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
881           -mtrap-precision=MODE  -mbuild-constants
882           -mcpu=CPU-TYPE  -mtune=CPU-TYPE
883           -mbwx  -mmax  -mfix  -mcix
884           -mfloat-vax  -mfloat-ieee
885           -mexplicit-relocs  -msmall-data  -mlarge-data
886           -msmall-text  -mlarge-text
887           -mmemory-latency=TIME
888
889      _FR30 Options_
890           -msmall-model -mno-lsim
891
892      _FRV Options_
893           -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
894           -mhard-float  -msoft-float
895           -malloc-cc  -mfixed-cc  -mdword  -mno-dword
896           -mdouble  -mno-double
897           -mmedia  -mno-media  -mmuladd  -mno-muladd
898           -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic
899           -mlinked-fp  -mlong-calls  -malign-labels
900           -mlibrary-pic  -macc-4  -macc-8
901           -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
902           -moptimize-membar -mno-optimize-membar
903           -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
904           -mvliw-branch  -mno-vliw-branch
905           -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
906           -mno-nested-cond-exec  -mtomcat-stats
907           -mTLS -mtls
908           -mcpu=CPU
909
910      _GNU/Linux Options_
911           -mglibc -muclibc -mbionic -mandroid
912           -tno-android-cc -tno-android-ld
913
914      _H8/300 Options_
915           -mrelax  -mh  -ms  -mn  -mexr -mno-exr  -mint32  -malign-300
916
917      _HPPA Options_
918           -march=ARCHITECTURE-TYPE
919           -mbig-switch  -mdisable-fpregs  -mdisable-indexing
920           -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
921           -mfixed-range=REGISTER-RANGE
922           -mjump-in-delay -mlinker-opt -mlong-calls
923           -mlong-load-store  -mno-big-switch  -mno-disable-fpregs
924           -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
925           -mno-jump-in-delay  -mno-long-load-store
926           -mno-portable-runtime  -mno-soft-float
927           -mno-space-regs  -msoft-float  -mpa-risc-1-0
928           -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
929           -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
930           -munix=UNIX-STD  -nolibdld  -static  -threads
931
932      _i386 and x86-64 Options_
933           -mtune=CPU-TYPE  -march=CPU-TYPE
934           -mfpmath=UNIT
935           -masm=DIALECT  -mno-fancy-math-387
936           -mno-fp-ret-in-387  -msoft-float
937           -mno-wide-multiply  -mrtd  -malign-double
938           -mpreferred-stack-boundary=NUM
939           -mincoming-stack-boundary=NUM
940           -mcld -mcx16 -msahf -mmovbe -mcrc32
941           -mrecip -mrecip=OPT
942           -mvzeroupper -mprefer-avx128
943           -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx
944           -mavx2 -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma
945           -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt
946           -mbmi2 -mrtm -mlwp -mthreads
947           -mno-align-stringops  -minline-all-stringops
948           -minline-stringops-dynamically -mstringop-strategy=ALG
949           -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
950           -m96bit-long-double -mlong-double-64 -mlong-double-80
951           -mregparm=NUM  -msseregparm
952           -mveclibabi=TYPE -mvect8-ret-in-mem
953           -mpc32 -mpc64 -mpc80 -mstackrealign
954           -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs
955           -mcmodel=CODE-MODEL -mabi=NAME -maddress-mode=MODE
956           -m32 -m64 -mx32 -mlarge-data-threshold=NUM
957           -msse2avx -mfentry -m8bit-idiv
958           -mavx256-split-unaligned-load -mavx256-split-unaligned-store
959
960      _i386 and x86-64 Windows Options_
961           -mconsole -mcygwin -mno-cygwin -mdll
962           -mnop-fun-dllimport -mthread
963           -municode -mwin32 -mwindows -fno-set-stack-executable
964
965      _IA-64 Options_
966           -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
967           -mvolatile-asm-stop  -mregister-names  -msdata -mno-sdata
968           -mconstant-gp  -mauto-pic  -mfused-madd
969           -minline-float-divide-min-latency
970           -minline-float-divide-max-throughput
971           -mno-inline-float-divide
972           -minline-int-divide-min-latency
973           -minline-int-divide-max-throughput
974           -mno-inline-int-divide
975           -minline-sqrt-min-latency -minline-sqrt-max-throughput
976           -mno-inline-sqrt
977           -mdwarf2-asm -mearly-stop-bits
978           -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE
979           -mtune=CPU-TYPE -milp32 -mlp64
980           -msched-br-data-spec -msched-ar-data-spec -msched-control-spec
981           -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec
982           -msched-spec-ldc -msched-spec-control-ldc
983           -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns
984           -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path
985           -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost
986           -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS
987
988      _LM32 Options_
989           -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled
990           -msign-extend-enabled -muser-enabled
991
992      _M32R/D Options_
993           -m32r2 -m32rx -m32r
994           -mdebug
995           -malign-loops -mno-align-loops
996           -missue-rate=NUMBER
997           -mbranch-cost=NUMBER
998           -mmodel=CODE-SIZE-MODEL-TYPE
999           -msdata=SDATA-TYPE
1000           -mno-flush-func -mflush-func=NAME
1001           -mno-flush-trap -mflush-trap=NUMBER
1002           -G NUM
1003
1004      _M32C Options_
1005           -mcpu=CPU -msim -memregs=NUMBER
1006
1007      _M680x0 Options_
1008           -march=ARCH  -mcpu=CPU  -mtune=TUNE
1009           -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
1010           -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
1011           -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020
1012           -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort
1013           -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
1014           -malign-int  -mstrict-align  -msep-data  -mno-sep-data
1015           -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
1016           -mxgot -mno-xgot
1017
1018      _MCore Options_
1019           -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
1020           -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
1021           -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
1022           -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
1023           -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
1024
1025      _MeP Options_
1026           -mabsdiff -mall-opts -maverage -mbased=N -mbitops
1027           -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2
1028           -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax
1029           -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf
1030           -mtiny=N
1031
1032      _MicroBlaze Options_
1033           -msoft-float -mhard-float -msmall-divides -mcpu=CPU
1034           -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift
1035           -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss
1036           -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt
1037           -mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-APP-MODEL
1038
1039      _MIPS Options_
1040           -EL  -EB  -march=ARCH  -mtune=ARCH
1041           -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2
1042           -mips64  -mips64r2
1043           -mips16  -mno-mips16  -mflip-mips16
1044           -minterlink-mips16  -mno-interlink-mips16
1045           -mabi=ABI  -mabicalls  -mno-abicalls
1046           -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot
1047           -mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float
1048           -mno-float -msingle-float  -mdouble-float
1049           -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
1050           -mmcu -mmno-mcu
1051           -mfpu=FPU-TYPE
1052           -msmartmips  -mno-smartmips
1053           -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx
1054           -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc
1055           -mlong64  -mlong32  -msym32  -mno-sym32
1056           -GNUM  -mlocal-sdata  -mno-local-sdata
1057           -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
1058           -membedded-data  -mno-embedded-data
1059           -muninit-const-in-rodata  -mno-uninit-const-in-rodata
1060           -mcode-readable=SETTING
1061           -msplit-addresses  -mno-split-addresses
1062           -mexplicit-relocs  -mno-explicit-relocs
1063           -mcheck-zero-division  -mno-check-zero-division
1064           -mdivide-traps  -mdivide-breaks
1065           -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
1066           -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp
1067           -mfix-24k -mno-fix-24k
1068           -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
1069           -mfix-r10000 -mno-fix-r10000  -mfix-vr4120  -mno-fix-vr4120
1070           -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1
1071           -mflush-func=FUNC  -mno-flush-func
1072           -mbranch-cost=NUM  -mbranch-likely  -mno-branch-likely
1073           -mfp-exceptions -mno-fp-exceptions
1074           -mvr4130-align -mno-vr4130-align -msynci -mno-synci
1075           -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address
1076
1077      _MMIX Options_
1078           -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
1079           -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
1080           -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
1081           -mno-base-addresses  -msingle-exit  -mno-single-exit
1082
1083      _MN10300 Options_
1084           -mmult-bug  -mno-mult-bug
1085           -mno-am33 -mam33 -mam33-2 -mam34
1086           -mtune=CPU-TYPE
1087           -mreturn-pointer-on-d0
1088           -mno-crt0  -mrelax -mliw -msetlb
1089
1090      _Moxie Options_
1091           -meb -mel -mno-crt0
1092
1093      _PDP-11 Options_
1094           -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
1095           -mbcopy  -mbcopy-builtin  -mint32  -mno-int16
1096           -mint16  -mno-int32  -mfloat32  -mno-float64
1097           -mfloat64  -mno-float32  -mabshi  -mno-abshi
1098           -mbranch-expensive  -mbranch-cheap
1099           -munix-asm  -mdec-asm
1100
1101      _picoChip Options_
1102           -mae=AE_TYPE -mvliw-lookahead=N
1103           -msymbol-as-address -mno-inefficient-warnings
1104
1105      _PowerPC Options_ See RS/6000 and PowerPC Options.
1106
1107      _RL78 Options_
1108           -msim -mmul=none -mmul=g13 -mmul=rl78
1109
1110      _RS/6000 and PowerPC Options_
1111           -mcpu=CPU-TYPE
1112           -mtune=CPU-TYPE
1113           -mcmodel=CODE-MODEL
1114           -mpowerpc64
1115           -maltivec  -mno-altivec
1116           -mpowerpc-gpopt  -mno-powerpc-gpopt
1117           -mpowerpc-gfxopt  -mno-powerpc-gfxopt
1118           -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb -mpopcntd -mno-popcntd
1119           -mfprnd  -mno-fprnd
1120           -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp
1121           -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
1122           -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
1123           -malign-power  -malign-natural
1124           -msoft-float  -mhard-float  -mmultiple  -mno-multiple
1125           -msingle-float -mdouble-float -msimple-fpu
1126           -mstring  -mno-string  -mupdate  -mno-update
1127           -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
1128           -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
1129           -mstrict-align  -mno-strict-align  -mrelocatable
1130           -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
1131           -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
1132           -mdynamic-no-pic  -maltivec -mswdiv  -msingle-pic-base
1133           -mprioritize-restricted-insns=PRIORITY
1134           -msched-costly-dep=DEPENDENCE_TYPE
1135           -minsert-sched-nops=SCHEME
1136           -mcall-sysv  -mcall-netbsd
1137           -maix-struct-return  -msvr4-struct-return
1138           -mabi=ABI-TYPE -msecure-plt -mbss-plt
1139           -mblock-move-inline-limit=NUM
1140           -misel -mno-isel
1141           -misel=yes  -misel=no
1142           -mspe -mno-spe
1143           -mspe=yes  -mspe=no
1144           -mpaired
1145           -mgen-cell-microcode -mwarn-cell-microcode
1146           -mvrsave -mno-vrsave
1147           -mmulhw -mno-mulhw
1148           -mdlmzb -mno-dlmzb
1149           -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double
1150           -mprototype  -mno-prototype
1151           -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
1152           -msdata=OPT  -mvxworks  -G NUM  -pthread
1153           -mrecip -mrecip=OPT -mno-recip -mrecip-precision
1154           -mno-recip-precision
1155           -mveclibabi=TYPE -mfriz -mno-friz
1156           -mpointers-to-nested-functions -mno-pointers-to-nested-functions
1157           -msave-toc-indirect -mno-save-toc-indirect
1158
1159      _RX Options_
1160           -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu
1161           -mcpu=
1162           -mbig-endian-data -mlittle-endian-data
1163           -msmall-data
1164           -msim  -mno-sim
1165           -mas100-syntax -mno-as100-syntax
1166           -mrelax
1167           -mmax-constant-size=
1168           -mint-register=
1169           -mpid
1170           -mno-warn-multiple-fast-interrupts
1171           -msave-acc-in-interrupts
1172
1173      _S/390 and zSeries Options_
1174           -mtune=CPU-TYPE  -march=CPU-TYPE
1175           -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp
1176           -mlong-double-64 -mlong-double-128
1177           -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack
1178           -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle
1179           -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
1180           -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd
1181           -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard
1182
1183      _Score Options_
1184           -meb -mel
1185           -mnhwloop
1186           -muls
1187           -mmac
1188           -mscore5 -mscore5u -mscore7 -mscore7d
1189
1190      _SH Options_
1191           -m1  -m2  -m2e
1192           -m2a-nofpu -m2a-single-only -m2a-single -m2a
1193           -m3  -m3e
1194           -m4-nofpu  -m4-single-only  -m4-single  -m4
1195           -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al
1196           -m5-64media  -m5-64media-nofpu
1197           -m5-32media  -m5-32media-nofpu
1198           -m5-compact  -m5-compact-nofpu
1199           -mb  -ml  -mdalign  -mrelax
1200           -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave
1201           -mieee -mno-ieee -mbitops  -misize  -minline-ic_invalidate -mpadstruct
1202           -mspace -mprefergot  -musermode -multcost=NUMBER -mdiv=STRATEGY
1203           -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE
1204           -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed
1205           -maccumulate-outgoing-args -minvalid-symbols
1206           -matomic-model=ATOMIC-MODEL
1207           -mbranch-cost=NUM -mzdcbranch -mno-zdcbranch -mcbranchdi -mcmpeqdi
1208           -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra
1209           -mpretend-cmove -mtas
1210
1211      _Solaris 2 Options_
1212           -mimpure-text  -mno-impure-text
1213           -pthreads -pthread
1214
1215      _SPARC Options_
1216           -mcpu=CPU-TYPE
1217           -mtune=CPU-TYPE
1218           -mcmodel=CODE-MODEL
1219           -mmemory-model=MEM-MODEL
1220           -m32  -m64  -mapp-regs  -mno-app-regs
1221           -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat
1222           -mfpu  -mno-fpu  -mhard-float  -msoft-float
1223           -mhard-quad-float  -msoft-quad-float
1224           -mstack-bias  -mno-stack-bias
1225           -munaligned-doubles  -mno-unaligned-doubles
1226           -mv8plus  -mno-v8plus  -mvis  -mno-vis
1227           -mvis2  -mno-vis2  -mvis3  -mno-vis3
1228           -mcbcond -mno-cbcond
1229           -mfmaf  -mno-fmaf  -mpopc  -mno-popc
1230           -mfix-at697f
1231
1232      _SPU Options_
1233           -mwarn-reloc -merror-reloc
1234           -msafe-dma -munsafe-dma
1235           -mbranch-hints
1236           -msmall-mem -mlarge-mem -mstdmain
1237           -mfixed-range=REGISTER-RANGE
1238           -mea32 -mea64
1239           -maddress-space-conversion -mno-address-space-conversion
1240           -mcache-size=CACHE-SIZE
1241           -matomic-updates -mno-atomic-updates
1242
1243      _System V Options_
1244           -Qy  -Qn  -YP,PATHS  -Ym,DIR
1245
1246      _TILE-Gx Options_
1247           -mcpu=CPU -m32 -m64 -mcmodel=CODE-MODEL
1248
1249      _TILEPro Options_
1250           -mcpu=CPU -m32
1251
1252      _V850 Options_
1253           -mlong-calls  -mno-long-calls  -mep  -mno-ep
1254           -mprolog-function  -mno-prolog-function  -mspace
1255           -mtda=N  -msda=N  -mzda=N
1256           -mapp-regs  -mno-app-regs
1257           -mdisable-callt  -mno-disable-callt
1258           -mv850e2v3 -mv850e2 -mv850e1 -mv850es
1259           -mv850e -mv850 -mv850e3v5
1260           -mloop
1261           -mrelax
1262           -mlong-jumps
1263           -msoft-float
1264           -mhard-float
1265           -mgcc-abi
1266           -mrh850-abi
1267           -mbig-switch
1268
1269      _VAX Options_
1270           -mg  -mgnu  -munix
1271
1272      _VMS Options_
1273           -mvms-return-codes -mdebug-main=PREFIX -mmalloc64
1274           -mpointer-size=SIZE
1275
1276      _VxWorks Options_
1277           -mrtp  -non-static  -Bstatic  -Bdynamic
1278           -Xbind-lazy  -Xbind-now
1279
1280      _x86-64 Options_ See i386 and x86-64 Options.
1281
1282      _Xstormy16 Options_
1283           -msim
1284
1285      _Xtensa Options_
1286           -mconst16 -mno-const16
1287           -mfused-madd  -mno-fused-madd
1288           -mforce-no-pic
1289           -mserialize-volatile  -mno-serialize-volatile
1290           -mtext-section-literals  -mno-text-section-literals
1291           -mtarget-align  -mno-target-align
1292           -mlongcalls  -mno-longcalls
1293
1294      _zSeries Options_ See S/390 and zSeries Options.
1295
1296 _Code Generation Options_
1297      *Note Options for Code Generation Conventions: Code Gen Options.
1298           -fcall-saved-REG  -fcall-used-REG
1299           -ffixed-REG  -fexceptions
1300           -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables
1301           -fasynchronous-unwind-tables
1302           -finhibit-size-directive  -finstrument-functions
1303           -finstrument-functions-exclude-function-list=SYM,SYM,...
1304           -finstrument-functions-exclude-file-list=FILE,FILE,...
1305           -fno-common  -fno-ident
1306           -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
1307           -fno-jump-tables
1308           -frecord-gcc-switches
1309           -freg-struct-return  -fshort-enums
1310           -fshort-double  -fshort-wchar
1311           -fverbose-asm  -fpack-struct[=N]  -fstack-check
1312           -fstack-limit-register=REG  -fstack-limit-symbol=SYM
1313           -fno-stack-limit -fsplit-stack
1314           -fleading-underscore  -ftls-model=MODEL
1315           -fstack-reuse=REUSE_LEVEL
1316           -ftrapv  -fwrapv  -fbounds-check
1317           -fvisibility -fstrict-volatile-bitfields -fsync-libcalls
1318
1319
1320 * Menu:
1321
1322 * Overall Options::     Controlling the kind of output:
1323                         an executable, object files, assembler files,
1324                         or preprocessed source.
1325 * C Dialect Options::   Controlling the variant of C language compiled.
1326 * C++ Dialect Options:: Variations on C++.
1327 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
1328                         and Objective-C++.
1329 * Language Independent Options:: Controlling how diagnostics should be
1330                         formatted.
1331 * Warning Options::     How picky should the compiler be?
1332 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
1333 * Optimize Options::    How much optimization?
1334 * Preprocessor Options:: Controlling header files and macro definitions.
1335                          Also, getting dependency information for Make.
1336 * Assembler Options::   Passing options to the assembler.
1337 * Link Options::        Specifying libraries and so on.
1338 * Directory Options::   Where to find header files and libraries.
1339                         Where to find the compiler executable files.
1340 * Spec Files::          How to pass switches to sub-processes.
1341 * Target Options::      Running a cross-compiler, or an old version of GCC.
1342
1343 \1f
1344 File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
1345
1346 3.2 Options Controlling the Kind of Output
1347 ==========================================
1348
1349 Compilation can involve up to four stages: preprocessing, compilation
1350 proper, assembly and linking, always in that order.  GCC is capable of
1351 preprocessing and compiling several files either into several assembler
1352 input files, or into one assembler input file; then each assembler
1353 input file produces an object file, and linking combines all the object
1354 files (those newly compiled, and those specified as input) into an
1355 executable file.
1356
1357  For any given input file, the file name suffix determines what kind of
1358 compilation is done:
1359
1360 `FILE.c'
1361      C source code that must be preprocessed.
1362
1363 `FILE.i'
1364      C source code that should not be preprocessed.
1365
1366 `FILE.ii'
1367      C++ source code that should not be preprocessed.
1368
1369 `FILE.m'
1370      Objective-C source code.  Note that you must link with the
1371      `libobjc' library to make an Objective-C program work.
1372
1373 `FILE.mi'
1374      Objective-C source code that should not be preprocessed.
1375
1376 `FILE.mm'
1377 `FILE.M'
1378      Objective-C++ source code.  Note that you must link with the
1379      `libobjc' library to make an Objective-C++ program work.  Note
1380      that `.M' refers to a literal capital M.
1381
1382 `FILE.mii'
1383      Objective-C++ source code that should not be preprocessed.
1384
1385 `FILE.h'
1386      C, C++, Objective-C or Objective-C++ header file to be turned into
1387      a precompiled header (default), or C, C++ header file to be turned
1388      into an Ada spec (via the `-fdump-ada-spec' switch).
1389
1390 `FILE.cc'
1391 `FILE.cp'
1392 `FILE.cxx'
1393 `FILE.cpp'
1394 `FILE.CPP'
1395 `FILE.c++'
1396 `FILE.C'
1397      C++ source code that must be preprocessed.  Note that in `.cxx',
1398      the last two letters must both be literally `x'.  Likewise, `.C'
1399      refers to a literal capital C.
1400
1401 `FILE.mm'
1402 `FILE.M'
1403      Objective-C++ source code that must be preprocessed.
1404
1405 `FILE.mii'
1406      Objective-C++ source code that should not be preprocessed.
1407
1408 `FILE.hh'
1409 `FILE.H'
1410 `FILE.hp'
1411 `FILE.hxx'
1412 `FILE.hpp'
1413 `FILE.HPP'
1414 `FILE.h++'
1415 `FILE.tcc'
1416      C++ header file to be turned into a precompiled header or Ada spec.
1417
1418 `FILE.f'
1419 `FILE.for'
1420 `FILE.ftn'
1421      Fixed form Fortran source code that should not be preprocessed.
1422
1423 `FILE.F'
1424 `FILE.FOR'
1425 `FILE.fpp'
1426 `FILE.FPP'
1427 `FILE.FTN'
1428      Fixed form Fortran source code that must be preprocessed (with the
1429      traditional preprocessor).
1430
1431 `FILE.f90'
1432 `FILE.f95'
1433 `FILE.f03'
1434 `FILE.f08'
1435      Free form Fortran source code that should not be preprocessed.
1436
1437 `FILE.F90'
1438 `FILE.F95'
1439 `FILE.F03'
1440 `FILE.F08'
1441      Free form Fortran source code that must be preprocessed (with the
1442      traditional preprocessor).
1443
1444 `FILE.go'
1445      Go source code.
1446
1447 `FILE.ads'
1448      Ada source code file that contains a library unit declaration (a
1449      declaration of a package, subprogram, or generic, or a generic
1450      instantiation), or a library unit renaming declaration (a package,
1451      generic, or subprogram renaming declaration).  Such files are also
1452      called "specs".
1453
1454 `FILE.adb'
1455      Ada source code file containing a library unit body (a subprogram
1456      or package body).  Such files are also called "bodies".
1457
1458 `FILE.s'
1459      Assembler code.
1460
1461 `FILE.S'
1462 `FILE.sx'
1463      Assembler code that must be preprocessed.
1464
1465 `OTHER'
1466      An object file to be fed straight into linking.  Any file name
1467      with no recognized suffix is treated this way.
1468
1469  You can specify the input language explicitly with the `-x' option:
1470
1471 `-x LANGUAGE'
1472      Specify explicitly the LANGUAGE for the following input files
1473      (rather than letting the compiler choose a default based on the
1474      file name suffix).  This option applies to all following input
1475      files until the next `-x' option.  Possible values for LANGUAGE
1476      are:
1477           c  c-header  cpp-output
1478           c++  c++-header  c++-cpp-output
1479           objective-c  objective-c-header  objective-c-cpp-output
1480           objective-c++ objective-c++-header objective-c++-cpp-output
1481           assembler  assembler-with-cpp
1482           ada
1483           f77  f77-cpp-input f95  f95-cpp-input
1484           go
1485           java
1486
1487 `-x none'
1488      Turn off any specification of a language, so that subsequent files
1489      are handled according to their file name suffixes (as they are if
1490      `-x' has not been used at all).
1491
1492 `-pass-exit-codes'
1493      Normally the `gcc' program exits with the code of 1 if any phase
1494      of the compiler returns a non-success return code.  If you specify
1495      `-pass-exit-codes', the `gcc' program instead returns with the
1496      numerically highest error produced by any phase returning an error
1497      indication.  The C, C++, and Fortran front ends return 4 if an
1498      internal compiler error is encountered.
1499
1500  If you only want some of the stages of compilation, you can use `-x'
1501 (or filename suffixes) to tell `gcc' where to start, and one of the
1502 options `-c', `-S', or `-E' to say where `gcc' is to stop.  Note that
1503 some combinations (for example, `-x cpp-output -E') instruct `gcc' to
1504 do nothing at all.
1505
1506 `-c'
1507      Compile or assemble the source files, but do not link.  The linking
1508      stage simply is not done.  The ultimate output is in the form of an
1509      object file for each source file.
1510
1511      By default, the object file name for a source file is made by
1512      replacing the suffix `.c', `.i', `.s', etc., with `.o'.
1513
1514      Unrecognized input files, not requiring compilation or assembly,
1515      are ignored.
1516
1517 `-S'
1518      Stop after the stage of compilation proper; do not assemble.  The
1519      output is in the form of an assembler code file for each
1520      non-assembler input file specified.
1521
1522      By default, the assembler file name for a source file is made by
1523      replacing the suffix `.c', `.i', etc., with `.s'.
1524
1525      Input files that don't require compilation are ignored.
1526
1527 `-E'
1528      Stop after the preprocessing stage; do not run the compiler
1529      proper.  The output is in the form of preprocessed source code,
1530      which is sent to the standard output.
1531
1532      Input files that don't require preprocessing are ignored.
1533
1534 `-o FILE'
1535      Place output in file FILE.  This applies to whatever sort of
1536      output is being produced, whether it be an executable file, an
1537      object file, an assembler file or preprocessed C code.
1538
1539      If `-o' is not specified, the default is to put an executable file
1540      in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its
1541      assembler file in `SOURCE.s', a precompiled header file in
1542      `SOURCE.SUFFIX.gch', and all preprocessed C source on standard
1543      output.
1544
1545 `-v'
1546      Print (on standard error output) the commands executed to run the
1547      stages of compilation.  Also print the version number of the
1548      compiler driver program and of the preprocessor and the compiler
1549      proper.
1550
1551 `-###'
1552      Like `-v' except the commands are not executed and arguments are
1553      quoted unless they contain only alphanumeric characters or `./-_'.
1554      This is useful for shell scripts to capture the driver-generated
1555      command lines.
1556
1557 `-pipe'
1558      Use pipes rather than temporary files for communication between the
1559      various stages of compilation.  This fails to work on some systems
1560      where the assembler is unable to read from a pipe; but the GNU
1561      assembler has no trouble.
1562
1563 `--help'
1564      Print (on the standard output) a description of the command-line
1565      options understood by `gcc'.  If the `-v' option is also specified
1566      then `--help' is also passed on to the various processes invoked
1567      by `gcc', so that they can display the command-line options they
1568      accept.  If the `-Wextra' option has also been specified (prior to
1569      the `--help' option), then command-line options that have no
1570      documentation associated with them are also displayed.
1571
1572 `--target-help'
1573      Print (on the standard output) a description of target-specific
1574      command-line options for each tool.  For some targets extra
1575      target-specific information may also be printed.
1576
1577 `--help={CLASS|[^]QUALIFIER}[,...]'
1578      Print (on the standard output) a description of the command-line
1579      options understood by the compiler that fit into all specified
1580      classes and qualifiers.  These are the supported classes:
1581
1582     `optimizers'
1583           Display all of the optimization options supported by the
1584           compiler.
1585
1586     `warnings'
1587           Display all of the options controlling warning messages
1588           produced by the compiler.
1589
1590     `target'
1591           Display target-specific options.  Unlike the `--target-help'
1592           option however, target-specific options of the linker and
1593           assembler are not displayed.  This is because those tools do
1594           not currently support the extended `--help=' syntax.
1595
1596     `params'
1597           Display the values recognized by the `--param' option.
1598
1599     LANGUAGE
1600           Display the options supported for LANGUAGE, where LANGUAGE is
1601           the name of one of the languages supported in this version of
1602           GCC.
1603
1604     `common'
1605           Display the options that are common to all languages.
1606
1607      These are the supported qualifiers:
1608
1609     `undocumented'
1610           Display only those options that are undocumented.
1611
1612     `joined'
1613           Display options taking an argument that appears after an equal
1614           sign in the same continuous piece of text, such as:
1615           `--help=target'.
1616
1617     `separate'
1618           Display options taking an argument that appears as a separate
1619           word following the original option, such as: `-o output-file'.
1620
1621      Thus for example to display all the undocumented target-specific
1622      switches supported by the compiler, use:
1623
1624           --help=target,undocumented
1625
1626      The sense of a qualifier can be inverted by prefixing it with the
1627      `^' character, so for example to display all binary warning
1628      options (i.e., ones that are either on or off and that do not take
1629      an argument) that have a description, use:
1630
1631           --help=warnings,^joined,^undocumented
1632
1633      The argument to `--help=' should not consist solely of inverted
1634      qualifiers.
1635
1636      Combining several classes is possible, although this usually
1637      restricts the output so much that there is nothing to display.  One
1638      case where it does work, however, is when one of the classes is
1639      TARGET.  For example, to display all the target-specific
1640      optimization options, use:
1641
1642           --help=target,optimizers
1643
1644      The `--help=' option can be repeated on the command line.  Each
1645      successive use displays its requested class of options, skipping
1646      those that have already been displayed.
1647
1648      If the `-Q' option appears on the command line before the
1649      `--help=' option, then the descriptive text displayed by `--help='
1650      is changed.  Instead of describing the displayed options, an
1651      indication is given as to whether the option is enabled, disabled
1652      or set to a specific value (assuming that the compiler knows this
1653      at the point where the `--help=' option is used).
1654
1655      Here is a truncated example from the ARM port of `gcc':
1656
1657             % gcc -Q -mabi=2 --help=target -c
1658             The following options are target specific:
1659             -mabi=                                2
1660             -mabort-on-noreturn                   [disabled]
1661             -mapcs                                [disabled]
1662
1663      The output is sensitive to the effects of previous command-line
1664      options, so for example it is possible to find out which
1665      optimizations are enabled at `-O2' by using:
1666
1667           -Q -O2 --help=optimizers
1668
1669      Alternatively you can discover which binary optimizations are
1670      enabled by `-O3' by using:
1671
1672           gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1673           gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1674           diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1675
1676 `-no-canonical-prefixes'
1677      Do not expand any symbolic links, resolve references to `/../' or
1678      `/./', or make the path absolute when generating a relative prefix.
1679
1680 `--version'
1681      Display the version number and copyrights of the invoked GCC.
1682
1683 `-wrapper'
1684      Invoke all subcommands under a wrapper program.  The name of the
1685      wrapper program and its parameters are passed as a comma separated
1686      list.
1687
1688           gcc -c t.c -wrapper gdb,--args
1689
1690      This invokes all subprograms of `gcc' under `gdb --args', thus the
1691      invocation of `cc1' is `gdb --args cc1 ...'.
1692
1693 `-fplugin=NAME.so'
1694      Load the plugin code in file NAME.so, assumed to be a shared
1695      object to be dlopen'd by the compiler.  The base name of the
1696      shared object file is used to identify the plugin for the purposes
1697      of argument parsing (See `-fplugin-arg-NAME-KEY=VALUE' below).
1698      Each plugin should define the callback functions specified in the
1699      Plugins API.
1700
1701 `-fplugin-arg-NAME-KEY=VALUE'
1702      Define an argument called KEY with a value of VALUE for the plugin
1703      called NAME.
1704
1705 `-fdump-ada-spec[-slim]'
1706      For C and C++ source and include files, generate corresponding Ada
1707      specs. *Note Generating Ada Bindings for C and C++ headers:
1708      (gnat_ugn)Generating Ada Bindings for C and C++ headers, which
1709      provides detailed documentation on this feature.
1710
1711 `-fdump-go-spec=FILE'
1712      For input files in any language, generate corresponding Go
1713      declarations in FILE.  This generates Go `const', `type', `var',
1714      and `func' declarations which may be a useful way to start writing
1715      a Go interface to code written in some other language.
1716
1717 `@FILE'
1718      Read command-line options from FILE.  The options read are
1719      inserted in place of the original @FILE option.  If FILE does not
1720      exist, or cannot be read, then the option will be treated
1721      literally, and not removed.
1722
1723      Options in FILE are separated by whitespace.  A whitespace
1724      character may be included in an option by surrounding the entire
1725      option in either single or double quotes.  Any character
1726      (including a backslash) may be included by prefixing the character
1727      to be included with a backslash.  The FILE may itself contain
1728      additional @FILE options; any such options will be processed
1729      recursively.
1730
1731 \1f
1732 File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
1733
1734 3.3 Compiling C++ Programs
1735 ==========================
1736
1737 C++ source files conventionally use one of the suffixes `.C', `.cc',
1738 `.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use
1739 `.hh', `.hpp', `.H', or (for shared template code) `.tcc'; and
1740 preprocessed C++ files use the suffix `.ii'.  GCC recognizes files with
1741 these names and compiles them as C++ programs even if you call the
1742 compiler the same way as for compiling C programs (usually with the
1743 name `gcc').
1744
1745  However, the use of `gcc' does not add the C++ library.  `g++' is a
1746 program that calls GCC and automatically specifies linking against the
1747 C++ library.  It treats `.c', `.h' and `.i' files as C++ source files
1748 instead of C source files unless `-x' is used.  This program is also
1749 useful when precompiling a C header file with a `.h' extension for use
1750 in C++ compilations.  On many systems, `g++' is also installed with the
1751 name `c++'.
1752
1753  When you compile C++ programs, you may specify many of the same
1754 command-line options that you use for compiling programs in any
1755 language; or command-line options meaningful for C and related
1756 languages; or options that are meaningful only for C++ programs.  *Note
1757 Options Controlling C Dialect: C Dialect Options, for explanations of
1758 options for languages related to C.  *Note Options Controlling C++
1759 Dialect: C++ Dialect Options, for explanations of options that are
1760 meaningful only for C++ programs.
1761
1762 \1f
1763 File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
1764
1765 3.4 Options Controlling C Dialect
1766 =================================
1767
1768 The following options control the dialect of C (or languages derived
1769 from C, such as C++, Objective-C and Objective-C++) that the compiler
1770 accepts:
1771
1772 `-ansi'
1773      In C mode, this is equivalent to `-std=c90'. In C++ mode, it is
1774      equivalent to `-std=c++98'.
1775
1776      This turns off certain features of GCC that are incompatible with
1777      ISO C90 (when compiling C code), or of standard C++ (when
1778      compiling C++ code), such as the `asm' and `typeof' keywords, and
1779      predefined macros such as `unix' and `vax' that identify the type
1780      of system you are using.  It also enables the undesirable and
1781      rarely used ISO trigraph feature.  For the C compiler, it disables
1782      recognition of C++ style `//' comments as well as the `inline'
1783      keyword.
1784
1785      The alternate keywords `__asm__', `__extension__', `__inline__'
1786      and `__typeof__' continue to work despite `-ansi'.  You would not
1787      want to use them in an ISO C program, of course, but it is useful
1788      to put them in header files that might be included in compilations
1789      done with `-ansi'.  Alternate predefined macros such as `__unix__'
1790      and `__vax__' are also available, with or without `-ansi'.
1791
1792      The `-ansi' option does not cause non-ISO programs to be rejected
1793      gratuitously.  For that, `-Wpedantic' is required in addition to
1794      `-ansi'.  *Note Warning Options::.
1795
1796      The macro `__STRICT_ANSI__' is predefined when the `-ansi' option
1797      is used.  Some header files may notice this macro and refrain from
1798      declaring certain functions or defining certain macros that the
1799      ISO standard doesn't call for; this is to avoid interfering with
1800      any programs that might use these names for other things.
1801
1802      Functions that are normally built in but do not have semantics
1803      defined by ISO C (such as `alloca' and `ffs') are not built-in
1804      functions when `-ansi' is used.  *Note Other built-in functions
1805      provided by GCC: Other Builtins, for details of the functions
1806      affected.
1807
1808 `-std='
1809      Determine the language standard. *Note Language Standards
1810      Supported by GCC: Standards, for details of these standard
1811      versions.  This option is currently only supported when compiling
1812      C or C++.
1813
1814      The compiler can accept several base standards, such as `c90' or
1815      `c++98', and GNU dialects of those standards, such as `gnu90' or
1816      `gnu++98'.  When a base standard is specified, the compiler
1817      accepts all programs following that standard plus those using GNU
1818      extensions that do not contradict it.  For example, `-std=c90'
1819      turns off certain features of GCC that are incompatible with ISO
1820      C90, such as the `asm' and `typeof' keywords, but not other GNU
1821      extensions that do not have a meaning in ISO C90, such as omitting
1822      the middle term of a `?:' expression. On the other hand, when a
1823      GNU dialect of a standard is specified, all features supported by
1824      the compiler are enabled, even when those features change the
1825      meaning of the base standard.  As a result, some strict-conforming
1826      programs may be rejected.  The particular standard is used by
1827      `-Wpedantic' to identify which features are GNU extensions given
1828      that version of the standard. For example `-std=gnu90 -Wpedantic'
1829      warns about C++ style `//' comments, while `-std=gnu99 -Wpedantic'
1830      does not.
1831
1832      A value for this option must be provided; possible values are
1833
1834     `c90'
1835     `c89'
1836     `iso9899:1990'
1837           Support all ISO C90 programs (certain GNU extensions that
1838           conflict with ISO C90 are disabled). Same as `-ansi' for C
1839           code.
1840
1841     `iso9899:199409'
1842           ISO C90 as modified in amendment 1.
1843
1844     `c99'
1845     `c9x'
1846     `iso9899:1999'
1847     `iso9899:199x'
1848           ISO C99.  Note that this standard is not yet fully supported;
1849           see `http://gcc.gnu.org/c99status.html' for more information.
1850           The names `c9x' and `iso9899:199x' are deprecated.
1851
1852     `c11'
1853     `c1x'
1854     `iso9899:2011'
1855           ISO C11, the 2011 revision of the ISO C standard.  Support is
1856           incomplete and experimental.  The name `c1x' is deprecated.
1857
1858     `gnu90'
1859     `gnu89'
1860           GNU dialect of ISO C90 (including some C99 features). This is
1861           the default for C code.
1862
1863     `gnu99'
1864     `gnu9x'
1865           GNU dialect of ISO C99.  When ISO C99 is fully implemented in
1866           GCC, this will become the default.  The name `gnu9x' is
1867           deprecated.
1868
1869     `gnu11'
1870     `gnu1x'
1871           GNU dialect of ISO C11.  Support is incomplete and
1872           experimental.  The name `gnu1x' is deprecated.
1873
1874     `c++98'
1875     `c++03'
1876           The 1998 ISO C++ standard plus the 2003 technical corrigendum
1877           and some additional defect reports. Same as `-ansi' for C++
1878           code.
1879
1880     `gnu++98'
1881     `gnu++03'
1882           GNU dialect of `-std=c++98'.  This is the default for C++
1883           code.
1884
1885     `c++11'
1886     `c++0x'
1887           The 2011 ISO C++ standard plus amendments.  Support for C++11
1888           is still experimental, and may change in incompatible ways in
1889           future releases.  The name `c++0x' is deprecated.
1890
1891     `gnu++11'
1892     `gnu++0x'
1893           GNU dialect of `-std=c++11'. Support for C++11 is still
1894           experimental, and may change in incompatible ways in future
1895           releases.  The name `gnu++0x' is deprecated.
1896
1897     `c++1y'
1898           The next revision of the ISO C++ standard, tentatively
1899           planned for 2017.  Support is highly experimental, and will
1900           almost certainly change in incompatible ways in future
1901           releases.
1902
1903     `gnu++1y'
1904           GNU dialect of `-std=c++1y'.  Support is highly experimental,
1905           and will almost certainly change in incompatible ways in
1906           future releases.
1907
1908 `-fgnu89-inline'
1909      The option `-fgnu89-inline' tells GCC to use the traditional GNU
1910      semantics for `inline' functions when in C99 mode.  *Note An
1911      Inline Function is As Fast As a Macro: Inline.  This option is
1912      accepted and ignored by GCC versions 4.1.3 up to but not including
1913      4.3.  In GCC versions 4.3 and later it changes the behavior of GCC
1914      in C99 mode.  Using this option is roughly equivalent to adding the
1915      `gnu_inline' function attribute to all inline functions (*note
1916      Function Attributes::).
1917
1918      The option `-fno-gnu89-inline' explicitly tells GCC to use the C99
1919      semantics for `inline' when in C99 or gnu99 mode (i.e., it
1920      specifies the default behavior).  This option was first supported
1921      in GCC 4.3.  This option is not supported in `-std=c90' or
1922      `-std=gnu90' mode.
1923
1924      The preprocessor macros `__GNUC_GNU_INLINE__' and
1925      `__GNUC_STDC_INLINE__' may be used to check which semantics are in
1926      effect for `inline' functions.  *Note Common Predefined Macros:
1927      (cpp)Common Predefined Macros.
1928
1929 `-aux-info FILENAME'
1930      Output to the given filename prototyped declarations for all
1931      functions declared and/or defined in a translation unit, including
1932      those in header files.  This option is silently ignored in any
1933      language other than C.
1934
1935      Besides declarations, the file indicates, in comments, the origin
1936      of each declaration (source file and line), whether the
1937      declaration was implicit, prototyped or unprototyped (`I', `N' for
1938      new or `O' for old, respectively, in the first character after the
1939      line number and the colon), and whether it came from a declaration
1940      or a definition (`C' or `F', respectively, in the following
1941      character).  In the case of function definitions, a K&R-style list
1942      of arguments followed by their declarations is also provided,
1943      inside comments, after the declaration.
1944
1945 `-fallow-parameterless-variadic-functions'
1946      Accept variadic functions without named parameters.
1947
1948      Although it is possible to define such a function, this is not very
1949      useful as it is not possible to read the arguments.  This is only
1950      supported for C as this construct is allowed by C++.
1951
1952 `-fno-asm'
1953      Do not recognize `asm', `inline' or `typeof' as a keyword, so that
1954      code can use these words as identifiers.  You can use the keywords
1955      `__asm__', `__inline__' and `__typeof__' instead.  `-ansi' implies
1956      `-fno-asm'.
1957
1958      In C++, this switch only affects the `typeof' keyword, since `asm'
1959      and `inline' are standard keywords.  You may want to use the
1960      `-fno-gnu-keywords' flag instead, which has the same effect.  In
1961      C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects
1962      the `asm' and `typeof' keywords, since `inline' is a standard
1963      keyword in ISO C99.
1964
1965 `-fno-builtin'
1966 `-fno-builtin-FUNCTION'
1967      Don't recognize built-in functions that do not begin with
1968      `__builtin_' as prefix.  *Note Other built-in functions provided
1969      by GCC: Other Builtins, for details of the functions affected,
1970      including those which are not built-in functions when `-ansi' or
1971      `-std' options for strict ISO C conformance are used because they
1972      do not have an ISO standard meaning.
1973
1974      GCC normally generates special code to handle certain built-in
1975      functions more efficiently; for instance, calls to `alloca' may
1976      become single instructions which adjust the stack directly, and
1977      calls to `memcpy' may become inline copy loops.  The resulting
1978      code is often both smaller and faster, but since the function
1979      calls no longer appear as such, you cannot set a breakpoint on
1980      those calls, nor can you change the behavior of the functions by
1981      linking with a different library.  In addition, when a function is
1982      recognized as a built-in function, GCC may use information about
1983      that function to warn about problems with calls to that function,
1984      or to generate more efficient code, even if the resulting code
1985      still contains calls to that function.  For example, warnings are
1986      given with `-Wformat' for bad calls to `printf' when `printf' is
1987      built in and `strlen' is known not to modify global memory.
1988
1989      With the `-fno-builtin-FUNCTION' option only the built-in function
1990      FUNCTION is disabled.  FUNCTION must not begin with `__builtin_'.
1991      If a function is named that is not built-in in this version of
1992      GCC, this option is ignored.  There is no corresponding
1993      `-fbuiltin-FUNCTION' option; if you wish to enable built-in
1994      functions selectively when using `-fno-builtin' or
1995      `-ffreestanding', you may define macros such as:
1996
1997           #define abs(n)          __builtin_abs ((n))
1998           #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1999
2000 `-fhosted'
2001      Assert that compilation targets a hosted environment.  This implies
2002      `-fbuiltin'.  A hosted environment is one in which the entire
2003      standard library is available, and in which `main' has a return
2004      type of `int'.  Examples are nearly everything except a kernel.
2005      This is equivalent to `-fno-freestanding'.
2006
2007 `-ffreestanding'
2008      Assert that compilation targets a freestanding environment.  This
2009      implies `-fno-builtin'.  A freestanding environment is one in
2010      which the standard library may not exist, and program startup may
2011      not necessarily be at `main'.  The most obvious example is an OS
2012      kernel.  This is equivalent to `-fno-hosted'.
2013
2014      *Note Language Standards Supported by GCC: Standards, for details
2015      of freestanding and hosted environments.
2016
2017 `-fopenmp'
2018      Enable handling of OpenMP directives `#pragma omp' in C/C++ and
2019      `!$omp' in Fortran.  When `-fopenmp' is specified, the compiler
2020      generates parallel code according to the OpenMP Application
2021      Program Interface v3.0 `http://www.openmp.org/'.  This option
2022      implies `-pthread', and thus is only supported on targets that
2023      have support for `-pthread'.
2024
2025 `-fgnu-tm'
2026      When the option `-fgnu-tm' is specified, the compiler generates
2027      code for the Linux variant of Intel's current Transactional Memory
2028      ABI specification document (Revision 1.1, May 6 2009).  This is an
2029      experimental feature whose interface may change in future versions
2030      of GCC, as the official specification changes.  Please note that
2031      not all architectures are supported for this feature.
2032
2033      For more information on GCC's support for transactional memory,
2034      *Note The GNU Transactional Memory Library: (libitm)Enabling
2035      libitm.
2036
2037      Note that the transactional memory feature is not supported with
2038      non-call exceptions (`-fnon-call-exceptions').
2039
2040 `-fms-extensions'
2041      Accept some non-standard constructs used in Microsoft header files.
2042
2043      In C++ code, this allows member names in structures to be similar
2044      to previous types declarations.
2045
2046           typedef int UOW;
2047           struct ABC {
2048             UOW UOW;
2049           };
2050
2051      Some cases of unnamed fields in structures and unions are only
2052      accepted with this option.  *Note Unnamed struct/union fields
2053      within structs/unions: Unnamed Fields, for details.
2054
2055 `-fplan9-extensions'
2056      Accept some non-standard constructs used in Plan 9 code.
2057
2058      This enables `-fms-extensions', permits passing pointers to
2059      structures with anonymous fields to functions that expect pointers
2060      to elements of the type of the field, and permits referring to
2061      anonymous fields declared using a typedef.  *Note Unnamed
2062      struct/union fields within structs/unions: Unnamed Fields, for
2063      details.  This is only supported for C, not C++.
2064
2065 `-trigraphs'
2066      Support ISO C trigraphs.  The `-ansi' option (and `-std' options
2067      for strict ISO C conformance) implies `-trigraphs'.
2068
2069 `-traditional'
2070 `-traditional-cpp'
2071      Formerly, these options caused GCC to attempt to emulate a
2072      pre-standard C compiler.  They are now only supported with the
2073      `-E' switch.  The preprocessor continues to support a pre-standard
2074      mode.  See the GNU CPP manual for details.
2075
2076 `-fcond-mismatch'
2077      Allow conditional expressions with mismatched types in the second
2078      and third arguments.  The value of such an expression is void.
2079      This option is not supported for C++.
2080
2081 `-flax-vector-conversions'
2082      Allow implicit conversions between vectors with differing numbers
2083      of elements and/or incompatible element types.  This option should
2084      not be used for new code.
2085
2086 `-funsigned-char'
2087      Let the type `char' be unsigned, like `unsigned char'.
2088
2089      Each kind of machine has a default for what `char' should be.  It
2090      is either like `unsigned char' by default or like `signed char' by
2091      default.
2092
2093      Ideally, a portable program should always use `signed char' or
2094      `unsigned char' when it depends on the signedness of an object.
2095      But many programs have been written to use plain `char' and expect
2096      it to be signed, or expect it to be unsigned, depending on the
2097      machines they were written for.  This option, and its inverse, let
2098      you make such a program work with the opposite default.
2099
2100      The type `char' is always a distinct type from each of `signed
2101      char' or `unsigned char', even though its behavior is always just
2102      like one of those two.
2103
2104 `-fsigned-char'
2105      Let the type `char' be signed, like `signed char'.
2106
2107      Note that this is equivalent to `-fno-unsigned-char', which is the
2108      negative form of `-funsigned-char'.  Likewise, the option
2109      `-fno-signed-char' is equivalent to `-funsigned-char'.
2110
2111 `-fsigned-bitfields'
2112 `-funsigned-bitfields'
2113 `-fno-signed-bitfields'
2114 `-fno-unsigned-bitfields'
2115      These options control whether a bit-field is signed or unsigned,
2116      when the declaration does not use either `signed' or `unsigned'.
2117      By default, such a bit-field is signed, because this is
2118      consistent: the basic integer types such as `int' are signed types.
2119
2120 \1f
2121 File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C and Objective-C++ Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
2122
2123 3.5 Options Controlling C++ Dialect
2124 ===================================
2125
2126 This section describes the command-line options that are only meaningful
2127 for C++ programs.  You can also use most of the GNU compiler options
2128 regardless of what language your program is in.  For example, you might
2129 compile a file `firstClass.C' like this:
2130
2131      g++ -g -frepo -O -c firstClass.C
2132
2133 In this example, only `-frepo' is an option meant only for C++
2134 programs; you can use the other options with any language supported by
2135 GCC.
2136
2137  Here is a list of options that are _only_ for compiling C++ programs:
2138
2139 `-fabi-version=N'
2140      Use version N of the C++ ABI.  The default is version 2.
2141
2142      Version 0 refers to the version conforming most closely to the C++
2143      ABI specification.  Therefore, the ABI obtained using version 0
2144      will change in different versions of G++ as ABI bugs are fixed.
2145
2146      Version 1 is the version of the C++ ABI that first appeared in G++
2147      3.2.
2148
2149      Version 2 is the version of the C++ ABI that first appeared in G++
2150      3.4.
2151
2152      Version 3 corrects an error in mangling a constant address as a
2153      template argument.
2154
2155      Version 4, which first appeared in G++ 4.5, implements a standard
2156      mangling for vector types.
2157
2158      Version 5, which first appeared in G++ 4.6, corrects the mangling
2159      of attribute const/volatile on function pointer types, decltype of
2160      a plain decl, and use of a function parameter in the declaration of
2161      another parameter.
2162
2163      Version 6, which first appeared in G++ 4.7, corrects the promotion
2164      behavior of C++11 scoped enums and the mangling of template
2165      argument packs, const/static_cast, prefix ++ and -, and a class
2166      scope function used as a template argument.
2167
2168      See also `-Wabi'.
2169
2170 `-fno-access-control'
2171      Turn off all access checking.  This switch is mainly useful for
2172      working around bugs in the access control code.
2173
2174 `-fcheck-new'
2175      Check that the pointer returned by `operator new' is non-null
2176      before attempting to modify the storage allocated.  This check is
2177      normally unnecessary because the C++ standard specifies that
2178      `operator new' only returns `0' if it is declared `throw()', in
2179      which case the compiler always checks the return value even
2180      without this option.  In all other cases, when `operator new' has
2181      a non-empty exception specification, memory exhaustion is
2182      signalled by throwing `std::bad_alloc'.  See also `new (nothrow)'.
2183
2184 `-fconstexpr-depth=N'
2185      Set the maximum nested evaluation depth for C++11 constexpr
2186      functions to N.  A limit is needed to detect endless recursion
2187      during constant expression evaluation.  The minimum specified by
2188      the standard is 512.
2189
2190 `-fdeduce-init-list'
2191      Enable deduction of a template type parameter as
2192      `std::initializer_list' from a brace-enclosed initializer list,
2193      i.e.
2194
2195           template <class T> auto forward(T t) -> decltype (realfn (t))
2196           {
2197             return realfn (t);
2198           }
2199
2200           void f()
2201           {
2202             forward({1,2}); // call forward<std::initializer_list<int>>
2203           }
2204
2205      This deduction was implemented as a possible extension to the
2206      originally proposed semantics for the C++11 standard, but was not
2207      part of the final standard, so it is disabled by default.  This
2208      option is deprecated, and may be removed in a future version of
2209      G++.
2210
2211 `-ffriend-injection'
2212      Inject friend functions into the enclosing namespace, so that they
2213      are visible outside the scope of the class in which they are
2214      declared.  Friend functions were documented to work this way in
2215      the old Annotated C++ Reference Manual, and versions of G++ before
2216      4.1 always worked that way.  However, in ISO C++ a friend function
2217      that is not declared in an enclosing scope can only be found using
2218      argument dependent lookup.  This option causes friends to be
2219      injected as they were in earlier releases.
2220
2221      This option is for compatibility, and may be removed in a future
2222      release of G++.
2223
2224 `-fno-elide-constructors'
2225      The C++ standard allows an implementation to omit creating a
2226      temporary that is only used to initialize another object of the
2227      same type.  Specifying this option disables that optimization, and
2228      forces G++ to call the copy constructor in all cases.
2229
2230 `-fno-enforce-eh-specs'
2231      Don't generate code to check for violation of exception
2232      specifications at run time.  This option violates the C++
2233      standard, but may be useful for reducing code size in production
2234      builds, much like defining `NDEBUG'.  This does not give user code
2235      permission to throw exceptions in violation of the exception
2236      specifications; the compiler still optimizes based on the
2237      specifications, so throwing an unexpected exception results in
2238      undefined behavior at run time.
2239
2240 `-fextern-tls-init'
2241 `-fno-extern-tls-init'
2242      The C++11 and OpenMP standards allow `thread_local' and
2243      `threadprivate' variables to have dynamic (runtime)
2244      initialization.  To support this, any use of such a variable goes
2245      through a wrapper function that performs any necessary
2246      initialization.  When the use and definition of the variable are
2247      in the same translation unit, this overhead can be optimized away,
2248      but when the use is in a different translation unit there is
2249      significant overhead even if the variable doesn't actually need
2250      dynamic initialization.  If the programmer can be sure that no use
2251      of the variable in a non-defining TU needs to trigger dynamic
2252      initialization (either because the variable is statically
2253      initialized, or a use of the variable in the defining TU will be
2254      executed before any uses in another TU), they can avoid this
2255      overhead with the `-fno-extern-tls-init' option.
2256
2257      On targets that support symbol aliases, the default is
2258      `-fextern-tls-init'.  On targets that do not support symbol
2259      aliases, the default is `-fno-extern-tls-init'.
2260
2261 `-ffor-scope'
2262 `-fno-for-scope'
2263      If `-ffor-scope' is specified, the scope of variables declared in
2264      a for-init-statement is limited to the `for' loop itself, as
2265      specified by the C++ standard.  If `-fno-for-scope' is specified,
2266      the scope of variables declared in a for-init-statement extends to
2267      the end of the enclosing scope, as was the case in old versions of
2268      G++, and other (traditional) implementations of C++.
2269
2270      If neither flag is given, the default is to follow the standard,
2271      but to allow and give a warning for old-style code that would
2272      otherwise be invalid, or have different behavior.
2273
2274 `-fno-gnu-keywords'
2275      Do not recognize `typeof' as a keyword, so that code can use this
2276      word as an identifier.  You can use the keyword `__typeof__'
2277      instead.  `-ansi' implies `-fno-gnu-keywords'.
2278
2279 `-fno-implicit-templates'
2280      Never emit code for non-inline templates that are instantiated
2281      implicitly (i.e. by use); only emit code for explicit
2282      instantiations.  *Note Template Instantiation::, for more
2283      information.
2284
2285 `-fno-implicit-inline-templates'
2286      Don't emit code for implicit instantiations of inline templates,
2287      either.  The default is to handle inlines differently so that
2288      compiles with and without optimization need the same set of
2289      explicit instantiations.
2290
2291 `-fno-implement-inlines'
2292      To save space, do not emit out-of-line copies of inline functions
2293      controlled by `#pragma implementation'.  This causes linker errors
2294      if these functions are not inlined everywhere they are called.
2295
2296 `-fms-extensions'
2297      Disable Wpedantic warnings about constructs used in MFC, such as
2298      implicit int and getting a pointer to member function via
2299      non-standard syntax.
2300
2301 `-fno-nonansi-builtins'
2302      Disable built-in declarations of functions that are not mandated by
2303      ANSI/ISO C.  These include `ffs', `alloca', `_exit', `index',
2304      `bzero', `conjf', and other related functions.
2305
2306 `-fnothrow-opt'
2307      Treat a `throw()' exception specification as if it were a
2308      `noexcept' specification to reduce or eliminate the text size
2309      overhead relative to a function with no exception specification.
2310      If the function has local variables of types with non-trivial
2311      destructors, the exception specification actually makes the
2312      function smaller because the EH cleanups for those variables can be
2313      optimized away.  The semantic effect is that an exception thrown
2314      out of a function with such an exception specification results in
2315      a call to `terminate' rather than `unexpected'.
2316
2317 `-fno-operator-names'
2318      Do not treat the operator name keywords `and', `bitand', `bitor',
2319      `compl', `not', `or' and `xor' as synonyms as keywords.
2320
2321 `-fno-optional-diags'
2322      Disable diagnostics that the standard says a compiler does not
2323      need to issue.  Currently, the only such diagnostic issued by G++
2324      is the one for a name having multiple meanings within a class.
2325
2326 `-fpermissive'
2327      Downgrade some diagnostics about nonconformant code from errors to
2328      warnings.  Thus, using `-fpermissive' allows some nonconforming
2329      code to compile.
2330
2331 `-fno-pretty-templates'
2332      When an error message refers to a specialization of a function
2333      template, the compiler normally prints the signature of the
2334      template followed by the template arguments and any typedefs or
2335      typenames in the signature (e.g. `void f(T) [with T = int]' rather
2336      than `void f(int)') so that it's clear which template is involved.
2337      When an error message refers to a specialization of a class
2338      template, the compiler omits any template arguments that match the
2339      default template arguments for that template.  If either of these
2340      behaviors make it harder to understand the error message rather
2341      than easier, you can use `-fno-pretty-templates' to disable them.
2342
2343 `-frepo'
2344      Enable automatic template instantiation at link time.  This option
2345      also implies `-fno-implicit-templates'.  *Note Template
2346      Instantiation::, for more information.
2347
2348 `-fno-rtti'
2349      Disable generation of information about every class with virtual
2350      functions for use by the C++ run-time type identification features
2351      (`dynamic_cast' and `typeid').  If you don't use those parts of
2352      the language, you can save some space by using this flag.  Note
2353      that exception handling uses the same information, but G++
2354      generates it as needed. The `dynamic_cast' operator can still be
2355      used for casts that do not require run-time type information, i.e.
2356      casts to `void *' or to unambiguous base classes.
2357
2358 `-fstats'
2359      Emit statistics about front-end processing at the end of the
2360      compilation.  This information is generally only useful to the G++
2361      development team.
2362
2363 `-fstrict-enums'
2364      Allow the compiler to optimize using the assumption that a value of
2365      enumerated type can only be one of the values of the enumeration
2366      (as defined in the C++ standard; basically, a value that can be
2367      represented in the minimum number of bits needed to represent all
2368      the enumerators).  This assumption may not be valid if the program
2369      uses a cast to convert an arbitrary integer value to the
2370      enumerated type.
2371
2372 `-ftemplate-backtrace-limit=N'
2373      Set the maximum number of template instantiation notes for a single
2374      warning or error to N.  The default value is 10.
2375
2376 `-ftemplate-depth=N'
2377      Set the maximum instantiation depth for template classes to N.  A
2378      limit on the template instantiation depth is needed to detect
2379      endless recursions during template class instantiation.  ANSI/ISO
2380      C++ conforming programs must not rely on a maximum depth greater
2381      than 17 (changed to 1024 in C++11).  The default value is 900, as
2382      the compiler can run out of stack space before hitting 1024 in
2383      some situations.
2384
2385 `-fno-threadsafe-statics'
2386      Do not emit the extra code to use the routines specified in the C++
2387      ABI for thread-safe initialization of local statics.  You can use
2388      this option to reduce code size slightly in code that doesn't need
2389      to be thread-safe.
2390
2391 `-fuse-cxa-atexit'
2392      Register destructors for objects with static storage duration with
2393      the `__cxa_atexit' function rather than the `atexit' function.
2394      This option is required for fully standards-compliant handling of
2395      static destructors, but only works if your C library supports
2396      `__cxa_atexit'.
2397
2398 `-fno-use-cxa-get-exception-ptr'
2399      Don't use the `__cxa_get_exception_ptr' runtime routine.  This
2400      causes `std::uncaught_exception' to be incorrect, but is necessary
2401      if the runtime routine is not available.
2402
2403 `-fvisibility-inlines-hidden'
2404      This switch declares that the user does not attempt to compare
2405      pointers to inline functions or methods where the addresses of the
2406      two functions are taken in different shared objects.
2407
2408      The effect of this is that GCC may, effectively, mark inline
2409      methods with `__attribute__ ((visibility ("hidden")))' so that
2410      they do not appear in the export table of a DSO and do not require
2411      a PLT indirection when used within the DSO.  Enabling this option
2412      can have a dramatic effect on load and link times of a DSO as it
2413      massively reduces the size of the dynamic export table when the
2414      library makes heavy use of templates.
2415
2416      The behavior of this switch is not quite the same as marking the
2417      methods as hidden directly, because it does not affect static
2418      variables local to the function or cause the compiler to deduce
2419      that the function is defined in only one shared object.
2420
2421      You may mark a method as having a visibility explicitly to negate
2422      the effect of the switch for that method.  For example, if you do
2423      want to compare pointers to a particular inline method, you might
2424      mark it as having default visibility.  Marking the enclosing class
2425      with explicit visibility has no effect.
2426
2427      Explicitly instantiated inline methods are unaffected by this
2428      option as their linkage might otherwise cross a shared library
2429      boundary.  *Note Template Instantiation::.
2430
2431 `-fvisibility-ms-compat'
2432      This flag attempts to use visibility settings to make GCC's C++
2433      linkage model compatible with that of Microsoft Visual Studio.
2434
2435      The flag makes these changes to GCC's linkage model:
2436
2437        1. It sets the default visibility to `hidden', like
2438           `-fvisibility=hidden'.
2439
2440        2. Types, but not their members, are not hidden by default.
2441
2442        3. The One Definition Rule is relaxed for types without explicit
2443           visibility specifications that are defined in more than one
2444           shared object: those declarations are permitted if they are
2445           permitted when this option is not used.
2446
2447      In new code it is better to use `-fvisibility=hidden' and export
2448      those classes that are intended to be externally visible.
2449      Unfortunately it is possible for code to rely, perhaps
2450      accidentally, on the Visual Studio behavior.
2451
2452      Among the consequences of these changes are that static data
2453      members of the same type with the same name but defined in
2454      different shared objects are different, so changing one does not
2455      change the other; and that pointers to function members defined in
2456      different shared objects may not compare equal.  When this flag is
2457      given, it is a violation of the ODR to define types with the same
2458      name differently.
2459
2460 `-fno-weak'
2461      Do not use weak symbol support, even if it is provided by the
2462      linker.  By default, G++ uses weak symbols if they are available.
2463      This option exists only for testing, and should not be used by
2464      end-users; it results in inferior code and has no benefits.  This
2465      option may be removed in a future release of G++.
2466
2467 `-nostdinc++'
2468      Do not search for header files in the standard directories
2469      specific to C++, but do still search the other standard
2470      directories.  (This option is used when building the C++ library.)
2471
2472  In addition, these optimization, warning, and code generation options
2473 have meanings only for C++ programs:
2474
2475 `-fno-default-inline'
2476      Do not assume `inline' for functions defined inside a class scope.
2477      *Note Options That Control Optimization: Optimize Options.  Note
2478      that these functions have linkage like inline functions; they just
2479      aren't inlined by default.
2480
2481 `-Wabi (C, Objective-C, C++ and Objective-C++ only)'
2482      Warn when G++ generates code that is probably not compatible with
2483      the vendor-neutral C++ ABI.  Although an effort has been made to
2484      warn about all such cases, there are probably some cases that are
2485      not warned about, even though G++ is generating incompatible code.
2486      There may also be cases where warnings are emitted even though the
2487      code that is generated is compatible.
2488
2489      You should rewrite your code to avoid these warnings if you are
2490      concerned about the fact that code generated by G++ may not be
2491      binary compatible with code generated by other compilers.
2492
2493      The known incompatibilities in `-fabi-version=2' (the default)
2494      include:
2495
2496         * A template with a non-type template parameter of reference
2497           type is mangled incorrectly:
2498                extern int N;
2499                template <int &> struct S {};
2500                void n (S<N>) {2}
2501
2502           This is fixed in `-fabi-version=3'.
2503
2504         * SIMD vector types declared using `__attribute
2505           ((vector_size))' are mangled in a non-standard way that does
2506           not allow for overloading of functions taking vectors of
2507           different sizes.
2508
2509           The mangling is changed in `-fabi-version=4'.
2510
2511      The known incompatibilities in `-fabi-version=1' include:
2512
2513         * Incorrect handling of tail-padding for bit-fields.  G++ may
2514           attempt to pack data into the same byte as a base class.  For
2515           example:
2516
2517                struct A { virtual void f(); int f1 : 1; };
2518                struct B : public A { int f2 : 1; };
2519
2520           In this case, G++ places `B::f2' into the same byte as
2521           `A::f1'; other compilers do not.  You can avoid this problem
2522           by explicitly padding `A' so that its size is a multiple of
2523           the byte size on your platform; that causes G++ and other
2524           compilers to lay out `B' identically.
2525
2526         * Incorrect handling of tail-padding for virtual bases.  G++
2527           does not use tail padding when laying out virtual bases.  For
2528           example:
2529
2530                struct A { virtual void f(); char c1; };
2531                struct B { B(); char c2; };
2532                struct C : public A, public virtual B {};
2533
2534           In this case, G++ does not place `B' into the tail-padding for
2535           `A'; other compilers do.  You can avoid this problem by
2536           explicitly padding `A' so that its size is a multiple of its
2537           alignment (ignoring virtual base classes); that causes G++
2538           and other compilers to lay out `C' identically.
2539
2540         * Incorrect handling of bit-fields with declared widths greater
2541           than that of their underlying types, when the bit-fields
2542           appear in a union.  For example:
2543
2544                union U { int i : 4096; };
2545
2546           Assuming that an `int' does not have 4096 bits, G++ makes the
2547           union too small by the number of bits in an `int'.
2548
2549         * Empty classes can be placed at incorrect offsets.  For
2550           example:
2551
2552                struct A {};
2553
2554                struct B {
2555                  A a;
2556                  virtual void f ();
2557                };
2558
2559                struct C : public B, public A {};
2560
2561           G++ places the `A' base class of `C' at a nonzero offset; it
2562           should be placed at offset zero.  G++ mistakenly believes
2563           that the `A' data member of `B' is already at offset zero.
2564
2565         * Names of template functions whose types involve `typename' or
2566           template template parameters can be mangled incorrectly.
2567
2568                template <typename Q>
2569                void f(typename Q::X) {}
2570
2571                template <template <typename> class Q>
2572                void f(typename Q<int>::X) {}
2573
2574           Instantiations of these templates may be mangled incorrectly.
2575
2576
2577      It also warns about psABI-related changes.  The known psABI
2578      changes at this point include:
2579
2580         * For SysV/x86-64, unions with `long double' members are passed
2581           in memory as specified in psABI.  For example:
2582
2583                union U {
2584                  long double ld;
2585                  int i;
2586                };
2587
2588           `union U' is always passed in memory.
2589
2590
2591 `-Wctor-dtor-privacy (C++ and Objective-C++ only)'
2592      Warn when a class seems unusable because all the constructors or
2593      destructors in that class are private, and it has neither friends
2594      nor public static member functions.  Also warn if there are no
2595      non-private methods, and there's at least one private member
2596      function that isn't a constructor or destructor.
2597
2598 `-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)'
2599      Warn when `delete' is used to destroy an instance of a class that
2600      has virtual functions and non-virtual destructor. It is unsafe to
2601      delete an instance of a derived class through a pointer to a base
2602      class if the base class does not have a virtual destructor.  This
2603      warning is enabled by `-Wall'.
2604
2605 `-Wliteral-suffix (C++ and Objective-C++ only)'
2606      Warn when a string or character literal is followed by a ud-suffix
2607      which does not begin with an underscore.  As a conforming
2608      extension, GCC treats such suffixes as separate preprocessing
2609      tokens in order to maintain backwards compatibility with code that
2610      uses formatting macros from `<inttypes.h>'.  For example:
2611
2612           #define __STDC_FORMAT_MACROS
2613           #include <inttypes.h>
2614           #include <stdio.h>
2615
2616           int main() {
2617             int64_t i64 = 123;
2618             printf("My int64: %"PRId64"\n", i64);
2619           }
2620
2621      In this case, `PRId64' is treated as a separate preprocessing
2622      token.
2623
2624      This warning is enabled by default.
2625
2626 `-Wnarrowing (C++ and Objective-C++ only)'
2627      Warn when a narrowing conversion prohibited by C++11 occurs within
2628      `{ }', e.g.
2629
2630           int i = { 2.2 }; // error: narrowing from double to int
2631
2632      This flag is included in `-Wall' and `-Wc++11-compat'.
2633
2634      With `-std=c++11', `-Wno-narrowing' suppresses the diagnostic
2635      required by the standard.  Note that this does not affect the
2636      meaning of well-formed code; narrowing conversions are still
2637      considered ill-formed in SFINAE context.
2638
2639 `-Wnoexcept (C++ and Objective-C++ only)'
2640      Warn when a noexcept-expression evaluates to false because of a
2641      call to a function that does not have a non-throwing exception
2642      specification (i.e. `throw()' or `noexcept') but is known by the
2643      compiler to never throw an exception.
2644
2645 `-Wnon-virtual-dtor (C++ and Objective-C++ only)'
2646      Warn when a class has virtual functions and an accessible
2647      non-virtual destructor, in which case it is possible but unsafe to
2648      delete an instance of a derived class through a pointer to the
2649      base class.  This warning is also enabled if `-Weffc++' is
2650      specified.
2651
2652 `-Wreorder (C++ and Objective-C++ only)'
2653      Warn when the order of member initializers given in the code does
2654      not match the order in which they must be executed.  For instance:
2655
2656           struct A {
2657             int i;
2658             int j;
2659             A(): j (0), i (1) { }
2660           };
2661
2662      The compiler rearranges the member initializers for `i' and `j' to
2663      match the declaration order of the members, emitting a warning to
2664      that effect.  This warning is enabled by `-Wall'.
2665
2666 `-fext-numeric-literals (C++ and Objective-C++ only)'
2667      Accept imaginary, fixed-point, or machine-defined literal number
2668      suffixes as GNU extensions.  When this option is turned off these
2669      suffixes are treated as C++11 user-defined literal numeric
2670      suffixes.  This is on by default for all pre-C++11 dialects and
2671      all GNU dialects: `-std=c++98', `-std=gnu++98', `-std=gnu++11',
2672      `-std=gnu++1y'.  This option is off by default for ISO C++11
2673      onwards (`-std=c++11', ...).
2674
2675  The following `-W...' options are not affected by `-Wall'.
2676
2677 `-Weffc++ (C++ and Objective-C++ only)'
2678      Warn about violations of the following style guidelines from Scott
2679      Meyers' `Effective C++, Second Edition' book:
2680
2681         * Item 11:  Define a copy constructor and an assignment
2682           operator for classes with dynamically-allocated memory.
2683
2684         * Item 12:  Prefer initialization to assignment in constructors.
2685
2686         * Item 14:  Make destructors virtual in base classes.
2687
2688         * Item 15:  Have `operator=' return a reference to `*this'.
2689
2690         * Item 23:  Don't try to return a reference when you must
2691           return an object.
2692
2693
2694      Also warn about violations of the following style guidelines from
2695      Scott Meyers' `More Effective C++' book:
2696
2697         * Item 6:  Distinguish between prefix and postfix forms of
2698           increment and decrement operators.
2699
2700         * Item 7:  Never overload `&&', `||', or `,'.
2701
2702
2703      When selecting this option, be aware that the standard library
2704      headers do not obey all of these guidelines; use `grep -v' to
2705      filter out those warnings.
2706
2707 `-Wstrict-null-sentinel (C++ and Objective-C++ only)'
2708      Warn about the use of an uncasted `NULL' as sentinel.  When
2709      compiling only with GCC this is a valid sentinel, as `NULL' is
2710      defined to `__null'.  Although it is a null pointer constant
2711      rather than a null pointer, it is guaranteed to be of the same
2712      size as a pointer.  But this use is not portable across different
2713      compilers.
2714
2715 `-Wno-non-template-friend (C++ and Objective-C++ only)'
2716      Disable warnings when non-templatized friend functions are declared
2717      within a template.  Since the advent of explicit template
2718      specification support in G++, if the name of the friend is an
2719      unqualified-id (i.e., `friend foo(int)'), the C++ language
2720      specification demands that the friend declare or define an
2721      ordinary, nontemplate function.  (Section 14.5.3).  Before G++
2722      implemented explicit specification, unqualified-ids could be
2723      interpreted as a particular specialization of a templatized
2724      function.  Because this non-conforming behavior is no longer the
2725      default behavior for G++, `-Wnon-template-friend' allows the
2726      compiler to check existing code for potential trouble spots and is
2727      on by default.  This new compiler behavior can be turned off with
2728      `-Wno-non-template-friend', which keeps the conformant compiler
2729      code but disables the helpful warning.
2730
2731 `-Wold-style-cast (C++ and Objective-C++ only)'
2732      Warn if an old-style (C-style) cast to a non-void type is used
2733      within a C++ program.  The new-style casts (`dynamic_cast',
2734      `static_cast', `reinterpret_cast', and `const_cast') are less
2735      vulnerable to unintended effects and much easier to search for.
2736
2737 `-Woverloaded-virtual (C++ and Objective-C++ only)'
2738      Warn when a function declaration hides virtual functions from a
2739      base class.  For example, in:
2740
2741           struct A {
2742             virtual void f();
2743           };
2744
2745           struct B: public A {
2746             void f(int);
2747           };
2748
2749      the `A' class version of `f' is hidden in `B', and code like:
2750
2751           B* b;
2752           b->f();
2753
2754      fails to compile.
2755
2756 `-Wno-pmf-conversions (C++ and Objective-C++ only)'
2757      Disable the diagnostic for converting a bound pointer to member
2758      function to a plain pointer.
2759
2760 `-Wsign-promo (C++ and Objective-C++ only)'
2761      Warn when overload resolution chooses a promotion from unsigned or
2762      enumerated type to a signed type, over a conversion to an unsigned
2763      type of the same size.  Previous versions of G++ tried to preserve
2764      unsignedness, but the standard mandates the current behavior.
2765
2766 \1f
2767 File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Language Independent Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
2768
2769 3.6 Options Controlling Objective-C and Objective-C++ Dialects
2770 ==============================================================
2771
2772 (NOTE: This manual does not describe the Objective-C and Objective-C++
2773 languages themselves.  *Note Language Standards Supported by GCC:
2774 Standards, for references.)
2775
2776  This section describes the command-line options that are only
2777 meaningful for Objective-C and Objective-C++ programs.  You can also
2778 use most of the language-independent GNU compiler options.  For
2779 example, you might compile a file `some_class.m' like this:
2780
2781      gcc -g -fgnu-runtime -O -c some_class.m
2782
2783 In this example, `-fgnu-runtime' is an option meant only for
2784 Objective-C and Objective-C++ programs; you can use the other options
2785 with any language supported by GCC.
2786
2787  Note that since Objective-C is an extension of the C language,
2788 Objective-C compilations may also use options specific to the C
2789 front-end (e.g., `-Wtraditional').  Similarly, Objective-C++
2790 compilations may use C++-specific options (e.g., `-Wabi').
2791
2792  Here is a list of options that are _only_ for compiling Objective-C
2793 and Objective-C++ programs:
2794
2795 `-fconstant-string-class=CLASS-NAME'
2796      Use CLASS-NAME as the name of the class to instantiate for each
2797      literal string specified with the syntax `@"..."'.  The default
2798      class name is `NXConstantString' if the GNU runtime is being used,
2799      and `NSConstantString' if the NeXT runtime is being used (see
2800      below).  The `-fconstant-cfstrings' option, if also present,
2801      overrides the `-fconstant-string-class' setting and cause `@"..."'
2802      literals to be laid out as constant CoreFoundation strings.
2803
2804 `-fgnu-runtime'
2805      Generate object code compatible with the standard GNU Objective-C
2806      runtime.  This is the default for most types of systems.
2807
2808 `-fnext-runtime'
2809      Generate output compatible with the NeXT runtime.  This is the
2810      default for NeXT-based systems, including Darwin and Mac OS X.
2811      The macro `__NEXT_RUNTIME__' is predefined if (and only if) this
2812      option is used.
2813
2814 `-fno-nil-receivers'
2815      Assume that all Objective-C message dispatches (`[receiver
2816      message:arg]') in this translation unit ensure that the receiver is
2817      not `nil'.  This allows for more efficient entry points in the
2818      runtime to be used.  This option is only available in conjunction
2819      with the NeXT runtime and ABI version 0 or 1.
2820
2821 `-fobjc-abi-version=N'
2822      Use version N of the Objective-C ABI for the selected runtime.
2823      This option is currently supported only for the NeXT runtime.  In
2824      that case, Version 0 is the traditional (32-bit) ABI without
2825      support for properties and other Objective-C 2.0 additions.
2826      Version 1 is the traditional (32-bit) ABI with support for
2827      properties and other Objective-C 2.0 additions.  Version 2 is the
2828      modern (64-bit) ABI.  If nothing is specified, the default is
2829      Version 0 on 32-bit target machines, and Version 2 on 64-bit
2830      target machines.
2831
2832 `-fobjc-call-cxx-cdtors'
2833      For each Objective-C class, check if any of its instance variables
2834      is a C++ object with a non-trivial default constructor.  If so,
2835      synthesize a special `- (id) .cxx_construct' instance method which
2836      runs non-trivial default constructors on any such instance
2837      variables, in order, and then return `self'.  Similarly, check if
2838      any instance variable is a C++ object with a non-trivial
2839      destructor, and if so, synthesize a special `- (void)
2840      .cxx_destruct' method which runs all such default destructors, in
2841      reverse order.
2842
2843      The `- (id) .cxx_construct' and `- (void) .cxx_destruct' methods
2844      thusly generated only operate on instance variables declared in
2845      the current Objective-C class, and not those inherited from
2846      superclasses.  It is the responsibility of the Objective-C runtime
2847      to invoke all such methods in an object's inheritance hierarchy.
2848      The `- (id) .cxx_construct' methods are invoked by the runtime
2849      immediately after a new object instance is allocated; the `-
2850      (void) .cxx_destruct' methods are invoked immediately before the
2851      runtime deallocates an object instance.
2852
2853      As of this writing, only the NeXT runtime on Mac OS X 10.4 and
2854      later has support for invoking the `- (id) .cxx_construct' and `-
2855      (void) .cxx_destruct' methods.
2856
2857 `-fobjc-direct-dispatch'
2858      Allow fast jumps to the message dispatcher.  On Darwin this is
2859      accomplished via the comm page.
2860
2861 `-fobjc-exceptions'
2862      Enable syntactic support for structured exception handling in
2863      Objective-C, similar to what is offered by C++ and Java.  This
2864      option is required to use the Objective-C keywords `@try',
2865      `@throw', `@catch', `@finally' and `@synchronized'.  This option
2866      is available with both the GNU runtime and the NeXT runtime (but
2867      not available in conjunction with the NeXT runtime on Mac OS X
2868      10.2 and earlier).
2869
2870 `-fobjc-gc'
2871      Enable garbage collection (GC) in Objective-C and Objective-C++
2872      programs.  This option is only available with the NeXT runtime; the
2873      GNU runtime has a different garbage collection implementation that
2874      does not require special compiler flags.
2875
2876 `-fobjc-nilcheck'
2877      For the NeXT runtime with version 2 of the ABI, check for a nil
2878      receiver in method invocations before doing the actual method call.
2879      This is the default and can be disabled using
2880      `-fno-objc-nilcheck'.  Class methods and super calls are never
2881      checked for nil in this way no matter what this flag is set to.
2882      Currently this flag does nothing when the GNU runtime, or an older
2883      version of the NeXT runtime ABI, is used.
2884
2885 `-fobjc-std=objc1'
2886      Conform to the language syntax of Objective-C 1.0, the language
2887      recognized by GCC 4.0.  This only affects the Objective-C
2888      additions to the C/C++ language; it does not affect conformance to
2889      C/C++ standards, which is controlled by the separate C/C++ dialect
2890      option flags.  When this option is used with the Objective-C or
2891      Objective-C++ compiler, any Objective-C syntax that is not
2892      recognized by GCC 4.0 is rejected.  This is useful if you need to
2893      make sure that your Objective-C code can be compiled with older
2894      versions of GCC.
2895
2896 `-freplace-objc-classes'
2897      Emit a special marker instructing `ld(1)' not to statically link in
2898      the resulting object file, and allow `dyld(1)' to load it in at
2899      run time instead.  This is used in conjunction with the
2900      Fix-and-Continue debugging mode, where the object file in question
2901      may be recompiled and dynamically reloaded in the course of
2902      program execution, without the need to restart the program itself.
2903      Currently, Fix-and-Continue functionality is only available in
2904      conjunction with the NeXT runtime on Mac OS X 10.3 and later.
2905
2906 `-fzero-link'
2907      When compiling for the NeXT runtime, the compiler ordinarily
2908      replaces calls to `objc_getClass("...")' (when the name of the
2909      class is known at compile time) with static class references that
2910      get initialized at load time, which improves run-time performance.
2911      Specifying the `-fzero-link' flag suppresses this behavior and
2912      causes calls to `objc_getClass("...")' to be retained.  This is
2913      useful in Zero-Link debugging mode, since it allows for individual
2914      class implementations to be modified during program execution.
2915      The GNU runtime currently always retains calls to
2916      `objc_get_class("...")' regardless of command-line options.
2917
2918 `-gen-decls'
2919      Dump interface declarations for all classes seen in the source
2920      file to a file named `SOURCENAME.decl'.
2921
2922 `-Wassign-intercept (Objective-C and Objective-C++ only)'
2923      Warn whenever an Objective-C assignment is being intercepted by the
2924      garbage collector.
2925
2926 `-Wno-protocol (Objective-C and Objective-C++ only)'
2927      If a class is declared to implement a protocol, a warning is
2928      issued for every method in the protocol that is not implemented by
2929      the class.  The default behavior is to issue a warning for every
2930      method not explicitly implemented in the class, even if a method
2931      implementation is inherited from the superclass.  If you use the
2932      `-Wno-protocol' option, then methods inherited from the superclass
2933      are considered to be implemented, and no warning is issued for
2934      them.
2935
2936 `-Wselector (Objective-C and Objective-C++ only)'
2937      Warn if multiple methods of different types for the same selector
2938      are found during compilation.  The check is performed on the list
2939      of methods in the final stage of compilation.  Additionally, a
2940      check is performed for each selector appearing in a
2941      `@selector(...)'  expression, and a corresponding method for that
2942      selector has been found during compilation.  Because these checks
2943      scan the method table only at the end of compilation, these
2944      warnings are not produced if the final stage of compilation is not
2945      reached, for example because an error is found during compilation,
2946      or because the `-fsyntax-only' option is being used.
2947
2948 `-Wstrict-selector-match (Objective-C and Objective-C++ only)'
2949      Warn if multiple methods with differing argument and/or return
2950      types are found for a given selector when attempting to send a
2951      message using this selector to a receiver of type `id' or `Class'.
2952      When this flag is off (which is the default behavior), the
2953      compiler omits such warnings if any differences found are confined
2954      to types that share the same size and alignment.
2955
2956 `-Wundeclared-selector (Objective-C and Objective-C++ only)'
2957      Warn if a `@selector(...)' expression referring to an undeclared
2958      selector is found.  A selector is considered undeclared if no
2959      method with that name has been declared before the
2960      `@selector(...)' expression, either explicitly in an `@interface'
2961      or `@protocol' declaration, or implicitly in an `@implementation'
2962      section.  This option always performs its checks as soon as a
2963      `@selector(...)' expression is found, while `-Wselector' only
2964      performs its checks in the final stage of compilation.  This also
2965      enforces the coding style convention that methods and selectors
2966      must be declared before being used.
2967
2968 `-print-objc-runtime-info'
2969      Generate C header describing the largest structure that is passed
2970      by value, if any.
2971
2972
2973 \1f
2974 File: gcc.info,  Node: Language Independent Options,  Next: Warning Options,  Prev: Objective-C and Objective-C++ Dialect Options,  Up: Invoking GCC
2975
2976 3.7 Options to Control Diagnostic Messages Formatting
2977 =====================================================
2978
2979 Traditionally, diagnostic messages have been formatted irrespective of
2980 the output device's aspect (e.g. its width, ...).  You can use the
2981 options described below to control the formatting algorithm for
2982 diagnostic messages, e.g. how many characters per line, how often
2983 source location information should be reported.  Note that some
2984 language front ends may not honor these options.
2985
2986 `-fmessage-length=N'
2987      Try to format error messages so that they fit on lines of about N
2988      characters.  The default is 72 characters for `g++' and 0 for the
2989      rest of the front ends supported by GCC.  If N is zero, then no
2990      line-wrapping is done; each error message appears on a single line.
2991
2992 `-fdiagnostics-show-location=once'
2993      Only meaningful in line-wrapping mode.  Instructs the diagnostic
2994      messages reporter to emit source location information _once_; that
2995      is, in case the message is too long to fit on a single physical
2996      line and has to be wrapped, the source location won't be emitted
2997      (as prefix) again, over and over, in subsequent continuation
2998      lines.  This is the default behavior.
2999
3000 `-fdiagnostics-show-location=every-line'
3001      Only meaningful in line-wrapping mode.  Instructs the diagnostic
3002      messages reporter to emit the same source location information (as
3003      prefix) for physical lines that result from the process of breaking
3004      a message which is too long to fit on a single line.
3005
3006 `-fno-diagnostics-show-option'
3007      By default, each diagnostic emitted includes text indicating the
3008      command-line option that directly controls the diagnostic (if such
3009      an option is known to the diagnostic machinery).  Specifying the
3010      `-fno-diagnostics-show-option' flag suppresses that behavior.
3011
3012 `-fno-diagnostics-show-caret'
3013      By default, each diagnostic emitted includes the original source
3014      line and a caret '^' indicating the column.  This option
3015      suppresses this information.
3016
3017
3018 \1f
3019 File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Language Independent Options,  Up: Invoking GCC
3020
3021 3.8 Options to Request or Suppress Warnings
3022 ===========================================
3023
3024 Warnings are diagnostic messages that report constructions that are not
3025 inherently erroneous but that are risky or suggest there may have been
3026 an error.
3027
3028  The following language-independent options do not enable specific
3029 warnings but control the kinds of diagnostics produced by GCC.
3030
3031 `-fsyntax-only'
3032      Check the code for syntax errors, but don't do anything beyond
3033      that.
3034
3035 `-fmax-errors=N'
3036      Limits the maximum number of error messages to N, at which point
3037      GCC bails out rather than attempting to continue processing the
3038      source code.  If N is 0 (the default), there is no limit on the
3039      number of error messages produced.  If `-Wfatal-errors' is also
3040      specified, then `-Wfatal-errors' takes precedence over this option.
3041
3042 `-w'
3043      Inhibit all warning messages.
3044
3045 `-Werror'
3046      Make all warnings into errors.
3047
3048 `-Werror='
3049      Make the specified warning into an error.  The specifier for a
3050      warning is appended; for example `-Werror=switch' turns the
3051      warnings controlled by `-Wswitch' into errors.  This switch takes a
3052      negative form, to be used to negate `-Werror' for specific
3053      warnings; for example `-Wno-error=switch' makes `-Wswitch'
3054      warnings not be errors, even when `-Werror' is in effect.
3055
3056      The warning message for each controllable warning includes the
3057      option that controls the warning.  That option can then be used
3058      with `-Werror=' and `-Wno-error=' as described above.  (Printing
3059      of the option in the warning message can be disabled using the
3060      `-fno-diagnostics-show-option' flag.)
3061
3062      Note that specifying `-Werror='FOO automatically implies `-W'FOO.
3063      However, `-Wno-error='FOO does not imply anything.
3064
3065 `-Wfatal-errors'
3066      This option causes the compiler to abort compilation on the first
3067      error occurred rather than trying to keep going and printing
3068      further error messages.
3069
3070
3071  You can request many specific warnings with options beginning with
3072 `-W', for example `-Wimplicit' to request warnings on implicit
3073 declarations.  Each of these specific warning options also has a
3074 negative form beginning `-Wno-' to turn off warnings; for example,
3075 `-Wno-implicit'.  This manual lists only one of the two forms,
3076 whichever is not the default.  For further language-specific options
3077 also refer to *note C++ Dialect Options:: and *note Objective-C and
3078 Objective-C++ Dialect Options::.
3079
3080  When an unrecognized warning option is requested (e.g.,
3081 `-Wunknown-warning'), GCC emits a diagnostic stating that the option is
3082 not recognized.  However, if the `-Wno-' form is used, the behavior is
3083 slightly different: no diagnostic is produced for
3084 `-Wno-unknown-warning' unless other diagnostics are being produced.
3085 This allows the use of new `-Wno-' options with old compilers, but if
3086 something goes wrong, the compiler warns that an unrecognized option is
3087 present.
3088
3089 `-Wpedantic'
3090 `-pedantic'
3091      Issue all the warnings demanded by strict ISO C and ISO C++;
3092      reject all programs that use forbidden extensions, and some other
3093      programs that do not follow ISO C and ISO C++.  For ISO C, follows
3094      the version of the ISO C standard specified by any `-std' option
3095      used.
3096
3097      Valid ISO C and ISO C++ programs should compile properly with or
3098      without this option (though a rare few require `-ansi' or a `-std'
3099      option specifying the required version of ISO C).  However,
3100      without this option, certain GNU extensions and traditional C and
3101      C++ features are supported as well.  With this option, they are
3102      rejected.
3103
3104      `-Wpedantic' does not cause warning messages for use of the
3105      alternate keywords whose names begin and end with `__'.  Pedantic
3106      warnings are also disabled in the expression that follows
3107      `__extension__'.  However, only system header files should use
3108      these escape routes; application programs should avoid them.
3109      *Note Alternate Keywords::.
3110
3111      Some users try to use `-Wpedantic' to check programs for strict ISO
3112      C conformance.  They soon find that it does not do quite what they
3113      want: it finds some non-ISO practices, but not all--only those for
3114      which ISO C _requires_ a diagnostic, and some others for which
3115      diagnostics have been added.
3116
3117      A feature to report any failure to conform to ISO C might be
3118      useful in some instances, but would require considerable
3119      additional work and would be quite different from `-Wpedantic'.
3120      We don't have plans to support such a feature in the near future.
3121
3122      Where the standard specified with `-std' represents a GNU extended
3123      dialect of C, such as `gnu90' or `gnu99', there is a corresponding
3124      "base standard", the version of ISO C on which the GNU extended
3125      dialect is based.  Warnings from `-Wpedantic' are given where they
3126      are required by the base standard.  (It does not make sense for
3127      such warnings to be given only for features not in the specified
3128      GNU C dialect, since by definition the GNU dialects of C include
3129      all features the compiler supports with the given option, and
3130      there would be nothing to warn about.)
3131
3132 `-pedantic-errors'
3133      Like `-Wpedantic', except that errors are produced rather than
3134      warnings.
3135
3136 `-Wall'
3137      This enables all the warnings about constructions that some users
3138      consider questionable, and that are easy to avoid (or modify to
3139      prevent the warning), even in conjunction with macros.  This also
3140      enables some language-specific warnings described in *note C++
3141      Dialect Options:: and *note Objective-C and Objective-C++ Dialect
3142      Options::.
3143
3144      `-Wall' turns on the following warning flags:
3145
3146           -Waddress
3147           -Warray-bounds (only with `-O2')
3148           -Wc++11-compat
3149           -Wchar-subscripts
3150           -Wenum-compare (in C/ObjC; this is on by default in C++)
3151           -Wimplicit-int (C and Objective-C only)
3152           -Wimplicit-function-declaration (C and Objective-C only)
3153           -Wcomment
3154           -Wformat
3155           -Wmain (only for C/ObjC and unless `-ffreestanding')
3156           -Wmaybe-uninitialized
3157           -Wmissing-braces (only for C/ObjC)
3158           -Wnonnull
3159           -Wparentheses
3160           -Wpointer-sign
3161           -Wreorder
3162           -Wreturn-type
3163           -Wsequence-point
3164           -Wsign-compare (only in C++)
3165           -Wstrict-aliasing
3166           -Wstrict-overflow=1
3167           -Wswitch
3168           -Wtrigraphs
3169           -Wuninitialized
3170           -Wunknown-pragmas
3171           -Wunused-function
3172           -Wunused-label
3173           -Wunused-value
3174           -Wunused-variable
3175           -Wvolatile-register-var
3176
3177      Note that some warning flags are not implied by `-Wall'.  Some of
3178      them warn about constructions that users generally do not consider
3179      questionable, but which occasionally you might wish to check for;
3180      others warn about constructions that are necessary or hard to
3181      avoid in some cases, and there is no simple way to modify the code
3182      to suppress the warning. Some of them are enabled by `-Wextra' but
3183      many of them must be enabled individually.
3184
3185 `-Wextra'
3186      This enables some extra warning flags that are not enabled by
3187      `-Wall'. (This option used to be called `-W'.  The older name is
3188      still supported, but the newer name is more descriptive.)
3189
3190           -Wclobbered
3191           -Wempty-body
3192           -Wignored-qualifiers
3193           -Wmissing-field-initializers
3194           -Wmissing-parameter-type (C only)
3195           -Wold-style-declaration (C only)
3196           -Woverride-init
3197           -Wsign-compare
3198           -Wtype-limits
3199           -Wuninitialized
3200           -Wunused-parameter (only with `-Wunused' or `-Wall')
3201           -Wunused-but-set-parameter (only with `-Wunused' or `-Wall')
3202
3203      The option `-Wextra' also prints warning messages for the
3204      following cases:
3205
3206         * A pointer is compared against integer zero with `<', `<=',
3207           `>', or `>='.
3208
3209         * (C++ only) An enumerator and a non-enumerator both appear in a
3210           conditional expression.
3211
3212         * (C++ only) Ambiguous virtual bases.
3213
3214         * (C++ only) Subscripting an array that has been declared
3215           `register'.
3216
3217         * (C++ only) Taking the address of a variable that has been
3218           declared `register'.
3219
3220         * (C++ only) A base class is not initialized in a derived
3221           class's copy constructor.
3222
3223
3224 `-Wchar-subscripts'
3225      Warn if an array subscript has type `char'.  This is a common cause
3226      of error, as programmers often forget that this type is signed on
3227      some machines.  This warning is enabled by `-Wall'.
3228
3229 `-Wcomment'
3230      Warn whenever a comment-start sequence `/*' appears in a `/*'
3231      comment, or whenever a Backslash-Newline appears in a `//' comment.
3232      This warning is enabled by `-Wall'.
3233
3234 `-Wno-coverage-mismatch'
3235      Warn if feedback profiles do not match when using the
3236      `-fprofile-use' option.  If a source file is changed between
3237      compiling with `-fprofile-gen' and with `-fprofile-use', the files
3238      with the profile feedback can fail to match the source file and
3239      GCC cannot use the profile feedback information.  By default, this
3240      warning is enabled and is treated as an error.
3241      `-Wno-coverage-mismatch' can be used to disable the warning or
3242      `-Wno-error=coverage-mismatch' can be used to disable the error.
3243      Disabling the error for this warning can result in poorly
3244      optimized code and is useful only in the case of very minor
3245      changes such as bug fixes to an existing code-base.  Completely
3246      disabling the warning is not recommended.
3247
3248 `-Wno-cpp'
3249      (C, Objective-C, C++, Objective-C++ and Fortran only)
3250
3251      Suppress warning messages emitted by `#warning' directives.
3252
3253 `-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)'
3254      Give a warning when a value of type `float' is implicitly promoted
3255      to `double'.  CPUs with a 32-bit "single-precision" floating-point
3256      unit implement `float' in hardware, but emulate `double' in
3257      software.  On such a machine, doing computations using `double'
3258      values is much more expensive because of the overhead required for
3259      software emulation.
3260
3261      It is easy to accidentally do computations with `double' because
3262      floating-point literals are implicitly of type `double'.  For
3263      example, in:
3264           float area(float radius)
3265           {
3266              return 3.14159 * radius * radius;
3267           }
3268      the compiler performs the entire computation with `double' because
3269      the floating-point literal is a `double'.
3270
3271 `-Wformat'
3272 `-Wformat=N'
3273      Check calls to `printf' and `scanf', etc., to make sure that the
3274      arguments supplied have types appropriate to the format string
3275      specified, and that the conversions specified in the format string
3276      make sense.  This includes standard functions, and others
3277      specified by format attributes (*note Function Attributes::), in
3278      the `printf', `scanf', `strftime' and `strfmon' (an X/Open
3279      extension, not in the C standard) families (or other
3280      target-specific families).  Which functions are checked without
3281      format attributes having been specified depends on the standard
3282      version selected, and such checks of functions without the
3283      attribute specified are disabled by `-ffreestanding' or
3284      `-fno-builtin'.
3285
3286      The formats are checked against the format features supported by
3287      GNU libc version 2.2.  These include all ISO C90 and C99 features,
3288      as well as features from the Single Unix Specification and some
3289      BSD and GNU extensions.  Other library implementations may not
3290      support all these features; GCC does not support warning about
3291      features that go beyond a particular library's limitations.
3292      However, if `-Wpedantic' is used with `-Wformat', warnings are
3293      given about format features not in the selected standard version
3294      (but not for `strfmon' formats, since those are not in any version
3295      of the C standard).  *Note Options Controlling C Dialect: C
3296      Dialect Options.
3297
3298     `-Wformat=1'
3299     `-Wformat'
3300           Option `-Wformat' is equivalent to `-Wformat=1', and
3301           `-Wno-format' is equivalent to `-Wformat=0'.  Since
3302           `-Wformat' also checks for null format arguments for several
3303           functions, `-Wformat' also implies `-Wnonnull'.  Some aspects
3304           of this level of format checking can be disabled by the
3305           options: `-Wno-format-contains-nul',
3306           `-Wno-format-extra-args', and `-Wno-format-zero-length'.
3307           `-Wformat' is enabled by `-Wall'.
3308
3309     `-Wno-format-contains-nul'
3310           If `-Wformat' is specified, do not warn about format strings
3311           that contain NUL bytes.
3312
3313     `-Wno-format-extra-args'
3314           If `-Wformat' is specified, do not warn about excess
3315           arguments to a `printf' or `scanf' format function.  The C
3316           standard specifies that such arguments are ignored.
3317
3318           Where the unused arguments lie between used arguments that are
3319           specified with `$' operand number specifications, normally
3320           warnings are still given, since the implementation could not
3321           know what type to pass to `va_arg' to skip the unused
3322           arguments.  However, in the case of `scanf' formats, this
3323           option suppresses the warning if the unused arguments are all
3324           pointers, since the Single Unix Specification says that such
3325           unused arguments are allowed.
3326
3327     `-Wno-format-zero-length'
3328           If `-Wformat' is specified, do not warn about zero-length
3329           formats.  The C standard specifies that zero-length formats
3330           are allowed.
3331
3332     `-Wformat=2'
3333           Enable `-Wformat' plus additional format checks.  Currently
3334           equivalent to `-Wformat -Wformat-nonliteral -Wformat-security
3335           -Wformat-y2k'.
3336
3337     `-Wformat-nonliteral'
3338           If `-Wformat' is specified, also warn if the format string is
3339           not a string literal and so cannot be checked, unless the
3340           format function takes its format arguments as a `va_list'.
3341
3342     `-Wformat-security'
3343           If `-Wformat' is specified, also warn about uses of format
3344           functions that represent possible security problems.  At
3345           present, this warns about calls to `printf' and `scanf'
3346           functions where the format string is not a string literal and
3347           there are no format arguments, as in `printf (foo);'.  This
3348           may be a security hole if the format string came from
3349           untrusted input and contains `%n'.  (This is currently a
3350           subset of what `-Wformat-nonliteral' warns about, but in
3351           future warnings may be added to `-Wformat-security' that are
3352           not included in `-Wformat-nonliteral'.)
3353
3354     `-Wformat-y2k'
3355           If `-Wformat' is specified, also warn about `strftime'
3356           formats that may yield only a two-digit year.
3357
3358 `-Wnonnull'
3359      Warn about passing a null pointer for arguments marked as
3360      requiring a non-null value by the `nonnull' function attribute.
3361
3362      `-Wnonnull' is included in `-Wall' and `-Wformat'.  It can be
3363      disabled with the `-Wno-nonnull' option.
3364
3365 `-Winit-self (C, C++, Objective-C and Objective-C++ only)'
3366      Warn about uninitialized variables that are initialized with
3367      themselves.  Note this option can only be used with the
3368      `-Wuninitialized' option.
3369
3370      For example, GCC warns about `i' being uninitialized in the
3371      following snippet only when `-Winit-self' has been specified:
3372           int f()
3373           {
3374             int i = i;
3375             return i;
3376           }
3377
3378      This warning is enabled by `-Wall' in C++.
3379
3380 `-Wimplicit-int (C and Objective-C only)'
3381      Warn when a declaration does not specify a type.  This warning is
3382      enabled by `-Wall'.
3383
3384 `-Wimplicit-function-declaration (C and Objective-C only)'
3385      Give a warning whenever a function is used before being declared.
3386      In C99 mode (`-std=c99' or `-std=gnu99'), this warning is enabled
3387      by default and it is made into an error by `-pedantic-errors'.
3388      This warning is also enabled by `-Wall'.
3389
3390 `-Wimplicit (C and Objective-C only)'
3391      Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'.
3392      This warning is enabled by `-Wall'.
3393
3394 `-Wignored-qualifiers (C and C++ only)'
3395      Warn if the return type of a function has a type qualifier such as
3396      `const'.  For ISO C such a type qualifier has no effect, since the
3397      value returned by a function is not an lvalue.  For C++, the
3398      warning is only emitted for scalar types or `void'.  ISO C
3399      prohibits qualified `void' return types on function definitions,
3400      so such return types always receive a warning even without this
3401      option.
3402
3403      This warning is also enabled by `-Wextra'.
3404
3405 `-Wmain'
3406      Warn if the type of `main' is suspicious.  `main' should be a
3407      function with external linkage, returning int, taking either zero
3408      arguments, two, or three arguments of appropriate types.  This
3409      warning is enabled by default in C++ and is enabled by either
3410      `-Wall' or `-Wpedantic'.
3411
3412 `-Wmissing-braces'
3413      Warn if an aggregate or union initializer is not fully bracketed.
3414      In the following example, the initializer for `a' is not fully
3415      bracketed, but that for `b' is fully bracketed.  This warning is
3416      enabled by `-Wall' in C.
3417
3418           int a[2][2] = { 0, 1, 2, 3 };
3419           int b[2][2] = { { 0, 1 }, { 2, 3 } };
3420
3421      This warning is enabled by `-Wall'.
3422
3423 `-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
3424      Warn if a user-supplied include directory does not exist.
3425
3426 `-Wparentheses'
3427      Warn if parentheses are omitted in certain contexts, such as when
3428      there is an assignment in a context where a truth value is
3429      expected, or when operators are nested whose precedence people
3430      often get confused about.
3431
3432      Also warn if a comparison like `x<=y<=z' appears; this is
3433      equivalent to `(x<=y ? 1 : 0) <= z', which is a different
3434      interpretation from that of ordinary mathematical notation.
3435
3436      Also warn about constructions where there may be confusion to which
3437      `if' statement an `else' branch belongs.  Here is an example of
3438      such a case:
3439
3440           {
3441             if (a)
3442               if (b)
3443                 foo ();
3444             else
3445               bar ();
3446           }
3447
3448      In C/C++, every `else' branch belongs to the innermost possible
3449      `if' statement, which in this example is `if (b)'.  This is often
3450      not what the programmer expected, as illustrated in the above
3451      example by indentation the programmer chose.  When there is the
3452      potential for this confusion, GCC issues a warning when this flag
3453      is specified.  To eliminate the warning, add explicit braces around
3454      the innermost `if' statement so there is no way the `else' can
3455      belong to the enclosing `if'.  The resulting code looks like this:
3456
3457           {
3458             if (a)
3459               {
3460                 if (b)
3461                   foo ();
3462                 else
3463                   bar ();
3464               }
3465           }
3466
3467      Also warn for dangerous uses of the GNU extension to `?:' with
3468      omitted middle operand. When the condition in the `?': operator is
3469      a boolean expression, the omitted value is always 1.  Often
3470      programmers expect it to be a value computed inside the
3471      conditional expression instead.
3472
3473      This warning is enabled by `-Wall'.
3474
3475 `-Wsequence-point'
3476      Warn about code that may have undefined semantics because of
3477      violations of sequence point rules in the C and C++ standards.
3478
3479      The C and C++ standards define the order in which expressions in a
3480      C/C++ program are evaluated in terms of "sequence points", which
3481      represent a partial ordering between the execution of parts of the
3482      program: those executed before the sequence point, and those
3483      executed after it.  These occur after the evaluation of a full
3484      expression (one which is not part of a larger expression), after
3485      the evaluation of the first operand of a `&&', `||', `? :' or `,'
3486      (comma) operator, before a function is called (but after the
3487      evaluation of its arguments and the expression denoting the called
3488      function), and in certain other places.  Other than as expressed
3489      by the sequence point rules, the order of evaluation of
3490      subexpressions of an expression is not specified.  All these rules
3491      describe only a partial order rather than a total order, since,
3492      for example, if two functions are called within one expression
3493      with no sequence point between them, the order in which the
3494      functions are called is not specified.  However, the standards
3495      committee have ruled that function calls do not overlap.
3496
3497      It is not specified when between sequence points modifications to
3498      the values of objects take effect.  Programs whose behavior
3499      depends on this have undefined behavior; the C and C++ standards
3500      specify that "Between the previous and next sequence point an
3501      object shall have its stored value modified at most once by the
3502      evaluation of an expression.  Furthermore, the prior value shall
3503      be read only to determine the value to be stored.".  If a program
3504      breaks these rules, the results on any particular implementation
3505      are entirely unpredictable.
3506
3507      Examples of code with undefined behavior are `a = a++;', `a[n] =
3508      b[n++]' and `a[i++] = i;'.  Some more complicated cases are not
3509      diagnosed by this option, and it may give an occasional false
3510      positive result, but in general it has been found fairly effective
3511      at detecting this sort of problem in programs.
3512
3513      The standard is worded confusingly, therefore there is some debate
3514      over the precise meaning of the sequence point rules in subtle
3515      cases.  Links to discussions of the problem, including proposed
3516      formal definitions, may be found on the GCC readings page, at
3517      `http://gcc.gnu.org/readings.html'.
3518
3519      This warning is enabled by `-Wall' for C and C++.
3520
3521 `-Wno-return-local-addr'
3522      Do not warn about returning a pointer (or in C++, a reference) to a
3523      variable that goes out of scope after the function returns.
3524
3525 `-Wreturn-type'
3526      Warn whenever a function is defined with a return type that
3527      defaults to `int'.  Also warn about any `return' statement with no
3528      return value in a function whose return type is not `void'
3529      (falling off the end of the function body is considered returning
3530      without a value), and about a `return' statement with an
3531      expression in a function whose return type is `void'.
3532
3533      For C++, a function without return type always produces a
3534      diagnostic message, even when `-Wno-return-type' is specified.
3535      The only exceptions are `main' and functions defined in system
3536      headers.
3537
3538      This warning is enabled by `-Wall'.
3539
3540 `-Wswitch'
3541      Warn whenever a `switch' statement has an index of enumerated type
3542      and lacks a `case' for one or more of the named codes of that
3543      enumeration.  (The presence of a `default' label prevents this
3544      warning.)  `case' labels outside the enumeration range also
3545      provoke warnings when this option is used (even if there is a
3546      `default' label).  This warning is enabled by `-Wall'.
3547
3548 `-Wswitch-default'
3549      Warn whenever a `switch' statement does not have a `default' case.
3550
3551 `-Wswitch-enum'
3552      Warn whenever a `switch' statement has an index of enumerated type
3553      and lacks a `case' for one or more of the named codes of that
3554      enumeration.  `case' labels outside the enumeration range also
3555      provoke warnings when this option is used.  The only difference
3556      between `-Wswitch' and this option is that this option gives a
3557      warning about an omitted enumeration code even if there is a
3558      `default' label.
3559
3560 `-Wsync-nand (C and C++ only)'
3561      Warn when `__sync_fetch_and_nand' and `__sync_nand_and_fetch'
3562      built-in functions are used.  These functions changed semantics in
3563      GCC 4.4.
3564
3565 `-Wtrigraphs'
3566      Warn if any trigraphs are encountered that might change the
3567      meaning of the program (trigraphs within comments are not warned
3568      about).  This warning is enabled by `-Wall'.
3569
3570 `-Wunused-but-set-parameter'
3571      Warn whenever a function parameter is assigned to, but otherwise
3572      unused (aside from its declaration).
3573
3574      To suppress this warning use the `unused' attribute (*note
3575      Variable Attributes::).
3576
3577      This warning is also enabled by `-Wunused' together with `-Wextra'.
3578
3579 `-Wunused-but-set-variable'
3580      Warn whenever a local variable is assigned to, but otherwise unused
3581      (aside from its declaration).  This warning is enabled by `-Wall'.
3582
3583      To suppress this warning use the `unused' attribute (*note
3584      Variable Attributes::).
3585
3586      This warning is also enabled by `-Wunused', which is enabled by
3587      `-Wall'.
3588
3589 `-Wunused-function'
3590      Warn whenever a static function is declared but not defined or a
3591      non-inline static function is unused.  This warning is enabled by
3592      `-Wall'.
3593
3594 `-Wunused-label'
3595      Warn whenever a label is declared but not used.  This warning is
3596      enabled by `-Wall'.
3597
3598      To suppress this warning use the `unused' attribute (*note
3599      Variable Attributes::).
3600
3601 `-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)'
3602      Warn when a typedef locally defined in a function is not used.
3603      This warning is enabled by `-Wall'.
3604
3605 `-Wunused-parameter'
3606      Warn whenever a function parameter is unused aside from its
3607      declaration.
3608
3609      To suppress this warning use the `unused' attribute (*note
3610      Variable Attributes::).
3611
3612 `-Wno-unused-result'
3613      Do not warn if a caller of a function marked with attribute
3614      `warn_unused_result' (*note Function Attributes::) does not use
3615      its return value. The default is `-Wunused-result'.
3616
3617 `-Wunused-variable'
3618      Warn whenever a local variable or non-constant static variable is
3619      unused aside from its declaration.  This warning is enabled by
3620      `-Wall'.
3621
3622      To suppress this warning use the `unused' attribute (*note
3623      Variable Attributes::).
3624
3625 `-Wunused-value'
3626      Warn whenever a statement computes a result that is explicitly not
3627      used. To suppress this warning cast the unused expression to
3628      `void'. This includes an expression-statement or the left-hand
3629      side of a comma expression that contains no side effects. For
3630      example, an expression such as `x[i,j]' causes a warning, while
3631      `x[(void)i,j]' does not.
3632
3633      This warning is enabled by `-Wall'.
3634
3635 `-Wunused'
3636      All the above `-Wunused' options combined.
3637
3638      In order to get a warning about an unused function parameter, you
3639      must either specify `-Wextra -Wunused' (note that `-Wall' implies
3640      `-Wunused'), or separately specify `-Wunused-parameter'.
3641
3642 `-Wuninitialized'
3643      Warn if an automatic variable is used without first being
3644      initialized or if a variable may be clobbered by a `setjmp' call.
3645      In C++, warn if a non-static reference or non-static `const' member
3646      appears in a class without constructors.
3647
3648      If you want to warn about code that uses the uninitialized value
3649      of the variable in its own initializer, use the `-Winit-self'
3650      option.
3651
3652      These warnings occur for individual uninitialized or clobbered
3653      elements of structure, union or array variables as well as for
3654      variables that are uninitialized or clobbered as a whole.  They do
3655      not occur for variables or elements declared `volatile'.  Because
3656      these warnings depend on optimization, the exact variables or
3657      elements for which there are warnings depends on the precise
3658      optimization options and version of GCC used.
3659
3660      Note that there may be no warning about a variable that is used
3661      only to compute a value that itself is never used, because such
3662      computations may be deleted by data flow analysis before the
3663      warnings are printed.
3664
3665 `-Wmaybe-uninitialized'
3666      For an automatic variable, if there exists a path from the function
3667      entry to a use of the variable that is initialized, but there exist
3668      some other paths for which the variable is not initialized, the
3669      compiler emits a warning if it cannot prove the uninitialized
3670      paths are not executed at run time. These warnings are made
3671      optional because GCC is not smart enough to see all the reasons
3672      why the code might be correct in spite of appearing to have an
3673      error.  Here is one example of how this can happen:
3674
3675           {
3676             int x;
3677             switch (y)
3678               {
3679               case 1: x = 1;
3680                 break;
3681               case 2: x = 4;
3682                 break;
3683               case 3: x = 5;
3684               }
3685             foo (x);
3686           }
3687
3688      If the value of `y' is always 1, 2 or 3, then `x' is always
3689      initialized, but GCC doesn't know this. To suppress the warning,
3690      you need to provide a default case with assert(0) or similar code.
3691
3692      This option also warns when a non-volatile automatic variable
3693      might be changed by a call to `longjmp'.  These warnings as well
3694      are possible only in optimizing compilation.
3695
3696      The compiler sees only the calls to `setjmp'.  It cannot know
3697      where `longjmp' will be called; in fact, a signal handler could
3698      call it at any point in the code.  As a result, you may get a
3699      warning even when there is in fact no problem because `longjmp'
3700      cannot in fact be called at the place that would cause a problem.
3701
3702      Some spurious warnings can be avoided if you declare all the
3703      functions you use that never return as `noreturn'.  *Note Function
3704      Attributes::.
3705
3706      This warning is enabled by `-Wall' or `-Wextra'.
3707
3708 `-Wunknown-pragmas'
3709      Warn when a `#pragma' directive is encountered that is not
3710      understood by GCC.  If this command-line option is used, warnings
3711      are even issued for unknown pragmas in system header files.  This
3712      is not the case if the warnings are only enabled by the `-Wall'
3713      command-line option.
3714
3715 `-Wno-pragmas'
3716      Do not warn about misuses of pragmas, such as incorrect parameters,
3717      invalid syntax, or conflicts between pragmas.  See also
3718      `-Wunknown-pragmas'.
3719
3720 `-Wstrict-aliasing'
3721      This option is only active when `-fstrict-aliasing' is active.  It
3722      warns about code that might break the strict aliasing rules that
3723      the compiler is using for optimization.  The warning does not
3724      catch all cases, but does attempt to catch the more common
3725      pitfalls.  It is included in `-Wall'.  It is equivalent to
3726      `-Wstrict-aliasing=3'
3727
3728 `-Wstrict-aliasing=n'
3729      This option is only active when `-fstrict-aliasing' is active.  It
3730      warns about code that might break the strict aliasing rules that
3731      the compiler is using for optimization.  Higher levels correspond
3732      to higher accuracy (fewer false positives).  Higher levels also
3733      correspond to more effort, similar to the way `-O' works.
3734      `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=3'.
3735
3736      Level 1: Most aggressive, quick, least accurate.  Possibly useful
3737      when higher levels do not warn but `-fstrict-aliasing' still
3738      breaks the code, as it has very few false negatives.  However, it
3739      has many false positives.  Warns for all pointer conversions
3740      between possibly incompatible types, even if never dereferenced.
3741      Runs in the front end only.
3742
3743      Level 2: Aggressive, quick, not too precise.  May still have many
3744      false positives (not as many as level 1 though), and few false
3745      negatives (but possibly more than level 1).  Unlike level 1, it
3746      only warns when an address is taken.  Warns about incomplete
3747      types.  Runs in the front end only.
3748
3749      Level 3 (default for `-Wstrict-aliasing'): Should have very few
3750      false positives and few false negatives.  Slightly slower than
3751      levels 1 or 2 when optimization is enabled.  Takes care of the
3752      common pun+dereference pattern in the front end:
3753      `*(int*)&some_float'.  If optimization is enabled, it also runs in
3754      the back end, where it deals with multiple statement cases using
3755      flow-sensitive points-to information.  Only warns when the
3756      converted pointer is dereferenced.  Does not warn about incomplete
3757      types.
3758
3759 `-Wstrict-overflow'
3760 `-Wstrict-overflow=N'
3761      This option is only active when `-fstrict-overflow' is active.  It
3762      warns about cases where the compiler optimizes based on the
3763      assumption that signed overflow does not occur.  Note that it does
3764      not warn about all cases where the code might overflow: it only
3765      warns about cases where the compiler implements some optimization.
3766      Thus this warning depends on the optimization level.
3767
3768      An optimization that assumes that signed overflow does not occur is
3769      perfectly safe if the values of the variables involved are such
3770      that overflow never does, in fact, occur.  Therefore this warning
3771      can easily give a false positive: a warning about code that is not
3772      actually a problem.  To help focus on important issues, several
3773      warning levels are defined.  No warnings are issued for the use of
3774      undefined signed overflow when estimating how many iterations a
3775      loop requires, in particular when determining whether a loop will
3776      be executed at all.
3777
3778     `-Wstrict-overflow=1'
3779           Warn about cases that are both questionable and easy to
3780           avoid.  For example,  with `-fstrict-overflow', the compiler
3781           simplifies `x + 1 > x' to `1'.  This level of
3782           `-Wstrict-overflow' is enabled by `-Wall'; higher levels are
3783           not, and must be explicitly requested.
3784
3785     `-Wstrict-overflow=2'
3786           Also warn about other cases where a comparison is simplified
3787           to a constant.  For example: `abs (x) >= 0'.  This can only be
3788           simplified when `-fstrict-overflow' is in effect, because
3789           `abs (INT_MIN)' overflows to `INT_MIN', which is less than
3790           zero.  `-Wstrict-overflow' (with no level) is the same as
3791           `-Wstrict-overflow=2'.
3792
3793     `-Wstrict-overflow=3'
3794           Also warn about other cases where a comparison is simplified.
3795           For example: `x + 1 > 1' is simplified to `x > 0'.
3796
3797     `-Wstrict-overflow=4'
3798           Also warn about other simplifications not covered by the
3799           above cases.  For example: `(x * 10) / 5' is simplified to `x
3800           * 2'.
3801
3802     `-Wstrict-overflow=5'
3803           Also warn about cases where the compiler reduces the
3804           magnitude of a constant involved in a comparison.  For
3805           example: `x + 2 > y' is simplified to `x + 1 >= y'.  This is
3806           reported only at the highest warning level because this
3807           simplification applies to many comparisons, so this warning
3808           level gives a very large number of false positives.
3809
3810 `-Wsuggest-attribute=[pure|const|noreturn|format]'
3811      Warn for cases where adding an attribute may be beneficial. The
3812      attributes currently supported are listed below.
3813
3814     `-Wsuggest-attribute=pure'
3815     `-Wsuggest-attribute=const'
3816     `-Wsuggest-attribute=noreturn'
3817           Warn about functions that might be candidates for attributes
3818           `pure', `const' or `noreturn'.  The compiler only warns for
3819           functions visible in other compilation units or (in the case
3820           of `pure' and `const') if it cannot prove that the function
3821           returns normally. A function returns normally if it doesn't
3822           contain an infinite loop or return abnormally by throwing,
3823           calling `abort()' or trapping.  This analysis requires option
3824           `-fipa-pure-const', which is enabled by default at `-O' and
3825           higher.  Higher optimization levels improve the accuracy of
3826           the analysis.
3827
3828     `-Wsuggest-attribute=format'
3829     `-Wmissing-format-attribute'
3830           Warn about function pointers that might be candidates for
3831           `format' attributes.  Note these are only possible
3832           candidates, not absolute ones.  GCC guesses that function
3833           pointers with `format' attributes that are used in
3834           assignment, initialization, parameter passing or return
3835           statements should have a corresponding `format' attribute in
3836           the resulting type.  I.e. the left-hand side of the
3837           assignment or initialization, the type of the parameter
3838           variable, or the return type of the containing function
3839           respectively should also have a `format' attribute to avoid
3840           the warning.
3841
3842           GCC also warns about function definitions that might be
3843           candidates for `format' attributes.  Again, these are only
3844           possible candidates.  GCC guesses that `format' attributes
3845           might be appropriate for any function that calls a function
3846           like `vprintf' or `vscanf', but this might not always be the
3847           case, and some functions for which `format' attributes are
3848           appropriate may not be detected.
3849
3850 `-Warray-bounds'
3851      This option is only active when `-ftree-vrp' is active (default
3852      for `-O2' and above). It warns about subscripts to arrays that are
3853      always out of bounds. This warning is enabled by `-Wall'.
3854
3855 `-Wno-div-by-zero'
3856      Do not warn about compile-time integer division by zero.
3857      Floating-point division by zero is not warned about, as it can be
3858      a legitimate way of obtaining infinities and NaNs.
3859
3860 `-Wsystem-headers'
3861      Print warning messages for constructs found in system header files.
3862      Warnings from system headers are normally suppressed, on the
3863      assumption that they usually do not indicate real problems and
3864      would only make the compiler output harder to read.  Using this
3865      command-line option tells GCC to emit warnings from system headers
3866      as if they occurred in user code.  However, note that using
3867      `-Wall' in conjunction with this option does _not_ warn about
3868      unknown pragmas in system headers--for that, `-Wunknown-pragmas'
3869      must also be used.
3870
3871 `-Wtrampolines'
3872      Warn about trampolines generated for pointers to nested functions.
3873
3874      A trampoline is a small piece of data or code that is created at
3875      run  time on the stack when the address of a nested function is
3876      taken, and  is used to call the nested function indirectly.  For
3877      some targets, it  is made up of data only and thus requires no
3878      special treatment.  But,  for most targets, it is made up of code
3879      and thus requires the stack  to be made executable in order for
3880      the program to work properly.
3881
3882 `-Wfloat-equal'
3883      Warn if floating-point values are used in equality comparisons.
3884
3885      The idea behind this is that sometimes it is convenient (for the
3886      programmer) to consider floating-point values as approximations to
3887      infinitely precise real numbers.  If you are doing this, then you
3888      need to compute (by analyzing the code, or in some other way) the
3889      maximum or likely maximum error that the computation introduces,
3890      and allow for it when performing comparisons (and when producing
3891      output, but that's a different problem).  In particular, instead
3892      of testing for equality, you should check to see whether the two
3893      values have ranges that overlap; and this is done with the
3894      relational operators, so equality comparisons are probably
3895      mistaken.
3896
3897 `-Wtraditional (C and Objective-C only)'
3898      Warn about certain constructs that behave differently in
3899      traditional and ISO C.  Also warn about ISO C constructs that have
3900      no traditional C equivalent, and/or problematic constructs that
3901      should be avoided.
3902
3903         * Macro parameters that appear within string literals in the
3904           macro body.  In traditional C macro replacement takes place
3905           within string literals, but in ISO C it does not.
3906
3907         * In traditional C, some preprocessor directives did not exist.
3908           Traditional preprocessors only considered a line to be a
3909           directive if the `#' appeared in column 1 on the line.
3910           Therefore `-Wtraditional' warns about directives that
3911           traditional C understands but ignores because the `#' does
3912           not appear as the first character on the line.  It also
3913           suggests you hide directives like `#pragma' not understood by
3914           traditional C by indenting them.  Some traditional
3915           implementations do not recognize `#elif', so this option
3916           suggests avoiding it altogether.
3917
3918         * A function-like macro that appears without arguments.
3919
3920         * The unary plus operator.
3921
3922         * The `U' integer constant suffix, or the `F' or `L'
3923           floating-point constant suffixes.  (Traditional C does
3924           support the `L' suffix on integer constants.)  Note, these
3925           suffixes appear in macros defined in the system headers of
3926           most modern systems, e.g. the `_MIN'/`_MAX' macros in
3927           `<limits.h>'.  Use of these macros in user code might
3928           normally lead to spurious warnings, however GCC's integrated
3929           preprocessor has enough context to avoid warning in these
3930           cases.
3931
3932         * A function declared external in one block and then used after
3933           the end of the block.
3934
3935         * A `switch' statement has an operand of type `long'.
3936
3937         * A non-`static' function declaration follows a `static' one.
3938           This construct is not accepted by some traditional C
3939           compilers.
3940
3941         * The ISO type of an integer constant has a different width or
3942           signedness from its traditional type.  This warning is only
3943           issued if the base of the constant is ten.  I.e. hexadecimal
3944           or octal values, which typically represent bit patterns, are
3945           not warned about.
3946
3947         * Usage of ISO string concatenation is detected.
3948
3949         * Initialization of automatic aggregates.
3950
3951         * Identifier conflicts with labels.  Traditional C lacks a
3952           separate namespace for labels.
3953
3954         * Initialization of unions.  If the initializer is zero, the
3955           warning is omitted.  This is done under the assumption that
3956           the zero initializer in user code appears conditioned on e.g.
3957           `__STDC__' to avoid missing initializer warnings and relies
3958           on default initialization to zero in the traditional C case.
3959
3960         * Conversions by prototypes between fixed/floating-point values
3961           and vice versa.  The absence of these prototypes when
3962           compiling with traditional C causes serious problems.  This
3963           is a subset of the possible conversion warnings; for the full
3964           set use `-Wtraditional-conversion'.
3965
3966         * Use of ISO C style function definitions.  This warning
3967           intentionally is _not_ issued for prototype declarations or
3968           variadic functions because these ISO C features appear in
3969           your code when using libiberty's traditional C compatibility
3970           macros, `PARAMS' and `VPARAMS'.  This warning is also
3971           bypassed for nested functions because that feature is already
3972           a GCC extension and thus not relevant to traditional C
3973           compatibility.
3974
3975 `-Wtraditional-conversion (C and Objective-C only)'
3976      Warn if a prototype causes a type conversion that is different
3977      from what would happen to the same argument in the absence of a
3978      prototype.  This includes conversions of fixed point to floating
3979      and vice versa, and conversions changing the width or signedness
3980      of a fixed-point argument except when the same as the default
3981      promotion.
3982
3983 `-Wdeclaration-after-statement (C and Objective-C only)'
3984      Warn when a declaration is found after a statement in a block.
3985      This construct, known from C++, was introduced with ISO C99 and is
3986      by default allowed in GCC.  It is not supported by ISO C90 and was
3987      not supported by GCC versions before GCC 3.0.  *Note Mixed
3988      Declarations::.
3989
3990 `-Wundef'
3991      Warn if an undefined identifier is evaluated in an `#if' directive.
3992
3993 `-Wno-endif-labels'
3994      Do not warn whenever an `#else' or an `#endif' are followed by
3995      text.
3996
3997 `-Wshadow'
3998      Warn whenever a local variable or type declaration shadows another
3999      variable, parameter, type, or class member (in C++), or whenever a
4000      built-in function is shadowed. Note that in C++, the compiler
4001      warns if a local variable shadows an explicit typedef, but not if
4002      it shadows a struct/class/enum.
4003
4004 `-Wlarger-than=LEN'
4005      Warn whenever an object of larger than LEN bytes is defined.
4006
4007 `-Wframe-larger-than=LEN'
4008      Warn if the size of a function frame is larger than LEN bytes.
4009      The computation done to determine the stack frame size is
4010      approximate and not conservative.  The actual requirements may be
4011      somewhat greater than LEN even if you do not get a warning.  In
4012      addition, any space allocated via `alloca', variable-length
4013      arrays, or related constructs is not included by the compiler when
4014      determining whether or not to issue a warning.
4015
4016 `-Wno-free-nonheap-object'
4017      Do not warn when attempting to free an object that was not
4018      allocated on the heap.
4019
4020 `-Wstack-usage=LEN'
4021      Warn if the stack usage of a function might be larger than LEN
4022      bytes.  The computation done to determine the stack usage is
4023      conservative.  Any space allocated via `alloca', variable-length
4024      arrays, or related constructs is included by the compiler when
4025      determining whether or not to issue a warning.
4026
4027      The message is in keeping with the output of `-fstack-usage'.
4028
4029         * If the stack usage is fully static but exceeds the specified
4030           amount, it's:
4031
4032                  warning: stack usage is 1120 bytes
4033
4034         * If the stack usage is (partly) dynamic but bounded, it's:
4035
4036                  warning: stack usage might be 1648 bytes
4037
4038         * If the stack usage is (partly) dynamic and not bounded, it's:
4039
4040                  warning: stack usage might be unbounded
4041
4042 `-Wunsafe-loop-optimizations'
4043      Warn if the loop cannot be optimized because the compiler cannot
4044      assume anything on the bounds of the loop indices.  With
4045      `-funsafe-loop-optimizations' warn if the compiler makes such
4046      assumptions.
4047
4048 `-Wno-pedantic-ms-format (MinGW targets only)'
4049      When used in combination with `-Wformat' and `-pedantic' without
4050      GNU extensions, this option disables the warnings about non-ISO
4051      `printf' / `scanf' format width specifiers `I32', `I64', and `I'
4052      used on Windows targets, which depend on the MS runtime.
4053
4054 `-Wpointer-arith'
4055      Warn about anything that depends on the "size of" a function type
4056      or of `void'.  GNU C assigns these types a size of 1, for
4057      convenience in calculations with `void *' pointers and pointers to
4058      functions.  In C++, warn also when an arithmetic operation involves
4059      `NULL'.  This warning is also enabled by `-Wpedantic'.
4060
4061 `-Wtype-limits'
4062      Warn if a comparison is always true or always false due to the
4063      limited range of the data type, but do not warn for constant
4064      expressions.  For example, warn if an unsigned variable is
4065      compared against zero with `<' or `>='.  This warning is also
4066      enabled by `-Wextra'.
4067
4068 `-Wbad-function-cast (C and Objective-C only)'
4069      Warn whenever a function call is cast to a non-matching type.  For
4070      example, warn if `int malloc()' is cast to `anything *'.
4071
4072 `-Wc++-compat (C and Objective-C only)'
4073      Warn about ISO C constructs that are outside of the common subset
4074      of ISO C and ISO C++, e.g. request for implicit conversion from
4075      `void *' to a pointer to non-`void' type.
4076
4077 `-Wc++11-compat (C++ and Objective-C++ only)'
4078      Warn about C++ constructs whose meaning differs between ISO C++
4079      1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
4080      keywords in ISO C++ 2011.  This warning turns on `-Wnarrowing' and
4081      is enabled by `-Wall'.
4082
4083 `-Wcast-qual'
4084      Warn whenever a pointer is cast so as to remove a type qualifier
4085      from the target type.  For example, warn if a `const char *' is
4086      cast to an ordinary `char *'.
4087
4088      Also warn when making a cast that introduces a type qualifier in an
4089      unsafe way.  For example, casting `char **' to `const char **' is
4090      unsafe, as in this example:
4091
4092             /* p is char ** value.  */
4093             const char **q = (const char **) p;
4094             /* Assignment of readonly string to const char * is OK.  */
4095             *q = "string";
4096             /* Now char** pointer points to read-only memory.  */
4097             **p = 'b';
4098
4099 `-Wcast-align'
4100      Warn whenever a pointer is cast such that the required alignment
4101      of the target is increased.  For example, warn if a `char *' is
4102      cast to an `int *' on machines where integers can only be accessed
4103      at two- or four-byte boundaries.
4104
4105 `-Wwrite-strings'
4106      When compiling C, give string constants the type `const
4107      char[LENGTH]' so that copying the address of one into a
4108      non-`const' `char *' pointer produces a warning.  These warnings
4109      help you find at compile time code that can try to write into a
4110      string constant, but only if you have been very careful about
4111      using `const' in declarations and prototypes.  Otherwise, it is
4112      just a nuisance. This is why we did not make `-Wall' request these
4113      warnings.
4114
4115      When compiling C++, warn about the deprecated conversion from
4116      string literals to `char *'.  This warning is enabled by default
4117      for C++ programs.
4118
4119 `-Wclobbered'
4120      Warn for variables that might be changed by `longjmp' or `vfork'.
4121      This warning is also enabled by `-Wextra'.
4122
4123 `-Wconversion'
4124      Warn for implicit conversions that may alter a value. This includes
4125      conversions between real and integer, like `abs (x)' when `x' is
4126      `double'; conversions between signed and unsigned, like `unsigned
4127      ui = -1'; and conversions to smaller types, like `sqrtf (M_PI)'.
4128      Do not warn for explicit casts like `abs ((int) x)' and `ui =
4129      (unsigned) -1', or if the value is not changed by the conversion
4130      like in `abs (2.0)'.  Warnings about conversions between signed
4131      and unsigned integers can be disabled by using
4132      `-Wno-sign-conversion'.
4133
4134      For C++, also warn for confusing overload resolution for
4135      user-defined conversions; and conversions that never use a type
4136      conversion operator: conversions to `void', the same type, a base
4137      class or a reference to them. Warnings about conversions between
4138      signed and unsigned integers are disabled by default in C++ unless
4139      `-Wsign-conversion' is explicitly enabled.
4140
4141 `-Wno-conversion-null (C++ and Objective-C++ only)'
4142      Do not warn for conversions between `NULL' and non-pointer types.
4143      `-Wconversion-null' is enabled by default.
4144
4145 `-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)'
4146      Warn when a literal '0' is used as null pointer constant.  This can
4147      be useful to facilitate the conversion to `nullptr' in C++11.
4148
4149 `-Wuseless-cast (C++ and Objective-C++ only)'
4150      Warn when an expression is casted to its own type.
4151
4152 `-Wempty-body'
4153      Warn if an empty body occurs in an `if', `else' or `do while'
4154      statement.  This warning is also enabled by `-Wextra'.
4155
4156 `-Wenum-compare'
4157      Warn about a comparison between values of different enumerated
4158      types.  In C++ enumeral mismatches in conditional expressions are
4159      also diagnosed and the warning is enabled by default.  In C this
4160      warning is enabled by `-Wall'.
4161
4162 `-Wjump-misses-init (C, Objective-C only)'
4163      Warn if a `goto' statement or a `switch' statement jumps forward
4164      across the initialization of a variable, or jumps backward to a
4165      label after the variable has been initialized.  This only warns
4166      about variables that are initialized when they are declared.  This
4167      warning is only supported for C and Objective-C; in C++ this sort
4168      of branch is an error in any case.
4169
4170      `-Wjump-misses-init' is included in `-Wc++-compat'.  It can be
4171      disabled with the `-Wno-jump-misses-init' option.
4172
4173 `-Wsign-compare'
4174      Warn when a comparison between signed and unsigned values could
4175      produce an incorrect result when the signed value is converted to
4176      unsigned.  This warning is also enabled by `-Wextra'; to get the
4177      other warnings of `-Wextra' without this warning, use `-Wextra
4178      -Wno-sign-compare'.
4179
4180 `-Wsign-conversion'
4181      Warn for implicit conversions that may change the sign of an
4182      integer value, like assigning a signed integer expression to an
4183      unsigned integer variable. An explicit cast silences the warning.
4184      In C, this option is enabled also by `-Wconversion'.
4185
4186 `-Wsizeof-pointer-memaccess'
4187      Warn for suspicious length parameters to certain string and memory
4188      built-in functions if the argument uses `sizeof'.  This warning
4189      warns e.g.  about `memset (ptr, 0, sizeof (ptr));' if `ptr' is not
4190      an array, but a pointer, and suggests a possible fix, or about
4191      `memcpy (&foo, ptr, sizeof (&foo));'.  This warning is enabled by
4192      `-Wall'.
4193
4194 `-Waddress'
4195      Warn about suspicious uses of memory addresses. These include using
4196      the address of a function in a conditional expression, such as
4197      `void func(void); if (func)', and comparisons against the memory
4198      address of a string literal, such as `if (x == "abc")'.  Such uses
4199      typically indicate a programmer error: the address of a function
4200      always evaluates to true, so their use in a conditional usually
4201      indicate that the programmer forgot the parentheses in a function
4202      call; and comparisons against string literals result in unspecified
4203      behavior and are not portable in C, so they usually indicate that
4204      the programmer intended to use `strcmp'.  This warning is enabled
4205      by `-Wall'.
4206
4207 `-Wlogical-op'
4208      Warn about suspicious uses of logical operators in expressions.
4209      This includes using logical operators in contexts where a bit-wise
4210      operator is likely to be expected.
4211
4212 `-Waggregate-return'
4213      Warn if any functions that return structures or unions are defined
4214      or called.  (In languages where you can return an array, this also
4215      elicits a warning.)
4216
4217 `-Wno-aggressive-loop-optimizations'
4218      Warn if in a loop with constant number of iterations the compiler
4219      detects undefined behavior in some statement during one or more of
4220      the iterations.
4221
4222 `-Wno-attributes'
4223      Do not warn if an unexpected `__attribute__' is used, such as
4224      unrecognized attributes, function attributes applied to variables,
4225      etc.  This does not stop errors for incorrect use of supported
4226      attributes.
4227
4228 `-Wno-builtin-macro-redefined'
4229      Do not warn if certain built-in macros are redefined.  This
4230      suppresses warnings for redefinition of `__TIMESTAMP__',
4231      `__TIME__', `__DATE__', `__FILE__', and `__BASE_FILE__'.
4232
4233 `-Wstrict-prototypes (C and Objective-C only)'
4234      Warn if a function is declared or defined without specifying the
4235      argument types.  (An old-style function definition is permitted
4236      without a warning if preceded by a declaration that specifies the
4237      argument types.)
4238
4239 `-Wold-style-declaration (C and Objective-C only)'
4240      Warn for obsolescent usages, according to the C Standard, in a
4241      declaration. For example, warn if storage-class specifiers like
4242      `static' are not the first things in a declaration.  This warning
4243      is also enabled by `-Wextra'.
4244
4245 `-Wold-style-definition (C and Objective-C only)'
4246      Warn if an old-style function definition is used.  A warning is
4247      given even if there is a previous prototype.
4248
4249 `-Wmissing-parameter-type (C and Objective-C only)'
4250      A function parameter is declared without a type specifier in
4251      K&R-style functions:
4252
4253           void foo(bar) { }
4254
4255      This warning is also enabled by `-Wextra'.
4256
4257 `-Wmissing-prototypes (C and Objective-C only)'
4258      Warn if a global function is defined without a previous prototype
4259      declaration.  This warning is issued even if the definition itself
4260      provides a prototype.  Use this option to detect global functions
4261      that do not have a matching prototype declaration in a header file.
4262      This option is not valid for C++ because all function declarations
4263      provide prototypes and a non-matching declaration will declare an
4264      overload rather than conflict with an earlier declaration.  Use
4265      `-Wmissing-declarations' to detect missing declarations in C++.
4266
4267 `-Wmissing-declarations'
4268      Warn if a global function is defined without a previous
4269      declaration.  Do so even if the definition itself provides a
4270      prototype.  Use this option to detect global functions that are
4271      not declared in header files.  In C, no warnings are issued for
4272      functions with previous non-prototype declarations; use
4273      `-Wmissing-prototype' to detect missing prototypes.  In C++, no
4274      warnings are issued for function templates, or for inline
4275      functions, or for functions in anonymous namespaces.
4276
4277 `-Wmissing-field-initializers'
4278      Warn if a structure's initializer has some fields missing.  For
4279      example, the following code causes such a warning, because `x.h'
4280      is implicitly zero:
4281
4282           struct s { int f, g, h; };
4283           struct s x = { 3, 4 };
4284
4285      This option does not warn about designated initializers, so the
4286      following modification does not trigger a warning:
4287
4288           struct s { int f, g, h; };
4289           struct s x = { .f = 3, .g = 4 };
4290
4291      This warning is included in `-Wextra'.  To get other `-Wextra'
4292      warnings without this one, use `-Wextra
4293      -Wno-missing-field-initializers'.
4294
4295 `-Wno-multichar'
4296      Do not warn if a multicharacter constant (`'FOOF'') is used.
4297      Usually they indicate a typo in the user's code, as they have
4298      implementation-defined values, and should not be used in portable
4299      code.
4300
4301 `-Wnormalized=<none|id|nfc|nfkc>'
4302      In ISO C and ISO C++, two identifiers are different if they are
4303      different sequences of characters.  However, sometimes when
4304      characters outside the basic ASCII character set are used, you can
4305      have two different character sequences that look the same.  To
4306      avoid confusion, the ISO 10646 standard sets out some
4307      "normalization rules" which when applied ensure that two sequences
4308      that look the same are turned into the same sequence.  GCC can
4309      warn you if you are using identifiers that have not been
4310      normalized; this option controls that warning.
4311
4312      There are four levels of warning supported by GCC.  The default is
4313      `-Wnormalized=nfc', which warns about any identifier that is not
4314      in the ISO 10646 "C" normalized form, "NFC".  NFC is the
4315      recommended form for most uses.
4316
4317      Unfortunately, there are some characters allowed in identifiers by
4318      ISO C and ISO C++ that, when turned into NFC, are not allowed in
4319      identifiers.  That is, there's no way to use these symbols in
4320      portable ISO C or C++ and have all your identifiers in NFC.
4321      `-Wnormalized=id' suppresses the warning for these characters.  It
4322      is hoped that future versions of the standards involved will
4323      correct this, which is why this option is not the default.
4324
4325      You can switch the warning off for all characters by writing
4326      `-Wnormalized=none'.  You should only do this if you are using
4327      some other normalization scheme (like "D"), because otherwise you
4328      can easily create bugs that are literally impossible to see.
4329
4330      Some characters in ISO 10646 have distinct meanings but look
4331      identical in some fonts or display methodologies, especially once
4332      formatting has been applied.  For instance `\u207F', "SUPERSCRIPT
4333      LATIN SMALL LETTER N", displays just like a regular `n' that has
4334      been placed in a superscript.  ISO 10646 defines the "NFKC"
4335      normalization scheme to convert all these into a standard form as
4336      well, and GCC warns if your code is not in NFKC if you use
4337      `-Wnormalized=nfkc'.  This warning is comparable to warning about
4338      every identifier that contains the letter O because it might be
4339      confused with the digit 0, and so is not the default, but may be
4340      useful as a local coding convention if the programming environment
4341      cannot be fixed to display these characters distinctly.
4342
4343 `-Wno-deprecated'
4344      Do not warn about usage of deprecated features.  *Note Deprecated
4345      Features::.
4346
4347 `-Wno-deprecated-declarations'
4348      Do not warn about uses of functions (*note Function Attributes::),
4349      variables (*note Variable Attributes::), and types (*note Type
4350      Attributes::) marked as deprecated by using the `deprecated'
4351      attribute.
4352
4353 `-Wno-overflow'
4354      Do not warn about compile-time overflow in constant expressions.
4355
4356 `-Woverride-init (C and Objective-C only)'
4357      Warn if an initialized field without side effects is overridden
4358      when using designated initializers (*note Designated Initializers:
4359      Designated Inits.).
4360
4361      This warning is included in `-Wextra'.  To get other `-Wextra'
4362      warnings without this one, use `-Wextra -Wno-override-init'.
4363
4364 `-Wpacked'
4365      Warn if a structure is given the packed attribute, but the packed
4366      attribute has no effect on the layout or size of the structure.
4367      Such structures may be mis-aligned for little benefit.  For
4368      instance, in this code, the variable `f.x' in `struct bar' is
4369      misaligned even though `struct bar' does not itself have the
4370      packed attribute:
4371
4372           struct foo {
4373             int x;
4374             char a, b, c, d;
4375           } __attribute__((packed));
4376           struct bar {
4377             char z;
4378             struct foo f;
4379           };
4380
4381 `-Wpacked-bitfield-compat'
4382      The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' attribute
4383      on bit-fields of type `char'.  This has been fixed in GCC 4.4 but
4384      the change can lead to differences in the structure layout.  GCC
4385      informs you when the offset of such a field has changed in GCC 4.4.
4386      For example there is no longer a 4-bit padding between field `a'
4387      and `b' in this structure:
4388
4389           struct foo
4390           {
4391             char a:4;
4392             char b:8;
4393           } __attribute__ ((packed));
4394
4395      This warning is enabled by default.  Use
4396      `-Wno-packed-bitfield-compat' to disable this warning.
4397
4398 `-Wpadded'
4399      Warn if padding is included in a structure, either to align an
4400      element of the structure or to align the whole structure.
4401      Sometimes when this happens it is possible to rearrange the fields
4402      of the structure to reduce the padding and so make the structure
4403      smaller.
4404
4405 `-Wredundant-decls'
4406      Warn if anything is declared more than once in the same scope,
4407      even in cases where multiple declaration is valid and changes
4408      nothing.
4409
4410 `-Wnested-externs (C and Objective-C only)'
4411      Warn if an `extern' declaration is encountered within a function.
4412
4413 `-Wno-inherited-variadic-ctor'
4414      Suppress warnings about use of C++11 inheriting constructors when
4415      the base class inherited from has a C variadic constructor; the
4416      warning is on by default because the ellipsis is not inherited.
4417
4418 `-Winline'
4419      Warn if a function that is declared as inline cannot be inlined.
4420      Even with this option, the compiler does not warn about failures to
4421      inline functions declared in system headers.
4422
4423      The compiler uses a variety of heuristics to determine whether or
4424      not to inline a function.  For example, the compiler takes into
4425      account the size of the function being inlined and the amount of
4426      inlining that has already been done in the current function.
4427      Therefore, seemingly insignificant changes in the source program
4428      can cause the warnings produced by `-Winline' to appear or
4429      disappear.
4430
4431 `-Wno-invalid-offsetof (C++ and Objective-C++ only)'
4432      Suppress warnings from applying the `offsetof' macro to a non-POD
4433      type.  According to the 1998 ISO C++ standard, applying `offsetof'
4434      to a non-POD type is undefined.  In existing C++ implementations,
4435      however, `offsetof' typically gives meaningful results even when
4436      applied to certain kinds of non-POD types (such as a simple
4437      `struct' that fails to be a POD type only by virtue of having a
4438      constructor).  This flag is for users who are aware that they are
4439      writing nonportable code and who have deliberately chosen to
4440      ignore the warning about it.
4441
4442      The restrictions on `offsetof' may be relaxed in a future version
4443      of the C++ standard.
4444
4445 `-Wno-int-to-pointer-cast'
4446      Suppress warnings from casts to pointer type of an integer of a
4447      different size. In C++, casting to a pointer type of smaller size
4448      is an error. `Wint-to-pointer-cast' is enabled by default.
4449
4450 `-Wno-pointer-to-int-cast (C and Objective-C only)'
4451      Suppress warnings from casts from a pointer to an integer type of a
4452      different size.
4453
4454 `-Winvalid-pch'
4455      Warn if a precompiled header (*note Precompiled Headers::) is
4456      found in the search path but can't be used.
4457
4458 `-Wlong-long'
4459      Warn if `long long' type is used.  This is enabled by either
4460      `-Wpedantic' or `-Wtraditional' in ISO C90 and C++98 modes.  To
4461      inhibit the warning messages, use `-Wno-long-long'.
4462
4463 `-Wvariadic-macros'
4464      Warn if variadic macros are used in pedantic ISO C90 mode, or the
4465      GNU alternate syntax when in pedantic ISO C99 mode.  This is
4466      default.  To inhibit the warning messages, use
4467      `-Wno-variadic-macros'.
4468
4469 `-Wvarargs'
4470      Warn upon questionable usage of the macros used to handle variable
4471      arguments like `va_start'.  This is default.  To inhibit the
4472      warning messages, use `-Wno-varargs'.
4473
4474 `-Wvector-operation-performance'
4475      Warn if vector operation is not implemented via SIMD capabilities
4476      of the architecture.  Mainly useful for the performance tuning.
4477      Vector operation can be implemented `piecewise', which means that
4478      the scalar operation is performed on every vector element; `in
4479      parallel', which means that the vector operation is implemented
4480      using scalars of wider type, which normally is more performance
4481      efficient; and `as a single scalar', which means that vector fits
4482      into a scalar type.
4483
4484 `-Wno-virtual-move-assign'
4485      Suppress warnings about inheriting from a virtual base with a
4486      non-trivial C++11 move assignment operator.  This is dangerous
4487      because if the virtual base is reachable along more than one path,
4488      it will be moved multiple times, which can mean both objects end
4489      up in the moved-from state.  If the move assignment operator is
4490      written to avoid moving from a moved-from object, this warning can
4491      be disabled.
4492
4493 `-Wvla'
4494      Warn if variable length array is used in the code.  `-Wno-vla'
4495      prevents the `-Wpedantic' warning of the variable length array.
4496
4497 `-Wvolatile-register-var'
4498      Warn if a register variable is declared volatile.  The volatile
4499      modifier does not inhibit all optimizations that may eliminate
4500      reads and/or writes to register variables.  This warning is
4501      enabled by `-Wall'.
4502
4503 `-Wdisabled-optimization'
4504      Warn if a requested optimization pass is disabled.  This warning
4505      does not generally indicate that there is anything wrong with your
4506      code; it merely indicates that GCC's optimizers are unable to
4507      handle the code effectively.  Often, the problem is that your code
4508      is too big or too complex; GCC refuses to optimize programs when
4509      the optimization itself is likely to take inordinate amounts of
4510      time.
4511
4512 `-Wpointer-sign (C and Objective-C only)'
4513      Warn for pointer argument passing or assignment with different
4514      signedness.  This option is only supported for C and Objective-C.
4515      It is implied by `-Wall' and by `-Wpedantic', which can be
4516      disabled with `-Wno-pointer-sign'.
4517
4518 `-Wstack-protector'
4519      This option is only active when `-fstack-protector' is active.  It
4520      warns about functions that are not protected against stack
4521      smashing.
4522
4523 `-Wno-mudflap'
4524      Suppress warnings about constructs that cannot be instrumented by
4525      `-fmudflap'.
4526
4527 `-Woverlength-strings'
4528      Warn about string constants that are longer than the "minimum
4529      maximum" length specified in the C standard.  Modern compilers
4530      generally allow string constants that are much longer than the
4531      standard's minimum limit, but very portable programs should avoid
4532      using longer strings.
4533
4534      The limit applies _after_ string constant concatenation, and does
4535      not count the trailing NUL.  In C90, the limit was 509 characters;
4536      in C99, it was raised to 4095.  C++98 does not specify a normative
4537      minimum maximum, so we do not diagnose overlength strings in C++.
4538
4539      This option is implied by `-Wpedantic', and can be disabled with
4540      `-Wno-overlength-strings'.
4541
4542 `-Wunsuffixed-float-constants (C and Objective-C only)'
4543      Issue a warning for any floating constant that does not have a
4544      suffix.  When used together with `-Wsystem-headers' it warns about
4545      such constants in system header files.  This can be useful when
4546      preparing code to use with the `FLOAT_CONST_DECIMAL64' pragma from
4547      the decimal floating-point extension to C99.
4548
4549 \1f
4550 File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
4551
4552 3.9 Options for Debugging Your Program or GCC
4553 =============================================
4554
4555 GCC has various special options that are used for debugging either your
4556 program or GCC:
4557
4558 `-g'
4559      Produce debugging information in the operating system's native
4560      format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this
4561      debugging information.
4562
4563      On most systems that use stabs format, `-g' enables use of extra
4564      debugging information that only GDB can use; this extra information
4565      makes debugging work better in GDB but probably makes other
4566      debuggers crash or refuse to read the program.  If you want to
4567      control for certain whether to generate the extra information, use
4568      `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see
4569      below).
4570
4571      GCC allows you to use `-g' with `-O'.  The shortcuts taken by
4572      optimized code may occasionally produce surprising results: some
4573      variables you declared may not exist at all; flow of control may
4574      briefly move where you did not expect it; some statements may not
4575      be executed because they compute constant results or their values
4576      are already at hand; some statements may execute in different
4577      places because they have been moved out of loops.
4578
4579      Nevertheless it proves possible to debug optimized output.  This
4580      makes it reasonable to use the optimizer for programs that might
4581      have bugs.
4582
4583      The following options are useful when GCC is generated with the
4584      capability for more than one debugging format.
4585
4586 `-gsplit-dwarf'
4587      Separate as much dwarf debugging information as possible into a
4588      separate output file with the extension .dwo.  This option allows
4589      the build system to avoid linking files with debug information.  To
4590      be useful, this option requires a debugger capable of reading .dwo
4591      files.
4592
4593 `-ggdb'
4594      Produce debugging information for use by GDB.  This means to use
4595      the most expressive format available (DWARF 2, stabs, or the
4596      native format if neither of those are supported), including GDB
4597      extensions if at all possible.
4598
4599 `-gpubnames'
4600      Generate dwarf .debug_pubnames and .debug_pubtypes sections.
4601
4602 `-gstabs'
4603      Produce debugging information in stabs format (if that is
4604      supported), without GDB extensions.  This is the format used by
4605      DBX on most BSD systems.  On MIPS, Alpha and System V Release 4
4606      systems this option produces stabs debugging output that is not
4607      understood by DBX or SDB.  On System V Release 4 systems this
4608      option requires the GNU assembler.
4609
4610 `-feliminate-unused-debug-symbols'
4611      Produce debugging information in stabs format (if that is
4612      supported), for only symbols that are actually used.
4613
4614 `-femit-class-debug-always'
4615      Instead of emitting debugging information for a C++ class in only
4616      one object file, emit it in all object files using the class.
4617      This option should be used only with debuggers that are unable to
4618      handle the way GCC normally emits debugging information for
4619      classes because using this option increases the size of debugging
4620      information by as much as a factor of two.
4621
4622 `-fdebug-types-section'
4623      When using DWARF Version 4 or higher, type DIEs can be put into
4624      their own `.debug_types' section instead of making them part of the
4625      `.debug_info' section.  It is more efficient to put them in a
4626      separate comdat sections since the linker can then remove
4627      duplicates.  But not all DWARF consumers support `.debug_types'
4628      sections yet and on some objects `.debug_types' produces larger
4629      instead of smaller debugging information.
4630
4631 `-gstabs+'
4632      Produce debugging information in stabs format (if that is
4633      supported), using GNU extensions understood only by the GNU
4634      debugger (GDB).  The use of these extensions is likely to make
4635      other debuggers crash or refuse to read the program.
4636
4637 `-gcoff'
4638      Produce debugging information in COFF format (if that is
4639      supported).  This is the format used by SDB on most System V
4640      systems prior to System V Release 4.
4641
4642 `-gxcoff'
4643      Produce debugging information in XCOFF format (if that is
4644      supported).  This is the format used by the DBX debugger on IBM
4645      RS/6000 systems.
4646
4647 `-gxcoff+'
4648      Produce debugging information in XCOFF format (if that is
4649      supported), using GNU extensions understood only by the GNU
4650      debugger (GDB).  The use of these extensions is likely to make
4651      other debuggers crash or refuse to read the program, and may cause
4652      assemblers other than the GNU assembler (GAS) to fail with an
4653      error.
4654
4655 `-gdwarf-VERSION'
4656      Produce debugging information in DWARF format (if that is
4657      supported).  The value of VERSION may be either 2, 3 or 4; the
4658      default version for most targets is 4.
4659
4660      Note that with DWARF Version 2, some ports require and always use
4661      some non-conflicting DWARF 3 extensions in the unwind tables.
4662
4663      Version 4 may require GDB 7.0 and `-fvar-tracking-assignments' for
4664      maximum benefit.
4665
4666 `-grecord-gcc-switches'
4667      This switch causes the command-line options used to invoke the
4668      compiler that may affect code generation to be appended to the
4669      DW_AT_producer attribute in DWARF debugging information.  The
4670      options are concatenated with spaces separating them from each
4671      other and from the compiler version.  See also
4672      `-frecord-gcc-switches' for another way of storing compiler
4673      options into the object file.  This is the default.
4674
4675 `-gno-record-gcc-switches'
4676      Disallow appending command-line options to the DW_AT_producer
4677      attribute in DWARF debugging information.
4678
4679 `-gstrict-dwarf'
4680      Disallow using extensions of later DWARF standard version than
4681      selected with `-gdwarf-VERSION'.  On most targets using
4682      non-conflicting DWARF extensions from later standard versions is
4683      allowed.
4684
4685 `-gno-strict-dwarf'
4686      Allow using extensions of later DWARF standard version than
4687      selected with `-gdwarf-VERSION'.
4688
4689 `-gvms'
4690      Produce debugging information in Alpha/VMS debug format (if that is
4691      supported).  This is the format used by DEBUG on Alpha/VMS systems.
4692
4693 `-gLEVEL'
4694 `-ggdbLEVEL'
4695 `-gstabsLEVEL'
4696 `-gcoffLEVEL'
4697 `-gxcoffLEVEL'
4698 `-gvmsLEVEL'
4699      Request debugging information and also use LEVEL to specify how
4700      much information.  The default level is 2.
4701
4702      Level 0 produces no debug information at all.  Thus, `-g0' negates
4703      `-g'.
4704
4705      Level 1 produces minimal information, enough for making backtraces
4706      in parts of the program that you don't plan to debug.  This
4707      includes descriptions of functions and external variables, but no
4708      information about local variables and no line numbers.
4709
4710      Level 3 includes extra information, such as all the macro
4711      definitions present in the program.  Some debuggers support macro
4712      expansion when you use `-g3'.
4713
4714      `-gdwarf-2' does not accept a concatenated debug level, because
4715      GCC used to support an option `-gdwarf' that meant to generate
4716      debug information in version 1 of the DWARF format (which is very
4717      different from version 2), and it would have been too confusing.
4718      That debug format is long obsolete, but the option cannot be
4719      changed now.  Instead use an additional `-gLEVEL' option to change
4720      the debug level for DWARF.
4721
4722 `-gtoggle'
4723      Turn off generation of debug info, if leaving out this option
4724      generates it, or turn it on at level 2 otherwise.  The position of
4725      this argument in the command line does not matter; it takes effect
4726      after all other options are processed, and it does so only once,
4727      no matter how many times it is given.  This is mainly intended to
4728      be used with `-fcompare-debug'.
4729
4730 `-fsanitize=address'
4731      Enable AddressSanitizer, a fast memory error detector.  Memory
4732      access instructions will be instrumented to detect out-of-bounds
4733      and use-after-free bugs.  See
4734      `http://code.google.com/p/address-sanitizer/' for more details.
4735
4736 `-fsanitize=thread'
4737      Enable ThreadSanitizer, a fast data race detector.  Memory access
4738      instructions will be instrumented to detect data race bugs.  See
4739      `http://code.google.com/p/data-race-test/wiki/ThreadSanitizer' for
4740      more details.
4741
4742 `-fdump-final-insns[=FILE]'
4743      Dump the final internal representation (RTL) to FILE.  If the
4744      optional argument is omitted (or if FILE is `.'), the name of the
4745      dump file is determined by appending `.gkd' to the compilation
4746      output file name.
4747
4748 `-fcompare-debug[=OPTS]'
4749      If no error occurs during compilation, run the compiler a second
4750      time, adding OPTS and `-fcompare-debug-second' to the arguments
4751      passed to the second compilation.  Dump the final internal
4752      representation in both compilations, and print an error if they
4753      differ.
4754
4755      If the equal sign is omitted, the default `-gtoggle' is used.
4756
4757      The environment variable `GCC_COMPARE_DEBUG', if defined, non-empty
4758      and nonzero, implicitly enables `-fcompare-debug'.  If
4759      `GCC_COMPARE_DEBUG' is defined to a string starting with a dash,
4760      then it is used for OPTS, otherwise the default `-gtoggle' is used.
4761
4762      `-fcompare-debug=', with the equal sign but without OPTS, is
4763      equivalent to `-fno-compare-debug', which disables the dumping of
4764      the final representation and the second compilation, preventing
4765      even `GCC_COMPARE_DEBUG' from taking effect.
4766
4767      To verify full coverage during `-fcompare-debug' testing, set
4768      `GCC_COMPARE_DEBUG' to say `-fcompare-debug-not-overridden', which
4769      GCC rejects as an invalid option in any actual compilation (rather
4770      than preprocessing, assembly or linking).  To get just a warning,
4771      setting `GCC_COMPARE_DEBUG' to `-w%n-fcompare-debug not
4772      overridden' will do.
4773
4774 `-fcompare-debug-second'
4775      This option is implicitly passed to the compiler for the second
4776      compilation requested by `-fcompare-debug', along with options to
4777      silence warnings, and omitting other options that would cause
4778      side-effect compiler outputs to files or to the standard output.
4779      Dump files and preserved temporary files are renamed so as to
4780      contain the `.gk' additional extension during the second
4781      compilation, to avoid overwriting those generated by the first.
4782
4783      When this option is passed to the compiler driver, it causes the
4784      _first_ compilation to be skipped, which makes it useful for little
4785      other than debugging the compiler proper.
4786
4787 `-feliminate-dwarf2-dups'
4788      Compress DWARF 2 debugging information by eliminating duplicated
4789      information about each symbol.  This option only makes sense when
4790      generating DWARF 2 debugging information with `-gdwarf-2'.
4791
4792 `-femit-struct-debug-baseonly'
4793      Emit debug information for struct-like types only when the base
4794      name of the compilation source file matches the base name of file
4795      in which the struct is defined.
4796
4797      This option substantially reduces the size of debugging
4798      information, but at significant potential loss in type information
4799      to the debugger.  See `-femit-struct-debug-reduced' for a less
4800      aggressive option.  See `-femit-struct-debug-detailed' for more
4801      detailed control.
4802
4803      This option works only with DWARF 2.
4804
4805 `-femit-struct-debug-reduced'
4806      Emit debug information for struct-like types only when the base
4807      name of the compilation source file matches the base name of file
4808      in which the type is defined, unless the struct is a template or
4809      defined in a system header.
4810
4811      This option significantly reduces the size of debugging
4812      information, with some potential loss in type information to the
4813      debugger.  See `-femit-struct-debug-baseonly' for a more
4814      aggressive option.  See `-femit-struct-debug-detailed' for more
4815      detailed control.
4816
4817      This option works only with DWARF 2.
4818
4819 `-femit-struct-debug-detailed[=SPEC-LIST]'
4820      Specify the struct-like types for which the compiler generates
4821      debug information.  The intent is to reduce duplicate struct debug
4822      information between different object files within the same program.
4823
4824      This option is a detailed version of `-femit-struct-debug-reduced'
4825      and `-femit-struct-debug-baseonly', which serves for most needs.
4826
4827      A specification has the syntax
4828      [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none')
4829
4830      The optional first word limits the specification to structs that
4831      are used directly (`dir:') or used indirectly (`ind:').  A struct
4832      type is used directly when it is the type of a variable, member.
4833      Indirect uses arise through pointers to structs.  That is, when
4834      use of an incomplete struct is valid, the use is indirect.  An
4835      example is `struct one direct; struct two * indirect;'.
4836
4837      The optional second word limits the specification to ordinary
4838      structs (`ord:') or generic structs (`gen:').  Generic structs are
4839      a bit complicated to explain.  For C++, these are non-explicit
4840      specializations of template classes, or non-template classes
4841      within the above.  Other programming languages have generics, but
4842      `-femit-struct-debug-detailed' does not yet implement them.
4843
4844      The third word specifies the source files for those structs for
4845      which the compiler should emit debug information.  The values
4846      `none' and `any' have the normal meaning.  The value `base' means
4847      that the base of name of the file in which the type declaration
4848      appears must match the base of the name of the main compilation
4849      file.  In practice, this means that when compiling `foo.c', debug
4850      information is generated for types declared in that file and
4851      `foo.h', but not other header files.  The value `sys' means those
4852      types satisfying `base' or declared in system or compiler headers.
4853
4854      You may need to experiment to determine the best settings for your
4855      application.
4856
4857      The default is `-femit-struct-debug-detailed=all'.
4858
4859      This option works only with DWARF 2.
4860
4861 `-fno-merge-debug-strings'
4862      Direct the linker to not merge together strings in the debugging
4863      information that are identical in different object files.  Merging
4864      is not supported by all assemblers or linkers.  Merging decreases
4865      the size of the debug information in the output file at the cost
4866      of increasing link processing time.  Merging is enabled by default.
4867
4868 `-fdebug-prefix-map=OLD=NEW'
4869      When compiling files in directory `OLD', record debugging
4870      information describing them as in `NEW' instead.
4871
4872 `-fno-dwarf2-cfi-asm'
4873      Emit DWARF 2 unwind info as compiler generated `.eh_frame' section
4874      instead of using GAS `.cfi_*' directives.
4875
4876 `-p'
4877      Generate extra code to write profile information suitable for the
4878      analysis program `prof'.  You must use this option when compiling
4879      the source files you want data about, and you must also use it when
4880      linking.
4881
4882 `-pg'
4883      Generate extra code to write profile information suitable for the
4884      analysis program `gprof'.  You must use this option when compiling
4885      the source files you want data about, and you must also use it when
4886      linking.
4887
4888 `-Q'
4889      Makes the compiler print out each function name as it is compiled,
4890      and print some statistics about each pass when it finishes.
4891
4892 `-ftime-report'
4893      Makes the compiler print some statistics about the time consumed
4894      by each pass when it finishes.
4895
4896 `-fmem-report'
4897      Makes the compiler print some statistics about permanent memory
4898      allocation when it finishes.
4899
4900 `-fmem-report-wpa'
4901      Makes the compiler print some statistics about permanent memory
4902      allocation for the WPA phase only.
4903
4904 `-fpre-ipa-mem-report'
4905
4906 `-fpost-ipa-mem-report'
4907      Makes the compiler print some statistics about permanent memory
4908      allocation before or after interprocedural optimization.
4909
4910 `-fprofile-report'
4911      Makes the compiler print some statistics about consistency of the
4912      (estimated) profile and effect of individual passes.
4913
4914 `-fstack-usage'
4915      Makes the compiler output stack usage information for the program,
4916      on a per-function basis.  The filename for the dump is made by
4917      appending `.su' to the AUXNAME.  AUXNAME is generated from the
4918      name of the output file, if explicitly specified and it is not an
4919      executable, otherwise it is the basename of the source file.  An
4920      entry is made up of three fields:
4921
4922         * The name of the function.
4923
4924         * A number of bytes.
4925
4926         * One or more qualifiers: `static', `dynamic', `bounded'.
4927
4928      The qualifier `static' means that the function manipulates the
4929      stack statically: a fixed number of bytes are allocated for the
4930      frame on function entry and released on function exit; no stack
4931      adjustments are otherwise made in the function.  The second field
4932      is this fixed number of bytes.
4933
4934      The qualifier `dynamic' means that the function manipulates the
4935      stack dynamically: in addition to the static allocation described
4936      above, stack adjustments are made in the body of the function, for
4937      example to push/pop arguments around function calls.  If the
4938      qualifier `bounded' is also present, the amount of these
4939      adjustments is bounded at compile time and the second field is an
4940      upper bound of the total amount of stack used by the function.  If
4941      it is not present, the amount of these adjustments is not bounded
4942      at compile time and the second field only represents the bounded
4943      part.
4944
4945 `-fprofile-arcs'
4946      Add code so that program flow "arcs" are instrumented.  During
4947      execution the program records how many times each branch and call
4948      is executed and how many times it is taken or returns.  When the
4949      compiled program exits it saves this data to a file called
4950      `AUXNAME.gcda' for each source file.  The data may be used for
4951      profile-directed optimizations (`-fbranch-probabilities'), or for
4952      test coverage analysis (`-ftest-coverage').  Each object file's
4953      AUXNAME is generated from the name of the output file, if
4954      explicitly specified and it is not the final executable, otherwise
4955      it is the basename of the source file.  In both cases any suffix
4956      is removed (e.g. `foo.gcda' for input file `dir/foo.c', or
4957      `dir/foo.gcda' for output file specified as `-o dir/foo.o').
4958      *Note Cross-profiling::.
4959
4960 `--coverage'
4961      This option is used to compile and link code instrumented for
4962      coverage analysis.  The option is a synonym for `-fprofile-arcs'
4963      `-ftest-coverage' (when compiling) and `-lgcov' (when linking).
4964      See the documentation for those options for more details.
4965
4966         * Compile the source files with `-fprofile-arcs' plus
4967           optimization and code generation options.  For test coverage
4968           analysis, use the additional `-ftest-coverage' option.  You
4969           do not need to profile every source file in a program.
4970
4971         * Link your object files with `-lgcov' or `-fprofile-arcs' (the
4972           latter implies the former).
4973
4974         * Run the program on a representative workload to generate the
4975           arc profile information.  This may be repeated any number of
4976           times.  You can run concurrent instances of your program, and
4977           provided that the file system supports locking, the data
4978           files will be correctly updated.  Also `fork' calls are
4979           detected and correctly handled (double counting will not
4980           happen).
4981
4982         * For profile-directed optimizations, compile the source files
4983           again with the same optimization and code generation options
4984           plus `-fbranch-probabilities' (*note Options that Control
4985           Optimization: Optimize Options.).
4986
4987         * For test coverage analysis, use `gcov' to produce human
4988           readable information from the `.gcno' and `.gcda' files.
4989           Refer to the `gcov' documentation for further information.
4990
4991
4992      With `-fprofile-arcs', for each function of your program GCC
4993      creates a program flow graph, then finds a spanning tree for the
4994      graph.  Only arcs that are not on the spanning tree have to be
4995      instrumented: the compiler adds code to count the number of times
4996      that these arcs are executed.  When an arc is the only exit or
4997      only entrance to a block, the instrumentation code can be added to
4998      the block; otherwise, a new basic block must be created to hold
4999      the instrumentation code.
5000
5001 `-ftest-coverage'
5002      Produce a notes file that the `gcov' code-coverage utility (*note
5003      `gcov'--a Test Coverage Program: Gcov.) can use to show program
5004      coverage.  Each source file's note file is called `AUXNAME.gcno'.
5005      Refer to the `-fprofile-arcs' option above for a description of
5006      AUXNAME and instructions on how to generate test coverage data.
5007      Coverage data matches the source files more closely if you do not
5008      optimize.
5009
5010 `-fdbg-cnt-list'
5011      Print the name and the counter upper bound for all debug counters.
5012
5013 `-fdbg-cnt=COUNTER-VALUE-LIST'
5014      Set the internal debug counter upper bound.  COUNTER-VALUE-LIST is
5015      a comma-separated list of NAME:VALUE pairs which sets the upper
5016      bound of each debug counter NAME to VALUE.  All debug counters
5017      have the initial upper bound of `UINT_MAX'; thus `dbg_cnt()'
5018      returns true always unless the upper bound is set by this option.
5019      For example, with `-fdbg-cnt=dce:10,tail_call:0', `dbg_cnt(dce)'
5020      returns true only for first 10 invocations.
5021
5022 `-fenable-KIND-PASS'
5023 `-fdisable-KIND-PASS=RANGE-LIST'
5024      This is a set of options that are used to explicitly disable/enable
5025      optimization passes.  These options are intended for use for
5026      debugging GCC.  Compiler users should use regular options for
5027      enabling/disabling passes instead.
5028
5029     `-fdisable-ipa-PASS'
5030           Disable IPA pass PASS. PASS is the pass name.  If the same
5031           pass is statically invoked in the compiler multiple times,
5032           the pass name should be appended with a sequential number
5033           starting from 1.
5034
5035     `-fdisable-rtl-PASS'
5036     `-fdisable-rtl-PASS=RANGE-LIST'
5037           Disable RTL pass PASS.  PASS is the pass name.  If the same
5038           pass is statically invoked in the compiler multiple times,
5039           the pass name should be appended with a sequential number
5040           starting from 1.  RANGE-LIST is a comma-separated list of
5041           function ranges or assembler names.  Each range is a number
5042           pair separated by a colon.  The range is inclusive in both
5043           ends.  If the range is trivial, the number pair can be
5044           simplified as a single number.  If the function's call graph
5045           node's UID falls within one of the specified ranges, the PASS
5046           is disabled for that function.  The UID is shown in the
5047           function header of a dump file, and the pass names can be
5048           dumped by using option `-fdump-passes'.
5049
5050     `-fdisable-tree-PASS'
5051     `-fdisable-tree-PASS=RANGE-LIST'
5052           Disable tree pass PASS.  See `-fdisable-rtl' for the
5053           description of option arguments.
5054
5055     `-fenable-ipa-PASS'
5056           Enable IPA pass PASS.  PASS is the pass name.  If the same
5057           pass is statically invoked in the compiler multiple times,
5058           the pass name should be appended with a sequential number
5059           starting from 1.
5060
5061     `-fenable-rtl-PASS'
5062     `-fenable-rtl-PASS=RANGE-LIST'
5063           Enable RTL pass PASS.  See `-fdisable-rtl' for option argument
5064           description and examples.
5065
5066     `-fenable-tree-PASS'
5067     `-fenable-tree-PASS=RANGE-LIST'
5068           Enable tree pass PASS.  See `-fdisable-rtl' for the
5069           description of option arguments.
5070
5071
5072      Here are some examples showing uses of these options.
5073
5074
5075           # disable ccp1 for all functions
5076              -fdisable-tree-ccp1
5077           # disable complete unroll for function whose cgraph node uid is 1
5078              -fenable-tree-cunroll=1
5079           # disable gcse2 for functions at the following ranges [1,1],
5080           # [300,400], and [400,1000]
5081           # disable gcse2 for functions foo and foo2
5082              -fdisable-rtl-gcse2=foo,foo2
5083           # disable early inlining
5084              -fdisable-tree-einline
5085           # disable ipa inlining
5086              -fdisable-ipa-inline
5087           # enable tree full unroll
5088              -fenable-tree-unroll
5089
5090 `-dLETTERS'
5091 `-fdump-rtl-PASS'
5092 `-fdump-rtl-PASS=FILENAME'
5093      Says to make debugging dumps during compilation at times specified
5094      by LETTERS.  This is used for debugging the RTL-based passes of the
5095      compiler.  The file names for most of the dumps are made by
5096      appending a pass number and a word to the DUMPNAME, and the files
5097      are created in the directory of the output file. In case of
5098      `=FILENAME' option, the dump is output on the given file instead
5099      of the pass numbered dump files. Note that the pass number is
5100      computed statically as passes get registered into the pass manager.
5101      Thus the numbering is not related to the dynamic order of
5102      execution of passes.  In particular, a pass installed by a plugin
5103      could have a number over 200 even if it executed quite early.
5104      DUMPNAME is generated from the name of the output file, if
5105      explicitly specified and it is not an executable, otherwise it is
5106      the basename of the source file. These switches may have different
5107      effects when `-E' is used for preprocessing.
5108
5109      Debug dumps can be enabled with a `-fdump-rtl' switch or some `-d'
5110      option LETTERS.  Here are the possible letters for use in PASS and
5111      LETTERS, and their meanings:
5112
5113     `-fdump-rtl-alignments'
5114           Dump after branch alignments have been computed.
5115
5116     `-fdump-rtl-asmcons'
5117           Dump after fixing rtl statements that have unsatisfied in/out
5118           constraints.
5119
5120     `-fdump-rtl-auto_inc_dec'
5121           Dump after auto-inc-dec discovery.  This pass is only run on
5122           architectures that have auto inc or auto dec instructions.
5123
5124     `-fdump-rtl-barriers'
5125           Dump after cleaning up the barrier instructions.
5126
5127     `-fdump-rtl-bbpart'
5128           Dump after partitioning hot and cold basic blocks.
5129
5130     `-fdump-rtl-bbro'
5131           Dump after block reordering.
5132
5133     `-fdump-rtl-btl1'
5134     `-fdump-rtl-btl2'
5135           `-fdump-rtl-btl1' and `-fdump-rtl-btl2' enable dumping after
5136           the two branch target load optimization passes.
5137
5138     `-fdump-rtl-bypass'
5139           Dump after jump bypassing and control flow optimizations.
5140
5141     `-fdump-rtl-combine'
5142           Dump after the RTL instruction combination pass.
5143
5144     `-fdump-rtl-compgotos'
5145           Dump after duplicating the computed gotos.
5146
5147     `-fdump-rtl-ce1'
5148     `-fdump-rtl-ce2'
5149     `-fdump-rtl-ce3'
5150           `-fdump-rtl-ce1', `-fdump-rtl-ce2', and `-fdump-rtl-ce3'
5151           enable dumping after the three if conversion passes.
5152
5153     `-fdump-rtl-cprop_hardreg'
5154           Dump after hard register copy propagation.
5155
5156     `-fdump-rtl-csa'
5157           Dump after combining stack adjustments.
5158
5159     `-fdump-rtl-cse1'
5160     `-fdump-rtl-cse2'
5161           `-fdump-rtl-cse1' and `-fdump-rtl-cse2' enable dumping after
5162           the two common subexpression elimination passes.
5163
5164     `-fdump-rtl-dce'
5165           Dump after the standalone dead code elimination passes.
5166
5167     `-fdump-rtl-dbr'
5168           Dump after delayed branch scheduling.
5169
5170     `-fdump-rtl-dce1'
5171     `-fdump-rtl-dce2'
5172           `-fdump-rtl-dce1' and `-fdump-rtl-dce2' enable dumping after
5173           the two dead store elimination passes.
5174
5175     `-fdump-rtl-eh'
5176           Dump after finalization of EH handling code.
5177
5178     `-fdump-rtl-eh_ranges'
5179           Dump after conversion of EH handling range regions.
5180
5181     `-fdump-rtl-expand'
5182           Dump after RTL generation.
5183
5184     `-fdump-rtl-fwprop1'
5185     `-fdump-rtl-fwprop2'
5186           `-fdump-rtl-fwprop1' and `-fdump-rtl-fwprop2' enable dumping
5187           after the two forward propagation passes.
5188
5189     `-fdump-rtl-gcse1'
5190     `-fdump-rtl-gcse2'
5191           `-fdump-rtl-gcse1' and `-fdump-rtl-gcse2' enable dumping
5192           after global common subexpression elimination.
5193
5194     `-fdump-rtl-init-regs'
5195           Dump after the initialization of the registers.
5196
5197     `-fdump-rtl-initvals'
5198           Dump after the computation of the initial value sets.
5199
5200     `-fdump-rtl-into_cfglayout'
5201           Dump after converting to cfglayout mode.
5202
5203     `-fdump-rtl-ira'
5204           Dump after iterated register allocation.
5205
5206     `-fdump-rtl-jump'
5207           Dump after the second jump optimization.
5208
5209     `-fdump-rtl-loop2'
5210           `-fdump-rtl-loop2' enables dumping after the rtl loop
5211           optimization passes.
5212
5213     `-fdump-rtl-mach'
5214           Dump after performing the machine dependent reorganization
5215           pass, if that pass exists.
5216
5217     `-fdump-rtl-mode_sw'
5218           Dump after removing redundant mode switches.
5219
5220     `-fdump-rtl-rnreg'
5221           Dump after register renumbering.
5222
5223     `-fdump-rtl-outof_cfglayout'
5224           Dump after converting from cfglayout mode.
5225
5226     `-fdump-rtl-peephole2'
5227           Dump after the peephole pass.
5228
5229     `-fdump-rtl-postreload'
5230           Dump after post-reload optimizations.
5231
5232     `-fdump-rtl-pro_and_epilogue'
5233           Dump after generating the function prologues and epilogues.
5234
5235     `-fdump-rtl-regmove'
5236           Dump after the register move pass.
5237
5238     `-fdump-rtl-sched1'
5239     `-fdump-rtl-sched2'
5240           `-fdump-rtl-sched1' and `-fdump-rtl-sched2' enable dumping
5241           after the basic block scheduling passes.
5242
5243     `-fdump-rtl-see'
5244           Dump after sign extension elimination.
5245
5246     `-fdump-rtl-seqabstr'
5247           Dump after common sequence discovery.
5248
5249     `-fdump-rtl-shorten'
5250           Dump after shortening branches.
5251
5252     `-fdump-rtl-sibling'
5253           Dump after sibling call optimizations.
5254
5255     `-fdump-rtl-split1'
5256     `-fdump-rtl-split2'
5257     `-fdump-rtl-split3'
5258     `-fdump-rtl-split4'
5259     `-fdump-rtl-split5'
5260           `-fdump-rtl-split1', `-fdump-rtl-split2',
5261           `-fdump-rtl-split3', `-fdump-rtl-split4' and
5262           `-fdump-rtl-split5' enable dumping after five rounds of
5263           instruction splitting.
5264
5265     `-fdump-rtl-sms'
5266           Dump after modulo scheduling.  This pass is only run on some
5267           architectures.
5268
5269     `-fdump-rtl-stack'
5270           Dump after conversion from GCC's "flat register file"
5271           registers to the x87's stack-like registers.  This pass is
5272           only run on x86 variants.
5273
5274     `-fdump-rtl-subreg1'
5275     `-fdump-rtl-subreg2'
5276           `-fdump-rtl-subreg1' and `-fdump-rtl-subreg2' enable dumping
5277           after the two subreg expansion passes.
5278
5279     `-fdump-rtl-unshare'
5280           Dump after all rtl has been unshared.
5281
5282     `-fdump-rtl-vartrack'
5283           Dump after variable tracking.
5284
5285     `-fdump-rtl-vregs'
5286           Dump after converting virtual registers to hard registers.
5287
5288     `-fdump-rtl-web'
5289           Dump after live range splitting.
5290
5291     `-fdump-rtl-regclass'
5292     `-fdump-rtl-subregs_of_mode_init'
5293     `-fdump-rtl-subregs_of_mode_finish'
5294     `-fdump-rtl-dfinit'
5295     `-fdump-rtl-dfinish'
5296           These dumps are defined but always produce empty files.
5297
5298     `-da'
5299     `-fdump-rtl-all'
5300           Produce all the dumps listed above.
5301
5302     `-dA'
5303           Annotate the assembler output with miscellaneous debugging
5304           information.
5305
5306     `-dD'
5307           Dump all macro definitions, at the end of preprocessing, in
5308           addition to normal output.
5309
5310     `-dH'
5311           Produce a core dump whenever an error occurs.
5312
5313     `-dp'
5314           Annotate the assembler output with a comment indicating which
5315           pattern and alternative is used.  The length of each
5316           instruction is also printed.
5317
5318     `-dP'
5319           Dump the RTL in the assembler output as a comment before each
5320           instruction.  Also turns on `-dp' annotation.
5321
5322     `-dx'
5323           Just generate RTL for a function instead of compiling it.
5324           Usually used with `-fdump-rtl-expand'.
5325
5326 `-fdump-noaddr'
5327      When doing debugging dumps, suppress address output.  This makes
5328      it more feasible to use diff on debugging dumps for compiler
5329      invocations with different compiler binaries and/or different text
5330      / bss / data / heap / stack / dso start locations.
5331
5332 `-fdump-unnumbered'
5333      When doing debugging dumps, suppress instruction numbers and
5334      address output.  This makes it more feasible to use diff on
5335      debugging dumps for compiler invocations with different options,
5336      in particular with and without `-g'.
5337
5338 `-fdump-unnumbered-links'
5339      When doing debugging dumps (see `-d' option above), suppress
5340      instruction numbers for the links to the previous and next
5341      instructions in a sequence.
5342
5343 `-fdump-translation-unit (C++ only)'
5344 `-fdump-translation-unit-OPTIONS (C++ only)'
5345      Dump a representation of the tree structure for the entire
5346      translation unit to a file.  The file name is made by appending
5347      `.tu' to the source file name, and the file is created in the same
5348      directory as the output file.  If the `-OPTIONS' form is used,
5349      OPTIONS controls the details of the dump as described for the
5350      `-fdump-tree' options.
5351
5352 `-fdump-class-hierarchy (C++ only)'
5353 `-fdump-class-hierarchy-OPTIONS (C++ only)'
5354      Dump a representation of each class's hierarchy and virtual
5355      function table layout to a file.  The file name is made by
5356      appending `.class' to the source file name, and the file is
5357      created in the same directory as the output file.  If the
5358      `-OPTIONS' form is used, OPTIONS controls the details of the dump
5359      as described for the `-fdump-tree' options.
5360
5361 `-fdump-ipa-SWITCH'
5362      Control the dumping at various stages of inter-procedural analysis
5363      language tree to a file.  The file name is generated by appending a
5364      switch specific suffix to the source file name, and the file is
5365      created in the same directory as the output file.  The following
5366      dumps are possible:
5367
5368     `all'
5369           Enables all inter-procedural analysis dumps.
5370
5371     `cgraph'
5372           Dumps information about call-graph optimization, unused
5373           function removal, and inlining decisions.
5374
5375     `inline'
5376           Dump after function inlining.
5377
5378
5379 `-fdump-passes'
5380      Dump the list of optimization passes that are turned on and off by
5381      the current command-line options.
5382
5383 `-fdump-statistics-OPTION'
5384      Enable and control dumping of pass statistics in a separate file.
5385      The file name is generated by appending a suffix ending in
5386      `.statistics' to the source file name, and the file is created in
5387      the same directory as the output file.  If the `-OPTION' form is
5388      used, `-stats' causes counters to be summed over the whole
5389      compilation unit while `-details' dumps every event as the passes
5390      generate them.  The default with no option is to sum counters for
5391      each function compiled.
5392
5393 `-fdump-tree-SWITCH'
5394 `-fdump-tree-SWITCH-OPTIONS'
5395 `-fdump-tree-SWITCH-OPTIONS=FILENAME'
5396      Control the dumping at various stages of processing the
5397      intermediate language tree to a file.  The file name is generated
5398      by appending a switch-specific suffix to the source file name, and
5399      the file is created in the same directory as the output file. In
5400      case of `=FILENAME' option, the dump is output on the given file
5401      instead of the auto named dump files.  If the `-OPTIONS' form is
5402      used, OPTIONS is a list of `-' separated options which control the
5403      details of the dump.  Not all options are applicable to all dumps;
5404      those that are not meaningful are ignored.  The following options
5405      are available
5406
5407     `address'
5408           Print the address of each node.  Usually this is not
5409           meaningful as it changes according to the environment and
5410           source file.  Its primary use is for tying up a dump file
5411           with a debug environment.
5412
5413     `asmname'
5414           If `DECL_ASSEMBLER_NAME' has been set for a given decl, use
5415           that in the dump instead of `DECL_NAME'.  Its primary use is
5416           ease of use working backward from mangled names in the
5417           assembly file.
5418
5419     `slim'
5420           When dumping front-end intermediate representations, inhibit
5421           dumping of members of a scope or body of a function merely
5422           because that scope has been reached.  Only dump such items
5423           when they are directly reachable by some other path.
5424
5425           When dumping pretty-printed trees, this option inhibits
5426           dumping the bodies of control structures.
5427
5428           When dumping RTL, print the RTL in slim (condensed) form
5429           instead of the default LISP-like representation.
5430
5431     `raw'
5432           Print a raw representation of the tree.  By default, trees are
5433           pretty-printed into a C-like representation.
5434
5435     `details'
5436           Enable more detailed dumps (not honored by every dump
5437           option). Also include information from the optimization
5438           passes.
5439
5440     `stats'
5441           Enable dumping various statistics about the pass (not honored
5442           by every dump option).
5443
5444     `blocks'
5445           Enable showing basic block boundaries (disabled in raw dumps).
5446
5447     `graph'
5448           For each of the other indicated dump files
5449           (`-fdump-rtl-PASS'), dump a representation of the control
5450           flow graph suitable for viewing with GraphViz to
5451           `FILE.PASSID.PASS.dot'.  Each function in the file is
5452           pretty-printed as a subgraph, so that GraphViz can render them
5453           all in a single plot.
5454
5455           This option currently only works for RTL dumps, and the RTL
5456           is always dumped in slim form.
5457
5458     `vops'
5459           Enable showing virtual operands for every statement.
5460
5461     `lineno'
5462           Enable showing line numbers for statements.
5463
5464     `uid'
5465           Enable showing the unique ID (`DECL_UID') for each variable.
5466
5467     `verbose'
5468           Enable showing the tree dump for each statement.
5469
5470     `eh'
5471           Enable showing the EH region number holding each statement.
5472
5473     `scev'
5474           Enable showing scalar evolution analysis details.
5475
5476     `optimized'
5477           Enable showing optimization information (only available in
5478           certain passes).
5479
5480     `missed'
5481           Enable showing missed optimization information (only
5482           available in certain passes).
5483
5484     `notes'
5485           Enable other detailed optimization information (only
5486           available in certain passes).
5487
5488     `=FILENAME'
5489           Instead of an auto named dump file, output into the given file
5490           name. The file names `stdout' and `stderr' are treated
5491           specially and are considered already open standard streams.
5492           For example,
5493
5494                gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
5495                     -fdump-tree-pre=stderr file.c
5496
5497           outputs vectorizer dump into `foo.dump', while the PRE dump is
5498           output on to `stderr'. If two conflicting dump filenames are
5499           given for the same pass, then the latter option overrides the
5500           earlier one.
5501
5502     `all'
5503           Turn on all options, except `raw', `slim', `verbose' and
5504           `lineno'.
5505
5506     `optall'
5507           Turn on all optimization options, i.e., `optimized',
5508           `missed', and `note'.
5509
5510      The following tree dumps are possible:
5511     `original'
5512           Dump before any tree based optimization, to `FILE.original'.
5513
5514     `optimized'
5515           Dump after all tree based optimization, to `FILE.optimized'.
5516
5517     `gimple'
5518           Dump each function before and after the gimplification pass
5519           to a file.  The file name is made by appending `.gimple' to
5520           the source file name.
5521
5522     `cfg'
5523           Dump the control flow graph of each function to a file.  The
5524           file name is made by appending `.cfg' to the source file name.
5525
5526     `ch'
5527           Dump each function after copying loop headers.  The file name
5528           is made by appending `.ch' to the source file name.
5529
5530     `ssa'
5531           Dump SSA related information to a file.  The file name is
5532           made by appending `.ssa' to the source file name.
5533
5534     `alias'
5535           Dump aliasing information for each function.  The file name
5536           is made by appending `.alias' to the source file name.
5537
5538     `ccp'
5539           Dump each function after CCP.  The file name is made by
5540           appending `.ccp' to the source file name.
5541
5542     `storeccp'
5543           Dump each function after STORE-CCP.  The file name is made by
5544           appending `.storeccp' to the source file name.
5545
5546     `pre'
5547           Dump trees after partial redundancy elimination.  The file
5548           name is made by appending `.pre' to the source file name.
5549
5550     `fre'
5551           Dump trees after full redundancy elimination.  The file name
5552           is made by appending `.fre' to the source file name.
5553
5554     `copyprop'
5555           Dump trees after copy propagation.  The file name is made by
5556           appending `.copyprop' to the source file name.
5557
5558     `store_copyprop'
5559           Dump trees after store copy-propagation.  The file name is
5560           made by appending `.store_copyprop' to the source file name.
5561
5562     `dce'
5563           Dump each function after dead code elimination.  The file
5564           name is made by appending `.dce' to the source file name.
5565
5566     `mudflap'
5567           Dump each function after adding mudflap instrumentation.  The
5568           file name is made by appending `.mudflap' to the source file
5569           name.
5570
5571     `sra'
5572           Dump each function after performing scalar replacement of
5573           aggregates.  The file name is made by appending `.sra' to the
5574           source file name.
5575
5576     `sink'
5577           Dump each function after performing code sinking.  The file
5578           name is made by appending `.sink' to the source file name.
5579
5580     `dom'
5581           Dump each function after applying dominator tree
5582           optimizations.  The file name is made by appending `.dom' to
5583           the source file name.
5584
5585     `dse'
5586           Dump each function after applying dead store elimination.
5587           The file name is made by appending `.dse' to the source file
5588           name.
5589
5590     `phiopt'
5591           Dump each function after optimizing PHI nodes into
5592           straightline code.  The file name is made by appending
5593           `.phiopt' to the source file name.
5594
5595     `forwprop'
5596           Dump each function after forward propagating single use
5597           variables.  The file name is made by appending `.forwprop' to
5598           the source file name.
5599
5600     `copyrename'
5601           Dump each function after applying the copy rename
5602           optimization.  The file name is made by appending
5603           `.copyrename' to the source file name.
5604
5605     `nrv'
5606           Dump each function after applying the named return value
5607           optimization on generic trees.  The file name is made by
5608           appending `.nrv' to the source file name.
5609
5610     `vect'
5611           Dump each function after applying vectorization of loops.
5612           The file name is made by appending `.vect' to the source file
5613           name.
5614
5615     `slp'
5616           Dump each function after applying vectorization of basic
5617           blocks.  The file name is made by appending `.slp' to the
5618           source file name.
5619
5620     `vrp'
5621           Dump each function after Value Range Propagation (VRP).  The
5622           file name is made by appending `.vrp' to the source file name.
5623
5624     `all'
5625           Enable all the available tree dumps with the flags provided
5626           in this option.
5627
5628 `-fopt-info'
5629 `-fopt-info-OPTIONS'
5630 `-fopt-info-OPTIONS=FILENAME'
5631      Controls optimization dumps from various optimization passes. If
5632      the `-OPTIONS' form is used, OPTIONS is a list of `-' separated
5633      options to select the dump details and optimizations.  If OPTIONS
5634      is not specified, it defaults to `all' for details and `optall'
5635      for optimization groups. If the FILENAME is not specified, it
5636      defaults to `stderr'. Note that the output FILENAME will be
5637      overwritten in case of multiple translation units. If a combined
5638      output from multiple translation units is desired, `stderr' should
5639      be used instead.
5640
5641      The options can be divided into two groups, 1) options describing
5642      the verbosity of the dump, and 2) options describing which
5643      optimizations should be included. The options from both the groups
5644      can be freely mixed as they are non-overlapping. However, in case
5645      of any conflicts, the latter options override the earlier options
5646      on the command line. Though multiple -fopt-info options are
5647      accepted, only one of them can have `=filename'. If other
5648      filenames are provided then all but the first one are ignored.
5649
5650      The dump verbosity has the following options
5651
5652     `optimized'
5653           Print information when an optimization is successfully
5654           applied. It is up to a pass to decide which information is
5655           relevant. For example, the vectorizer passes print the source
5656           location of loops which got successfully vectorized.
5657
5658     `missed'
5659           Print information about missed optimizations. Individual
5660           passes control which information to include in the output.
5661           For example,
5662
5663                gcc -O2 -ftree-vectorize -fopt-info-vec-missed
5664
5665           will print information about missed optimization
5666           opportunities from vectorization passes on stderr.
5667
5668     `note'
5669           Print verbose information about optimizations, such as certain
5670           transformations, more detailed messages about decisions etc.
5671
5672     `all'
5673           Print detailed optimization information. This includes
5674           OPTIMIZED, MISSED, and NOTE.
5675
5676      The second set of options describes a group of optimizations and
5677      may include one or more of the following.
5678
5679     `ipa'
5680           Enable dumps from all interprocedural optimizations.
5681
5682     `loop'
5683           Enable dumps from all loop optimizations.
5684
5685     `inline'
5686           Enable dumps from all inlining optimizations.
5687
5688     `vec'
5689           Enable dumps from all vectorization optimizations.
5690
5691      For example,
5692           gcc -O3 -fopt-info-missed=missed.all
5693
5694      outputs missed optimization report from all the passes into
5695      `missed.all'.
5696
5697      As another example,
5698           gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
5699
5700      will output information about missed optimizations as well as
5701      optimized locations from all the inlining passes into `inline.txt'.
5702
5703      If the FILENAME is provided, then the dumps from all the
5704      applicable optimizations are concatenated into the `filename'.
5705      Otherwise the dump is output onto `stderr'. If OPTIONS is omitted,
5706      it defaults to `all-optall', which means dump all available
5707      optimization info from all the passes. In the following example,
5708      all optimization info is output on to `stderr'.
5709
5710           gcc -O3 -fopt-info
5711
5712      Note that `-fopt-info-vec-missed' behaves the same as
5713      `-fopt-info-missed-vec'.
5714
5715      As another example, consider
5716
5717           gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
5718
5719      Here the two output filenames `vec.miss' and `loop.opt' are in
5720      conflict since only one output file is allowed. In this case, only
5721      the first option takes effect and the subsequent options are
5722      ignored. Thus only the `vec.miss' is produced which cotaints dumps
5723      from the vectorizer about missed opportunities.
5724
5725 `-ftree-vectorizer-verbose=N'
5726      This option is deprecated and is implemented in terms of
5727      `-fopt-info'. Please use `-fopt-info-KIND' form instead, where
5728      KIND is one of the valid opt-info options. It prints additional
5729      optimization information.  For N=0 no diagnostic information is
5730      reported.  If N=1 the vectorizer reports each loop that got
5731      vectorized, and the total number of loops that got vectorized.  If
5732      N=2 the vectorizer reports locations which could not be vectorized
5733      and the reasons for those. For any higher verbosity levels all the
5734      analysis and transformation information from the vectorizer is
5735      reported.
5736
5737      Note that the information output by `-ftree-vectorizer-verbose'
5738      option is sent to `stderr'. If the equivalent form
5739      `-fopt-info-OPTIONS=FILENAME' is used then the output is sent into
5740      FILENAME instead.
5741
5742 `-frandom-seed=STRING'
5743      This option provides a seed that GCC uses in place of random
5744      numbers in generating certain symbol names that have to be
5745      different in every compiled file.  It is also used to place unique
5746      stamps in coverage data files and the object files that produce
5747      them.  You can use the `-frandom-seed' option to produce
5748      reproducibly identical object files.
5749
5750      The STRING should be different for every file you compile.
5751
5752 `-fsched-verbose=N'
5753      On targets that use instruction scheduling, this option controls
5754      the amount of debugging output the scheduler prints.  This
5755      information is written to standard error, unless
5756      `-fdump-rtl-sched1' or `-fdump-rtl-sched2' is specified, in which
5757      case it is output to the usual dump listing file, `.sched1' or
5758      `.sched2' respectively.  However for N greater than nine, the
5759      output is always printed to standard error.
5760
5761      For N greater than zero, `-fsched-verbose' outputs the same
5762      information as `-fdump-rtl-sched1' and `-fdump-rtl-sched2'.  For N
5763      greater than one, it also output basic block probabilities,
5764      detailed ready list information and unit/insn info.  For N greater
5765      than two, it includes RTL at abort point, control-flow and regions
5766      info.  And for N over four, `-fsched-verbose' also includes
5767      dependence info.
5768
5769 `-save-temps'
5770 `-save-temps=cwd'
5771      Store the usual "temporary" intermediate files permanently; place
5772      them in the current directory and name them based on the source
5773      file.  Thus, compiling `foo.c' with `-c -save-temps' produces files
5774      `foo.i' and `foo.s', as well as `foo.o'.  This creates a
5775      preprocessed `foo.i' output file even though the compiler now
5776      normally uses an integrated preprocessor.
5777
5778      When used in combination with the `-x' command-line option,
5779      `-save-temps' is sensible enough to avoid over writing an input
5780      source file with the same extension as an intermediate file.  The
5781      corresponding intermediate file may be obtained by renaming the
5782      source file before using `-save-temps'.
5783
5784      If you invoke GCC in parallel, compiling several different source
5785      files that share a common base name in different subdirectories or
5786      the same source file compiled for multiple output destinations, it
5787      is likely that the different parallel compilers will interfere
5788      with each other, and overwrite the temporary files.  For instance:
5789
5790           gcc -save-temps -o outdir1/foo.o indir1/foo.c&
5791           gcc -save-temps -o outdir2/foo.o indir2/foo.c&
5792
5793      may result in `foo.i' and `foo.o' being written to simultaneously
5794      by both compilers.
5795
5796 `-save-temps=obj'
5797      Store the usual "temporary" intermediate files permanently.  If the
5798      `-o' option is used, the temporary files are based on the object
5799      file.  If the `-o' option is not used, the `-save-temps=obj'
5800      switch behaves like `-save-temps'.
5801
5802      For example:
5803
5804           gcc -save-temps=obj -c foo.c
5805           gcc -save-temps=obj -c bar.c -o dir/xbar.o
5806           gcc -save-temps=obj foobar.c -o dir2/yfoobar
5807
5808      creates `foo.i', `foo.s', `dir/xbar.i', `dir/xbar.s',
5809      `dir2/yfoobar.i', `dir2/yfoobar.s', and `dir2/yfoobar.o'.
5810
5811 `-time[=FILE]'
5812      Report the CPU time taken by each subprocess in the compilation
5813      sequence.  For C source files, this is the compiler proper and
5814      assembler (plus the linker if linking is done).
5815
5816      Without the specification of an output file, the output looks like
5817      this:
5818
5819           # cc1 0.12 0.01
5820           # as 0.00 0.01
5821
5822      The first number on each line is the "user time", that is time
5823      spent executing the program itself.  The second number is "system
5824      time", time spent executing operating system routines on behalf of
5825      the program.  Both numbers are in seconds.
5826
5827      With the specification of an output file, the output is appended
5828      to the named file, and it looks like this:
5829
5830           0.12 0.01 cc1 OPTIONS
5831           0.00 0.01 as OPTIONS
5832
5833      The "user time" and the "system time" are moved before the program
5834      name, and the options passed to the program are displayed, so that
5835      one can later tell what file was being compiled, and with which
5836      options.
5837
5838 `-fvar-tracking'
5839      Run variable tracking pass.  It computes where variables are
5840      stored at each position in code.  Better debugging information is
5841      then generated (if the debugging information format supports this
5842      information).
5843
5844      It is enabled by default when compiling with optimization (`-Os',
5845      `-O', `-O2', ...), debugging information (`-g') and the debug info
5846      format supports it.
5847
5848 `-fvar-tracking-assignments'
5849      Annotate assignments to user variables early in the compilation and
5850      attempt to carry the annotations over throughout the compilation
5851      all the way to the end, in an attempt to improve debug information
5852      while optimizing.  Use of `-gdwarf-4' is recommended along with it.
5853
5854      It can be enabled even if var-tracking is disabled, in which case
5855      annotations are created and maintained, but discarded at the end.
5856
5857 `-fvar-tracking-assignments-toggle'
5858      Toggle `-fvar-tracking-assignments', in the same way that
5859      `-gtoggle' toggles `-g'.
5860
5861 `-print-file-name=LIBRARY'
5862      Print the full absolute name of the library file LIBRARY that
5863      would be used when linking--and don't do anything else.  With this
5864      option, GCC does not compile or link anything; it just prints the
5865      file name.
5866
5867 `-print-multi-directory'
5868      Print the directory name corresponding to the multilib selected by
5869      any other switches present in the command line.  This directory is
5870      supposed to exist in `GCC_EXEC_PREFIX'.
5871
5872 `-print-multi-lib'
5873      Print the mapping from multilib directory names to compiler
5874      switches that enable them.  The directory name is separated from
5875      the switches by `;', and each switch starts with an `@' instead of
5876      the `-', without spaces between multiple switches.  This is
5877      supposed to ease shell processing.
5878
5879 `-print-multi-os-directory'
5880      Print the path to OS libraries for the selected multilib, relative
5881      to some `lib' subdirectory.  If OS libraries are present in the
5882      `lib' subdirectory and no multilibs are used, this is usually just
5883      `.', if OS libraries are present in `libSUFFIX' sibling
5884      directories this prints e.g. `../lib64', `../lib' or `../lib32',
5885      or if OS libraries are present in `lib/SUBDIR' subdirectories it
5886      prints e.g. `amd64', `sparcv9' or `ev6'.
5887
5888 `-print-multiarch'
5889      Print the path to OS libraries for the selected multiarch,
5890      relative to some `lib' subdirectory.
5891
5892 `-print-prog-name=PROGRAM'
5893      Like `-print-file-name', but searches for a program such as `cpp'.
5894
5895 `-print-libgcc-file-name'
5896      Same as `-print-file-name=libgcc.a'.
5897
5898      This is useful when you use `-nostdlib' or `-nodefaultlibs' but
5899      you do want to link with `libgcc.a'.  You can do:
5900
5901           gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
5902
5903 `-print-search-dirs'
5904      Print the name of the configured installation directory and a list
5905      of program and library directories `gcc' searches--and don't do
5906      anything else.
5907
5908      This is useful when `gcc' prints the error message `installation
5909      problem, cannot exec cpp0: No such file or directory'.  To resolve
5910      this you either need to put `cpp0' and the other compiler
5911      components where `gcc' expects to find them, or you can set the
5912      environment variable `GCC_EXEC_PREFIX' to the directory where you
5913      installed them.  Don't forget the trailing `/'.  *Note Environment
5914      Variables::.
5915
5916 `-print-sysroot'
5917      Print the target sysroot directory that is used during
5918      compilation.  This is the target sysroot specified either at
5919      configure time or using the `--sysroot' option, possibly with an
5920      extra suffix that depends on compilation options.  If no target
5921      sysroot is specified, the option prints nothing.
5922
5923 `-print-sysroot-headers-suffix'
5924      Print the suffix added to the target sysroot when searching for
5925      headers, or give an error if the compiler is not configured with
5926      such a suffix--and don't do anything else.
5927
5928 `-dumpmachine'
5929      Print the compiler's target machine (for example,
5930      `i686-pc-linux-gnu')--and don't do anything else.
5931
5932 `-dumpversion'
5933      Print the compiler version (for example, `3.0')--and don't do
5934      anything else.
5935
5936 `-dumpspecs'
5937      Print the compiler's built-in specs--and don't do anything else.
5938      (This is used when GCC itself is being built.)  *Note Spec Files::.
5939
5940 `-fno-eliminate-unused-debug-types'
5941      Normally, when producing DWARF 2 output, GCC avoids producing
5942      debug symbol output for types that are nowhere used in the source
5943      file being compiled.  Sometimes it is useful to have GCC emit
5944      debugging information for all types declared in a compilation
5945      unit, regardless of whether or not they are actually used in that
5946      compilation unit, for example if, in the debugger, you want to
5947      cast a value to a type that is not actually used in your program
5948      (but is declared).  More often, however, this results in a
5949      significant amount of wasted space.
5950
5951 \1f
5952 File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC
5953
5954 3.10 Options That Control Optimization
5955 ======================================
5956
5957 These options control various sorts of optimizations.
5958
5959  Without any optimization option, the compiler's goal is to reduce the
5960 cost of compilation and to make debugging produce the expected results.
5961 Statements are independent: if you stop the program with a breakpoint
5962 between statements, you can then assign a new value to any variable or
5963 change the program counter to any other statement in the function and
5964 get exactly the results you expect from the source code.
5965
5966  Turning on optimization flags makes the compiler attempt to improve
5967 the performance and/or code size at the expense of compilation time and
5968 possibly the ability to debug the program.
5969
5970  The compiler performs optimization based on the knowledge it has of the
5971 program.  Compiling multiple files at once to a single output file mode
5972 allows the compiler to use information gained from all of the files
5973 when compiling each of them.
5974
5975  Not all optimizations are controlled directly by a flag.  Only
5976 optimizations that have a flag are listed in this section.
5977
5978  Most optimizations are only enabled if an `-O' level is set on the
5979 command line.  Otherwise they are disabled, even if individual
5980 optimization flags are specified.
5981
5982  Depending on the target and how GCC was configured, a slightly
5983 different set of optimizations may be enabled at each `-O' level than
5984 those listed here.  You can invoke GCC with `-Q --help=optimizers' to
5985 find out the exact set of optimizations that are enabled at each level.
5986 *Note Overall Options::, for examples.
5987
5988 `-O'
5989 `-O1'
5990      Optimize.  Optimizing compilation takes somewhat more time, and a
5991      lot more memory for a large function.
5992
5993      With `-O', the compiler tries to reduce code size and execution
5994      time, without performing any optimizations that take a great deal
5995      of compilation time.
5996
5997      `-O' turns on the following optimization flags:
5998           -fauto-inc-dec
5999           -fcompare-elim
6000           -fcprop-registers
6001           -fdce
6002           -fdefer-pop
6003           -fdelayed-branch
6004           -fdse
6005           -fguess-branch-probability
6006           -fif-conversion2
6007           -fif-conversion
6008           -fipa-pure-const
6009           -fipa-profile
6010           -fipa-reference
6011           -fmerge-constants
6012           -fsplit-wide-types
6013           -ftree-bit-ccp
6014           -ftree-builtin-call-dce
6015           -ftree-ccp
6016           -ftree-ch
6017           -ftree-copyrename
6018           -ftree-dce
6019           -ftree-dominator-opts
6020           -ftree-dse
6021           -ftree-forwprop
6022           -ftree-fre
6023           -ftree-phiprop
6024           -ftree-slsr
6025           -ftree-sra
6026           -ftree-pta
6027           -ftree-ter
6028           -funit-at-a-time
6029
6030      `-O' also turns on `-fomit-frame-pointer' on machines where doing
6031      so does not interfere with debugging.
6032
6033 `-O2'
6034      Optimize even more.  GCC performs nearly all supported
6035      optimizations that do not involve a space-speed tradeoff.  As
6036      compared to `-O', this option increases both compilation time and
6037      the performance of the generated code.
6038
6039      `-O2' turns on all optimization flags specified by `-O'.  It also
6040      turns on the following optimization flags:
6041           -fthread-jumps
6042           -falign-functions  -falign-jumps
6043           -falign-loops  -falign-labels
6044           -fcaller-saves
6045           -fcrossjumping
6046           -fcse-follow-jumps  -fcse-skip-blocks
6047           -fdelete-null-pointer-checks
6048           -fdevirtualize
6049           -fexpensive-optimizations
6050           -fgcse  -fgcse-lm
6051           -fhoist-adjacent-loads
6052           -finline-small-functions
6053           -findirect-inlining
6054           -fipa-sra
6055           -foptimize-sibling-calls
6056           -fpartial-inlining
6057           -fpeephole2
6058           -fregmove
6059           -freorder-blocks  -freorder-functions
6060           -frerun-cse-after-loop
6061           -fsched-interblock  -fsched-spec
6062           -fschedule-insns  -fschedule-insns2
6063           -fstrict-aliasing -fstrict-overflow
6064           -ftree-switch-conversion -ftree-tail-merge
6065           -ftree-pre
6066           -ftree-vrp
6067
6068      Please note the warning under `-fgcse' about invoking `-O2' on
6069      programs that use computed gotos.
6070
6071 `-O3'
6072      Optimize yet more.  `-O3' turns on all optimizations specified by
6073      `-O2' and also turns on the `-finline-functions',
6074      `-funswitch-loops', `-fpredictive-commoning',
6075      `-fgcse-after-reload', `-ftree-vectorize', `-fvect-cost-model',
6076      `-ftree-partial-pre' and `-fipa-cp-clone' options.
6077
6078 `-O0'
6079      Reduce compilation time and make debugging produce the expected
6080      results.  This is the default.
6081
6082 `-Os'
6083      Optimize for size.  `-Os' enables all `-O2' optimizations that do
6084      not typically increase code size.  It also performs further
6085      optimizations designed to reduce code size.
6086
6087      `-Os' disables the following optimization flags:
6088           -falign-functions  -falign-jumps  -falign-loops
6089           -falign-labels  -freorder-blocks  -freorder-blocks-and-partition
6090           -fprefetch-loop-arrays  -ftree-vect-loop-version
6091
6092 `-Ofast'
6093      Disregard strict standards compliance.  `-Ofast' enables all `-O3'
6094      optimizations.  It also enables optimizations that are not valid
6095      for all standard-compliant programs.  It turns on `-ffast-math'
6096      and the Fortran-specific `-fno-protect-parens' and
6097      `-fstack-arrays'.
6098
6099 `-Og'
6100      Optimize debugging experience.  `-Og' enables optimizations that
6101      do not interfere with debugging. It should be the optimization
6102      level of choice for the standard edit-compile-debug cycle, offering
6103      a reasonable level of optimization while maintaining fast
6104      compilation and a good debugging experience.
6105
6106      If you use multiple `-O' options, with or without level numbers,
6107      the last such option is the one that is effective.
6108
6109  Options of the form `-fFLAG' specify machine-independent flags.  Most
6110 flags have both positive and negative forms; the negative form of
6111 `-ffoo' is `-fno-foo'.  In the table below, only one of the forms is
6112 listed--the one you typically use.  You can figure out the other form
6113 by either removing `no-' or adding it.
6114
6115  The following options control specific optimizations.  They are either
6116 activated by `-O' options or are related to ones that are.  You can use
6117 the following flags in the rare cases when "fine-tuning" of
6118 optimizations to be performed is desired.
6119
6120 `-fno-default-inline'
6121      Do not make member functions inline by default merely because they
6122      are defined inside the class scope (C++ only).  Otherwise, when
6123      you specify `-O', member functions defined inside class scope are
6124      compiled inline by default; i.e., you don't need to add `inline'
6125      in front of the member function name.
6126
6127 `-fno-defer-pop'
6128      Always pop the arguments to each function call as soon as that
6129      function returns.  For machines that must pop arguments after a
6130      function call, the compiler normally lets arguments accumulate on
6131      the stack for several function calls and pops them all at once.
6132
6133      Disabled at levels `-O', `-O2', `-O3', `-Os'.
6134
6135 `-fforward-propagate'
6136      Perform a forward propagation pass on RTL.  The pass tries to
6137      combine two instructions and checks if the result can be
6138      simplified.  If loop unrolling is active, two passes are performed
6139      and the second is scheduled after loop unrolling.
6140
6141      This option is enabled by default at optimization levels `-O',
6142      `-O2', `-O3', `-Os'.
6143
6144 `-ffp-contract=STYLE'
6145      `-ffp-contract=off' disables floating-point expression contraction.
6146      `-ffp-contract=fast' enables floating-point expression contraction
6147      such as forming of fused multiply-add operations if the target has
6148      native support for them.  `-ffp-contract=on' enables
6149      floating-point expression contraction if allowed by the language
6150      standard.  This is currently not implemented and treated equal to
6151      `-ffp-contract=off'.
6152
6153      The default is `-ffp-contract=fast'.
6154
6155 `-fomit-frame-pointer'
6156      Don't keep the frame pointer in a register for functions that
6157      don't need one.  This avoids the instructions to save, set up and
6158      restore frame pointers; it also makes an extra register available
6159      in many functions.  *It also makes debugging impossible on some
6160      machines.*
6161
6162      On some machines, such as the VAX, this flag has no effect, because
6163      the standard calling sequence automatically handles the frame
6164      pointer and nothing is saved by pretending it doesn't exist.  The
6165      machine-description macro `FRAME_POINTER_REQUIRED' controls
6166      whether a target machine supports this flag.  *Note Register
6167      Usage: (gccint)Registers.
6168
6169      Starting with GCC version 4.6, the default setting (when not
6170      optimizing for size) for 32-bit GNU/Linux x86 and 32-bit Darwin
6171      x86 targets has been changed to `-fomit-frame-pointer'.  The
6172      default can be reverted to `-fno-omit-frame-pointer' by
6173      configuring GCC with the `--enable-frame-pointer' configure option.
6174
6175      Enabled at levels `-O', `-O2', `-O3', `-Os'.
6176
6177 `-foptimize-sibling-calls'
6178      Optimize sibling and tail recursive calls.
6179
6180      Enabled at levels `-O2', `-O3', `-Os'.
6181
6182 `-fno-inline'
6183      Do not expand any functions inline apart from those marked with
6184      the `always_inline' attribute.  This is the default when not
6185      optimizing.
6186
6187      Single functions can be exempted from inlining by marking them
6188      with the `noinline' attribute.
6189
6190 `-finline-small-functions'
6191      Integrate functions into their callers when their body is smaller
6192      than expected function call code (so overall size of program gets
6193      smaller).  The compiler heuristically decides which functions are
6194      simple enough to be worth integrating in this way.  This inlining
6195      applies to all functions, even those not declared inline.
6196
6197      Enabled at level `-O2'.
6198
6199 `-findirect-inlining'
6200      Inline also indirect calls that are discovered to be known at
6201      compile time thanks to previous inlining.  This option has any
6202      effect only when inlining itself is turned on by the
6203      `-finline-functions' or `-finline-small-functions' options.
6204
6205      Enabled at level `-O2'.
6206
6207 `-finline-functions'
6208      Consider all functions for inlining, even if they are not declared
6209      inline.  The compiler heuristically decides which functions are
6210      worth integrating in this way.
6211
6212      If all calls to a given function are integrated, and the function
6213      is declared `static', then the function is normally not output as
6214      assembler code in its own right.
6215
6216      Enabled at level `-O3'.
6217
6218 `-finline-functions-called-once'
6219      Consider all `static' functions called once for inlining into their
6220      caller even if they are not marked `inline'.  If a call to a given
6221      function is integrated, then the function is not output as
6222      assembler code in its own right.
6223
6224      Enabled at levels `-O1', `-O2', `-O3' and `-Os'.
6225
6226 `-fearly-inlining'
6227      Inline functions marked by `always_inline' and functions whose
6228      body seems smaller than the function call overhead early before
6229      doing `-fprofile-generate' instrumentation and real inlining pass.
6230      Doing so makes profiling significantly cheaper and usually
6231      inlining faster on programs having large chains of nested wrapper
6232      functions.
6233
6234      Enabled by default.
6235
6236 `-fipa-sra'
6237      Perform interprocedural scalar replacement of aggregates, removal
6238      of unused parameters and replacement of parameters passed by
6239      reference by parameters passed by value.
6240
6241      Enabled at levels `-O2', `-O3' and `-Os'.
6242
6243 `-finline-limit=N'
6244      By default, GCC limits the size of functions that can be inlined.
6245      This flag allows coarse control of this limit.  N is the size of
6246      functions that can be inlined in number of pseudo instructions.
6247
6248      Inlining is actually controlled by a number of parameters, which
6249      may be specified individually by using `--param NAME=VALUE'.  The
6250      `-finline-limit=N' option sets some of these parameters as follows:
6251
6252     `max-inline-insns-single'
6253           is set to N/2.
6254
6255     `max-inline-insns-auto'
6256           is set to N/2.
6257
6258      See below for a documentation of the individual parameters
6259      controlling inlining and for the defaults of these parameters.
6260
6261      _Note:_ there may be no value to `-finline-limit' that results in
6262      default behavior.
6263
6264      _Note:_ pseudo instruction represents, in this particular context,
6265      an abstract measurement of function's size.  In no way does it
6266      represent a count of assembly instructions and as such its exact
6267      meaning might change from one release to an another.
6268
6269 `-fno-keep-inline-dllexport'
6270      This is a more fine-grained version of `-fkeep-inline-functions',
6271      which applies only to functions that are declared using the
6272      `dllexport' attribute or declspec (*Note Declaring Attributes of
6273      Functions: Function Attributes.)
6274
6275 `-fkeep-inline-functions'
6276      In C, emit `static' functions that are declared `inline' into the
6277      object file, even if the function has been inlined into all of its
6278      callers.  This switch does not affect functions using the `extern
6279      inline' extension in GNU C90.  In C++, emit any and all inline
6280      functions into the object file.
6281
6282 `-fkeep-static-consts'
6283      Emit variables declared `static const' when optimization isn't
6284      turned on, even if the variables aren't referenced.
6285
6286      GCC enables this option by default.  If you want to force the
6287      compiler to check if a variable is referenced, regardless of
6288      whether or not optimization is turned on, use the
6289      `-fno-keep-static-consts' option.
6290
6291 `-fmerge-constants'
6292      Attempt to merge identical constants (string constants and
6293      floating-point constants) across compilation units.
6294
6295      This option is the default for optimized compilation if the
6296      assembler and linker support it.  Use `-fno-merge-constants' to
6297      inhibit this behavior.
6298
6299      Enabled at levels `-O', `-O2', `-O3', `-Os'.
6300
6301 `-fmerge-all-constants'
6302      Attempt to merge identical constants and identical variables.
6303
6304      This option implies `-fmerge-constants'.  In addition to
6305      `-fmerge-constants' this considers e.g. even constant initialized
6306      arrays or initialized constant variables with integral or
6307      floating-point types.  Languages like C or C++ require each
6308      variable, including multiple instances of the same variable in
6309      recursive calls, to have distinct locations, so using this option
6310      results in non-conforming behavior.
6311
6312 `-fmodulo-sched'
6313      Perform swing modulo scheduling immediately before the first
6314      scheduling pass.  This pass looks at innermost loops and reorders
6315      their instructions by overlapping different iterations.
6316
6317 `-fmodulo-sched-allow-regmoves'
6318      Perform more aggressive SMS-based modulo scheduling with register
6319      moves allowed.  By setting this flag certain anti-dependences
6320      edges are deleted, which triggers the generation of reg-moves
6321      based on the life-range analysis.  This option is effective only
6322      with `-fmodulo-sched' enabled.
6323
6324 `-fno-branch-count-reg'
6325      Do not use "decrement and branch" instructions on a count register,
6326      but instead generate a sequence of instructions that decrement a
6327      register, compare it against zero, then branch based upon the
6328      result.  This option is only meaningful on architectures that
6329      support such instructions, which include x86, PowerPC, IA-64 and
6330      S/390.
6331
6332      The default is `-fbranch-count-reg'.
6333
6334 `-fno-function-cse'
6335      Do not put function addresses in registers; make each instruction
6336      that calls a constant function contain the function's address
6337      explicitly.
6338
6339      This option results in less efficient code, but some strange hacks
6340      that alter the assembler output may be confused by the
6341      optimizations performed when this option is not used.
6342
6343      The default is `-ffunction-cse'
6344
6345 `-fno-zero-initialized-in-bss'
6346      If the target supports a BSS section, GCC by default puts
6347      variables that are initialized to zero into BSS.  This can save
6348      space in the resulting code.
6349
6350      This option turns off this behavior because some programs
6351      explicitly rely on variables going to the data section--e.g., so
6352      that the resulting executable can find the beginning of that
6353      section and/or make assumptions based on that.
6354
6355      The default is `-fzero-initialized-in-bss'.
6356
6357 `-fmudflap -fmudflapth -fmudflapir'
6358      For front-ends that support it (C and C++), instrument all risky
6359      pointer/array dereferencing operations, some standard library
6360      string/heap functions, and some other associated constructs with
6361      range/validity tests.  Modules so instrumented should be immune to
6362      buffer overflows, invalid heap use, and some other classes of C/C++
6363      programming errors.  The instrumentation relies on a separate
6364      runtime library (`libmudflap'), which is linked into a program if
6365      `-fmudflap' is given at link time.  Run-time behavior of the
6366      instrumented program is controlled by the `MUDFLAP_OPTIONS'
6367      environment variable.  See `env MUDFLAP_OPTIONS=-help a.out' for
6368      its options.
6369
6370      Use `-fmudflapth' instead of `-fmudflap' to compile and to link if
6371      your program is multi-threaded.  Use `-fmudflapir', in addition to
6372      `-fmudflap' or `-fmudflapth', if instrumentation should ignore
6373      pointer reads.  This produces less instrumentation (and therefore
6374      faster execution) and still provides some protection against
6375      outright memory corrupting writes, but allows erroneously read
6376      data to propagate within a program.
6377
6378 `-fthread-jumps'
6379      Perform optimizations that check to see if a jump branches to a
6380      location where another comparison subsumed by the first is found.
6381      If so, the first branch is redirected to either the destination of
6382      the second branch or a point immediately following it, depending
6383      on whether the condition is known to be true or false.
6384
6385      Enabled at levels `-O2', `-O3', `-Os'.
6386
6387 `-fsplit-wide-types'
6388      When using a type that occupies multiple registers, such as `long
6389      long' on a 32-bit system, split the registers apart and allocate
6390      them independently.  This normally generates better code for those
6391      types, but may make debugging more difficult.
6392
6393      Enabled at levels `-O', `-O2', `-O3', `-Os'.
6394
6395 `-fcse-follow-jumps'
6396      In common subexpression elimination (CSE), scan through jump
6397      instructions when the target of the jump is not reached by any
6398      other path.  For example, when CSE encounters an `if' statement
6399      with an `else' clause, CSE follows the jump when the condition
6400      tested is false.
6401
6402      Enabled at levels `-O2', `-O3', `-Os'.
6403
6404 `-fcse-skip-blocks'
6405      This is similar to `-fcse-follow-jumps', but causes CSE to follow
6406      jumps that conditionally skip over blocks.  When CSE encounters a
6407      simple `if' statement with no else clause, `-fcse-skip-blocks'
6408      causes CSE to follow the jump around the body of the `if'.
6409
6410      Enabled at levels `-O2', `-O3', `-Os'.
6411
6412 `-frerun-cse-after-loop'
6413      Re-run common subexpression elimination after loop optimizations
6414      are performed.
6415
6416      Enabled at levels `-O2', `-O3', `-Os'.
6417
6418 `-fgcse'
6419      Perform a global common subexpression elimination pass.  This pass
6420      also performs global constant and copy propagation.
6421
6422      _Note:_ When compiling a program using computed gotos, a GCC
6423      extension, you may get better run-time performance if you disable
6424      the global common subexpression elimination pass by adding
6425      `-fno-gcse' to the command line.
6426
6427      Enabled at levels `-O2', `-O3', `-Os'.
6428
6429 `-fgcse-lm'
6430      When `-fgcse-lm' is enabled, global common subexpression
6431      elimination attempts to move loads that are only killed by stores
6432      into themselves.  This allows a loop containing a load/store
6433      sequence to be changed to a load outside the loop, and a
6434      copy/store within the loop.
6435
6436      Enabled by default when `-fgcse' is enabled.
6437
6438 `-fgcse-sm'
6439      When `-fgcse-sm' is enabled, a store motion pass is run after
6440      global common subexpression elimination.  This pass attempts to
6441      move stores out of loops.  When used in conjunction with
6442      `-fgcse-lm', loops containing a load/store sequence can be changed
6443      to a load before the loop and a store after the loop.
6444
6445      Not enabled at any optimization level.
6446
6447 `-fgcse-las'
6448      When `-fgcse-las' is enabled, the global common subexpression
6449      elimination pass eliminates redundant loads that come after stores
6450      to the same memory location (both partial and full redundancies).
6451
6452      Not enabled at any optimization level.
6453
6454 `-fgcse-after-reload'
6455      When `-fgcse-after-reload' is enabled, a redundant load elimination
6456      pass is performed after reload.  The purpose of this pass is to
6457      clean up redundant spilling.
6458
6459 `-faggressive-loop-optimizations'
6460      This option tells the loop optimizer to use language constraints to
6461      derive bounds for the number of iterations of a loop.  This
6462      assumes that loop code does not invoke undefined behavior by for
6463      example causing signed integer overflows or out-of-bound array
6464      accesses.  The bounds for the number of iterations of a loop are
6465      used to guide loop unrolling and peeling and loop exit test
6466      optimizations.  This option is enabled by default.
6467
6468 `-funsafe-loop-optimizations'
6469      This option tells the loop optimizer to assume that loop indices
6470      do not overflow, and that loops with nontrivial exit condition are
6471      not infinite.  This enables a wider range of loop optimizations
6472      even if the loop optimizer itself cannot prove that these
6473      assumptions are valid.  If you use `-Wunsafe-loop-optimizations',
6474      the compiler warns you if it finds this kind of loop.
6475
6476 `-fcrossjumping'
6477      Perform cross-jumping transformation.  This transformation unifies
6478      equivalent code and saves code size.  The resulting code may or
6479      may not perform better than without cross-jumping.
6480
6481      Enabled at levels `-O2', `-O3', `-Os'.
6482
6483 `-fauto-inc-dec'
6484      Combine increments or decrements of addresses with memory accesses.
6485      This pass is always skipped on architectures that do not have
6486      instructions to support this.  Enabled by default at `-O' and
6487      higher on architectures that support this.
6488
6489 `-fdce'
6490      Perform dead code elimination (DCE) on RTL.  Enabled by default at
6491      `-O' and higher.
6492
6493 `-fdse'
6494      Perform dead store elimination (DSE) on RTL.  Enabled by default
6495      at `-O' and higher.
6496
6497 `-fif-conversion'
6498      Attempt to transform conditional jumps into branch-less
6499      equivalents.  This includes use of conditional moves, min, max,
6500      set flags and abs instructions, and some tricks doable by standard
6501      arithmetics.  The use of conditional execution on chips where it
6502      is available is controlled by `if-conversion2'.
6503
6504      Enabled at levels `-O', `-O2', `-O3', `-Os'.
6505
6506 `-fif-conversion2'
6507      Use conditional execution (where available) to transform
6508      conditional jumps into branch-less equivalents.
6509
6510      Enabled at levels `-O', `-O2', `-O3', `-Os'.
6511
6512 `-fdelete-null-pointer-checks'
6513      Assume that programs cannot safely dereference null pointers, and
6514      that no code or data element resides there.  This enables simple
6515      constant folding optimizations at all optimization levels.  In
6516      addition, other optimization passes in GCC use this flag to
6517      control global dataflow analyses that eliminate useless checks for
6518      null pointers; these assume that if a pointer is checked after it
6519      has already been dereferenced, it cannot be null.
6520
6521      Note however that in some environments this assumption is not true.
6522      Use `-fno-delete-null-pointer-checks' to disable this optimization
6523      for programs that depend on that behavior.
6524
6525      Some targets, especially embedded ones, disable this option at all
6526      levels.  Otherwise it is enabled at all levels: `-O0', `-O1',
6527      `-O2', `-O3', `-Os'.  Passes that use the information are enabled
6528      independently at different optimization levels.
6529
6530 `-fdevirtualize'
6531      Attempt to convert calls to virtual functions to direct calls.
6532      This is done both within a procedure and interprocedurally as part
6533      of indirect inlining (`-findirect-inlining') and interprocedural
6534      constant propagation (`-fipa-cp').  Enabled at levels `-O2',
6535      `-O3', `-Os'.
6536
6537 `-fexpensive-optimizations'
6538      Perform a number of minor optimizations that are relatively
6539      expensive.
6540
6541      Enabled at levels `-O2', `-O3', `-Os'.
6542
6543 `-free'
6544      Attempt to remove redundant extension instructions.  This is
6545      especially helpful for the x86-64 architecture, which implicitly
6546      zero-extends in 64-bit registers after writing to their lower
6547      32-bit half.
6548
6549      Enabled for x86 at levels `-O2', `-O3'.
6550
6551 `-foptimize-register-move'
6552 `-fregmove'
6553      Attempt to reassign register numbers in move instructions and as
6554      operands of other simple instructions in order to maximize the
6555      amount of register tying.  This is especially helpful on machines
6556      with two-operand instructions.
6557
6558      Note `-fregmove' and `-foptimize-register-move' are the same
6559      optimization.
6560
6561      Enabled at levels `-O2', `-O3', `-Os'.
6562
6563 `-fira-algorithm=ALGORITHM'
6564      Use the specified coloring algorithm for the integrated register
6565      allocator.  The ALGORITHM argument can be `priority', which
6566      specifies Chow's priority coloring, or `CB', which specifies
6567      Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not
6568      implemented for all architectures, but for those targets that do
6569      support it, it is the default because it generates better code.
6570
6571 `-fira-region=REGION'
6572      Use specified regions for the integrated register allocator.  The
6573      REGION argument should be one of the following:
6574
6575     `all'
6576           Use all loops as register allocation regions.  This can give
6577           the best results for machines with a small and/or irregular
6578           register set.
6579
6580     `mixed'
6581           Use all loops except for loops with small register pressure
6582           as the regions.  This value usually gives the best results in
6583           most cases and for most architectures, and is enabled by
6584           default when compiling with optimization for speed (`-O',
6585           `-O2', ...).
6586
6587     `one'
6588           Use all functions as a single region.  This typically results
6589           in the smallest code size, and is enabled by default for
6590           `-Os' or `-O0'.
6591
6592
6593 `-fira-hoist-pressure'
6594      Use IRA to evaluate register pressure in the code hoisting pass for
6595      decisions to hoist expressions.  This option usually results in
6596      smaller code, but it can slow the compiler down.
6597
6598      This option is enabled at level `-Os' for all targets.
6599
6600 `-fira-loop-pressure'
6601      Use IRA to evaluate register pressure in loops for decisions to
6602      move loop invariants.  This option usually results in generation
6603      of faster and smaller code on machines with large register files
6604      (>= 32 registers), but it can slow the compiler down.
6605
6606      This option is enabled at level `-O3' for some targets.
6607
6608 `-fno-ira-share-save-slots'
6609      Disable sharing of stack slots used for saving call-used hard
6610      registers living through a call.  Each hard register gets a
6611      separate stack slot, and as a result function stack frames are
6612      larger.
6613
6614 `-fno-ira-share-spill-slots'
6615      Disable sharing of stack slots allocated for pseudo-registers.
6616      Each pseudo-register that does not get a hard register gets a
6617      separate stack slot, and as a result function stack frames are
6618      larger.
6619
6620 `-fira-verbose=N'
6621      Control the verbosity of the dump file for the integrated register
6622      allocator.  The default value is 5.  If the value N is greater or
6623      equal to 10, the dump output is sent to stderr using the same
6624      format as N minus 10.
6625
6626 `-fdelayed-branch'
6627      If supported for the target machine, attempt to reorder
6628      instructions to exploit instruction slots available after delayed
6629      branch instructions.
6630
6631      Enabled at levels `-O', `-O2', `-O3', `-Os'.
6632
6633 `-fschedule-insns'
6634      If supported for the target machine, attempt to reorder
6635      instructions to eliminate execution stalls due to required data
6636      being unavailable.  This helps machines that have slow floating
6637      point or memory load instructions by allowing other instructions
6638      to be issued until the result of the load or floating-point
6639      instruction is required.
6640
6641      Enabled at levels `-O2', `-O3'.
6642
6643 `-fschedule-insns2'
6644      Similar to `-fschedule-insns', but requests an additional pass of
6645      instruction scheduling after register allocation has been done.
6646      This is especially useful on machines with a relatively small
6647      number of registers and where memory load instructions take more
6648      than one cycle.
6649
6650      Enabled at levels `-O2', `-O3', `-Os'.
6651
6652 `-fno-sched-interblock'
6653      Don't schedule instructions across basic blocks.  This is normally
6654      enabled by default when scheduling before register allocation, i.e.
6655      with `-fschedule-insns' or at `-O2' or higher.
6656
6657 `-fno-sched-spec'
6658      Don't allow speculative motion of non-load instructions.  This is
6659      normally enabled by default when scheduling before register
6660      allocation, i.e.  with `-fschedule-insns' or at `-O2' or higher.
6661
6662 `-fsched-pressure'
6663      Enable register pressure sensitive insn scheduling before register
6664      allocation.  This only makes sense when scheduling before register
6665      allocation is enabled, i.e. with `-fschedule-insns' or at `-O2' or
6666      higher.  Usage of this option can improve the generated code and
6667      decrease its size by preventing register pressure increase above
6668      the number of available hard registers and subsequent spills in
6669      register allocation.
6670
6671 `-fsched-spec-load'
6672      Allow speculative motion of some load instructions.  This only
6673      makes sense when scheduling before register allocation, i.e. with
6674      `-fschedule-insns' or at `-O2' or higher.
6675
6676 `-fsched-spec-load-dangerous'
6677      Allow speculative motion of more load instructions.  This only
6678      makes sense when scheduling before register allocation, i.e. with
6679      `-fschedule-insns' or at `-O2' or higher.
6680
6681 `-fsched-stalled-insns'
6682 `-fsched-stalled-insns=N'
6683      Define how many insns (if any) can be moved prematurely from the
6684      queue of stalled insns into the ready list during the second
6685      scheduling pass.  `-fno-sched-stalled-insns' means that no insns
6686      are moved prematurely, `-fsched-stalled-insns=0' means there is no
6687      limit on how many queued insns can be moved prematurely.
6688      `-fsched-stalled-insns' without a value is equivalent to
6689      `-fsched-stalled-insns=1'.
6690
6691 `-fsched-stalled-insns-dep'
6692 `-fsched-stalled-insns-dep=N'
6693      Define how many insn groups (cycles) are examined for a dependency
6694      on a stalled insn that is a candidate for premature removal from
6695      the queue of stalled insns.  This has an effect only during the
6696      second scheduling pass, and only if `-fsched-stalled-insns' is
6697      used.  `-fno-sched-stalled-insns-dep' is equivalent to
6698      `-fsched-stalled-insns-dep=0'.  `-fsched-stalled-insns-dep'
6699      without a value is equivalent to `-fsched-stalled-insns-dep=1'.
6700
6701 `-fsched2-use-superblocks'
6702      When scheduling after register allocation, use superblock
6703      scheduling.  This allows motion across basic block boundaries,
6704      resulting in faster schedules.  This option is experimental, as
6705      not all machine descriptions used by GCC model the CPU closely
6706      enough to avoid unreliable results from the algorithm.
6707
6708      This only makes sense when scheduling after register allocation,
6709      i.e. with `-fschedule-insns2' or at `-O2' or higher.
6710
6711 `-fsched-group-heuristic'
6712      Enable the group heuristic in the scheduler.  This heuristic favors
6713      the instruction that belongs to a schedule group.  This is enabled
6714      by default when scheduling is enabled, i.e. with `-fschedule-insns'
6715      or `-fschedule-insns2' or at `-O2' or higher.
6716
6717 `-fsched-critical-path-heuristic'
6718      Enable the critical-path heuristic in the scheduler.  This
6719      heuristic favors instructions on the critical path.  This is
6720      enabled by default when scheduling is enabled, i.e. with
6721      `-fschedule-insns' or `-fschedule-insns2' or at `-O2' or higher.
6722
6723 `-fsched-spec-insn-heuristic'
6724      Enable the speculative instruction heuristic in the scheduler.
6725      This heuristic favors speculative instructions with greater
6726      dependency weakness.  This is enabled by default when scheduling
6727      is enabled, i.e.  with `-fschedule-insns' or `-fschedule-insns2'
6728      or at `-O2' or higher.
6729
6730 `-fsched-rank-heuristic'
6731      Enable the rank heuristic in the scheduler.  This heuristic favors
6732      the instruction belonging to a basic block with greater size or
6733      frequency.  This is enabled by default when scheduling is enabled,
6734      i.e.  with `-fschedule-insns' or `-fschedule-insns2' or at `-O2'
6735      or higher.
6736
6737 `-fsched-last-insn-heuristic'
6738      Enable the last-instruction heuristic in the scheduler.  This
6739      heuristic favors the instruction that is less dependent on the
6740      last instruction scheduled.  This is enabled by default when
6741      scheduling is enabled, i.e. with `-fschedule-insns' or
6742      `-fschedule-insns2' or at `-O2' or higher.
6743
6744 `-fsched-dep-count-heuristic'
6745      Enable the dependent-count heuristic in the scheduler.  This
6746      heuristic favors the instruction that has more instructions
6747      depending on it.  This is enabled by default when scheduling is
6748      enabled, i.e.  with `-fschedule-insns' or `-fschedule-insns2' or
6749      at `-O2' or higher.
6750
6751 `-freschedule-modulo-scheduled-loops'
6752      Modulo scheduling is performed before traditional scheduling.  If
6753      a loop is modulo scheduled, later scheduling passes may change its
6754      schedule.  Use this option to control that behavior.
6755
6756 `-fselective-scheduling'
6757      Schedule instructions using selective scheduling algorithm.
6758      Selective scheduling runs instead of the first scheduler pass.
6759
6760 `-fselective-scheduling2'
6761      Schedule instructions using selective scheduling algorithm.
6762      Selective scheduling runs instead of the second scheduler pass.
6763
6764 `-fsel-sched-pipelining'
6765      Enable software pipelining of innermost loops during selective
6766      scheduling.  This option has no effect unless one of
6767      `-fselective-scheduling' or `-fselective-scheduling2' is turned on.
6768
6769 `-fsel-sched-pipelining-outer-loops'
6770      When pipelining loops during selective scheduling, also pipeline
6771      outer loops.  This option has no effect unless
6772      `-fsel-sched-pipelining' is turned on.
6773
6774 `-fshrink-wrap'
6775      Emit function prologues only before parts of the function that
6776      need it, rather than at the top of the function.  This flag is
6777      enabled by default at `-O' and higher.
6778
6779 `-fcaller-saves'
6780      Enable allocation of values to registers that are clobbered by
6781      function calls, by emitting extra instructions to save and restore
6782      the registers around such calls.  Such allocation is done only
6783      when it seems to result in better code.
6784
6785      This option is always enabled by default on certain machines,
6786      usually those which have no call-preserved registers to use
6787      instead.
6788
6789      Enabled at levels `-O2', `-O3', `-Os'.
6790
6791 `-fcombine-stack-adjustments'
6792      Tracks stack adjustments (pushes and pops) and stack memory
6793      references and then tries to find ways to combine them.
6794
6795      Enabled by default at `-O1' and higher.
6796
6797 `-fconserve-stack'
6798      Attempt to minimize stack usage.  The compiler attempts to use less
6799      stack space, even if that makes the program slower.  This option
6800      implies setting the `large-stack-frame' parameter to 100 and the
6801      `large-stack-frame-growth' parameter to 400.
6802
6803 `-ftree-reassoc'
6804      Perform reassociation on trees.  This flag is enabled by default
6805      at `-O' and higher.
6806
6807 `-ftree-pre'
6808      Perform partial redundancy elimination (PRE) on trees.  This flag
6809      is enabled by default at `-O2' and `-O3'.
6810
6811 `-ftree-partial-pre'
6812      Make partial redundancy elimination (PRE) more aggressive.  This
6813      flag is enabled by default at `-O3'.
6814
6815 `-ftree-forwprop'
6816      Perform forward propagation on trees.  This flag is enabled by
6817      default at `-O' and higher.
6818
6819 `-ftree-fre'
6820      Perform full redundancy elimination (FRE) on trees.  The difference
6821      between FRE and PRE is that FRE only considers expressions that
6822      are computed on all paths leading to the redundant computation.
6823      This analysis is faster than PRE, though it exposes fewer
6824      redundancies.  This flag is enabled by default at `-O' and higher.
6825
6826 `-ftree-phiprop'
6827      Perform hoisting of loads from conditional pointers on trees.  This
6828      pass is enabled by default at `-O' and higher.
6829
6830 `-fhoist-adjacent-loads'
6831      Speculatively hoist loads from both branches of an if-then-else if
6832      the loads are from adjacent locations in the same structure and
6833      the target architecture has a conditional move instruction.  This
6834      flag is enabled by default at `-O2' and higher.
6835
6836 `-ftree-copy-prop'
6837      Perform copy propagation on trees.  This pass eliminates
6838      unnecessary copy operations.  This flag is enabled by default at
6839      `-O' and higher.
6840
6841 `-fipa-pure-const'
6842      Discover which functions are pure or constant.  Enabled by default
6843      at `-O' and higher.
6844
6845 `-fipa-reference'
6846      Discover which static variables do not escape the compilation unit.
6847      Enabled by default at `-O' and higher.
6848
6849 `-fipa-pta'
6850      Perform interprocedural pointer analysis and interprocedural
6851      modification and reference analysis.  This option can cause
6852      excessive memory and compile-time usage on large compilation
6853      units.  It is not enabled by default at any optimization level.
6854
6855 `-fipa-profile'
6856      Perform interprocedural profile propagation.  The functions called
6857      only from cold functions are marked as cold. Also functions
6858      executed once (such as `cold', `noreturn', static constructors or
6859      destructors) are identified. Cold functions and loop less parts of
6860      functions executed once are then optimized for size.  Enabled by
6861      default at `-O' and higher.
6862
6863 `-fipa-cp'
6864      Perform interprocedural constant propagation.  This optimization
6865      analyzes the program to determine when values passed to functions
6866      are constants and then optimizes accordingly.  This optimization
6867      can substantially increase performance if the application has
6868      constants passed to functions.  This flag is enabled by default at
6869      `-O2', `-Os' and `-O3'.
6870
6871 `-fipa-cp-clone'
6872      Perform function cloning to make interprocedural constant
6873      propagation stronger.  When enabled, interprocedural constant
6874      propagation performs function cloning when externally visible
6875      function can be called with constant arguments.  Because this
6876      optimization can create multiple copies of functions, it may
6877      significantly increase code size (see `--param
6878      ipcp-unit-growth=VALUE').  This flag is enabled by default at
6879      `-O3'.
6880
6881 `-ftree-sink'
6882      Perform forward store motion  on trees.  This flag is enabled by
6883      default at `-O' and higher.
6884
6885 `-ftree-bit-ccp'
6886      Perform sparse conditional bit constant propagation on trees and
6887      propagate pointer alignment information.  This pass only operates
6888      on local scalar variables and is enabled by default at `-O' and
6889      higher.  It requires that `-ftree-ccp' is enabled.
6890
6891 `-ftree-ccp'
6892      Perform sparse conditional constant propagation (CCP) on trees.
6893      This pass only operates on local scalar variables and is enabled
6894      by default at `-O' and higher.
6895
6896 `-ftree-switch-conversion'
6897      Perform conversion of simple initializations in a switch to
6898      initializations from a scalar array.  This flag is enabled by
6899      default at `-O2' and higher.
6900
6901 `-ftree-tail-merge'
6902      Look for identical code sequences.  When found, replace one with a
6903      jump to the other.  This optimization is known as tail merging or
6904      cross jumping.  This flag is enabled by default at `-O2' and
6905      higher.  The compilation time in this pass can be limited using
6906      `max-tail-merge-comparisons' parameter and
6907      `max-tail-merge-iterations' parameter.
6908
6909 `-ftree-dce'
6910      Perform dead code elimination (DCE) on trees.  This flag is
6911      enabled by default at `-O' and higher.
6912
6913 `-ftree-builtin-call-dce'
6914      Perform conditional dead code elimination (DCE) for calls to
6915      built-in functions that may set `errno' but are otherwise
6916      side-effect free.  This flag is enabled by default at `-O2' and
6917      higher if `-Os' is not also specified.
6918
6919 `-ftree-dominator-opts'
6920      Perform a variety of simple scalar cleanups (constant/copy
6921      propagation, redundancy elimination, range propagation and
6922      expression simplification) based on a dominator tree traversal.
6923      This also performs jump threading (to reduce jumps to jumps). This
6924      flag is enabled by default at `-O' and higher.
6925
6926 `-ftree-dse'
6927      Perform dead store elimination (DSE) on trees.  A dead store is a
6928      store into a memory location that is later overwritten by another
6929      store without any intervening loads.  In this case the earlier
6930      store can be deleted.  This flag is enabled by default at `-O' and
6931      higher.
6932
6933 `-ftree-ch'
6934      Perform loop header copying on trees.  This is beneficial since it
6935      increases effectiveness of code motion optimizations.  It also
6936      saves one jump.  This flag is enabled by default at `-O' and
6937      higher.  It is not enabled for `-Os', since it usually increases
6938      code size.
6939
6940 `-ftree-loop-optimize'
6941      Perform loop optimizations on trees.  This flag is enabled by
6942      default at `-O' and higher.
6943
6944 `-ftree-loop-linear'
6945      Perform loop interchange transformations on tree.  Same as
6946      `-floop-interchange'.  To use this code transformation, GCC has to
6947      be configured with `--with-ppl' and `--with-cloog' to enable the
6948      Graphite loop transformation infrastructure.
6949
6950 `-floop-interchange'
6951      Perform loop interchange transformations on loops.  Interchanging
6952      two nested loops switches the inner and outer loops.  For example,
6953      given a loop like:
6954           DO J = 1, M
6955             DO I = 1, N
6956               A(J, I) = A(J, I) * C
6957             ENDDO
6958           ENDDO
6959      loop interchange transforms the loop as if it were written:
6960           DO I = 1, N
6961             DO J = 1, M
6962               A(J, I) = A(J, I) * C
6963             ENDDO
6964           ENDDO
6965      which can be beneficial when `N' is larger than the caches,
6966      because in Fortran, the elements of an array are stored in memory
6967      contiguously by column, and the original loop iterates over rows,
6968      potentially creating at each access a cache miss.  This
6969      optimization applies to all the languages supported by GCC and is
6970      not limited to Fortran.  To use this code transformation, GCC has
6971      to be configured with `--with-ppl' and `--with-cloog' to enable the
6972      Graphite loop transformation infrastructure.
6973
6974 `-floop-strip-mine'
6975      Perform loop strip mining transformations on loops.  Strip mining
6976      splits a loop into two nested loops.  The outer loop has strides
6977      equal to the strip size and the inner loop has strides of the
6978      original loop within a strip.  The strip length can be changed
6979      using the `loop-block-tile-size' parameter.  For example, given a
6980      loop like:
6981           DO I = 1, N
6982             A(I) = A(I) + C
6983           ENDDO
6984      loop strip mining transforms the loop as if it were written:
6985           DO II = 1, N, 51
6986             DO I = II, min (II + 50, N)
6987               A(I) = A(I) + C
6988             ENDDO
6989           ENDDO
6990      This optimization applies to all the languages supported by GCC
6991      and is not limited to Fortran.  To use this code transformation,
6992      GCC has to be configured with `--with-ppl' and `--with-cloog' to
6993      enable the Graphite loop transformation infrastructure.
6994
6995 `-floop-block'
6996      Perform loop blocking transformations on loops.  Blocking strip
6997      mines each loop in the loop nest such that the memory accesses of
6998      the element loops fit inside caches.  The strip length can be
6999      changed using the `loop-block-tile-size' parameter.  For example,
7000      given a loop like:
7001           DO I = 1, N
7002             DO J = 1, M
7003               A(J, I) = B(I) + C(J)
7004             ENDDO
7005           ENDDO
7006      loop blocking transforms the loop as if it were written:
7007           DO II = 1, N, 51
7008             DO JJ = 1, M, 51
7009               DO I = II, min (II + 50, N)
7010                 DO J = JJ, min (JJ + 50, M)
7011                   A(J, I) = B(I) + C(J)
7012                 ENDDO
7013               ENDDO
7014             ENDDO
7015           ENDDO
7016      which can be beneficial when `M' is larger than the caches,
7017      because the innermost loop iterates over a smaller amount of data
7018      which can be kept in the caches.  This optimization applies to all
7019      the languages supported by GCC and is not limited to Fortran.  To
7020      use this code transformation, GCC has to be configured with
7021      `--with-ppl' and `--with-cloog' to enable the Graphite loop
7022      transformation infrastructure.
7023
7024 `-fgraphite-identity'
7025      Enable the identity transformation for graphite.  For every SCoP
7026      we generate the polyhedral representation and transform it back to
7027      gimple.  Using `-fgraphite-identity' we can check the costs or
7028      benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
7029      minimal optimizations are also performed by the code generator
7030      CLooG, like index splitting and dead code elimination in loops.
7031
7032 `-floop-nest-optimize'
7033      Enable the ISL based loop nest optimizer.  This is a generic loop
7034      nest optimizer based on the Pluto optimization algorithms.  It
7035      calculates a loop structure optimized for data-locality and
7036      parallelism.  This option is experimental.
7037
7038 `-floop-parallelize-all'
7039      Use the Graphite data dependence analysis to identify loops that
7040      can be parallelized.  Parallelize all the loops that can be
7041      analyzed to not contain loop carried dependences without checking
7042      that it is profitable to parallelize the loops.
7043
7044 `-fcheck-data-deps'
7045      Compare the results of several data dependence analyzers.  This
7046      option is used for debugging the data dependence analyzers.
7047
7048 `-ftree-loop-if-convert'
7049      Attempt to transform conditional jumps in the innermost loops to
7050      branch-less equivalents.  The intent is to remove control-flow from
7051      the innermost loops in order to improve the ability of the
7052      vectorization pass to handle these loops.  This is enabled by
7053      default if vectorization is enabled.
7054
7055 `-ftree-loop-if-convert-stores'
7056      Attempt to also if-convert conditional jumps containing memory
7057      writes.  This transformation can be unsafe for multi-threaded
7058      programs as it transforms conditional memory writes into
7059      unconditional memory writes.  For example,
7060           for (i = 0; i < N; i++)
7061             if (cond)
7062               A[i] = expr;
7063      is transformed to
7064           for (i = 0; i < N; i++)
7065             A[i] = cond ? expr : A[i];
7066      potentially producing data races.
7067
7068 `-ftree-loop-distribution'
7069      Perform loop distribution.  This flag can improve cache
7070      performance on big loop bodies and allow further loop
7071      optimizations, like parallelization or vectorization, to take
7072      place.  For example, the loop
7073           DO I = 1, N
7074             A(I) = B(I) + C
7075             D(I) = E(I) * F
7076           ENDDO
7077      is transformed to
7078           DO I = 1, N
7079              A(I) = B(I) + C
7080           ENDDO
7081           DO I = 1, N
7082              D(I) = E(I) * F
7083           ENDDO
7084
7085 `-ftree-loop-distribute-patterns'
7086      Perform loop distribution of patterns that can be code generated
7087      with calls to a library.  This flag is enabled by default at `-O3'.
7088
7089      This pass distributes the initialization loops and generates a
7090      call to memset zero.  For example, the loop
7091           DO I = 1, N
7092             A(I) = 0
7093             B(I) = A(I) + I
7094           ENDDO
7095      is transformed to
7096           DO I = 1, N
7097              A(I) = 0
7098           ENDDO
7099           DO I = 1, N
7100              B(I) = A(I) + I
7101           ENDDO
7102      and the initialization loop is transformed into a call to memset
7103      zero.
7104
7105 `-ftree-loop-im'
7106      Perform loop invariant motion on trees.  This pass moves only
7107      invariants that are hard to handle at RTL level (function calls,
7108      operations that expand to nontrivial sequences of insns).  With
7109      `-funswitch-loops' it also moves operands of conditions that are
7110      invariant out of the loop, so that we can use just trivial
7111      invariantness analysis in loop unswitching.  The pass also includes
7112      store motion.
7113
7114 `-ftree-loop-ivcanon'
7115      Create a canonical counter for number of iterations in loops for
7116      which determining number of iterations requires complicated
7117      analysis.  Later optimizations then may determine the number
7118      easily.  Useful especially in connection with unrolling.
7119
7120 `-fivopts'
7121      Perform induction variable optimizations (strength reduction,
7122      induction variable merging and induction variable elimination) on
7123      trees.
7124
7125 `-ftree-parallelize-loops=n'
7126      Parallelize loops, i.e., split their iteration space to run in n
7127      threads.  This is only possible for loops whose iterations are
7128      independent and can be arbitrarily reordered.  The optimization is
7129      only profitable on multiprocessor machines, for loops that are
7130      CPU-intensive, rather than constrained e.g. by memory bandwidth.
7131      This option implies `-pthread', and thus is only supported on
7132      targets that have support for `-pthread'.
7133
7134 `-ftree-pta'
7135      Perform function-local points-to analysis on trees.  This flag is
7136      enabled by default at `-O' and higher.
7137
7138 `-ftree-sra'
7139      Perform scalar replacement of aggregates.  This pass replaces
7140      structure references with scalars to prevent committing structures
7141      to memory too early.  This flag is enabled by default at `-O' and
7142      higher.
7143
7144 `-ftree-copyrename'
7145      Perform copy renaming on trees.  This pass attempts to rename
7146      compiler temporaries to other variables at copy locations, usually
7147      resulting in variable names which more closely resemble the
7148      original variables.  This flag is enabled by default at `-O' and
7149      higher.
7150
7151 `-ftree-coalesce-inlined-vars'
7152      Tell the copyrename pass (see `-ftree-copyrename') to attempt to
7153      combine small user-defined variables too, but only if they were
7154      inlined from other functions.  It is a more limited form of
7155      `-ftree-coalesce-vars'.  This may harm debug information of such
7156      inlined variables, but it will keep variables of the inlined-into
7157      function apart from each other, such that they are more likely to
7158      contain the expected values in a debugging session.  This was the
7159      default in GCC versions older than 4.7.
7160
7161 `-ftree-coalesce-vars'
7162      Tell the copyrename pass (see `-ftree-copyrename') to attempt to
7163      combine small user-defined variables too, instead of just compiler
7164      temporaries.  This may severely limit the ability to debug an
7165      optimized program compiled with `-fno-var-tracking-assignments'.
7166      In the negated form, this flag prevents SSA coalescing of user
7167      variables, including inlined ones.  This option is enabled by
7168      default.
7169
7170 `-ftree-ter'
7171      Perform temporary expression replacement during the SSA->normal
7172      phase.  Single use/single def temporaries are replaced at their
7173      use location with their defining expression.  This results in
7174      non-GIMPLE code, but gives the expanders much more complex trees
7175      to work on resulting in better RTL generation.  This is enabled by
7176      default at `-O' and higher.
7177
7178 `-ftree-slsr'
7179      Perform straight-line strength reduction on trees.  This
7180      recognizes related expressions involving multiplications and
7181      replaces them by less expensive calculations when possible.  This
7182      is enabled by default at `-O' and higher.
7183
7184 `-ftree-vectorize'
7185      Perform loop vectorization on trees. This flag is enabled by
7186      default at `-O3'.
7187
7188 `-ftree-slp-vectorize'
7189      Perform basic block vectorization on trees. This flag is enabled
7190      by default at `-O3' and when `-ftree-vectorize' is enabled.
7191
7192 `-ftree-vect-loop-version'
7193      Perform loop versioning when doing loop vectorization on trees.
7194      When a loop appears to be vectorizable except that data alignment
7195      or data dependence cannot be determined at compile time, then
7196      vectorized and non-vectorized versions of the loop are generated
7197      along with run-time checks for alignment or dependence to control
7198      which version is executed.  This option is enabled by default
7199      except at level `-Os' where it is disabled.
7200
7201 `-fvect-cost-model'
7202      Enable cost model for vectorization.  This option is enabled by
7203      default at `-O3'.
7204
7205 `-ftree-vrp'
7206      Perform Value Range Propagation on trees.  This is similar to the
7207      constant propagation pass, but instead of values, ranges of values
7208      are propagated.  This allows the optimizers to remove unnecessary
7209      range checks like array bound checks and null pointer checks.
7210      This is enabled by default at `-O2' and higher.  Null pointer check
7211      elimination is only done if `-fdelete-null-pointer-checks' is
7212      enabled.
7213
7214 `-ftracer'
7215      Perform tail duplication to enlarge superblock size.  This
7216      transformation simplifies the control flow of the function
7217      allowing other optimizations to do a better job.
7218
7219 `-funroll-loops'
7220      Unroll loops whose number of iterations can be determined at
7221      compile time or upon entry to the loop.  `-funroll-loops' implies
7222      `-frerun-cse-after-loop'.  This option makes code larger, and may
7223      or may not make it run faster.
7224
7225 `-funroll-all-loops'
7226      Unroll all loops, even if their number of iterations is uncertain
7227      when the loop is entered.  This usually makes programs run more
7228      slowly.  `-funroll-all-loops' implies the same options as
7229      `-funroll-loops',
7230
7231 `-fsplit-ivs-in-unroller'
7232      Enables expression of values of induction variables in later
7233      iterations of the unrolled loop using the value in the first
7234      iteration.  This breaks long dependency chains, thus improving
7235      efficiency of the scheduling passes.
7236
7237      A combination of `-fweb' and CSE is often sufficient to obtain the
7238      same effect.  However, that is not reliable in cases where the
7239      loop body is more complicated than a single basic block.  It also
7240      does not work at all on some architectures due to restrictions in
7241      the CSE pass.
7242
7243      This optimization is enabled by default.
7244
7245 `-fvariable-expansion-in-unroller'
7246      With this option, the compiler creates multiple copies of some
7247      local variables when unrolling a loop, which can result in
7248      superior code.
7249
7250 `-fpartial-inlining'
7251      Inline parts of functions.  This option has any effect only when
7252      inlining itself is turned on by the `-finline-functions' or
7253      `-finline-small-functions' options.
7254
7255      Enabled at level `-O2'.
7256
7257 `-fpredictive-commoning'
7258      Perform predictive commoning optimization, i.e., reusing
7259      computations (especially memory loads and stores) performed in
7260      previous iterations of loops.
7261
7262      This option is enabled at level `-O3'.
7263
7264 `-fprefetch-loop-arrays'
7265      If supported by the target machine, generate instructions to
7266      prefetch memory to improve the performance of loops that access
7267      large arrays.
7268
7269      This option may generate better or worse code; results are highly
7270      dependent on the structure of loops within the source code.
7271
7272      Disabled at level `-Os'.
7273
7274 `-fno-peephole'
7275 `-fno-peephole2'
7276      Disable any machine-specific peephole optimizations.  The
7277      difference between `-fno-peephole' and `-fno-peephole2' is in how
7278      they are implemented in the compiler; some targets use one, some
7279      use the other, a few use both.
7280
7281      `-fpeephole' is enabled by default.  `-fpeephole2' enabled at
7282      levels `-O2', `-O3', `-Os'.
7283
7284 `-fno-guess-branch-probability'
7285      Do not guess branch probabilities using heuristics.
7286
7287      GCC uses heuristics to guess branch probabilities if they are not
7288      provided by profiling feedback (`-fprofile-arcs').  These
7289      heuristics are based on the control flow graph.  If some branch
7290      probabilities are specified by `__builtin_expect', then the
7291      heuristics are used to guess branch probabilities for the rest of
7292      the control flow graph, taking the `__builtin_expect' info into
7293      account.  The interactions between the heuristics and
7294      `__builtin_expect' can be complex, and in some cases, it may be
7295      useful to disable the heuristics so that the effects of
7296      `__builtin_expect' are easier to understand.
7297
7298      The default is `-fguess-branch-probability' at levels `-O', `-O2',
7299      `-O3', `-Os'.
7300
7301 `-freorder-blocks'
7302      Reorder basic blocks in the compiled function in order to reduce
7303      number of taken branches and improve code locality.
7304
7305      Enabled at levels `-O2', `-O3'.
7306
7307 `-freorder-blocks-and-partition'
7308      In addition to reordering basic blocks in the compiled function,
7309      in order to reduce number of taken branches, partitions hot and
7310      cold basic blocks into separate sections of the assembly and .o
7311      files, to improve paging and cache locality performance.
7312
7313      This optimization is automatically turned off in the presence of
7314      exception handling, for linkonce sections, for functions with a
7315      user-defined section attribute and on any architecture that does
7316      not support named sections.
7317
7318 `-freorder-functions'
7319      Reorder functions in the object file in order to improve code
7320      locality.  This is implemented by using special subsections
7321      `.text.hot' for most frequently executed functions and
7322      `.text.unlikely' for unlikely executed functions.  Reordering is
7323      done by the linker so object file format must support named
7324      sections and linker must place them in a reasonable way.
7325
7326      Also profile feedback must be available to make this option
7327      effective.  See `-fprofile-arcs' for details.
7328
7329      Enabled at levels `-O2', `-O3', `-Os'.
7330
7331 `-fstrict-aliasing'
7332      Allow the compiler to assume the strictest aliasing rules
7333      applicable to the language being compiled.  For C (and C++), this
7334      activates optimizations based on the type of expressions.  In
7335      particular, an object of one type is assumed never to reside at
7336      the same address as an object of a different type, unless the
7337      types are almost the same.  For example, an `unsigned int' can
7338      alias an `int', but not a `void*' or a `double'.  A character type
7339      may alias any other type.
7340
7341      Pay special attention to code like this:
7342           union a_union {
7343             int i;
7344             double d;
7345           };
7346
7347           int f() {
7348             union a_union t;
7349             t.d = 3.0;
7350             return t.i;
7351           }
7352      The practice of reading from a different union member than the one
7353      most recently written to (called "type-punning") is common.  Even
7354      with `-fstrict-aliasing', type-punning is allowed, provided the
7355      memory is accessed through the union type.  So, the code above
7356      works as expected.  *Note Structures unions enumerations and
7357      bit-fields implementation::.  However, this code might not:
7358           int f() {
7359             union a_union t;
7360             int* ip;
7361             t.d = 3.0;
7362             ip = &t.i;
7363             return *ip;
7364           }
7365
7366      Similarly, access by taking the address, casting the resulting
7367      pointer and dereferencing the result has undefined behavior, even
7368      if the cast uses a union type, e.g.:
7369           int f() {
7370             double d = 3.0;
7371             return ((union a_union *) &d)->i;
7372           }
7373
7374      The `-fstrict-aliasing' option is enabled at levels `-O2', `-O3',
7375      `-Os'.
7376
7377 `-fstrict-overflow'
7378      Allow the compiler to assume strict signed overflow rules,
7379      depending on the language being compiled.  For C (and C++) this
7380      means that overflow when doing arithmetic with signed numbers is
7381      undefined, which means that the compiler may assume that it does
7382      not happen.  This permits various optimizations.  For example, the
7383      compiler assumes that an expression like `i + 10 > i' is always
7384      true for signed `i'.  This assumption is only valid if signed
7385      overflow is undefined, as the expression is false if `i + 10'
7386      overflows when using twos complement arithmetic.  When this option
7387      is in effect any attempt to determine whether an operation on
7388      signed numbers overflows must be written carefully to not actually
7389      involve overflow.
7390
7391      This option also allows the compiler to assume strict pointer
7392      semantics: given a pointer to an object, if adding an offset to
7393      that pointer does not produce a pointer to the same object, the
7394      addition is undefined.  This permits the compiler to conclude that
7395      `p + u > p' is always true for a pointer `p' and unsigned integer
7396      `u'.  This assumption is only valid because pointer wraparound is
7397      undefined, as the expression is false if `p + u' overflows using
7398      twos complement arithmetic.
7399
7400      See also the `-fwrapv' option.  Using `-fwrapv' means that integer
7401      signed overflow is fully defined: it wraps.  When `-fwrapv' is
7402      used, there is no difference between `-fstrict-overflow' and
7403      `-fno-strict-overflow' for integers.  With `-fwrapv' certain types
7404      of overflow are permitted.  For example, if the compiler gets an
7405      overflow when doing arithmetic on constants, the overflowed value
7406      can still be used with `-fwrapv', but not otherwise.
7407
7408      The `-fstrict-overflow' option is enabled at levels `-O2', `-O3',
7409      `-Os'.
7410
7411 `-falign-functions'
7412 `-falign-functions=N'
7413      Align the start of functions to the next power-of-two greater than
7414      N, skipping up to N bytes.  For instance, `-falign-functions=32'
7415      aligns functions to the next 32-byte boundary, but
7416      `-falign-functions=24' aligns to the next 32-byte boundary only if
7417      this can be done by skipping 23 bytes or less.
7418
7419      `-fno-align-functions' and `-falign-functions=1' are equivalent
7420      and mean that functions are not aligned.
7421
7422      Some assemblers only support this flag when N is a power of two;
7423      in that case, it is rounded up.
7424
7425      If N is not specified or is zero, use a machine-dependent default.
7426
7427      Enabled at levels `-O2', `-O3'.
7428
7429 `-falign-labels'
7430 `-falign-labels=N'
7431      Align all branch targets to a power-of-two boundary, skipping up to
7432      N bytes like `-falign-functions'.  This option can easily make
7433      code slower, because it must insert dummy operations for when the
7434      branch target is reached in the usual flow of the code.
7435
7436      `-fno-align-labels' and `-falign-labels=1' are equivalent and mean
7437      that labels are not aligned.
7438
7439      If `-falign-loops' or `-falign-jumps' are applicable and are
7440      greater than this value, then their values are used instead.
7441
7442      If N is not specified or is zero, use a machine-dependent default
7443      which is very likely to be `1', meaning no alignment.
7444
7445      Enabled at levels `-O2', `-O3'.
7446
7447 `-falign-loops'
7448 `-falign-loops=N'
7449      Align loops to a power-of-two boundary, skipping up to N bytes
7450      like `-falign-functions'.  If the loops are executed many times,
7451      this makes up for any execution of the dummy operations.
7452
7453      `-fno-align-loops' and `-falign-loops=1' are equivalent and mean
7454      that loops are not aligned.
7455
7456      If N is not specified or is zero, use a machine-dependent default.
7457
7458      Enabled at levels `-O2', `-O3'.
7459
7460 `-falign-jumps'
7461 `-falign-jumps=N'
7462      Align branch targets to a power-of-two boundary, for branch targets
7463      where the targets can only be reached by jumping, skipping up to N
7464      bytes like `-falign-functions'.  In this case, no dummy operations
7465      need be executed.
7466
7467      `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean
7468      that loops are not aligned.
7469
7470      If N is not specified or is zero, use a machine-dependent default.
7471
7472      Enabled at levels `-O2', `-O3'.
7473
7474 `-funit-at-a-time'
7475      This option is left for compatibility reasons. `-funit-at-a-time'
7476      has no effect, while `-fno-unit-at-a-time' implies
7477      `-fno-toplevel-reorder' and `-fno-section-anchors'.
7478
7479      Enabled by default.
7480
7481 `-fno-toplevel-reorder'
7482      Do not reorder top-level functions, variables, and `asm'
7483      statements.  Output them in the same order that they appear in the
7484      input file.  When this option is used, unreferenced static
7485      variables are not removed.  This option is intended to support
7486      existing code that relies on a particular ordering.  For new code,
7487      it is better to use attributes.
7488
7489      Enabled at level `-O0'.  When disabled explicitly, it also implies
7490      `-fno-section-anchors', which is otherwise enabled at `-O0' on some
7491      targets.
7492
7493 `-fweb'
7494      Constructs webs as commonly used for register allocation purposes
7495      and assign each web individual pseudo register.  This allows the
7496      register allocation pass to operate on pseudos directly, but also
7497      strengthens several other optimization passes, such as CSE, loop
7498      optimizer and trivial dead code remover.  It can, however, make
7499      debugging impossible, since variables no longer stay in a "home
7500      register".
7501
7502      Enabled by default with `-funroll-loops'.
7503
7504 `-fwhole-program'
7505      Assume that the current compilation unit represents the whole
7506      program being compiled.  All public functions and variables with
7507      the exception of `main' and those merged by attribute
7508      `externally_visible' become static functions and in effect are
7509      optimized more aggressively by interprocedural optimizers.
7510
7511      This option should not be used in combination with `-flto'.
7512      Instead relying on a linker plugin should provide safer and more
7513      precise information.
7514
7515 `-flto[=N]'
7516      This option runs the standard link-time optimizer.  When invoked
7517      with source code, it generates GIMPLE (one of GCC's internal
7518      representations) and writes it to special ELF sections in the
7519      object file.  When the object files are linked together, all the
7520      function bodies are read from these ELF sections and instantiated
7521      as if they had been part of the same translation unit.
7522
7523      To use the link-time optimizer, `-flto' needs to be specified at
7524      compile time and during the final link.  For example:
7525
7526           gcc -c -O2 -flto foo.c
7527           gcc -c -O2 -flto bar.c
7528           gcc -o myprog -flto -O2 foo.o bar.o
7529
7530      The first two invocations to GCC save a bytecode representation of
7531      GIMPLE into special ELF sections inside `foo.o' and `bar.o'.  The
7532      final invocation reads the GIMPLE bytecode from `foo.o' and
7533      `bar.o', merges the two files into a single internal image, and
7534      compiles the result as usual.  Since both `foo.o' and `bar.o' are
7535      merged into a single image, this causes all the interprocedural
7536      analyses and optimizations in GCC to work across the two files as
7537      if they were a single one.  This means, for example, that the
7538      inliner is able to inline functions in `bar.o' into functions in
7539      `foo.o' and vice-versa.
7540
7541      Another (simpler) way to enable link-time optimization is:
7542
7543           gcc -o myprog -flto -O2 foo.c bar.c
7544
7545      The above generates bytecode for `foo.c' and `bar.c', merges them
7546      together into a single GIMPLE representation and optimizes them as
7547      usual to produce `myprog'.
7548
7549      The only important thing to keep in mind is that to enable
7550      link-time optimizations the `-flto' flag needs to be passed to
7551      both the compile and the link commands.
7552
7553      To make whole program optimization effective, it is necessary to
7554      make certain whole program assumptions.  The compiler needs to know
7555      what functions and variables can be accessed by libraries and
7556      runtime outside of the link-time optimized unit.  When supported
7557      by the linker, the linker plugin (see `-fuse-linker-plugin')
7558      passes information to the compiler about used and externally
7559      visible symbols.  When the linker plugin is not available,
7560      `-fwhole-program' should be used to allow the compiler to make
7561      these assumptions, which leads to more aggressive optimization
7562      decisions.
7563
7564      Note that when a file is compiled with `-flto', the generated
7565      object file is larger than a regular object file because it
7566      contains GIMPLE bytecodes and the usual final code.  This means
7567      that object files with LTO information can be linked as normal
7568      object files; if `-flto' is not passed to the linker, no
7569      interprocedural optimizations are applied.
7570
7571      Additionally, the optimization flags used to compile individual
7572      files are not necessarily related to those used at link time.  For
7573      instance,
7574
7575           gcc -c -O0 -flto foo.c
7576           gcc -c -O0 -flto bar.c
7577           gcc -o myprog -flto -O3 foo.o bar.o
7578
7579      This produces individual object files with unoptimized assembler
7580      code, but the resulting binary `myprog' is optimized at `-O3'.
7581      If, instead, the final binary is generated without `-flto', then
7582      `myprog' is not optimized.
7583
7584      When producing the final binary with `-flto', GCC only applies
7585      link-time optimizations to those files that contain bytecode.
7586      Therefore, you can mix and match object files and libraries with
7587      GIMPLE bytecodes and final object code.  GCC automatically selects
7588      which files to optimize in LTO mode and which files to link without
7589      further processing.
7590
7591      There are some code generation flags preserved by GCC when
7592      generating bytecodes, as they need to be used during the final link
7593      stage.  Currently, the following options are saved into the GIMPLE
7594      bytecode files: `-fPIC', `-fcommon' and all the `-m' target flags.
7595
7596      At link time, these options are read in and reapplied.  Note that
7597      the current implementation makes no attempt to recognize
7598      conflicting values for these options.  If different files have
7599      conflicting option values (e.g., one file is compiled with `-fPIC'
7600      and another isn't), the compiler simply uses the last value read
7601      from the bytecode files.  It is recommended, then, that you
7602      compile all the files participating in the same link with the same
7603      options.
7604
7605      If LTO encounters objects with C linkage declared with incompatible
7606      types in separate translation units to be linked together
7607      (undefined behavior according to ISO C99 6.2.7), a non-fatal
7608      diagnostic may be issued.  The behavior is still undefined at run
7609      time.
7610
7611      Another feature of LTO is that it is possible to apply
7612      interprocedural optimizations on files written in different
7613      languages.  This requires support in the language front end.
7614      Currently, the C, C++ and Fortran front ends are capable of
7615      emitting GIMPLE bytecodes, so something like this should work:
7616
7617           gcc -c -flto foo.c
7618           g++ -c -flto bar.cc
7619           gfortran -c -flto baz.f90
7620           g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
7621
7622      Notice that the final link is done with `g++' to get the C++
7623      runtime libraries and `-lgfortran' is added to get the Fortran
7624      runtime libraries.  In general, when mixing languages in LTO mode,
7625      you should use the same link command options as when mixing
7626      languages in a regular (non-LTO) compilation; all you need to add
7627      is `-flto' to all the compile and link commands.
7628
7629      If object files containing GIMPLE bytecode are stored in a library
7630      archive, say `libfoo.a', it is possible to extract and use them in
7631      an LTO link if you are using a linker with plugin support.  To
7632      enable this feature, use the flag `-fuse-linker-plugin' at link
7633      time:
7634
7635           gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
7636
7637      With the linker plugin enabled, the linker extracts the needed
7638      GIMPLE files from `libfoo.a' and passes them on to the running GCC
7639      to make them part of the aggregated GIMPLE image to be optimized.
7640
7641      If you are not using a linker with plugin support and/or do not
7642      enable the linker plugin, then the objects inside `libfoo.a' are
7643      extracted and linked as usual, but they do not participate in the
7644      LTO optimization process.
7645
7646      Link-time optimizations do not require the presence of the whole
7647      program to operate.  If the program does not require any symbols
7648      to be exported, it is possible to combine `-flto' and
7649      `-fwhole-program' to allow the interprocedural optimizers to use
7650      more aggressive assumptions which may lead to improved
7651      optimization opportunities.  Use of `-fwhole-program' is not
7652      needed when linker plugin is active (see `-fuse-linker-plugin').
7653
7654      The current implementation of LTO makes no attempt to generate
7655      bytecode that is portable between different types of hosts.  The
7656      bytecode files are versioned and there is a strict version check,
7657      so bytecode files generated in one version of GCC will not work
7658      with an older/newer version of GCC.
7659
7660      Link-time optimization does not work well with generation of
7661      debugging information.  Combining `-flto' with `-g' is currently
7662      experimental and expected to produce wrong results.
7663
7664      If you specify the optional N, the optimization and code
7665      generation done at link time is executed in parallel using N
7666      parallel jobs by utilizing an installed `make' program.  The
7667      environment variable `MAKE' may be used to override the program
7668      used.  The default value for N is 1.
7669
7670      You can also specify `-flto=jobserver' to use GNU make's job
7671      server mode to determine the number of parallel jobs. This is
7672      useful when the Makefile calling GCC is already executing in
7673      parallel.  You must prepend a `+' to the command recipe in the
7674      parent Makefile for this to work.  This option likely only works
7675      if `MAKE' is GNU make.
7676
7677      This option is disabled by default.
7678
7679 `-flto-partition=ALG'
7680      Specify the partitioning algorithm used by the link-time optimizer.
7681      The value is either `1to1' to specify a partitioning mirroring the
7682      original source files or `balanced' to specify partitioning into
7683      equally sized chunks (whenever possible) or `max' to create new
7684      partition for every symbol where possible.  Specifying `none' as
7685      an algorithm disables partitioning and streaming completely.  The
7686      default value is `balanced'. While `1to1' can be used as an
7687      workaround for various code ordering issues, the `max'
7688      partitioning is intended for internal testing only.
7689
7690 `-flto-compression-level=N'
7691      This option specifies the level of compression used for
7692      intermediate language written to LTO object files, and is only
7693      meaningful in conjunction with LTO mode (`-flto').  Valid values
7694      are 0 (no compression) to 9 (maximum compression).  Values outside
7695      this range are clamped to either 0 or 9.  If the option is not
7696      given, a default balanced compression setting is used.
7697
7698 `-flto-report'
7699      Prints a report with internal details on the workings of the
7700      link-time optimizer.  The contents of this report vary from
7701      version to version.  It is meant to be useful to GCC developers
7702      when processing object files in LTO mode (via `-flto').
7703
7704      Disabled by default.
7705
7706 `-fuse-linker-plugin'
7707      Enables the use of a linker plugin during link-time optimization.
7708      This option relies on plugin support in the linker, which is
7709      available in gold or in GNU ld 2.21 or newer.
7710
7711      This option enables the extraction of object files with GIMPLE
7712      bytecode out of library archives. This improves the quality of
7713      optimization by exposing more code to the link-time optimizer.
7714      This information specifies what symbols can be accessed externally
7715      (by non-LTO object or during dynamic linking).  Resulting code
7716      quality improvements on binaries (and shared libraries that use
7717      hidden visibility) are similar to `-fwhole-program'.  See `-flto'
7718      for a description of the effect of this flag and how to use it.
7719
7720      This option is enabled by default when LTO support in GCC is
7721      enabled and GCC was configured for use with a linker supporting
7722      plugins (GNU ld 2.21 or newer or gold).
7723
7724 `-ffat-lto-objects'
7725      Fat LTO objects are object files that contain both the
7726      intermediate language and the object code. This makes them usable
7727      for both LTO linking and normal linking. This option is effective
7728      only when compiling with `-flto' and is ignored at link time.
7729
7730      `-fno-fat-lto-objects' improves compilation time over plain LTO,
7731      but requires the complete toolchain to be aware of LTO. It
7732      requires a linker with linker plugin support for basic
7733      functionality.  Additionally, `nm', `ar' and `ranlib' need to
7734      support linker plugins to allow a full-featured build environment
7735      (capable of building static libraries etc).  GCC provides the
7736      `gcc-ar', `gcc-nm', `gcc-ranlib' wrappers to pass the right options
7737      to these tools. With non fat LTO makefiles need to be modified to
7738      use them.
7739
7740      The default is `-ffat-lto-objects' but this default is intended to
7741      change in future releases when linker plugin enabled environments
7742      become more common.
7743
7744 `-fcompare-elim'
7745      After register allocation and post-register allocation instruction
7746      splitting, identify arithmetic instructions that compute processor
7747      flags similar to a comparison operation based on that arithmetic.
7748      If possible, eliminate the explicit comparison operation.
7749
7750      This pass only applies to certain targets that cannot explicitly
7751      represent the comparison operation before register allocation is
7752      complete.
7753
7754      Enabled at levels `-O', `-O2', `-O3', `-Os'.
7755
7756 `-fuse-ld=bfd'
7757      Use the `bfd' linker instead of the default linker.
7758
7759 `-fuse-ld=gold'
7760      Use the `gold' linker instead of the default linker.
7761
7762 `-fcprop-registers'
7763      After register allocation and post-register allocation instruction
7764      splitting, perform a copy-propagation pass to try to reduce
7765      scheduling dependencies and occasionally eliminate the copy.
7766
7767      Enabled at levels `-O', `-O2', `-O3', `-Os'.
7768
7769 `-fprofile-correction'
7770      Profiles collected using an instrumented binary for multi-threaded
7771      programs may be inconsistent due to missed counter updates. When
7772      this option is specified, GCC uses heuristics to correct or smooth
7773      out such inconsistencies. By default, GCC emits an error message
7774      when an inconsistent profile is detected.
7775
7776 `-fprofile-dir=PATH'
7777      Set the directory to search for the profile data files in to PATH.
7778      This option affects only the profile data generated by
7779      `-fprofile-generate', `-ftest-coverage', `-fprofile-arcs' and used
7780      by `-fprofile-use' and `-fbranch-probabilities' and its related
7781      options.  Both absolute and relative paths can be used.  By
7782      default, GCC uses the current directory as PATH, thus the profile
7783      data file appears in the same directory as the object file.
7784
7785 `-fprofile-generate'
7786 `-fprofile-generate=PATH'
7787      Enable options usually used for instrumenting application to
7788      produce profile useful for later recompilation with profile
7789      feedback based optimization.  You must use `-fprofile-generate'
7790      both when compiling and when linking your program.
7791
7792      The following options are enabled: `-fprofile-arcs',
7793      `-fprofile-values', `-fvpt'.
7794
7795      If PATH is specified, GCC looks at the PATH to find the profile
7796      feedback data files. See `-fprofile-dir'.
7797
7798 `-fprofile-use'
7799 `-fprofile-use=PATH'
7800      Enable profile feedback directed optimizations, and optimizations
7801      generally profitable only with profile feedback available.
7802
7803      The following options are enabled: `-fbranch-probabilities',
7804      `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer',
7805      `-ftree-vectorize', `ftree-loop-distribute-patterns'
7806
7807      By default, GCC emits an error message if the feedback profiles do
7808      not match the source code.  This error can be turned into a
7809      warning by using `-Wcoverage-mismatch'.  Note this may result in
7810      poorly optimized code.
7811
7812      If PATH is specified, GCC looks at the PATH to find the profile
7813      feedback data files. See `-fprofile-dir'.
7814
7815  The following options control compiler behavior regarding
7816 floating-point arithmetic.  These options trade off between speed and
7817 correctness.  All must be specifically enabled.
7818
7819 `-ffloat-store'
7820      Do not store floating-point variables in registers, and inhibit
7821      other options that might change whether a floating-point value is
7822      taken from a register or memory.
7823
7824      This option prevents undesirable excess precision on machines such
7825      as the 68000 where the floating registers (of the 68881) keep more
7826      precision than a `double' is supposed to have.  Similarly for the
7827      x86 architecture.  For most programs, the excess precision does
7828      only good, but a few programs rely on the precise definition of
7829      IEEE floating point.  Use `-ffloat-store' for such programs, after
7830      modifying them to store all pertinent intermediate computations
7831      into variables.
7832
7833 `-fexcess-precision=STYLE'
7834      This option allows further control over excess precision on
7835      machines where floating-point registers have more precision than
7836      the IEEE `float' and `double' types and the processor does not
7837      support operations rounding to those types.  By default,
7838      `-fexcess-precision=fast' is in effect; this means that operations
7839      are carried out in the precision of the registers and that it is
7840      unpredictable when rounding to the types specified in the source
7841      code takes place.  When compiling C, if
7842      `-fexcess-precision=standard' is specified then excess precision
7843      follows the rules specified in ISO C99; in particular, both casts
7844      and assignments cause values to be rounded to their semantic types
7845      (whereas `-ffloat-store' only affects assignments).  This option
7846      is enabled by default for C if a strict conformance option such as
7847      `-std=c99' is used.
7848
7849      `-fexcess-precision=standard' is not implemented for languages
7850      other than C, and has no effect if `-funsafe-math-optimizations'
7851      or `-ffast-math' is specified.  On the x86, it also has no effect
7852      if `-mfpmath=sse' or `-mfpmath=sse+387' is specified; in the
7853      former case, IEEE semantics apply without excess precision, and in
7854      the latter, rounding is unpredictable.
7855
7856 `-ffast-math'
7857      Sets `-fno-math-errno', `-funsafe-math-optimizations',
7858      `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans'
7859      and `-fcx-limited-range'.
7860
7861      This option causes the preprocessor macro `__FAST_MATH__' to be
7862      defined.
7863
7864      This option is not turned on by any `-O' option besides `-Ofast'
7865      since it can result in incorrect output for programs that depend
7866      on an exact implementation of IEEE or ISO rules/specifications for
7867      math functions. It may, however, yield faster code for programs
7868      that do not require the guarantees of these specifications.
7869
7870 `-fno-math-errno'
7871      Do not set `errno' after calling math functions that are executed
7872      with a single instruction, e.g., `sqrt'.  A program that relies on
7873      IEEE exceptions for math error handling may want to use this flag
7874      for speed while maintaining IEEE arithmetic compatibility.
7875
7876      This option is not turned on by any `-O' option since it can
7877      result in incorrect output for programs that depend on an exact
7878      implementation of IEEE or ISO rules/specifications for math
7879      functions. It may, however, yield faster code for programs that do
7880      not require the guarantees of these specifications.
7881
7882      The default is `-fmath-errno'.
7883
7884      On Darwin systems, the math library never sets `errno'.  There is
7885      therefore no reason for the compiler to consider the possibility
7886      that it might, and `-fno-math-errno' is the default.
7887
7888 `-funsafe-math-optimizations'
7889      Allow optimizations for floating-point arithmetic that (a) assume
7890      that arguments and results are valid and (b) may violate IEEE or
7891      ANSI standards.  When used at link-time, it may include libraries
7892      or startup files that change the default FPU control word or other
7893      similar optimizations.
7894
7895      This option is not turned on by any `-O' option since it can
7896      result in incorrect output for programs that depend on an exact
7897      implementation of IEEE or ISO rules/specifications for math
7898      functions. It may, however, yield faster code for programs that do
7899      not require the guarantees of these specifications.  Enables
7900      `-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math'
7901      and `-freciprocal-math'.
7902
7903      The default is `-fno-unsafe-math-optimizations'.
7904
7905 `-fassociative-math'
7906      Allow re-association of operands in series of floating-point
7907      operations.  This violates the ISO C and C++ language standard by
7908      possibly changing computation result.  NOTE: re-ordering may
7909      change the sign of zero as well as ignore NaNs and inhibit or
7910      create underflow or overflow (and thus cannot be used on code that
7911      relies on rounding behavior like `(x + 2**52) - 2**52'.  May also
7912      reorder floating-point comparisons and thus may not be used when
7913      ordered comparisons are required.  This option requires that both
7914      `-fno-signed-zeros' and `-fno-trapping-math' be in effect.
7915      Moreover, it doesn't make much sense with `-frounding-math'. For
7916      Fortran the option is automatically enabled when both
7917      `-fno-signed-zeros' and `-fno-trapping-math' are in effect.
7918
7919      The default is `-fno-associative-math'.
7920
7921 `-freciprocal-math'
7922      Allow the reciprocal of a value to be used instead of dividing by
7923      the value if this enables optimizations.  For example `x / y' can
7924      be replaced with `x * (1/y)', which is useful if `(1/y)' is
7925      subject to common subexpression elimination.  Note that this loses
7926      precision and increases the number of flops operating on the value.
7927
7928      The default is `-fno-reciprocal-math'.
7929
7930 `-ffinite-math-only'
7931      Allow optimizations for floating-point arithmetic that assume that
7932      arguments and results are not NaNs or +-Infs.
7933
7934      This option is not turned on by any `-O' option since it can
7935      result in incorrect output for programs that depend on an exact
7936      implementation of IEEE or ISO rules/specifications for math
7937      functions. It may, however, yield faster code for programs that do
7938      not require the guarantees of these specifications.
7939
7940      The default is `-fno-finite-math-only'.
7941
7942 `-fno-signed-zeros'
7943      Allow optimizations for floating-point arithmetic that ignore the
7944      signedness of zero.  IEEE arithmetic specifies the behavior of
7945      distinct +0.0 and -0.0 values, which then prohibits simplification
7946      of expressions such as x+0.0 or 0.0*x (even with
7947      `-ffinite-math-only').  This option implies that the sign of a
7948      zero result isn't significant.
7949
7950      The default is `-fsigned-zeros'.
7951
7952 `-fno-trapping-math'
7953      Compile code assuming that floating-point operations cannot
7954      generate user-visible traps.  These traps include division by
7955      zero, overflow, underflow, inexact result and invalid operation.
7956      This option requires that `-fno-signaling-nans' be in effect.
7957      Setting this option may allow faster code if one relies on
7958      "non-stop" IEEE arithmetic, for example.
7959
7960      This option should never be turned on by any `-O' option since it
7961      can result in incorrect output for programs that depend on an
7962      exact implementation of IEEE or ISO rules/specifications for math
7963      functions.
7964
7965      The default is `-ftrapping-math'.
7966
7967 `-frounding-math'
7968      Disable transformations and optimizations that assume default
7969      floating-point rounding behavior.  This is round-to-zero for all
7970      floating point to integer conversions, and round-to-nearest for
7971      all other arithmetic truncations.  This option should be specified
7972      for programs that change the FP rounding mode dynamically, or that
7973      may be executed with a non-default rounding mode.  This option
7974      disables constant folding of floating-point expressions at compile
7975      time (which may be affected by rounding mode) and arithmetic
7976      transformations that are unsafe in the presence of sign-dependent
7977      rounding modes.
7978
7979      The default is `-fno-rounding-math'.
7980
7981      This option is experimental and does not currently guarantee to
7982      disable all GCC optimizations that are affected by rounding mode.
7983      Future versions of GCC may provide finer control of this setting
7984      using C99's `FENV_ACCESS' pragma.  This command-line option will
7985      be used to specify the default state for `FENV_ACCESS'.
7986
7987 `-fsignaling-nans'
7988      Compile code assuming that IEEE signaling NaNs may generate
7989      user-visible traps during floating-point operations.  Setting this
7990      option disables optimizations that may change the number of
7991      exceptions visible with signaling NaNs.  This option implies
7992      `-ftrapping-math'.
7993
7994      This option causes the preprocessor macro `__SUPPORT_SNAN__' to be
7995      defined.
7996
7997      The default is `-fno-signaling-nans'.
7998
7999      This option is experimental and does not currently guarantee to
8000      disable all GCC optimizations that affect signaling NaN behavior.
8001
8002 `-fsingle-precision-constant'
8003      Treat floating-point constants as single precision instead of
8004      implicitly converting them to double-precision constants.
8005
8006 `-fcx-limited-range'
8007      When enabled, this option states that a range reduction step is not
8008      needed when performing complex division.  Also, there is no
8009      checking whether the result of a complex multiplication or
8010      division is `NaN + I*NaN', with an attempt to rescue the situation
8011      in that case.  The default is `-fno-cx-limited-range', but is
8012      enabled by `-ffast-math'.
8013
8014      This option controls the default setting of the ISO C99
8015      `CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to
8016      all languages.
8017
8018 `-fcx-fortran-rules'
8019      Complex multiplication and division follow Fortran rules.  Range
8020      reduction is done as part of complex division, but there is no
8021      checking whether the result of a complex multiplication or
8022      division is `NaN + I*NaN', with an attempt to rescue the situation
8023      in that case.
8024
8025      The default is `-fno-cx-fortran-rules'.
8026
8027
8028  The following options control optimizations that may improve
8029 performance, but are not enabled by any `-O' options.  This section
8030 includes experimental options that may produce broken code.
8031
8032 `-fbranch-probabilities'
8033      After running a program compiled with `-fprofile-arcs' (*note
8034      Options for Debugging Your Program or `gcc': Debugging Options.),
8035      you can compile it a second time using `-fbranch-probabilities',
8036      to improve optimizations based on the number of times each branch
8037      was taken.  When a program compiled with `-fprofile-arcs' exits,
8038      it saves arc execution counts to a file called `SOURCENAME.gcda'
8039      for each source file.  The information in this data file is very
8040      dependent on the structure of the generated code, so you must use
8041      the same source code and the same optimization options for both
8042      compilations.
8043
8044      With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on
8045      each `JUMP_INSN' and `CALL_INSN'.  These can be used to improve
8046      optimization.  Currently, they are only used in one place: in
8047      `reorg.c', instead of guessing which path a branch is most likely
8048      to take, the `REG_BR_PROB' values are used to exactly determine
8049      which path is taken more often.
8050
8051 `-fprofile-values'
8052      If combined with `-fprofile-arcs', it adds code so that some data
8053      about values of expressions in the program is gathered.
8054
8055      With `-fbranch-probabilities', it reads back the data gathered
8056      from profiling values of expressions for usage in optimizations.
8057
8058      Enabled with `-fprofile-generate' and `-fprofile-use'.
8059
8060 `-fvpt'
8061      If combined with `-fprofile-arcs', this option instructs the
8062      compiler to add code to gather information about values of
8063      expressions.
8064
8065      With `-fbranch-probabilities', it reads back the data gathered and
8066      actually performs the optimizations based on them.  Currently the
8067      optimizations include specialization of division operations using
8068      the knowledge about the value of the denominator.
8069
8070 `-frename-registers'
8071      Attempt to avoid false dependencies in scheduled code by making use
8072      of registers left over after register allocation.  This
8073      optimization most benefits processors with lots of registers.
8074      Depending on the debug information format adopted by the target,
8075      however, it can make debugging impossible, since variables no
8076      longer stay in a "home register".
8077
8078      Enabled by default with `-funroll-loops' and `-fpeel-loops'.
8079
8080 `-ftracer'
8081      Perform tail duplication to enlarge superblock size.  This
8082      transformation simplifies the control flow of the function
8083      allowing other optimizations to do a better job.
8084
8085      Enabled with `-fprofile-use'.
8086
8087 `-funroll-loops'
8088      Unroll loops whose number of iterations can be determined at
8089      compile time or upon entry to the loop.  `-funroll-loops' implies
8090      `-frerun-cse-after-loop', `-fweb' and `-frename-registers'.  It
8091      also turns on complete loop peeling (i.e. complete removal of
8092      loops with a small constant number of iterations).  This option
8093      makes code larger, and may or may not make it run faster.
8094
8095      Enabled with `-fprofile-use'.
8096
8097 `-funroll-all-loops'
8098      Unroll all loops, even if their number of iterations is uncertain
8099      when the loop is entered.  This usually makes programs run more
8100      slowly.  `-funroll-all-loops' implies the same options as
8101      `-funroll-loops'.
8102
8103 `-fpeel-loops'
8104      Peels loops for which there is enough information that they do not
8105      roll much (from profile feedback).  It also turns on complete loop
8106      peeling (i.e. complete removal of loops with small constant number
8107      of iterations).
8108
8109      Enabled with `-fprofile-use'.
8110
8111 `-fmove-loop-invariants'
8112      Enables the loop invariant motion pass in the RTL loop optimizer.
8113      Enabled at level `-O1'
8114
8115 `-funswitch-loops'
8116      Move branches with loop invariant conditions out of the loop, with
8117      duplicates of the loop on both branches (modified according to
8118      result of the condition).
8119
8120 `-ffunction-sections'
8121 `-fdata-sections'
8122      Place each function or data item into its own section in the output
8123      file if the target supports arbitrary sections.  The name of the
8124      function or the name of the data item determines the section's name
8125      in the output file.
8126
8127      Use these options on systems where the linker can perform
8128      optimizations to improve locality of reference in the instruction
8129      space.  Most systems using the ELF object format and SPARC
8130      processors running Solaris 2 have linkers with such optimizations.
8131      AIX may have these optimizations in the future.
8132
8133      Only use these options when there are significant benefits from
8134      doing so.  When you specify these options, the assembler and linker
8135      create larger object and executable files and are also slower.
8136      You cannot use `gprof' on all systems if you specify this option,
8137      and you may have problems with debugging if you specify both this
8138      option and `-g'.
8139
8140 `-fbranch-target-load-optimize'
8141      Perform branch target register load optimization before prologue /
8142      epilogue threading.  The use of target registers can typically be
8143      exposed only during reload, thus hoisting loads out of loops and
8144      doing inter-block scheduling needs a separate optimization pass.
8145
8146 `-fbranch-target-load-optimize2'
8147      Perform branch target register load optimization after prologue /
8148      epilogue threading.
8149
8150 `-fbtr-bb-exclusive'
8151      When performing branch target register load optimization, don't
8152      reuse branch target registers within any basic block.
8153
8154 `-fstack-protector'
8155      Emit extra code to check for buffer overflows, such as stack
8156      smashing attacks.  This is done by adding a guard variable to
8157      functions with vulnerable objects.  This includes functions that
8158      call `alloca', and functions with buffers larger than 8 bytes.
8159      The guards are initialized when a function is entered and then
8160      checked when the function exits.  If a guard check fails, an error
8161      message is printed and the program exits.
8162
8163 `-fstack-protector-all'
8164      Like `-fstack-protector' except that all functions are protected.
8165
8166 `-fsection-anchors'
8167      Try to reduce the number of symbolic address calculations by using
8168      shared "anchor" symbols to address nearby objects.  This
8169      transformation can help to reduce the number of GOT entries and
8170      GOT accesses on some targets.
8171
8172      For example, the implementation of the following function `foo':
8173
8174           static int a, b, c;
8175           int foo (void) { return a + b + c; }
8176
8177      usually calculates the addresses of all three variables, but if you
8178      compile it with `-fsection-anchors', it accesses the variables
8179      from a common anchor point instead.  The effect is similar to the
8180      following pseudocode (which isn't valid C):
8181
8182           int foo (void)
8183           {
8184             register int *xr = &x;
8185             return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
8186           }
8187
8188      Not all targets support this option.
8189
8190 `--param NAME=VALUE'
8191      In some places, GCC uses various constants to control the amount of
8192      optimization that is done.  For example, GCC does not inline
8193      functions that contain more than a certain number of instructions.
8194      You can control some of these constants on the command line using
8195      the `--param' option.
8196
8197      The names of specific parameters, and the meaning of the values,
8198      are tied to the internals of the compiler, and are subject to
8199      change without notice in future releases.
8200
8201      In each case, the VALUE is an integer.  The allowable choices for
8202      NAME are:
8203
8204     `predictable-branch-outcome'
8205           When branch is predicted to be taken with probability lower
8206           than this threshold (in percent), then it is considered well
8207           predictable. The default is 10.
8208
8209     `max-crossjump-edges'
8210           The maximum number of incoming edges to consider for
8211           cross-jumping.  The algorithm used by `-fcrossjumping' is
8212           O(N^2) in the number of edges incoming to each block.
8213           Increasing values mean more aggressive optimization, making
8214           the compilation time increase with probably small improvement
8215           in executable size.
8216
8217     `min-crossjump-insns'
8218           The minimum number of instructions that must be matched at
8219           the end of two blocks before cross-jumping is performed on
8220           them.  This value is ignored in the case where all
8221           instructions in the block being cross-jumped from are
8222           matched.  The default value is 5.
8223
8224     `max-grow-copy-bb-insns'
8225           The maximum code size expansion factor when copying basic
8226           blocks instead of jumping.  The expansion is relative to a
8227           jump instruction.  The default value is 8.
8228
8229     `max-goto-duplication-insns'
8230           The maximum number of instructions to duplicate to a block
8231           that jumps to a computed goto.  To avoid O(N^2) behavior in a
8232           number of passes, GCC factors computed gotos early in the
8233           compilation process, and unfactors them as late as possible.
8234           Only computed jumps at the end of a basic blocks with no more
8235           than max-goto-duplication-insns are unfactored.  The default
8236           value is 8.
8237
8238     `max-delay-slot-insn-search'
8239           The maximum number of instructions to consider when looking
8240           for an instruction to fill a delay slot.  If more than this
8241           arbitrary number of instructions are searched, the time
8242           savings from filling the delay slot are minimal, so stop
8243           searching.  Increasing values mean more aggressive
8244           optimization, making the compilation time increase with
8245           probably small improvement in execution time.
8246
8247     `max-delay-slot-live-search'
8248           When trying to fill delay slots, the maximum number of
8249           instructions to consider when searching for a block with
8250           valid live register information.  Increasing this arbitrarily
8251           chosen value means more aggressive optimization, increasing
8252           the compilation time.  This parameter should be removed when
8253           the delay slot code is rewritten to maintain the control-flow
8254           graph.
8255
8256     `max-gcse-memory'
8257           The approximate maximum amount of memory that can be
8258           allocated in order to perform the global common subexpression
8259           elimination optimization.  If more memory than specified is
8260           required, the optimization is not done.
8261
8262     `max-gcse-insertion-ratio'
8263           If the ratio of expression insertions to deletions is larger
8264           than this value for any expression, then RTL PRE inserts or
8265           removes the expression and thus leaves partially redundant
8266           computations in the instruction stream.  The default value is
8267           20.
8268
8269     `max-pending-list-length'
8270           The maximum number of pending dependencies scheduling allows
8271           before flushing the current state and starting over.  Large
8272           functions with few branches or calls can create excessively
8273           large lists which needlessly consume memory and resources.
8274
8275     `max-modulo-backtrack-attempts'
8276           The maximum number of backtrack attempts the scheduler should
8277           make when modulo scheduling a loop.  Larger values can
8278           exponentially increase compilation time.
8279
8280     `max-inline-insns-single'
8281           Several parameters control the tree inliner used in GCC.
8282           This number sets the maximum number of instructions (counted
8283           in GCC's internal representation) in a single function that
8284           the tree inliner considers for inlining.  This only affects
8285           functions declared inline and methods implemented in a class
8286           declaration (C++).  The default value is 400.
8287
8288     `max-inline-insns-auto'
8289           When you use `-finline-functions' (included in `-O3'), a lot
8290           of functions that would otherwise not be considered for
8291           inlining by the compiler are investigated.  To those
8292           functions, a different (more restrictive) limit compared to
8293           functions declared inline can be applied.  The default value
8294           is 40.
8295
8296     `inline-min-speedup'
8297           When estimated performance improvement of caller + callee
8298           runtime exceeds this threshold (in precent), the function can
8299           be inlined regardless the limit on `--param
8300           max-inline-insns-single' and `--param max-inline-insns-auto'.
8301
8302     `large-function-insns'
8303           The limit specifying really large functions.  For functions
8304           larger than this limit after inlining, inlining is
8305           constrained by `--param large-function-growth'.  This
8306           parameter is useful primarily to avoid extreme compilation
8307           time caused by non-linear algorithms used by the back end.
8308           The default value is 2700.
8309
8310     `large-function-growth'
8311           Specifies maximal growth of large function caused by inlining
8312           in percents.  The default value is 100 which limits large
8313           function growth to 2.0 times the original size.
8314
8315     `large-unit-insns'
8316           The limit specifying large translation unit.  Growth caused
8317           by inlining of units larger than this limit is limited by
8318           `--param inline-unit-growth'.  For small units this might be
8319           too tight.  For example, consider a unit consisting of
8320           function A that is inline and B that just calls A three
8321           times.  If B is small relative to A, the growth of unit is
8322           300\% and yet such inlining is very sane.  For very large
8323           units consisting of small inlineable functions, however, the
8324           overall unit growth limit is needed to avoid exponential
8325           explosion of code size.  Thus for smaller units, the size is
8326           increased to `--param large-unit-insns' before applying
8327           `--param inline-unit-growth'.  The default is 10000.
8328
8329     `inline-unit-growth'
8330           Specifies maximal overall growth of the compilation unit
8331           caused by inlining.  The default value is 30 which limits
8332           unit growth to 1.3 times the original size.
8333
8334     `ipcp-unit-growth'
8335           Specifies maximal overall growth of the compilation unit
8336           caused by interprocedural constant propagation.  The default
8337           value is 10 which limits unit growth to 1.1 times the
8338           original size.
8339
8340     `large-stack-frame'
8341           The limit specifying large stack frames.  While inlining the
8342           algorithm is trying to not grow past this limit too much.
8343           The default value is 256 bytes.
8344
8345     `large-stack-frame-growth'
8346           Specifies maximal growth of large stack frames caused by
8347           inlining in percents.  The default value is 1000 which limits
8348           large stack frame growth to 11 times the original size.
8349
8350     `max-inline-insns-recursive'
8351     `max-inline-insns-recursive-auto'
8352           Specifies the maximum number of instructions an out-of-line
8353           copy of a self-recursive inline function can grow into by
8354           performing recursive inlining.
8355
8356           For functions declared inline, `--param
8357           max-inline-insns-recursive' is taken into account.  For
8358           functions not declared inline, recursive inlining happens
8359           only when `-finline-functions' (included in `-O3') is enabled
8360           and `--param max-inline-insns-recursive-auto' is used.  The
8361           default value is 450.
8362
8363     `max-inline-recursive-depth'
8364     `max-inline-recursive-depth-auto'
8365           Specifies the maximum recursion depth used for recursive
8366           inlining.
8367
8368           For functions declared inline, `--param
8369           max-inline-recursive-depth' is taken into account.  For
8370           functions not declared inline, recursive inlining happens
8371           only when `-finline-functions' (included in `-O3') is enabled
8372           and `--param max-inline-recursive-depth-auto' is used.  The
8373           default value is 8.
8374
8375     `min-inline-recursive-probability'
8376           Recursive inlining is profitable only for function having
8377           deep recursion in average and can hurt for function having
8378           little recursion depth by increasing the prologue size or
8379           complexity of function body to other optimizers.
8380
8381           When profile feedback is available (see `-fprofile-generate')
8382           the actual recursion depth can be guessed from probability
8383           that function recurses via a given call expression.  This
8384           parameter limits inlining only to call expressions whose
8385           probability exceeds the given threshold (in percents).  The
8386           default value is 10.
8387
8388     `early-inlining-insns'
8389           Specify growth that the early inliner can make.  In effect it
8390           increases the amount of inlining for code having a large
8391           abstraction penalty.  The default value is 10.
8392
8393     `max-early-inliner-iterations'
8394     `max-early-inliner-iterations'
8395           Limit of iterations of the early inliner.  This basically
8396           bounds the number of nested indirect calls the early inliner
8397           can resolve.  Deeper chains are still handled by late
8398           inlining.
8399
8400     `comdat-sharing-probability'
8401     `comdat-sharing-probability'
8402           Probability (in percent) that C++ inline function with comdat
8403           visibility are shared across multiple compilation units.  The
8404           default value is 20.
8405
8406     `min-vect-loop-bound'
8407           The minimum number of iterations under which loops are not
8408           vectorized when `-ftree-vectorize' is used.  The number of
8409           iterations after vectorization needs to be greater than the
8410           value specified by this option to allow vectorization.  The
8411           default value is 0.
8412
8413     `gcse-cost-distance-ratio'
8414           Scaling factor in calculation of maximum distance an
8415           expression can be moved by GCSE optimizations.  This is
8416           currently supported only in the code hoisting pass.  The
8417           bigger the ratio, the more aggressive code hoisting is with
8418           simple expressions, i.e., the expressions that have cost less
8419           than `gcse-unrestricted-cost'.  Specifying 0 disables
8420           hoisting of simple expressions.  The default value is 10.
8421
8422     `gcse-unrestricted-cost'
8423           Cost, roughly measured as the cost of a single typical machine
8424           instruction, at which GCSE optimizations do not constrain the
8425           distance an expression can travel.  This is currently
8426           supported only in the code hoisting pass.  The lesser the
8427           cost, the more aggressive code hoisting is.  Specifying 0
8428           allows all expressions to travel unrestricted distances.  The
8429           default value is 3.
8430
8431     `max-hoist-depth'
8432           The depth of search in the dominator tree for expressions to
8433           hoist.  This is used to avoid quadratic behavior in hoisting
8434           algorithm.  The value of 0 does not limit on the search, but
8435           may slow down compilation of huge functions.  The default
8436           value is 30.
8437
8438     `max-tail-merge-comparisons'
8439           The maximum amount of similar bbs to compare a bb with.  This
8440           is used to avoid quadratic behavior in tree tail merging.
8441           The default value is 10.
8442
8443     `max-tail-merge-iterations'
8444           The maximum amount of iterations of the pass over the
8445           function.  This is used to limit compilation time in tree
8446           tail merging.  The default value is 2.
8447
8448     `max-unrolled-insns'
8449           The maximum number of instructions that a loop may have to be
8450           unrolled.  If a loop is unrolled, this parameter also
8451           determines how many times the loop code is unrolled.
8452
8453     `max-average-unrolled-insns'
8454           The maximum number of instructions biased by probabilities of
8455           their execution that a loop may have to be unrolled.  If a
8456           loop is unrolled, this parameter also determines how many
8457           times the loop code is unrolled.
8458
8459     `max-unroll-times'
8460           The maximum number of unrollings of a single loop.
8461
8462     `max-peeled-insns'
8463           The maximum number of instructions that a loop may have to be
8464           peeled.  If a loop is peeled, this parameter also determines
8465           how many times the loop code is peeled.
8466
8467     `max-peel-times'
8468           The maximum number of peelings of a single loop.
8469
8470     `max-peel-branches'
8471           The maximum number of branches on the hot path through the
8472           peeled sequence.
8473
8474     `max-completely-peeled-insns'
8475           The maximum number of insns of a completely peeled loop.
8476
8477     `max-completely-peel-times'
8478           The maximum number of iterations of a loop to be suitable for
8479           complete peeling.
8480
8481     `max-completely-peel-loop-nest-depth'
8482           The maximum depth of a loop nest suitable for complete
8483           peeling.
8484
8485     `max-unswitch-insns'
8486           The maximum number of insns of an unswitched loop.
8487
8488     `max-unswitch-level'
8489           The maximum number of branches unswitched in a single loop.
8490
8491     `lim-expensive'
8492           The minimum cost of an expensive expression in the loop
8493           invariant motion.
8494
8495     `iv-consider-all-candidates-bound'
8496           Bound on number of candidates for induction variables, below
8497           which all candidates are considered for each use in induction
8498           variable optimizations.  If there are more candidates than
8499           this, only the most relevant ones are considered to avoid
8500           quadratic time complexity.
8501
8502     `iv-max-considered-uses'
8503           The induction variable optimizations give up on loops that
8504           contain more induction variable uses.
8505
8506     `iv-always-prune-cand-set-bound'
8507           If the number of candidates in the set is smaller than this
8508           value, always try to remove unnecessary ivs from the set when
8509           adding a new one.
8510
8511     `scev-max-expr-size'
8512           Bound on size of expressions used in the scalar evolutions
8513           analyzer.  Large expressions slow the analyzer.
8514
8515     `scev-max-expr-complexity'
8516           Bound on the complexity of the expressions in the scalar
8517           evolutions analyzer.  Complex expressions slow the analyzer.
8518
8519     `omega-max-vars'
8520           The maximum number of variables in an Omega constraint system.
8521           The default value is 128.
8522
8523     `omega-max-geqs'
8524           The maximum number of inequalities in an Omega constraint
8525           system.  The default value is 256.
8526
8527     `omega-max-eqs'
8528           The maximum number of equalities in an Omega constraint
8529           system.  The default value is 128.
8530
8531     `omega-max-wild-cards'
8532           The maximum number of wildcard variables that the Omega
8533           solver is able to insert.  The default value is 18.
8534
8535     `omega-hash-table-size'
8536           The size of the hash table in the Omega solver.  The default
8537           value is 550.
8538
8539     `omega-max-keys'
8540           The maximal number of keys used by the Omega solver.  The
8541           default value is 500.
8542
8543     `omega-eliminate-redundant-constraints'
8544           When set to 1, use expensive methods to eliminate all
8545           redundant constraints.  The default value is 0.
8546
8547     `vect-max-version-for-alignment-checks'
8548           The maximum number of run-time checks that can be performed
8549           when doing loop versioning for alignment in the vectorizer.
8550           See option `-ftree-vect-loop-version' for more information.
8551
8552     `vect-max-version-for-alias-checks'
8553           The maximum number of run-time checks that can be performed
8554           when doing loop versioning for alias in the vectorizer.  See
8555           option `-ftree-vect-loop-version' for more information.
8556
8557     `max-iterations-to-track'
8558           The maximum number of iterations of a loop the brute-force
8559           algorithm for analysis of the number of iterations of the
8560           loop tries to evaluate.
8561
8562     `hot-bb-count-ws-permille'
8563           A basic block profile count is considered hot if it
8564           contributes to the given permillage (i.e. 0...1000) of the
8565           entire profiled execution.
8566
8567     `hot-bb-frequency-fraction'
8568           Select fraction of the entry block frequency of executions of
8569           basic block in function given basic block needs to have to be
8570           considered hot.
8571
8572     `max-predicted-iterations'
8573           The maximum number of loop iterations we predict statically.
8574           This is useful in cases where a function contains a single
8575           loop with known bound and another loop with unknown bound.
8576           The known number of iterations is predicted correctly, while
8577           the unknown number of iterations average to roughly 10.  This
8578           means that the loop without bounds appears artificially cold
8579           relative to the other one.
8580
8581     `align-threshold'
8582           Select fraction of the maximal frequency of executions of a
8583           basic block in a function to align the basic block.
8584
8585     `align-loop-iterations'
8586           A loop expected to iterate at least the selected number of
8587           iterations is aligned.
8588
8589     `tracer-dynamic-coverage'
8590     `tracer-dynamic-coverage-feedback'
8591           This value is used to limit superblock formation once the
8592           given percentage of executed instructions is covered.  This
8593           limits unnecessary code size expansion.
8594
8595           The `tracer-dynamic-coverage-feedback' is used only when
8596           profile feedback is available.  The real profiles (as opposed
8597           to statically estimated ones) are much less balanced allowing
8598           the threshold to be larger value.
8599
8600     `tracer-max-code-growth'
8601           Stop tail duplication once code growth has reached given
8602           percentage.  This is a rather artificial limit, as most of
8603           the duplicates are eliminated later in cross jumping, so it
8604           may be set to much higher values than is the desired code
8605           growth.
8606
8607     `tracer-min-branch-ratio'
8608           Stop reverse growth when the reverse probability of best edge
8609           is less than this threshold (in percent).
8610
8611     `tracer-min-branch-ratio'
8612     `tracer-min-branch-ratio-feedback'
8613           Stop forward growth if the best edge has probability lower
8614           than this threshold.
8615
8616           Similarly to `tracer-dynamic-coverage' two values are
8617           present, one for compilation for profile feedback and one for
8618           compilation without.  The value for compilation with profile
8619           feedback needs to be more conservative (higher) in order to
8620           make tracer effective.
8621
8622     `max-cse-path-length'
8623           The maximum number of basic blocks on path that CSE considers.
8624           The default is 10.
8625
8626     `max-cse-insns'
8627           The maximum number of instructions CSE processes before
8628           flushing.  The default is 1000.
8629
8630     `ggc-min-expand'
8631           GCC uses a garbage collector to manage its own memory
8632           allocation.  This parameter specifies the minimum percentage
8633           by which the garbage collector's heap should be allowed to
8634           expand between collections.  Tuning this may improve
8635           compilation speed; it has no effect on code generation.
8636
8637           The default is 30% + 70% * (RAM/1GB) with an upper bound of
8638           100% when RAM >= 1GB.  If `getrlimit' is available, the
8639           notion of "RAM" is the smallest of actual RAM and
8640           `RLIMIT_DATA' or `RLIMIT_AS'.  If GCC is not able to
8641           calculate RAM on a particular platform, the lower bound of
8642           30% is used.  Setting this parameter and `ggc-min-heapsize'
8643           to zero causes a full collection to occur at every
8644           opportunity.  This is extremely slow, but can be useful for
8645           debugging.
8646
8647     `ggc-min-heapsize'
8648           Minimum size of the garbage collector's heap before it begins
8649           bothering to collect garbage.  The first collection occurs
8650           after the heap expands by `ggc-min-expand'% beyond
8651           `ggc-min-heapsize'.  Again, tuning this may improve
8652           compilation speed, and has no effect on code generation.
8653
8654           The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
8655           that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
8656           exceeded, but with a lower bound of 4096 (four megabytes) and
8657           an upper bound of 131072 (128 megabytes).  If GCC is not able
8658           to calculate RAM on a particular platform, the lower bound is
8659           used.  Setting this parameter very large effectively disables
8660           garbage collection.  Setting this parameter and
8661           `ggc-min-expand' to zero causes a full collection to occur at
8662           every opportunity.
8663
8664     `max-reload-search-insns'
8665           The maximum number of instruction reload should look backward
8666           for equivalent register.  Increasing values mean more
8667           aggressive optimization, making the compilation time increase
8668           with probably slightly better performance.  The default value
8669           is 100.
8670
8671     `max-cselib-memory-locations'
8672           The maximum number of memory locations cselib should take
8673           into account.  Increasing values mean more aggressive
8674           optimization, making the compilation time increase with
8675           probably slightly better performance.  The default value is
8676           500.
8677
8678     `reorder-blocks-duplicate'
8679     `reorder-blocks-duplicate-feedback'
8680           Used by the basic block reordering pass to decide whether to
8681           use unconditional branch or duplicate the code on its
8682           destination.  Code is duplicated when its estimated size is
8683           smaller than this value multiplied by the estimated size of
8684           unconditional jump in the hot spots of the program.
8685
8686           The `reorder-block-duplicate-feedback' is used only when
8687           profile feedback is available.  It may be set to higher
8688           values than `reorder-block-duplicate' since information about
8689           the hot spots is more accurate.
8690
8691     `max-sched-ready-insns'
8692           The maximum number of instructions ready to be issued the
8693           scheduler should consider at any given time during the first
8694           scheduling pass.  Increasing values mean more thorough
8695           searches, making the compilation time increase with probably
8696           little benefit.  The default value is 100.
8697
8698     `max-sched-region-blocks'
8699           The maximum number of blocks in a region to be considered for
8700           interblock scheduling.  The default value is 10.
8701
8702     `max-pipeline-region-blocks'
8703           The maximum number of blocks in a region to be considered for
8704           pipelining in the selective scheduler.  The default value is
8705           15.
8706
8707     `max-sched-region-insns'
8708           The maximum number of insns in a region to be considered for
8709           interblock scheduling.  The default value is 100.
8710
8711     `max-pipeline-region-insns'
8712           The maximum number of insns in a region to be considered for
8713           pipelining in the selective scheduler.  The default value is
8714           200.
8715
8716     `min-spec-prob'
8717           The minimum probability (in percents) of reaching a source
8718           block for interblock speculative scheduling.  The default
8719           value is 40.
8720
8721     `max-sched-extend-regions-iters'
8722           The maximum number of iterations through CFG to extend
8723           regions.  A value of 0 (the default) disables region
8724           extensions.
8725
8726     `max-sched-insn-conflict-delay'
8727           The maximum conflict delay for an insn to be considered for
8728           speculative motion.  The default value is 3.
8729
8730     `sched-spec-prob-cutoff'
8731           The minimal probability of speculation success (in percents),
8732           so that speculative insns are scheduled.  The default value
8733           is 40.
8734
8735     `sched-spec-state-edge-prob-cutoff'
8736           The minimum probability an edge must have for the scheduler
8737           to save its state across it.  The default value is 10.
8738
8739     `sched-mem-true-dep-cost'
8740           Minimal distance (in CPU cycles) between store and load
8741           targeting same memory locations.  The default value is 1.
8742
8743     `selsched-max-lookahead'
8744           The maximum size of the lookahead window of selective
8745           scheduling.  It is a depth of search for available
8746           instructions.  The default value is 50.
8747
8748     `selsched-max-sched-times'
8749           The maximum number of times that an instruction is scheduled
8750           during selective scheduling.  This is the limit on the number
8751           of iterations through which the instruction may be pipelined.
8752           The default value is 2.
8753
8754     `selsched-max-insns-to-rename'
8755           The maximum number of best instructions in the ready list
8756           that are considered for renaming in the selective scheduler.
8757           The default value is 2.
8758
8759     `sms-min-sc'
8760           The minimum value of stage count that swing modulo scheduler
8761           generates.  The default value is 2.
8762
8763     `max-last-value-rtl'
8764           The maximum size measured as number of RTLs that can be
8765           recorded in an expression in combiner for a pseudo register
8766           as last known value of that register.  The default is 10000.
8767
8768     `integer-share-limit'
8769           Small integer constants can use a shared data structure,
8770           reducing the compiler's memory usage and increasing its
8771           speed.  This sets the maximum value of a shared integer
8772           constant.  The default value is 256.
8773
8774     `ssp-buffer-size'
8775           The minimum size of buffers (i.e. arrays) that receive stack
8776           smashing protection when `-fstack-protection' is used.
8777
8778     `max-jump-thread-duplication-stmts'
8779           Maximum number of statements allowed in a block that needs to
8780           be duplicated when threading jumps.
8781
8782     `max-fields-for-field-sensitive'
8783           Maximum number of fields in a structure treated in a field
8784           sensitive manner during pointer analysis.  The default is zero
8785           for `-O0' and `-O1', and 100 for `-Os', `-O2', and `-O3'.
8786
8787     `prefetch-latency'
8788           Estimate on average number of instructions that are executed
8789           before prefetch finishes.  The distance prefetched ahead is
8790           proportional to this constant.  Increasing this number may
8791           also lead to less streams being prefetched (see
8792           `simultaneous-prefetches').
8793
8794     `simultaneous-prefetches'
8795           Maximum number of prefetches that can run at the same time.
8796
8797     `l1-cache-line-size'
8798           The size of cache line in L1 cache, in bytes.
8799
8800     `l1-cache-size'
8801           The size of L1 cache, in kilobytes.
8802
8803     `l2-cache-size'
8804           The size of L2 cache, in kilobytes.
8805
8806     `min-insn-to-prefetch-ratio'
8807           The minimum ratio between the number of instructions and the
8808           number of prefetches to enable prefetching in a loop.
8809
8810     `prefetch-min-insn-to-mem-ratio'
8811           The minimum ratio between the number of instructions and the
8812           number of memory references to enable prefetching in a loop.
8813
8814     `use-canonical-types'
8815           Whether the compiler should use the "canonical" type system.
8816           By default, this should always be 1, which uses a more
8817           efficient internal mechanism for comparing types in C++ and
8818           Objective-C++.  However, if bugs in the canonical type system
8819           are causing compilation failures, set this value to 0 to
8820           disable canonical types.
8821
8822     `switch-conversion-max-branch-ratio'
8823           Switch initialization conversion refuses to create arrays
8824           that are bigger than `switch-conversion-max-branch-ratio'
8825           times the number of branches in the switch.
8826
8827     `max-partial-antic-length'
8828           Maximum length of the partial antic set computed during the
8829           tree partial redundancy elimination optimization
8830           (`-ftree-pre') when optimizing at `-O3' and above.  For some
8831           sorts of source code the enhanced partial redundancy
8832           elimination optimization can run away, consuming all of the
8833           memory available on the host machine.  This parameter sets a
8834           limit on the length of the sets that are computed, which
8835           prevents the runaway behavior.  Setting a value of 0 for this
8836           parameter allows an unlimited set length.
8837
8838     `sccvn-max-scc-size'
8839           Maximum size of a strongly connected component (SCC) during
8840           SCCVN processing.  If this limit is hit, SCCVN processing for
8841           the whole function is not done and optimizations depending on
8842           it are disabled.  The default maximum SCC size is 10000.
8843
8844     `sccvn-max-alias-queries-per-access'
8845           Maximum number of alias-oracle queries we perform when
8846           looking for redundancies for loads and stores.  If this limit
8847           is hit the search is aborted and the load or store is not
8848           considered redundant.  The number of queries is
8849           algorithmically limited to the number of stores on all paths
8850           from the load to the function entry.  The default maxmimum
8851           number of queries is 1000.
8852
8853     `ira-max-loops-num'
8854           IRA uses regional register allocation by default.  If a
8855           function contains more loops than the number given by this
8856           parameter, only at most the given number of the most
8857           frequently-executed loops form regions for regional register
8858           allocation.  The default value of the parameter is 100.
8859
8860     `ira-max-conflict-table-size'
8861           Although IRA uses a sophisticated algorithm to compress the
8862           conflict table, the table can still require excessive amounts
8863           of memory for huge functions.  If the conflict table for a
8864           function could be more than the size in MB given by this
8865           parameter, the register allocator instead uses a faster,
8866           simpler, and lower-quality algorithm that does not require
8867           building a pseudo-register conflict table.  The default value
8868           of the parameter is 2000.
8869
8870     `ira-loop-reserved-regs'
8871           IRA can be used to evaluate more accurate register pressure
8872           in loops for decisions to move loop invariants (see `-O3').
8873           The number of available registers reserved for some other
8874           purposes is given by this parameter.  The default value of
8875           the parameter is 2, which is the minimal number of registers
8876           needed by typical instructions.  This value is the best found
8877           from numerous experiments.
8878
8879     `loop-invariant-max-bbs-in-loop'
8880           Loop invariant motion can be very expensive, both in
8881           compilation time and in amount of needed compile-time memory,
8882           with very large loops.  Loops with more basic blocks than
8883           this parameter won't have loop invariant motion optimization
8884           performed on them.  The default value of the parameter is
8885           1000 for `-O1' and 10000 for `-O2' and above.
8886
8887     `loop-max-datarefs-for-datadeps'
8888           Building data dapendencies is expensive for very large loops.
8889           This parameter limits the number of data references in loops
8890           that are considered for data dependence analysis.  These
8891           large loops are no handled by the optimizations using loop
8892           data dependencies.  The default value is 1000.
8893
8894     `max-vartrack-size'
8895           Sets a maximum number of hash table slots to use during
8896           variable tracking dataflow analysis of any function.  If this
8897           limit is exceeded with variable tracking at assignments
8898           enabled, analysis for that function is retried without it,
8899           after removing all debug insns from the function.  If the
8900           limit is exceeded even without debug insns, var tracking
8901           analysis is completely disabled for the function.  Setting
8902           the parameter to zero makes it unlimited.
8903
8904     `max-vartrack-expr-depth'
8905           Sets a maximum number of recursion levels when attempting to
8906           map variable names or debug temporaries to value expressions.
8907           This trades compilation time for more complete debug
8908           information.  If this is set too low, value expressions that
8909           are available and could be represented in debug information
8910           may end up not being used; setting this higher may enable the
8911           compiler to find more complex debug expressions, but compile
8912           time and memory use may grow.  The default is 12.
8913
8914     `min-nondebug-insn-uid'
8915           Use uids starting at this parameter for nondebug insns.  The
8916           range below the parameter is reserved exclusively for debug
8917           insns created by `-fvar-tracking-assignments', but debug
8918           insns may get (non-overlapping) uids above it if the reserved
8919           range is exhausted.
8920
8921     `ipa-sra-ptr-growth-factor'
8922           IPA-SRA replaces a pointer to an aggregate with one or more
8923           new parameters only when their cumulative size is less or
8924           equal to `ipa-sra-ptr-growth-factor' times the size of the
8925           original pointer parameter.
8926
8927     `tm-max-aggregate-size'
8928           When making copies of thread-local variables in a
8929           transaction, this parameter specifies the size in bytes after
8930           which variables are saved with the logging functions as
8931           opposed to save/restore code sequence pairs.  This option
8932           only applies when using `-fgnu-tm'.
8933
8934     `graphite-max-nb-scop-params'
8935           To avoid exponential effects in the Graphite loop transforms,
8936           the number of parameters in a Static Control Part (SCoP) is
8937           bounded.  The default value is 10 parameters.  A variable
8938           whose value is unknown at compilation time and defined
8939           outside a SCoP is a parameter of the SCoP.
8940
8941     `graphite-max-bbs-per-function'
8942           To avoid exponential effects in the detection of SCoPs, the
8943           size of the functions analyzed by Graphite is bounded.  The
8944           default value is 100 basic blocks.
8945
8946     `loop-block-tile-size'
8947           Loop blocking or strip mining transforms, enabled with
8948           `-floop-block' or `-floop-strip-mine', strip mine each loop
8949           in the loop nest by a given number of iterations.  The strip
8950           length can be changed using the `loop-block-tile-size'
8951           parameter.  The default value is 51 iterations.
8952
8953     `ipa-cp-value-list-size'
8954           IPA-CP attempts to track all possible values and types passed
8955           to a function's parameter in order to propagate them and
8956           perform devirtualization.  `ipa-cp-value-list-size' is the
8957           maximum number of values and types it stores per one formal
8958           parameter of a function.
8959
8960     `lto-partitions'
8961           Specify desired number of partitions produced during WHOPR
8962           compilation.  The number of partitions should exceed the
8963           number of CPUs used for compilation.  The default value is 32.
8964
8965     `lto-minpartition'
8966           Size of minimal partition for WHOPR (in estimated
8967           instructions).  This prevents expenses of splitting very
8968           small programs into too many partitions.
8969
8970     `cxx-max-namespaces-for-diagnostic-help'
8971           The maximum number of namespaces to consult for suggestions
8972           when C++ name lookup fails for an identifier.  The default is
8973           1000.
8974
8975     `sink-frequency-threshold'
8976           The maximum relative execution frequency (in percents) of the
8977           target block relative to a statement's original block to
8978           allow statement sinking of a statement.  Larger numbers
8979           result in more aggressive statement sinking.  The default
8980           value is 75.  A small positive adjustment is applied for
8981           statements with memory operands as those are even more
8982           profitable so sink.
8983
8984     `max-stores-to-sink'
8985           The maximum number of conditional stores paires that can be
8986           sunk.  Set to 0 if either vectorization (`-ftree-vectorize')
8987           or if-conversion (`-ftree-loop-if-convert') is disabled.  The
8988           default is 2.
8989
8990     `allow-load-data-races'
8991           Allow optimizers to introduce new data races on loads.  Set
8992           to 1 to allow, otherwise to 0.  This option is enabled by
8993           default unless implicitly set by the `-fmemory-model=' option.
8994
8995     `allow-store-data-races'
8996           Allow optimizers to introduce new data races on stores.  Set
8997           to 1 to allow, otherwise to 0.  This option is enabled by
8998           default unless implicitly set by the `-fmemory-model=' option.
8999
9000     `allow-packed-load-data-races'
9001           Allow optimizers to introduce new data races on packed data
9002           loads.  Set to 1 to allow, otherwise to 0.  This option is
9003           enabled by default unless implicitly set by the
9004           `-fmemory-model=' option.
9005
9006     `allow-packed-store-data-races'
9007           Allow optimizers to introduce new data races on packed data
9008           stores.  Set to 1 to allow, otherwise to 0.  This option is
9009           enabled by default unless implicitly set by the
9010           `-fmemory-model=' option.
9011
9012     `case-values-threshold'
9013           The smallest number of different values for which it is best
9014           to use a jump-table instead of a tree of conditional
9015           branches.  If the value is 0, use the default for the
9016           machine.  The default is 0.
9017
9018     `tree-reassoc-width'
9019           Set the maximum number of instructions executed in parallel in
9020           reassociated tree. This parameter overrides target dependent
9021           heuristics used by default if has non zero value.
9022
9023     `sched-pressure-algorithm'
9024           Choose between the two available implementations of
9025           `-fsched-pressure'.  Algorithm 1 is the original
9026           implementation and is the more likely to prevent instructions
9027           from being reordered.  Algorithm 2 was designed to be a
9028           compromise between the relatively conservative approach taken
9029           by algorithm 1 and the rather aggressive approach taken by
9030           the default scheduler.  It relies more heavily on having a
9031           regular register file and accurate register pressure classes.
9032           See `haifa-sched.c' in the GCC sources for more details.
9033
9034           The default choice depends on the target.
9035
9036     `max-slsr-cand-scan'
9037           Set the maximum number of existing candidates that will be
9038           considered when seeking a basis for a new straight-line
9039           strength reduction candidate.
9040
9041
9042 \1f
9043 File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Optimize Options,  Up: Invoking GCC
9044
9045 3.11 Options Controlling the Preprocessor
9046 =========================================
9047
9048 These options control the C preprocessor, which is run on each C source
9049 file before actual compilation.
9050
9051  If you use the `-E' option, nothing is done except preprocessing.
9052 Some of these options make sense only together with `-E' because they
9053 cause the preprocessor output to be unsuitable for actual compilation.
9054
9055 `-Wp,OPTION'
9056      You can use `-Wp,OPTION' to bypass the compiler driver and pass
9057      OPTION directly through to the preprocessor.  If OPTION contains
9058      commas, it is split into multiple options at the commas.  However,
9059      many options are modified, translated or interpreted by the
9060      compiler driver before being passed to the preprocessor, and `-Wp'
9061      forcibly bypasses this phase.  The preprocessor's direct interface
9062      is undocumented and subject to change, so whenever possible you
9063      should avoid using `-Wp' and let the driver handle the options
9064      instead.
9065
9066 `-Xpreprocessor OPTION'
9067      Pass OPTION as an option to the preprocessor.  You can use this to
9068      supply system-specific preprocessor options that GCC does not
9069      recognize.
9070
9071      If you want to pass an option that takes an argument, you must use
9072      `-Xpreprocessor' twice, once for the option and once for the
9073      argument.
9074
9075 `-no-integrated-cpp'
9076      Perform preprocessing as a separate pass before compilation.  By
9077      default, GCC performs preprocessing as an integrated part of input
9078      tokenization and parsing.  If this option is provided, the
9079      appropriate language front end (`cc1', `cc1plus', or `cc1obj' for
9080      C, C++, and Objective-C, respectively) is instead invoked twice,
9081      once for preprocessing only and once for actual compilation of the
9082      preprocessed input.  This option may be useful in conjunction with
9083      the `-B' or `-wrapper' options to specify an alternate
9084      preprocessor or perform additional processing of the program
9085      source between normal preprocessing and compilation.
9086
9087 `-D NAME'
9088      Predefine NAME as a macro, with definition `1'.
9089
9090 `-D NAME=DEFINITION'
9091      The contents of DEFINITION are tokenized and processed as if they
9092      appeared during translation phase three in a `#define' directive.
9093      In particular, the definition will be truncated by embedded
9094      newline characters.
9095
9096      If you are invoking the preprocessor from a shell or shell-like
9097      program you may need to use the shell's quoting syntax to protect
9098      characters such as spaces that have a meaning in the shell syntax.
9099
9100      If you wish to define a function-like macro on the command line,
9101      write its argument list with surrounding parentheses before the
9102      equals sign (if any).  Parentheses are meaningful to most shells,
9103      so you will need to quote the option.  With `sh' and `csh',
9104      `-D'NAME(ARGS...)=DEFINITION'' works.
9105
9106      `-D' and `-U' options are processed in the order they are given on
9107      the command line.  All `-imacros FILE' and `-include FILE' options
9108      are processed after all `-D' and `-U' options.
9109
9110 `-U NAME'
9111      Cancel any previous definition of NAME, either built in or
9112      provided with a `-D' option.
9113
9114 `-undef'
9115      Do not predefine any system-specific or GCC-specific macros.  The
9116      standard predefined macros remain defined.
9117
9118 `-I DIR'
9119      Add the directory DIR to the list of directories to be searched
9120      for header files.  Directories named by `-I' are searched before
9121      the standard system include directories.  If the directory DIR is
9122      a standard system include directory, the option is ignored to
9123      ensure that the default search order for system directories and
9124      the special treatment of system headers are not defeated .  If DIR
9125      begins with `=', then the `=' will be replaced by the sysroot
9126      prefix; see `--sysroot' and `-isysroot'.
9127
9128 `-o FILE'
9129      Write output to FILE.  This is the same as specifying FILE as the
9130      second non-option argument to `cpp'.  `gcc' has a different
9131      interpretation of a second non-option argument, so you must use
9132      `-o' to specify the output file.
9133
9134 `-Wall'
9135      Turns on all optional warnings which are desirable for normal code.
9136      At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a
9137      warning about integer promotion causing a change of sign in `#if'
9138      expressions.  Note that many of the preprocessor's warnings are on
9139      by default and have no options to control them.
9140
9141 `-Wcomment'
9142 `-Wcomments'
9143      Warn whenever a comment-start sequence `/*' appears in a `/*'
9144      comment, or whenever a backslash-newline appears in a `//' comment.
9145      (Both forms have the same effect.)
9146
9147 `-Wtrigraphs'
9148      Most trigraphs in comments cannot affect the meaning of the
9149      program.  However, a trigraph that would form an escaped newline
9150      (`??/' at the end of a line) can, by changing where the comment
9151      begins or ends.  Therefore, only trigraphs that would form escaped
9152      newlines produce warnings inside a comment.
9153
9154      This option is implied by `-Wall'.  If `-Wall' is not given, this
9155      option is still enabled unless trigraphs are enabled.  To get
9156      trigraph conversion without warnings, but get the other `-Wall'
9157      warnings, use `-trigraphs -Wall -Wno-trigraphs'.
9158
9159 `-Wtraditional'
9160      Warn about certain constructs that behave differently in
9161      traditional and ISO C.  Also warn about ISO C constructs that have
9162      no traditional C equivalent, and problematic constructs which
9163      should be avoided.
9164
9165 `-Wundef'
9166      Warn whenever an identifier which is not a macro is encountered in
9167      an `#if' directive, outside of `defined'.  Such identifiers are
9168      replaced with zero.
9169
9170 `-Wunused-macros'
9171      Warn about macros defined in the main file that are unused.  A
9172      macro is "used" if it is expanded or tested for existence at least
9173      once.  The preprocessor will also warn if the macro has not been
9174      used at the time it is redefined or undefined.
9175
9176      Built-in macros, macros defined on the command line, and macros
9177      defined in include files are not warned about.
9178
9179      _Note:_ If a macro is actually used, but only used in skipped
9180      conditional blocks, then CPP will report it as unused.  To avoid
9181      the warning in such a case, you might improve the scope of the
9182      macro's definition by, for example, moving it into the first
9183      skipped block.  Alternatively, you could provide a dummy use with
9184      something like:
9185
9186           #if defined the_macro_causing_the_warning
9187           #endif
9188
9189 `-Wendif-labels'
9190      Warn whenever an `#else' or an `#endif' are followed by text.
9191      This usually happens in code of the form
9192
9193           #if FOO
9194           ...
9195           #else FOO
9196           ...
9197           #endif FOO
9198
9199      The second and third `FOO' should be in comments, but often are not
9200      in older programs.  This warning is on by default.
9201
9202 `-Werror'
9203      Make all warnings into hard errors.  Source code which triggers
9204      warnings will be rejected.
9205
9206 `-Wsystem-headers'
9207      Issue warnings for code in system headers.  These are normally
9208      unhelpful in finding bugs in your own code, therefore suppressed.
9209      If you are responsible for the system library, you may want to see
9210      them.
9211
9212 `-w'
9213      Suppress all warnings, including those which GNU CPP issues by
9214      default.
9215
9216 `-pedantic'
9217      Issue all the mandatory diagnostics listed in the C standard.
9218      Some of them are left out by default, since they trigger
9219      frequently on harmless code.
9220
9221 `-pedantic-errors'
9222      Issue all the mandatory diagnostics, and make all mandatory
9223      diagnostics into errors.  This includes mandatory diagnostics that
9224      GCC issues without `-pedantic' but treats as warnings.
9225
9226 `-M'
9227      Instead of outputting the result of preprocessing, output a rule
9228      suitable for `make' describing the dependencies of the main source
9229      file.  The preprocessor outputs one `make' rule containing the
9230      object file name for that source file, a colon, and the names of
9231      all the included files, including those coming from `-include' or
9232      `-imacros' command line options.
9233
9234      Unless specified explicitly (with `-MT' or `-MQ'), the object file
9235      name consists of the name of the source file with any suffix
9236      replaced with object file suffix and with any leading directory
9237      parts removed.  If there are many included files then the rule is
9238      split into several lines using `\'-newline.  The rule has no
9239      commands.
9240
9241      This option does not suppress the preprocessor's debug output,
9242      such as `-dM'.  To avoid mixing such debug output with the
9243      dependency rules you should explicitly specify the dependency
9244      output file with `-MF', or use an environment variable like
9245      `DEPENDENCIES_OUTPUT' (*note Environment Variables::).  Debug
9246      output will still be sent to the regular output stream as normal.
9247
9248      Passing `-M' to the driver implies `-E', and suppresses warnings
9249      with an implicit `-w'.
9250
9251 `-MM'
9252      Like `-M' but do not mention header files that are found in system
9253      header directories, nor header files that are included, directly
9254      or indirectly, from such a header.
9255
9256      This implies that the choice of angle brackets or double quotes in
9257      an `#include' directive does not in itself determine whether that
9258      header will appear in `-MM' dependency output.  This is a slight
9259      change in semantics from GCC versions 3.0 and earlier.
9260
9261 `-MF FILE'
9262      When used with `-M' or `-MM', specifies a file to write the
9263      dependencies to.  If no `-MF' switch is given the preprocessor
9264      sends the rules to the same place it would have sent preprocessed
9265      output.
9266
9267      When used with the driver options `-MD' or `-MMD', `-MF' overrides
9268      the default dependency output file.
9269
9270 `-MG'
9271      In conjunction with an option such as `-M' requesting dependency
9272      generation, `-MG' assumes missing header files are generated files
9273      and adds them to the dependency list without raising an error.
9274      The dependency filename is taken directly from the `#include'
9275      directive without prepending any path.  `-MG' also suppresses
9276      preprocessed output, as a missing header file renders this useless.
9277
9278      This feature is used in automatic updating of makefiles.
9279
9280 `-MP'
9281      This option instructs CPP to add a phony target for each dependency
9282      other than the main file, causing each to depend on nothing.  These
9283      dummy rules work around errors `make' gives if you remove header
9284      files without updating the `Makefile' to match.
9285
9286      This is typical output:
9287
9288           test.o: test.c test.h
9289
9290           test.h:
9291
9292 `-MT TARGET'
9293      Change the target of the rule emitted by dependency generation.  By
9294      default CPP takes the name of the main input file, deletes any
9295      directory components and any file suffix such as `.c', and appends
9296      the platform's usual object suffix.  The result is the target.
9297
9298      An `-MT' option will set the target to be exactly the string you
9299      specify.  If you want multiple targets, you can specify them as a
9300      single argument to `-MT', or use multiple `-MT' options.
9301
9302      For example, `-MT '$(objpfx)foo.o'' might give
9303
9304           $(objpfx)foo.o: foo.c
9305
9306 `-MQ TARGET'
9307      Same as `-MT', but it quotes any characters which are special to
9308      Make.  `-MQ '$(objpfx)foo.o'' gives
9309
9310           $$(objpfx)foo.o: foo.c
9311
9312      The default target is automatically quoted, as if it were given
9313      with `-MQ'.
9314
9315 `-MD'
9316      `-MD' is equivalent to `-M -MF FILE', except that `-E' is not
9317      implied.  The driver determines FILE based on whether an `-o'
9318      option is given.  If it is, the driver uses its argument but with
9319      a suffix of `.d', otherwise it takes the name of the input file,
9320      removes any directory components and suffix, and applies a `.d'
9321      suffix.
9322
9323      If `-MD' is used in conjunction with `-E', any `-o' switch is
9324      understood to specify the dependency output file (*note -MF:
9325      dashMF.), but if used without `-E', each `-o' is understood to
9326      specify a target object file.
9327
9328      Since `-E' is not implied, `-MD' can be used to generate a
9329      dependency output file as a side-effect of the compilation process.
9330
9331 `-MMD'
9332      Like `-MD' except mention only user header files, not system
9333      header files.
9334
9335 `-fpch-deps'
9336      When using precompiled headers (*note Precompiled Headers::), this
9337      flag will cause the dependency-output flags to also list the files
9338      from the precompiled header's dependencies.  If not specified only
9339      the precompiled header would be listed and not the files that were
9340      used to create it because those files are not consulted when a
9341      precompiled header is used.
9342
9343 `-fpch-preprocess'
9344      This option allows use of a precompiled header (*note Precompiled
9345      Headers::) together with `-E'.  It inserts a special `#pragma',
9346      `#pragma GCC pch_preprocess "FILENAME"' in the output to mark the
9347      place where the precompiled header was found, and its FILENAME.
9348      When `-fpreprocessed' is in use, GCC recognizes this `#pragma' and
9349      loads the PCH.
9350
9351      This option is off by default, because the resulting preprocessed
9352      output is only really suitable as input to GCC.  It is switched on
9353      by `-save-temps'.
9354
9355      You should not write this `#pragma' in your own code, but it is
9356      safe to edit the filename if the PCH file is available in a
9357      different location.  The filename may be absolute or it may be
9358      relative to GCC's current directory.
9359
9360 `-x c'
9361 `-x c++'
9362 `-x objective-c'
9363 `-x assembler-with-cpp'
9364      Specify the source language: C, C++, Objective-C, or assembly.
9365      This has nothing to do with standards conformance or extensions;
9366      it merely selects which base syntax to expect.  If you give none
9367      of these options, cpp will deduce the language from the extension
9368      of the source file: `.c', `.cc', `.m', or `.S'.  Some other common
9369      extensions for C++ and assembly are also recognized.  If cpp does
9370      not recognize the extension, it will treat the file as C; this is
9371      the most generic mode.
9372
9373      _Note:_ Previous versions of cpp accepted a `-lang' option which
9374      selected both the language and the standards conformance level.
9375      This option has been removed, because it conflicts with the `-l'
9376      option.
9377
9378 `-std=STANDARD'
9379 `-ansi'
9380      Specify the standard to which the code should conform.  Currently
9381      CPP knows about C and C++ standards; others may be added in the
9382      future.
9383
9384      STANDARD may be one of:
9385     `c90'
9386     `c89'
9387     `iso9899:1990'
9388           The ISO C standard from 1990.  `c90' is the customary
9389           shorthand for this version of the standard.
9390
9391           The `-ansi' option is equivalent to `-std=c90'.
9392
9393     `iso9899:199409'
9394           The 1990 C standard, as amended in 1994.
9395
9396     `iso9899:1999'
9397     `c99'
9398     `iso9899:199x'
9399     `c9x'
9400           The revised ISO C standard, published in December 1999.
9401           Before publication, this was known as C9X.
9402
9403     `iso9899:2011'
9404     `c11'
9405     `c1x'
9406           The revised ISO C standard, published in December 2011.
9407           Before publication, this was known as C1X.
9408
9409     `gnu90'
9410     `gnu89'
9411           The 1990 C standard plus GNU extensions.  This is the default.
9412
9413     `gnu99'
9414     `gnu9x'
9415           The 1999 C standard plus GNU extensions.
9416
9417     `gnu11'
9418     `gnu1x'
9419           The 2011 C standard plus GNU extensions.
9420
9421     `c++98'
9422           The 1998 ISO C++ standard plus amendments.
9423
9424     `gnu++98'
9425           The same as `-std=c++98' plus GNU extensions.  This is the
9426           default for C++ code.
9427
9428 `-I-'
9429      Split the include path.  Any directories specified with `-I'
9430      options before `-I-' are searched only for headers requested with
9431      `#include "FILE"'; they are not searched for `#include <FILE>'.
9432      If additional directories are specified with `-I' options after
9433      the `-I-', those directories are searched for all `#include'
9434      directives.
9435
9436      In addition, `-I-' inhibits the use of the directory of the current
9437      file directory as the first search directory for `#include "FILE"'.
9438      This option has been deprecated.
9439
9440 `-nostdinc'
9441      Do not search the standard system directories for header files.
9442      Only the directories you have specified with `-I' options (and the
9443      directory of the current file, if appropriate) are searched.
9444
9445 `-nostdinc++'
9446      Do not search for header files in the C++-specific standard
9447      directories, but do still search the other standard directories.
9448      (This option is used when building the C++ library.)
9449
9450 `-include FILE'
9451      Process FILE as if `#include "file"' appeared as the first line of
9452      the primary source file.  However, the first directory searched
9453      for FILE is the preprocessor's working directory _instead of_ the
9454      directory containing the main source file.  If not found there, it
9455      is searched for in the remainder of the `#include "..."' search
9456      chain as normal.
9457
9458      If multiple `-include' options are given, the files are included
9459      in the order they appear on the command line.
9460
9461 `-imacros FILE'
9462      Exactly like `-include', except that any output produced by
9463      scanning FILE is thrown away.  Macros it defines remain defined.
9464      This allows you to acquire all the macros from a header without
9465      also processing its declarations.
9466
9467      All files specified by `-imacros' are processed before all files
9468      specified by `-include'.
9469
9470 `-idirafter DIR'
9471      Search DIR for header files, but do it _after_ all directories
9472      specified with `-I' and the standard system directories have been
9473      exhausted.  DIR is treated as a system include directory.  If DIR
9474      begins with `=', then the `=' will be replaced by the sysroot
9475      prefix; see `--sysroot' and `-isysroot'.
9476
9477 `-iprefix PREFIX'
9478      Specify PREFIX as the prefix for subsequent `-iwithprefix'
9479      options.  If the prefix represents a directory, you should include
9480      the final `/'.
9481
9482 `-iwithprefix DIR'
9483 `-iwithprefixbefore DIR'
9484      Append DIR to the prefix specified previously with `-iprefix', and
9485      add the resulting directory to the include search path.
9486      `-iwithprefixbefore' puts it in the same place `-I' would;
9487      `-iwithprefix' puts it where `-idirafter' would.
9488
9489 `-isysroot DIR'
9490      This option is like the `--sysroot' option, but applies only to
9491      header files (except for Darwin targets, where it applies to both
9492      header files and libraries).  See the `--sysroot' option for more
9493      information.
9494
9495 `-imultilib DIR'
9496      Use DIR as a subdirectory of the directory containing
9497      target-specific C++ headers.
9498
9499 `-isystem DIR'
9500      Search DIR for header files, after all directories specified by
9501      `-I' but before the standard system directories.  Mark it as a
9502      system directory, so that it gets the same special treatment as is
9503      applied to the standard system directories.  If DIR begins with
9504      `=', then the `=' will be replaced by the sysroot prefix; see
9505      `--sysroot' and `-isysroot'.
9506
9507 `-iquote DIR'
9508      Search DIR only for header files requested with `#include "FILE"';
9509      they are not searched for `#include <FILE>', before all
9510      directories specified by `-I' and before the standard system
9511      directories.  If DIR begins with `=', then the `=' will be replaced
9512      by the sysroot prefix; see `--sysroot' and `-isysroot'.
9513
9514 `-fdirectives-only'
9515      When preprocessing, handle directives, but do not expand macros.
9516
9517      The option's behavior depends on the `-E' and `-fpreprocessed'
9518      options.
9519
9520      With `-E', preprocessing is limited to the handling of directives
9521      such as `#define', `#ifdef', and `#error'.  Other preprocessor
9522      operations, such as macro expansion and trigraph conversion are
9523      not performed.  In addition, the `-dD' option is implicitly
9524      enabled.
9525
9526      With `-fpreprocessed', predefinition of command line and most
9527      builtin macros is disabled.  Macros such as `__LINE__', which are
9528      contextually dependent, are handled normally.  This enables
9529      compilation of files previously preprocessed with `-E
9530      -fdirectives-only'.
9531
9532      With both `-E' and `-fpreprocessed', the rules for
9533      `-fpreprocessed' take precedence.  This enables full preprocessing
9534      of files previously preprocessed with `-E -fdirectives-only'.
9535
9536 `-fdollars-in-identifiers'
9537      Accept `$' in identifiers.
9538
9539 `-fextended-identifiers'
9540      Accept universal character names in identifiers.  This option is
9541      experimental; in a future version of GCC, it will be enabled by
9542      default for C99 and C++.
9543
9544 `-fno-canonical-system-headers'
9545      When preprocessing, do not shorten system header paths with
9546      canonicalization.
9547
9548 `-fpreprocessed'
9549      Indicate to the preprocessor that the input file has already been
9550      preprocessed.  This suppresses things like macro expansion,
9551      trigraph conversion, escaped newline splicing, and processing of
9552      most directives.  The preprocessor still recognizes and removes
9553      comments, so that you can pass a file preprocessed with `-C' to
9554      the compiler without problems.  In this mode the integrated
9555      preprocessor is little more than a tokenizer for the front ends.
9556
9557      `-fpreprocessed' is implicit if the input file has one of the
9558      extensions `.i', `.ii' or `.mi'.  These are the extensions that
9559      GCC uses for preprocessed files created by `-save-temps'.
9560
9561 `-ftabstop=WIDTH'
9562      Set the distance between tab stops.  This helps the preprocessor
9563      report correct column numbers in warnings or errors, even if tabs
9564      appear on the line.  If the value is less than 1 or greater than
9565      100, the option is ignored.  The default is 8.
9566
9567 `-fdebug-cpp'
9568      This option is only useful for debugging GCC.  When used with
9569      `-E', dumps debugging information about location maps.  Every
9570      token in the output is preceded by the dump of the map its location
9571      belongs to.  The dump of the map holding the location of a token
9572      would be:
9573           {`P':`/file/path';`F':`/includer/path';`L':LINE_NUM;`C':COL_NUM;`S':SYSTEM_HEADER_P;`M':MAP_ADDRESS;`E':MACRO_EXPANSION_P,`loc':LOCATION}
9574
9575      When used without `-E', this option has no effect.
9576
9577 `-ftrack-macro-expansion[=LEVEL]'
9578      Track locations of tokens across macro expansions. This allows the
9579      compiler to emit diagnostic about the current macro expansion stack
9580      when a compilation error occurs in a macro expansion. Using this
9581      option makes the preprocessor and the compiler consume more
9582      memory. The LEVEL parameter can be used to choose the level of
9583      precision of token location tracking thus decreasing the memory
9584      consumption if necessary. Value `0' of LEVEL de-activates this
9585      option just as if no `-ftrack-macro-expansion' was present on the
9586      command line. Value `1' tracks tokens locations in a degraded mode
9587      for the sake of minimal memory overhead. In this mode all tokens
9588      resulting from the expansion of an argument of a function-like
9589      macro have the same location. Value `2' tracks tokens locations
9590      completely. This value is the most memory hungry.  When this
9591      option is given no argument, the default parameter value is `2'.
9592
9593      Note that -ftrack-macro-expansion=2 is activated by default.
9594
9595 `-fexec-charset=CHARSET'
9596      Set the execution character set, used for string and character
9597      constants.  The default is UTF-8.  CHARSET can be any encoding
9598      supported by the system's `iconv' library routine.
9599
9600 `-fwide-exec-charset=CHARSET'
9601      Set the wide execution character set, used for wide string and
9602      character constants.  The default is UTF-32 or UTF-16, whichever
9603      corresponds to the width of `wchar_t'.  As with `-fexec-charset',
9604      CHARSET can be any encoding supported by the system's `iconv'
9605      library routine; however, you will have problems with encodings
9606      that do not fit exactly in `wchar_t'.
9607
9608 `-finput-charset=CHARSET'
9609      Set the input character set, used for translation from the
9610      character set of the input file to the source character set used
9611      by GCC.  If the locale does not specify, or GCC cannot get this
9612      information from the locale, the default is UTF-8.  This can be
9613      overridden by either the locale or this command line option.
9614      Currently the command line option takes precedence if there's a
9615      conflict.  CHARSET can be any encoding supported by the system's
9616      `iconv' library routine.
9617
9618 `-fworking-directory'
9619      Enable generation of linemarkers in the preprocessor output that
9620      will let the compiler know the current working directory at the
9621      time of preprocessing.  When this option is enabled, the
9622      preprocessor will emit, after the initial linemarker, a second
9623      linemarker with the current working directory followed by two
9624      slashes.  GCC will use this directory, when it's present in the
9625      preprocessed input, as the directory emitted as the current
9626      working directory in some debugging information formats.  This
9627      option is implicitly enabled if debugging information is enabled,
9628      but this can be inhibited with the negated form
9629      `-fno-working-directory'.  If the `-P' flag is present in the
9630      command line, this option has no effect, since no `#line'
9631      directives are emitted whatsoever.
9632
9633 `-fno-show-column'
9634      Do not print column numbers in diagnostics.  This may be necessary
9635      if diagnostics are being scanned by a program that does not
9636      understand the column numbers, such as `dejagnu'.
9637
9638 `-A PREDICATE=ANSWER'
9639      Make an assertion with the predicate PREDICATE and answer ANSWER.
9640      This form is preferred to the older form `-A PREDICATE(ANSWER)',
9641      which is still supported, because it does not use shell special
9642      characters.
9643
9644 `-A -PREDICATE=ANSWER'
9645      Cancel an assertion with the predicate PREDICATE and answer ANSWER.
9646
9647 `-dCHARS'
9648      CHARS is a sequence of one or more of the following characters,
9649      and must not be preceded by a space.  Other characters are
9650      interpreted by the compiler proper, or reserved for future
9651      versions of GCC, and so are silently ignored.  If you specify
9652      characters whose behavior conflicts, the result is undefined.
9653
9654     `M'
9655           Instead of the normal output, generate a list of `#define'
9656           directives for all the macros defined during the execution of
9657           the preprocessor, including predefined macros.  This gives
9658           you a way of finding out what is predefined in your version
9659           of the preprocessor.  Assuming you have no file `foo.h', the
9660           command
9661
9662                touch foo.h; cpp -dM foo.h
9663
9664           will show all the predefined macros.
9665
9666           If you use `-dM' without the `-E' option, `-dM' is
9667           interpreted as a synonym for `-fdump-rtl-mach'.  *Note
9668           Debugging Options: (gcc)Debugging Options.
9669
9670     `D'
9671           Like `M' except in two respects: it does _not_ include the
9672           predefined macros, and it outputs _both_ the `#define'
9673           directives and the result of preprocessing.  Both kinds of
9674           output go to the standard output file.
9675
9676     `N'
9677           Like `D', but emit only the macro names, not their expansions.
9678
9679     `I'
9680           Output `#include' directives in addition to the result of
9681           preprocessing.
9682
9683     `U'
9684           Like `D' except that only macros that are expanded, or whose
9685           definedness is tested in preprocessor directives, are output;
9686           the output is delayed until the use or test of the macro; and
9687           `#undef' directives are also output for macros tested but
9688           undefined at the time.
9689
9690 `-P'
9691      Inhibit generation of linemarkers in the output from the
9692      preprocessor.  This might be useful when running the preprocessor
9693      on something that is not C code, and will be sent to a program
9694      which might be confused by the linemarkers.
9695
9696 `-C'
9697      Do not discard comments.  All comments are passed through to the
9698      output file, except for comments in processed directives, which
9699      are deleted along with the directive.
9700
9701      You should be prepared for side effects when using `-C'; it causes
9702      the preprocessor to treat comments as tokens in their own right.
9703      For example, comments appearing at the start of what would be a
9704      directive line have the effect of turning that line into an
9705      ordinary source line, since the first token on the line is no
9706      longer a `#'.
9707
9708 `-CC'
9709      Do not discard comments, including during macro expansion.  This is
9710      like `-C', except that comments contained within macros are also
9711      passed through to the output file where the macro is expanded.
9712
9713      In addition to the side-effects of the `-C' option, the `-CC'
9714      option causes all C++-style comments inside a macro to be
9715      converted to C-style comments.  This is to prevent later use of
9716      that macro from inadvertently commenting out the remainder of the
9717      source line.
9718
9719      The `-CC' option is generally used to support lint comments.
9720
9721 `-traditional-cpp'
9722      Try to imitate the behavior of old-fashioned C preprocessors, as
9723      opposed to ISO C preprocessors.
9724
9725 `-trigraphs'
9726      Process trigraph sequences.  These are three-character sequences,
9727      all starting with `??', that are defined by ISO C to stand for
9728      single characters.  For example, `??/' stands for `\', so `'??/n''
9729      is a character constant for a newline.  By default, GCC ignores
9730      trigraphs, but in standard-conforming modes it converts them.  See
9731      the `-std' and `-ansi' options.
9732
9733      The nine trigraphs and their replacements are
9734
9735           Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
9736           Replacement:      [    ]    {    }    #    \    ^    |    ~
9737
9738 `-remap'
9739      Enable special code to work around file systems which only permit
9740      very short file names, such as MS-DOS.
9741
9742 `--help'
9743 `--target-help'
9744      Print text describing all the command line options instead of
9745      preprocessing anything.
9746
9747 `-v'
9748      Verbose mode.  Print out GNU CPP's version number at the beginning
9749      of execution, and report the final form of the include path.
9750
9751 `-H'
9752      Print the name of each header file used, in addition to other
9753      normal activities.  Each name is indented to show how deep in the
9754      `#include' stack it is.  Precompiled header files are also
9755      printed, even if they are found to be invalid; an invalid
9756      precompiled header file is printed with `...x' and a valid one
9757      with `...!' .
9758
9759 `-version'
9760 `--version'
9761      Print out GNU CPP's version number.  With one dash, proceed to
9762      preprocess as normal.  With two dashes, exit immediately.
9763
9764 \1f
9765 File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
9766
9767 3.12 Passing Options to the Assembler
9768 =====================================
9769
9770 You can pass options to the assembler.
9771
9772 `-Wa,OPTION'
9773      Pass OPTION as an option to the assembler.  If OPTION contains
9774      commas, it is split into multiple options at the commas.
9775
9776 `-Xassembler OPTION'
9777      Pass OPTION as an option to the assembler.  You can use this to
9778      supply system-specific assembler options that GCC does not
9779      recognize.
9780
9781      If you want to pass an option that takes an argument, you must use
9782      `-Xassembler' twice, once for the option and once for the argument.
9783
9784
9785 \1f
9786 File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
9787
9788 3.13 Options for Linking
9789 ========================
9790
9791 These options come into play when the compiler links object files into
9792 an executable output file.  They are meaningless if the compiler is not
9793 doing a link step.
9794
9795 `OBJECT-FILE-NAME'
9796      A file name that does not end in a special recognized suffix is
9797      considered to name an object file or library.  (Object files are
9798      distinguished from libraries by the linker according to the file
9799      contents.)  If linking is done, these object files are used as
9800      input to the linker.
9801
9802 `-c'
9803 `-S'
9804 `-E'
9805      If any of these options is used, then the linker is not run, and
9806      object file names should not be used as arguments.  *Note Overall
9807      Options::.
9808
9809 `-lLIBRARY'
9810 `-l LIBRARY'
9811      Search the library named LIBRARY when linking.  (The second
9812      alternative with the library as a separate argument is only for
9813      POSIX compliance and is not recommended.)
9814
9815      It makes a difference where in the command you write this option;
9816      the linker searches and processes libraries and object files in
9817      the order they are specified.  Thus, `foo.o -lz bar.o' searches
9818      library `z' after file `foo.o' but before `bar.o'.  If `bar.o'
9819      refers to functions in `z', those functions may not be loaded.
9820
9821      The linker searches a standard list of directories for the library,
9822      which is actually a file named `libLIBRARY.a'.  The linker then
9823      uses this file as if it had been specified precisely by name.
9824
9825      The directories searched include several standard system
9826      directories plus any that you specify with `-L'.
9827
9828      Normally the files found this way are library files--archive files
9829      whose members are object files.  The linker handles an archive
9830      file by scanning through it for members which define symbols that
9831      have so far been referenced but not defined.  But if the file that
9832      is found is an ordinary object file, it is linked in the usual
9833      fashion.  The only difference between using an `-l' option and
9834      specifying a file name is that `-l' surrounds LIBRARY with `lib'
9835      and `.a' and searches several directories.
9836
9837 `-lobjc'
9838      You need this special case of the `-l' option in order to link an
9839      Objective-C or Objective-C++ program.
9840
9841 `-nostartfiles'
9842      Do not use the standard system startup files when linking.  The
9843      standard system libraries are used normally, unless `-nostdlib' or
9844      `-nodefaultlibs' is used.
9845
9846 `-nodefaultlibs'
9847      Do not use the standard system libraries when linking.  Only the
9848      libraries you specify are passed to the linker, and options
9849      specifying linkage of the system libraries, such as
9850      `-static-libgcc' or `-shared-libgcc', are ignored.  The standard
9851      startup files are used normally, unless `-nostartfiles' is used.
9852
9853      The compiler may generate calls to `memcmp', `memset', `memcpy'
9854      and `memmove'.  These entries are usually resolved by entries in
9855      libc.  These entry points should be supplied through some other
9856      mechanism when this option is specified.
9857
9858 `-nostdlib'
9859      Do not use the standard system startup files or libraries when
9860      linking.  No startup files and only the libraries you specify are
9861      passed to the linker, and options specifying linkage of the system
9862      libraries, such as `-static-libgcc' or `-shared-libgcc', are
9863      ignored.
9864
9865      The compiler may generate calls to `memcmp', `memset', `memcpy'
9866      and `memmove'.  These entries are usually resolved by entries in
9867      libc.  These entry points should be supplied through some other
9868      mechanism when this option is specified.
9869
9870      One of the standard libraries bypassed by `-nostdlib' and
9871      `-nodefaultlibs' is `libgcc.a', a library of internal subroutines
9872      which GCC uses to overcome shortcomings of particular machines, or
9873      special needs for some languages.  (*Note Interfacing to GCC
9874      Output: (gccint)Interface, for more discussion of `libgcc.a'.)  In
9875      most cases, you need `libgcc.a' even when you want to avoid other
9876      standard libraries.  In other words, when you specify `-nostdlib'
9877      or `-nodefaultlibs' you should usually specify `-lgcc' as well.
9878      This ensures that you have no unresolved references to internal GCC
9879      library subroutines.  (An example of such an internal subroutine
9880      is `__main', used to ensure C++ constructors are called; *note
9881      `collect2': (gccint)Collect2.)
9882
9883 `-pie'
9884      Produce a position independent executable on targets that support
9885      it.  For predictable results, you must also specify the same set
9886      of options used for compilation (`-fpie', `-fPIE', or model
9887      suboptions) when you specify this linker option.
9888
9889 `-rdynamic'
9890      Pass the flag `-export-dynamic' to the ELF linker, on targets that
9891      support it. This instructs the linker to add all symbols, not only
9892      used ones, to the dynamic symbol table. This option is needed for
9893      some uses of `dlopen' or to allow obtaining backtraces from within
9894      a program.
9895
9896 `-s'
9897      Remove all symbol table and relocation information from the
9898      executable.
9899
9900 `-static'
9901      On systems that support dynamic linking, this prevents linking
9902      with the shared libraries.  On other systems, this option has no
9903      effect.
9904
9905 `-shared'
9906      Produce a shared object which can then be linked with other
9907      objects to form an executable.  Not all systems support this
9908      option.  For predictable results, you must also specify the same
9909      set of options used for compilation (`-fpic', `-fPIC', or model
9910      suboptions) when you specify this linker option.(1)
9911
9912 `-shared-libgcc'
9913 `-static-libgcc'
9914      On systems that provide `libgcc' as a shared library, these options
9915      force the use of either the shared or static version, respectively.
9916      If no shared version of `libgcc' was built when the compiler was
9917      configured, these options have no effect.
9918
9919      There are several situations in which an application should use the
9920      shared `libgcc' instead of the static version.  The most common of
9921      these is when the application wishes to throw and catch exceptions
9922      across different shared libraries.  In that case, each of the
9923      libraries as well as the application itself should use the shared
9924      `libgcc'.
9925
9926      Therefore, the G++ and GCJ drivers automatically add
9927      `-shared-libgcc' whenever you build a shared library or a main
9928      executable, because C++ and Java programs typically use
9929      exceptions, so this is the right thing to do.
9930
9931      If, instead, you use the GCC driver to create shared libraries,
9932      you may find that they are not always linked with the shared
9933      `libgcc'.  If GCC finds, at its configuration time, that you have
9934      a non-GNU linker or a GNU linker that does not support option
9935      `--eh-frame-hdr', it links the shared version of `libgcc' into
9936      shared libraries by default.  Otherwise, it takes advantage of the
9937      linker and optimizes away the linking with the shared version of
9938      `libgcc', linking with the static version of libgcc by default.
9939      This allows exceptions to propagate through such shared libraries,
9940      without incurring relocation costs at library load time.
9941
9942      However, if a library or main executable is supposed to throw or
9943      catch exceptions, you must link it using the G++ or GCJ driver, as
9944      appropriate for the languages used in the program, or using the
9945      option `-shared-libgcc', such that it is linked with the shared
9946      `libgcc'.
9947
9948 `-static-libasan'
9949      When the `-fsanitize=address' option is used to link a program,
9950      the GCC driver automatically links against `libasan'.  If
9951      `libasan' is available as a shared library, and the `-static'
9952      option is not used, then this links against the shared version of
9953      `libasan'.  The `-static-libasan' option directs the GCC driver to
9954      link `libasan' statically, without necessarily linking other
9955      libraries statically.
9956
9957 `-static-libtsan'
9958      When the `-fsanitize=thread' option is used to link a program, the
9959      GCC driver automatically links against `libtsan'.  If `libtsan' is
9960      available as a shared library, and the `-static' option is not
9961      used, then this links against the shared version of `libtsan'.
9962      The `-static-libtsan' option directs the GCC driver to link
9963      `libtsan' statically, without necessarily linking other libraries
9964      statically.
9965
9966 `-static-libstdc++'
9967      When the `g++' program is used to link a C++ program, it normally
9968      automatically links against `libstdc++'.  If `libstdc++' is
9969      available as a shared library, and the `-static' option is not
9970      used, then this links against the shared version of `libstdc++'.
9971      That is normally fine.  However, it is sometimes useful to freeze
9972      the version of `libstdc++' used by the program without going all
9973      the way to a fully static link.  The `-static-libstdc++' option
9974      directs the `g++' driver to link `libstdc++' statically, without
9975      necessarily linking other libraries statically.
9976
9977 `-symbolic'
9978      Bind references to global symbols when building a shared object.
9979      Warn about any unresolved references (unless overridden by the
9980      link editor option `-Xlinker -z -Xlinker defs').  Only a few
9981      systems support this option.
9982
9983 `-T SCRIPT'
9984      Use SCRIPT as the linker script.  This option is supported by most
9985      systems using the GNU linker.  On some targets, such as bare-board
9986      targets without an operating system, the `-T' option may be
9987      required when linking to avoid references to undefined symbols.
9988
9989 `-Xlinker OPTION'
9990      Pass OPTION as an option to the linker.  You can use this to
9991      supply system-specific linker options that GCC does not recognize.
9992
9993      If you want to pass an option that takes a separate argument, you
9994      must use `-Xlinker' twice, once for the option and once for the
9995      argument.  For example, to pass `-assert definitions', you must
9996      write `-Xlinker -assert -Xlinker definitions'.  It does not work
9997      to write `-Xlinker "-assert definitions"', because this passes the
9998      entire string as a single argument, which is not what the linker
9999      expects.
10000
10001      When using the GNU linker, it is usually more convenient to pass
10002      arguments to linker options using the `OPTION=VALUE' syntax than
10003      as separate arguments.  For example, you can specify `-Xlinker
10004      -Map=output.map' rather than `-Xlinker -Map -Xlinker output.map'.
10005      Other linkers may not support this syntax for command-line options.
10006
10007 `-Wl,OPTION'
10008      Pass OPTION as an option to the linker.  If OPTION contains
10009      commas, it is split into multiple options at the commas.  You can
10010      use this syntax to pass an argument to the option.  For example,
10011      `-Wl,-Map,output.map' passes `-Map output.map' to the linker.
10012      When using the GNU linker, you can also get the same effect with
10013      `-Wl,-Map=output.map'.
10014
10015 `-u SYMBOL'
10016      Pretend the symbol SYMBOL is undefined, to force linking of
10017      library modules to define it.  You can use `-u' multiple times with
10018      different symbols to force loading of additional library modules.
10019
10020  ---------- Footnotes ----------
10021
10022  (1) On some systems, `gcc -shared' needs to build supplementary stub
10023 code for constructors to work.  On multi-libbed systems, `gcc -shared'
10024 must select the correct support libraries to link against.  Failing to
10025 supply the correct flags may lead to subtle defects.  Supplying them in
10026 cases where they are not necessary is innocuous.
10027
10028 \1f
10029 File: gcc.info,  Node: Directory Options,  Next: Spec Files,  Prev: Link Options,  Up: Invoking GCC
10030
10031 3.14 Options for Directory Search
10032 =================================
10033
10034 These options specify directories to search for header files, for
10035 libraries and for parts of the compiler:
10036
10037 `-IDIR'
10038      Add the directory DIR to the head of the list of directories to be
10039      searched for header files.  This can be used to override a system
10040      header file, substituting your own version, since these
10041      directories are searched before the system header file
10042      directories.  However, you should not use this option to add
10043      directories that contain vendor-supplied system header files (use
10044      `-isystem' for that).  If you use more than one `-I' option, the
10045      directories are scanned in left-to-right order; the standard
10046      system directories come after.
10047
10048      If a standard system include directory, or a directory specified
10049      with `-isystem', is also specified with `-I', the `-I' option is
10050      ignored.  The directory is still searched but as a system
10051      directory at its normal position in the system include chain.
10052      This is to ensure that GCC's procedure to fix buggy system headers
10053      and the ordering for the `include_next' directive are not
10054      inadvertently changed.  If you really need to change the search
10055      order for system directories, use the `-nostdinc' and/or
10056      `-isystem' options.
10057
10058 `-iplugindir=DIR'
10059      Set the directory to search for plugins that are passed by
10060      `-fplugin=NAME' instead of `-fplugin=PATH/NAME.so'.  This option
10061      is not meant to be used by the user, but only passed by the driver.
10062
10063 `-iquoteDIR'
10064      Add the directory DIR to the head of the list of directories to be
10065      searched for header files only for the case of `#include "FILE"';
10066      they are not searched for `#include <FILE>', otherwise just like
10067      `-I'.
10068
10069 `-LDIR'
10070      Add directory DIR to the list of directories to be searched for
10071      `-l'.
10072
10073 `-BPREFIX'
10074      This option specifies where to find the executables, libraries,
10075      include files, and data files of the compiler itself.
10076
10077      The compiler driver program runs one or more of the subprograms
10078      `cpp', `cc1', `as' and `ld'.  It tries PREFIX as a prefix for each
10079      program it tries to run, both with and without `MACHINE/VERSION/'
10080      (*note Target Options::).
10081
10082      For each subprogram to be run, the compiler driver first tries the
10083      `-B' prefix, if any.  If that name is not found, or if `-B' is not
10084      specified, the driver tries two standard prefixes, `/usr/lib/gcc/'
10085      and `/usr/local/lib/gcc/'.  If neither of those results in a file
10086      name that is found, the unmodified program name is searched for
10087      using the directories specified in your `PATH' environment
10088      variable.
10089
10090      The compiler checks to see if the path provided by the `-B' refers
10091      to a directory, and if necessary it adds a directory separator
10092      character at the end of the path.
10093
10094      `-B' prefixes that effectively specify directory names also apply
10095      to libraries in the linker, because the compiler translates these
10096      options into `-L' options for the linker.  They also apply to
10097      includes files in the preprocessor, because the compiler
10098      translates these options into `-isystem' options for the
10099      preprocessor.  In this case, the compiler appends `include' to the
10100      prefix.
10101
10102      The runtime support file `libgcc.a' can also be searched for using
10103      the `-B' prefix, if needed.  If it is not found there, the two
10104      standard prefixes above are tried, and that is all.  The file is
10105      left out of the link if it is not found by those means.
10106
10107      Another way to specify a prefix much like the `-B' prefix is to use
10108      the environment variable `GCC_EXEC_PREFIX'.  *Note Environment
10109      Variables::.
10110
10111      As a special kludge, if the path provided by `-B' is
10112      `[dir/]stageN/', where N is a number in the range 0 to 9, then it
10113      is replaced by `[dir/]include'.  This is to help with
10114      boot-strapping the compiler.
10115
10116 `-specs=FILE'
10117      Process FILE after the compiler reads in the standard `specs'
10118      file, in order to override the defaults which the `gcc' driver
10119      program uses when determining what switches to pass to `cc1',
10120      `cc1plus', `as', `ld', etc.  More than one `-specs=FILE' can be
10121      specified on the command line, and they are processed in order,
10122      from left to right.
10123
10124 `--sysroot=DIR'
10125      Use DIR as the logical root directory for headers and libraries.
10126      For example, if the compiler normally searches for headers in
10127      `/usr/include' and libraries in `/usr/lib', it instead searches
10128      `DIR/usr/include' and `DIR/usr/lib'.
10129
10130      If you use both this option and the `-isysroot' option, then the
10131      `--sysroot' option applies to libraries, but the `-isysroot'
10132      option applies to header files.
10133
10134      The GNU linker (beginning with version 2.16) has the necessary
10135      support for this option.  If your linker does not support this
10136      option, the header file aspect of `--sysroot' still works, but the
10137      library aspect does not.
10138
10139 `--no-sysroot-suffix'
10140      For some targets, a suffix is added to the root directory specified
10141      with `--sysroot', depending on the other options used, so that
10142      headers may for example be found in `DIR/SUFFIX/usr/include'
10143      instead of `DIR/usr/include'.  This option disables the addition of
10144      such a suffix.
10145
10146 `-I-'
10147      This option has been deprecated.  Please use `-iquote' instead for
10148      `-I' directories before the `-I-' and remove the `-I-'.  Any
10149      directories you specify with `-I' options before the `-I-' option
10150      are searched only for the case of `#include "FILE"'; they are not
10151      searched for `#include <FILE>'.
10152
10153      If additional directories are specified with `-I' options after
10154      the `-I-', these directories are searched for all `#include'
10155      directives.  (Ordinarily _all_ `-I' directories are used this way.)
10156
10157      In addition, the `-I-' option inhibits the use of the current
10158      directory (where the current input file came from) as the first
10159      search directory for `#include "FILE"'.  There is no way to
10160      override this effect of `-I-'.  With `-I.' you can specify
10161      searching the directory that is current when the compiler is
10162      invoked.  That is not exactly the same as what the preprocessor
10163      does by default, but it is often satisfactory.
10164
10165      `-I-' does not inhibit the use of the standard system directories
10166      for header files.  Thus, `-I-' and `-nostdinc' are independent.
10167
10168 \1f
10169 File: gcc.info,  Node: Spec Files,  Next: Target Options,  Prev: Directory Options,  Up: Invoking GCC
10170
10171 3.15 Specifying subprocesses and the switches to pass to them
10172 =============================================================
10173
10174 `gcc' is a driver program.  It performs its job by invoking a sequence
10175 of other programs to do the work of compiling, assembling and linking.
10176 GCC interprets its command-line parameters and uses these to deduce
10177 which programs it should invoke, and which command-line options it
10178 ought to place on their command lines.  This behavior is controlled by
10179 "spec strings".  In most cases there is one spec string for each
10180 program that GCC can invoke, but a few programs have multiple spec
10181 strings to control their behavior.  The spec strings built into GCC can
10182 be overridden by using the `-specs=' command-line switch to specify a
10183 spec file.
10184
10185  "Spec files" are plaintext files that are used to construct spec
10186 strings.  They consist of a sequence of directives separated by blank
10187 lines.  The type of directive is determined by the first non-whitespace
10188 character on the line, which can be one of the following:
10189
10190 `%COMMAND'
10191      Issues a COMMAND to the spec file processor.  The commands that can
10192      appear here are:
10193
10194     `%include <FILE>'
10195           Search for FILE and insert its text at the current point in
10196           the specs file.
10197
10198     `%include_noerr <FILE>'
10199           Just like `%include', but do not generate an error message if
10200           the include file cannot be found.
10201
10202     `%rename OLD_NAME NEW_NAME'
10203           Rename the spec string OLD_NAME to NEW_NAME.
10204
10205
10206 `*[SPEC_NAME]:'
10207      This tells the compiler to create, override or delete the named
10208      spec string.  All lines after this directive up to the next
10209      directive or blank line are considered to be the text for the spec
10210      string.  If this results in an empty string then the spec is
10211      deleted.  (Or, if the spec did not exist, then nothing happens.)
10212      Otherwise, if the spec does not currently exist a new spec is
10213      created.  If the spec does exist then its contents are overridden
10214      by the text of this directive, unless the first character of that
10215      text is the `+' character, in which case the text is appended to
10216      the spec.
10217
10218 `[SUFFIX]:'
10219      Creates a new `[SUFFIX] spec' pair.  All lines after this directive
10220      and up to the next directive or blank line are considered to make
10221      up the spec string for the indicated suffix.  When the compiler
10222      encounters an input file with the named suffix, it processes the
10223      spec string in order to work out how to compile that file.  For
10224      example:
10225
10226           .ZZ:
10227           z-compile -input %i
10228
10229      This says that any input file whose name ends in `.ZZ' should be
10230      passed to the program `z-compile', which should be invoked with the
10231      command-line switch `-input' and with the result of performing the
10232      `%i' substitution.  (See below.)
10233
10234      As an alternative to providing a spec string, the text following a
10235      suffix directive can be one of the following:
10236
10237     `@LANGUAGE'
10238           This says that the suffix is an alias for a known LANGUAGE.
10239           This is similar to using the `-x' command-line switch to GCC
10240           to specify a language explicitly.  For example:
10241
10242                .ZZ:
10243                @c++
10244
10245           Says that .ZZ files are, in fact, C++ source files.
10246
10247     `#NAME'
10248           This causes an error messages saying:
10249
10250                NAME compiler not installed on this system.
10251
10252      GCC already has an extensive list of suffixes built into it.  This
10253      directive adds an entry to the end of the list of suffixes, but
10254      since the list is searched from the end backwards, it is
10255      effectively possible to override earlier entries using this
10256      technique.
10257
10258
10259  GCC has the following spec strings built into it.  Spec files can
10260 override these strings or create their own.  Note that individual
10261 targets can also add their own spec strings to this list.
10262
10263      asm          Options to pass to the assembler
10264      asm_final    Options to pass to the assembler post-processor
10265      cpp          Options to pass to the C preprocessor
10266      cc1          Options to pass to the C compiler
10267      cc1plus      Options to pass to the C++ compiler
10268      endfile      Object files to include at the end of the link
10269      link         Options to pass to the linker
10270      lib          Libraries to include on the command line to the linker
10271      libgcc       Decides which GCC support library to pass to the linker
10272      linker       Sets the name of the linker
10273      predefines   Defines to be passed to the C preprocessor
10274      signed_char  Defines to pass to CPP to say whether `char' is signed
10275                   by default
10276      startfile    Object files to include at the start of the link
10277
10278  Here is a small example of a spec file:
10279
10280      %rename lib                 old_lib
10281
10282      *lib:
10283      --start-group -lgcc -lc -leval1 --end-group %(old_lib)
10284
10285  This example renames the spec called `lib' to `old_lib' and then
10286 overrides the previous definition of `lib' with a new one.  The new
10287 definition adds in some extra command-line options before including the
10288 text of the old definition.
10289
10290  "Spec strings" are a list of command-line options to be passed to their
10291 corresponding program.  In addition, the spec strings can contain
10292 `%'-prefixed sequences to substitute variable text or to conditionally
10293 insert text into the command line.  Using these constructs it is
10294 possible to generate quite complex command lines.
10295
10296  Here is a table of all defined `%'-sequences for spec strings.  Note
10297 that spaces are not generated automatically around the results of
10298 expanding these sequences.  Therefore you can concatenate them together
10299 or combine them with constant text in a single argument.
10300
10301 `%%'
10302      Substitute one `%' into the program name or argument.
10303
10304 `%i'
10305      Substitute the name of the input file being processed.
10306
10307 `%b'
10308      Substitute the basename of the input file being processed.  This
10309      is the substring up to (and not including) the last period and not
10310      including the directory.
10311
10312 `%B'
10313      This is the same as `%b', but include the file suffix (text after
10314      the last period).
10315
10316 `%d'
10317      Marks the argument containing or following the `%d' as a temporary
10318      file name, so that that file is deleted if GCC exits successfully.
10319      Unlike `%g', this contributes no text to the argument.
10320
10321 `%gSUFFIX'
10322      Substitute a file name that has suffix SUFFIX and is chosen once
10323      per compilation, and mark the argument in the same way as `%d'.
10324      To reduce exposure to denial-of-service attacks, the file name is
10325      now chosen in a way that is hard to predict even when previously
10326      chosen file names are known.  For example, `%g.s ... %g.o ... %g.s'
10327      might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX
10328      matches the regexp `[.A-Za-z]*' or the special string `%O', which
10329      is treated exactly as if `%O' had been preprocessed.  Previously,
10330      `%g' was simply substituted with a file name chosen once per
10331      compilation, without regard to any appended suffix (which was
10332      therefore treated just like ordinary text), making such attacks
10333      more likely to succeed.
10334
10335 `%uSUFFIX'
10336      Like `%g', but generates a new temporary file name each time it
10337      appears instead of once per compilation.
10338
10339 `%USUFFIX'
10340      Substitutes the last file name generated with `%uSUFFIX',
10341      generating a new one if there is no such last file name.  In the
10342      absence of any `%uSUFFIX', this is just like `%gSUFFIX', except
10343      they don't share the same suffix _space_, so `%g.s ... %U.s ...
10344      %g.s ... %U.s' involves the generation of two distinct file names,
10345      one for each `%g.s' and another for each `%U.s'.  Previously, `%U'
10346      was simply substituted with a file name chosen for the previous
10347      `%u', without regard to any appended suffix.
10348
10349 `%jSUFFIX'
10350      Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is
10351      writable, and if `-save-temps' is not used; otherwise, substitute
10352      the name of a temporary file, just like `%u'.  This temporary file
10353      is not meant for communication between processes, but rather as a
10354      junk disposal mechanism.
10355
10356 `%|SUFFIX'
10357 `%mSUFFIX'
10358      Like `%g', except if `-pipe' is in effect.  In that case `%|'
10359      substitutes a single dash and `%m' substitutes nothing at all.
10360      These are the two most common ways to instruct a program that it
10361      should read from standard input or write to standard output.  If
10362      you need something more elaborate you can use an `%{pipe:`X'}'
10363      construct: see for example `f/lang-specs.h'.
10364
10365 `%.SUFFIX'
10366      Substitutes .SUFFIX for the suffixes of a matched switch's args
10367      when it is subsequently output with `%*'.  SUFFIX is terminated by
10368      the next space or %.
10369
10370 `%w'
10371      Marks the argument containing or following the `%w' as the
10372      designated output file of this compilation.  This puts the argument
10373      into the sequence of arguments that `%o' substitutes.
10374
10375 `%o'
10376      Substitutes the names of all the output files, with spaces
10377      automatically placed around them.  You should write spaces around
10378      the `%o' as well or the results are undefined.  `%o' is for use in
10379      the specs for running the linker.  Input files whose names have no
10380      recognized suffix are not compiled at all, but they are included
10381      among the output files, so they are linked.
10382
10383 `%O'
10384      Substitutes the suffix for object files.  Note that this is
10385      handled specially when it immediately follows `%g, %u, or %U',
10386      because of the need for those to form complete file names.  The
10387      handling is such that `%O' is treated exactly as if it had already
10388      been substituted, except that `%g, %u, and %U' do not currently
10389      support additional SUFFIX characters following `%O' as they do
10390      following, for example, `.o'.
10391
10392 `%p'
10393      Substitutes the standard macro predefinitions for the current
10394      target machine.  Use this when running `cpp'.
10395
10396 `%P'
10397      Like `%p', but puts `__' before and after the name of each
10398      predefined macro, except for macros that start with `__' or with
10399      `_L', where L is an uppercase letter.  This is for ISO C.
10400
10401 `%I'
10402      Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'),
10403      `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made
10404      from `COMPILER_PATH' and `-B' options) and `-imultilib' as
10405      necessary.
10406
10407 `%s'
10408      Current argument is the name of a library or startup file of some
10409      sort.  Search for that file in a standard list of directories and
10410      substitute the full name found.  The current working directory is
10411      included in the list of directories scanned.
10412
10413 `%T'
10414      Current argument is the name of a linker script.  Search for that
10415      file in the current list of directories to scan for libraries. If
10416      the file is located insert a `--script' option into the command
10417      line followed by the full path name found.  If the file is not
10418      found then generate an error message.  Note: the current working
10419      directory is not searched.
10420
10421 `%eSTR'
10422      Print STR as an error message.  STR is terminated by a newline.
10423      Use this when inconsistent options are detected.
10424
10425 `%(NAME)'
10426      Substitute the contents of spec string NAME at this point.
10427
10428 `%x{OPTION}'
10429      Accumulate an option for `%X'.
10430
10431 `%X'
10432      Output the accumulated linker options specified by `-Wl' or a `%x'
10433      spec string.
10434
10435 `%Y'
10436      Output the accumulated assembler options specified by `-Wa'.
10437
10438 `%Z'
10439      Output the accumulated preprocessor options specified by `-Wp'.
10440
10441 `%a'
10442      Process the `asm' spec.  This is used to compute the switches to
10443      be passed to the assembler.
10444
10445 `%A'
10446      Process the `asm_final' spec.  This is a spec string for passing
10447      switches to an assembler post-processor, if such a program is
10448      needed.
10449
10450 `%l'
10451      Process the `link' spec.  This is the spec for computing the
10452      command line passed to the linker.  Typically it makes use of the
10453      `%L %G %S %D and %E' sequences.
10454
10455 `%D'
10456      Dump out a `-L' option for each directory that GCC believes might
10457      contain startup files.  If the target supports multilibs then the
10458      current multilib directory is prepended to each of these paths.
10459
10460 `%L'
10461      Process the `lib' spec.  This is a spec string for deciding which
10462      libraries are included on the command line to the linker.
10463
10464 `%G'
10465      Process the `libgcc' spec.  This is a spec string for deciding
10466      which GCC support library is included on the command line to the
10467      linker.
10468
10469 `%S'
10470      Process the `startfile' spec.  This is a spec for deciding which
10471      object files are the first ones passed to the linker.  Typically
10472      this might be a file named `crt0.o'.
10473
10474 `%E'
10475      Process the `endfile' spec.  This is a spec string that specifies
10476      the last object files that are passed to the linker.
10477
10478 `%C'
10479      Process the `cpp' spec.  This is used to construct the arguments
10480      to be passed to the C preprocessor.
10481
10482 `%1'
10483      Process the `cc1' spec.  This is used to construct the options to
10484      be passed to the actual C compiler (`cc1').
10485
10486 `%2'
10487      Process the `cc1plus' spec.  This is used to construct the options
10488      to be passed to the actual C++ compiler (`cc1plus').
10489
10490 `%*'
10491      Substitute the variable part of a matched option.  See below.
10492      Note that each comma in the substituted string is replaced by a
10493      single space.
10494
10495 `%<`S''
10496      Remove all occurrences of `-S' from the command line.  Note--this
10497      command is position dependent.  `%' commands in the spec string
10498      before this one see `-S', `%' commands in the spec string after
10499      this one do not.
10500
10501 `%:FUNCTION(ARGS)'
10502      Call the named function FUNCTION, passing it ARGS.  ARGS is first
10503      processed as a nested spec string, then split into an argument
10504      vector in the usual fashion.  The function returns a string which
10505      is processed as if it had appeared literally as part of the
10506      current spec.
10507
10508      The following built-in spec functions are provided:
10509
10510     ``getenv''
10511           The `getenv' spec function takes two arguments: an environment
10512           variable name and a string.  If the environment variable is
10513           not defined, a fatal error is issued.  Otherwise, the return
10514           value is the value of the environment variable concatenated
10515           with the string.  For example, if `TOPDIR' is defined as
10516           `/path/to/top', then:
10517
10518                %:getenv(TOPDIR /include)
10519
10520           expands to `/path/to/top/include'.
10521
10522     ``if-exists''
10523           The `if-exists' spec function takes one argument, an absolute
10524           pathname to a file.  If the file exists, `if-exists' returns
10525           the pathname.  Here is a small example of its usage:
10526
10527                *startfile:
10528                crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
10529
10530     ``if-exists-else''
10531           The `if-exists-else' spec function is similar to the
10532           `if-exists' spec function, except that it takes two
10533           arguments.  The first argument is an absolute pathname to a
10534           file.  If the file exists, `if-exists-else' returns the
10535           pathname.  If it does not exist, it returns the second
10536           argument.  This way, `if-exists-else' can be used to select
10537           one file or another, based on the existence of the first.
10538           Here is a small example of its usage:
10539
10540                *startfile:
10541                crt0%O%s %:if-exists(crti%O%s) \
10542                %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
10543
10544     ``replace-outfile''
10545           The `replace-outfile' spec function takes two arguments.  It
10546           looks for the first argument in the outfiles array and
10547           replaces it with the second argument.  Here is a small
10548           example of its usage:
10549
10550                %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
10551
10552     ``remove-outfile''
10553           The `remove-outfile' spec function takes one argument.  It
10554           looks for the first argument in the outfiles array and
10555           removes it.  Here is a small example its usage:
10556
10557                %:remove-outfile(-lm)
10558
10559     ``pass-through-libs''
10560           The `pass-through-libs' spec function takes any number of
10561           arguments.  It finds any `-l' options and any non-options
10562           ending in `.a' (which it assumes are the names of linker
10563           input library archive files) and returns a result containing
10564           all the found arguments each prepended by
10565           `-plugin-opt=-pass-through=' and joined by spaces.  This list
10566           is intended to be passed to the LTO linker plugin.
10567
10568                %:pass-through-libs(%G %L %G)
10569
10570     ``print-asm-header''
10571           The `print-asm-header' function takes no arguments and simply
10572           prints a banner like:
10573
10574                Assembler options
10575                =================
10576
10577                Use "-Wa,OPTION" to pass "OPTION" to the assembler.
10578
10579           It is used to separate compiler options from assembler options
10580           in the `--target-help' output.
10581
10582 `%{`S'}'
10583      Substitutes the `-S' switch, if that switch is given to GCC.  If
10584      that switch is not specified, this substitutes nothing.  Note that
10585      the leading dash is omitted when specifying this option, and it is
10586      automatically inserted if the substitution is performed.  Thus the
10587      spec string `%{foo}' matches the command-line option `-foo' and
10588      outputs the command-line option `-foo'.
10589
10590 `%W{`S'}'
10591      Like %{`S'} but mark last argument supplied within as a file to be
10592      deleted on failure.
10593
10594 `%{`S'*}'
10595      Substitutes all the switches specified to GCC whose names start
10596      with `-S', but which also take an argument.  This is used for
10597      switches like `-o', `-D', `-I', etc.  GCC considers `-o foo' as
10598      being one switch whose name starts with `o'.  %{o*} substitutes
10599      this text, including the space.  Thus two arguments are generated.
10600
10601 `%{`S'*&`T'*}'
10602      Like %{`S'*}, but preserve order of `S' and `T' options (the order
10603      of `S' and `T' in the spec is not significant).  There can be any
10604      number of ampersand-separated variables; for each the wild card is
10605      optional.  Useful for CPP as `%{D*&U*&A*}'.
10606
10607 `%{`S':`X'}'
10608      Substitutes `X', if the `-S' switch is given to GCC.
10609
10610 `%{!`S':`X'}'
10611      Substitutes `X', if the `-S' switch is _not_ given to GCC.
10612
10613 `%{`S'*:`X'}'
10614      Substitutes `X' if one or more switches whose names start with
10615      `-S' are specified to GCC.  Normally `X' is substituted only once,
10616      no matter how many such switches appeared.  However, if `%*'
10617      appears somewhere in `X', then `X' is substituted once for each
10618      matching switch, with the `%*' replaced by the part of that switch
10619      matching the `*'.
10620
10621 `%{.`S':`X'}'
10622      Substitutes `X', if processing a file with suffix `S'.
10623
10624 `%{!.`S':`X'}'
10625      Substitutes `X', if _not_ processing a file with suffix `S'.
10626
10627 `%{,`S':`X'}'
10628      Substitutes `X', if processing a file for language `S'.
10629
10630 `%{!,`S':`X'}'
10631      Substitutes `X', if not processing a file for language `S'.
10632
10633 `%{`S'|`P':`X'}'
10634      Substitutes `X' if either `-S' or `-P' is given to GCC.  This may
10635      be combined with `!', `.', `,', and `*' sequences as well,
10636      although they have a stronger binding than the `|'.  If `%*'
10637      appears in `X', all of the alternatives must be starred, and only
10638      the first matching alternative is substituted.
10639
10640      For example, a spec string like this:
10641
10642           %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
10643
10644      outputs the following command-line options from the following input
10645      command-line options:
10646
10647           fred.c        -foo -baz
10648           jim.d         -bar -boggle
10649           -d fred.c     -foo -baz -boggle
10650           -d jim.d      -bar -baz -boggle
10651
10652 `%{S:X; T:Y; :D}'
10653      If `S' is given to GCC, substitutes `X'; else if `T' is given to
10654      GCC, substitutes `Y'; else substitutes `D'.  There can be as many
10655      clauses as you need.  This may be combined with `.', `,', `!',
10656      `|', and `*' as needed.
10657
10658
10659  The conditional text `X' in a %{`S':`X'} or similar construct may
10660 contain other nested `%' constructs or spaces, or even newlines.  They
10661 are processed as usual, as described above.  Trailing white space in
10662 `X' is ignored.  White space may also appear anywhere on the left side
10663 of the colon in these constructs, except between `.' or `*' and the
10664 corresponding word.
10665
10666  The `-O', `-f', `-m', and `-W' switches are handled specifically in
10667 these constructs.  If another value of `-O' or the negated form of a
10668 `-f', `-m', or `-W' switch is found later in the command line, the
10669 earlier switch value is ignored, except with {`S'*} where `S' is just
10670 one letter, which passes all matching options.
10671
10672  The character `|' at the beginning of the predicate text is used to
10673 indicate that a command should be piped to the following command, but
10674 only if `-pipe' is specified.
10675
10676  It is built into GCC which switches take arguments and which do not.
10677 (You might think it would be useful to generalize this to allow each
10678 compiler's spec to say which switches take arguments.  But this cannot
10679 be done in a consistent fashion.  GCC cannot even decide which input
10680 files have been specified without knowing which switches take arguments,
10681 and it must know which input files to compile in order to tell which
10682 compilers to run).
10683
10684  GCC also knows implicitly that arguments starting in `-l' are to be
10685 treated as compiler output files, and passed to the linker in their
10686 proper position among the other output files.
10687
10688 \1f
10689 File: gcc.info,  Node: Target Options,  Next: Submodel Options,  Prev: Spec Files,  Up: Invoking GCC
10690
10691 3.16 Specifying Target Machine and Compiler Version
10692 ===================================================
10693
10694 The usual way to run GCC is to run the executable called `gcc', or
10695 `MACHINE-gcc' when cross-compiling, or `MACHINE-gcc-VERSION' to run a
10696 version other than the one that was installed last.
10697
10698 \1f
10699 File: gcc.info,  Node: Submodel Options,  Next: Code Gen Options,  Prev: Target Options,  Up: Invoking GCC
10700
10701 3.17 Hardware Models and Configurations
10702 =======================================
10703
10704 Each target machine types can have its own special options, starting
10705 with `-m', to choose among various hardware models or
10706 configurations--for example, 68010 vs 68020, floating coprocessor or
10707 none.  A single installed version of the compiler can compile for any
10708 model or configuration, according to the options specified.
10709
10710  Some configurations of the compiler also support additional special
10711 options, usually for compatibility with other compilers on the same
10712 platform.
10713
10714 * Menu:
10715
10716 * AArch64 Options::
10717 * Adapteva Epiphany Options::
10718 * ARM Options::
10719 * AVR Options::
10720 * Blackfin Options::
10721 * C6X Options::
10722 * CRIS Options::
10723 * CR16 Options::
10724 * Darwin Options::
10725 * DEC Alpha Options::
10726 * FR30 Options::
10727 * FRV Options::
10728 * GNU/Linux Options::
10729 * H8/300 Options::
10730 * HPPA Options::
10731 * i386 and x86-64 Options::
10732 * i386 and x86-64 Windows Options::
10733 * IA-64 Options::
10734 * LM32 Options::
10735 * M32C Options::
10736 * M32R/D Options::
10737 * M680x0 Options::
10738 * MCore Options::
10739 * MeP Options::
10740 * MicroBlaze Options::
10741 * MIPS Options::
10742 * MMIX Options::
10743 * MN10300 Options::
10744 * Moxie Options::
10745 * PDP-11 Options::
10746 * picoChip Options::
10747 * PowerPC Options::
10748 * RL78 Options::
10749 * RS/6000 and PowerPC Options::
10750 * RX Options::
10751 * S/390 and zSeries Options::
10752 * Score Options::
10753 * SH Options::
10754 * Solaris 2 Options::
10755 * SPARC Options::
10756 * SPU Options::
10757 * System V Options::
10758 * TILE-Gx Options::
10759 * TILEPro Options::
10760 * V850 Options::
10761 * VAX Options::
10762 * VMS Options::
10763 * VxWorks Options::
10764 * x86-64 Options::
10765 * Xstormy16 Options::
10766 * Xtensa Options::
10767 * zSeries Options::
10768
10769 \1f
10770 File: gcc.info,  Node: AArch64 Options,  Next: Adapteva Epiphany Options,  Up: Submodel Options
10771
10772 3.17.1 AArch64 Options
10773 ----------------------
10774
10775 These options are defined for AArch64 implementations:
10776
10777 `-mbig-endian'
10778      Generate big-endian code.  This is the default when GCC is
10779      configured for an `aarch64_be-*-*' target.
10780
10781 `-mgeneral-regs-only'
10782      Generate code which uses only the general registers.
10783
10784 `-mlittle-endian'
10785      Generate little-endian code.  This is the default when GCC is
10786      configured for an `aarch64-*-*' but not an `aarch64_be-*-*' target.
10787
10788 `-mcmodel=tiny'
10789      Generate code for the tiny code model.  The program and its
10790      statically defined symbols must be within 1GB of each other.
10791      Pointers are 64 bits.  Programs can be statically or dynamically
10792      linked.  This model is not fully implemented and mostly treated as
10793      `small'.
10794
10795 `-mcmodel=small'
10796      Generate code for the small code model.  The program and its
10797      statically defined symbols must be within 4GB of each other.
10798      Pointers are 64 bits.  Programs can be statically or dynamically
10799      linked.  This is the default code model.
10800
10801 `-mcmodel=large'
10802      Generate code for the large code model.  This makes no assumptions
10803      about addresses and sizes of sections.  Pointers are 64 bits.
10804      Programs can be statically linked only.
10805
10806 `-mstrict-align'
10807      Do not assume that unaligned memory references will be handled by
10808      the system.
10809
10810 `-momit-leaf-frame-pointer'
10811 `-mno-omit-leaf-frame-pointer'
10812      Omit or keep the frame pointer in leaf functions.  The former
10813      behaviour is the default.
10814
10815 `-mtls-dialect=desc'
10816      Use TLS descriptors as the thread-local storage mechanism for
10817      dynamic accesses of TLS variables.  This is the default.
10818
10819 `-mtls-dialect=traditional'
10820      Use traditional TLS as the thread-local storage mechanism for
10821      dynamic accesses of TLS variables.
10822
10823 `-march=NAME'
10824      Specify the name of the target architecture, optionally suffixed
10825      by one or more feature modifiers.  This option has the form
10826      `-march=ARCH{+[no]FEATURE}*', where the only value for ARCH is
10827      `armv8-a'.  The possible values for FEATURE are documented in the
10828      sub-section below.
10829
10830      Where conflicting feature modifiers are specified, the right-most
10831      feature is used.
10832
10833      GCC uses this name to determine what kind of instructions it can
10834      emit when generating assembly code.  This option can be used in
10835      conjunction with or instead of the `-mcpu=' option.
10836
10837 `-mcpu=NAME'
10838      Specify the name of the target processor, optionally suffixed by
10839      one or more feature modifiers.  This option has the form
10840      `-mcpu=CPU{+[no]FEATURE}*', where the possible values for CPU are
10841      `generic', `large'.  The possible values for FEATURE are
10842      documented in the sub-section below.
10843
10844      Where conflicting feature modifiers are specified, the right-most
10845      feature is used.
10846
10847      GCC uses this name to determine what kind of instructions it can
10848      emit when generating assembly code.
10849
10850 `-mtune=NAME'
10851      Specify the name of the processor to tune the performance for.
10852      The code will be tuned as if the target processor were of the type
10853      specified in this option, but still using instructions compatible
10854      with the target processor specified by a `-mcpu=' option.  This
10855      option cannot be suffixed by feature modifiers.
10856
10857
10858 3.17.1.1 `-march' and `-mcpu' feature modifiers
10859 ...............................................
10860
10861 Feature modifiers used with `-march' and `-mcpu' can be one the
10862 following:
10863
10864 `crypto'
10865      Enable Crypto extension.  This implies Advanced SIMD is enabled.
10866
10867 `fp'
10868      Enable floating-point instructions.
10869
10870 `simd'
10871      Enable Advanced SIMD instructions.  This implies floating-point
10872      instructions are enabled.  This is the default for all current
10873      possible values for options `-march' and `-mcpu='.
10874
10875 \1f
10876 File: gcc.info,  Node: Adapteva Epiphany Options,  Next: ARM Options,  Prev: AArch64 Options,  Up: Submodel Options
10877
10878 3.17.2 Adapteva Epiphany Options
10879 --------------------------------
10880
10881 These `-m' options are defined for Adapteva Epiphany:
10882
10883 `-mhalf-reg-file'
10884      Don't allocate any register in the range `r32'...`r63'.  That
10885      allows code to run on hardware variants that lack these registers.
10886
10887 `-mprefer-short-insn-regs'
10888      Preferrentially allocate registers that allow short instruction
10889      generation.  This can result in increased instruction count, so
10890      this may either reduce or increase overall code size.
10891
10892 `-mbranch-cost=NUM'
10893      Set the cost of branches to roughly NUM "simple" instructions.
10894      This cost is only a heuristic and is not guaranteed to produce
10895      consistent results across releases.
10896
10897 `-mcmove'
10898      Enable the generation of conditional moves.
10899
10900 `-mnops=NUM'
10901      Emit NUM NOPs before every other generated instruction.
10902
10903 `-mno-soft-cmpsf'
10904      For single-precision floating-point comparisons, emit an `fsub'
10905      instruction and test the flags.  This is faster than a software
10906      comparison, but can get incorrect results in the presence of NaNs,
10907      or when two different small numbers are compared such that their
10908      difference is calculated as zero.  The default is `-msoft-cmpsf',
10909      which uses slower, but IEEE-compliant, software comparisons.
10910
10911 `-mstack-offset=NUM'
10912      Set the offset between the top of the stack and the stack pointer.
10913      E.g., a value of 8 means that the eight bytes in the range
10914      `sp+0...sp+7' can be used by leaf functions without stack
10915      allocation.  Values other than `8' or `16' are untested and
10916      unlikely to work.  Note also that this option changes the ABI;
10917      compiling a program with a different stack offset than the
10918      libraries have been compiled with generally does not work.  This
10919      option can be useful if you want to evaluate if a different stack
10920      offset would give you better code, but to actually use a different
10921      stack offset to build working programs, it is recommended to
10922      configure the toolchain with the appropriate
10923      `--with-stack-offset=NUM' option.
10924
10925 `-mno-round-nearest'
10926      Make the scheduler assume that the rounding mode has been set to
10927      truncating.  The default is `-mround-nearest'.
10928
10929 `-mlong-calls'
10930      If not otherwise specified by an attribute, assume all calls might
10931      be beyond the offset range of the `b' / `bl' instructions, and
10932      therefore load the function address into a register before
10933      performing a (otherwise direct) call.  This is the default.
10934
10935 `-mshort-calls'
10936      If not otherwise specified by an attribute, assume all direct
10937      calls are in the range of the `b' / `bl' instructions, so use
10938      these instructions for direct calls.  The default is
10939      `-mlong-calls'.
10940
10941 `-msmall16'
10942      Assume addresses can be loaded as 16-bit unsigned values.  This
10943      does not apply to function addresses for which `-mlong-calls'
10944      semantics are in effect.
10945
10946 `-mfp-mode=MODE'
10947      Set the prevailing mode of the floating-point unit.  This
10948      determines the floating-point mode that is provided and expected
10949      at function call and return time.  Making this mode match the mode
10950      you predominantly need at function start can make your programs
10951      smaller and faster by avoiding unnecessary mode switches.
10952
10953      MODE can be set to one the following values:
10954
10955     `caller'
10956           Any mode at function entry is valid, and retained or restored
10957           when the function returns, and when it calls other functions.
10958           This mode is useful for compiling libraries or other
10959           compilation units you might want to incorporate into
10960           different programs with different prevailing FPU modes, and
10961           the convenience of being able to use a single object file
10962           outweighs the size and speed overhead for any extra mode
10963           switching that might be needed, compared with what would be
10964           needed with a more specific choice of prevailing FPU mode.
10965
10966     `truncate'
10967           This is the mode used for floating-point calculations with
10968           truncating (i.e. round towards zero) rounding mode.  That
10969           includes conversion from floating point to integer.
10970
10971     `round-nearest'
10972           This is the mode used for floating-point calculations with
10973           round-to-nearest-or-even rounding mode.
10974
10975     `int'
10976           This is the mode used to perform integer calculations in the
10977           FPU, e.g.  integer multiply, or integer
10978           multiply-and-accumulate.
10979
10980      The default is `-mfp-mode=caller'
10981
10982 `-mnosplit-lohi'
10983 `-mno-postinc'
10984 `-mno-postmodify'
10985      Code generation tweaks that disable, respectively, splitting of
10986      32-bit loads, generation of post-increment addresses, and
10987      generation of post-modify addresses.  The defaults are
10988      `msplit-lohi', `-mpost-inc', and `-mpost-modify'.
10989
10990 `-mnovect-double'
10991      Change the preferred SIMD mode to SImode.  The default is
10992      `-mvect-double', which uses DImode as preferred SIMD mode.
10993
10994 `-max-vect-align=NUM'
10995      The maximum alignment for SIMD vector mode types.  NUM may be 4 or
10996      8.  The default is 8.  Note that this is an ABI change, even
10997      though many library function interfaces are unaffected if they
10998      don't use SIMD vector modes in places that affect size and/or
10999      alignment of relevant types.
11000
11001 `-msplit-vecmove-early'
11002      Split vector moves into single word moves before reload.  In
11003      theory this can give better register allocation, but so far the
11004      reverse seems to be generally the case.
11005
11006 `-m1reg-REG'
11007      Specify a register to hold the constant -1, which makes loading
11008      small negative constants and certain bitmasks faster.  Allowable
11009      values for REG are `r43' and `r63', which specify use of that
11010      register as a fixed register, and `none', which means that no
11011      register is used for this purpose.  The default is `-m1reg-none'.
11012
11013
11014 \1f
11015 File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: Adapteva Epiphany Options,  Up: Submodel Options
11016
11017 3.17.3 ARM Options
11018 ------------------
11019
11020 These `-m' options are defined for Advanced RISC Machines (ARM)
11021 architectures:
11022
11023 `-mabi=NAME'
11024      Generate code for the specified ABI.  Permissible values are:
11025      `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'.
11026
11027 `-mapcs-frame'
11028      Generate a stack frame that is compliant with the ARM Procedure
11029      Call Standard for all functions, even if this is not strictly
11030      necessary for correct execution of the code.  Specifying
11031      `-fomit-frame-pointer' with this option causes the stack frames
11032      not to be generated for leaf functions.  The default is
11033      `-mno-apcs-frame'.
11034
11035 `-mapcs'
11036      This is a synonym for `-mapcs-frame'.
11037
11038 `-mthumb-interwork'
11039      Generate code that supports calling between the ARM and Thumb
11040      instruction sets.  Without this option, on pre-v5 architectures,
11041      the two instruction sets cannot be reliably used inside one
11042      program.  The default is `-mno-thumb-interwork', since slightly
11043      larger code is generated when `-mthumb-interwork' is specified.
11044      In AAPCS configurations this option is meaningless.
11045
11046 `-mno-sched-prolog'
11047      Prevent the reordering of instructions in the function prologue,
11048      or the merging of those instruction with the instructions in the
11049      function's body.  This means that all functions start with a
11050      recognizable set of instructions (or in fact one of a choice from
11051      a small set of different function prologues), and this information
11052      can be used to locate the start of functions inside an executable
11053      piece of code.  The default is `-msched-prolog'.
11054
11055 `-mfloat-abi=NAME'
11056      Specifies which floating-point ABI to use.  Permissible values
11057      are: `soft', `softfp' and `hard'.
11058
11059      Specifying `soft' causes GCC to generate output containing library
11060      calls for floating-point operations.  `softfp' allows the
11061      generation of code using hardware floating-point instructions, but
11062      still uses the soft-float calling conventions.  `hard' allows
11063      generation of floating-point instructions and uses FPU-specific
11064      calling conventions.
11065
11066      The default depends on the specific target configuration.  Note
11067      that the hard-float and soft-float ABIs are not link-compatible;
11068      you must compile your entire program with the same ABI, and link
11069      with a compatible set of libraries.
11070
11071 `-mlittle-endian'
11072      Generate code for a processor running in little-endian mode.  This
11073      is the default for all standard configurations.
11074
11075 `-mbig-endian'
11076      Generate code for a processor running in big-endian mode; the
11077      default is to compile code for a little-endian processor.
11078
11079 `-mwords-little-endian'
11080      This option only applies when generating code for big-endian
11081      processors.  Generate code for a little-endian word order but a
11082      big-endian byte order.  That is, a byte order of the form
11083      `32107654'.  Note: this option should only be used if you require
11084      compatibility with code for big-endian ARM processors generated by
11085      versions of the compiler prior to 2.8.  This option is now
11086      deprecated.
11087
11088 `-mcpu=NAME'
11089      This specifies the name of the target ARM processor.  GCC uses
11090      this name to determine what kind of instructions it can emit when
11091      generating assembly code.  Permissible names are: `arm2', `arm250',
11092      `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7',
11093      `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700',
11094      `arm700i', `arm710', `arm710c', `arm7100', `arm720', `arm7500',
11095      `arm7500fe', `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t',
11096      `arm740t', `strongarm', `strongarm110', `strongarm1100',
11097      `strongarm1110', `arm8', `arm810', `arm9', `arm9e', `arm920',
11098      `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s',
11099      `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t',
11100      `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s',
11101      `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1156t2-s',
11102      `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s', `cortex-a5',
11103      `cortex-a7', `cortex-a8', `cortex-a9', `cortex-a15', `cortex-r4',
11104      `cortex-r4f', `cortex-r5', `cortex-m4', `cortex-m3', `cortex-m1',
11105      `cortex-m0', `cortex-m0plus', `marvell-pj4', `xscale', `iwmmxt',
11106      `iwmmxt2', `ep9312', `fa526', `fa626', `fa606te', `fa626te',
11107      `fmp626', `fa726te'.
11108
11109      `-mcpu=generic-ARCH' is also permissible, and is equivalent to
11110      `-march=ARCH -mtune=generic-ARCH'.  See `-mtune' for more
11111      information.
11112
11113      `-mcpu=native' causes the compiler to auto-detect the CPU of the
11114      build computer.  At present, this feature is only supported on
11115      Linux, and not all architectures are recognized.  If the
11116      auto-detect is unsuccessful the option has no effect.
11117
11118 `-mtune=NAME'
11119      This option is very similar to the `-mcpu=' option, except that
11120      instead of specifying the actual target processor type, and hence
11121      restricting which instructions can be used, it specifies that GCC
11122      should tune the performance of the code as if the target were of
11123      the type specified in this option, but still choosing the
11124      instructions it generates based on the CPU specified by a `-mcpu='
11125      option.  For some ARM implementations better performance can be
11126      obtained by using this option.
11127
11128      `-mtune=generic-ARCH' specifies that GCC should tune the
11129      performance for a blend of processors within architecture ARCH.
11130      The aim is to generate code that run well on the current most
11131      popular processors, balancing between optimizations that benefit
11132      some CPUs in the range, and avoiding performance pitfalls of other
11133      CPUs.  The effects of this option may change in future GCC
11134      versions as CPU models come and go.
11135
11136      `-mtune=native' causes the compiler to auto-detect the CPU of the
11137      build computer.  At present, this feature is only supported on
11138      Linux, and not all architectures are recognized.  If the
11139      auto-detect is unsuccessful the option has no effect.
11140
11141 `-march=NAME'
11142      This specifies the name of the target ARM architecture.  GCC uses
11143      this name to determine what kind of instructions it can emit when
11144      generating assembly code.  This option can be used in conjunction
11145      with or instead of the `-mcpu=' option.  Permissible names are:
11146      `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5',
11147      `armv5t', `armv5e', `armv5te', `armv6', `armv6j', `armv6t2',
11148      `armv6z', `armv6zk', `armv6-m', `armv7', `armv7-a', `armv7-r',
11149      `armv7-m', `armv8-a', `iwmmxt', `iwmmxt2', `ep9312'.
11150
11151      `-march=native' causes the compiler to auto-detect the architecture
11152      of the build computer.  At present, this feature is only supported
11153      on Linux, and not all architectures are recognized.  If the
11154      auto-detect is unsuccessful the option has no effect.
11155
11156 `-mfpu=NAME'
11157      This specifies what floating-point hardware (or hardware
11158      emulation) is available on the target.  Permissible names are:
11159      `vfp', `vfpv3', `vfpv3-fp16', `vfpv3-d16', `vfpv3-d16-fp16',
11160      `vfpv3xd', `vfpv3xd-fp16', `neon', `neon-fp16', `vfpv4',
11161      `vfpv4-d16', `fpv4-sp-d16', `neon-vfpv4', `fp-armv8',
11162      `neon-fp-armv8', and `crypto-neon-fp-armv8'.
11163
11164      If `-msoft-float' is specified this specifies the format of
11165      floating-point values.
11166
11167      If the selected floating-point hardware includes the NEON extension
11168      (e.g. `-mfpu'=`neon'), note that floating-point operations are not
11169      generated by GCC's auto-vectorization pass unless
11170      `-funsafe-math-optimizations' is also specified.  This is because
11171      NEON hardware does not fully implement the IEEE 754 standard for
11172      floating-point arithmetic (in particular denormal values are
11173      treated as zero), so the use of NEON instructions may lead to a
11174      loss of precision.
11175
11176 `-mfp16-format=NAME'
11177      Specify the format of the `__fp16' half-precision floating-point
11178      type.  Permissible names are `none', `ieee', and `alternative';
11179      the default is `none', in which case the `__fp16' type is not
11180      defined.  *Note Half-Precision::, for more information.
11181
11182 `-mstructure-size-boundary=N'
11183      The sizes of all structures and unions are rounded up to a multiple
11184      of the number of bits set by this option.  Permissible values are
11185      8, 32 and 64.  The default value varies for different toolchains.
11186      For the COFF targeted toolchain the default value is 8.  A value
11187      of 64 is only allowed if the underlying ABI supports it.
11188
11189      Specifying a larger number can produce faster, more efficient
11190      code, but can also increase the size of the program.  Different
11191      values are potentially incompatible.  Code compiled with one value
11192      cannot necessarily expect to work with code or libraries compiled
11193      with another value, if they exchange information using structures
11194      or unions.
11195
11196 `-mabort-on-noreturn'
11197      Generate a call to the function `abort' at the end of a `noreturn'
11198      function.  It is executed if the function tries to return.
11199
11200 `-mlong-calls'
11201 `-mno-long-calls'
11202      Tells the compiler to perform function calls by first loading the
11203      address of the function into a register and then performing a
11204      subroutine call on this register.  This switch is needed if the
11205      target function lies outside of the 64-megabyte addressing range
11206      of the offset-based version of subroutine call instruction.
11207
11208      Even if this switch is enabled, not all function calls are turned
11209      into long calls.  The heuristic is that static functions, functions
11210      that have the `short-call' attribute, functions that are inside
11211      the scope of a `#pragma no_long_calls' directive, and functions
11212      whose definitions have already been compiled within the current
11213      compilation unit are not turned into long calls.  The exceptions
11214      to this rule are that weak function definitions, functions with
11215      the `long-call' attribute or the `section' attribute, and
11216      functions that are within the scope of a `#pragma long_calls'
11217      directive are always turned into long calls.
11218
11219      This feature is not enabled by default.  Specifying
11220      `-mno-long-calls' restores the default behavior, as does placing
11221      the function calls within the scope of a `#pragma long_calls_off'
11222      directive.  Note these switches have no effect on how the compiler
11223      generates code to handle function calls via function pointers.
11224
11225 `-msingle-pic-base'
11226      Treat the register used for PIC addressing as read-only, rather
11227      than loading it in the prologue for each function.  The runtime
11228      system is responsible for initializing this register with an
11229      appropriate value before execution begins.
11230
11231 `-mpic-register=REG'
11232      Specify the register to be used for PIC addressing.  The default
11233      is R10 unless stack-checking is enabled, when R9 is used.
11234
11235 `-mpoke-function-name'
11236      Write the name of each function into the text section, directly
11237      preceding the function prologue.  The generated code is similar to
11238      this:
11239
11240                t0
11241                    .ascii "arm_poke_function_name", 0
11242                    .align
11243                t1
11244                    .word 0xff000000 + (t1 - t0)
11245                arm_poke_function_name
11246                    mov     ip, sp
11247                    stmfd   sp!, {fp, ip, lr, pc}
11248                    sub     fp, ip, #4
11249
11250      When performing a stack backtrace, code can inspect the value of
11251      `pc' stored at `fp + 0'.  If the trace function then looks at
11252      location `pc - 12' and the top 8 bits are set, then we know that
11253      there is a function name embedded immediately preceding this
11254      location and has length `((pc[-3]) & 0xff000000)'.
11255
11256 `-mthumb'
11257 `-marm'
11258      Select between generating code that executes in ARM and Thumb
11259      states.  The default for most configurations is to generate code
11260      that executes in ARM state, but the default can be changed by
11261      configuring GCC with the `--with-mode='STATE configure option.
11262
11263 `-mtpcs-frame'
11264      Generate a stack frame that is compliant with the Thumb Procedure
11265      Call Standard for all non-leaf functions.  (A leaf function is one
11266      that does not call any other functions.)  The default is
11267      `-mno-tpcs-frame'.
11268
11269 `-mtpcs-leaf-frame'
11270      Generate a stack frame that is compliant with the Thumb Procedure
11271      Call Standard for all leaf functions.  (A leaf function is one
11272      that does not call any other functions.)  The default is
11273      `-mno-apcs-leaf-frame'.
11274
11275 `-mcallee-super-interworking'
11276      Gives all externally visible functions in the file being compiled
11277      an ARM instruction set header which switches to Thumb mode before
11278      executing the rest of the function.  This allows these functions
11279      to be called from non-interworking code.  This option is not valid
11280      in AAPCS configurations because interworking is enabled by default.
11281
11282 `-mcaller-super-interworking'
11283      Allows calls via function pointers (including virtual functions) to
11284      execute correctly regardless of whether the target code has been
11285      compiled for interworking or not.  There is a small overhead in
11286      the cost of executing a function pointer if this option is
11287      enabled.  This option is not valid in AAPCS configurations because
11288      interworking is enabled by default.
11289
11290 `-mtp=NAME'
11291      Specify the access model for the thread local storage pointer.
11292      The valid models are `soft', which generates calls to
11293      `__aeabi_read_tp', `cp15', which fetches the thread pointer from
11294      `cp15' directly (supported in the arm6k architecture), and `auto',
11295      which uses the best available method for the selected processor.
11296      The default setting is `auto'.
11297
11298 `-mtls-dialect=DIALECT'
11299      Specify the dialect to use for accessing thread local storage.  Two
11300      DIALECTs are supported--`gnu' and `gnu2'.  The `gnu' dialect
11301      selects the original GNU scheme for supporting local and global
11302      dynamic TLS models.  The `gnu2' dialect selects the GNU descriptor
11303      scheme, which provides better performance for shared libraries.
11304      The GNU descriptor scheme is compatible with the original scheme,
11305      but does require new assembler, linker and library support.
11306      Initial and local exec TLS models are unaffected by this option
11307      and always use the original scheme.
11308
11309 `-mword-relocations'
11310      Only generate absolute relocations on word-sized values (i.e.
11311      R_ARM_ABS32).  This is enabled by default on targets (uClinux,
11312      SymbianOS) where the runtime loader imposes this restriction, and
11313      when `-fpic' or `-fPIC' is specified.
11314
11315 `-mfix-cortex-m3-ldrd'
11316      Some Cortex-M3 cores can cause data corruption when `ldrd'
11317      instructions with overlapping destination and base registers are
11318      used.  This option avoids generating these instructions.  This
11319      option is enabled by default when `-mcpu=cortex-m3' is specified.
11320
11321 `-munaligned-access'
11322 `-mno-unaligned-access'
11323      Enables (or disables) reading and writing of 16- and 32- bit values
11324      from addresses that are not 16- or 32- bit aligned.  By default
11325      unaligned access is disabled for all pre-ARMv6 and all ARMv6-M
11326      architectures, and enabled for all other architectures.  If
11327      unaligned access is not enabled then words in packed data
11328      structures will be accessed a byte at a time.
11329
11330      The ARM attribute `Tag_CPU_unaligned_access' will be set in the
11331      generated object file to either true or false, depending upon the
11332      setting of this option.  If unaligned access is enabled then the
11333      preprocessor symbol `__ARM_FEATURE_UNALIGNED' will also be defined.
11334
11335
11336 \1f
11337 File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options
11338
11339 3.17.4 AVR Options
11340 ------------------
11341
11342 These options are defined for AVR implementations:
11343
11344 `-mmcu=MCU'
11345      Specify Atmel AVR instruction set architectures (ISA) or MCU type.
11346
11347      The default for this option is `avr2'.
11348
11349      GCC supports the following AVR devices and ISAs:
11350
11351     `avr2'
11352           "Classic" devices with up to 8 KiB of program memory.
11353           MCU = `attiny22', `attiny26', `at90c8534', `at90s2313',
11354           `at90s2323', `at90s2333', `at90s2343', `at90s4414',
11355           `at90s4433', `at90s4434', `at90s8515', `at90s8535'.
11356
11357     `avr25'
11358           "Classic" devices with up to 8 KiB of program memory and with
11359           the `MOVW' instruction.
11360           MCU = `ata5272', `ata6289', `attiny13', `attiny13a',
11361           `attiny2313', `attiny2313a', `attiny24', `attiny24a',
11362           `attiny25', `attiny261', `attiny261a', `attiny43u',
11363           `attiny4313', `attiny44', `attiny44a', `attiny45',
11364           `attiny461', `attiny461a', `attiny48', `attiny84',
11365           `attiny84a', `attiny85', `attiny861', `attiny861a',
11366           `attiny87', `attiny88', `at86rf401'.
11367
11368     `avr3'
11369           "Classic" devices with 16 KiB up to 64 KiB of  program memory.
11370           MCU = `at43usb355', `at76c711'.
11371
11372     `avr31'
11373           "Classic" devices with 128 KiB of program memory.
11374           MCU = `atmega103', `at43usb320'.
11375
11376     `avr35'
11377           "Classic" devices with 16 KiB up to 64 KiB of program memory
11378           and with the `MOVW' instruction.
11379           MCU = `ata5505', `atmega16u2', `atmega32u2', `atmega8u2',
11380           `attiny1634', `attiny167', `at90usb162', `at90usb82'.
11381
11382     `avr4'
11383           "Enhanced" devices with up to 8 KiB of program memory.
11384           MCU = `ata6285', `ata6286', `atmega48', `atmega48a',
11385           `atmega48p', `atmega48pa', `atmega8', `atmega8a',
11386           `atmega8hva', `atmega8515', `atmega8535', `atmega88',
11387           `atmega88a', `atmega88p', `atmega88pa', `at90pwm1',
11388           `at90pwm2', `at90pwm2b', `at90pwm3', `at90pwm3b', `at90pwm81'.
11389
11390     `avr5'
11391           "Enhanced" devices with 16 KiB up to 64 KiB of program memory.
11392           MCU = `ata5790', `ata5790n', `ata5795', `atmega16',
11393           `atmega16a', `atmega16hva', `atmega16hva', `atmega16hva2',
11394           `atmega16hva2', `atmega16hvb', `atmega16hvb',
11395           `atmega16hvbrevb', `atmega16m1', `atmega16m1', `atmega16u4',
11396           `atmega16u4', `atmega161', `atmega162', `atmega163',
11397           `atmega164a', `atmega164p', `atmega164pa', `atmega165',
11398           `atmega165a', `atmega165p', `atmega165pa', `atmega168',
11399           `atmega168a', `atmega168p', `atmega168pa', `atmega169',
11400           `atmega169a', `atmega169p', `atmega169pa', `atmega26hvg',
11401           `atmega32', `atmega32a', `atmega32a', `atmega32c1',
11402           `atmega32c1', `atmega32hvb', `atmega32hvb',
11403           `atmega32hvbrevb', `atmega32m1', `atmega32m1', `atmega32u4',
11404           `atmega32u4', `atmega32u6', `atmega32u6', `atmega323',
11405           `atmega324a', `atmega324p', `atmega324pa', `atmega325',
11406           `atmega325a', `atmega325p', `atmega3250', `atmega3250a',
11407           `atmega3250p', `atmega3250pa', `atmega328', `atmega328p',
11408           `atmega329', `atmega329a', `atmega329p', `atmega329pa',
11409           `atmega3290', `atmega3290a', `atmega3290p', `atmega3290pa',
11410           `atmega406', `atmega48hvf', `atmega64', `atmega64a',
11411           `atmega64c1', `atmega64c1', `atmega64hve', `atmega64m1',
11412           `atmega64m1', `atmega64rfa2', `atmega64rfr2', `atmega640',
11413           `atmega644', `atmega644a', `atmega644p', `atmega644pa',
11414           `atmega645', `atmega645a', `atmega645p', `atmega6450',
11415           `atmega6450a', `atmega6450p', `atmega649', `atmega649a',
11416           `atmega649p', `atmega6490', `atmega6490a', `atmega6490p',
11417           `at90can32', `at90can64', `at90pwm161', `at90pwm216',
11418           `at90pwm316', `at90scr100', `at90usb646', `at90usb647',
11419           `at94k', `m3000'.
11420
11421     `avr51'
11422           "Enhanced" devices with 128 KiB of program memory.
11423           MCU = `atmega128', `atmega128a', `atmega128rfa1',
11424           `atmega1280', `atmega1281', `atmega1284', `atmega1284p',
11425           `at90can128', `at90usb1286', `at90usb1287'.
11426
11427     `avr6'
11428           "Enhanced" devices with 3-byte PC, i.e. with more than
11429           128 KiB of program memory.
11430           MCU = `atmega2560', `atmega2561'.
11431
11432     `avrxmega2'
11433           "XMEGA" devices with more than 8 KiB and up to 64 KiB of
11434           program memory.
11435           MCU = `atmxt112sl', `atmxt224', `atmxt224e', `atmxt336s',
11436           `atxmega16a4', `atxmega16a4u', `atxmega16c4', `atxmega16d4',
11437           `atxmega16x1', `atxmega32a4', `atxmega32a4u', `atxmega32c4',
11438           `atxmega32d4', `atxmega32e5', `atxmega32x1'.
11439
11440     `avrxmega4'
11441           "XMEGA" devices with more than 64 KiB and up to 128 KiB of
11442           program memory.
11443           MCU = `atxmega64a3', `atxmega64a3u', `atxmega64a4u',
11444           `atxmega64b1', `atxmega64b3', `atxmega64c3', `atxmega64d3',
11445           `atxmega64d4'.
11446
11447     `avrxmega5'
11448           "XMEGA" devices with more than 64 KiB and up to 128 KiB of
11449           program memory and more than 64 KiB of RAM.
11450           MCU = `atxmega64a1', `atxmega64a1u'.
11451
11452     `avrxmega6'
11453           "XMEGA" devices with more than 128 KiB of program memory.
11454           MCU = `atmxt540s', `atmxt540sreva', `atxmega128a3',
11455           `atxmega128a3u', `atxmega128b1', `atxmega128b3',
11456           `atxmega128c3', `atxmega128d3', `atxmega128d4',
11457           `atxmega192a3', `atxmega192a3u', `atxmega192c3',
11458           `atxmega192d3', `atxmega256a3', `atxmega256a3b',
11459           `atxmega256a3bu', `atxmega256a3u', `atxmega256c3',
11460           `atxmega256d3', `atxmega384c3', `atxmega384d3'.
11461
11462     `avrxmega7'
11463           "XMEGA" devices with more than 128 KiB of program memory and
11464           more than 64 KiB of RAM.
11465           MCU = `atxmega128a1', `atxmega128a1u', `atxmega128a4u'.
11466
11467     `avr1'
11468           This ISA is implemented by the minimal AVR core and supported
11469           for assembler only.
11470           MCU = `attiny11', `attiny12', `attiny15', `attiny28',
11471           `at90s1200'.
11472
11473
11474 `-maccumulate-args'
11475      Accumulate outgoing function arguments and acquire/release the
11476      needed stack space for outgoing function arguments once in function
11477      prologue/epilogue.  Without this option, outgoing arguments are
11478      pushed before calling a function and popped afterwards.
11479
11480      Popping the arguments after the function call can be expensive on
11481      AVR so that accumulating the stack space might lead to smaller
11482      executables because arguments need not to be removed from the
11483      stack after such a function call.
11484
11485      This option can lead to reduced code size for functions that
11486      perform several calls to functions that get their arguments on the
11487      stack like calls to printf-like functions.
11488
11489 `-mbranch-cost=COST'
11490      Set the branch costs for conditional branch instructions to COST.
11491      Reasonable values for COST are small, non-negative integers. The
11492      default branch cost is 0.
11493
11494 `-mcall-prologues'
11495      Functions prologues/epilogues are expanded as calls to appropriate
11496      subroutines.  Code size is smaller.
11497
11498 `-mint8'
11499      Assume `int' to be 8-bit integer.  This affects the sizes of all
11500      types: a `char' is 1 byte, an `int' is 1 byte, a `long' is 2 bytes,
11501      and `long long' is 4 bytes.  Please note that this option does not
11502      conform to the C standards, but it results in smaller code size.
11503
11504 `-mno-interrupts'
11505      Generated code is not compatible with hardware interrupts.  Code
11506      size is smaller.
11507
11508 `-mrelax'
11509      Try to replace `CALL' resp. `JMP' instruction by the shorter
11510      `RCALL' resp. `RJMP' instruction if applicable.  Setting `-mrelax'
11511      just adds the `--relax' option to the linker command line when the
11512      linker is called.
11513
11514      Jump relaxing is performed by the linker because jump offsets are
11515      not known before code is located. Therefore, the assembler code
11516      generated by the compiler is the same, but the instructions in the
11517      executable may differ from instructions in the assembler code.
11518
11519      Relaxing must be turned on if linker stubs are needed, see the
11520      section on `EIND' and linker stubs below.
11521
11522 `-msp8'
11523      Treat the stack pointer register as an 8-bit register, i.e. assume
11524      the high byte of the stack pointer is zero.  In general, you don't
11525      need to set this option by hand.
11526
11527      This option is used internally by the compiler to select and build
11528      multilibs for architectures `avr2' and `avr25'.  These
11529      architectures mix devices with and without `SPH'.  For any setting
11530      other than `-mmcu=avr2' or `-mmcu=avr25' the compiler driver will
11531      add or remove this option from the compiler proper's command line,
11532      because the compiler then knows if the device or architecture has
11533      an 8-bit stack pointer and thus no `SPH' register or not.
11534
11535 `-mstrict-X'
11536      Use address register `X' in a way proposed by the hardware.  This
11537      means that `X' is only used in indirect, post-increment or
11538      pre-decrement addressing.
11539
11540      Without this option, the `X' register may be used in the same way
11541      as `Y' or `Z' which then is emulated by additional instructions.
11542      For example, loading a value with `X+const' addressing with a
11543      small non-negative `const < 64' to a register RN is performed as
11544
11545           adiw r26, const   ; X += const
11546           ld   RN, X        ; RN = *X
11547           sbiw r26, const   ; X -= const
11548
11549 `-mtiny-stack'
11550      Only change the lower 8 bits of the stack pointer.
11551
11552 `-Waddr-space-convert'
11553      Warn about conversions between address spaces in the case where the
11554      resulting address space is not contained in the incoming address
11555      space.
11556
11557 3.17.4.1 `EIND' and Devices with more than 128 Ki Bytes of Flash
11558 ................................................................
11559
11560 Pointers in the implementation are 16 bits wide.  The address of a
11561 function or label is represented as word address so that indirect jumps
11562 and calls can target any code address in the range of 64 Ki words.
11563
11564  In order to facilitate indirect jump on devices with more than 128 Ki
11565 bytes of program memory space, there is a special function register
11566 called `EIND' that serves as most significant part of the target address
11567 when `EICALL' or `EIJMP' instructions are used.
11568
11569  Indirect jumps and calls on these devices are handled as follows by
11570 the compiler and are subject to some limitations:
11571
11572    * The compiler never sets `EIND'.
11573
11574    * The compiler uses `EIND' implicitely in `EICALL'/`EIJMP'
11575      instructions or might read `EIND' directly in order to emulate an
11576      indirect call/jump by means of a `RET' instruction.
11577
11578    * The compiler assumes that `EIND' never changes during the startup
11579      code or during the application. In particular, `EIND' is not
11580      saved/restored in function or interrupt service routine
11581      prologue/epilogue.
11582
11583    * For indirect calls to functions and computed goto, the linker
11584      generates _stubs_. Stubs are jump pads sometimes also called
11585      _trampolines_. Thus, the indirect call/jump jumps to such a stub.
11586      The stub contains a direct jump to the desired address.
11587
11588    * Linker relaxation must be turned on so that the linker will
11589      generate the stubs correctly an all situaltion. See the compiler
11590      option `-mrelax' and the linler option `--relax'.  There are
11591      corner cases where the linker is supposed to generate stubs but
11592      aborts without relaxation and without a helpful error message.
11593
11594    * The default linker script is arranged for code with `EIND = 0'.
11595      If code is supposed to work for a setup with `EIND != 0', a custom
11596      linker script has to be used in order to place the sections whose
11597      name start with `.trampolines' into the segment where `EIND'
11598      points to.
11599
11600    * The startup code from libgcc never sets `EIND'.  Notice that
11601      startup code is a blend of code from libgcc and AVR-LibC.  For the
11602      impact of AVR-LibC on `EIND', see the
11603      AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/).
11604
11605    * It is legitimate for user-specific startup code to set up `EIND'
11606      early, for example by means of initialization code located in
11607      section `.init3'. Such code runs prior to general startup code
11608      that initializes RAM and calls constructors, but after the bit of
11609      startup code from AVR-LibC that sets `EIND' to the segment where
11610      the vector table is located.
11611           #include <avr/io.h>
11612
11613           static void
11614           __attribute__((section(".init3"),naked,used,no_instrument_function))
11615           init3_set_eind (void)
11616           {
11617             __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
11618                             "out %i0,r24" :: "n" (&EIND) : "r24","memory");
11619           }
11620
11621      The `__trampolines_start' symbol is defined in the linker script.
11622
11623    * Stubs are generated automatically by the linker if the following
11624      two conditions are met:
11625         - The address of a label is taken by means of the `gs' modifier
11626           (short for _generate stubs_) like so:
11627                LDI r24, lo8(gs(FUNC))
11628                LDI r25, hi8(gs(FUNC))
11629
11630         - The final location of that label is in a code segment
11631           _outside_ the segment where the stubs are located.
11632
11633    * The compiler emits such `gs' modifiers for code labels in the
11634      following situations:
11635         - Taking address of a function or code label.
11636
11637         - Computed goto.
11638
11639         - If prologue-save function is used, see `-mcall-prologues'
11640           command-line option.
11641
11642         - Switch/case dispatch tables. If you do not want such dispatch
11643           tables you can specify the `-fno-jump-tables' command-line
11644           option.
11645
11646         - C and C++ constructors/destructors called during
11647           startup/shutdown.
11648
11649         - If the tools hit a `gs()' modifier explained above.
11650
11651    * Jumping to non-symbolic addresses like so is _not_ supported:
11652
11653           int main (void)
11654           {
11655               /* Call function at word address 0x2 */
11656               return ((int(*)(void)) 0x2)();
11657           }
11658
11659      Instead, a stub has to be set up, i.e. the function has to be
11660      called through a symbol (`func_4' in the example):
11661
11662           int main (void)
11663           {
11664               extern int func_4 (void);
11665
11666               /* Call function at byte address 0x4 */
11667               return func_4();
11668           }
11669
11670      and the application be linked with `-Wl,--defsym,func_4=0x4'.
11671      Alternatively, `func_4' can be defined in the linker script.
11672
11673 3.17.4.2 Handling of the `RAMPD', `RAMPX', `RAMPY' and `RAMPZ' Special Function Registers
11674 .........................................................................................
11675
11676 Some AVR devices support memories larger than the 64 KiB range that can
11677 be accessed with 16-bit pointers.  To access memory locations outside
11678 this 64 KiB range, the contentent of a `RAMP' register is used as high
11679 part of the address: The `X', `Y', `Z' address register is concatenated
11680 with the `RAMPX', `RAMPY', `RAMPZ' special function register,
11681 respectively, to get a wide address. Similarly, `RAMPD' is used
11682 together with direct addressing.
11683
11684    * The startup code initializes the `RAMP' special function registers
11685      with zero.
11686
11687    * If a *note named address space: AVR Named Address Spaces. other
11688      than generic or `__flash' is used, then `RAMPZ' is set as needed
11689      before the operation.
11690
11691    * If the device supports RAM larger than 64 KiB and the compiler
11692      needs to change `RAMPZ' to accomplish an operation, `RAMPZ' is
11693      reset to zero after the operation.
11694
11695    * If the device comes with a specific `RAMP' register, the ISR
11696      prologue/epilogue saves/restores that SFR and initializes it with
11697      zero in case the ISR code might (implicitly) use it.
11698
11699    * RAM larger than 64 KiB is not supported by GCC for AVR targets.
11700      If you use inline assembler to read from locations outside the
11701      16-bit address range and change one of the `RAMP' registers, you
11702      must reset it to zero after the access.
11703
11704
11705 3.17.4.3 AVR Built-in Macros
11706 ............................
11707
11708 GCC defines several built-in macros so that the user code can test for
11709 the presence or absence of features.  Almost any of the following
11710 built-in macros are deduced from device capabilities and thus triggered
11711 by the `-mmcu=' command-line option.
11712
11713  For even more AVR-specific built-in macros see *note AVR Named Address
11714 Spaces:: and *note AVR Built-in Functions::.
11715
11716 `__AVR_ARCH__'
11717      Build-in macro that resolves to a decimal number that identifies
11718      the architecture and depends on the `-mmcu=MCU' option.  Possible
11719      values are:
11720
11721      `2', `25', `3', `31', `35', `4', `5', `51', `6', `102', `104',
11722      `105', `106', `107'
11723
11724      for MCU=`avr2', `avr25', `avr3', `avr31', `avr35', `avr4', `avr5',
11725      `avr51', `avr6', `avrxmega2', `avrxmega4', `avrxmega5',
11726      `avrxmega6', `avrxmega7', respectively.  If MCU specifies a
11727      device, this built-in macro is set accordingly. For example, with
11728      `-mmcu=atmega8' the macro will be defined to `4'.
11729
11730 `__AVR_DEVICE__'
11731      Setting `-mmcu=DEVICE' defines this built-in macro which reflects
11732      the device's name. For example, `-mmcu=atmega8' defines the
11733      built-in macro `__AVR_ATmega8__', `-mmcu=attiny261a' defines
11734      `__AVR_ATtiny261A__', etc.
11735
11736      The built-in macros' names follow the scheme `__AVR_DEVICE__'
11737      where DEVICE is the device name as from the AVR user manual. The
11738      difference between DEVICE in the built-in macro and DEVICE in
11739      `-mmcu=DEVICE' is that the latter is always lowercase.
11740
11741      If DEVICE is not a device but only a core architecture like
11742      `avr51', this macro will not be defined.
11743
11744 `__AVR_XMEGA__'
11745      The device / architecture belongs to the XMEGA family of devices.
11746
11747 `__AVR_HAVE_ELPM__'
11748      The device has the the `ELPM' instruction.
11749
11750 `__AVR_HAVE_ELPMX__'
11751      The device has the `ELPM RN,Z' and `ELPM RN,Z+' instructions.
11752
11753 `__AVR_HAVE_MOVW__'
11754      The device has the `MOVW' instruction to perform 16-bit
11755      register-register moves.
11756
11757 `__AVR_HAVE_LPMX__'
11758      The device has the `LPM RN,Z' and `LPM RN,Z+' instructions.
11759
11760 `__AVR_HAVE_MUL__'
11761      The device has a hardware multiplier.
11762
11763 `__AVR_HAVE_JMP_CALL__'
11764      The device has the `JMP' and `CALL' instructions.  This is the
11765      case for devices with at least 16 KiB of program memory.
11766
11767 `__AVR_HAVE_EIJMP_EICALL__'
11768 `__AVR_3_BYTE_PC__'
11769      The device has the `EIJMP' and `EICALL' instructions.  This is the
11770      case for devices with more than 128 KiB of program memory.  This
11771      also means that the program counter (PC) is 3 bytes wide.
11772
11773 `__AVR_2_BYTE_PC__'
11774      The program counter (PC) is 2 bytes wide. This is the case for
11775      devices with up to 128 KiB of program memory.
11776
11777 `__AVR_HAVE_8BIT_SP__'
11778 `__AVR_HAVE_16BIT_SP__'
11779      The stack pointer (SP) register is treated as 8-bit respectively
11780      16-bit register by the compiler.  The definition of these macros
11781      is affected by `-mtiny-stack'.
11782
11783 `__AVR_HAVE_SPH__'
11784 `__AVR_SP8__'
11785      The device has the SPH (high part of stack pointer) special
11786      function register or has an 8-bit stack pointer, respectively.
11787      The definition of these macros is affected by `-mmcu=' and in the
11788      cases of `-mmcu=avr2' and `-mmcu=avr25' also by `-msp8'.
11789
11790 `__AVR_HAVE_RAMPD__'
11791 `__AVR_HAVE_RAMPX__'
11792 `__AVR_HAVE_RAMPY__'
11793 `__AVR_HAVE_RAMPZ__'
11794      The device has the `RAMPD', `RAMPX', `RAMPY', `RAMPZ' special
11795      function register, respectively.
11796
11797 `__NO_INTERRUPTS__'
11798      This macro reflects the `-mno-interrupts' command line option.
11799
11800 `__AVR_ERRATA_SKIP__'
11801 `__AVR_ERRATA_SKIP_JMP_CALL__'
11802      Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
11803      instructions because of a hardware erratum.  Skip instructions are
11804      `SBRS', `SBRC', `SBIS', `SBIC' and `CPSE'.  The second macro is
11805      only defined if `__AVR_HAVE_JMP_CALL__' is also set.
11806
11807 `__AVR_SFR_OFFSET__=OFFSET'
11808      Instructions that can address I/O special function registers
11809      directly like `IN', `OUT', `SBI', etc. may use a different address
11810      as if addressed by an instruction to access RAM like `LD' or
11811      `STS'. This offset depends on the device architecture and has to
11812      be subtracted from the RAM address in order to get the respective
11813      I/O address.
11814
11815 `__WITH_AVRLIBC__'
11816      The compiler is configured to be used together with AVR-Libc.  See
11817      the `--with-avrlibc' configure option.
11818
11819
11820 \1f
11821 File: gcc.info,  Node: Blackfin Options,  Next: C6X Options,  Prev: AVR Options,  Up: Submodel Options
11822
11823 3.17.5 Blackfin Options
11824 -----------------------
11825
11826 `-mcpu=CPU[-SIREVISION]'
11827      Specifies the name of the target Blackfin processor.  Currently,
11828      CPU can be one of `bf512', `bf514', `bf516', `bf518', `bf522',
11829      `bf523', `bf524', `bf525', `bf526', `bf527', `bf531', `bf532',
11830      `bf533', `bf534', `bf536', `bf537', `bf538', `bf539', `bf542',
11831      `bf544', `bf547', `bf548', `bf549', `bf542m', `bf544m', `bf547m',
11832      `bf548m', `bf549m', `bf561', `bf592'.
11833
11834      The optional SIREVISION specifies the silicon revision of the
11835      target Blackfin processor.  Any workarounds available for the
11836      targeted silicon revision are enabled.  If SIREVISION is `none',
11837      no workarounds are enabled.  If SIREVISION is `any', all
11838      workarounds for the targeted processor are enabled.  The
11839      `__SILICON_REVISION__' macro is defined to two hexadecimal digits
11840      representing the major and minor numbers in the silicon revision.
11841      If SIREVISION is `none', the `__SILICON_REVISION__' is not
11842      defined.  If SIREVISION is `any', the `__SILICON_REVISION__' is
11843      defined to be `0xffff'.  If this optional SIREVISION is not used,
11844      GCC assumes the latest known silicon revision of the targeted
11845      Blackfin processor.
11846
11847      GCC defines a preprocessor macro for the specified CPU.  For the
11848      `bfin-elf' toolchain, this option causes the hardware BSP provided
11849      by libgloss to be linked in if `-msim' is not given.
11850
11851      Without this option, `bf532' is used as the processor by default.
11852
11853      Note that support for `bf561' is incomplete.  For `bf561', only
11854      the preprocessor macro is defined.
11855
11856 `-msim'
11857      Specifies that the program will be run on the simulator.  This
11858      causes the simulator BSP provided by libgloss to be linked in.
11859      This option has effect only for `bfin-elf' toolchain.  Certain
11860      other options, such as `-mid-shared-library' and `-mfdpic', imply
11861      `-msim'.
11862
11863 `-momit-leaf-frame-pointer'
11864      Don't keep the frame pointer in a register for leaf functions.
11865      This avoids the instructions to save, set up and restore frame
11866      pointers and makes an extra register available in leaf functions.
11867      The option `-fomit-frame-pointer' removes the frame pointer for
11868      all functions, which might make debugging harder.
11869
11870 `-mspecld-anomaly'
11871      When enabled, the compiler ensures that the generated code does not
11872      contain speculative loads after jump instructions. If this option
11873      is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined.
11874
11875 `-mno-specld-anomaly'
11876      Don't generate extra code to prevent speculative loads from
11877      occurring.
11878
11879 `-mcsync-anomaly'
11880      When enabled, the compiler ensures that the generated code does not
11881      contain CSYNC or SSYNC instructions too soon after conditional
11882      branches.  If this option is used,
11883      `__WORKAROUND_SPECULATIVE_SYNCS' is defined.
11884
11885 `-mno-csync-anomaly'
11886      Don't generate extra code to prevent CSYNC or SSYNC instructions
11887      from occurring too soon after a conditional branch.
11888
11889 `-mlow-64k'
11890      When enabled, the compiler is free to take advantage of the
11891      knowledge that the entire program fits into the low 64k of memory.
11892
11893 `-mno-low-64k'
11894      Assume that the program is arbitrarily large.  This is the default.
11895
11896 `-mstack-check-l1'
11897      Do stack checking using information placed into L1 scratchpad
11898      memory by the uClinux kernel.
11899
11900 `-mid-shared-library'
11901      Generate code that supports shared libraries via the library ID
11902      method.  This allows for execute in place and shared libraries in
11903      an environment without virtual memory management.  This option
11904      implies `-fPIC'.  With a `bfin-elf' target, this option implies
11905      `-msim'.
11906
11907 `-mno-id-shared-library'
11908      Generate code that doesn't assume ID-based shared libraries are
11909      being used.  This is the default.
11910
11911 `-mleaf-id-shared-library'
11912      Generate code that supports shared libraries via the library ID
11913      method, but assumes that this library or executable won't link
11914      against any other ID shared libraries.  That allows the compiler
11915      to use faster code for jumps and calls.
11916
11917 `-mno-leaf-id-shared-library'
11918      Do not assume that the code being compiled won't link against any
11919      ID shared libraries.  Slower code is generated for jump and call
11920      insns.
11921
11922 `-mshared-library-id=n'
11923      Specifies the identification number of the ID-based shared library
11924      being compiled.  Specifying a value of 0 generates more compact
11925      code; specifying other values forces the allocation of that number
11926      to the current library but is no more space- or time-efficient
11927      than omitting this option.
11928
11929 `-msep-data'
11930      Generate code that allows the data segment to be located in a
11931      different area of memory from the text segment.  This allows for
11932      execute in place in an environment without virtual memory
11933      management by eliminating relocations against the text section.
11934
11935 `-mno-sep-data'
11936      Generate code that assumes that the data segment follows the text
11937      segment.  This is the default.
11938
11939 `-mlong-calls'
11940 `-mno-long-calls'
11941      Tells the compiler to perform function calls by first loading the
11942      address of the function into a register and then performing a
11943      subroutine call on this register.  This switch is needed if the
11944      target function lies outside of the 24-bit addressing range of the
11945      offset-based version of subroutine call instruction.
11946
11947      This feature is not enabled by default.  Specifying
11948      `-mno-long-calls' restores the default behavior.  Note these
11949      switches have no effect on how the compiler generates code to
11950      handle function calls via function pointers.
11951
11952 `-mfast-fp'
11953      Link with the fast floating-point library. This library relaxes
11954      some of the IEEE floating-point standard's rules for checking
11955      inputs against Not-a-Number (NAN), in the interest of performance.
11956
11957 `-minline-plt'
11958      Enable inlining of PLT entries in function calls to functions that
11959      are not known to bind locally.  It has no effect without `-mfdpic'.
11960
11961 `-mmulticore'
11962      Build a standalone application for multicore Blackfin processors.
11963      This option causes proper start files and link scripts supporting
11964      multicore to be used, and defines the macro `__BFIN_MULTICORE'.
11965      It can only be used with `-mcpu=bf561[-SIREVISION]'.
11966
11967      This option can be used with `-mcorea' or `-mcoreb', which selects
11968      the one-application-per-core programming model.  Without `-mcorea'
11969      or `-mcoreb', the single-application/dual-core programming model
11970      is used. In this model, the main function of Core B should be
11971      named as `coreb_main'.
11972
11973      If this option is not used, the single-core application programming
11974      model is used.
11975
11976 `-mcorea'
11977      Build a standalone application for Core A of BF561 when using the
11978      one-application-per-core programming model. Proper start files and
11979      link scripts are used to support Core A, and the macro
11980      `__BFIN_COREA' is defined.  This option can only be used in
11981      conjunction with `-mmulticore'.
11982
11983 `-mcoreb'
11984      Build a standalone application for Core B of BF561 when using the
11985      one-application-per-core programming model. Proper start files and
11986      link scripts are used to support Core B, and the macro
11987      `__BFIN_COREB' is defined. When this option is used, `coreb_main'
11988      should be used instead of `main'.  This option can only be used in
11989      conjunction with `-mmulticore'.
11990
11991 `-msdram'
11992      Build a standalone application for SDRAM. Proper start files and
11993      link scripts are used to put the application into SDRAM, and the
11994      macro `__BFIN_SDRAM' is defined.  The loader should initialize
11995      SDRAM before loading the application.
11996
11997 `-micplb'
11998      Assume that ICPLBs are enabled at run time.  This has an effect on
11999      certain anomaly workarounds.  For Linux targets, the default is to
12000      assume ICPLBs are enabled; for standalone applications the default
12001      is off.
12002
12003 \1f
12004 File: gcc.info,  Node: C6X Options,  Next: CRIS Options,  Prev: Blackfin Options,  Up: Submodel Options
12005
12006 3.17.6 C6X Options
12007 ------------------
12008
12009 `-march=NAME'
12010      This specifies the name of the target architecture.  GCC uses this
12011      name to determine what kind of instructions it can emit when
12012      generating assembly code.  Permissible names are: `c62x', `c64x',
12013      `c64x+', `c67x', `c67x+', `c674x'.
12014
12015 `-mbig-endian'
12016      Generate code for a big-endian target.
12017
12018 `-mlittle-endian'
12019      Generate code for a little-endian target.  This is the default.
12020
12021 `-msim'
12022      Choose startup files and linker script suitable for the simulator.
12023
12024 `-msdata=default'
12025      Put small global and static data in the `.neardata' section, which
12026      is pointed to by register `B14'.  Put small uninitialized global
12027      and static data in the `.bss' section, which is adjacent to the
12028      `.neardata' section.  Put small read-only data into the `.rodata'
12029      section.  The corresponding sections used for large pieces of data
12030      are `.fardata', `.far' and `.const'.
12031
12032 `-msdata=all'
12033      Put all data, not just small objects, into the sections reserved
12034      for small data, and use addressing relative to the `B14' register
12035      to access them.
12036
12037 `-msdata=none'
12038      Make no use of the sections reserved for small data, and use
12039      absolute addresses to access all data.  Put all initialized global
12040      and static data in the `.fardata' section, and all uninitialized
12041      data in the `.far' section.  Put all constant data into the
12042      `.const' section.
12043
12044 \1f
12045 File: gcc.info,  Node: CRIS Options,  Next: CR16 Options,  Prev: C6X Options,  Up: Submodel Options
12046
12047 3.17.7 CRIS Options
12048 -------------------
12049
12050 These options are defined specifically for the CRIS ports.
12051
12052 `-march=ARCHITECTURE-TYPE'
12053 `-mcpu=ARCHITECTURE-TYPE'
12054      Generate code for the specified architecture.  The choices for
12055      ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively
12056      ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is `v0' except for
12057      cris-axis-linux-gnu, where the default is `v10'.
12058
12059 `-mtune=ARCHITECTURE-TYPE'
12060      Tune to ARCHITECTURE-TYPE everything applicable about the generated
12061      code, except for the ABI and the set of available instructions.
12062      The choices for ARCHITECTURE-TYPE are the same as for
12063      `-march=ARCHITECTURE-TYPE'.
12064
12065 `-mmax-stack-frame=N'
12066      Warn when the stack frame of a function exceeds N bytes.
12067
12068 `-metrax4'
12069 `-metrax100'
12070      The options `-metrax4' and `-metrax100' are synonyms for
12071      `-march=v3' and `-march=v8' respectively.
12072
12073 `-mmul-bug-workaround'
12074 `-mno-mul-bug-workaround'
12075      Work around a bug in the `muls' and `mulu' instructions for CPU
12076      models where it applies.  This option is active by default.
12077
12078 `-mpdebug'
12079      Enable CRIS-specific verbose debug-related information in the
12080      assembly code.  This option also has the effect of turning off the
12081      `#NO_APP' formatted-code indicator to the assembler at the
12082      beginning of the assembly file.
12083
12084 `-mcc-init'
12085      Do not use condition-code results from previous instruction;
12086      always emit compare and test instructions before use of condition
12087      codes.
12088
12089 `-mno-side-effects'
12090      Do not emit instructions with side effects in addressing modes
12091      other than post-increment.
12092
12093 `-mstack-align'
12094 `-mno-stack-align'
12095 `-mdata-align'
12096 `-mno-data-align'
12097 `-mconst-align'
12098 `-mno-const-align'
12099      These options (`no-' options) arrange (eliminate arrangements) for
12100      the stack frame, individual data and constants to be aligned for
12101      the maximum single data access size for the chosen CPU model.  The
12102      default is to arrange for 32-bit alignment.  ABI details such as
12103      structure layout are not affected by these options.
12104
12105 `-m32-bit'
12106 `-m16-bit'
12107 `-m8-bit'
12108      Similar to the stack- data- and const-align options above, these
12109      options arrange for stack frame, writable data and constants to
12110      all be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
12111      alignment.
12112
12113 `-mno-prologue-epilogue'
12114 `-mprologue-epilogue'
12115      With `-mno-prologue-epilogue', the normal function prologue and
12116      epilogue which set up the stack frame are omitted and no return
12117      instructions or return sequences are generated in the code.  Use
12118      this option only together with visual inspection of the compiled
12119      code: no warnings or errors are generated when call-saved
12120      registers must be saved, or storage for local variables needs to
12121      be allocated.
12122
12123 `-mno-gotplt'
12124 `-mgotplt'
12125      With `-fpic' and `-fPIC', don't generate (do generate) instruction
12126      sequences that load addresses for functions from the PLT part of
12127      the GOT rather than (traditional on other architectures) calls to
12128      the PLT.  The default is `-mgotplt'.
12129
12130 `-melf'
12131      Legacy no-op option only recognized with the cris-axis-elf and
12132      cris-axis-linux-gnu targets.
12133
12134 `-mlinux'
12135      Legacy no-op option only recognized with the cris-axis-linux-gnu
12136      target.
12137
12138 `-sim'
12139      This option, recognized for the cris-axis-elf, arranges to link
12140      with input-output functions from a simulator library.  Code,
12141      initialized data and zero-initialized data are allocated
12142      consecutively.
12143
12144 `-sim2'
12145      Like `-sim', but pass linker options to locate initialized data at
12146      0x40000000 and zero-initialized data at 0x80000000.
12147
12148 \1f
12149 File: gcc.info,  Node: CR16 Options,  Next: Darwin Options,  Prev: CRIS Options,  Up: Submodel Options
12150
12151 3.17.8 CR16 Options
12152 -------------------
12153
12154 These options are defined specifically for the CR16 ports.
12155
12156 `-mmac'
12157      Enable the use of multiply-accumulate instructions. Disabled by
12158      default.
12159
12160 `-mcr16cplus'
12161 `-mcr16c'
12162      Generate code for CR16C or CR16C+ architecture. CR16C+ architecture
12163      is default.
12164
12165 `-msim'
12166      Links the library libsim.a which is in compatible with simulator.
12167      Applicable to ELF compiler only.
12168
12169 `-mint32'
12170      Choose integer type as 32-bit wide.
12171
12172 `-mbit-ops'
12173      Generates `sbit'/`cbit' instructions for bit manipulations.
12174
12175 `-mdata-model=MODEL'
12176      Choose a data model. The choices for MODEL are `near', `far' or
12177      `medium'. `medium' is default.  However, `far' is not valid with
12178      `-mcr16c', as the CR16C architecture does not support the far data
12179      model.
12180
12181 \1f
12182 File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: CR16 Options,  Up: Submodel Options
12183
12184 3.17.9 Darwin Options
12185 ---------------------
12186
12187 These options are defined for all architectures running the Darwin
12188 operating system.
12189
12190  FSF GCC on Darwin does not create "fat" object files; it creates an
12191 object file for the single architecture that GCC was built to target.
12192 Apple's GCC on Darwin does create "fat" files if multiple `-arch'
12193 options are used; it does so by running the compiler or linker multiple
12194 times and joining the results together with `lipo'.
12195
12196  The subtype of the file created (like `ppc7400' or `ppc970' or `i686')
12197 is determined by the flags that specify the ISA that GCC is targeting,
12198 like `-mcpu' or `-march'.  The `-force_cpusubtype_ALL' option can be
12199 used to override this.
12200
12201  The Darwin tools vary in their behavior when presented with an ISA
12202 mismatch.  The assembler, `as', only permits instructions to be used
12203 that are valid for the subtype of the file it is generating, so you
12204 cannot put 64-bit instructions in a `ppc750' object file.  The linker
12205 for shared libraries, `/usr/bin/libtool', fails and prints an error if
12206 asked to create a shared library with a less restrictive subtype than
12207 its input files (for instance, trying to put a `ppc970' object file in
12208 a `ppc7400' library).  The linker for executables, `ld', quietly gives
12209 the executable the most restrictive subtype of any of its input files.
12210
12211 `-FDIR'
12212      Add the framework directory DIR to the head of the list of
12213      directories to be searched for header files.  These directories are
12214      interleaved with those specified by `-I' options and are scanned
12215      in a left-to-right order.
12216
12217      A framework directory is a directory with frameworks in it.  A
12218      framework is a directory with a `Headers' and/or `PrivateHeaders'
12219      directory contained directly in it that ends in `.framework'.  The
12220      name of a framework is the name of this directory excluding the
12221      `.framework'.  Headers associated with the framework are found in
12222      one of those two directories, with `Headers' being searched first.
12223      A subframework is a framework directory that is in a framework's
12224      `Frameworks' directory.  Includes of subframework headers can only
12225      appear in a header of a framework that contains the subframework,
12226      or in a sibling subframework header.  Two subframeworks are
12227      siblings if they occur in the same framework.  A subframework
12228      should not have the same name as a framework; a warning is issued
12229      if this is violated.  Currently a subframework cannot have
12230      subframeworks; in the future, the mechanism may be extended to
12231      support this.  The standard frameworks can be found in
12232      `/System/Library/Frameworks' and `/Library/Frameworks'.  An
12233      example include looks like `#include <Framework/header.h>', where
12234      `Framework' denotes the name of the framework and `header.h' is
12235      found in the `PrivateHeaders' or `Headers' directory.
12236
12237 `-iframeworkDIR'
12238      Like `-F' except the directory is a treated as a system directory.
12239      The main difference between this `-iframework' and `-F' is that
12240      with `-iframework' the compiler does not warn about constructs
12241      contained within header files found via DIR.  This option is valid
12242      only for the C family of languages.
12243
12244 `-gused'
12245      Emit debugging information for symbols that are used.  For stabs
12246      debugging format, this enables `-feliminate-unused-debug-symbols'.
12247      This is by default ON.
12248
12249 `-gfull'
12250      Emit debugging information for all symbols and types.
12251
12252 `-mmacosx-version-min=VERSION'
12253      The earliest version of MacOS X that this executable will run on
12254      is VERSION.  Typical values of VERSION include `10.1', `10.2', and
12255      `10.3.9'.
12256
12257      If the compiler was built to use the system's headers by default,
12258      then the default for this option is the system version on which the
12259      compiler is running, otherwise the default is to make choices that
12260      are compatible with as many systems and code bases as possible.
12261
12262 `-mkernel'
12263      Enable kernel development mode.  The `-mkernel' option sets
12264      `-static', `-fno-common', `-fno-cxa-atexit', `-fno-exceptions',
12265      `-fno-non-call-exceptions', `-fapple-kext', `-fno-weak' and
12266      `-fno-rtti' where applicable.  This mode also sets `-mno-altivec',
12267      `-msoft-float', `-fno-builtin' and `-mlong-branch' for PowerPC
12268      targets.
12269
12270 `-mone-byte-bool'
12271      Override the defaults for `bool' so that `sizeof(bool)==1'.  By
12272      default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC
12273      and `1' when compiling for Darwin/x86, so this option has no
12274      effect on x86.
12275
12276      *Warning:* The `-mone-byte-bool' switch causes GCC to generate
12277      code that is not binary compatible with code generated without
12278      that switch.  Using this switch may require recompiling all other
12279      modules in a program, including system libraries.  Use this switch
12280      to conform to a non-default data model.
12281
12282 `-mfix-and-continue'
12283 `-ffix-and-continue'
12284 `-findirect-data'
12285      Generate code suitable for fast turnaround development, such as to
12286      allow GDB to dynamically load `.o' files into already-running
12287      programs.  `-findirect-data' and `-ffix-and-continue' are provided
12288      for backwards compatibility.
12289
12290 `-all_load'
12291      Loads all members of static archive libraries.  See man ld(1) for
12292      more information.
12293
12294 `-arch_errors_fatal'
12295      Cause the errors having to do with files that have the wrong
12296      architecture to be fatal.
12297
12298 `-bind_at_load'
12299      Causes the output file to be marked such that the dynamic linker
12300      will bind all undefined references when the file is loaded or
12301      launched.
12302
12303 `-bundle'
12304      Produce a Mach-o bundle format file.  See man ld(1) for more
12305      information.
12306
12307 `-bundle_loader EXECUTABLE'
12308      This option specifies the EXECUTABLE that will load the build
12309      output file being linked.  See man ld(1) for more information.
12310
12311 `-dynamiclib'
12312      When passed this option, GCC produces a dynamic library instead of
12313      an executable when linking, using the Darwin `libtool' command.
12314
12315 `-force_cpusubtype_ALL'
12316      This causes GCC's output file to have the ALL subtype, instead of
12317      one controlled by the `-mcpu' or `-march' option.
12318
12319 `-allowable_client  CLIENT_NAME'
12320 `-client_name'
12321 `-compatibility_version'
12322 `-current_version'
12323 `-dead_strip'
12324 `-dependency-file'
12325 `-dylib_file'
12326 `-dylinker_install_name'
12327 `-dynamic'
12328 `-exported_symbols_list'
12329 `-filelist'
12330 `-flat_namespace'
12331 `-force_flat_namespace'
12332 `-headerpad_max_install_names'
12333 `-image_base'
12334 `-init'
12335 `-install_name'
12336 `-keep_private_externs'
12337 `-multi_module'
12338 `-multiply_defined'
12339 `-multiply_defined_unused'
12340 `-noall_load'
12341 `-no_dead_strip_inits_and_terms'
12342 `-nofixprebinding'
12343 `-nomultidefs'
12344 `-noprebind'
12345 `-noseglinkedit'
12346 `-pagezero_size'
12347 `-prebind'
12348 `-prebind_all_twolevel_modules'
12349 `-private_bundle'
12350 `-read_only_relocs'
12351 `-sectalign'
12352 `-sectobjectsymbols'
12353 `-whyload'
12354 `-seg1addr'
12355 `-sectcreate'
12356 `-sectobjectsymbols'
12357 `-sectorder'
12358 `-segaddr'
12359 `-segs_read_only_addr'
12360 `-segs_read_write_addr'
12361 `-seg_addr_table'
12362 `-seg_addr_table_filename'
12363 `-seglinkedit'
12364 `-segprot'
12365 `-segs_read_only_addr'
12366 `-segs_read_write_addr'
12367 `-single_module'
12368 `-static'
12369 `-sub_library'
12370 `-sub_umbrella'
12371 `-twolevel_namespace'
12372 `-umbrella'
12373 `-undefined'
12374 `-unexported_symbols_list'
12375 `-weak_reference_mismatches'
12376 `-whatsloaded'
12377      These options are passed to the Darwin linker.  The Darwin linker
12378      man page describes them in detail.
12379
12380 \1f
12381 File: gcc.info,  Node: DEC Alpha Options,  Next: FR30 Options,  Prev: Darwin Options,  Up: Submodel Options
12382
12383 3.17.10 DEC Alpha Options
12384 -------------------------
12385
12386 These `-m' options are defined for the DEC Alpha implementations:
12387
12388 `-mno-soft-float'
12389 `-msoft-float'
12390      Use (do not use) the hardware floating-point instructions for
12391      floating-point operations.  When `-msoft-float' is specified,
12392      functions in `libgcc.a' are used to perform floating-point
12393      operations.  Unless they are replaced by routines that emulate the
12394      floating-point operations, or compiled in such a way as to call
12395      such emulations routines, these routines issue floating-point
12396      operations.   If you are compiling for an Alpha without
12397      floating-point operations, you must ensure that the library is
12398      built so as not to call them.
12399
12400      Note that Alpha implementations without floating-point operations
12401      are required to have floating-point registers.
12402
12403 `-mfp-reg'
12404 `-mno-fp-regs'
12405      Generate code that uses (does not use) the floating-point register
12406      set.  `-mno-fp-regs' implies `-msoft-float'.  If the floating-point
12407      register set is not used, floating-point operands are passed in
12408      integer registers as if they were integers and floating-point
12409      results are passed in `$0' instead of `$f0'.  This is a
12410      non-standard calling sequence, so any function with a
12411      floating-point argument or return value called by code compiled
12412      with `-mno-fp-regs' must also be compiled with that option.
12413
12414      A typical use of this option is building a kernel that does not
12415      use, and hence need not save and restore, any floating-point
12416      registers.
12417
12418 `-mieee'
12419      The Alpha architecture implements floating-point hardware
12420      optimized for maximum performance.  It is mostly compliant with
12421      the IEEE floating-point standard.  However, for full compliance,
12422      software assistance is required.  This option generates code fully
12423      IEEE-compliant code _except_ that the INEXACT-FLAG is not
12424      maintained (see below).  If this option is turned on, the
12425      preprocessor macro `_IEEE_FP' is defined during compilation.  The
12426      resulting code is less efficient but is able to correctly support
12427      denormalized numbers and exceptional IEEE values such as
12428      not-a-number and plus/minus infinity.  Other Alpha compilers call
12429      this option `-ieee_with_no_inexact'.
12430
12431 `-mieee-with-inexact'
12432      This is like `-mieee' except the generated code also maintains the
12433      IEEE INEXACT-FLAG.  Turning on this option causes the generated
12434      code to implement fully-compliant IEEE math.  In addition to
12435      `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro.
12436      On some Alpha implementations the resulting code may execute
12437      significantly slower than the code generated by default.  Since
12438      there is very little code that depends on the INEXACT-FLAG, you
12439      should normally not specify this option.  Other Alpha compilers
12440      call this option `-ieee_with_inexact'.
12441
12442 `-mfp-trap-mode=TRAP-MODE'
12443      This option controls what floating-point related traps are enabled.
12444      Other Alpha compilers call this option `-fptm TRAP-MODE'.  The
12445      trap mode can be set to one of four values:
12446
12447     `n'
12448           This is the default (normal) setting.  The only traps that
12449           are enabled are the ones that cannot be disabled in software
12450           (e.g., division by zero trap).
12451
12452     `u'
12453           In addition to the traps enabled by `n', underflow traps are
12454           enabled as well.
12455
12456     `su'
12457           Like `u', but the instructions are marked to be safe for
12458           software completion (see Alpha architecture manual for
12459           details).
12460
12461     `sui'
12462           Like `su', but inexact traps are enabled as well.
12463
12464 `-mfp-rounding-mode=ROUNDING-MODE'
12465      Selects the IEEE rounding mode.  Other Alpha compilers call this
12466      option `-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
12467
12468     `n'
12469           Normal IEEE rounding mode.  Floating-point numbers are
12470           rounded towards the nearest machine number or towards the
12471           even machine number in case of a tie.
12472
12473     `m'
12474           Round towards minus infinity.
12475
12476     `c'
12477           Chopped rounding mode.  Floating-point numbers are rounded
12478           towards zero.
12479
12480     `d'
12481           Dynamic rounding mode.  A field in the floating-point control
12482           register (FPCR, see Alpha architecture reference manual)
12483           controls the rounding mode in effect.  The C library
12484           initializes this register for rounding towards plus infinity.
12485           Thus, unless your program modifies the FPCR, `d' corresponds
12486           to round towards plus infinity.
12487
12488 `-mtrap-precision=TRAP-PRECISION'
12489      In the Alpha architecture, floating-point traps are imprecise.
12490      This means without software assistance it is impossible to recover
12491      from a floating trap and program execution normally needs to be
12492      terminated.  GCC can generate code that can assist operating
12493      system trap handlers in determining the exact location that caused
12494      a floating-point trap.  Depending on the requirements of an
12495      application, different levels of precisions can be selected:
12496
12497     `p'
12498           Program precision.  This option is the default and means a
12499           trap handler can only identify which program caused a
12500           floating-point exception.
12501
12502     `f'
12503           Function precision.  The trap handler can determine the
12504           function that caused a floating-point exception.
12505
12506     `i'
12507           Instruction precision.  The trap handler can determine the
12508           exact instruction that caused a floating-point exception.
12509
12510      Other Alpha compilers provide the equivalent options called
12511      `-scope_safe' and `-resumption_safe'.
12512
12513 `-mieee-conformant'
12514      This option marks the generated code as IEEE conformant.  You must
12515      not use this option unless you also specify `-mtrap-precision=i'
12516      and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'.  Its only
12517      effect is to emit the line `.eflag 48' in the function prologue of
12518      the generated assembly file.
12519
12520 `-mbuild-constants'
12521      Normally GCC examines a 32- or 64-bit integer constant to see if
12522      it can construct it from smaller constants in two or three
12523      instructions.  If it cannot, it outputs the constant as a literal
12524      and generates code to load it from the data segment at run time.
12525
12526      Use this option to require GCC to construct _all_ integer constants
12527      using code, even if it takes more instructions (the maximum is
12528      six).
12529
12530      You typically use this option to build a shared library dynamic
12531      loader.  Itself a shared library, it must relocate itself in memory
12532      before it can find the variables and constants in its own data
12533      segment.
12534
12535 `-mbwx'
12536 `-mno-bwx'
12537 `-mcix'
12538 `-mno-cix'
12539 `-mfix'
12540 `-mno-fix'
12541 `-mmax'
12542 `-mno-max'
12543      Indicate whether GCC should generate code to use the optional BWX,
12544      CIX, FIX and MAX instruction sets.  The default is to use the
12545      instruction sets supported by the CPU type specified via `-mcpu='
12546      option or that of the CPU on which GCC was built if none is
12547      specified.
12548
12549 `-mfloat-vax'
12550 `-mfloat-ieee'
12551      Generate code that uses (does not use) VAX F and G floating-point
12552      arithmetic instead of IEEE single and double precision.
12553
12554 `-mexplicit-relocs'
12555 `-mno-explicit-relocs'
12556      Older Alpha assemblers provided no way to generate symbol
12557      relocations except via assembler macros.  Use of these macros does
12558      not allow optimal instruction scheduling.  GNU binutils as of
12559      version 2.12 supports a new syntax that allows the compiler to
12560      explicitly mark which relocations should apply to which
12561      instructions.  This option is mostly useful for debugging, as GCC
12562      detects the capabilities of the assembler when it is built and
12563      sets the default accordingly.
12564
12565 `-msmall-data'
12566 `-mlarge-data'
12567      When `-mexplicit-relocs' is in effect, static data is accessed via
12568      "gp-relative" relocations.  When `-msmall-data' is used, objects 8
12569      bytes long or smaller are placed in a "small data area" (the
12570      `.sdata' and `.sbss' sections) and are accessed via 16-bit
12571      relocations off of the `$gp' register.  This limits the size of
12572      the small data area to 64KB, but allows the variables to be
12573      directly accessed via a single instruction.
12574
12575      The default is `-mlarge-data'.  With this option the data area is
12576      limited to just below 2GB.  Programs that require more than 2GB of
12577      data must use `malloc' or `mmap' to allocate the data in the heap
12578      instead of in the program's data segment.
12579
12580      When generating code for shared libraries, `-fpic' implies
12581      `-msmall-data' and `-fPIC' implies `-mlarge-data'.
12582
12583 `-msmall-text'
12584 `-mlarge-text'
12585      When `-msmall-text' is used, the compiler assumes that the code of
12586      the entire program (or shared library) fits in 4MB, and is thus
12587      reachable with a branch instruction.  When `-msmall-data' is used,
12588      the compiler can assume that all local symbols share the same
12589      `$gp' value, and thus reduce the number of instructions required
12590      for a function call from 4 to 1.
12591
12592      The default is `-mlarge-text'.
12593
12594 `-mcpu=CPU_TYPE'
12595      Set the instruction set and instruction scheduling parameters for
12596      machine type CPU_TYPE.  You can specify either the `EV' style name
12597      or the corresponding chip number.  GCC supports scheduling
12598      parameters for the EV4, EV5 and EV6 family of processors and
12599      chooses the default values for the instruction set from the
12600      processor you specify.  If you do not specify a processor type,
12601      GCC defaults to the processor on which the compiler was built.
12602
12603      Supported values for CPU_TYPE are
12604
12605     `ev4'
12606     `ev45'
12607     `21064'
12608           Schedules as an EV4 and has no instruction set extensions.
12609
12610     `ev5'
12611     `21164'
12612           Schedules as an EV5 and has no instruction set extensions.
12613
12614     `ev56'
12615     `21164a'
12616           Schedules as an EV5 and supports the BWX extension.
12617
12618     `pca56'
12619     `21164pc'
12620     `21164PC'
12621           Schedules as an EV5 and supports the BWX and MAX extensions.
12622
12623     `ev6'
12624     `21264'
12625           Schedules as an EV6 and supports the BWX, FIX, and MAX
12626           extensions.
12627
12628     `ev67'
12629     `21264a'
12630           Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
12631           extensions.
12632
12633      Native toolchains also support the value `native', which selects
12634      the best architecture option for the host processor.
12635      `-mcpu=native' has no effect if GCC does not recognize the
12636      processor.
12637
12638 `-mtune=CPU_TYPE'
12639      Set only the instruction scheduling parameters for machine type
12640      CPU_TYPE.  The instruction set is not changed.
12641
12642      Native toolchains also support the value `native', which selects
12643      the best architecture option for the host processor.
12644      `-mtune=native' has no effect if GCC does not recognize the
12645      processor.
12646
12647 `-mmemory-latency=TIME'
12648      Sets the latency the scheduler should assume for typical memory
12649      references as seen by the application.  This number is highly
12650      dependent on the memory access patterns used by the application
12651      and the size of the external cache on the machine.
12652
12653      Valid options for TIME are
12654
12655     `NUMBER'
12656           A decimal number representing clock cycles.
12657
12658     `L1'
12659     `L2'
12660     `L3'
12661     `main'
12662           The compiler contains estimates of the number of clock cycles
12663           for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
12664           (also called Dcache, Scache, and Bcache), as well as to main
12665           memory.  Note that L3 is only valid for EV5.
12666
12667
12668 \1f
12669 File: gcc.info,  Node: FR30 Options,  Next: FRV Options,  Prev: DEC Alpha Options,  Up: Submodel Options
12670
12671 3.17.11 FR30 Options
12672 --------------------
12673
12674 These options are defined specifically for the FR30 port.
12675
12676 `-msmall-model'
12677      Use the small address space model.  This can produce smaller code,
12678      but it does assume that all symbolic values and addresses fit into
12679      a 20-bit range.
12680
12681 `-mno-lsim'
12682      Assume that runtime support has been provided and so there is no
12683      need to include the simulator library (`libsim.a') on the linker
12684      command line.
12685
12686
12687 \1f
12688 File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: FR30 Options,  Up: Submodel Options
12689
12690 3.17.12 FRV Options
12691 -------------------
12692
12693 `-mgpr-32'
12694      Only use the first 32 general-purpose registers.
12695
12696 `-mgpr-64'
12697      Use all 64 general-purpose registers.
12698
12699 `-mfpr-32'
12700      Use only the first 32 floating-point registers.
12701
12702 `-mfpr-64'
12703      Use all 64 floating-point registers.
12704
12705 `-mhard-float'
12706      Use hardware instructions for floating-point operations.
12707
12708 `-msoft-float'
12709      Use library routines for floating-point operations.
12710
12711 `-malloc-cc'
12712      Dynamically allocate condition code registers.
12713
12714 `-mfixed-cc'
12715      Do not try to dynamically allocate condition code registers, only
12716      use `icc0' and `fcc0'.
12717
12718 `-mdword'
12719      Change ABI to use double word insns.
12720
12721 `-mno-dword'
12722      Do not use double word instructions.
12723
12724 `-mdouble'
12725      Use floating-point double instructions.
12726
12727 `-mno-double'
12728      Do not use floating-point double instructions.
12729
12730 `-mmedia'
12731      Use media instructions.
12732
12733 `-mno-media'
12734      Do not use media instructions.
12735
12736 `-mmuladd'
12737      Use multiply and add/subtract instructions.
12738
12739 `-mno-muladd'
12740      Do not use multiply and add/subtract instructions.
12741
12742 `-mfdpic'
12743      Select the FDPIC ABI, which uses function descriptors to represent
12744      pointers to functions.  Without any PIC/PIE-related options, it
12745      implies `-fPIE'.  With `-fpic' or `-fpie', it assumes GOT entries
12746      and small data are within a 12-bit range from the GOT base
12747      address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32
12748      bits.  With a `bfin-elf' target, this option implies `-msim'.
12749
12750 `-minline-plt'
12751      Enable inlining of PLT entries in function calls to functions that
12752      are not known to bind locally.  It has no effect without `-mfdpic'.
12753      It's enabled by default if optimizing for speed and compiling for
12754      shared libraries (i.e., `-fPIC' or `-fpic'), or when an
12755      optimization option such as `-O3' or above is present in the
12756      command line.
12757
12758 `-mTLS'
12759      Assume a large TLS segment when generating thread-local code.
12760
12761 `-mtls'
12762      Do not assume a large TLS segment when generating thread-local
12763      code.
12764
12765 `-mgprel-ro'
12766      Enable the use of `GPREL' relocations in the FDPIC ABI for data
12767      that is known to be in read-only sections.  It's enabled by
12768      default, except for `-fpic' or `-fpie': even though it may help
12769      make the global offset table smaller, it trades 1 instruction for
12770      4.  With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one
12771      of which may be shared by multiple symbols, and it avoids the need
12772      for a GOT entry for the referenced symbol, so it's more likely to
12773      be a win.  If it is not, `-mno-gprel-ro' can be used to disable it.
12774
12775 `-multilib-library-pic'
12776      Link with the (library, not FD) pic libraries.  It's implied by
12777      `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without
12778      `-mfdpic'.  You should never have to use it explicitly.
12779
12780 `-mlinked-fp'
12781      Follow the EABI requirement of always creating a frame pointer
12782      whenever a stack frame is allocated.  This option is enabled by
12783      default and can be disabled with `-mno-linked-fp'.
12784
12785 `-mlong-calls'
12786      Use indirect addressing to call functions outside the current
12787      compilation unit.  This allows the functions to be placed anywhere
12788      within the 32-bit address space.
12789
12790 `-malign-labels'
12791      Try to align labels to an 8-byte boundary by inserting NOPs into
12792      the previous packet.  This option only has an effect when VLIW
12793      packing is enabled.  It doesn't create new packets; it merely adds
12794      NOPs to existing ones.
12795
12796 `-mlibrary-pic'
12797      Generate position-independent EABI code.
12798
12799 `-macc-4'
12800      Use only the first four media accumulator registers.
12801
12802 `-macc-8'
12803      Use all eight media accumulator registers.
12804
12805 `-mpack'
12806      Pack VLIW instructions.
12807
12808 `-mno-pack'
12809      Do not pack VLIW instructions.
12810
12811 `-mno-eflags'
12812      Do not mark ABI switches in e_flags.
12813
12814 `-mcond-move'
12815      Enable the use of conditional-move instructions (default).
12816
12817      This switch is mainly for debugging the compiler and will likely
12818      be removed in a future version.
12819
12820 `-mno-cond-move'
12821      Disable the use of conditional-move instructions.
12822
12823      This switch is mainly for debugging the compiler and will likely
12824      be removed in a future version.
12825
12826 `-mscc'
12827      Enable the use of conditional set instructions (default).
12828
12829      This switch is mainly for debugging the compiler and will likely
12830      be removed in a future version.
12831
12832 `-mno-scc'
12833      Disable the use of conditional set instructions.
12834
12835      This switch is mainly for debugging the compiler and will likely
12836      be removed in a future version.
12837
12838 `-mcond-exec'
12839      Enable the use of conditional execution (default).
12840
12841      This switch is mainly for debugging the compiler and will likely
12842      be removed in a future version.
12843
12844 `-mno-cond-exec'
12845      Disable the use of conditional execution.
12846
12847      This switch is mainly for debugging the compiler and will likely
12848      be removed in a future version.
12849
12850 `-mvliw-branch'
12851      Run a pass to pack branches into VLIW instructions (default).
12852
12853      This switch is mainly for debugging the compiler and will likely
12854      be removed in a future version.
12855
12856 `-mno-vliw-branch'
12857      Do not run a pass to pack branches into VLIW instructions.
12858
12859      This switch is mainly for debugging the compiler and will likely
12860      be removed in a future version.
12861
12862 `-mmulti-cond-exec'
12863      Enable optimization of `&&' and `||' in conditional execution
12864      (default).
12865
12866      This switch is mainly for debugging the compiler and will likely
12867      be removed in a future version.
12868
12869 `-mno-multi-cond-exec'
12870      Disable optimization of `&&' and `||' in conditional execution.
12871
12872      This switch is mainly for debugging the compiler and will likely
12873      be removed in a future version.
12874
12875 `-mnested-cond-exec'
12876      Enable nested conditional execution optimizations (default).
12877
12878      This switch is mainly for debugging the compiler and will likely
12879      be removed in a future version.
12880
12881 `-mno-nested-cond-exec'
12882      Disable nested conditional execution optimizations.
12883
12884      This switch is mainly for debugging the compiler and will likely
12885      be removed in a future version.
12886
12887 `-moptimize-membar'
12888      This switch removes redundant `membar' instructions from the
12889      compiler-generated code.  It is enabled by default.
12890
12891 `-mno-optimize-membar'
12892      This switch disables the automatic removal of redundant `membar'
12893      instructions from the generated code.
12894
12895 `-mtomcat-stats'
12896      Cause gas to print out tomcat statistics.
12897
12898 `-mcpu=CPU'
12899      Select the processor type for which to generate code.  Possible
12900      values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405',
12901      `fr400', `fr300' and `simple'.
12902
12903
12904 \1f
12905 File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
12906
12907 3.17.13 GNU/Linux Options
12908 -------------------------
12909
12910 These `-m' options are defined for GNU/Linux targets:
12911
12912 `-mglibc'
12913      Use the GNU C library.  This is the default except on
12914      `*-*-linux-*uclibc*' and `*-*-linux-*android*' targets.
12915
12916 `-muclibc'
12917      Use uClibc C library.  This is the default on `*-*-linux-*uclibc*'
12918      targets.
12919
12920 `-mbionic'
12921      Use Bionic C library.  This is the default on
12922      `*-*-linux-*android*' targets.
12923
12924 `-mandroid'
12925      Compile code compatible with Android platform.  This is the
12926      default on `*-*-linux-*android*' targets.
12927
12928      When compiling, this option enables `-mbionic', `-fPIC',
12929      `-fno-exceptions' and `-fno-rtti' by default.  When linking, this
12930      option makes the GCC driver pass Android-specific options to the
12931      linker.  Finally, this option causes the preprocessor macro
12932      `__ANDROID__' to be defined.
12933
12934 `-tno-android-cc'
12935      Disable compilation effects of `-mandroid', i.e., do not enable
12936      `-mbionic', `-fPIC', `-fno-exceptions' and `-fno-rtti' by default.
12937
12938 `-tno-android-ld'
12939      Disable linking effects of `-mandroid', i.e., pass standard Linux
12940      linking options to the linker.
12941
12942
12943 \1f
12944 File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options
12945
12946 3.17.14 H8/300 Options
12947 ----------------------
12948
12949 These `-m' options are defined for the H8/300 implementations:
12950
12951 `-mrelax'
12952      Shorten some address references at link time, when possible; uses
12953      the linker option `-relax'.  *Note `ld' and the H8/300:
12954      (ld)H8/300, for a fuller description.
12955
12956 `-mh'
12957      Generate code for the H8/300H.
12958
12959 `-ms'
12960      Generate code for the H8S.
12961
12962 `-mn'
12963      Generate code for the H8S and H8/300H in the normal mode.  This
12964      switch must be used either with `-mh' or `-ms'.
12965
12966 `-ms2600'
12967      Generate code for the H8S/2600.  This switch must be used with
12968      `-ms'.
12969
12970 `-mexr'
12971      Extended registers are stored on stack before execution of function
12972      with monitor attribute. Default option is `-mexr'.  This option is
12973      valid only for H8S targets.
12974
12975 `-mno-exr'
12976      Extended registers are not stored on stack before execution of
12977      function with monitor attribute. Default option is `-mno-exr'.
12978      This option is valid only for H8S targets.
12979
12980 `-mint32'
12981      Make `int' data 32 bits by default.
12982
12983 `-malign-300'
12984      On the H8/300H and H8S, use the same alignment rules as for the
12985      H8/300.  The default for the H8/300H and H8S is to align longs and
12986      floats on 4-byte boundaries.  `-malign-300' causes them to be
12987      aligned on 2-byte boundaries.  This option has no effect on the
12988      H8/300.
12989
12990 \1f
12991 File: gcc.info,  Node: HPPA Options,  Next: i386 and x86-64 Options,  Prev: H8/300 Options,  Up: Submodel Options
12992
12993 3.17.15 HPPA Options
12994 --------------------
12995
12996 These `-m' options are defined for the HPPA family of computers:
12997
12998 `-march=ARCHITECTURE-TYPE'
12999      Generate code for the specified architecture.  The choices for
13000      ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and
13001      `2.0' for PA 2.0 processors.  Refer to `/usr/lib/sched.models' on
13002      an HP-UX system to determine the proper architecture option for
13003      your machine.  Code compiled for lower numbered architectures runs
13004      on higher numbered architectures, but not the other way around.
13005
13006 `-mpa-risc-1-0'
13007 `-mpa-risc-1-1'
13008 `-mpa-risc-2-0'
13009      Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0'
13010      respectively.
13011
13012 `-mbig-switch'
13013      Generate code suitable for big switch tables.  Use this option
13014      only if the assembler/linker complain about out-of-range branches
13015      within a switch table.
13016
13017 `-mjump-in-delay'
13018      Fill delay slots of function calls with unconditional jump
13019      instructions by modifying the return pointer for the function call
13020      to be the target of the conditional jump.
13021
13022 `-mdisable-fpregs'
13023      Prevent floating-point registers from being used in any manner.
13024      This is necessary for compiling kernels that perform lazy context
13025      switching of floating-point registers.  If you use this option and
13026      attempt to perform floating-point operations, the compiler aborts.
13027
13028 `-mdisable-indexing'
13029      Prevent the compiler from using indexing address modes.  This
13030      avoids some rather obscure problems when compiling MIG generated
13031      code under MACH.
13032
13033 `-mno-space-regs'
13034      Generate code that assumes the target has no space registers.
13035      This allows GCC to generate faster indirect calls and use unscaled
13036      index address modes.
13037
13038      Such code is suitable for level 0 PA systems and kernels.
13039
13040 `-mfast-indirect-calls'
13041      Generate code that assumes calls never cross space boundaries.
13042      This allows GCC to emit code that performs faster indirect calls.
13043
13044      This option does not work in the presence of shared libraries or
13045      nested functions.
13046
13047 `-mfixed-range=REGISTER-RANGE'
13048      Generate code treating the given register range as fixed registers.
13049      A fixed register is one that the register allocator cannot use.
13050      This is useful when compiling kernel code.  A register range is
13051      specified as two registers separated by a dash.  Multiple register
13052      ranges can be specified separated by a comma.
13053
13054 `-mlong-load-store'
13055      Generate 3-instruction load and store sequences as sometimes
13056      required by the HP-UX 10 linker.  This is equivalent to the `+k'
13057      option to the HP compilers.
13058
13059 `-mportable-runtime'
13060      Use the portable calling conventions proposed by HP for ELF
13061      systems.
13062
13063 `-mgas'
13064      Enable the use of assembler directives only GAS understands.
13065
13066 `-mschedule=CPU-TYPE'
13067      Schedule code according to the constraints for the machine type
13068      CPU-TYPE.  The choices for CPU-TYPE are `700' `7100', `7100LC',
13069      `7200', `7300' and `8000'.  Refer to `/usr/lib/sched.models' on an
13070      HP-UX system to determine the proper scheduling option for your
13071      machine.  The default scheduling is `8000'.
13072
13073 `-mlinker-opt'
13074      Enable the optimization pass in the HP-UX linker.  Note this makes
13075      symbolic debugging impossible.  It also triggers a bug in the
13076      HP-UX 8 and HP-UX 9 linkers in which they give bogus error
13077      messages when linking some programs.
13078
13079 `-msoft-float'
13080      Generate output containing library calls for floating point.
13081      *Warning:* the requisite libraries are not available for all HPPA
13082      targets.  Normally the facilities of the machine's usual C
13083      compiler are used, but this cannot be done directly in
13084      cross-compilation.  You must make your own arrangements to provide
13085      suitable library functions for cross-compilation.
13086
13087      `-msoft-float' changes the calling convention in the output file;
13088      therefore, it is only useful if you compile _all_ of a program with
13089      this option.  In particular, you need to compile `libgcc.a', the
13090      library that comes with GCC, with `-msoft-float' in order for this
13091      to work.
13092
13093 `-msio'
13094      Generate the predefine, `_SIO', for server IO.  The default is
13095      `-mwsio'.  This generates the predefines, `__hp9000s700',
13096      `__hp9000s700__' and `_WSIO', for workstation IO.  These options
13097      are available under HP-UX and HI-UX.
13098
13099 `-mgnu-ld'
13100      Use options specific to GNU `ld'.  This passes `-shared' to `ld'
13101      when building a shared library.  It is the default when GCC is
13102      configured, explicitly or implicitly, with the GNU linker.  This
13103      option does not affect which `ld' is called; it only changes what
13104      parameters are passed to that `ld'.  The `ld' that is called is
13105      determined by the `--with-ld' configure option, GCC's program
13106      search path, and finally by the user's `PATH'.  The linker used by
13107      GCC can be printed using `which `gcc -print-prog-name=ld`'.  This
13108      option is only available on the 64-bit HP-UX GCC, i.e. configured
13109      with `hppa*64*-*-hpux*'.
13110
13111 `-mhp-ld'
13112      Use options specific to HP `ld'.  This passes `-b' to `ld' when
13113      building a shared library and passes `+Accept TypeMismatch' to
13114      `ld' on all links.  It is the default when GCC is configured,
13115      explicitly or implicitly, with the HP linker.  This option does
13116      not affect which `ld' is called; it only changes what parameters
13117      are passed to that `ld'.  The `ld' that is called is determined by
13118      the `--with-ld' configure option, GCC's program search path, and
13119      finally by the user's `PATH'.  The linker used by GCC can be
13120      printed using `which `gcc -print-prog-name=ld`'.  This option is
13121      only available on the 64-bit HP-UX GCC, i.e. configured with
13122      `hppa*64*-*-hpux*'.
13123
13124 `-mlong-calls'
13125      Generate code that uses long call sequences.  This ensures that a
13126      call is always able to reach linker generated stubs.  The default
13127      is to generate long calls only when the distance from the call
13128      site to the beginning of the function or translation unit, as the
13129      case may be, exceeds a predefined limit set by the branch type
13130      being used.  The limits for normal calls are 7,600,000 and 240,000
13131      bytes, respectively for the PA 2.0 and PA 1.X architectures.
13132      Sibcalls are always limited at 240,000 bytes.
13133
13134      Distances are measured from the beginning of functions when using
13135      the `-ffunction-sections' option, or when using the `-mgas' and
13136      `-mno-portable-runtime' options together under HP-UX with the SOM
13137      linker.
13138
13139      It is normally not desirable to use this option as it degrades
13140      performance.  However, it may be useful in large applications,
13141      particularly when partial linking is used to build the application.
13142
13143      The types of long calls used depends on the capabilities of the
13144      assembler and linker, and the type of code being generated.  The
13145      impact on systems that support long absolute calls, and long pic
13146      symbol-difference or pc-relative calls should be relatively small.
13147      However, an indirect call is used on 32-bit ELF systems in pic code
13148      and it is quite long.
13149
13150 `-munix=UNIX-STD'
13151      Generate compiler predefines and select a startfile for the
13152      specified UNIX standard.  The choices for UNIX-STD are `93', `95'
13153      and `98'.  `93' is supported on all HP-UX versions.  `95' is
13154      available on HP-UX 10.10 and later.  `98' is available on HP-UX
13155      11.11 and later.  The default values are `93' for HP-UX 10.00,
13156      `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and
13157      later.
13158
13159      `-munix=93' provides the same predefines as GCC 3.3 and 3.4.
13160      `-munix=95' provides additional predefines for `XOPEN_UNIX' and
13161      `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'.
13162      `-munix=98' provides additional predefines for `_XOPEN_UNIX',
13163      `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and
13164      `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'.
13165
13166      It is _important_ to note that this option changes the interfaces
13167      for various library routines.  It also affects the operational
13168      behavior of the C library.  Thus, _extreme_ care is needed in
13169      using this option.
13170
13171      Library code that is intended to operate with more than one UNIX
13172      standard must test, set and restore the variable
13173      __XPG4_EXTENDED_MASK as appropriate.  Most GNU software doesn't
13174      provide this capability.
13175
13176 `-nolibdld'
13177      Suppress the generation of link options to search libdld.sl when
13178      the `-static' option is specified on HP-UX 10 and later.
13179
13180 `-static'
13181      The HP-UX implementation of setlocale in libc has a dependency on
13182      libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
13183      when the `-static' option is specified, special link options are
13184      needed to resolve this dependency.
13185
13186      On HP-UX 10 and later, the GCC driver adds the necessary options to
13187      link with libdld.sl when the `-static' option is specified.  This
13188      causes the resulting binary to be dynamic.  On the 64-bit port,
13189      the linkers generate dynamic binaries by default in any case.  The
13190      `-nolibdld' option can be used to prevent the GCC driver from
13191      adding these link options.
13192
13193 `-threads'
13194      Add support for multithreading with the "dce thread" library under
13195      HP-UX.  This option sets flags for both the preprocessor and
13196      linker.
13197
13198 \1f
13199 File: gcc.info,  Node: i386 and x86-64 Options,  Next: i386 and x86-64 Windows Options,  Prev: HPPA Options,  Up: Submodel Options
13200
13201 3.17.16 Intel 386 and AMD x86-64 Options
13202 ----------------------------------------
13203
13204 These `-m' options are defined for the i386 and x86-64 family of
13205 computers:
13206
13207 `-march=CPU-TYPE'
13208      Generate instructions for the machine type CPU-TYPE.  In contrast
13209      to `-mtune=CPU-TYPE', which merely tunes the generated code for
13210      the specified CPU-TYPE, `-march=CPU-TYPE' allows GCC to generate
13211      code that may not run at all on processors other than the one
13212      indicated.  Specifying `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'.
13213
13214      The choices for CPU-TYPE are:
13215
13216     `native'
13217           This selects the CPU to generate code for at compilation time
13218           by determining the processor type of the compiling machine.
13219           Using `-march=native' enables all instruction subsets
13220           supported by the local machine (hence the result might not
13221           run on different machines).  Using `-mtune=native' produces
13222           code optimized for the local machine under the constraints of
13223           the selected instruction set.
13224
13225     `i386'
13226           Original Intel i386 CPU.
13227
13228     `i486'
13229           Intel i486 CPU.  (No scheduling is implemented for this chip.)
13230
13231     `i586'
13232     `pentium'
13233           Intel Pentium CPU with no MMX support.
13234
13235     `pentium-mmx'
13236           Intel Pentium MMX CPU, based on Pentium core with MMX
13237           instruction set support.
13238
13239     `pentiumpro'
13240           Intel Pentium Pro CPU.
13241
13242     `i686'
13243           When used with `-march', the Pentium Pro instruction set is
13244           used, so the code runs on all i686 family chips.  When used
13245           with `-mtune', it has the same meaning as `generic'.
13246
13247     `pentium2'
13248           Intel Pentium II CPU, based on Pentium Pro core with MMX
13249           instruction set support.
13250
13251     `pentium3'
13252     `pentium3m'
13253           Intel Pentium III CPU, based on Pentium Pro core with MMX and
13254           SSE instruction set support.
13255
13256     `pentium-m'
13257           Intel Pentium M; low-power version of Intel Pentium III CPU
13258           with MMX, SSE and SSE2 instruction set support.  Used by
13259           Centrino notebooks.
13260
13261     `pentium4'
13262     `pentium4m'
13263           Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set
13264           support.
13265
13266     `prescott'
13267           Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2
13268           and SSE3 instruction set support.
13269
13270     `nocona'
13271           Improved version of Intel Pentium 4 CPU with 64-bit
13272           extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
13273
13274     `core2'
13275           Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
13276           and SSSE3 instruction set support.
13277
13278     `corei7'
13279           Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2,
13280           SSE3, SSSE3, SSE4.1 and SSE4.2 instruction set support.
13281
13282     `corei7-avx'
13283           Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2,
13284           SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction
13285           set support.
13286
13287     `core-avx-i'
13288           Intel Core CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
13289           SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and
13290           F16C instruction set support.
13291
13292     `atom'
13293           Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
13294           and SSSE3 instruction set support.
13295
13296     `k6'
13297           AMD K6 CPU with MMX instruction set support.
13298
13299     `k6-2'
13300     `k6-3'
13301           Improved versions of AMD K6 CPU with MMX and 3DNow!
13302           instruction set support.
13303
13304     `athlon'
13305     `athlon-tbird'
13306           AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
13307           prefetch instructions support.
13308
13309     `athlon-4'
13310     `athlon-xp'
13311     `athlon-mp'
13312           Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
13313           full SSE instruction set support.
13314
13315     `k8'
13316     `opteron'
13317     `athlon64'
13318     `athlon-fx'
13319           Processors based on the AMD K8 core with x86-64 instruction
13320           set support, including the AMD Opteron, Athlon 64, and Athlon
13321           64 FX processors.  (This supersets MMX, SSE, SSE2, 3DNow!,
13322           enhanced 3DNow! and 64-bit instruction set extensions.)
13323
13324     `k8-sse3'
13325     `opteron-sse3'
13326     `athlon64-sse3'
13327           Improved versions of AMD K8 cores with SSE3 instruction set
13328           support.
13329
13330     `amdfam10'
13331     `barcelona'
13332           CPUs based on AMD Family 10h cores with x86-64 instruction
13333           set support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A,
13334           3DNow!, enhanced 3DNow!, ABM and 64-bit instruction set
13335           extensions.)
13336
13337     `bdver1'
13338           CPUs based on AMD Family 15h cores with x86-64 instruction
13339           set support.  (This supersets FMA4, AVX, XOP, LWP, AES,
13340           PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
13341           SSE4.2, ABM and 64-bit instruction set extensions.)
13342
13343     `bdver2'
13344           AMD Family 15h core based CPUs with x86-64 instruction set
13345           support.  (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP,
13346           AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
13347           SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
13348
13349     `bdver3'
13350           AMD Family 15h core based CPUs with x86-64 instruction set
13351           support.  (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP,
13352           AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
13353           SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.
13354
13355     `btver1'
13356           CPUs based on AMD Family 14h cores with x86-64 instruction
13357           set support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3,
13358           SSE4A, CX16, ABM and 64-bit instruction set extensions.)
13359
13360     `btver2'
13361           CPUs based on AMD Family 16h cores with x86-64 instruction
13362           set support. This includes MOVBE, F16C, BMI, AVX, PCL_MUL,
13363           AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2,
13364           SSE, MMX and 64-bit instruction set extensions.
13365
13366     `winchip-c6'
13367           IDT WinChip C6 CPU, dealt in same way as i486 with additional
13368           MMX instruction set support.
13369
13370     `winchip2'
13371           IDT WinChip 2 CPU, dealt in same way as i486 with additional
13372           MMX and 3DNow!  instruction set support.
13373
13374     `c3'
13375           VIA C3 CPU with MMX and 3DNow! instruction set support.  (No
13376           scheduling is implemented for this chip.)
13377
13378     `c3-2'
13379           VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
13380           support.  (No scheduling is implemented for this chip.)
13381
13382     `geode'
13383           AMD Geode embedded processor with MMX and 3DNow! instruction
13384           set support.
13385
13386 `-mtune=CPU-TYPE'
13387      Tune to CPU-TYPE everything applicable about the generated code,
13388      except for the ABI and the set of available instructions.  While
13389      picking a specific CPU-TYPE schedules things appropriately for
13390      that particular chip, the compiler does not generate any code that
13391      cannot run on the default machine type unless you use a
13392      `-march=CPU-TYPE' option.  For example, if GCC is configured for
13393      i686-pc-linux-gnu then `-mtune=pentium4' generates code that is
13394      tuned for Pentium 4 but still runs on i686 machines.
13395
13396      The choices for CPU-TYPE are the same as for `-march'.  In
13397      addition, `-mtune' supports an extra choice for CPU-TYPE:
13398
13399     `generic'
13400           Produce code optimized for the most common IA32/AMD64/EM64T
13401           processors.  If you know the CPU on which your code will run,
13402           then you should use the corresponding `-mtune' or `-march'
13403           option instead of `-mtune=generic'.  But, if you do not know
13404           exactly what CPU users of your application will have, then
13405           you should use this option.
13406
13407           As new processors are deployed in the marketplace, the
13408           behavior of this option will change.  Therefore, if you
13409           upgrade to a newer version of GCC, code generation controlled
13410           by this option will change to reflect the processors that are
13411           most common at the time that version of GCC is released.
13412
13413           There is no `-march=generic' option because `-march'
13414           indicates the instruction set the compiler can use, and there
13415           is no generic instruction set applicable to all processors.
13416           In contrast, `-mtune' indicates the processor (or, in this
13417           case, collection of processors) for which the code is
13418           optimized.
13419
13420 `-mcpu=CPU-TYPE'
13421      A deprecated synonym for `-mtune'.
13422
13423 `-mfpmath=UNIT'
13424      Generate floating-point arithmetic for selected unit UNIT.  The
13425      choices for UNIT are:
13426
13427     `387'
13428           Use the standard 387 floating-point coprocessor present on
13429           the majority of chips and emulated otherwise.  Code compiled
13430           with this option runs almost everywhere.  The temporary
13431           results are computed in 80-bit precision instead of the
13432           precision specified by the type, resulting in slightly
13433           different results compared to most of other chips.  See
13434           `-ffloat-store' for more detailed description.
13435
13436           This is the default choice for i386 compiler.
13437
13438     `sse'
13439           Use scalar floating-point instructions present in the SSE
13440           instruction set.  This instruction set is supported by
13441           Pentium III and newer chips, and in the AMD line by Athlon-4,
13442           Athlon XP and Athlon MP chips.  The earlier version of the SSE
13443           instruction set supports only single-precision arithmetic,
13444           thus the double and extended-precision arithmetic are still
13445           done using 387.  A later version, present only in Pentium 4
13446           and AMD x86-64 chips, supports double-precision arithmetic
13447           too.
13448
13449           For the i386 compiler, you must use `-march=CPU-TYPE', `-msse'
13450           or `-msse2' switches to enable SSE extensions and make this
13451           option effective.  For the x86-64 compiler, these extensions
13452           are enabled by default.
13453
13454           The resulting code should be considerably faster in the
13455           majority of cases and avoid the numerical instability
13456           problems of 387 code, but may break some existing code that
13457           expects temporaries to be 80 bits.
13458
13459           This is the default choice for the x86-64 compiler.
13460
13461     `sse,387'
13462     `sse+387'
13463     `both'
13464           Attempt to utilize both instruction sets at once.  This
13465           effectively doubles the amount of available registers, and on
13466           chips with separate execution units for 387 and SSE the
13467           execution resources too.  Use this option with care, as it is
13468           still experimental, because the GCC register allocator does
13469           not model separate functional units well, resulting in
13470           unstable performance.
13471
13472 `-masm=DIALECT'
13473      Output assembly instructions using selected DIALECT.  Supported
13474      choices are `intel' or `att' (the default).  Darwin does not
13475      support `intel'.
13476
13477 `-mieee-fp'
13478 `-mno-ieee-fp'
13479      Control whether or not the compiler uses IEEE floating-point
13480      comparisons.  These correctly handle the case where the result of a
13481      comparison is unordered.
13482
13483 `-msoft-float'
13484      Generate output containing library calls for floating point.
13485
13486      *Warning:* the requisite libraries are not part of GCC.  Normally
13487      the facilities of the machine's usual C compiler are used, but
13488      this can't be done directly in cross-compilation.  You must make
13489      your own arrangements to provide suitable library functions for
13490      cross-compilation.
13491
13492      On machines where a function returns floating-point results in the
13493      80387 register stack, some floating-point opcodes may be emitted
13494      even if `-msoft-float' is used.
13495
13496 `-mno-fp-ret-in-387'
13497      Do not use the FPU registers for return values of functions.
13498
13499      The usual calling convention has functions return values of types
13500      `float' and `double' in an FPU register, even if there is no FPU.
13501      The idea is that the operating system should emulate an FPU.
13502
13503      The option `-mno-fp-ret-in-387' causes such values to be returned
13504      in ordinary CPU registers instead.
13505
13506 `-mno-fancy-math-387'
13507      Some 387 emulators do not support the `sin', `cos' and `sqrt'
13508      instructions for the 387.  Specify this option to avoid generating
13509      those instructions.  This option is the default on FreeBSD,
13510      OpenBSD and NetBSD.  This option is overridden when `-march'
13511      indicates that the target CPU always has an FPU and so the
13512      instruction does not need emulation.  These instructions are not
13513      generated unless you also use the `-funsafe-math-optimizations'
13514      switch.
13515
13516 `-malign-double'
13517 `-mno-align-double'
13518      Control whether GCC aligns `double', `long double', and `long
13519      long' variables on a two-word boundary or a one-word boundary.
13520      Aligning `double' variables on a two-word boundary produces code
13521      that runs somewhat faster on a Pentium at the expense of more
13522      memory.
13523
13524      On x86-64, `-malign-double' is enabled by default.
13525
13526      *Warning:* if you use the `-malign-double' switch, structures
13527      containing the above types are aligned differently than the
13528      published application binary interface specifications for the 386
13529      and are not binary compatible with structures in code compiled
13530      without that switch.
13531
13532 `-m96bit-long-double'
13533 `-m128bit-long-double'
13534      These switches control the size of `long double' type.  The i386
13535      application binary interface specifies the size to be 96 bits, so
13536      `-m96bit-long-double' is the default in 32-bit mode.
13537
13538      Modern architectures (Pentium and newer) prefer `long double' to
13539      be aligned to an 8- or 16-byte boundary.  In arrays or structures
13540      conforming to the ABI, this is not possible.  So specifying
13541      `-m128bit-long-double' aligns `long double' to a 16-byte boundary
13542      by padding the `long double' with an additional 32-bit zero.
13543
13544      In the x86-64 compiler, `-m128bit-long-double' is the default
13545      choice as its ABI specifies that `long double' is aligned on
13546      16-byte boundary.
13547
13548      Notice that neither of these options enable any extra precision
13549      over the x87 standard of 80 bits for a `long double'.
13550
13551      *Warning:* if you override the default value for your target ABI,
13552      this changes the size of structures and arrays containing `long
13553      double' variables, as well as modifying the function calling
13554      convention for functions taking `long double'.  Hence they are not
13555      binary-compatible with code compiled without that switch.
13556
13557 `-mlong-double-64'
13558 `-mlong-double-80'
13559      These switches control the size of `long double' type. A size of
13560      64 bits makes the `long double' type equivalent to the `double'
13561      type. This is the default for Bionic C library.
13562
13563      *Warning:* if you override the default value for your target ABI,
13564      this changes the size of structures and arrays containing `long
13565      double' variables, as well as modifying the function calling
13566      convention for functions taking `long double'.  Hence they are not
13567      binary-compatible with code compiled without that switch.
13568
13569 `-mlarge-data-threshold=THRESHOLD'
13570      When `-mcmodel=medium' is specified, data objects larger than
13571      THRESHOLD are placed in the large data section.  This value must
13572      be the same across all objects linked into the binary, and
13573      defaults to 65535.
13574
13575 `-mrtd'
13576      Use a different function-calling convention, in which functions
13577      that take a fixed number of arguments return with the `ret NUM'
13578      instruction, which pops their arguments while returning.  This
13579      saves one instruction in the caller since there is no need to pop
13580      the arguments there.
13581
13582      You can specify that an individual function is called with this
13583      calling sequence with the function attribute `stdcall'.  You can
13584      also override the `-mrtd' option by using the function attribute
13585      `cdecl'.  *Note Function Attributes::.
13586
13587      *Warning:* this calling convention is incompatible with the one
13588      normally used on Unix, so you cannot use it if you need to call
13589      libraries compiled with the Unix compiler.
13590
13591      Also, you must provide function prototypes for all functions that
13592      take variable numbers of arguments (including `printf'); otherwise
13593      incorrect code is generated for calls to those functions.
13594
13595      In addition, seriously incorrect code results if you call a
13596      function with too many arguments.  (Normally, extra arguments are
13597      harmlessly ignored.)
13598
13599 `-mregparm=NUM'
13600      Control how many registers are used to pass integer arguments.  By
13601      default, no registers are used to pass arguments, and at most 3
13602      registers can be used.  You can control this behavior for a
13603      specific function by using the function attribute `regparm'.
13604      *Note Function Attributes::.
13605
13606      *Warning:* if you use this switch, and NUM is nonzero, then you
13607      must build all modules with the same value, including any
13608      libraries.  This includes the system libraries and startup modules.
13609
13610 `-msseregparm'
13611      Use SSE register passing conventions for float and double arguments
13612      and return values.  You can control this behavior for a specific
13613      function by using the function attribute `sseregparm'.  *Note
13614      Function Attributes::.
13615
13616      *Warning:* if you use this switch then you must build all modules
13617      with the same value, including any libraries.  This includes the
13618      system libraries and startup modules.
13619
13620 `-mvect8-ret-in-mem'
13621      Return 8-byte vectors in memory instead of MMX registers.  This is
13622      the default on Solaris 8 and 9 and VxWorks to match the ABI of the
13623      Sun Studio compilers until version 12.  Later compiler versions
13624      (starting with Studio 12 Update 1) follow the ABI used by other
13625      x86 targets, which is the default on Solaris 10 and later.  _Only_
13626      use this option if you need to remain compatible with existing
13627      code produced by those previous compiler versions or older
13628      versions of GCC.
13629
13630 `-mpc32'
13631 `-mpc64'
13632 `-mpc80'
13633      Set 80387 floating-point precision to 32, 64 or 80 bits.  When
13634      `-mpc32' is specified, the significands of results of
13635      floating-point operations are rounded to 24 bits (single
13636      precision); `-mpc64' rounds the significands of results of
13637      floating-point operations to 53 bits (double precision) and
13638      `-mpc80' rounds the significands of results of floating-point
13639      operations to 64 bits (extended double precision), which is the
13640      default.  When this option is used, floating-point operations in
13641      higher precisions are not available to the programmer without
13642      setting the FPU control word explicitly.
13643
13644      Setting the rounding of floating-point operations to less than the
13645      default 80 bits can speed some programs by 2% or more.  Note that
13646      some mathematical libraries assume that extended-precision
13647      (80-bit) floating-point operations are enabled by default;
13648      routines in such libraries could suffer significant loss of
13649      accuracy, typically through so-called "catastrophic cancellation",
13650      when this option is used to set the precision to less than
13651      extended precision.
13652
13653 `-mstackrealign'
13654      Realign the stack at entry.  On the Intel x86, the `-mstackrealign'
13655      option generates an alternate prologue and epilogue that realigns
13656      the run-time stack if necessary.  This supports mixing legacy
13657      codes that keep 4-byte stack alignment with modern codes that keep
13658      16-byte stack alignment for SSE compatibility.  See also the
13659      attribute `force_align_arg_pointer', applicable to individual
13660      functions.
13661
13662 `-mpreferred-stack-boundary=NUM'
13663      Attempt to keep the stack boundary aligned to a 2 raised to NUM
13664      byte boundary.  If `-mpreferred-stack-boundary' is not specified,
13665      the default is 4 (16 bytes or 128 bits).
13666
13667      *Warning:* When generating code for the x86-64 architecture with
13668      SSE extensions disabled, `-mpreferred-stack-boundary=3' can be
13669      used to keep the stack boundary aligned to 8 byte boundary.  Since
13670      x86-64 ABI require 16 byte stack alignment, this is ABI
13671      incompatible and intended to be used in controlled environment
13672      where stack space is important limitation.  This option will lead
13673      to wrong code when functions compiled with 16 byte stack alignment
13674      (such as functions from a standard library) are called with
13675      misaligned stack.  In this case, SSE instructions may lead to
13676      misaligned memory access traps.  In addition, variable arguments
13677      will be handled incorrectly for 16 byte aligned objects (including
13678      x87 long double and __int128), leading to wrong results.  You must
13679      build all modules with `-mpreferred-stack-boundary=3', including
13680      any libraries.  This includes the system libraries and startup
13681      modules.
13682
13683 `-mincoming-stack-boundary=NUM'
13684      Assume the incoming stack is aligned to a 2 raised to NUM byte
13685      boundary.  If `-mincoming-stack-boundary' is not specified, the
13686      one specified by `-mpreferred-stack-boundary' is used.
13687
13688      On Pentium and Pentium Pro, `double' and `long double' values
13689      should be aligned to an 8-byte boundary (see `-malign-double') or
13690      suffer significant run time performance penalties.  On Pentium
13691      III, the Streaming SIMD Extension (SSE) data type `__m128' may not
13692      work properly if it is not 16-byte aligned.
13693
13694      To ensure proper alignment of this values on the stack, the stack
13695      boundary must be as aligned as that required by any value stored
13696      on the stack.  Further, every function must be generated such that
13697      it keeps the stack aligned.  Thus calling a function compiled with
13698      a higher preferred stack boundary from a function compiled with a
13699      lower preferred stack boundary most likely misaligns the stack.
13700      It is recommended that libraries that use callbacks always use the
13701      default setting.
13702
13703      This extra alignment does consume extra stack space, and generally
13704      increases code size.  Code that is sensitive to stack space usage,
13705      such as embedded systems and operating system kernels, may want to
13706      reduce the preferred alignment to `-mpreferred-stack-boundary=2'.
13707
13708 `-mmmx'
13709 `-mno-mmx'
13710 `-msse'
13711 `-mno-sse'
13712 `-msse2'
13713 `-mno-sse2'
13714 `-msse3'
13715 `-mno-sse3'
13716 `-mssse3'
13717 `-mno-ssse3'
13718 `-msse4.1'
13719 `-mno-sse4.1'
13720 `-msse4.2'
13721 `-mno-sse4.2'
13722 `-msse4'
13723 `-mno-sse4'
13724 `-mavx'
13725 `-mno-avx'
13726 `-mavx2'
13727 `-mno-avx2'
13728 `-maes'
13729 `-mno-aes'
13730 `-mpclmul'
13731 `-mno-pclmul'
13732 `-mfsgsbase'
13733 `-mno-fsgsbase'
13734 `-mrdrnd'
13735 `-mno-rdrnd'
13736 `-mf16c'
13737 `-mno-f16c'
13738 `-mfma'
13739 `-mno-fma'
13740 `-msse4a'
13741 `-mno-sse4a'
13742 `-mfma4'
13743 `-mno-fma4'
13744 `-mxop'
13745 `-mno-xop'
13746 `-mlwp'
13747 `-mno-lwp'
13748 `-m3dnow'
13749 `-mno-3dnow'
13750 `-mpopcnt'
13751 `-mno-popcnt'
13752 `-mabm'
13753 `-mno-abm'
13754 `-mbmi'
13755 `-mbmi2'
13756 `-mno-bmi'
13757 `-mno-bmi2'
13758 `-mlzcnt'
13759 `-mno-lzcnt'
13760 `-mrtm'
13761 `-mtbm'
13762 `-mno-tbm'
13763      These switches enable or disable the use of instructions in the
13764      MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL,
13765      FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2,
13766      LZCNT, RTM or 3DNow!  extended instruction sets.  These extensions
13767      are also available as built-in functions: see *note X86 Built-in
13768      Functions::, for details of the functions enabled and disabled by
13769      these switches.
13770
13771      To generate SSE/SSE2 instructions automatically from floating-point
13772      code (as opposed to 387 instructions), see `-mfpmath=sse'.
13773
13774      GCC depresses SSEx instructions when `-mavx' is used. Instead, it
13775      generates new AVX instructions or AVX equivalence for all SSEx
13776      instructions when needed.
13777
13778      These options enable GCC to use these extended instructions in
13779      generated code, even without `-mfpmath=sse'.  Applications that
13780      perform run-time CPU detection must compile separate files for each
13781      supported architecture, using the appropriate flags.  In
13782      particular, the file containing the CPU detection code should be
13783      compiled without these options.
13784
13785 `-mcld'
13786      This option instructs GCC to emit a `cld' instruction in the
13787      prologue of functions that use string instructions.  String
13788      instructions depend on the DF flag to select between autoincrement
13789      or autodecrement mode.  While the ABI specifies the DF flag to be
13790      cleared on function entry, some operating systems violate this
13791      specification by not clearing the DF flag in their exception
13792      dispatchers.  The exception handler can be invoked with the DF flag
13793      set, which leads to wrong direction mode when string instructions
13794      are used.  This option can be enabled by default on 32-bit x86
13795      targets by configuring GCC with the `--enable-cld' configure
13796      option.  Generation of `cld' instructions can be suppressed with
13797      the `-mno-cld' compiler option in this case.
13798
13799 `-mvzeroupper'
13800      This option instructs GCC to emit a `vzeroupper' instruction
13801      before a transfer of control flow out of the function to minimize
13802      the AVX to SSE transition penalty as well as remove unnecessary
13803      `zeroupper' intrinsics.
13804
13805 `-mprefer-avx128'
13806      This option instructs GCC to use 128-bit AVX instructions instead
13807      of 256-bit AVX instructions in the auto-vectorizer.
13808
13809 `-mcx16'
13810      This option enables GCC to generate `CMPXCHG16B' instructions.
13811      `CMPXCHG16B' allows for atomic operations on 128-bit double
13812      quadword (or oword) data types.  This is useful for
13813      high-resolution counters that can be updated by multiple
13814      processors (or cores).  This instruction is generated as part of
13815      atomic built-in functions: see *note __sync Builtins:: or *note
13816      __atomic Builtins:: for details.
13817
13818 `-msahf'
13819      This option enables generation of `SAHF' instructions in 64-bit
13820      code.  Early Intel Pentium 4 CPUs with Intel 64 support, prior to
13821      the introduction of Pentium 4 G1 step in December 2005, lacked the
13822      `LAHF' and `SAHF' instructions which were supported by AMD64.
13823      These are load and store instructions, respectively, for certain
13824      status flags.  In 64-bit mode, the `SAHF' instruction is used to
13825      optimize `fmod', `drem', and `remainder' built-in functions; see
13826      *note Other Builtins:: for details.
13827
13828 `-mmovbe'
13829      This option enables use of the `movbe' instruction to implement
13830      `__builtin_bswap32' and `__builtin_bswap64'.
13831
13832 `-mcrc32'
13833      This option enables built-in functions `__builtin_ia32_crc32qi',
13834      `__builtin_ia32_crc32hi', `__builtin_ia32_crc32si' and
13835      `__builtin_ia32_crc32di' to generate the `crc32' machine
13836      instruction.
13837
13838 `-mrecip'
13839      This option enables use of `RCPSS' and `RSQRTSS' instructions (and
13840      their vectorized variants `RCPPS' and `RSQRTPS') with an
13841      additional Newton-Raphson step to increase precision instead of
13842      `DIVSS' and `SQRTSS' (and their vectorized variants) for
13843      single-precision floating-point arguments.  These instructions are
13844      generated only when `-funsafe-math-optimizations' is enabled
13845      together with `-finite-math-only' and `-fno-trapping-math'.  Note
13846      that while the throughput of the sequence is higher than the
13847      throughput of the non-reciprocal instruction, the precision of the
13848      sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0
13849      equals 0.99999994).
13850
13851      Note that GCC implements `1.0f/sqrtf(X)' in terms of `RSQRTSS' (or
13852      `RSQRTPS') already with `-ffast-math' (or the above option
13853      combination), and doesn't need `-mrecip'.
13854
13855      Also note that GCC emits the above sequence with additional
13856      Newton-Raphson step for vectorized single-float division and
13857      vectorized `sqrtf(X)' already with `-ffast-math' (or the above
13858      option combination), and doesn't need `-mrecip'.
13859
13860 `-mrecip=OPT'
13861      This option controls which reciprocal estimate instructions may be
13862      used.  OPT is a comma-separated list of options, which may be
13863      preceded by a `!' to invert the option:
13864
13865     `all'
13866           Enable all estimate instructions.
13867
13868     `default'
13869           Enable the default instructions, equivalent to `-mrecip'.
13870
13871     `none'
13872           Disable all estimate instructions, equivalent to `-mno-recip'.
13873
13874     `div'
13875           Enable the approximation for scalar division.
13876
13877     `vec-div'
13878           Enable the approximation for vectorized division.
13879
13880     `sqrt'
13881           Enable the approximation for scalar square root.
13882
13883     `vec-sqrt'
13884           Enable the approximation for vectorized square root.
13885
13886      So, for example, `-mrecip=all,!sqrt' enables all of the reciprocal
13887      approximations, except for square root.
13888
13889 `-mveclibabi=TYPE'
13890      Specifies the ABI type to use for vectorizing intrinsics using an
13891      external library.  Supported values for TYPE are `svml' for the
13892      Intel short vector math library and `acml' for the AMD math core
13893      library.  To use this option, both `-ftree-vectorize' and
13894      `-funsafe-math-optimizations' have to be enabled, and an SVML or
13895      ACML ABI-compatible library must be specified at link time.
13896
13897      GCC currently emits calls to `vmldExp2', `vmldLn2', `vmldLog102',
13898      `vmldLog102', `vmldPow2', `vmldTanh2', `vmldTan2', `vmldAtan2',
13899      `vmldAtanh2', `vmldCbrt2', `vmldSinh2', `vmldSin2', `vmldAsinh2',
13900      `vmldAsin2', `vmldCosh2', `vmldCos2', `vmldAcosh2', `vmldAcos2',
13901      `vmlsExp4', `vmlsLn4', `vmlsLog104', `vmlsLog104', `vmlsPow4',
13902      `vmlsTanh4', `vmlsTan4', `vmlsAtan4', `vmlsAtanh4', `vmlsCbrt4',
13903      `vmlsSinh4', `vmlsSin4', `vmlsAsinh4', `vmlsAsin4', `vmlsCosh4',
13904      `vmlsCos4', `vmlsAcosh4' and `vmlsAcos4' for corresponding
13905      function type when `-mveclibabi=svml' is used, and `__vrd2_sin',
13906      `__vrd2_cos', `__vrd2_exp', `__vrd2_log', `__vrd2_log2',
13907      `__vrd2_log10', `__vrs4_sinf', `__vrs4_cosf', `__vrs4_expf',
13908      `__vrs4_logf', `__vrs4_log2f', `__vrs4_log10f' and `__vrs4_powf'
13909      for the corresponding function type when `-mveclibabi=acml' is
13910      used.
13911
13912 `-mabi=NAME'
13913      Generate code for the specified calling convention.  Permissible
13914      values are `sysv' for the ABI used on GNU/Linux and other systems,
13915      and `ms' for the Microsoft ABI.  The default is to use the
13916      Microsoft ABI when targeting Microsoft Windows and the SysV ABI on
13917      all other systems.  You can control this behavior for a specific
13918      function by using the function attribute `ms_abi'/`sysv_abi'.
13919      *Note Function Attributes::.
13920
13921 `-mtls-dialect=TYPE'
13922      Generate code to access thread-local storage using the `gnu' or
13923      `gnu2' conventions.  `gnu' is the conservative default; `gnu2' is
13924      more efficient, but it may add compile- and run-time requirements
13925      that cannot be satisfied on all systems.
13926
13927 `-mpush-args'
13928 `-mno-push-args'
13929      Use PUSH operations to store outgoing parameters.  This method is
13930      shorter and usually equally fast as method using SUB/MOV
13931      operations and is enabled by default.  In some cases disabling it
13932      may improve performance because of improved scheduling and reduced
13933      dependencies.
13934
13935 `-maccumulate-outgoing-args'
13936      If enabled, the maximum amount of space required for outgoing
13937      arguments is computed in the function prologue.  This is faster on
13938      most modern CPUs because of reduced dependencies, improved
13939      scheduling and reduced stack usage when the preferred stack
13940      boundary is not equal to 2.  The drawback is a notable increase in
13941      code size.  This switch implies `-mno-push-args'.
13942
13943 `-mthreads'
13944      Support thread-safe exception handling on MinGW.  Programs that
13945      rely on thread-safe exception handling must compile and link all
13946      code with the `-mthreads' option.  When compiling, `-mthreads'
13947      defines `-D_MT'; when linking, it links in a special thread helper
13948      library `-lmingwthrd' which cleans up per-thread
13949      exception-handling data.
13950
13951 `-mno-align-stringops'
13952      Do not align the destination of inlined string operations.  This
13953      switch reduces code size and improves performance in case the
13954      destination is already aligned, but GCC doesn't know about it.
13955
13956 `-minline-all-stringops'
13957      By default GCC inlines string operations only when the destination
13958      is known to be aligned to least a 4-byte boundary.  This enables
13959      more inlining and increases code size, but may improve performance
13960      of code that depends on fast `memcpy', `strlen', and `memset' for
13961      short lengths.
13962
13963 `-minline-stringops-dynamically'
13964      For string operations of unknown size, use run-time checks with
13965      inline code for small blocks and a library call for large blocks.
13966
13967 `-mstringop-strategy=ALG'
13968      Override the internal decision heuristic for the particular
13969      algorithm to use for inlining string operations.  The allowed
13970      values for ALG are:
13971
13972     `rep_byte'
13973     `rep_4byte'
13974     `rep_8byte'
13975           Expand using i386 `rep' prefix of the specified size.
13976
13977     `byte_loop'
13978     `loop'
13979     `unrolled_loop'
13980           Expand into an inline loop.
13981
13982     `libcall'
13983           Always use a library call.
13984
13985 `-momit-leaf-frame-pointer'
13986      Don't keep the frame pointer in a register for leaf functions.
13987      This avoids the instructions to save, set up, and restore frame
13988      pointers and makes an extra register available in leaf functions.
13989      The option `-fomit-leaf-frame-pointer' removes the frame pointer
13990      for leaf functions, which might make debugging harder.
13991
13992 `-mtls-direct-seg-refs'
13993 `-mno-tls-direct-seg-refs'
13994      Controls whether TLS variables may be accessed with offsets from
13995      the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or
13996      whether the thread base pointer must be added.  Whether or not this
13997      is valid depends on the operating system, and whether it maps the
13998      segment to cover the entire TLS area.
13999
14000      For systems that use the GNU C Library, the default is on.
14001
14002 `-msse2avx'
14003 `-mno-sse2avx'
14004      Specify that the assembler should encode SSE instructions with VEX
14005      prefix.  The option `-mavx' turns this on by default.
14006
14007 `-mfentry'
14008 `-mno-fentry'
14009      If profiling is active (`-pg'), put the profiling counter call
14010      before the prologue.  Note: On x86 architectures the attribute
14011      `ms_hook_prologue' isn't possible at the moment for `-mfentry' and
14012      `-pg'.
14013
14014 `-m8bit-idiv'
14015 `-mno-8bit-idiv'
14016      On some processors, like Intel Atom, 8-bit unsigned integer divide
14017      is much faster than 32-bit/64-bit integer divide.  This option
14018      generates a run-time check.  If both dividend and divisor are
14019      within range of 0 to 255, 8-bit unsigned integer divide is used
14020      instead of 32-bit/64-bit integer divide.
14021
14022 `-mavx256-split-unaligned-load'
14023 `-mavx256-split-unaligned-store'
14024      Split 32-byte AVX unaligned load and store.
14025
14026
14027  These `-m' switches are supported in addition to the above on x86-64
14028 processors in 64-bit environments.
14029
14030 `-m32'
14031 `-m64'
14032 `-mx32'
14033      Generate code for a 32-bit or 64-bit environment.  The `-m32'
14034      option sets `int', `long', and pointer types to 32 bits, and
14035      generates code that runs on any i386 system.
14036
14037      The `-m64' option sets `int' to 32 bits and `long' and pointer
14038      types to 64 bits, and generates code for the x86-64 architecture.
14039      For Darwin only the `-m64' option also turns off the `-fno-pic'
14040      and `-mdynamic-no-pic' options.
14041
14042      The `-mx32' option sets `int', `long', and pointer types to 32
14043      bits, and generates code for the x86-64 architecture.
14044
14045 `-mno-red-zone'
14046      Do not use a so-called "red zone" for x86-64 code.  The red zone
14047      is mandated by the x86-64 ABI; it is a 128-byte area beyond the
14048      location of the stack pointer that is not modified by signal or
14049      interrupt handlers and therefore can be used for temporary data
14050      without adjusting the stack pointer.  The flag `-mno-red-zone'
14051      disables this red zone.
14052
14053 `-mcmodel=small'
14054      Generate code for the small code model: the program and its
14055      symbols must be linked in the lower 2 GB of the address space.
14056      Pointers are 64 bits.  Programs can be statically or dynamically
14057      linked.  This is the default code model.
14058
14059 `-mcmodel=kernel'
14060      Generate code for the kernel code model.  The kernel runs in the
14061      negative 2 GB of the address space.  This model has to be used for
14062      Linux kernel code.
14063
14064 `-mcmodel=medium'
14065      Generate code for the medium model: the program is linked in the
14066      lower 2 GB of the address space.  Small symbols are also placed
14067      there.  Symbols with sizes larger than `-mlarge-data-threshold'
14068      are put into large data or BSS sections and can be located above
14069      2GB.  Programs can be statically or dynamically linked.
14070
14071 `-mcmodel=large'
14072      Generate code for the large model.  This model makes no assumptions
14073      about addresses and sizes of sections.
14074
14075 `-maddress-mode=long'
14076      Generate code for long address mode.  This is only supported for
14077      64-bit and x32 environments.  It is the default address mode for
14078      64-bit environments.
14079
14080 `-maddress-mode=short'
14081      Generate code for short address mode.  This is only supported for
14082      32-bit and x32 environments.  It is the default address mode for
14083      32-bit and x32 environments.
14084
14085 \1f
14086 File: gcc.info,  Node: i386 and x86-64 Windows Options,  Next: IA-64 Options,  Prev: i386 and x86-64 Options,  Up: Submodel Options
14087
14088 3.17.17 i386 and x86-64 Windows Options
14089 ---------------------------------------
14090
14091 These additional options are available for Microsoft Windows targets:
14092
14093 `-mconsole'
14094      This option specifies that a console application is to be
14095      generated, by instructing the linker to set the PE header
14096      subsystem type required for console applications.  This option is
14097      available for Cygwin and MinGW targets and is enabled by default
14098      on those targets.
14099
14100 `-mdll'
14101      This option is available for Cygwin and MinGW targets.  It
14102      specifies that a DLL--a dynamic link library--is to be generated,
14103      enabling the selection of the required runtime startup object and
14104      entry point.
14105
14106 `-mnop-fun-dllimport'
14107      This option is available for Cygwin and MinGW targets.  It
14108      specifies that the `dllimport' attribute should be ignored.
14109
14110 `-mthread'
14111      This option is available for MinGW targets. It specifies that
14112      MinGW-specific thread support is to be used.
14113
14114 `-municode'
14115      This option is available for MinGW-w64 targets.  It causes the
14116      `UNICODE' preprocessor macro to be predefined, and chooses
14117      Unicode-capable runtime startup code.
14118
14119 `-mwin32'
14120      This option is available for Cygwin and MinGW targets.  It
14121      specifies that the typical Microsoft Windows predefined macros are
14122      to be set in the pre-processor, but does not influence the choice
14123      of runtime library/startup code.
14124
14125 `-mwindows'
14126      This option is available for Cygwin and MinGW targets.  It
14127      specifies that a GUI application is to be generated by instructing
14128      the linker to set the PE header subsystem type appropriately.
14129
14130 `-fno-set-stack-executable'
14131      This option is available for MinGW targets. It specifies that the
14132      executable flag for the stack used by nested functions isn't set.
14133      This is necessary for binaries running in kernel mode of Microsoft
14134      Windows, as there the User32 API, which is used to set executable
14135      privileges, isn't available.
14136
14137 `-fwritable-relocated-rdata'
14138      This option is available for MinGW and Cygwin targets.  It
14139      specifies that relocated-data in read-only section is put into
14140      .data section.  This is a necessary for older runtimes not
14141      supporting modification of .rdata sections for pseudo-relocation.
14142
14143 `-mpe-aligned-commons'
14144      This option is available for Cygwin and MinGW targets.  It
14145      specifies that the GNU extension to the PE file format that
14146      permits the correct alignment of COMMON variables should be used
14147      when generating code.  It is enabled by default if GCC detects
14148      that the target assembler found during configuration supports the
14149      feature.
14150
14151  See also under *note i386 and x86-64 Options:: for standard options.
14152
14153 \1f
14154 File: gcc.info,  Node: IA-64 Options,  Next: LM32 Options,  Prev: i386 and x86-64 Windows Options,  Up: Submodel Options
14155
14156 3.17.18 IA-64 Options
14157 ---------------------
14158
14159 These are the `-m' options defined for the Intel IA-64 architecture.
14160
14161 `-mbig-endian'
14162      Generate code for a big-endian target.  This is the default for
14163      HP-UX.
14164
14165 `-mlittle-endian'
14166      Generate code for a little-endian target.  This is the default for
14167      AIX5 and GNU/Linux.
14168
14169 `-mgnu-as'
14170 `-mno-gnu-as'
14171      Generate (or don't) code for the GNU assembler.  This is the
14172      default.
14173
14174 `-mgnu-ld'
14175 `-mno-gnu-ld'
14176      Generate (or don't) code for the GNU linker.  This is the default.
14177
14178 `-mno-pic'
14179      Generate code that does not use a global pointer register.  The
14180      result is not position independent code, and violates the IA-64
14181      ABI.
14182
14183 `-mvolatile-asm-stop'
14184 `-mno-volatile-asm-stop'
14185      Generate (or don't) a stop bit immediately before and after
14186      volatile asm statements.
14187
14188 `-mregister-names'
14189 `-mno-register-names'
14190      Generate (or don't) `in', `loc', and `out' register names for the
14191      stacked registers.  This may make assembler output more readable.
14192
14193 `-mno-sdata'
14194 `-msdata'
14195      Disable (or enable) optimizations that use the small data section.
14196      This may be useful for working around optimizer bugs.
14197
14198 `-mconstant-gp'
14199      Generate code that uses a single constant global pointer value.
14200      This is useful when compiling kernel code.
14201
14202 `-mauto-pic'
14203      Generate code that is self-relocatable.  This implies
14204      `-mconstant-gp'.  This is useful when compiling firmware code.
14205
14206 `-minline-float-divide-min-latency'
14207      Generate code for inline divides of floating-point values using
14208      the minimum latency algorithm.
14209
14210 `-minline-float-divide-max-throughput'
14211      Generate code for inline divides of floating-point values using
14212      the maximum throughput algorithm.
14213
14214 `-mno-inline-float-divide'
14215      Do not generate inline code for divides of floating-point values.
14216
14217 `-minline-int-divide-min-latency'
14218      Generate code for inline divides of integer values using the
14219      minimum latency algorithm.
14220
14221 `-minline-int-divide-max-throughput'
14222      Generate code for inline divides of integer values using the
14223      maximum throughput algorithm.
14224
14225 `-mno-inline-int-divide'
14226      Do not generate inline code for divides of integer values.
14227
14228 `-minline-sqrt-min-latency'
14229      Generate code for inline square roots using the minimum latency
14230      algorithm.
14231
14232 `-minline-sqrt-max-throughput'
14233      Generate code for inline square roots using the maximum throughput
14234      algorithm.
14235
14236 `-mno-inline-sqrt'
14237      Do not generate inline code for `sqrt'.
14238
14239 `-mfused-madd'
14240 `-mno-fused-madd'
14241      Do (don't) generate code that uses the fused multiply/add or
14242      multiply/subtract instructions.  The default is to use these
14243      instructions.
14244
14245 `-mno-dwarf2-asm'
14246 `-mdwarf2-asm'
14247      Don't (or do) generate assembler code for the DWARF 2 line number
14248      debugging info.  This may be useful when not using the GNU
14249      assembler.
14250
14251 `-mearly-stop-bits'
14252 `-mno-early-stop-bits'
14253      Allow stop bits to be placed earlier than immediately preceding the
14254      instruction that triggered the stop bit.  This can improve
14255      instruction scheduling, but does not always do so.
14256
14257 `-mfixed-range=REGISTER-RANGE'
14258      Generate code treating the given register range as fixed registers.
14259      A fixed register is one that the register allocator cannot use.
14260      This is useful when compiling kernel code.  A register range is
14261      specified as two registers separated by a dash.  Multiple register
14262      ranges can be specified separated by a comma.
14263
14264 `-mtls-size=TLS-SIZE'
14265      Specify bit size of immediate TLS offsets.  Valid values are 14,
14266      22, and 64.
14267
14268 `-mtune=CPU-TYPE'
14269      Tune the instruction scheduling for a particular CPU, Valid values
14270      are `itanium', `itanium1', `merced', `itanium2', and `mckinley'.
14271
14272 `-milp32'
14273 `-mlp64'
14274      Generate code for a 32-bit or 64-bit environment.  The 32-bit
14275      environment sets int, long and pointer to 32 bits.  The 64-bit
14276      environment sets int to 32 bits and long and pointer to 64 bits.
14277      These are HP-UX specific flags.
14278
14279 `-mno-sched-br-data-spec'
14280 `-msched-br-data-spec'
14281      (Dis/En)able data speculative scheduling before reload.  This
14282      results in generation of `ld.a' instructions and the corresponding
14283      check instructions (`ld.c' / `chk.a').  The default is 'disable'.
14284
14285 `-msched-ar-data-spec'
14286 `-mno-sched-ar-data-spec'
14287      (En/Dis)able data speculative scheduling after reload.  This
14288      results in generation of `ld.a' instructions and the corresponding
14289      check instructions (`ld.c' / `chk.a').  The default is 'enable'.
14290
14291 `-mno-sched-control-spec'
14292 `-msched-control-spec'
14293      (Dis/En)able control speculative scheduling.  This feature is
14294      available only during region scheduling (i.e. before reload).
14295      This results in generation of the `ld.s' instructions and the
14296      corresponding check instructions `chk.s'.  The default is
14297      'disable'.
14298
14299 `-msched-br-in-data-spec'
14300 `-mno-sched-br-in-data-spec'
14301      (En/Dis)able speculative scheduling of the instructions that are
14302      dependent on the data speculative loads before reload.  This is
14303      effective only with `-msched-br-data-spec' enabled.  The default
14304      is 'enable'.
14305
14306 `-msched-ar-in-data-spec'
14307 `-mno-sched-ar-in-data-spec'
14308      (En/Dis)able speculative scheduling of the instructions that are
14309      dependent on the data speculative loads after reload.  This is
14310      effective only with `-msched-ar-data-spec' enabled.  The default
14311      is 'enable'.
14312
14313 `-msched-in-control-spec'
14314 `-mno-sched-in-control-spec'
14315      (En/Dis)able speculative scheduling of the instructions that are
14316      dependent on the control speculative loads.  This is effective
14317      only with `-msched-control-spec' enabled.  The default is 'enable'.
14318
14319 `-mno-sched-prefer-non-data-spec-insns'
14320 `-msched-prefer-non-data-spec-insns'
14321      If enabled, data-speculative instructions are chosen for schedule
14322      only if there are no other choices at the moment.  This makes the
14323      use of the data speculation much more conservative.  The default
14324      is 'disable'.
14325
14326 `-mno-sched-prefer-non-control-spec-insns'
14327 `-msched-prefer-non-control-spec-insns'
14328      If enabled, control-speculative instructions are chosen for
14329      schedule only if there are no other choices at the moment.  This
14330      makes the use of the control speculation much more conservative.
14331      The default is 'disable'.
14332
14333 `-mno-sched-count-spec-in-critical-path'
14334 `-msched-count-spec-in-critical-path'
14335      If enabled, speculative dependencies are considered during
14336      computation of the instructions priorities.  This makes the use of
14337      the speculation a bit more conservative.  The default is 'disable'.
14338
14339 `-msched-spec-ldc'
14340      Use a simple data speculation check.  This option is on by default.
14341
14342 `-msched-control-spec-ldc'
14343      Use a simple check for control speculation.  This option is on by
14344      default.
14345
14346 `-msched-stop-bits-after-every-cycle'
14347      Place a stop bit after every cycle when scheduling.  This option
14348      is on by default.
14349
14350 `-msched-fp-mem-deps-zero-cost'
14351      Assume that floating-point stores and loads are not likely to
14352      cause a conflict when placed into the same instruction group.
14353      This option is disabled by default.
14354
14355 `-msel-sched-dont-check-control-spec'
14356      Generate checks for control speculation in selective scheduling.
14357      This flag is disabled by default.
14358
14359 `-msched-max-memory-insns=MAX-INSNS'
14360      Limit on the number of memory insns per instruction group, giving
14361      lower priority to subsequent memory insns attempting to schedule
14362      in the same instruction group. Frequently useful to prevent cache
14363      bank conflicts.  The default value is 1.
14364
14365 `-msched-max-memory-insns-hard-limit'
14366      Makes the limit specified by `msched-max-memory-insns' a hard
14367      limit, disallowing more than that number in an instruction group.
14368      Otherwise, the limit is "soft", meaning that non-memory operations
14369      are preferred when the limit is reached, but memory operations may
14370      still be scheduled.
14371
14372
14373 \1f
14374 File: gcc.info,  Node: LM32 Options,  Next: M32C Options,  Prev: IA-64 Options,  Up: Submodel Options
14375
14376 3.17.19 LM32 Options
14377 --------------------
14378
14379 These `-m' options are defined for the LatticeMico32 architecture:
14380
14381 `-mbarrel-shift-enabled'
14382      Enable barrel-shift instructions.
14383
14384 `-mdivide-enabled'
14385      Enable divide and modulus instructions.
14386
14387 `-mmultiply-enabled'
14388      Enable multiply instructions.
14389
14390 `-msign-extend-enabled'
14391      Enable sign extend instructions.
14392
14393 `-muser-enabled'
14394      Enable user-defined instructions.
14395
14396
14397 \1f
14398 File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: LM32 Options,  Up: Submodel Options
14399
14400 3.17.20 M32C Options
14401 --------------------
14402
14403 `-mcpu=NAME'
14404      Select the CPU for which code is generated.  NAME may be one of
14405      `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60)
14406      series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80
14407      series.
14408
14409 `-msim'
14410      Specifies that the program will be run on the simulator.  This
14411      causes an alternate runtime library to be linked in which
14412      supports, for example, file I/O.  You must not use this option
14413      when generating programs that will run on real hardware; you must
14414      provide your own runtime library for whatever I/O functions are
14415      needed.
14416
14417 `-memregs=NUMBER'
14418      Specifies the number of memory-based pseudo-registers GCC uses
14419      during code generation.  These pseudo-registers are used like real
14420      registers, so there is a tradeoff between GCC's ability to fit the
14421      code into available registers, and the performance penalty of using
14422      memory instead of registers.  Note that all modules in a program
14423      must be compiled with the same value for this option.  Because of
14424      that, you must not use this option with GCC's default runtime
14425      libraries.
14426
14427
14428 \1f
14429 File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options
14430
14431 3.17.21 M32R/D Options
14432 ----------------------
14433
14434 These `-m' options are defined for Renesas M32R/D architectures:
14435
14436 `-m32r2'
14437      Generate code for the M32R/2.
14438
14439 `-m32rx'
14440      Generate code for the M32R/X.
14441
14442 `-m32r'
14443      Generate code for the M32R.  This is the default.
14444
14445 `-mmodel=small'
14446      Assume all objects live in the lower 16MB of memory (so that their
14447      addresses can be loaded with the `ld24' instruction), and assume
14448      all subroutines are reachable with the `bl' instruction.  This is
14449      the default.
14450
14451      The addressability of a particular object can be set with the
14452      `model' attribute.
14453
14454 `-mmodel=medium'
14455      Assume objects may be anywhere in the 32-bit address space (the
14456      compiler generates `seth/add3' instructions to load their
14457      addresses), and assume all subroutines are reachable with the `bl'
14458      instruction.
14459
14460 `-mmodel=large'
14461      Assume objects may be anywhere in the 32-bit address space (the
14462      compiler generates `seth/add3' instructions to load their
14463      addresses), and assume subroutines may not be reachable with the
14464      `bl' instruction (the compiler generates the much slower
14465      `seth/add3/jl' instruction sequence).
14466
14467 `-msdata=none'
14468      Disable use of the small data area.  Variables are put into one of
14469      `.data', `.bss', or `.rodata' (unless the `section' attribute has
14470      been specified).  This is the default.
14471
14472      The small data area consists of sections `.sdata' and `.sbss'.
14473      Objects may be explicitly put in the small data area with the
14474      `section' attribute using one of these sections.
14475
14476 `-msdata=sdata'
14477      Put small global and static data in the small data area, but do not
14478      generate special code to reference them.
14479
14480 `-msdata=use'
14481      Put small global and static data in the small data area, and
14482      generate special instructions to reference them.
14483
14484 `-G NUM'
14485      Put global and static objects less than or equal to NUM bytes into
14486      the small data or BSS sections instead of the normal data or BSS
14487      sections.  The default value of NUM is 8.  The `-msdata' option
14488      must be set to one of `sdata' or `use' for this option to have any
14489      effect.
14490
14491      All modules should be compiled with the same `-G NUM' value.
14492      Compiling with different values of NUM may or may not work; if it
14493      doesn't the linker gives an error message--incorrect code is not
14494      generated.
14495
14496 `-mdebug'
14497      Makes the M32R-specific code in the compiler display some
14498      statistics that might help in debugging programs.
14499
14500 `-malign-loops'
14501      Align all loops to a 32-byte boundary.
14502
14503 `-mno-align-loops'
14504      Do not enforce a 32-byte alignment for loops.  This is the default.
14505
14506 `-missue-rate=NUMBER'
14507      Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
14508
14509 `-mbranch-cost=NUMBER'
14510      NUMBER can only be 1 or 2.  If it is 1 then branches are preferred
14511      over conditional code, if it is 2, then the opposite applies.
14512
14513 `-mflush-trap=NUMBER'
14514      Specifies the trap number to use to flush the cache.  The default
14515      is 12.  Valid numbers are between 0 and 15 inclusive.
14516
14517 `-mno-flush-trap'
14518      Specifies that the cache cannot be flushed by using a trap.
14519
14520 `-mflush-func=NAME'
14521      Specifies the name of the operating system function to call to
14522      flush the cache.  The default is __flush_cache_, but a function
14523      call is only used if a trap is not available.
14524
14525 `-mno-flush-func'
14526      Indicates that there is no OS function for flushing the cache.
14527
14528
14529 \1f
14530 File: gcc.info,  Node: M680x0 Options,  Next: MCore Options,  Prev: M32R/D Options,  Up: Submodel Options
14531
14532 3.17.22 M680x0 Options
14533 ----------------------
14534
14535 These are the `-m' options defined for M680x0 and ColdFire processors.
14536 The default settings depend on which architecture was selected when the
14537 compiler was configured; the defaults for the most common choices are
14538 given below.
14539
14540 `-march=ARCH'
14541      Generate code for a specific M680x0 or ColdFire instruction set
14542      architecture.  Permissible values of ARCH for M680x0 architectures
14543      are: `68000', `68010', `68020', `68030', `68040', `68060' and
14544      `cpu32'.  ColdFire architectures are selected according to
14545      Freescale's ISA classification and the permissible values are:
14546      `isaa', `isaaplus', `isab' and `isac'.
14547
14548      GCC defines a macro `__mcfARCH__' whenever it is generating code
14549      for a ColdFire target.  The ARCH in this macro is one of the
14550      `-march' arguments given above.
14551
14552      When used together, `-march' and `-mtune' select code that runs on
14553      a family of similar processors but that is optimized for a
14554      particular microarchitecture.
14555
14556 `-mcpu=CPU'
14557      Generate code for a specific M680x0 or ColdFire processor.  The
14558      M680x0 CPUs are: `68000', `68010', `68020', `68030', `68040',
14559      `68060', `68302', `68332' and `cpu32'.  The ColdFire CPUs are
14560      given by the table below, which also classifies the CPUs into
14561      families:
14562
14563      *Family*      *`-mcpu' arguments*
14564      `51'          `51' `51ac' `51ag' `51cn' `51em' `51je' `51jf' `51jg'
14565                    `51jm' `51mm' `51qe' `51qm'
14566      `5206'        `5202' `5204' `5206'
14567      `5206e'       `5206e'
14568      `5208'        `5207' `5208'
14569      `5211a'       `5210a' `5211a'
14570      `5213'        `5211' `5212' `5213'
14571      `5216'        `5214' `5216'
14572      `52235'       `52230' `52231' `52232' `52233' `52234' `52235'
14573      `5225'        `5224' `5225'
14574      `52259'       `52252' `52254' `52255' `52256' `52258' `52259'
14575      `5235'        `5232' `5233' `5234' `5235' `523x'
14576      `5249'        `5249'
14577      `5250'        `5250'
14578      `5271'        `5270' `5271'
14579      `5272'        `5272'
14580      `5275'        `5274' `5275'
14581      `5282'        `5280' `5281' `5282' `528x'
14582      `53017'       `53011' `53012' `53013' `53014' `53015' `53016'
14583                    `53017'
14584      `5307'        `5307'
14585      `5329'        `5327' `5328' `5329' `532x'
14586      `5373'        `5372' `5373' `537x'
14587      `5407'        `5407'
14588      `5475'        `5470' `5471' `5472' `5473' `5474' `5475' `547x'
14589                    `5480' `5481' `5482' `5483' `5484' `5485'
14590
14591      `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with
14592      CPU.  Other combinations of `-mcpu' and `-march' are rejected.
14593
14594      GCC defines the macro `__mcf_cpu_CPU' when ColdFire target CPU is
14595      selected.  It also defines `__mcf_family_FAMILY', where the value
14596      of FAMILY is given by the table above.
14597
14598 `-mtune=TUNE'
14599      Tune the code for a particular microarchitecture within the
14600      constraints set by `-march' and `-mcpu'.  The M680x0
14601      microarchitectures are: `68000', `68010', `68020', `68030',
14602      `68040', `68060' and `cpu32'.  The ColdFire microarchitectures
14603      are: `cfv1', `cfv2', `cfv3', `cfv4' and `cfv4e'.
14604
14605      You can also use `-mtune=68020-40' for code that needs to run
14606      relatively well on 68020, 68030 and 68040 targets.
14607      `-mtune=68020-60' is similar but includes 68060 targets as well.
14608      These two options select the same tuning decisions as `-m68020-40'
14609      and `-m68020-60' respectively.
14610
14611      GCC defines the macros `__mcARCH' and `__mcARCH__' when tuning for
14612      680x0 architecture ARCH.  It also defines `mcARCH' unless either
14613      `-ansi' or a non-GNU `-std' option is used.  If GCC is tuning for
14614      a range of architectures, as selected by `-mtune=68020-40' or
14615      `-mtune=68020-60', it defines the macros for every architecture in
14616      the range.
14617
14618      GCC also defines the macro `__mUARCH__' when tuning for ColdFire
14619      microarchitecture UARCH, where UARCH is one of the arguments given
14620      above.
14621
14622 `-m68000'
14623 `-mc68000'
14624      Generate output for a 68000.  This is the default when the
14625      compiler is configured for 68000-based systems.  It is equivalent
14626      to `-march=68000'.
14627
14628      Use this option for microcontrollers with a 68000 or EC000 core,
14629      including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
14630
14631 `-m68010'
14632      Generate output for a 68010.  This is the default when the
14633      compiler is configured for 68010-based systems.  It is equivalent
14634      to `-march=68010'.
14635
14636 `-m68020'
14637 `-mc68020'
14638      Generate output for a 68020.  This is the default when the
14639      compiler is configured for 68020-based systems.  It is equivalent
14640      to `-march=68020'.
14641
14642 `-m68030'
14643      Generate output for a 68030.  This is the default when the
14644      compiler is configured for 68030-based systems.  It is equivalent
14645      to `-march=68030'.
14646
14647 `-m68040'
14648      Generate output for a 68040.  This is the default when the
14649      compiler is configured for 68040-based systems.  It is equivalent
14650      to `-march=68040'.
14651
14652      This option inhibits the use of 68881/68882 instructions that have
14653      to be emulated by software on the 68040.  Use this option if your
14654      68040 does not have code to emulate those instructions.
14655
14656 `-m68060'
14657      Generate output for a 68060.  This is the default when the
14658      compiler is configured for 68060-based systems.  It is equivalent
14659      to `-march=68060'.
14660
14661      This option inhibits the use of 68020 and 68881/68882 instructions
14662      that have to be emulated by software on the 68060.  Use this
14663      option if your 68060 does not have code to emulate those
14664      instructions.
14665
14666 `-mcpu32'
14667      Generate output for a CPU32.  This is the default when the
14668      compiler is configured for CPU32-based systems.  It is equivalent
14669      to `-march=cpu32'.
14670
14671      Use this option for microcontrollers with a CPU32 or CPU32+ core,
14672      including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
14673      68341, 68349 and 68360.
14674
14675 `-m5200'
14676      Generate output for a 520X ColdFire CPU.  This is the default when
14677      the compiler is configured for 520X-based systems.  It is
14678      equivalent to `-mcpu=5206', and is now deprecated in favor of that
14679      option.
14680
14681      Use this option for microcontroller with a 5200 core, including
14682      the MCF5202, MCF5203, MCF5204 and MCF5206.
14683
14684 `-m5206e'
14685      Generate output for a 5206e ColdFire CPU.  The option is now
14686      deprecated in favor of the equivalent `-mcpu=5206e'.
14687
14688 `-m528x'
14689      Generate output for a member of the ColdFire 528X family.  The
14690      option is now deprecated in favor of the equivalent `-mcpu=528x'.
14691
14692 `-m5307'
14693      Generate output for a ColdFire 5307 CPU.  The option is now
14694      deprecated in favor of the equivalent `-mcpu=5307'.
14695
14696 `-m5407'
14697      Generate output for a ColdFire 5407 CPU.  The option is now
14698      deprecated in favor of the equivalent `-mcpu=5407'.
14699
14700 `-mcfv4e'
14701      Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
14702      This includes use of hardware floating-point instructions.  The
14703      option is equivalent to `-mcpu=547x', and is now deprecated in
14704      favor of that option.
14705
14706 `-m68020-40'
14707      Generate output for a 68040, without using any of the new
14708      instructions.  This results in code that can run relatively
14709      efficiently on either a 68020/68881 or a 68030 or a 68040.  The
14710      generated code does use the 68881 instructions that are emulated
14711      on the 68040.
14712
14713      The option is equivalent to `-march=68020' `-mtune=68020-40'.
14714
14715 `-m68020-60'
14716      Generate output for a 68060, without using any of the new
14717      instructions.  This results in code that can run relatively
14718      efficiently on either a 68020/68881 or a 68030 or a 68040.  The
14719      generated code does use the 68881 instructions that are emulated
14720      on the 68060.
14721
14722      The option is equivalent to `-march=68020' `-mtune=68020-60'.
14723
14724 `-mhard-float'
14725 `-m68881'
14726      Generate floating-point instructions.  This is the default for
14727      68020 and above, and for ColdFire devices that have an FPU.  It
14728      defines the macro `__HAVE_68881__' on M680x0 targets and
14729      `__mcffpu__' on ColdFire targets.
14730
14731 `-msoft-float'
14732      Do not generate floating-point instructions; use library calls
14733      instead.  This is the default for 68000, 68010, and 68832 targets.
14734      It is also the default for ColdFire devices that have no FPU.
14735
14736 `-mdiv'
14737 `-mno-div'
14738      Generate (do not generate) ColdFire hardware divide and remainder
14739      instructions.  If `-march' is used without `-mcpu', the default is
14740      "on" for ColdFire architectures and "off" for M680x0
14741      architectures.  Otherwise, the default is taken from the target CPU
14742      (either the default CPU, or the one specified by `-mcpu').  For
14743      example, the default is "off" for `-mcpu=5206' and "on" for
14744      `-mcpu=5206e'.
14745
14746      GCC defines the macro `__mcfhwdiv__' when this option is enabled.
14747
14748 `-mshort'
14749      Consider type `int' to be 16 bits wide, like `short int'.
14750      Additionally, parameters passed on the stack are also aligned to a
14751      16-bit boundary even on targets whose API mandates promotion to
14752      32-bit.
14753
14754 `-mno-short'
14755      Do not consider type `int' to be 16 bits wide.  This is the
14756      default.
14757
14758 `-mnobitfield'
14759 `-mno-bitfield'
14760      Do not use the bit-field instructions.  The `-m68000', `-mcpu32'
14761      and `-m5200' options imply `-mnobitfield'.
14762
14763 `-mbitfield'
14764      Do use the bit-field instructions.  The `-m68020' option implies
14765      `-mbitfield'.  This is the default if you use a configuration
14766      designed for a 68020.
14767
14768 `-mrtd'
14769      Use a different function-calling convention, in which functions
14770      that take a fixed number of arguments return with the `rtd'
14771      instruction, which pops their arguments while returning.  This
14772      saves one instruction in the caller since there is no need to pop
14773      the arguments there.
14774
14775      This calling convention is incompatible with the one normally used
14776      on Unix, so you cannot use it if you need to call libraries
14777      compiled with the Unix compiler.
14778
14779      Also, you must provide function prototypes for all functions that
14780      take variable numbers of arguments (including `printf'); otherwise
14781      incorrect code is generated for calls to those functions.
14782
14783      In addition, seriously incorrect code results if you call a
14784      function with too many arguments.  (Normally, extra arguments are
14785      harmlessly ignored.)
14786
14787      The `rtd' instruction is supported by the 68010, 68020, 68030,
14788      68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
14789
14790 `-mno-rtd'
14791      Do not use the calling conventions selected by `-mrtd'.  This is
14792      the default.
14793
14794 `-malign-int'
14795 `-mno-align-int'
14796      Control whether GCC aligns `int', `long', `long long', `float',
14797      `double', and `long double' variables on a 32-bit boundary
14798      (`-malign-int') or a 16-bit boundary (`-mno-align-int').  Aligning
14799      variables on 32-bit boundaries produces code that runs somewhat
14800      faster on processors with 32-bit busses at the expense of more
14801      memory.
14802
14803      *Warning:* if you use the `-malign-int' switch, GCC aligns
14804      structures containing the above types differently than most
14805      published application binary interface specifications for the m68k.
14806
14807 `-mpcrel'
14808      Use the pc-relative addressing mode of the 68000 directly, instead
14809      of using a global offset table.  At present, this option implies
14810      `-fpic', allowing at most a 16-bit offset for pc-relative
14811      addressing.  `-fPIC' is not presently supported with `-mpcrel',
14812      though this could be supported for 68020 and higher processors.
14813
14814 `-mno-strict-align'
14815 `-mstrict-align'
14816      Do not (do) assume that unaligned memory references are handled by
14817      the system.
14818
14819 `-msep-data'
14820      Generate code that allows the data segment to be located in a
14821      different area of memory from the text segment.  This allows for
14822      execute-in-place in an environment without virtual memory
14823      management.  This option implies `-fPIC'.
14824
14825 `-mno-sep-data'
14826      Generate code that assumes that the data segment follows the text
14827      segment.  This is the default.
14828
14829 `-mid-shared-library'
14830      Generate code that supports shared libraries via the library ID
14831      method.  This allows for execute-in-place and shared libraries in
14832      an environment without virtual memory management.  This option
14833      implies `-fPIC'.
14834
14835 `-mno-id-shared-library'
14836      Generate code that doesn't assume ID-based shared libraries are
14837      being used.  This is the default.
14838
14839 `-mshared-library-id=n'
14840      Specifies the identification number of the ID-based shared library
14841      being compiled.  Specifying a value of 0 generates more compact
14842      code; specifying other values forces the allocation of that number
14843      to the current library, but is no more space- or time-efficient
14844      than omitting this option.
14845
14846 `-mxgot'
14847 `-mno-xgot'
14848      When generating position-independent code for ColdFire, generate
14849      code that works if the GOT has more than 8192 entries.  This code
14850      is larger and slower than code generated without this option.  On
14851      M680x0 processors, this option is not needed; `-fPIC' suffices.
14852
14853      GCC normally uses a single instruction to load values from the GOT.
14854      While this is relatively efficient, it only works if the GOT is
14855      smaller than about 64k.  Anything larger causes the linker to
14856      report an error such as:
14857
14858           relocation truncated to fit: R_68K_GOT16O foobar
14859
14860      If this happens, you should recompile your code with `-mxgot'.  It
14861      should then work with very large GOTs.  However, code generated
14862      with `-mxgot' is less efficient, since it takes 4 instructions to
14863      fetch the value of a global symbol.
14864
14865      Note that some linkers, including newer versions of the GNU linker,
14866      can create multiple GOTs and sort GOT entries.  If you have such a
14867      linker, you should only need to use `-mxgot' when compiling a
14868      single object file that accesses more than 8192 GOT entries.  Very
14869      few do.
14870
14871      These options have no effect unless GCC is generating
14872      position-independent code.
14873
14874
14875 \1f
14876 File: gcc.info,  Node: MCore Options,  Next: MeP Options,  Prev: M680x0 Options,  Up: Submodel Options
14877
14878 3.17.23 MCore Options
14879 ---------------------
14880
14881 These are the `-m' options defined for the Motorola M*Core processors.
14882
14883 `-mhardlit'
14884 `-mno-hardlit'
14885      Inline constants into the code stream if it can be done in two
14886      instructions or less.
14887
14888 `-mdiv'
14889 `-mno-div'
14890      Use the divide instruction.  (Enabled by default).
14891
14892 `-mrelax-immediate'
14893 `-mno-relax-immediate'
14894      Allow arbitrary-sized immediates in bit operations.
14895
14896 `-mwide-bitfields'
14897 `-mno-wide-bitfields'
14898      Always treat bit-fields as `int'-sized.
14899
14900 `-m4byte-functions'
14901 `-mno-4byte-functions'
14902      Force all functions to be aligned to a 4-byte boundary.
14903
14904 `-mcallgraph-data'
14905 `-mno-callgraph-data'
14906      Emit callgraph information.
14907
14908 `-mslow-bytes'
14909 `-mno-slow-bytes'
14910      Prefer word access when reading byte quantities.
14911
14912 `-mlittle-endian'
14913 `-mbig-endian'
14914      Generate code for a little-endian target.
14915
14916 `-m210'
14917 `-m340'
14918      Generate code for the 210 processor.
14919
14920 `-mno-lsim'
14921      Assume that runtime support has been provided and so omit the
14922      simulator library (`libsim.a)' from the linker command line.
14923
14924 `-mstack-increment=SIZE'
14925      Set the maximum amount for a single stack increment operation.
14926      Large values can increase the speed of programs that contain
14927      functions that need a large amount of stack space, but they can
14928      also trigger a segmentation fault if the stack is extended too
14929      much.  The default value is 0x1000.
14930
14931
14932 \1f
14933 File: gcc.info,  Node: MeP Options,  Next: MicroBlaze Options,  Prev: MCore Options,  Up: Submodel Options
14934
14935 3.17.24 MeP Options
14936 -------------------
14937
14938 `-mabsdiff'
14939      Enables the `abs' instruction, which is the absolute difference
14940      between two registers.
14941
14942 `-mall-opts'
14943      Enables all the optional instructions--average, multiply, divide,
14944      bit operations, leading zero, absolute difference, min/max, clip,
14945      and saturation.
14946
14947 `-maverage'
14948      Enables the `ave' instruction, which computes the average of two
14949      registers.
14950
14951 `-mbased=N'
14952      Variables of size N bytes or smaller are placed in the `.based'
14953      section by default.  Based variables use the `$tp' register as a
14954      base register, and there is a 128-byte limit to the `.based'
14955      section.
14956
14957 `-mbitops'
14958      Enables the bit operation instructions--bit test (`btstm'), set
14959      (`bsetm'), clear (`bclrm'), invert (`bnotm'), and test-and-set
14960      (`tas').
14961
14962 `-mc=NAME'
14963      Selects which section constant data is placed in.  NAME may be
14964      `tiny', `near', or `far'.
14965
14966 `-mclip'
14967      Enables the `clip' instruction.  Note that `-mclip' is not useful
14968      unless you also provide `-mminmax'.
14969
14970 `-mconfig=NAME'
14971      Selects one of the built-in core configurations.  Each MeP chip has
14972      one or more modules in it; each module has a core CPU and a
14973      variety of coprocessors, optional instructions, and peripherals.
14974      The `MeP-Integrator' tool, not part of GCC, provides these
14975      configurations through this option; using this option is the same
14976      as using all the corresponding command-line options.  The default
14977      configuration is `default'.
14978
14979 `-mcop'
14980      Enables the coprocessor instructions.  By default, this is a 32-bit
14981      coprocessor.  Note that the coprocessor is normally enabled via the
14982      `-mconfig=' option.
14983
14984 `-mcop32'
14985      Enables the 32-bit coprocessor's instructions.
14986
14987 `-mcop64'
14988      Enables the 64-bit coprocessor's instructions.
14989
14990 `-mivc2'
14991      Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
14992
14993 `-mdc'
14994      Causes constant variables to be placed in the `.near' section.
14995
14996 `-mdiv'
14997      Enables the `div' and `divu' instructions.
14998
14999 `-meb'
15000      Generate big-endian code.
15001
15002 `-mel'
15003      Generate little-endian code.
15004
15005 `-mio-volatile'
15006      Tells the compiler that any variable marked with the `io'
15007      attribute is to be considered volatile.
15008
15009 `-ml'
15010      Causes variables to be assigned to the `.far' section by default.
15011
15012 `-mleadz'
15013      Enables the `leadz' (leading zero) instruction.
15014
15015 `-mm'
15016      Causes variables to be assigned to the `.near' section by default.
15017
15018 `-mminmax'
15019      Enables the `min' and `max' instructions.
15020
15021 `-mmult'
15022      Enables the multiplication and multiply-accumulate instructions.
15023
15024 `-mno-opts'
15025      Disables all the optional instructions enabled by `-mall-opts'.
15026
15027 `-mrepeat'
15028      Enables the `repeat' and `erepeat' instructions, used for
15029      low-overhead looping.
15030
15031 `-ms'
15032      Causes all variables to default to the `.tiny' section.  Note that
15033      there is a 65536-byte limit to this section.  Accesses to these
15034      variables use the `%gp' base register.
15035
15036 `-msatur'
15037      Enables the saturation instructions.  Note that the compiler does
15038      not currently generate these itself, but this option is included
15039      for compatibility with other tools, like `as'.
15040
15041 `-msdram'
15042      Link the SDRAM-based runtime instead of the default ROM-based
15043      runtime.
15044
15045 `-msim'
15046      Link the simulator runtime libraries.
15047
15048 `-msimnovec'
15049      Link the simulator runtime libraries, excluding built-in support
15050      for reset and exception vectors and tables.
15051
15052 `-mtf'
15053      Causes all functions to default to the `.far' section.  Without
15054      this option, functions default to the `.near' section.
15055
15056 `-mtiny=N'
15057      Variables that are N bytes or smaller are allocated to the `.tiny'
15058      section.  These variables use the `$gp' base register.  The
15059      default for this option is 4, but note that there's a 65536-byte
15060      limit to the `.tiny' section.
15061
15062
15063 \1f
15064 File: gcc.info,  Node: MicroBlaze Options,  Next: MIPS Options,  Prev: MeP Options,  Up: Submodel Options
15065
15066 3.17.25 MicroBlaze Options
15067 --------------------------
15068
15069 `-msoft-float'
15070      Use software emulation for floating point (default).
15071
15072 `-mhard-float'
15073      Use hardware floating-point instructions.
15074
15075 `-mmemcpy'
15076      Do not optimize block moves, use `memcpy'.
15077
15078 `-mno-clearbss'
15079      This option is deprecated.  Use `-fno-zero-initialized-in-bss'
15080      instead.
15081
15082 `-mcpu=CPU-TYPE'
15083      Use features of, and schedule code for, the given CPU.  Supported
15084      values are in the format `vX.YY.Z', where X is a major version, YY
15085      is the minor version, and Z is compatibility code.  Example values
15086      are `v3.00.a', `v4.00.b', `v5.00.a', `v5.00.b', `v5.00.b',
15087      `v6.00.a'.
15088
15089 `-mxl-soft-mul'
15090      Use software multiply emulation (default).
15091
15092 `-mxl-soft-div'
15093      Use software emulation for divides (default).
15094
15095 `-mxl-barrel-shift'
15096      Use the hardware barrel shifter.
15097
15098 `-mxl-pattern-compare'
15099      Use pattern compare instructions.
15100
15101 `-msmall-divides'
15102      Use table lookup optimization for small signed integer divisions.
15103
15104 `-mxl-stack-check'
15105      This option is deprecated.  Use `-fstack-check' instead.
15106
15107 `-mxl-gp-opt'
15108      Use GP-relative `.sdata'/`.sbss' sections.
15109
15110 `-mxl-multiply-high'
15111      Use multiply high instructions for high part of 32x32 multiply.
15112
15113 `-mxl-float-convert'
15114      Use hardware floating-point conversion instructions.
15115
15116 `-mxl-float-sqrt'
15117      Use hardware floating-point square root instruction.
15118
15119 `-mbig-endian'
15120      Generate code for a big-endian target.
15121
15122 `-mlittle-endian'
15123      Generate code for a little-endian target.
15124
15125 `-mxl-reorder'
15126      Use reorder instructions (swap and byte reversed load/store).
15127
15128 `-mxl-mode-APP-MODEL'
15129      Select application model APP-MODEL.  Valid models are
15130     `executable'
15131           normal executable (default), uses startup code `crt0.o'.
15132
15133     `xmdstub'
15134           for use with Xilinx Microprocessor Debugger (XMD) based
15135           software intrusive debug agent called xmdstub. This uses
15136           startup file `crt1.o' and sets the start address of the
15137           program to 0x800.
15138
15139     `bootstrap'
15140           for applications that are loaded using a bootloader.  This
15141           model uses startup file `crt2.o' which does not contain a
15142           processor reset vector handler. This is suitable for
15143           transferring control on a processor reset to the bootloader
15144           rather than the application.
15145
15146     `novectors'
15147           for applications that do not require any of the MicroBlaze
15148           vectors. This option may be useful for applications running
15149           within a monitoring application. This model uses `crt3.o' as
15150           a startup file.
15151
15152      Option `-xl-mode-APP-MODEL' is a deprecated alias for
15153      `-mxl-mode-APP-MODEL'.
15154
15155
15156 \1f
15157 File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MicroBlaze Options,  Up: Submodel Options
15158
15159 3.17.26 MIPS Options
15160 --------------------
15161
15162 `-EB'
15163      Generate big-endian code.
15164
15165 `-EL'
15166      Generate little-endian code.  This is the default for `mips*el-*-*'
15167      configurations.
15168
15169 `-march=ARCH'
15170      Generate code that runs on ARCH, which can be the name of a
15171      generic MIPS ISA, or the name of a particular processor.  The ISA
15172      names are: `mips1', `mips2', `mips3', `mips4', `mips32',
15173      `mips32r2', `mips64' and `mips64r2'.  The processor names are:
15174      `4kc', `4km', `4kp', `4ksc', `4kec', `4kem', `4kep', `4ksd',
15175      `5kc', `5kf', `20kc', `24kc', `24kf2_1', `24kf1_1', `24kec',
15176      `24kef2_1', `24kef1_1', `34kc', `34kf2_1', `34kf1_1', `34kn',
15177      `74kc', `74kf2_1', `74kf1_1', `74kf3_2', `1004kc', `1004kf2_1',
15178      `1004kf1_1', `loongson2e', `loongson2f', `loongson3a', `m4k',
15179      `octeon', `octeon+', `octeon2', `orion', `r2000', `r3000',
15180      `r3900', `r4000', `r4400', `r4600', `r4650', `r4700', `r6000',
15181      `r8000', `rm7000', `rm9000', `r10000', `r12000', `r14000',
15182      `r16000', `sb1', `sr71000', `vr4100', `vr4111', `vr4120',
15183      `vr4130', `vr4300', `vr5000', `vr5400', `vr5500', `xlr' and `xlp'.
15184      The special value `from-abi' selects the most compatible
15185      architecture for the selected ABI (that is, `mips1' for 32-bit
15186      ABIs and `mips3' for 64-bit ABIs).
15187
15188      The native Linux/GNU toolchain also supports the value `native',
15189      which selects the best architecture option for the host processor.
15190      `-march=native' has no effect if GCC does not recognize the
15191      processor.
15192
15193      In processor names, a final `000' can be abbreviated as `k' (for
15194      example, `-march=r2k').  Prefixes are optional, and `vr' may be
15195      written `r'.
15196
15197      Names of the form `Nf2_1' refer to processors with FPUs clocked at
15198      half the rate of the core, names of the form `Nf1_1' refer to
15199      processors with FPUs clocked at the same rate as the core, and
15200      names of the form `Nf3_2' refer to processors with FPUs clocked a
15201      ratio of 3:2 with respect to the core.  For compatibility reasons,
15202      `Nf' is accepted as a synonym for `Nf2_1' while `Nx' and `Bfx' are
15203      accepted as synonyms for `Nf1_1'.
15204
15205      GCC defines two macros based on the value of this option.  The
15206      first is `_MIPS_ARCH', which gives the name of target
15207      architecture, as a string.  The second has the form
15208      `_MIPS_ARCH_FOO', where FOO is the capitalized value of
15209      `_MIPS_ARCH'.  For example, `-march=r2000' sets `_MIPS_ARCH' to
15210      `"r2000"' and defines the macro `_MIPS_ARCH_R2000'.
15211
15212      Note that the `_MIPS_ARCH' macro uses the processor names given
15213      above.  In other words, it has the full prefix and does not
15214      abbreviate `000' as `k'.  In the case of `from-abi', the macro
15215      names the resolved architecture (either `"mips1"' or `"mips3"').
15216      It names the default architecture when no `-march' option is given.
15217
15218 `-mtune=ARCH'
15219      Optimize for ARCH.  Among other things, this option controls the
15220      way instructions are scheduled, and the perceived cost of
15221      arithmetic operations.  The list of ARCH values is the same as for
15222      `-march'.
15223
15224      When this option is not used, GCC optimizes for the processor
15225      specified by `-march'.  By using `-march' and `-mtune' together,
15226      it is possible to generate code that runs on a family of
15227      processors, but optimize the code for one particular member of
15228      that family.
15229
15230      `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO',
15231      which work in the same way as the `-march' ones described above.
15232
15233 `-mips1'
15234      Equivalent to `-march=mips1'.
15235
15236 `-mips2'
15237      Equivalent to `-march=mips2'.
15238
15239 `-mips3'
15240      Equivalent to `-march=mips3'.
15241
15242 `-mips4'
15243      Equivalent to `-march=mips4'.
15244
15245 `-mips32'
15246      Equivalent to `-march=mips32'.
15247
15248 `-mips32r2'
15249      Equivalent to `-march=mips32r2'.
15250
15251 `-mips64'
15252      Equivalent to `-march=mips64'.
15253
15254 `-mips64r2'
15255      Equivalent to `-march=mips64r2'.
15256
15257 `-mips16'
15258 `-mno-mips16'
15259      Generate (do not generate) MIPS16 code.  If GCC is targeting a
15260      MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
15261
15262      MIPS16 code generation can also be controlled on a per-function
15263      basis by means of `mips16' and `nomips16' attributes.  *Note
15264      Function Attributes::, for more information.
15265
15266 `-mflip-mips16'
15267      Generate MIPS16 code on alternating functions.  This option is
15268      provided for regression testing of mixed MIPS16/non-MIPS16 code
15269      generation, and is not intended for ordinary use in compiling user
15270      code.
15271
15272 `-minterlink-mips16'
15273 `-mno-interlink-mips16'
15274      Require (do not require) that non-MIPS16 code be link-compatible
15275      with MIPS16 code.
15276
15277      For example, non-MIPS16 code cannot jump directly to MIPS16 code;
15278      it must either use a call or an indirect jump.
15279      `-minterlink-mips16' therefore disables direct jumps unless GCC
15280      knows that the target of the jump is not MIPS16.
15281
15282 `-mabi=32'
15283 `-mabi=o64'
15284 `-mabi=n32'
15285 `-mabi=64'
15286 `-mabi=eabi'
15287      Generate code for the given ABI.
15288
15289      Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
15290      generates 64-bit code when you select a 64-bit architecture, but
15291      you can use `-mgp32' to get 32-bit code instead.
15292
15293      For information about the O64 ABI, see
15294      `http://gcc.gnu.org/projects/mipso64-abi.html'.
15295
15296      GCC supports a variant of the o32 ABI in which floating-point
15297      registers are 64 rather than 32 bits wide.  You can select this
15298      combination with `-mabi=32' `-mfp64'.  This ABI relies on the
15299      `mthc1' and `mfhc1' instructions and is therefore only supported
15300      for MIPS32R2 processors.
15301
15302      The register assignments for arguments and return values remain the
15303      same, but each scalar value is passed in a single 64-bit register
15304      rather than a pair of 32-bit registers.  For example, scalar
15305      floating-point values are returned in `$f0' only, not a
15306      `$f0'/`$f1' pair.  The set of call-saved registers also remains
15307      the same, but all 64 bits are saved.
15308
15309 `-mabicalls'
15310 `-mno-abicalls'
15311      Generate (do not generate) code that is suitable for SVR4-style
15312      dynamic objects.  `-mabicalls' is the default for SVR4-based
15313      systems.
15314
15315 `-mshared'
15316 `-mno-shared'
15317      Generate (do not generate) code that is fully position-independent,
15318      and that can therefore be linked into shared libraries.  This
15319      option only affects `-mabicalls'.
15320
15321      All `-mabicalls' code has traditionally been position-independent,
15322      regardless of options like `-fPIC' and `-fpic'.  However, as an
15323      extension, the GNU toolchain allows executables to use absolute
15324      accesses for locally-binding symbols.  It can also use shorter GP
15325      initialization sequences and generate direct calls to
15326      locally-defined functions.  This mode is selected by `-mno-shared'.
15327
15328      `-mno-shared' depends on binutils 2.16 or higher and generates
15329      objects that can only be linked by the GNU linker.  However, the
15330      option does not affect the ABI of the final executable; it only
15331      affects the ABI of relocatable objects.  Using `-mno-shared'
15332      generally makes executables both smaller and quicker.
15333
15334      `-mshared' is the default.
15335
15336 `-mplt'
15337 `-mno-plt'
15338      Assume (do not assume) that the static and dynamic linkers support
15339      PLTs and copy relocations.  This option only affects `-mno-shared
15340      -mabicalls'.  For the n64 ABI, this option has no effect without
15341      `-msym32'.
15342
15343      You can make `-mplt' the default by configuring GCC with
15344      `--with-mips-plt'.  The default is `-mno-plt' otherwise.
15345
15346 `-mxgot'
15347 `-mno-xgot'
15348      Lift (do not lift) the usual restrictions on the size of the global
15349      offset table.
15350
15351      GCC normally uses a single instruction to load values from the GOT.
15352      While this is relatively efficient, it only works if the GOT is
15353      smaller than about 64k.  Anything larger causes the linker to
15354      report an error such as:
15355
15356           relocation truncated to fit: R_MIPS_GOT16 foobar
15357
15358      If this happens, you should recompile your code with `-mxgot'.
15359      This works with very large GOTs, although the code is also less
15360      efficient, since it takes three instructions to fetch the value of
15361      a global symbol.
15362
15363      Note that some linkers can create multiple GOTs.  If you have such
15364      a linker, you should only need to use `-mxgot' when a single object
15365      file accesses more than 64k's worth of GOT entries.  Very few do.
15366
15367      These options have no effect unless GCC is generating position
15368      independent code.
15369
15370 `-mgp32'
15371      Assume that general-purpose registers are 32 bits wide.
15372
15373 `-mgp64'
15374      Assume that general-purpose registers are 64 bits wide.
15375
15376 `-mfp32'
15377      Assume that floating-point registers are 32 bits wide.
15378
15379 `-mfp64'
15380      Assume that floating-point registers are 64 bits wide.
15381
15382 `-mhard-float'
15383      Use floating-point coprocessor instructions.
15384
15385 `-msoft-float'
15386      Do not use floating-point coprocessor instructions.  Implement
15387      floating-point calculations using library calls instead.
15388
15389 `-mno-float'
15390      Equivalent to `-msoft-float', but additionally asserts that the
15391      program being compiled does not perform any floating-point
15392      operations.  This option is presently supported only by some
15393      bare-metal MIPS configurations, where it may select a special set
15394      of libraries that lack all floating-point support (including, for
15395      example, the floating-point `printf' formats).  If code compiled
15396      with `-mno-float' accidentally contains floating-point operations,
15397      it is likely to suffer a link-time or run-time failure.
15398
15399 `-msingle-float'
15400      Assume that the floating-point coprocessor only supports
15401      single-precision operations.
15402
15403 `-mdouble-float'
15404      Assume that the floating-point coprocessor supports
15405      double-precision operations.  This is the default.
15406
15407 `-mllsc'
15408 `-mno-llsc'
15409      Use (do not use) `ll', `sc', and `sync' instructions to implement
15410      atomic memory built-in functions.  When neither option is
15411      specified, GCC uses the instructions if the target architecture
15412      supports them.
15413
15414      `-mllsc' is useful if the runtime environment can emulate the
15415      instructions and `-mno-llsc' can be useful when compiling for
15416      nonstandard ISAs.  You can make either option the default by
15417      configuring GCC with `--with-llsc' and `--without-llsc'
15418      respectively.  `--with-llsc' is the default for some
15419      configurations; see the installation documentation for details.
15420
15421 `-mdsp'
15422 `-mno-dsp'
15423      Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
15424      Built-in Functions::.  This option defines the preprocessor macro
15425      `__mips_dsp'.  It also defines `__mips_dsp_rev' to 1.
15426
15427 `-mdspr2'
15428 `-mno-dspr2'
15429      Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
15430      Built-in Functions::.  This option defines the preprocessor macros
15431      `__mips_dsp' and `__mips_dspr2'.  It also defines `__mips_dsp_rev'
15432      to 2.
15433
15434 `-msmartmips'
15435 `-mno-smartmips'
15436      Use (do not use) the MIPS SmartMIPS ASE.
15437
15438 `-mpaired-single'
15439 `-mno-paired-single'
15440      Use (do not use) paired-single floating-point instructions.  *Note
15441      MIPS Paired-Single Support::.  This option requires hardware
15442      floating-point support to be enabled.
15443
15444 `-mdmx'
15445 `-mno-mdmx'
15446      Use (do not use) MIPS Digital Media Extension instructions.  This
15447      option can only be used when generating 64-bit code and requires
15448      hardware floating-point support to be enabled.
15449
15450 `-mips3d'
15451 `-mno-mips3d'
15452      Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
15453      Functions::.  The option `-mips3d' implies `-mpaired-single'.
15454
15455 `-mmt'
15456 `-mno-mt'
15457      Use (do not use) MT Multithreading instructions.
15458
15459 `-mmcu'
15460 `-mno-mcu'
15461      Use (do not use) the MIPS MCU ASE instructions.
15462
15463 `-mlong64'
15464      Force `long' types to be 64 bits wide.  See `-mlong32' for an
15465      explanation of the default and the way that the pointer size is
15466      determined.
15467
15468 `-mlong32'
15469      Force `long', `int', and pointer types to be 32 bits wide.
15470
15471      The default size of `int's, `long's and pointers depends on the
15472      ABI.  All the supported ABIs use 32-bit `int's.  The n64 ABI uses
15473      64-bit `long's, as does the 64-bit EABI; the others use 32-bit
15474      `long's.  Pointers are the same size as `long's, or the same size
15475      as integer registers, whichever is smaller.
15476
15477 `-msym32'
15478 `-mno-sym32'
15479      Assume (do not assume) that all symbols have 32-bit values,
15480      regardless of the selected ABI.  This option is useful in
15481      combination with `-mabi=64' and `-mno-abicalls' because it allows
15482      GCC to generate shorter and faster references to symbolic
15483      addresses.
15484
15485 `-G NUM'
15486      Put definitions of externally-visible data in a small data section
15487      if that data is no bigger than NUM bytes.  GCC can then generate
15488      more efficient accesses to the data; see `-mgpopt' for details.
15489
15490      The default `-G' option depends on the configuration.
15491
15492 `-mlocal-sdata'
15493 `-mno-local-sdata'
15494      Extend (do not extend) the `-G' behavior to local data too, such
15495      as to static variables in C.  `-mlocal-sdata' is the default for
15496      all configurations.
15497
15498      If the linker complains that an application is using too much
15499      small data, you might want to try rebuilding the less
15500      performance-critical parts with `-mno-local-sdata'.  You might
15501      also want to build large libraries with `-mno-local-sdata', so
15502      that the libraries leave more room for the main program.
15503
15504 `-mextern-sdata'
15505 `-mno-extern-sdata'
15506      Assume (do not assume) that externally-defined data is in a small
15507      data section if the size of that data is within the `-G' limit.
15508      `-mextern-sdata' is the default for all configurations.
15509
15510      If you compile a module MOD with `-mextern-sdata' `-G NUM'
15511      `-mgpopt', and MOD references a variable VAR that is no bigger
15512      than NUM bytes, you must make sure that VAR is placed in a small
15513      data section.  If VAR is defined by another module, you must
15514      either compile that module with a high-enough `-G' setting or
15515      attach a `section' attribute to VAR's definition.  If VAR is
15516      common, you must link the application with a high-enough `-G'
15517      setting.
15518
15519      The easiest way of satisfying these restrictions is to compile and
15520      link every module with the same `-G' option.  However, you may
15521      wish to build a library that supports several different small data
15522      limits.  You can do this by compiling the library with the highest
15523      supported `-G' setting and additionally using `-mno-extern-sdata'
15524      to stop the library from making assumptions about
15525      externally-defined data.
15526
15527 `-mgpopt'
15528 `-mno-gpopt'
15529      Use (do not use) GP-relative accesses for symbols that are known
15530      to be in a small data section; see `-G', `-mlocal-sdata' and
15531      `-mextern-sdata'.  `-mgpopt' is the default for all configurations.
15532
15533      `-mno-gpopt' is useful for cases where the `$gp' register might
15534      not hold the value of `_gp'.  For example, if the code is part of
15535      a library that might be used in a boot monitor, programs that call
15536      boot monitor routines pass an unknown value in `$gp'.  (In such
15537      situations, the boot monitor itself is usually compiled with
15538      `-G0'.)
15539
15540      `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'.
15541
15542 `-membedded-data'
15543 `-mno-embedded-data'
15544      Allocate variables to the read-only data section first if
15545      possible, then next in the small data section if possible,
15546      otherwise in data.  This gives slightly slower code than the
15547      default, but reduces the amount of RAM required when executing,
15548      and thus may be preferred for some embedded systems.
15549
15550 `-muninit-const-in-rodata'
15551 `-mno-uninit-const-in-rodata'
15552      Put uninitialized `const' variables in the read-only data section.
15553      This option is only meaningful in conjunction with
15554      `-membedded-data'.
15555
15556 `-mcode-readable=SETTING'
15557      Specify whether GCC may generate code that reads from executable
15558      sections.  There are three possible settings:
15559
15560     `-mcode-readable=yes'
15561           Instructions may freely access executable sections.  This is
15562           the default setting.
15563
15564     `-mcode-readable=pcrel'
15565           MIPS16 PC-relative load instructions can access executable
15566           sections, but other instructions must not do so.  This option
15567           is useful on 4KSc and 4KSd processors when the code TLBs have
15568           the Read Inhibit bit set.  It is also useful on processors
15569           that can be configured to have a dual instruction/data SRAM
15570           interface and that, like the M4K, automatically redirect
15571           PC-relative loads to the instruction RAM.
15572
15573     `-mcode-readable=no'
15574           Instructions must not access executable sections.  This
15575           option can be useful on targets that are configured to have a
15576           dual instruction/data SRAM interface but that (unlike the
15577           M4K) do not automatically redirect PC-relative loads to the
15578           instruction RAM.
15579
15580 `-msplit-addresses'
15581 `-mno-split-addresses'
15582      Enable (disable) use of the `%hi()' and `%lo()' assembler
15583      relocation operators.  This option has been superseded by
15584      `-mexplicit-relocs' but is retained for backwards compatibility.
15585
15586 `-mexplicit-relocs'
15587 `-mno-explicit-relocs'
15588      Use (do not use) assembler relocation operators when dealing with
15589      symbolic addresses.  The alternative, selected by
15590      `-mno-explicit-relocs', is to use assembler macros instead.
15591
15592      `-mexplicit-relocs' is the default if GCC was configured to use an
15593      assembler that supports relocation operators.
15594
15595 `-mcheck-zero-division'
15596 `-mno-check-zero-division'
15597      Trap (do not trap) on integer division by zero.
15598
15599      The default is `-mcheck-zero-division'.
15600
15601 `-mdivide-traps'
15602 `-mdivide-breaks'
15603      MIPS systems check for division by zero by generating either a
15604      conditional trap or a break instruction.  Using traps results in
15605      smaller code, but is only supported on MIPS II and later.  Also,
15606      some versions of the Linux kernel have a bug that prevents trap
15607      from generating the proper signal (`SIGFPE').  Use
15608      `-mdivide-traps' to allow conditional traps on architectures that
15609      support them and `-mdivide-breaks' to force the use of breaks.
15610
15611      The default is usually `-mdivide-traps', but this can be
15612      overridden at configure time using `--with-divide=breaks'.
15613      Divide-by-zero checks can be completely disabled using
15614      `-mno-check-zero-division'.
15615
15616 `-mmemcpy'
15617 `-mno-memcpy'
15618      Force (do not force) the use of `memcpy()' for non-trivial block
15619      moves.  The default is `-mno-memcpy', which allows GCC to inline
15620      most constant-sized copies.
15621
15622 `-mlong-calls'
15623 `-mno-long-calls'
15624      Disable (do not disable) use of the `jal' instruction.  Calling
15625      functions using `jal' is more efficient but requires the caller
15626      and callee to be in the same 256 megabyte segment.
15627
15628      This option has no effect on abicalls code.  The default is
15629      `-mno-long-calls'.
15630
15631 `-mmad'
15632 `-mno-mad'
15633      Enable (disable) use of the `mad', `madu' and `mul' instructions,
15634      as provided by the R4650 ISA.
15635
15636 `-mfused-madd'
15637 `-mno-fused-madd'
15638      Enable (disable) use of the floating-point multiply-accumulate
15639      instructions, when they are available.  The default is
15640      `-mfused-madd'.
15641
15642      On the R8000 CPU when multiply-accumulate instructions are used,
15643      the intermediate product is calculated to infinite precision and
15644      is not subject to the FCSR Flush to Zero bit.  This may be
15645      undesirable in some circumstances.  On other processors the result
15646      is numerically identical to the equivalent computation using
15647      separate multiply, add, subtract and negate instructions.
15648
15649 `-nocpp'
15650      Tell the MIPS assembler to not run its preprocessor over user
15651      assembler files (with a `.s' suffix) when assembling them.
15652
15653 `-mfix-24k'
15654
15655 `-mno-fix-24k'
15656      Work around the 24K E48 (lost data on stores during refill) errata.
15657      The workarounds are implemented by the assembler rather than by
15658      GCC.
15659
15660 `-mfix-r4000'
15661 `-mno-fix-r4000'
15662      Work around certain R4000 CPU errata:
15663         - A double-word or a variable shift may give an incorrect
15664           result if executed immediately after starting an integer
15665           division.
15666
15667         - A double-word or a variable shift may give an incorrect
15668           result if executed while an integer multiplication is in
15669           progress.
15670
15671         - An integer division may give an incorrect result if started
15672           in a delay slot of a taken branch or a jump.
15673
15674 `-mfix-r4400'
15675 `-mno-fix-r4400'
15676      Work around certain R4400 CPU errata:
15677         - A double-word or a variable shift may give an incorrect
15678           result if executed immediately after starting an integer
15679           division.
15680
15681 `-mfix-r10000'
15682 `-mno-fix-r10000'
15683      Work around certain R10000 errata:
15684         - `ll'/`sc' sequences may not behave atomically on revisions
15685           prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
15686
15687      This option can only be used if the target architecture supports
15688      branch-likely instructions.  `-mfix-r10000' is the default when
15689      `-march=r10000' is used; `-mno-fix-r10000' is the default
15690      otherwise.
15691
15692 `-mfix-vr4120'
15693 `-mno-fix-vr4120'
15694      Work around certain VR4120 errata:
15695         - `dmultu' does not always produce the correct result.
15696
15697         - `div' and `ddiv' do not always produce the correct result if
15698           one of the operands is negative.
15699      The workarounds for the division errata rely on special functions
15700      in `libgcc.a'.  At present, these functions are only provided by
15701      the `mips64vr*-elf' configurations.
15702
15703      Other VR4120 errata require a NOP to be inserted between certain
15704      pairs of instructions.  These errata are handled by the assembler,
15705      not by GCC itself.
15706
15707 `-mfix-vr4130'
15708      Work around the VR4130 `mflo'/`mfhi' errata.  The workarounds are
15709      implemented by the assembler rather than by GCC, although GCC
15710      avoids using `mflo' and `mfhi' if the VR4130 `macc', `macchi',
15711      `dmacc' and `dmacchi' instructions are available instead.
15712
15713 `-mfix-sb1'
15714 `-mno-fix-sb1'
15715      Work around certain SB-1 CPU core errata.  (This flag currently
15716      works around the SB-1 revision 2 "F1" and "F2" floating-point
15717      errata.)
15718
15719 `-mr10k-cache-barrier=SETTING'
15720      Specify whether GCC should insert cache barriers to avoid the
15721      side-effects of speculation on R10K processors.
15722
15723      In common with many processors, the R10K tries to predict the
15724      outcome of a conditional branch and speculatively executes
15725      instructions from the "taken" branch.  It later aborts these
15726      instructions if the predicted outcome is wrong.  However, on the
15727      R10K, even aborted instructions can have side effects.
15728
15729      This problem only affects kernel stores and, depending on the
15730      system, kernel loads.  As an example, a speculatively-executed
15731      store may load the target memory into cache and mark the cache
15732      line as dirty, even if the store itself is later aborted.  If a
15733      DMA operation writes to the same area of memory before the "dirty"
15734      line is flushed, the cached data overwrites the DMA-ed data.  See
15735      the R10K processor manual for a full description, including other
15736      potential problems.
15737
15738      One workaround is to insert cache barrier instructions before
15739      every memory access that might be speculatively executed and that
15740      might have side effects even if aborted.
15741      `-mr10k-cache-barrier=SETTING' controls GCC's implementation of
15742      this workaround.  It assumes that aborted accesses to any byte in
15743      the following regions does not have side effects:
15744
15745        1. the memory occupied by the current function's stack frame;
15746
15747        2. the memory occupied by an incoming stack argument;
15748
15749        3. the memory occupied by an object with a link-time-constant
15750           address.
15751
15752      It is the kernel's responsibility to ensure that speculative
15753      accesses to these regions are indeed safe.
15754
15755      If the input program contains a function declaration such as:
15756
15757           void foo (void);
15758
15759      then the implementation of `foo' must allow `j foo' and `jal foo'
15760      to be executed speculatively.  GCC honors this restriction for
15761      functions it compiles itself.  It expects non-GCC functions (such
15762      as hand-written assembly code) to do the same.
15763
15764      The option has three forms:
15765
15766     `-mr10k-cache-barrier=load-store'
15767           Insert a cache barrier before a load or store that might be
15768           speculatively executed and that might have side effects even
15769           if aborted.
15770
15771     `-mr10k-cache-barrier=store'
15772           Insert a cache barrier before a store that might be
15773           speculatively executed and that might have side effects even
15774           if aborted.
15775
15776     `-mr10k-cache-barrier=none'
15777           Disable the insertion of cache barriers.  This is the default
15778           setting.
15779
15780 `-mflush-func=FUNC'
15781 `-mno-flush-func'
15782      Specifies the function to call to flush the I and D caches, or to
15783      not call any such function.  If called, the function must take the
15784      same arguments as the common `_flush_func()', that is, the address
15785      of the memory range for which the cache is being flushed, the size
15786      of the memory range, and the number 3 (to flush both caches).  The
15787      default depends on the target GCC was configured for, but commonly
15788      is either `_flush_func' or `__cpu_flush'.
15789
15790 `mbranch-cost=NUM'
15791      Set the cost of branches to roughly NUM "simple" instructions.
15792      This cost is only a heuristic and is not guaranteed to produce
15793      consistent results across releases.  A zero cost redundantly
15794      selects the default, which is based on the `-mtune' setting.
15795
15796 `-mbranch-likely'
15797 `-mno-branch-likely'
15798      Enable or disable use of Branch Likely instructions, regardless of
15799      the default for the selected architecture.  By default, Branch
15800      Likely instructions may be generated if they are supported by the
15801      selected architecture.  An exception is for the MIPS32 and MIPS64
15802      architectures and processors that implement those architectures;
15803      for those, Branch Likely instructions are not be generated by
15804      default because the MIPS32 and MIPS64 architectures specifically
15805      deprecate their use.
15806
15807 `-mfp-exceptions'
15808 `-mno-fp-exceptions'
15809      Specifies whether FP exceptions are enabled.  This affects how FP
15810      instructions are scheduled for some processors.  The default is
15811      that FP exceptions are enabled.
15812
15813      For instance, on the SB-1, if FP exceptions are disabled, and we
15814      are emitting 64-bit code, then we can use both FP pipes.
15815      Otherwise, we can only use one FP pipe.
15816
15817 `-mvr4130-align'
15818 `-mno-vr4130-align'
15819      The VR4130 pipeline is two-way superscalar, but can only issue two
15820      instructions together if the first one is 8-byte aligned.  When
15821      this option is enabled, GCC aligns pairs of instructions that it
15822      thinks should execute in parallel.
15823
15824      This option only has an effect when optimizing for the VR4130.  It
15825      normally makes code faster, but at the expense of making it bigger.
15826      It is enabled by default at optimization level `-O3'.
15827
15828 `-msynci'
15829 `-mno-synci'
15830      Enable (disable) generation of `synci' instructions on
15831      architectures that support it.  The `synci' instructions (if
15832      enabled) are generated when `__builtin___clear_cache()' is
15833      compiled.
15834
15835      This option defaults to `-mno-synci', but the default can be
15836      overridden by configuring with `--with-synci'.
15837
15838      When compiling code for single processor systems, it is generally
15839      safe to use `synci'.  However, on many multi-core (SMP) systems, it
15840      does not invalidate the instruction caches on all cores and may
15841      lead to undefined behavior.
15842
15843 `-mrelax-pic-calls'
15844 `-mno-relax-pic-calls'
15845      Try to turn PIC calls that are normally dispatched via register
15846      `$25' into direct calls.  This is only possible if the linker can
15847      resolve the destination at link-time and if the destination is
15848      within range for a direct call.
15849
15850      `-mrelax-pic-calls' is the default if GCC was configured to use an
15851      assembler and a linker that support the `.reloc' assembly
15852      directive and `-mexplicit-relocs' is in effect.  With
15853      `-mno-explicit-relocs', this optimization can be performed by the
15854      assembler and the linker alone without help from the compiler.
15855
15856 `-mmcount-ra-address'
15857 `-mno-mcount-ra-address'
15858      Emit (do not emit) code that allows `_mcount' to modify the
15859      calling function's return address.  When enabled, this option
15860      extends the usual `_mcount' interface with a new RA-ADDRESS
15861      parameter, which has type `intptr_t *' and is passed in register
15862      `$12'.  `_mcount' can then modify the return address by doing both
15863      of the following:
15864         * Returning the new address in register `$31'.
15865
15866         * Storing the new address in `*RA-ADDRESS', if RA-ADDRESS is
15867           nonnull.
15868
15869      The default is `-mno-mcount-ra-address'.
15870
15871
15872 \1f
15873 File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
15874
15875 3.17.27 MMIX Options
15876 --------------------
15877
15878 These options are defined for the MMIX:
15879
15880 `-mlibfuncs'
15881 `-mno-libfuncs'
15882      Specify that intrinsic library functions are being compiled,
15883      passing all values in registers, no matter the size.
15884
15885 `-mepsilon'
15886 `-mno-epsilon'
15887      Generate floating-point comparison instructions that compare with
15888      respect to the `rE' epsilon register.
15889
15890 `-mabi=mmixware'
15891 `-mabi=gnu'
15892      Generate code that passes function parameters and return values
15893      that (in the called function) are seen as registers `$0' and up,
15894      as opposed to the GNU ABI which uses global registers `$231' and
15895      up.
15896
15897 `-mzero-extend'
15898 `-mno-zero-extend'
15899      When reading data from memory in sizes shorter than 64 bits, use
15900      (do not use) zero-extending load instructions by default, rather
15901      than sign-extending ones.
15902
15903 `-mknuthdiv'
15904 `-mno-knuthdiv'
15905      Make the result of a division yielding a remainder have the same
15906      sign as the divisor.  With the default, `-mno-knuthdiv', the sign
15907      of the remainder follows the sign of the dividend.  Both methods
15908      are arithmetically valid, the latter being almost exclusively used.
15909
15910 `-mtoplevel-symbols'
15911 `-mno-toplevel-symbols'
15912      Prepend (do not prepend) a `:' to all global symbols, so the
15913      assembly code can be used with the `PREFIX' assembly directive.
15914
15915 `-melf'
15916      Generate an executable in the ELF format, rather than the default
15917      `mmo' format used by the `mmix' simulator.
15918
15919 `-mbranch-predict'
15920 `-mno-branch-predict'
15921      Use (do not use) the probable-branch instructions, when static
15922      branch prediction indicates a probable branch.
15923
15924 `-mbase-addresses'
15925 `-mno-base-addresses'
15926      Generate (do not generate) code that uses _base addresses_.  Using
15927      a base address automatically generates a request (handled by the
15928      assembler and the linker) for a constant to be set up in a global
15929      register.  The register is used for one or more base address
15930      requests within the range 0 to 255 from the value held in the
15931      register.  The generally leads to short and fast code, but the
15932      number of different data items that can be addressed is limited.
15933      This means that a program that uses lots of static data may
15934      require `-mno-base-addresses'.
15935
15936 `-msingle-exit'
15937 `-mno-single-exit'
15938      Force (do not force) generated code to have a single exit point in
15939      each function.
15940
15941 \1f
15942 File: gcc.info,  Node: MN10300 Options,  Next: Moxie Options,  Prev: MMIX Options,  Up: Submodel Options
15943
15944 3.17.28 MN10300 Options
15945 -----------------------
15946
15947 These `-m' options are defined for Matsushita MN10300 architectures:
15948
15949 `-mmult-bug'
15950      Generate code to avoid bugs in the multiply instructions for the
15951      MN10300 processors.  This is the default.
15952
15953 `-mno-mult-bug'
15954      Do not generate code to avoid bugs in the multiply instructions
15955      for the MN10300 processors.
15956
15957 `-mam33'
15958      Generate code using features specific to the AM33 processor.
15959
15960 `-mno-am33'
15961      Do not generate code using features specific to the AM33
15962      processor.  This is the default.
15963
15964 `-mam33-2'
15965      Generate code using features specific to the AM33/2.0 processor.
15966
15967 `-mam34'
15968      Generate code using features specific to the AM34 processor.
15969
15970 `-mtune=CPU-TYPE'
15971      Use the timing characteristics of the indicated CPU type when
15972      scheduling instructions.  This does not change the targeted
15973      processor type.  The CPU type must be one of `mn10300', `am33',
15974      `am33-2' or `am34'.
15975
15976 `-mreturn-pointer-on-d0'
15977      When generating a function that returns a pointer, return the
15978      pointer in both `a0' and `d0'.  Otherwise, the pointer is returned
15979      only in `a0', and attempts to call such functions without a
15980      prototype result in errors.  Note that this option is on by
15981      default; use `-mno-return-pointer-on-d0' to disable it.
15982
15983 `-mno-crt0'
15984      Do not link in the C run-time initialization object file.
15985
15986 `-mrelax'
15987      Indicate to the linker that it should perform a relaxation
15988      optimization pass to shorten branches, calls and absolute memory
15989      addresses.  This option only has an effect when used on the
15990      command line for the final link step.
15991
15992      This option makes symbolic debugging impossible.
15993
15994 `-mliw'
15995      Allow the compiler to generate _Long Instruction Word_
15996      instructions if the target is the `AM33' or later.  This is the
15997      default.  This option defines the preprocessor macro `__LIW__'.
15998
15999 `-mnoliw'
16000      Do not allow the compiler to generate _Long Instruction Word_
16001      instructions.  This option defines the preprocessor macro
16002      `__NO_LIW__'.
16003
16004 `-msetlb'
16005      Allow the compiler to generate the _SETLB_ and _Lcc_ instructions
16006      if the target is the `AM33' or later.  This is the default.  This
16007      option defines the preprocessor macro `__SETLB__'.
16008
16009 `-mnosetlb'
16010      Do not allow the compiler to generate _SETLB_ or _Lcc_
16011      instructions.  This option defines the preprocessor macro
16012      `__NO_SETLB__'.
16013
16014
16015 \1f
16016 File: gcc.info,  Node: Moxie Options,  Next: PDP-11 Options,  Prev: MN10300 Options,  Up: Submodel Options
16017
16018 3.17.29 Moxie Options
16019 ---------------------
16020
16021 `-meb'
16022      Generate big-endian code.  This is the default for `moxie-*-*'
16023      configurations.
16024
16025 `-mel'
16026      Generate little-endian code.
16027
16028 `-mno-crt0'
16029      Do not link in the C run-time initialization object file.
16030
16031
16032 \1f
16033 File: gcc.info,  Node: PDP-11 Options,  Next: picoChip Options,  Prev: Moxie Options,  Up: Submodel Options
16034
16035 3.17.30 PDP-11 Options
16036 ----------------------
16037
16038 These options are defined for the PDP-11:
16039
16040 `-mfpu'
16041      Use hardware FPP floating point.  This is the default.  (FIS
16042      floating point on the PDP-11/40 is not supported.)
16043
16044 `-msoft-float'
16045      Do not use hardware floating point.
16046
16047 `-mac0'
16048      Return floating-point results in ac0 (fr0 in Unix assembler
16049      syntax).
16050
16051 `-mno-ac0'
16052      Return floating-point results in memory.  This is the default.
16053
16054 `-m40'
16055      Generate code for a PDP-11/40.
16056
16057 `-m45'
16058      Generate code for a PDP-11/45.  This is the default.
16059
16060 `-m10'
16061      Generate code for a PDP-11/10.
16062
16063 `-mbcopy-builtin'
16064      Use inline `movmemhi' patterns for copying memory.  This is the
16065      default.
16066
16067 `-mbcopy'
16068      Do not use inline `movmemhi' patterns for copying memory.
16069
16070 `-mint16'
16071 `-mno-int32'
16072      Use 16-bit `int'.  This is the default.
16073
16074 `-mint32'
16075 `-mno-int16'
16076      Use 32-bit `int'.
16077
16078 `-mfloat64'
16079 `-mno-float32'
16080      Use 64-bit `float'.  This is the default.
16081
16082 `-mfloat32'
16083 `-mno-float64'
16084      Use 32-bit `float'.
16085
16086 `-mabshi'
16087      Use `abshi2' pattern.  This is the default.
16088
16089 `-mno-abshi'
16090      Do not use `abshi2' pattern.
16091
16092 `-mbranch-expensive'
16093      Pretend that branches are expensive.  This is for experimenting
16094      with code generation only.
16095
16096 `-mbranch-cheap'
16097      Do not pretend that branches are expensive.  This is the default.
16098
16099 `-munix-asm'
16100      Use Unix assembler syntax.  This is the default when configured for
16101      `pdp11-*-bsd'.
16102
16103 `-mdec-asm'
16104      Use DEC assembler syntax.  This is the default when configured for
16105      any PDP-11 target other than `pdp11-*-bsd'.
16106
16107 \1f
16108 File: gcc.info,  Node: picoChip Options,  Next: PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options
16109
16110 3.17.31 picoChip Options
16111 ------------------------
16112
16113 These `-m' options are defined for picoChip implementations:
16114
16115 `-mae=AE_TYPE'
16116      Set the instruction set, register set, and instruction scheduling
16117      parameters for array element type AE_TYPE.  Supported values for
16118      AE_TYPE are `ANY', `MUL', and `MAC'.
16119
16120      `-mae=ANY' selects a completely generic AE type.  Code generated
16121      with this option runs on any of the other AE types.  The code is
16122      not as efficient as it would be if compiled for a specific AE
16123      type, and some types of operation (e.g., multiplication) do not
16124      work properly on all types of AE.
16125
16126      `-mae=MUL' selects a MUL AE type.  This is the most useful AE type
16127      for compiled code, and is the default.
16128
16129      `-mae=MAC' selects a DSP-style MAC AE.  Code compiled with this
16130      option may suffer from poor performance of byte (char)
16131      manipulation, since the DSP AE does not provide hardware support
16132      for byte load/stores.
16133
16134 `-msymbol-as-address'
16135      Enable the compiler to directly use a symbol name as an address in
16136      a load/store instruction, without first loading it into a
16137      register.  Typically, the use of this option generates larger
16138      programs, which run faster than when the option isn't used.
16139      However, the results vary from program to program, so it is left
16140      as a user option, rather than being permanently enabled.
16141
16142 `-mno-inefficient-warnings'
16143      Disables warnings about the generation of inefficient code.  These
16144      warnings can be generated, for example, when compiling code that
16145      performs byte-level memory operations on the MAC AE type.  The MAC
16146      AE has no hardware support for byte-level memory operations, so
16147      all byte load/stores must be synthesized from word load/store
16148      operations.  This is inefficient and a warning is generated to
16149      indicate that you should rewrite the code to avoid byte
16150      operations, or to target an AE type that has the necessary
16151      hardware support.  This option disables these warnings.
16152
16153
16154 \1f
16155 File: gcc.info,  Node: PowerPC Options,  Next: RL78 Options,  Prev: picoChip Options,  Up: Submodel Options
16156
16157 3.17.32 PowerPC Options
16158 -----------------------
16159
16160 These are listed under *Note RS/6000 and PowerPC Options::.
16161
16162 \1f
16163 File: gcc.info,  Node: RL78 Options,  Next: RS/6000 and PowerPC Options,  Prev: PowerPC Options,  Up: Submodel Options
16164
16165 3.17.33 RL78 Options
16166 --------------------
16167
16168 `-msim'
16169      Links in additional target libraries to support operation within a
16170      simulator.
16171
16172 `-mmul=none'
16173 `-mmul=g13'
16174 `-mmul=rl78'
16175      Specifies the type of hardware multiplication support to be used.
16176      The default is `none', which uses software multiplication
16177      functions.  The `g13' option is for the hardware multiply/divide
16178      peripheral only on the RL78/G13 targets.  The `rl78' option is for
16179      the standard hardware multiplication defined in the RL78 software
16180      manual.
16181
16182
16183 \1f
16184 File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: RX Options,  Prev: RL78 Options,  Up: Submodel Options
16185
16186 3.17.34 IBM RS/6000 and PowerPC Options
16187 ---------------------------------------
16188
16189 These `-m' options are defined for the IBM RS/6000 and PowerPC:
16190 `-mpowerpc-gpopt'
16191 `-mno-powerpc-gpopt'
16192 `-mpowerpc-gfxopt'
16193 `-mno-powerpc-gfxopt'
16194 `-mpowerpc64'
16195 `-mno-powerpc64'
16196 `-mmfcrf'
16197 `-mno-mfcrf'
16198 `-mpopcntb'
16199 `-mno-popcntb'
16200 `-mpopcntd'
16201 `-mno-popcntd'
16202 `-mfprnd'
16203 `-mno-fprnd'
16204 `-mcmpb'
16205 `-mno-cmpb'
16206 `-mmfpgpr'
16207 `-mno-mfpgpr'
16208 `-mhard-dfp'
16209 `-mno-hard-dfp'
16210      You use these options to specify which instructions are available
16211      on the processor you are using.  The default value of these
16212      options is determined when configuring GCC.  Specifying the
16213      `-mcpu=CPU_TYPE' overrides the specification of these options.  We
16214      recommend you use the `-mcpu=CPU_TYPE' option rather than the
16215      options listed above.
16216
16217      Specifying `-mpowerpc-gpopt' allows GCC to use the optional
16218      PowerPC architecture instructions in the General Purpose group,
16219      including floating-point square root.  Specifying
16220      `-mpowerpc-gfxopt' allows GCC to use the optional PowerPC
16221      architecture instructions in the Graphics group, including
16222      floating-point select.
16223
16224      The `-mmfcrf' option allows GCC to generate the move from
16225      condition register field instruction implemented on the POWER4
16226      processor and other processors that support the PowerPC V2.01
16227      architecture.  The `-mpopcntb' option allows GCC to generate the
16228      popcount and double-precision FP reciprocal estimate instruction
16229      implemented on the POWER5 processor and other processors that
16230      support the PowerPC V2.02 architecture.  The `-mpopcntd' option
16231      allows GCC to generate the popcount instruction implemented on the
16232      POWER7 processor and other processors that support the PowerPC
16233      V2.06 architecture.  The `-mfprnd' option allows GCC to generate
16234      the FP round to integer instructions implemented on the POWER5+
16235      processor and other processors that support the PowerPC V2.03
16236      architecture.  The `-mcmpb' option allows GCC to generate the
16237      compare bytes instruction implemented on the POWER6 processor and
16238      other processors that support the PowerPC V2.05 architecture.  The
16239      `-mmfpgpr' option allows GCC to generate the FP move to/from
16240      general-purpose register instructions implemented on the POWER6X
16241      processor and other processors that support the extended PowerPC
16242      V2.05 architecture.  The `-mhard-dfp' option allows GCC to
16243      generate the decimal floating-point instructions implemented on
16244      some POWER processors.
16245
16246      The `-mpowerpc64' option allows GCC to generate the additional
16247      64-bit instructions that are found in the full PowerPC64
16248      architecture and to treat GPRs as 64-bit, doubleword quantities.
16249      GCC defaults to `-mno-powerpc64'.
16250
16251 `-mcpu=CPU_TYPE'
16252      Set architecture type, register usage, and instruction scheduling
16253      parameters for machine type CPU_TYPE.  Supported values for
16254      CPU_TYPE are `401', `403', `405', `405fp', `440', `440fp', `464',
16255      `464fp', `476', `476fp', `505', `601', `602', `603', `603e',
16256      `604', `604e', `620', `630', `740', `7400', `7450', `750', `801',
16257      `821', `823', `860', `970', `8540', `a2', `e300c2', `e300c3',
16258      `e500mc', `e500mc64', `e5500', `e6500', `ec603e', `G3', `G4', `G5',
16259      `titan', `power3', `power4', `power5', `power5+', `power6',
16260      `power6x', `power7', `power8', `powerpc', `powerpc64', and `rs64'.
16261
16262      `-mcpu=powerpc', and `-mcpu=powerpc64' specify pure 32-bit PowerPC
16263      and 64-bit PowerPC architecture machine types, with an
16264      appropriate, generic processor model assumed for scheduling
16265      purposes.
16266
16267      The other options specify a specific processor.  Code generated
16268      under those options runs best on that processor, and may not run
16269      at all on others.
16270
16271      The `-mcpu' options automatically enable or disable the following
16272      options:
16273
16274           -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
16275           -mpopcntb -mpopcntd  -mpowerpc64
16276           -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float
16277           -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx
16278
16279      The particular options set for any particular CPU varies between
16280      compiler versions, depending on what setting seems to produce
16281      optimal code for that CPU; it doesn't necessarily reflect the
16282      actual hardware's capabilities.  If you wish to set an individual
16283      option to a particular value, you may specify it after the `-mcpu'
16284      option, like `-mcpu=970 -mno-altivec'.
16285
16286      On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled
16287      or disabled by the `-mcpu' option at present because AIX does not
16288      have full support for these options.  You may still enable or
16289      disable them individually if you're sure it'll work in your
16290      environment.
16291
16292 `-mtune=CPU_TYPE'
16293      Set the instruction scheduling parameters for machine type
16294      CPU_TYPE, but do not set the architecture type or register usage,
16295      as `-mcpu=CPU_TYPE' does.  The same values for CPU_TYPE are used
16296      for `-mtune' as for `-mcpu'.  If both are specified, the code
16297      generated uses the architecture and registers set by `-mcpu', but
16298      the scheduling parameters set by `-mtune'.
16299
16300 `-mcmodel=small'
16301      Generate PowerPC64 code for the small model: The TOC is limited to
16302      64k.
16303
16304 `-mcmodel=medium'
16305      Generate PowerPC64 code for the medium model: The TOC and other
16306      static data may be up to a total of 4G in size.
16307
16308 `-mcmodel=large'
16309      Generate PowerPC64 code for the large model: The TOC may be up to
16310      4G in size.  Other data and code is only limited by the 64-bit
16311      address space.
16312
16313 `-maltivec'
16314 `-mno-altivec'
16315      Generate code that uses (does not use) AltiVec instructions, and
16316      also enable the use of built-in functions that allow more direct
16317      access to the AltiVec instruction set.  You may also need to set
16318      `-mabi=altivec' to adjust the current ABI with AltiVec ABI
16319      enhancements.
16320
16321 `-mvrsave'
16322 `-mno-vrsave'
16323      Generate VRSAVE instructions when generating AltiVec code.
16324
16325 `-mgen-cell-microcode'
16326      Generate Cell microcode instructions.
16327
16328 `-mwarn-cell-microcode'
16329      Warn when a Cell microcode instruction is emitted.  An example of
16330      a Cell microcode instruction is a variable shift.
16331
16332 `-msecure-plt'
16333      Generate code that allows `ld' and `ld.so' to build executables
16334      and shared libraries with non-executable `.plt' and `.got'
16335      sections.  This is a PowerPC 32-bit SYSV ABI option.
16336
16337 `-mbss-plt'
16338      Generate code that uses a BSS `.plt' section that `ld.so' fills
16339      in, and requires `.plt' and `.got' sections that are both writable
16340      and executable.  This is a PowerPC 32-bit SYSV ABI option.
16341
16342 `-misel'
16343 `-mno-isel'
16344      This switch enables or disables the generation of ISEL
16345      instructions.
16346
16347 `-misel=YES/NO'
16348      This switch has been deprecated.  Use `-misel' and `-mno-isel'
16349      instead.
16350
16351 `-mspe'
16352 `-mno-spe'
16353      This switch enables or disables the generation of SPE simd
16354      instructions.
16355
16356 `-mpaired'
16357 `-mno-paired'
16358      This switch enables or disables the generation of PAIRED simd
16359      instructions.
16360
16361 `-mspe=YES/NO'
16362      This option has been deprecated.  Use `-mspe' and `-mno-spe'
16363      instead.
16364
16365 `-mvsx'
16366 `-mno-vsx'
16367      Generate code that uses (does not use) vector/scalar (VSX)
16368      instructions, and also enable the use of built-in functions that
16369      allow more direct access to the VSX instruction set.
16370
16371 `-mfloat-gprs=YES/SINGLE/DOUBLE/NO'
16372 `-mfloat-gprs'
16373      This switch enables or disables the generation of floating-point
16374      operations on the general-purpose registers for architectures that
16375      support it.
16376
16377      The argument YES or SINGLE enables the use of single-precision
16378      floating-point operations.
16379
16380      The argument DOUBLE enables the use of single and double-precision
16381      floating-point operations.
16382
16383      The argument NO disables floating-point operations on the
16384      general-purpose registers.
16385
16386      This option is currently only available on the MPC854x.
16387
16388 `-m32'
16389 `-m64'
16390      Generate code for 32-bit or 64-bit environments of Darwin and SVR4
16391      targets (including GNU/Linux).  The 32-bit environment sets int,
16392      long and pointer to 32 bits and generates code that runs on any
16393      PowerPC variant.  The 64-bit environment sets int to 32 bits and
16394      long and pointer to 64 bits, and generates code for PowerPC64, as
16395      for `-mpowerpc64'.
16396
16397 `-mfull-toc'
16398 `-mno-fp-in-toc'
16399 `-mno-sum-in-toc'
16400 `-mminimal-toc'
16401      Modify generation of the TOC (Table Of Contents), which is created
16402      for every executable file.  The `-mfull-toc' option is selected by
16403      default.  In that case, GCC allocates at least one TOC entry for
16404      each unique non-automatic variable reference in your program.  GCC
16405      also places floating-point constants in the TOC.  However, only
16406      16,384 entries are available in the TOC.
16407
16408      If you receive a linker error message that saying you have
16409      overflowed the available TOC space, you can reduce the amount of
16410      TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc'
16411      options.  `-mno-fp-in-toc' prevents GCC from putting floating-point
16412      constants in the TOC and `-mno-sum-in-toc' forces GCC to generate
16413      code to calculate the sum of an address and a constant at run time
16414      instead of putting that sum into the TOC.  You may specify one or
16415      both of these options.  Each causes GCC to produce very slightly
16416      slower and larger code at the expense of conserving TOC space.
16417
16418      If you still run out of space in the TOC even when you specify
16419      both of these options, specify `-mminimal-toc' instead.  This
16420      option causes GCC to make only one TOC entry for every file.  When
16421      you specify this option, GCC produces code that is slower and
16422      larger but which uses extremely little TOC space.  You may wish to
16423      use this option only on files that contain less
16424      frequently-executed code.
16425
16426 `-maix64'
16427 `-maix32'
16428      Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
16429      64-bit `long' type, and the infrastructure needed to support them.
16430      Specifying `-maix64' implies `-mpowerpc64', while `-maix32'
16431      disables the 64-bit ABI and implies `-mno-powerpc64'.  GCC
16432      defaults to `-maix32'.
16433
16434 `-mxl-compat'
16435 `-mno-xl-compat'
16436      Produce code that conforms more closely to IBM XL compiler
16437      semantics when using AIX-compatible ABI.  Pass floating-point
16438      arguments to prototyped functions beyond the register save area
16439      (RSA) on the stack in addition to argument FPRs.  Do not assume
16440      that most significant double in 128-bit long double value is
16441      properly rounded when comparing values and converting to double.
16442      Use XL symbol names for long double support routines.
16443
16444      The AIX calling convention was extended but not initially
16445      documented to handle an obscure K&R C case of calling a function
16446      that takes the address of its arguments with fewer arguments than
16447      declared.  IBM XL compilers access floating-point arguments that
16448      do not fit in the RSA from the stack when a subroutine is compiled
16449      without optimization.  Because always storing floating-point
16450      arguments on the stack is inefficient and rarely needed, this
16451      option is not enabled by default and only is necessary when
16452      calling subroutines compiled by IBM XL compilers without
16453      optimization.
16454
16455 `-mpe'
16456      Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
16457      application written to use message passing with special startup
16458      code to enable the application to run.  The system must have PE
16459      installed in the standard location (`/usr/lpp/ppe.poe/'), or the
16460      `specs' file must be overridden with the `-specs=' option to
16461      specify the appropriate directory location.  The Parallel
16462      Environment does not support threads, so the `-mpe' option and the
16463      `-pthread' option are incompatible.
16464
16465 `-malign-natural'
16466 `-malign-power'
16467      On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
16468      `-malign-natural' overrides the ABI-defined alignment of larger
16469      types, such as floating-point doubles, on their natural size-based
16470      boundary.  The option `-malign-power' instructs GCC to follow the
16471      ABI-specified alignment rules.  GCC defaults to the standard
16472      alignment defined in the ABI.
16473
16474      On 64-bit Darwin, natural alignment is the default, and
16475      `-malign-power' is not supported.
16476
16477 `-msoft-float'
16478 `-mhard-float'
16479      Generate code that does not use (uses) the floating-point register
16480      set.  Software floating-point emulation is provided if you use the
16481      `-msoft-float' option, and pass the option to GCC when linking.
16482
16483 `-msingle-float'
16484 `-mdouble-float'
16485      Generate code for single- or double-precision floating-point
16486      operations.  `-mdouble-float' implies `-msingle-float'.
16487
16488 `-msimple-fpu'
16489      Do not generate `sqrt' and `div' instructions for hardware
16490      floating-point unit.
16491
16492 `-mfpu=NAME'
16493      Specify type of floating-point unit.  Valid values for NAME are
16494      `sp_lite' (equivalent to `-msingle-float -msimple-fpu'), `dp_lite'
16495      (equivalent to `-mdouble-float -msimple-fpu'), `sp_full'
16496      (equivalent to `-msingle-float'), and `dp_full' (equivalent to
16497      `-mdouble-float').
16498
16499 `-mxilinx-fpu'
16500      Perform optimizations for the floating-point unit on Xilinx PPC
16501      405/440.
16502
16503 `-mmultiple'
16504 `-mno-multiple'
16505      Generate code that uses (does not use) the load multiple word
16506      instructions and the store multiple word instructions.  These
16507      instructions are generated by default on POWER systems, and not
16508      generated on PowerPC systems.  Do not use `-mmultiple' on
16509      little-endian PowerPC systems, since those instructions do not
16510      work when the processor is in little-endian mode.  The exceptions
16511      are PPC740 and PPC750 which permit these instructions in
16512      little-endian mode.
16513
16514 `-mstring'
16515 `-mno-string'
16516      Generate code that uses (does not use) the load string instructions
16517      and the store string word instructions to save multiple registers
16518      and do small block moves.  These instructions are generated by
16519      default on POWER systems, and not generated on PowerPC systems.
16520      Do not use `-mstring' on little-endian PowerPC systems, since those
16521      instructions do not work when the processor is in little-endian
16522      mode.  The exceptions are PPC740 and PPC750 which permit these
16523      instructions in little-endian mode.
16524
16525 `-mupdate'
16526 `-mno-update'
16527      Generate code that uses (does not use) the load or store
16528      instructions that update the base register to the address of the
16529      calculated memory location.  These instructions are generated by
16530      default.  If you use `-mno-update', there is a small window
16531      between the time that the stack pointer is updated and the address
16532      of the previous frame is stored, which means code that walks the
16533      stack frame across interrupts or signals may get corrupted data.
16534
16535 `-mavoid-indexed-addresses'
16536 `-mno-avoid-indexed-addresses'
16537      Generate code that tries to avoid (not avoid) the use of indexed
16538      load or store instructions. These instructions can incur a
16539      performance penalty on Power6 processors in certain situations,
16540      such as when stepping through large arrays that cross a 16M
16541      boundary.  This option is enabled by default when targeting Power6
16542      and disabled otherwise.
16543
16544 `-mfused-madd'
16545 `-mno-fused-madd'
16546      Generate code that uses (does not use) the floating-point multiply
16547      and accumulate instructions.  These instructions are generated by
16548      default if hardware floating point is used.  The machine-dependent
16549      `-mfused-madd' option is now mapped to the machine-independent
16550      `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to
16551      `-ffp-contract=off'.
16552
16553 `-mmulhw'
16554 `-mno-mulhw'
16555      Generate code that uses (does not use) the half-word multiply and
16556      multiply-accumulate instructions on the IBM 405, 440, 464 and 476
16557      processors.  These instructions are generated by default when
16558      targeting those processors.
16559
16560 `-mdlmzb'
16561 `-mno-dlmzb'
16562      Generate code that uses (does not use) the string-search `dlmzb'
16563      instruction on the IBM 405, 440, 464 and 476 processors.  This
16564      instruction is generated by default when targeting those
16565      processors.
16566
16567 `-mno-bit-align'
16568 `-mbit-align'
16569      On System V.4 and embedded PowerPC systems do not (do) force
16570      structures and unions that contain bit-fields to be aligned to the
16571      base type of the bit-field.
16572
16573      For example, by default a structure containing nothing but 8
16574      `unsigned' bit-fields of length 1 is aligned to a 4-byte boundary
16575      and has a size of 4 bytes.  By using `-mno-bit-align', the
16576      structure is aligned to a 1-byte boundary and is 1 byte in size.
16577
16578 `-mno-strict-align'
16579 `-mstrict-align'
16580      On System V.4 and embedded PowerPC systems do not (do) assume that
16581      unaligned memory references are handled by the system.
16582
16583 `-mrelocatable'
16584 `-mno-relocatable'
16585      Generate code that allows (does not allow) a static executable to
16586      be relocated to a different address at run time.  A simple embedded
16587      PowerPC system loader should relocate the entire contents of
16588      `.got2' and 4-byte locations listed in the `.fixup' section, a
16589      table of 32-bit addresses generated by this option.  For this to
16590      work, all objects linked together must be compiled with
16591      `-mrelocatable' or `-mrelocatable-lib'.  `-mrelocatable' code
16592      aligns the stack to an 8-byte boundary.
16593
16594 `-mrelocatable-lib'
16595 `-mno-relocatable-lib'
16596      Like `-mrelocatable', `-mrelocatable-lib' generates a `.fixup'
16597      section to allow static executables to be relocated at run time,
16598      but `-mrelocatable-lib' does not use the smaller stack alignment
16599      of `-mrelocatable'.  Objects compiled with `-mrelocatable-lib' may
16600      be linked with objects compiled with any combination of the
16601      `-mrelocatable' options.
16602
16603 `-mno-toc'
16604 `-mtoc'
16605      On System V.4 and embedded PowerPC systems do not (do) assume that
16606      register 2 contains a pointer to a global area pointing to the
16607      addresses used in the program.
16608
16609 `-mlittle'
16610 `-mlittle-endian'
16611      On System V.4 and embedded PowerPC systems compile code for the
16612      processor in little-endian mode.  The `-mlittle-endian' option is
16613      the same as `-mlittle'.
16614
16615 `-mbig'
16616 `-mbig-endian'
16617      On System V.4 and embedded PowerPC systems compile code for the
16618      processor in big-endian mode.  The `-mbig-endian' option is the
16619      same as `-mbig'.
16620
16621 `-mdynamic-no-pic'
16622      On Darwin and Mac OS X systems, compile code so that it is not
16623      relocatable, but that its external references are relocatable.  The
16624      resulting code is suitable for applications, but not shared
16625      libraries.
16626
16627 `-msingle-pic-base'
16628      Treat the register used for PIC addressing as read-only, rather
16629      than loading it in the prologue for each function.  The runtime
16630      system is responsible for initializing this register with an
16631      appropriate value before execution begins.
16632
16633 `-mprioritize-restricted-insns=PRIORITY'
16634      This option controls the priority that is assigned to
16635      dispatch-slot restricted instructions during the second scheduling
16636      pass.  The argument PRIORITY takes the value `0', `1', or `2' to
16637      assign no, highest, or second-highest (respectively) priority to
16638      dispatch-slot restricted instructions.
16639
16640 `-msched-costly-dep=DEPENDENCE_TYPE'
16641      This option controls which dependences are considered costly by
16642      the target during instruction scheduling.  The argument
16643      DEPENDENCE_TYPE takes one of the following values:
16644
16645     `no'
16646           No dependence is costly.
16647
16648     `all'
16649           All dependences are costly.
16650
16651     `true_store_to_load'
16652           A true dependence from store to load is costly.
16653
16654     `store_to_load'
16655           Any dependence from store to load is costly.
16656
16657     NUMBER
16658           Any dependence for which the latency is greater than or equal
16659           to NUMBER is costly.
16660
16661 `-minsert-sched-nops=SCHEME'
16662      This option controls which NOP insertion scheme is used during the
16663      second scheduling pass.  The argument SCHEME takes one of the
16664      following values:
16665
16666     `no'
16667           Don't insert NOPs.
16668
16669     `pad'
16670           Pad with NOPs any dispatch group that has vacant issue slots,
16671           according to the scheduler's grouping.
16672
16673     `regroup_exact'
16674           Insert NOPs to force costly dependent insns into separate
16675           groups.  Insert exactly as many NOPs as needed to force an
16676           insn to a new group, according to the estimated processor
16677           grouping.
16678
16679     NUMBER
16680           Insert NOPs to force costly dependent insns into separate
16681           groups.  Insert NUMBER NOPs to force an insn to a new group.
16682
16683 `-mcall-sysv'
16684      On System V.4 and embedded PowerPC systems compile code using
16685      calling conventions that adhere to the March 1995 draft of the
16686      System V Application Binary Interface, PowerPC processor
16687      supplement.  This is the default unless you configured GCC using
16688      `powerpc-*-eabiaix'.
16689
16690 `-mcall-sysv-eabi'
16691 `-mcall-eabi'
16692      Specify both `-mcall-sysv' and `-meabi' options.
16693
16694 `-mcall-sysv-noeabi'
16695      Specify both `-mcall-sysv' and `-mno-eabi' options.
16696
16697 `-mcall-aixdesc'
16698      On System V.4 and embedded PowerPC systems compile code for the AIX
16699      operating system.
16700
16701 `-mcall-linux'
16702      On System V.4 and embedded PowerPC systems compile code for the
16703      Linux-based GNU system.
16704
16705 `-mcall-freebsd'
16706      On System V.4 and embedded PowerPC systems compile code for the
16707      FreeBSD operating system.
16708
16709 `-mcall-netbsd'
16710      On System V.4 and embedded PowerPC systems compile code for the
16711      NetBSD operating system.
16712
16713 `-mcall-openbsd'
16714      On System V.4 and embedded PowerPC systems compile code for the
16715      OpenBSD operating system.
16716
16717 `-maix-struct-return'
16718      Return all structures in memory (as specified by the AIX ABI).
16719
16720 `-msvr4-struct-return'
16721      Return structures smaller than 8 bytes in registers (as specified
16722      by the SVR4 ABI).
16723
16724 `-mabi=ABI-TYPE'
16725      Extend the current ABI with a particular extension, or remove such
16726      extension.  Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE,
16727      IBMLONGDOUBLE, IEEELONGDOUBLE.
16728
16729 `-mabi=spe'
16730      Extend the current ABI with SPE ABI extensions.  This does not
16731      change the default ABI, instead it adds the SPE ABI extensions to
16732      the current ABI.
16733
16734 `-mabi=no-spe'
16735      Disable Book-E SPE ABI extensions for the current ABI.
16736
16737 `-mabi=ibmlongdouble'
16738      Change the current ABI to use IBM extended-precision long double.
16739      This is a PowerPC 32-bit SYSV ABI option.
16740
16741 `-mabi=ieeelongdouble'
16742      Change the current ABI to use IEEE extended-precision long double.
16743      This is a PowerPC 32-bit Linux ABI option.
16744
16745 `-mprototype'
16746 `-mno-prototype'
16747      On System V.4 and embedded PowerPC systems assume that all calls to
16748      variable argument functions are properly prototyped.  Otherwise,
16749      the compiler must insert an instruction before every
16750      non-prototyped call to set or clear bit 6 of the condition code
16751      register (CR) to indicate whether floating-point values are passed
16752      in the floating-point registers in case the function takes
16753      variable arguments.  With `-mprototype', only calls to prototyped
16754      variable argument functions set or clear the bit.
16755
16756 `-msim'
16757      On embedded PowerPC systems, assume that the startup module is
16758      called `sim-crt0.o' and that the standard C libraries are
16759      `libsim.a' and `libc.a'.  This is the default for
16760      `powerpc-*-eabisim' configurations.
16761
16762 `-mmvme'
16763      On embedded PowerPC systems, assume that the startup module is
16764      called `crt0.o' and the standard C libraries are `libmvme.a' and
16765      `libc.a'.
16766
16767 `-mads'
16768      On embedded PowerPC systems, assume that the startup module is
16769      called `crt0.o' and the standard C libraries are `libads.a' and
16770      `libc.a'.
16771
16772 `-myellowknife'
16773      On embedded PowerPC systems, assume that the startup module is
16774      called `crt0.o' and the standard C libraries are `libyk.a' and
16775      `libc.a'.
16776
16777 `-mvxworks'
16778      On System V.4 and embedded PowerPC systems, specify that you are
16779      compiling for a VxWorks system.
16780
16781 `-memb'
16782      On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
16783      header to indicate that `eabi' extended relocations are used.
16784
16785 `-meabi'
16786 `-mno-eabi'
16787      On System V.4 and embedded PowerPC systems do (do not) adhere to
16788      the Embedded Applications Binary Interface (EABI), which is a set
16789      of modifications to the System V.4 specifications.  Selecting
16790      `-meabi' means that the stack is aligned to an 8-byte boundary, a
16791      function `__eabi' is called from `main' to set up the EABI
16792      environment, and the `-msdata' option can use both `r2' and `r13'
16793      to point to two separate small data areas.  Selecting `-mno-eabi'
16794      means that the stack is aligned to a 16-byte boundary, no EABI
16795      initialization function is called from `main', and the `-msdata'
16796      option only uses `r13' to point to a single small data area.  The
16797      `-meabi' option is on by default if you configured GCC using one
16798      of the `powerpc*-*-eabi*' options.
16799
16800 `-msdata=eabi'
16801      On System V.4 and embedded PowerPC systems, put small initialized
16802      `const' global and static data in the `.sdata2' section, which is
16803      pointed to by register `r2'.  Put small initialized non-`const'
16804      global and static data in the `.sdata' section, which is pointed
16805      to by register `r13'.  Put small uninitialized global and static
16806      data in the `.sbss' section, which is adjacent to the `.sdata'
16807      section.  The `-msdata=eabi' option is incompatible with the
16808      `-mrelocatable' option.  The `-msdata=eabi' option also sets the
16809      `-memb' option.
16810
16811 `-msdata=sysv'
16812      On System V.4 and embedded PowerPC systems, put small global and
16813      static data in the `.sdata' section, which is pointed to by
16814      register `r13'.  Put small uninitialized global and static data in
16815      the `.sbss' section, which is adjacent to the `.sdata' section.
16816      The `-msdata=sysv' option is incompatible with the `-mrelocatable'
16817      option.
16818
16819 `-msdata=default'
16820 `-msdata'
16821      On System V.4 and embedded PowerPC systems, if `-meabi' is used,
16822      compile code the same as `-msdata=eabi', otherwise compile code the
16823      same as `-msdata=sysv'.
16824
16825 `-msdata=data'
16826      On System V.4 and embedded PowerPC systems, put small global data
16827      in the `.sdata' section.  Put small uninitialized global data in
16828      the `.sbss' section.  Do not use register `r13' to address small
16829      data however.  This is the default behavior unless other `-msdata'
16830      options are used.
16831
16832 `-msdata=none'
16833 `-mno-sdata'
16834      On embedded PowerPC systems, put all initialized global and static
16835      data in the `.data' section, and all uninitialized data in the
16836      `.bss' section.
16837
16838 `-mblock-move-inline-limit=NUM'
16839      Inline all block moves (such as calls to `memcpy' or structure
16840      copies) less than or equal to NUM bytes.  The minimum value for
16841      NUM is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.
16842      The default value is target-specific.
16843
16844 `-G NUM'
16845      On embedded PowerPC systems, put global and static items less than
16846      or equal to NUM bytes into the small data or BSS sections instead
16847      of the normal data or BSS section.  By default, NUM is 8.  The `-G
16848      NUM' switch is also passed to the linker.  All modules should be
16849      compiled with the same `-G NUM' value.
16850
16851 `-mregnames'
16852 `-mno-regnames'
16853      On System V.4 and embedded PowerPC systems do (do not) emit
16854      register names in the assembly language output using symbolic
16855      forms.
16856
16857 `-mlongcall'
16858 `-mno-longcall'
16859      By default assume that all calls are far away so that a longer and
16860      more expensive calling sequence is required.  This is required for
16861      calls farther than 32 megabytes (33,554,432 bytes) from the
16862      current location.  A short call is generated if the compiler knows
16863      the call cannot be that far away.  This setting can be overridden
16864      by the `shortcall' function attribute, or by `#pragma longcall(0)'.
16865
16866      Some linkers are capable of detecting out-of-range calls and
16867      generating glue code on the fly.  On these systems, long calls are
16868      unnecessary and generate slower code.  As of this writing, the AIX
16869      linker can do this, as can the GNU linker for PowerPC/64.  It is
16870      planned to add this feature to the GNU linker for 32-bit PowerPC
16871      systems as well.
16872
16873      On Darwin/PPC systems, `#pragma longcall' generates `jbsr callee,
16874      L42', plus a "branch island" (glue code).  The two target
16875      addresses represent the callee and the branch island.  The
16876      Darwin/PPC linker prefers the first address and generates a `bl
16877      callee' if the PPC `bl' instruction reaches the callee directly;
16878      otherwise, the linker generates `bl L42' to call the branch
16879      island.  The branch island is appended to the body of the calling
16880      function; it computes the full 32-bit address of the callee and
16881      jumps to it.
16882
16883      On Mach-O (Darwin) systems, this option directs the compiler emit
16884      to the glue for every direct call, and the Darwin linker decides
16885      whether to use or discard it.
16886
16887      In the future, GCC may ignore all longcall specifications when the
16888      linker is known to generate glue.
16889
16890 `-mtls-markers'
16891 `-mno-tls-markers'
16892      Mark (do not mark) calls to `__tls_get_addr' with a relocation
16893      specifying the function argument.  The relocation allows the
16894      linker to reliably associate function call with argument setup
16895      instructions for TLS optimization, which in turn allows GCC to
16896      better schedule the sequence.
16897
16898 `-pthread'
16899      Adds support for multithreading with the "pthreads" library.  This
16900      option sets flags for both the preprocessor and linker.
16901
16902 `-mrecip'
16903 `-mno-recip'
16904      This option enables use of the reciprocal estimate and reciprocal
16905      square root estimate instructions with additional Newton-Raphson
16906      steps to increase precision instead of doing a divide or square
16907      root and divide for floating-point arguments.  You should use the
16908      `-ffast-math' option when using `-mrecip' (or at least
16909      `-funsafe-math-optimizations', `-finite-math-only',
16910      `-freciprocal-math' and `-fno-trapping-math').  Note that while
16911      the throughput of the sequence is generally higher than the
16912      throughput of the non-reciprocal instruction, the precision of the
16913      sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0
16914      equals 0.99999994) for reciprocal square roots.
16915
16916 `-mrecip=OPT'
16917      This option controls which reciprocal estimate instructions may be
16918      used.  OPT is a comma-separated list of options, which may be
16919      preceded by a `!' to invert the option: `all': enable all estimate
16920      instructions, `default': enable the default instructions,
16921      equivalent to `-mrecip', `none': disable all estimate
16922      instructions, equivalent to `-mno-recip'; `div': enable the
16923      reciprocal approximation instructions for both single and double
16924      precision; `divf': enable the single-precision reciprocal
16925      approximation instructions; `divd': enable the double-precision
16926      reciprocal approximation instructions; `rsqrt': enable the
16927      reciprocal square root approximation instructions for both single
16928      and double precision; `rsqrtf': enable the single-precision
16929      reciprocal square root approximation instructions; `rsqrtd':
16930      enable the double-precision reciprocal square root approximation
16931      instructions;
16932
16933      So, for example, `-mrecip=all,!rsqrtd' enables all of the
16934      reciprocal estimate instructions, except for the `FRSQRTE',
16935      `XSRSQRTEDP', and `XVRSQRTEDP' instructions which handle the
16936      double-precision reciprocal square root calculations.
16937
16938 `-mrecip-precision'
16939 `-mno-recip-precision'
16940      Assume (do not assume) that the reciprocal estimate instructions
16941      provide higher-precision estimates than is mandated by the PowerPC
16942      ABI.  Selecting `-mcpu=power6', `-mcpu=power7' or `-mcpu=power8'
16943      automatically selects `-mrecip-precision'.  The double-precision
16944      square root estimate instructions are not generated by default on
16945      low-precision machines, since they do not provide an estimate that
16946      converges after three steps.
16947
16948 `-mveclibabi=TYPE'
16949      Specifies the ABI type to use for vectorizing intrinsics using an
16950      external library.  The only type supported at present is `mass',
16951      which specifies to use IBM's Mathematical Acceleration Subsystem
16952      (MASS) libraries for vectorizing intrinsics using external
16953      libraries.  GCC currently emits calls to `acosd2', `acosf4',
16954      `acoshd2', `acoshf4', `asind2', `asinf4', `asinhd2', `asinhf4',
16955      `atan2d2', `atan2f4', `atand2', `atanf4', `atanhd2', `atanhf4',
16956      `cbrtd2', `cbrtf4', `cosd2', `cosf4', `coshd2', `coshf4',
16957      `erfcd2', `erfcf4', `erfd2', `erff4', `exp2d2', `exp2f4', `expd2',
16958      `expf4', `expm1d2', `expm1f4', `hypotd2', `hypotf4', `lgammad2',
16959      `lgammaf4', `log10d2', `log10f4', `log1pd2', `log1pf4', `log2d2',
16960      `log2f4', `logd2', `logf4', `powd2', `powf4', `sind2', `sinf4',
16961      `sinhd2', `sinhf4', `sqrtd2', `sqrtf4', `tand2', `tanf4',
16962      `tanhd2', and `tanhf4' when generating code for power7.  Both
16963      `-ftree-vectorize' and `-funsafe-math-optimizations' must also be
16964      enabled.  The MASS libraries must be specified at link time.
16965
16966 `-mfriz'
16967 `-mno-friz'
16968      Generate (do not generate) the `friz' instruction when the
16969      `-funsafe-math-optimizations' option is used to optimize rounding
16970      of floating-point values to 64-bit integer and back to floating
16971      point.  The `friz' instruction does not return the same value if
16972      the floating-point number is too large to fit in an integer.
16973
16974 `-mpointers-to-nested-functions'
16975 `-mno-pointers-to-nested-functions'
16976      Generate (do not generate) code to load up the static chain
16977      register (R11) when calling through a pointer on AIX and 64-bit
16978      Linux systems where a function pointer points to a 3-word
16979      descriptor giving the function address, TOC value to be loaded in
16980      register R2, and static chain value to be loaded in register R11.
16981      The `-mpointers-to-nested-functions' is on by default.  You cannot
16982      call through pointers to nested functions or pointers to functions
16983      compiled in other languages that use the static chain if you use
16984      the `-mno-pointers-to-nested-functions'.
16985
16986 `-msave-toc-indirect'
16987 `-mno-save-toc-indirect'
16988      Generate (do not generate) code to save the TOC value in the
16989      reserved stack location in the function prologue if the function
16990      calls through a pointer on AIX and 64-bit Linux systems.  If the
16991      TOC value is not saved in the prologue, it is saved just before
16992      the call through the pointer.  The `-mno-save-toc-indirect' option
16993      is the default.
16994
16995 \1f
16996 File: gcc.info,  Node: RX Options,  Next: S/390 and zSeries Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
16997
16998 3.17.35 RX Options
16999 ------------------
17000
17001 These command-line options are defined for RX targets:
17002
17003 `-m64bit-doubles'
17004 `-m32bit-doubles'
17005      Make the `double' data type be 64 bits (`-m64bit-doubles') or 32
17006      bits (`-m32bit-doubles') in size.  The default is
17007      `-m32bit-doubles'.  _Note_ RX floating-point hardware only works
17008      on 32-bit values, which is why the default is `-m32bit-doubles'.
17009
17010 `-fpu'
17011 `-nofpu'
17012      Enables (`-fpu') or disables (`-nofpu') the use of RX
17013      floating-point hardware.  The default is enabled for the RX600
17014      series and disabled for the RX200 series.
17015
17016      Floating-point instructions are only generated for 32-bit
17017      floating-point values, however, so the FPU hardware is not used
17018      for doubles if the `-m64bit-doubles' option is used.
17019
17020      _Note_ If the `-fpu' option is enabled then
17021      `-funsafe-math-optimizations' is also enabled automatically.  This
17022      is because the RX FPU instructions are themselves unsafe.
17023
17024 `-mcpu=NAME'
17025      Selects the type of RX CPU to be targeted.  Currently three types
17026      are supported, the generic RX600 and RX200 series hardware and the
17027      specific RX610 CPU.  The default is RX600.
17028
17029      The only difference between RX600 and RX610 is that the RX610 does
17030      not support the `MVTIPL' instruction.
17031
17032      The RX200 series does not have a hardware floating-point unit and
17033      so `-nofpu' is enabled by default when this type is selected.
17034
17035 `-mbig-endian-data'
17036 `-mlittle-endian-data'
17037      Store data (but not code) in the big-endian format.  The default is
17038      `-mlittle-endian-data', i.e. to store data in the little-endian
17039      format.
17040
17041 `-msmall-data-limit=N'
17042      Specifies the maximum size in bytes of global and static variables
17043      which can be placed into the small data area.  Using the small data
17044      area can lead to smaller and faster code, but the size of area is
17045      limited and it is up to the programmer to ensure that the area does
17046      not overflow.  Also when the small data area is used one of the
17047      RX's registers (usually `r13') is reserved for use pointing to this
17048      area, so it is no longer available for use by the compiler.  This
17049      could result in slower and/or larger code if variables are pushed
17050      onto the stack instead of being held in this register.
17051
17052      Note, common variables (variables that have not been initialized)
17053      and constants are not placed into the small data area as they are
17054      assigned to other sections in the output executable.
17055
17056      The default value is zero, which disables this feature.  Note, this
17057      feature is not enabled by default with higher optimization levels
17058      (`-O2' etc) because of the potentially detrimental effects of
17059      reserving a register.  It is up to the programmer to experiment and
17060      discover whether this feature is of benefit to their program.  See
17061      the description of the `-mpid' option for a description of how the
17062      actual register to hold the small data area pointer is chosen.
17063
17064 `-msim'
17065 `-mno-sim'
17066      Use the simulator runtime.  The default is to use the libgloss
17067      board-specific runtime.
17068
17069 `-mas100-syntax'
17070 `-mno-as100-syntax'
17071      When generating assembler output use a syntax that is compatible
17072      with Renesas's AS100 assembler.  This syntax can also be handled
17073      by the GAS assembler, but it has some restrictions so it is not
17074      generated by default.
17075
17076 `-mmax-constant-size=N'
17077      Specifies the maximum size, in bytes, of a constant that can be
17078      used as an operand in a RX instruction.  Although the RX
17079      instruction set does allow constants of up to 4 bytes in length to
17080      be used in instructions, a longer value equates to a longer
17081      instruction.  Thus in some circumstances it can be beneficial to
17082      restrict the size of constants that are used in instructions.
17083      Constants that are too big are instead placed into a constant pool
17084      and referenced via register indirection.
17085
17086      The value N can be between 0 and 4.  A value of 0 (the default) or
17087      4 means that constants of any size are allowed.
17088
17089 `-mrelax'
17090      Enable linker relaxation.  Linker relaxation is a process whereby
17091      the linker attempts to reduce the size of a program by finding
17092      shorter versions of various instructions.  Disabled by default.
17093
17094 `-mint-register=N'
17095      Specify the number of registers to reserve for fast interrupt
17096      handler functions.  The value N can be between 0 and 4.  A value
17097      of 1 means that register `r13' is reserved for the exclusive use
17098      of fast interrupt handlers.  A value of 2 reserves `r13' and
17099      `r12'.  A value of 3 reserves `r13', `r12' and `r11', and a value
17100      of 4 reserves `r13' through `r10'.  A value of 0, the default,
17101      does not reserve any registers.
17102
17103 `-msave-acc-in-interrupts'
17104      Specifies that interrupt handler functions should preserve the
17105      accumulator register.  This is only necessary if normal code might
17106      use the accumulator register, for example because it performs
17107      64-bit multiplications.  The default is to ignore the accumulator
17108      as this makes the interrupt handlers faster.
17109
17110 `-mpid'
17111 `-mno-pid'
17112      Enables the generation of position independent data.  When enabled
17113      any access to constant data is done via an offset from a base
17114      address held in a register.  This allows the location of constant
17115      data to be determined at run time without requiring the executable
17116      to be relocated, which is a benefit to embedded applications with
17117      tight memory constraints.  Data that can be modified is not
17118      affected by this option.
17119
17120      Note, using this feature reserves a register, usually `r13', for
17121      the constant data base address.  This can result in slower and/or
17122      larger code, especially in complicated functions.
17123
17124      The actual register chosen to hold the constant data base address
17125      depends upon whether the `-msmall-data-limit' and/or the
17126      `-mint-register' command-line options are enabled.  Starting with
17127      register `r13' and proceeding downwards, registers are allocated
17128      first to satisfy the requirements of `-mint-register', then
17129      `-mpid' and finally `-msmall-data-limit'.  Thus it is possible for
17130      the small data area register to be `r8' if both `-mint-register=4'
17131      and `-mpid' are specified on the command line.
17132
17133      By default this feature is not enabled.  The default can be
17134      restored via the `-mno-pid' command-line option.
17135
17136 `-mno-warn-multiple-fast-interrupts'
17137 `-mwarn-multiple-fast-interrupts'
17138      Prevents GCC from issuing a warning message if it finds more than
17139      one fast interrupt handler when it is compiling a file.  The
17140      default is to issue a warning for each extra fast interrupt
17141      handler found, as the RX only supports one such interrupt.
17142
17143
17144  _Note:_ The generic GCC command-line option `-ffixed-REG' has special
17145 significance to the RX port when used with the `interrupt' function
17146 attribute.  This attribute indicates a function intended to process
17147 fast interrupts.  GCC ensures that it only uses the registers `r10',
17148 `r11', `r12' and/or `r13' and only provided that the normal use of the
17149 corresponding registers have been restricted via the `-ffixed-REG' or
17150 `-mint-register' command-line options.
17151
17152 \1f
17153 File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RX Options,  Up: Submodel Options
17154
17155 3.17.36 S/390 and zSeries Options
17156 ---------------------------------
17157
17158 These are the `-m' options defined for the S/390 and zSeries
17159 architecture.
17160
17161 `-mhard-float'
17162 `-msoft-float'
17163      Use (do not use) the hardware floating-point instructions and
17164      registers for floating-point operations.  When `-msoft-float' is
17165      specified, functions in `libgcc.a' are used to perform
17166      floating-point operations.  When `-mhard-float' is specified, the
17167      compiler generates IEEE floating-point instructions.  This is the
17168      default.
17169
17170 `-mhard-dfp'
17171 `-mno-hard-dfp'
17172      Use (do not use) the hardware decimal-floating-point instructions
17173      for decimal-floating-point operations.  When `-mno-hard-dfp' is
17174      specified, functions in `libgcc.a' are used to perform
17175      decimal-floating-point operations.  When `-mhard-dfp' is
17176      specified, the compiler generates decimal-floating-point hardware
17177      instructions.  This is the default for `-march=z9-ec' or higher.
17178
17179 `-mlong-double-64'
17180 `-mlong-double-128'
17181      These switches control the size of `long double' type. A size of
17182      64 bits makes the `long double' type equivalent to the `double'
17183      type. This is the default.
17184
17185 `-mbackchain'
17186 `-mno-backchain'
17187      Store (do not store) the address of the caller's frame as
17188      backchain pointer into the callee's stack frame.  A backchain may
17189      be needed to allow debugging using tools that do not understand
17190      DWARF 2 call frame information.  When `-mno-packed-stack' is in
17191      effect, the backchain pointer is stored at the bottom of the stack
17192      frame; when `-mpacked-stack' is in effect, the backchain is placed
17193      into the topmost word of the 96/160 byte register save area.
17194
17195      In general, code compiled with `-mbackchain' is call-compatible
17196      with code compiled with `-mmo-backchain'; however, use of the
17197      backchain for debugging purposes usually requires that the whole
17198      binary is built with `-mbackchain'.  Note that the combination of
17199      `-mbackchain', `-mpacked-stack' and `-mhard-float' is not
17200      supported.  In order to build a linux kernel use `-msoft-float'.
17201
17202      The default is to not maintain the backchain.
17203
17204 `-mpacked-stack'
17205 `-mno-packed-stack'
17206      Use (do not use) the packed stack layout.  When
17207      `-mno-packed-stack' is specified, the compiler uses the all fields
17208      of the 96/160 byte register save area only for their default
17209      purpose; unused fields still take up stack space.  When
17210      `-mpacked-stack' is specified, register save slots are densely
17211      packed at the top of the register save area; unused space is
17212      reused for other purposes, allowing for more efficient use of the
17213      available stack space.  However, when `-mbackchain' is also in
17214      effect, the topmost word of the save area is always used to store
17215      the backchain, and the return address register is always saved two
17216      words below the backchain.
17217
17218      As long as the stack frame backchain is not used, code generated
17219      with `-mpacked-stack' is call-compatible with code generated with
17220      `-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
17221      for S/390 or zSeries generated code that uses the stack frame
17222      backchain at run time, not just for debugging purposes.  Such code
17223      is not call-compatible with code compiled with `-mpacked-stack'.
17224      Also, note that the combination of `-mbackchain', `-mpacked-stack'
17225      and `-mhard-float' is not supported.  In order to build a linux
17226      kernel use `-msoft-float'.
17227
17228      The default is to not use the packed stack layout.
17229
17230 `-msmall-exec'
17231 `-mno-small-exec'
17232      Generate (or do not generate) code using the `bras' instruction to
17233      do subroutine calls.  This only works reliably if the total
17234      executable size does not exceed 64k.  The default is to use the
17235      `basr' instruction instead, which does not have this limitation.
17236
17237 `-m64'
17238 `-m31'
17239      When `-m31' is specified, generate code compliant to the GNU/Linux
17240      for S/390 ABI.  When `-m64' is specified, generate code compliant
17241      to the GNU/Linux for zSeries ABI.  This allows GCC in particular
17242      to generate 64-bit instructions.  For the `s390' targets, the
17243      default is `-m31', while the `s390x' targets default to `-m64'.
17244
17245 `-mzarch'
17246 `-mesa'
17247      When `-mzarch' is specified, generate code using the instructions
17248      available on z/Architecture.  When `-mesa' is specified, generate
17249      code using the instructions available on ESA/390.  Note that
17250      `-mesa' is not possible with `-m64'.  When generating code
17251      compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'.
17252      When generating code compliant to the GNU/Linux for zSeries ABI,
17253      the default is `-mzarch'.
17254
17255 `-mmvcle'
17256 `-mno-mvcle'
17257      Generate (or do not generate) code using the `mvcle' instruction
17258      to perform block moves.  When `-mno-mvcle' is specified, use a
17259      `mvc' loop instead.  This is the default unless optimizing for
17260      size.
17261
17262 `-mdebug'
17263 `-mno-debug'
17264      Print (or do not print) additional debug information when
17265      compiling.  The default is to not print debug information.
17266
17267 `-march=CPU-TYPE'
17268      Generate code that runs on CPU-TYPE, which is the name of a system
17269      representing a certain processor type.  Possible values for
17270      CPU-TYPE are `g5', `g6', `z900', `z990', `z9-109', `z9-ec' and
17271      `z10'.  When generating code using the instructions available on
17272      z/Architecture, the default is `-march=z900'.  Otherwise, the
17273      default is `-march=g5'.
17274
17275 `-mtune=CPU-TYPE'
17276      Tune to CPU-TYPE everything applicable about the generated code,
17277      except for the ABI and the set of available instructions.  The
17278      list of CPU-TYPE values is the same as for `-march'.  The default
17279      is the value used for `-march'.
17280
17281 `-mtpf-trace'
17282 `-mno-tpf-trace'
17283      Generate code that adds (does not add) in TPF OS specific branches
17284      to trace routines in the operating system.  This option is off by
17285      default, even when compiling for the TPF OS.
17286
17287 `-mfused-madd'
17288 `-mno-fused-madd'
17289      Generate code that uses (does not use) the floating-point multiply
17290      and accumulate instructions.  These instructions are generated by
17291      default if hardware floating point is used.
17292
17293 `-mwarn-framesize=FRAMESIZE'
17294      Emit a warning if the current function exceeds the given frame
17295      size.  Because this is a compile-time check it doesn't need to be
17296      a real problem when the program runs.  It is intended to identify
17297      functions that most probably cause a stack overflow.  It is useful
17298      to be used in an environment with limited stack size e.g. the
17299      linux kernel.
17300
17301 `-mwarn-dynamicstack'
17302      Emit a warning if the function calls `alloca' or uses
17303      dynamically-sized arrays.  This is generally a bad idea with a
17304      limited stack size.
17305
17306 `-mstack-guard=STACK-GUARD'
17307 `-mstack-size=STACK-SIZE'
17308      If these options are provided the S/390 back end emits additional
17309      instructions in the function prologue that trigger a trap if the
17310      stack size is STACK-GUARD bytes above the STACK-SIZE (remember
17311      that the stack on S/390 grows downward).  If the STACK-GUARD
17312      option is omitted the smallest power of 2 larger than the frame
17313      size of the compiled function is chosen.  These options are
17314      intended to be used to help debugging stack overflow problems.
17315      The additionally emitted code causes only little overhead and
17316      hence can also be used in production-like systems without greater
17317      performance degradation.  The given values have to be exact powers
17318      of 2 and STACK-SIZE has to be greater than STACK-GUARD without
17319      exceeding 64k.  In order to be efficient the extra code makes the
17320      assumption that the stack starts at an address aligned to the
17321      value given by STACK-SIZE.  The STACK-GUARD option can only be
17322      used in conjunction with STACK-SIZE.
17323
17324 \1f
17325 File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
17326
17327 3.17.37 Score Options
17328 ---------------------
17329
17330 These options are defined for Score implementations:
17331
17332 `-meb'
17333      Compile code for big-endian mode.  This is the default.
17334
17335 `-mel'
17336      Compile code for little-endian mode.
17337
17338 `-mnhwloop'
17339      Disable generation of `bcnz' instructions.
17340
17341 `-muls'
17342      Enable generation of unaligned load and store instructions.
17343
17344 `-mmac'
17345      Enable the use of multiply-accumulate instructions. Disabled by
17346      default.
17347
17348 `-mscore5'
17349      Specify the SCORE5 as the target architecture.
17350
17351 `-mscore5u'
17352      Specify the SCORE5U of the target architecture.
17353
17354 `-mscore7'
17355      Specify the SCORE7 as the target architecture. This is the default.
17356
17357 `-mscore7d'
17358      Specify the SCORE7D as the target architecture.
17359
17360 \1f
17361 File: gcc.info,  Node: SH Options,  Next: Solaris 2 Options,  Prev: Score Options,  Up: Submodel Options
17362
17363 3.17.38 SH Options
17364 ------------------
17365
17366 These `-m' options are defined for the SH implementations:
17367
17368 `-m1'
17369      Generate code for the SH1.
17370
17371 `-m2'
17372      Generate code for the SH2.
17373
17374 `-m2e'
17375      Generate code for the SH2e.
17376
17377 `-m2a-nofpu'
17378      Generate code for the SH2a without FPU, or for a SH2a-FPU in such
17379      a way that the floating-point unit is not used.
17380
17381 `-m2a-single-only'
17382      Generate code for the SH2a-FPU, in such a way that no
17383      double-precision floating-point operations are used.
17384
17385 `-m2a-single'
17386      Generate code for the SH2a-FPU assuming the floating-point unit is
17387      in single-precision mode by default.
17388
17389 `-m2a'
17390      Generate code for the SH2a-FPU assuming the floating-point unit is
17391      in double-precision mode by default.
17392
17393 `-m3'
17394      Generate code for the SH3.
17395
17396 `-m3e'
17397      Generate code for the SH3e.
17398
17399 `-m4-nofpu'
17400      Generate code for the SH4 without a floating-point unit.
17401
17402 `-m4-single-only'
17403      Generate code for the SH4 with a floating-point unit that only
17404      supports single-precision arithmetic.
17405
17406 `-m4-single'
17407      Generate code for the SH4 assuming the floating-point unit is in
17408      single-precision mode by default.
17409
17410 `-m4'
17411      Generate code for the SH4.
17412
17413 `-m4a-nofpu'
17414      Generate code for the SH4al-dsp, or for a SH4a in such a way that
17415      the floating-point unit is not used.
17416
17417 `-m4a-single-only'
17418      Generate code for the SH4a, in such a way that no double-precision
17419      floating-point operations are used.
17420
17421 `-m4a-single'
17422      Generate code for the SH4a assuming the floating-point unit is in
17423      single-precision mode by default.
17424
17425 `-m4a'
17426      Generate code for the SH4a.
17427
17428 `-m4al'
17429      Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to
17430      the assembler.  GCC doesn't generate any DSP instructions at the
17431      moment.
17432
17433 `-mb'
17434      Compile code for the processor in big-endian mode.
17435
17436 `-ml'
17437      Compile code for the processor in little-endian mode.
17438
17439 `-mdalign'
17440      Align doubles at 64-bit boundaries.  Note that this changes the
17441      calling conventions, and thus some functions from the standard C
17442      library do not work unless you recompile it first with `-mdalign'.
17443
17444 `-mrelax'
17445      Shorten some address references at link time, when possible; uses
17446      the linker option `-relax'.
17447
17448 `-mbigtable'
17449      Use 32-bit offsets in `switch' tables.  The default is to use
17450      16-bit offsets.
17451
17452 `-mbitops'
17453      Enable the use of bit manipulation instructions on SH2A.
17454
17455 `-mfmovd'
17456      Enable the use of the instruction `fmovd'.  Check `-mdalign' for
17457      alignment constraints.
17458
17459 `-mhitachi'
17460      Comply with the calling conventions defined by Renesas.
17461
17462 `-mrenesas'
17463      Comply with the calling conventions defined by Renesas.
17464
17465 `-mno-renesas'
17466      Comply with the calling conventions defined for GCC before the
17467      Renesas conventions were available.  This option is the default
17468      for all targets of the SH toolchain.
17469
17470 `-mnomacsave'
17471      Mark the `MAC' register as call-clobbered, even if `-mhitachi' is
17472      given.
17473
17474 `-mieee'
17475 `-mno-ieee'
17476      Control the IEEE compliance of floating-point comparisons, which
17477      affects the handling of cases where the result of a comparison is
17478      unordered.  By default `-mieee' is implicitly enabled.  If
17479      `-ffinite-math-only' is enabled `-mno-ieee' is implicitly set,
17480      which results in faster floating-point greater-equal and
17481      less-equal comparisons.  The implcit settings can be overridden by
17482      specifying either `-mieee' or `-mno-ieee'.
17483
17484 `-minline-ic_invalidate'
17485      Inline code to invalidate instruction cache entries after setting
17486      up nested function trampolines.  This option has no effect if
17487      `-musermode' is in effect and the selected code generation option
17488      (e.g. `-m4') does not allow the use of the `icbi' instruction.  If
17489      the selected code generation option does not allow the use of the
17490      `icbi' instruction, and `-musermode' is not in effect, the inlined
17491      code manipulates the instruction cache address array directly with
17492      an associative write.  This not only requires privileged mode at
17493      run time, but it also fails if the cache line had been mapped via
17494      the TLB and has become unmapped.
17495
17496 `-misize'
17497      Dump instruction size and location in the assembly code.
17498
17499 `-mpadstruct'
17500      This option is deprecated.  It pads structures to multiple of 4
17501      bytes, which is incompatible with the SH ABI.
17502
17503 `-matomic-model=MODEL'
17504      Sets the model of atomic operations and additional parameters as a
17505      comma separated list.  For details on the atomic built-in
17506      functions see *note __atomic Builtins::.  The following models and
17507      parameters are supported:
17508
17509     `none'
17510           Disable compiler generated atomic sequences and emit library
17511           calls for atomic operations.  This is the default if the
17512           target is not `sh-*-linux*'.
17513
17514     `soft-gusa'
17515           Generate GNU/Linux compatible gUSA software atomic sequences
17516           for the atomic built-in functions.  The generated atomic
17517           sequences require additional support from the
17518           interrupt/exception handling code of the system and are only
17519           suitable for SH3* and SH4* single-core systems.  This option
17520           is enabled by default when the target is `sh-*-linux*' and
17521           SH3* or SH4*.  When the target is SH4A, this option will also
17522           partially utilize the hardware atomic instructions `movli.l'
17523           and `movco.l' to create more efficient code, unless `strict'
17524           is specified.
17525
17526     `soft-tcb'
17527           Generate software atomic sequences that use a variable in the
17528           thread control block.  This is a variation of the gUSA
17529           sequences which can also be used on SH1* and SH2* targets.
17530           The generated atomic sequences require additional support
17531           from the interrupt/exception handling code of the system and
17532           are only suitable for single-core systems.  When using this
17533           model, the `gbr-offset=' parameter has to be specified as
17534           well.
17535
17536     `soft-imask'
17537           Generate software atomic sequences that temporarily disable
17538           interrupts by setting `SR.IMASK = 1111'.  This model works
17539           only when the program runs in privileged mode and is only
17540           suitable for single-core systems.  Additional support from
17541           the interrupt/exception handling code of the system is not
17542           required.  This model is enabled by default when the target is
17543           `sh-*-linux*' and SH1* or SH2*.
17544
17545     `hard-llcs'
17546           Generate hardware atomic sequences using the `movli.l' and
17547           `movco.l' instructions only.  This is only available on SH4A
17548           and is suitable for multi-core systems.  Since the hardware
17549           instructions support only 32 bit atomic variables access to 8
17550           or 16 bit variables is emulated with 32 bit accesses.  Code
17551           compiled with this option will also be compatible with other
17552           software atomic model interrupt/exception handling systems if
17553           executed on an SH4A system.  Additional support from the
17554           interrupt/exception handling code of the system is not
17555           required for this model.
17556
17557     `gbr-offset='
17558           This parameter specifies the offset in bytes of the variable
17559           in the thread control block structure that should be used by
17560           the generated atomic sequences when the `soft-tcb' model has
17561           been selected.  For other models this parameter is ignored.
17562           The specified value must be an integer multiple of four and
17563           in the range 0-1020.
17564
17565     `strict'
17566           This parameter prevents mixed usage of multiple atomic
17567           models, even though they would be compatible, and will make
17568           the compiler generate atomic sequences of the specified model
17569           only.
17570
17571
17572 `-mtas'
17573      Generate the `tas.b' opcode for `__atomic_test_and_set'.  Notice
17574      that depending on the particular hardware and software
17575      configuration this can degrade overall performance due to the
17576      operand cache line flushes that are implied by the `tas.b'
17577      instruction.  On multi-core SH4A processors the `tas.b'
17578      instruction must be used with caution since it can result in data
17579      corruption for certain cache configurations.
17580
17581 `-mspace'
17582      Optimize for space instead of speed.  Implied by `-Os'.
17583
17584 `-mprefergot'
17585      When generating position-independent code, emit function calls
17586      using the Global Offset Table instead of the Procedure Linkage
17587      Table.
17588
17589 `-musermode'
17590      Don't generate privileged mode only code.  This option implies
17591      `-mno-inline-ic_invalidate' if the inlined code would not work in
17592      user mode.  This is the default when the target is `sh-*-linux*'.
17593
17594 `-multcost=NUMBER'
17595      Set the cost to assume for a multiply insn.
17596
17597 `-mdiv=STRATEGY'
17598      Set the division strategy to be used for integer division
17599      operations.  For SHmedia STRATEGY can be one of:
17600
17601     `fp'
17602           Performs the operation in floating point.  This has a very
17603           high latency, but needs only a few instructions, so it might
17604           be a good choice if your code has enough easily-exploitable
17605           ILP to allow the compiler to schedule the floating-point
17606           instructions together with other instructions.  Division by
17607           zero causes a floating-point exception.
17608
17609     `inv'
17610           Uses integer operations to calculate the inverse of the
17611           divisor, and then multiplies the dividend with the inverse.
17612           This strategy allows CSE and hoisting of the inverse
17613           calculation.  Division by zero calculates an unspecified
17614           result, but does not trap.
17615
17616     `inv:minlat'
17617           A variant of `inv' where, if no CSE or hoisting opportunities
17618           have been found, or if the entire operation has been hoisted
17619           to the same place, the last stages of the inverse calculation
17620           are intertwined with the final multiply to reduce the overall
17621           latency, at the expense of using a few more instructions, and
17622           thus offering fewer scheduling opportunities with other code.
17623
17624     `call'
17625           Calls a library function that usually implements the
17626           `inv:minlat' strategy.  This gives high code density for
17627           `m5-*media-nofpu' compilations.
17628
17629     `call2'
17630           Uses a different entry point of the same library function,
17631           where it assumes that a pointer to a lookup table has already
17632           been set up, which exposes the pointer load to CSE and code
17633           hoisting optimizations.
17634
17635     `inv:call'
17636     `inv:call2'
17637     `inv:fp'
17638           Use the `inv' algorithm for initial code generation, but if
17639           the code stays unoptimized, revert to the `call', `call2', or
17640           `fp' strategies, respectively.  Note that the
17641           potentially-trapping side effect of division by zero is
17642           carried by a separate instruction, so it is possible that all
17643           the integer instructions are hoisted out, but the marker for
17644           the side effect stays where it is.  A recombination to
17645           floating-point operations or a call is not possible in that
17646           case.
17647
17648     `inv20u'
17649     `inv20l'
17650           Variants of the `inv:minlat' strategy.  In the case that the
17651           inverse calculation is not separated from the multiply, they
17652           speed up division where the dividend fits into 20 bits (plus
17653           sign where applicable) by inserting a test to skip a number
17654           of operations in this case; this test slows down the case of
17655           larger dividends.  `inv20u' assumes the case of a such a
17656           small dividend to be unlikely, and `inv20l' assumes it to be
17657           likely.
17658
17659
17660      For targets other than SHmedia STRATEGY can be one of:
17661
17662     `call-div1'
17663           Calls a library function that uses the single-step division
17664           instruction `div1' to perform the operation.  Division by
17665           zero calculates an unspecified result and does not trap.
17666           This is the default except for SH4, SH2A and SHcompact.
17667
17668     `call-fp'
17669           Calls a library function that performs the operation in
17670           double precision floating point.  Division by zero causes a
17671           floating-point exception.  This is the default for SHcompact
17672           with FPU.  Specifying this for targets that do not have a
17673           double precision FPU will default to `call-div1'.
17674
17675     `call-table'
17676           Calls a library function that uses a lookup table for small
17677           divisors and the `div1' instruction with case distinction for
17678           larger divisors.  Division by zero calculates an unspecified
17679           result and does not trap.  This is the default for SH4.
17680           Specifying this for targets that do not have dynamic shift
17681           instructions will default to `call-div1'.
17682
17683
17684      When a division strategy has not been specified the default
17685      strategy will be selected based on the current target.  For SH2A
17686      the default strategy is to use the `divs' and `divu' instructions
17687      instead of library function calls.
17688
17689 `-maccumulate-outgoing-args'
17690      Reserve space once for outgoing arguments in the function prologue
17691      rather than around each call.  Generally beneficial for
17692      performance and size.  Also needed for unwinding to avoid changing
17693      the stack frame around conditional code.
17694
17695 `-mdivsi3_libfunc=NAME'
17696      Set the name of the library function used for 32-bit signed
17697      division to NAME.  This only affects the name used in the `call'
17698      and `inv:call' division strategies, and the compiler still expects
17699      the same sets of input/output/clobbered registers as if this
17700      option were not present.
17701
17702 `-mfixed-range=REGISTER-RANGE'
17703      Generate code treating the given register range as fixed registers.
17704      A fixed register is one that the register allocator can not use.
17705      This is useful when compiling kernel code.  A register range is
17706      specified as two registers separated by a dash.  Multiple register
17707      ranges can be specified separated by a comma.
17708
17709 `-mindexed-addressing'
17710      Enable the use of the indexed addressing mode for
17711      SHmedia32/SHcompact.  This is only safe if the hardware and/or OS
17712      implement 32-bit wrap-around semantics for the indexed addressing
17713      mode.  The architecture allows the implementation of processors
17714      with 64-bit MMU, which the OS could use to get 32-bit addressing,
17715      but since no current hardware implementation supports this or any
17716      other way to make the indexed addressing mode safe to use in the
17717      32-bit ABI, the default is `-mno-indexed-addressing'.
17718
17719 `-mgettrcost=NUMBER'
17720      Set the cost assumed for the `gettr' instruction to NUMBER.  The
17721      default is 2 if `-mpt-fixed' is in effect, 100 otherwise.
17722
17723 `-mpt-fixed'
17724      Assume `pt*' instructions won't trap.  This generally generates
17725      better-scheduled code, but is unsafe on current hardware.  The
17726      current architecture definition says that `ptabs' and `ptrel' trap
17727      when the target anded with 3 is 3.  This has the unintentional
17728      effect of making it unsafe to schedule these instructions before a
17729      branch, or hoist them out of a loop.  For example,
17730      `__do_global_ctors', a part of `libgcc' that runs constructors at
17731      program startup, calls functions in a list which is delimited by
17732      -1.  With the `-mpt-fixed' option, the `ptabs' is done before
17733      testing against -1.  That means that all the constructors run a
17734      bit more quickly, but when the loop comes to the end of the list,
17735      the program crashes because `ptabs' loads -1 into a target
17736      register.
17737
17738      Since this option is unsafe for any hardware implementing the
17739      current architecture specification, the default is
17740      `-mno-pt-fixed'.  Unless specified explicitly with `-mgettrcost',
17741      `-mno-pt-fixed' also implies `-mgettrcost=100'; this deters
17742      register allocation from using target registers for storing
17743      ordinary integers.
17744
17745 `-minvalid-symbols'
17746      Assume symbols might be invalid.  Ordinary function symbols
17747      generated by the compiler are always valid to load with
17748      `movi'/`shori'/`ptabs' or `movi'/`shori'/`ptrel', but with
17749      assembler and/or linker tricks it is possible to generate symbols
17750      that cause `ptabs' or `ptrel' to trap.  This option is only
17751      meaningful when `-mno-pt-fixed' is in effect.  It prevents
17752      cross-basic-block CSE, hoisting and most scheduling of symbol
17753      loads.  The default is `-mno-invalid-symbols'.
17754
17755 `-mbranch-cost=NUM'
17756      Assume NUM to be the cost for a branch instruction.  Higher numbers
17757      make the compiler try to generate more branch-free code if
17758      possible.  If not specified the value is selected depending on the
17759      processor type that is being compiled for.
17760
17761 `-mzdcbranch'
17762 `-mno-zdcbranch'
17763      Assume (do not assume) that zero displacement conditional branch
17764      instructions `bt' and `bf' are fast.  If `-mzdcbranch' is
17765      specified, the compiler will try to prefer zero displacement
17766      branch code sequences.  This is enabled by default when generating
17767      code for SH4 and SH4A.  It can be explicitly disabled by
17768      specifying `-mno-zdcbranch'.
17769
17770 `-mcbranchdi'
17771      Enable the `cbranchdi4' instruction pattern.
17772
17773 `-mcmpeqdi'
17774      Emit the `cmpeqdi_t' instruction pattern even when `-mcbranchdi'
17775      is in effect.
17776
17777 `-mfused-madd'
17778 `-mno-fused-madd'
17779      Generate code that uses (does not use) the floating-point multiply
17780      and accumulate instructions.  These instructions are generated by
17781      default if hardware floating point is used.  The machine-dependent
17782      `-mfused-madd' option is now mapped to the machine-independent
17783      `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to
17784      `-ffp-contract=off'.
17785
17786 `-mfsca'
17787 `-mno-fsca'
17788      Allow or disallow the compiler to emit the `fsca' instruction for
17789      sine and cosine approximations.  The option `-mfsca' must be used
17790      in combination with `-funsafe-math-optimizations'.  It is enabled
17791      by default when generating code for SH4A.  Using `-mno-fsca'
17792      disables sine and cosine approximations even if
17793      `-funsafe-math-optimizations' is in effect.
17794
17795 `-mfsrra'
17796 `-mno-fsrra'
17797      Allow or disallow the compiler to emit the `fsrra' instruction for
17798      reciprocal square root approximations.  The option `-mfsrra' must
17799      be used in combination with `-funsafe-math-optimizations' and
17800      `-ffinite-math-only'.  It is enabled by default when generating
17801      code for SH4A.  Using `-mno-fsrra' disables reciprocal square root
17802      approximations even if `-funsafe-math-optimizations' and
17803      `-ffinite-math-only' are in effect.
17804
17805 `-mpretend-cmove'
17806      Prefer zero-displacement conditional branches for conditional move
17807      instruction patterns.  This can result in faster code on the SH4
17808      processor.
17809
17810
17811 \1f
17812 File: gcc.info,  Node: Solaris 2 Options,  Next: SPARC Options,  Prev: SH Options,  Up: Submodel Options
17813
17814 3.17.39 Solaris 2 Options
17815 -------------------------
17816
17817 These `-m' options are supported on Solaris 2:
17818
17819 `-mimpure-text'
17820      `-mimpure-text', used in addition to `-shared', tells the compiler
17821      to not pass `-z text' to the linker when linking a shared object.
17822      Using this option, you can link position-dependent code into a
17823      shared object.
17824
17825      `-mimpure-text' suppresses the "relocations remain against
17826      allocatable but non-writable sections" linker error message.
17827      However, the necessary relocations trigger copy-on-write, and the
17828      shared object is not actually shared across processes.  Instead of
17829      using `-mimpure-text', you should compile all source code with
17830      `-fpic' or `-fPIC'.
17831
17832
17833  These switches are supported in addition to the above on Solaris 2:
17834
17835 `-pthreads'
17836      Add support for multithreading using the POSIX threads library.
17837      This option sets flags for both the preprocessor and linker.  This
17838      option does not affect the thread safety of object code produced
17839      by the compiler or that of libraries supplied with it.
17840
17841 `-pthread'
17842      This is a synonym for `-pthreads'.
17843
17844 \1f
17845 File: gcc.info,  Node: SPARC Options,  Next: SPU Options,  Prev: Solaris 2 Options,  Up: Submodel Options
17846
17847 3.17.40 SPARC Options
17848 ---------------------
17849
17850 These `-m' options are supported on the SPARC:
17851
17852 `-mno-app-regs'
17853 `-mapp-regs'
17854      Specify `-mapp-regs' to generate output using the global registers
17855      2 through 4, which the SPARC SVR4 ABI reserves for applications.
17856      This is the default.
17857
17858      To be fully SVR4 ABI-compliant at the cost of some performance
17859      loss, specify `-mno-app-regs'.  You should compile libraries and
17860      system software with this option.
17861
17862 `-mflat'
17863 `-mno-flat'
17864      With `-mflat', the compiler does not generate save/restore
17865      instructions and uses a "flat" or single register window model.
17866      This model is compatible with the regular register window model.
17867      The local registers and the input registers (0-5) are still
17868      treated as "call-saved" registers and are saved on the stack as
17869      needed.
17870
17871      With `-mno-flat' (the default), the compiler generates save/restore
17872      instructions (except for leaf functions).  This is the normal
17873      operating mode.
17874
17875 `-mfpu'
17876 `-mhard-float'
17877      Generate output containing floating-point instructions.  This is
17878      the default.
17879
17880 `-mno-fpu'
17881 `-msoft-float'
17882      Generate output containing library calls for floating point.
17883      *Warning:* the requisite libraries are not available for all SPARC
17884      targets.  Normally the facilities of the machine's usual C
17885      compiler are used, but this cannot be done directly in
17886      cross-compilation.  You must make your own arrangements to provide
17887      suitable library functions for cross-compilation.  The embedded
17888      targets `sparc-*-aout' and `sparclite-*-*' do provide software
17889      floating-point support.
17890
17891      `-msoft-float' changes the calling convention in the output file;
17892      therefore, it is only useful if you compile _all_ of a program with
17893      this option.  In particular, you need to compile `libgcc.a', the
17894      library that comes with GCC, with `-msoft-float' in order for this
17895      to work.
17896
17897 `-mhard-quad-float'
17898      Generate output containing quad-word (long double) floating-point
17899      instructions.
17900
17901 `-msoft-quad-float'
17902      Generate output containing library calls for quad-word (long
17903      double) floating-point instructions.  The functions called are
17904      those specified in the SPARC ABI.  This is the default.
17905
17906      As of this writing, there are no SPARC implementations that have
17907      hardware support for the quad-word floating-point instructions.
17908      They all invoke a trap handler for one of these instructions, and
17909      then the trap handler emulates the effect of the instruction.
17910      Because of the trap handler overhead, this is much slower than
17911      calling the ABI library routines.  Thus the `-msoft-quad-float'
17912      option is the default.
17913
17914 `-mno-unaligned-doubles'
17915 `-munaligned-doubles'
17916      Assume that doubles have 8-byte alignment.  This is the default.
17917
17918      With `-munaligned-doubles', GCC assumes that doubles have 8-byte
17919      alignment only if they are contained in another type, or if they
17920      have an absolute address.  Otherwise, it assumes they have 4-byte
17921      alignment.  Specifying this option avoids some rare compatibility
17922      problems with code generated by other compilers.  It is not the
17923      default because it results in a performance loss, especially for
17924      floating-point code.
17925
17926 `-mno-faster-structs'
17927 `-mfaster-structs'
17928      With `-mfaster-structs', the compiler assumes that structures
17929      should have 8-byte alignment.  This enables the use of pairs of
17930      `ldd' and `std' instructions for copies in structure assignment,
17931      in place of twice as many `ld' and `st' pairs.  However, the use
17932      of this changed alignment directly violates the SPARC ABI.  Thus,
17933      it's intended only for use on targets where the developer
17934      acknowledges that their resulting code is not directly in line with
17935      the rules of the ABI.
17936
17937 `-mcpu=CPU_TYPE'
17938      Set the instruction set, register set, and instruction scheduling
17939      parameters for machine type CPU_TYPE.  Supported values for
17940      CPU_TYPE are `v7', `cypress', `v8', `supersparc', `hypersparc',
17941      `leon', `sparclite', `f930', `f934', `sparclite86x', `sparclet',
17942      `tsc701', `v9', `ultrasparc', `ultrasparc3', `niagara',
17943      `niagara2', `niagara3', and `niagara4'.
17944
17945      Native Solaris and GNU/Linux toolchains also support the value
17946      `native', which selects the best architecture option for the host
17947      processor.  `-mcpu=native' has no effect if GCC does not recognize
17948      the processor.
17949
17950      Default instruction scheduling parameters are used for values that
17951      select an architecture and not an implementation.  These are `v7',
17952      `v8', `sparclite', `sparclet', `v9'.
17953
17954      Here is a list of each supported architecture and their supported
17955      implementations.
17956
17957     v7
17958           cypress
17959
17960     v8
17961           supersparc, hypersparc, leon
17962
17963     sparclite
17964           f930, f934, sparclite86x
17965
17966     sparclet
17967           tsc701
17968
17969     v9
17970           ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
17971
17972      By default (unless configured otherwise), GCC generates code for
17973      the V7 variant of the SPARC architecture.  With `-mcpu=cypress',
17974      the compiler additionally optimizes it for the Cypress CY7C602
17975      chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
17976      also appropriate for the older SPARCStation 1, 2, IPX etc.
17977
17978      With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC
17979      architecture.  The only difference from V7 code is that the
17980      compiler emits the integer multiply and integer divide
17981      instructions which exist in SPARC-V8 but not in SPARC-V7.  With
17982      `-mcpu=supersparc', the compiler additionally optimizes it for the
17983      SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
17984      series.
17985
17986      With `-mcpu=sparclite', GCC generates code for the SPARClite
17987      variant of the SPARC architecture.  This adds the integer
17988      multiply, integer divide step and scan (`ffs') instructions which
17989      exist in SPARClite but not in SPARC-V7.  With `-mcpu=f930', the
17990      compiler additionally optimizes it for the Fujitsu MB86930 chip,
17991      which is the original SPARClite, with no FPU.  With `-mcpu=f934',
17992      the compiler additionally optimizes it for the Fujitsu MB86934
17993      chip, which is the more recent SPARClite with FPU.
17994
17995      With `-mcpu=sparclet', GCC generates code for the SPARClet variant
17996      of the SPARC architecture.  This adds the integer multiply,
17997      multiply/accumulate, integer divide step and scan (`ffs')
17998      instructions which exist in SPARClet but not in SPARC-V7.  With
17999      `-mcpu=tsc701', the compiler additionally optimizes it for the
18000      TEMIC SPARClet chip.
18001
18002      With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC
18003      architecture.  This adds 64-bit integer and floating-point move
18004      instructions, 3 additional floating-point condition code registers
18005      and conditional move instructions.  With `-mcpu=ultrasparc', the
18006      compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
18007      chips.  With `-mcpu=ultrasparc3', the compiler additionally
18008      optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
18009      chips.  With `-mcpu=niagara', the compiler additionally optimizes
18010      it for Sun UltraSPARC T1 chips.  With `-mcpu=niagara2', the
18011      compiler additionally optimizes it for Sun UltraSPARC T2 chips.
18012      With `-mcpu=niagara3', the compiler additionally optimizes it for
18013      Sun UltraSPARC T3 chips.  With `-mcpu=niagara4', the compiler
18014      additionally optimizes it for Sun UltraSPARC T4 chips.
18015
18016 `-mtune=CPU_TYPE'
18017      Set the instruction scheduling parameters for machine type
18018      CPU_TYPE, but do not set the instruction set or register set that
18019      the option `-mcpu=CPU_TYPE' does.
18020
18021      The same values for `-mcpu=CPU_TYPE' can be used for
18022      `-mtune=CPU_TYPE', but the only useful values are those that
18023      select a particular CPU implementation.  Those are `cypress',
18024      `supersparc', `hypersparc', `leon', `f930', `f934',
18025      `sparclite86x', `tsc701', `ultrasparc', `ultrasparc3', `niagara',
18026      `niagara2', `niagara3' and `niagara4'.  With native Solaris and
18027      GNU/Linux toolchains, `native' can also be used.
18028
18029 `-mv8plus'
18030 `-mno-v8plus'
18031      With `-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
18032      difference from the V8 ABI is that the global and out registers are
18033      considered 64 bits wide.  This is enabled by default on Solaris in
18034      32-bit mode for all SPARC-V9 processors.
18035
18036 `-mvis'
18037 `-mno-vis'
18038      With `-mvis', GCC generates code that takes advantage of the
18039      UltraSPARC Visual Instruction Set extensions.  The default is
18040      `-mno-vis'.
18041
18042 `-mvis2'
18043 `-mno-vis2'
18044      With `-mvis2', GCC generates code that takes advantage of version
18045      2.0 of the UltraSPARC Visual Instruction Set extensions.  The
18046      default is `-mvis2' when targeting a cpu that supports such
18047      instructions, such as UltraSPARC-III and later.  Setting `-mvis2'
18048      also sets `-mvis'.
18049
18050 `-mvis3'
18051 `-mno-vis3'
18052      With `-mvis3', GCC generates code that takes advantage of version
18053      3.0 of the UltraSPARC Visual Instruction Set extensions.  The
18054      default is `-mvis3' when targeting a cpu that supports such
18055      instructions, such as niagara-3 and later.  Setting `-mvis3' also
18056      sets `-mvis2' and `-mvis'.
18057
18058 `-mcbcond'
18059 `-mno-cbcond'
18060      With `-mcbcond', GCC generates code that takes advantage of
18061      compare-and-branch instructions, as defined in the Sparc
18062      Architecture 2011.  The default is `-mcbcond' when targeting a cpu
18063      that supports such instructions, such as niagara-4 and later.
18064
18065 `-mpopc'
18066 `-mno-popc'
18067      With `-mpopc', GCC generates code that takes advantage of the
18068      UltraSPARC population count instruction.  The default is `-mpopc'
18069      when targeting a cpu that supports such instructions, such as
18070      Niagara-2 and later.
18071
18072 `-mfmaf'
18073 `-mno-fmaf'
18074      With `-mfmaf', GCC generates code that takes advantage of the
18075      UltraSPARC Fused Multiply-Add Floating-point extensions.  The
18076      default is `-mfmaf' when targeting a cpu that supports such
18077      instructions, such as Niagara-3 and later.
18078
18079 `-mfix-at697f'
18080      Enable the documented workaround for the single erratum of the
18081      Atmel AT697F processor (which corresponds to erratum #13 of the
18082      AT697E processor).
18083
18084  These `-m' options are supported in addition to the above on SPARC-V9
18085 processors in 64-bit environments:
18086
18087 `-m32'
18088 `-m64'
18089      Generate code for a 32-bit or 64-bit environment.  The 32-bit
18090      environment sets int, long and pointer to 32 bits.  The 64-bit
18091      environment sets int to 32 bits and long and pointer to 64 bits.
18092
18093 `-mcmodel=WHICH'
18094      Set the code model to one of
18095
18096     `medlow'
18097           The Medium/Low code model: 64-bit addresses, programs must be
18098           linked in the low 32 bits of memory.  Programs can be
18099           statically or dynamically linked.
18100
18101     `medmid'
18102           The Medium/Middle code model: 64-bit addresses, programs must
18103           be linked in the low 44 bits of memory, the text and data
18104           segments must be less than 2GB in size and the data segment
18105           must be located within 2GB of the text segment.
18106
18107     `medany'
18108           The Medium/Anywhere code model: 64-bit addresses, programs
18109           may be linked anywhere in memory, the text and data segments
18110           must be less than 2GB in size and the data segment must be
18111           located within 2GB of the text segment.
18112
18113     `embmedany'
18114           The Medium/Anywhere code model for embedded systems: 64-bit
18115           addresses, the text and data segments must be less than 2GB in
18116           size, both starting anywhere in memory (determined at link
18117           time).  The global register %g4 points to the base of the
18118           data segment.  Programs are statically linked and PIC is not
18119           supported.
18120
18121 `-mmemory-model=MEM-MODEL'
18122      Set the memory model in force on the processor to one of
18123
18124     `default'
18125           The default memory model for the processor and operating
18126           system.
18127
18128     `rmo'
18129           Relaxed Memory Order
18130
18131     `pso'
18132           Partial Store Order
18133
18134     `tso'
18135           Total Store Order
18136
18137     `sc'
18138           Sequential Consistency
18139
18140      These memory models are formally defined in Appendix D of the
18141      Sparc V9 architecture manual, as set in the processor's
18142      `PSTATE.MM' field.
18143
18144 `-mstack-bias'
18145 `-mno-stack-bias'
18146      With `-mstack-bias', GCC assumes that the stack pointer, and frame
18147      pointer if present, are offset by -2047 which must be added back
18148      when making stack frame references.  This is the default in 64-bit
18149      mode.  Otherwise, assume no such offset is present.
18150
18151 \1f
18152 File: gcc.info,  Node: SPU Options,  Next: System V Options,  Prev: SPARC Options,  Up: Submodel Options
18153
18154 3.17.41 SPU Options
18155 -------------------
18156
18157 These `-m' options are supported on the SPU:
18158
18159 `-mwarn-reloc'
18160 `-merror-reloc'
18161      The loader for SPU does not handle dynamic relocations.  By
18162      default, GCC gives an error when it generates code that requires a
18163      dynamic relocation.  `-mno-error-reloc' disables the error,
18164      `-mwarn-reloc' generates a warning instead.
18165
18166 `-msafe-dma'
18167 `-munsafe-dma'
18168      Instructions that initiate or test completion of DMA must not be
18169      reordered with respect to loads and stores of the memory that is
18170      being accessed.  With `-munsafe-dma' you must use the `volatile'
18171      keyword to protect memory accesses, but that can lead to
18172      inefficient code in places where the memory is known to not
18173      change.  Rather than mark the memory as volatile, you can use
18174      `-msafe-dma' to tell the compiler to treat the DMA instructions as
18175      potentially affecting all memory.
18176
18177 `-mbranch-hints'
18178      By default, GCC generates a branch hint instruction to avoid
18179      pipeline stalls for always-taken or probably-taken branches.  A
18180      hint is not generated closer than 8 instructions away from its
18181      branch.  There is little reason to disable them, except for
18182      debugging purposes, or to make an object a little bit smaller.
18183
18184 `-msmall-mem'
18185 `-mlarge-mem'
18186      By default, GCC generates code assuming that addresses are never
18187      larger than 18 bits.  With `-mlarge-mem' code is generated that
18188      assumes a full 32-bit address.
18189
18190 `-mstdmain'
18191      By default, GCC links against startup code that assumes the
18192      SPU-style main function interface (which has an unconventional
18193      parameter list).  With `-mstdmain', GCC links your program against
18194      startup code that assumes a C99-style interface to `main',
18195      including a local copy of `argv' strings.
18196
18197 `-mfixed-range=REGISTER-RANGE'
18198      Generate code treating the given register range as fixed registers.
18199      A fixed register is one that the register allocator cannot use.
18200      This is useful when compiling kernel code.  A register range is
18201      specified as two registers separated by a dash.  Multiple register
18202      ranges can be specified separated by a comma.
18203
18204 `-mea32'
18205 `-mea64'
18206      Compile code assuming that pointers to the PPU address space
18207      accessed via the `__ea' named address space qualifier are either
18208      32 or 64 bits wide.  The default is 32 bits.  As this is an
18209      ABI-changing option, all object code in an executable must be
18210      compiled with the same setting.
18211
18212 `-maddress-space-conversion'
18213 `-mno-address-space-conversion'
18214      Allow/disallow treating the `__ea' address space as superset of
18215      the generic address space.  This enables explicit type casts
18216      between `__ea' and generic pointer as well as implicit conversions
18217      of generic pointers to `__ea' pointers.  The default is to allow
18218      address space pointer conversions.
18219
18220 `-mcache-size=CACHE-SIZE'
18221      This option controls the version of libgcc that the compiler links
18222      to an executable and selects a software-managed cache for
18223      accessing variables in the `__ea' address space with a particular
18224      cache size.  Possible options for CACHE-SIZE are `8', `16', `32',
18225      `64' and `128'.  The default cache size is 64KB.
18226
18227 `-matomic-updates'
18228 `-mno-atomic-updates'
18229      This option controls the version of libgcc that the compiler links
18230      to an executable and selects whether atomic updates to the
18231      software-managed cache of PPU-side variables are used.  If you use
18232      atomic updates, changes to a PPU variable from SPU code using the
18233      `__ea' named address space qualifier do not interfere with changes
18234      to other PPU variables residing in the same cache line from PPU
18235      code.  If you do not use atomic updates, such interference may
18236      occur; however, writing back cache lines is more efficient.  The
18237      default behavior is to use atomic updates.
18238
18239 `-mdual-nops'
18240 `-mdual-nops=N'
18241      By default, GCC inserts nops to increase dual issue when it expects
18242      it to increase performance.  N can be a value from 0 to 10.  A
18243      smaller N inserts fewer nops.  10 is the default, 0 is the same as
18244      `-mno-dual-nops'.  Disabled with `-Os'.
18245
18246 `-mhint-max-nops=N'
18247      Maximum number of nops to insert for a branch hint.  A branch hint
18248      must be at least 8 instructions away from the branch it is
18249      affecting.  GCC inserts up to N nops to enforce this, otherwise it
18250      does not generate the branch hint.
18251
18252 `-mhint-max-distance=N'
18253      The encoding of the branch hint instruction limits the hint to be
18254      within 256 instructions of the branch it is affecting.  By
18255      default, GCC makes sure it is within 125.
18256
18257 `-msafe-hints'
18258      Work around a hardware bug that causes the SPU to stall
18259      indefinitely.  By default, GCC inserts the `hbrp' instruction to
18260      make sure this stall won't happen.
18261
18262
18263 \1f
18264 File: gcc.info,  Node: System V Options,  Next: TILE-Gx Options,  Prev: SPU Options,  Up: Submodel Options
18265
18266 3.17.42 Options for System V
18267 ----------------------------
18268
18269 These additional options are available on System V Release 4 for
18270 compatibility with other compilers on those systems:
18271
18272 `-G'
18273      Create a shared object.  It is recommended that `-symbolic' or
18274      `-shared' be used instead.
18275
18276 `-Qy'
18277      Identify the versions of each tool used by the compiler, in a
18278      `.ident' assembler directive in the output.
18279
18280 `-Qn'
18281      Refrain from adding `.ident' directives to the output file (this is
18282      the default).
18283
18284 `-YP,DIRS'
18285      Search the directories DIRS, and no others, for libraries
18286      specified with `-l'.
18287
18288 `-Ym,DIR'
18289      Look in the directory DIR to find the M4 preprocessor.  The
18290      assembler uses this option.
18291
18292 \1f
18293 File: gcc.info,  Node: TILE-Gx Options,  Next: TILEPro Options,  Prev: System V Options,  Up: Submodel Options
18294
18295 3.17.43 TILE-Gx Options
18296 -----------------------
18297
18298 These `-m' options are supported on the TILE-Gx:
18299
18300 `-mcmodel=small'
18301      Generate code for the small model.  The distance for direct calls
18302      is limited to 500M in either direction.  PC-relative addresses are
18303      32 bits.  Absolute addresses support the full address range.
18304
18305 `-mcmodel=large'
18306      Generate code for the large model.  There is no limitation on call
18307      distance, pc-relative addresses, or absolute addresses.
18308
18309 `-mcpu=NAME'
18310      Selects the type of CPU to be targeted.  Currently the only
18311      supported type is `tilegx'.
18312
18313 `-m32'
18314 `-m64'
18315      Generate code for a 32-bit or 64-bit environment.  The 32-bit
18316      environment sets int, long, and pointer to 32 bits.  The 64-bit
18317      environment sets int to 32 bits and long and pointer to 64 bits.
18318
18319 \1f
18320 File: gcc.info,  Node: TILEPro Options,  Next: V850 Options,  Prev: TILE-Gx Options,  Up: Submodel Options
18321
18322 3.17.44 TILEPro Options
18323 -----------------------
18324
18325 These `-m' options are supported on the TILEPro:
18326
18327 `-mcpu=NAME'
18328      Selects the type of CPU to be targeted.  Currently the only
18329      supported type is `tilepro'.
18330
18331 `-m32'
18332      Generate code for a 32-bit environment, which sets int, long, and
18333      pointer to 32 bits.  This is the only supported behavior so the
18334      flag is essentially ignored.
18335
18336 \1f
18337 File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: TILEPro Options,  Up: Submodel Options
18338
18339 3.17.45 V850 Options
18340 --------------------
18341
18342 These `-m' options are defined for V850 implementations:
18343
18344 `-mlong-calls'
18345 `-mno-long-calls'
18346      Treat all calls as being far away (near).  If calls are assumed to
18347      be far away, the compiler always loads the function's address into
18348      a register, and calls indirect through the pointer.
18349
18350 `-mno-ep'
18351 `-mep'
18352      Do not optimize (do optimize) basic blocks that use the same index
18353      pointer 4 or more times to copy pointer into the `ep' register, and
18354      use the shorter `sld' and `sst' instructions.  The `-mep' option
18355      is on by default if you optimize.
18356
18357 `-mno-prolog-function'
18358 `-mprolog-function'
18359      Do not use (do use) external functions to save and restore
18360      registers at the prologue and epilogue of a function.  The
18361      external functions are slower, but use less code space if more
18362      than one function saves the same number of registers.  The
18363      `-mprolog-function' option is on by default if you optimize.
18364
18365 `-mspace'
18366      Try to make the code as small as possible.  At present, this just
18367      turns on the `-mep' and `-mprolog-function' options.
18368
18369 `-mtda=N'
18370      Put static or global variables whose size is N bytes or less into
18371      the tiny data area that register `ep' points to.  The tiny data
18372      area can hold up to 256 bytes in total (128 bytes for byte
18373      references).
18374
18375 `-msda=N'
18376      Put static or global variables whose size is N bytes or less into
18377      the small data area that register `gp' points to.  The small data
18378      area can hold up to 64 kilobytes.
18379
18380 `-mzda=N'
18381      Put static or global variables whose size is N bytes or less into
18382      the first 32 kilobytes of memory.
18383
18384 `-mv850'
18385      Specify that the target processor is the V850.
18386
18387 `-mv850e3v5'
18388      Specify that the target processor is the V850E3V5.  The
18389      preprocessor constant `__v850e3v5__' is defined if this option is
18390      used.
18391
18392 `-mv850e2v4'
18393      Specify that the target processor is the V850E3V5.  This is an
18394      alias for the `-mv850e3v5' option.
18395
18396 `-mv850e2v3'
18397      Specify that the target processor is the V850E2V3.  The
18398      preprocessor constant `__v850e2v3__' is defined if this option is
18399      used.
18400
18401 `-mv850e2'
18402      Specify that the target processor is the V850E2.  The preprocessor
18403      constant `__v850e2__' is defined if this option is used.
18404
18405 `-mv850e1'
18406      Specify that the target processor is the V850E1.  The preprocessor
18407      constants `__v850e1__' and `__v850e__' are defined if this option
18408      is used.
18409
18410 `-mv850es'
18411      Specify that the target processor is the V850ES.  This is an alias
18412      for the `-mv850e1' option.
18413
18414 `-mv850e'
18415      Specify that the target processor is the V850E.  The preprocessor
18416      constant `__v850e__' is defined if this option is used.
18417
18418      If neither `-mv850' nor `-mv850e' nor `-mv850e1' nor `-mv850e2'
18419      nor `-mv850e2v3' nor `-mv850e3v5' are defined then a default
18420      target processor is chosen and the relevant `__v850*__'
18421      preprocessor constant is defined.
18422
18423      The preprocessor constants `__v850' and `__v851__' are always
18424      defined, regardless of which processor variant is the target.
18425
18426 `-mdisable-callt'
18427 `-mno-disable-callt'
18428      This option suppresses generation of the `CALLT' instruction for
18429      the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
18430      v850 architecture.
18431
18432      This option is enabled by default when the RH850 ABI is in use
18433      (see `-mrh850-abi'), and disabled by default when the GCC ABI is
18434      in use.  If `CALLT' instructions are being generated then the C
18435      preprocessor symbol `__V850_CALLT__' will be defined.
18436
18437 `-mrelax'
18438 `-mno-relax'
18439      Pass on (or do not pass on) the `-mrelax' command line option to
18440      the assembler.
18441
18442 `-mlong-jumps'
18443 `-mno-long-jumps'
18444      Disable (or re-enable) the generation of PC-relative jump
18445      instructions.
18446
18447 `-msoft-float'
18448 `-mhard-float'
18449      Disable (or re-enable) the generation of hardware floating point
18450      instructions.  This option is only significant when the target
18451      architecture is `V850E2V3' or higher.  If hardware floating point
18452      instructions are being generated then the C preprocessor symbol
18453      `__FPU_OK__' will be defined, otherwise the symbol `__NO_FPU__'
18454      will be defined.
18455
18456 `-mloop'
18457      Enables the use of the e3v5 LOOP instruction.  The use of this
18458      instruction is not enabled by default when the e3v5 architecture is
18459      selected because its use is still experimental.
18460
18461 `-mrh850-abi'
18462 `-mghs'
18463      Enables support for the RH850 version of the V850 ABI.  This is the
18464      default.  With this version of the ABI the following rules apply:
18465
18466         * Integer sized structures and unions are returned via a memory
18467           pointer rather than a register.
18468
18469         * Large structures and unions (more than 8 bytes in size) are
18470           passed by value.
18471
18472         * Functions are aligned to 16-bit boundaries.
18473
18474         * The `-m8byte-align' command line option is supported.
18475
18476         * The `-mdisable-callt' command line option is enabled by
18477           default.  The `-mno-disable-callt' command line option is not
18478           supported.
18479
18480      When this version of the ABI is enabled the C preprocessor symbol
18481      `__V850_RH850_ABI__' is defined.
18482
18483 `-mgcc-abi'
18484      Enables support for the old GCC version of the V850 ABI.  With this
18485      version of the ABI the following rules apply:
18486
18487         * Integer sized structures and unions are returned in register
18488           `r10'.
18489
18490         * Large structures and unions (more than 8 bytes in size) are
18491           passed by reference.
18492
18493         * Functions are aligned to 32-bit boundaries, unless optimizing
18494           for size.
18495
18496         * The `-m8byte-align' command line option is not supported.
18497
18498         * The `-mdisable-callt' command line option is supported but not
18499           enabled by default.
18500
18501      When this version of the ABI is enabled the C preprocessor symbol
18502      `__V850_GCC_ABI__' is defined.
18503
18504 `-m8byte-align'
18505 `-mno-8byte-align'
18506      Enables support for `doubles' and `long long' types to be aligned
18507      on 8-byte boundaries.  The default is to restrict the alignment of
18508      all objects to at most 4-bytes.  When `-m8byte-align' is in effect
18509      the C preprocessor symbol `__V850_8BYTE_ALIGN__' will be defined.
18510
18511 `-mbig-switch'
18512      Generate code suitable for big switch tables.  Use this option
18513      only if the assembler/linker complain about out of range branches
18514      within a switch table.
18515
18516 `-mapp-regs'
18517      This option causes r2 and r5 to be used in the code generated by
18518      the compiler.  This setting is the default.
18519
18520 `-mno-app-regs'
18521      This option causes r2 and r5 to be treated as fixed registers.
18522
18523
18524 \1f
18525 File: gcc.info,  Node: VAX Options,  Next: VMS Options,  Prev: V850 Options,  Up: Submodel Options
18526
18527 3.17.46 VAX Options
18528 -------------------
18529
18530 These `-m' options are defined for the VAX:
18531
18532 `-munix'
18533      Do not output certain jump instructions (`aobleq' and so on) that
18534      the Unix assembler for the VAX cannot handle across long ranges.
18535
18536 `-mgnu'
18537      Do output those jump instructions, on the assumption that the GNU
18538      assembler is being used.
18539
18540 `-mg'
18541      Output code for G-format floating-point numbers instead of
18542      D-format.
18543
18544 \1f
18545 File: gcc.info,  Node: VMS Options,  Next: VxWorks Options,  Prev: VAX Options,  Up: Submodel Options
18546
18547 3.17.47 VMS Options
18548 -------------------
18549
18550 These `-m' options are defined for the VMS implementations:
18551
18552 `-mvms-return-codes'
18553      Return VMS condition codes from `main'. The default is to return
18554      POSIX-style condition (e.g. error) codes.
18555
18556 `-mdebug-main=PREFIX'
18557      Flag the first routine whose name starts with PREFIX as the main
18558      routine for the debugger.
18559
18560 `-mmalloc64'
18561      Default to 64-bit memory allocation routines.
18562
18563 `-mpointer-size=SIZE'
18564      Set the default size of pointers. Possible options for SIZE are
18565      `32' or `short' for 32 bit pointers, `64' or `long' for 64 bit
18566      pointers, and `no' for supporting only 32 bit pointers.  The later
18567      option disables `pragma pointer_size'.
18568
18569 \1f
18570 File: gcc.info,  Node: VxWorks Options,  Next: x86-64 Options,  Prev: VMS Options,  Up: Submodel Options
18571
18572 3.17.48 VxWorks Options
18573 -----------------------
18574
18575 The options in this section are defined for all VxWorks targets.
18576 Options specific to the target hardware are listed with the other
18577 options for that target.
18578
18579 `-mrtp'
18580      GCC can generate code for both VxWorks kernels and real time
18581      processes (RTPs).  This option switches from the former to the
18582      latter.  It also defines the preprocessor macro `__RTP__'.
18583
18584 `-non-static'
18585      Link an RTP executable against shared libraries rather than static
18586      libraries.  The options `-static' and `-shared' can also be used
18587      for RTPs (*note Link Options::); `-static' is the default.
18588
18589 `-Bstatic'
18590 `-Bdynamic'
18591      These options are passed down to the linker.  They are defined for
18592      compatibility with Diab.
18593
18594 `-Xbind-lazy'
18595      Enable lazy binding of function calls.  This option is equivalent
18596      to `-Wl,-z,now' and is defined for compatibility with Diab.
18597
18598 `-Xbind-now'
18599      Disable lazy binding of function calls.  This option is the
18600      default and is defined for compatibility with Diab.
18601
18602 \1f
18603 File: gcc.info,  Node: x86-64 Options,  Next: Xstormy16 Options,  Prev: VxWorks Options,  Up: Submodel Options
18604
18605 3.17.49 x86-64 Options
18606 ----------------------
18607
18608 These are listed under *Note i386 and x86-64 Options::.
18609
18610 \1f
18611 File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86-64 Options,  Up: Submodel Options
18612
18613 3.17.50 Xstormy16 Options
18614 -------------------------
18615
18616 These options are defined for Xstormy16:
18617
18618 `-msim'
18619      Choose startup files and linker script suitable for the simulator.
18620
18621 \1f
18622 File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options
18623
18624 3.17.51 Xtensa Options
18625 ----------------------
18626
18627 These options are supported for Xtensa targets:
18628
18629 `-mconst16'
18630 `-mno-const16'
18631      Enable or disable use of `CONST16' instructions for loading
18632      constant values.  The `CONST16' instruction is currently not a
18633      standard option from Tensilica.  When enabled, `CONST16'
18634      instructions are always used in place of the standard `L32R'
18635      instructions.  The use of `CONST16' is enabled by default only if
18636      the `L32R' instruction is not available.
18637
18638 `-mfused-madd'
18639 `-mno-fused-madd'
18640      Enable or disable use of fused multiply/add and multiply/subtract
18641      instructions in the floating-point option.  This has no effect if
18642      the floating-point option is not also enabled.  Disabling fused
18643      multiply/add and multiply/subtract instructions forces the
18644      compiler to use separate instructions for the multiply and
18645      add/subtract operations.  This may be desirable in some cases
18646      where strict IEEE 754-compliant results are required: the fused
18647      multiply add/subtract instructions do not round the intermediate
18648      result, thereby producing results with _more_ bits of precision
18649      than specified by the IEEE standard.  Disabling fused multiply
18650      add/subtract instructions also ensures that the program output is
18651      not sensitive to the compiler's ability to combine multiply and
18652      add/subtract operations.
18653
18654 `-mserialize-volatile'
18655 `-mno-serialize-volatile'
18656      When this option is enabled, GCC inserts `MEMW' instructions before
18657      `volatile' memory references to guarantee sequential consistency.
18658      The default is `-mserialize-volatile'.  Use
18659      `-mno-serialize-volatile' to omit the `MEMW' instructions.
18660
18661 `-mforce-no-pic'
18662      For targets, like GNU/Linux, where all user-mode Xtensa code must
18663      be position-independent code (PIC), this option disables PIC for
18664      compiling kernel code.
18665
18666 `-mtext-section-literals'
18667 `-mno-text-section-literals'
18668      Control the treatment of literal pools.  The default is
18669      `-mno-text-section-literals', which places literals in a separate
18670      section in the output file.  This allows the literal pool to be
18671      placed in a data RAM/ROM, and it also allows the linker to combine
18672      literal pools from separate object files to remove redundant
18673      literals and improve code size.  With `-mtext-section-literals',
18674      the literals are interspersed in the text section in order to keep
18675      them as close as possible to their references.  This may be
18676      necessary for large assembly files.
18677
18678 `-mtarget-align'
18679 `-mno-target-align'
18680      When this option is enabled, GCC instructs the assembler to
18681      automatically align instructions to reduce branch penalties at the
18682      expense of some code density.  The assembler attempts to widen
18683      density instructions to align branch targets and the instructions
18684      following call instructions.  If there are not enough preceding
18685      safe density instructions to align a target, no widening is
18686      performed.  The default is `-mtarget-align'.  These options do not
18687      affect the treatment of auto-aligned instructions like `LOOP',
18688      which the assembler always aligns, either by widening density
18689      instructions or by inserting NOP instructions.
18690
18691 `-mlongcalls'
18692 `-mno-longcalls'
18693      When this option is enabled, GCC instructs the assembler to
18694      translate direct calls to indirect calls unless it can determine
18695      that the target of a direct call is in the range allowed by the
18696      call instruction.  This translation typically occurs for calls to
18697      functions in other source files.  Specifically, the assembler
18698      translates a direct `CALL' instruction into an `L32R' followed by
18699      a `CALLX' instruction.  The default is `-mno-longcalls'.  This
18700      option should be used in programs where the call target can
18701      potentially be out of range.  This option is implemented in the
18702      assembler, not the compiler, so the assembly code generated by GCC
18703      still shows direct call instructions--look at the disassembled
18704      object code to see the actual instructions.  Note that the
18705      assembler uses an indirect call for every cross-file call, not
18706      just those that really are out of range.
18707
18708 \1f
18709 File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
18710
18711 3.17.52 zSeries Options
18712 -----------------------
18713
18714 These are listed under *Note S/390 and zSeries Options::.
18715
18716 \1f
18717 File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
18718
18719 3.18 Options for Code Generation Conventions
18720 ============================================
18721
18722 These machine-independent options control the interface conventions
18723 used in code generation.
18724
18725  Most of them have both positive and negative forms; the negative form
18726 of `-ffoo' is `-fno-foo'.  In the table below, only one of the forms is
18727 listed--the one that is not the default.  You can figure out the other
18728 form by either removing `no-' or adding it.
18729
18730 `-fbounds-check'
18731      For front ends that support it, generate additional code to check
18732      that indices used to access arrays are within the declared range.
18733      This is currently only supported by the Java and Fortran front
18734      ends, where this option defaults to true and false respectively.
18735
18736 `-fstack-reuse=REUSE-LEVEL'
18737      This option controls stack space reuse for user declared
18738      local/auto variables and compiler generated temporaries.
18739      REUSE_LEVEL can be `all', `named_vars', or `none'. `all' enables
18740      stack reuse for all local variables and temporaries, `named_vars'
18741      enables the reuse only for user defined local variables with
18742      names, and `none' disables stack reuse completely. The default
18743      value is `all'. The option is needed when the program extends the
18744      lifetime of a scoped local variable or a compiler generated
18745      temporary beyond the end point defined by the language.  When a
18746      lifetime of a variable ends, and if the variable lives in memory,
18747      the optimizing compiler has the freedom to reuse its stack space
18748      with other temporaries or scoped local variables whose live range
18749      does not overlap with it. Legacy code extending local lifetime
18750      will likely to break with the stack reuse optimization.
18751
18752      For example,
18753
18754              int *p;
18755              {
18756                int local1;
18757
18758                p = &local1;
18759                local1 = 10;
18760                ....
18761              }
18762              {
18763                 int local2;
18764                 local2 = 20;
18765                 ...
18766              }
18767
18768              if (*p == 10)  // out of scope use of local1
18769                {
18770
18771                }
18772
18773      Another example:
18774
18775              struct A
18776              {
18777                  A(int k) : i(k), j(k) { }
18778                  int i;
18779                  int j;
18780              };
18781
18782              A *ap;
18783
18784              void foo(const A& ar)
18785              {
18786                 ap = &ar;
18787              }
18788
18789              void bar()
18790              {
18791                 foo(A(10)); // temp object's lifetime ends when foo returns
18792
18793                 {
18794                   A a(20);
18795                   ....
18796                 }
18797                 ap->i+= 10;  // ap references out of scope temp whose space
18798                              // is reused with a. What is the value of ap->i?
18799              }
18800
18801      The lifetime of a compiler generated temporary is well defined by
18802      the C++ standard. When a lifetime of a temporary ends, and if the
18803      temporary lives in memory, the optimizing compiler has the freedom
18804      to reuse its stack space with other temporaries or scoped local
18805      variables whose live range does not overlap with it. However some
18806      of the legacy code relies on the behavior of older compilers in
18807      which temporaries' stack space is not reused, the aggressive stack
18808      reuse can lead to runtime errors. This option is used to control
18809      the temporary stack reuse optimization.
18810
18811 `-ftrapv'
18812      This option generates traps for signed overflow on addition,
18813      subtraction, multiplication operations.
18814
18815 `-fwrapv'
18816      This option instructs the compiler to assume that signed arithmetic
18817      overflow of addition, subtraction and multiplication wraps around
18818      using twos-complement representation.  This flag enables some
18819      optimizations and disables others.  This option is enabled by
18820      default for the Java front end, as required by the Java language
18821      specification.
18822
18823 `-fexceptions'
18824      Enable exception handling.  Generates extra code needed to
18825      propagate exceptions.  For some targets, this implies GCC
18826      generates frame unwind information for all functions, which can
18827      produce significant data size overhead, although it does not
18828      affect execution.  If you do not specify this option, GCC enables
18829      it by default for languages like C++ that normally require
18830      exception handling, and disables it for languages like C that do
18831      not normally require it.  However, you may need to enable this
18832      option when compiling C code that needs to interoperate properly
18833      with exception handlers written in C++.  You may also wish to
18834      disable this option if you are compiling older C++ programs that
18835      don't use exception handling.
18836
18837 `-fnon-call-exceptions'
18838      Generate code that allows trapping instructions to throw
18839      exceptions.  Note that this requires platform-specific runtime
18840      support that does not exist everywhere.  Moreover, it only allows
18841      _trapping_ instructions to throw exceptions, i.e. memory
18842      references or floating-point instructions.  It does not allow
18843      exceptions to be thrown from arbitrary signal handlers such as
18844      `SIGALRM'.
18845
18846 `-fdelete-dead-exceptions'
18847      Consider that instructions that may throw exceptions but don't
18848      otherwise contribute to the execution of the program can be
18849      optimized away.  This option is enabled by default for the Ada
18850      front end, as permitted by the Ada language specification.
18851      Optimization passes that cause dead exceptions to be removed are
18852      enabled independently at different optimization levels.
18853
18854 `-funwind-tables'
18855      Similar to `-fexceptions', except that it just generates any needed
18856      static data, but does not affect the generated code in any other
18857      way.  You normally do not need to enable this option; instead, a
18858      language processor that needs this handling enables it on your
18859      behalf.
18860
18861 `-fasynchronous-unwind-tables'
18862      Generate unwind table in DWARF 2 format, if supported by target
18863      machine.  The table is exact at each instruction boundary, so it
18864      can be used for stack unwinding from asynchronous events (such as
18865      debugger or garbage collector).
18866
18867 `-fpcc-struct-return'
18868      Return "short" `struct' and `union' values in memory like longer
18869      ones, rather than in registers.  This convention is less
18870      efficient, but it has the advantage of allowing intercallability
18871      between GCC-compiled files and files compiled with other
18872      compilers, particularly the Portable C Compiler (pcc).
18873
18874      The precise convention for returning structures in memory depends
18875      on the target configuration macros.
18876
18877      Short structures and unions are those whose size and alignment
18878      match that of some integer type.
18879
18880      *Warning:* code compiled with the `-fpcc-struct-return' switch is
18881      not binary compatible with code compiled with the
18882      `-freg-struct-return' switch.  Use it to conform to a non-default
18883      application binary interface.
18884
18885 `-freg-struct-return'
18886      Return `struct' and `union' values in registers when possible.
18887      This is more efficient for small structures than
18888      `-fpcc-struct-return'.
18889
18890      If you specify neither `-fpcc-struct-return' nor
18891      `-freg-struct-return', GCC defaults to whichever convention is
18892      standard for the target.  If there is no standard convention, GCC
18893      defaults to `-fpcc-struct-return', except on targets where GCC is
18894      the principal compiler.  In those cases, we can choose the
18895      standard, and we chose the more efficient register return
18896      alternative.
18897
18898      *Warning:* code compiled with the `-freg-struct-return' switch is
18899      not binary compatible with code compiled with the
18900      `-fpcc-struct-return' switch.  Use it to conform to a non-default
18901      application binary interface.
18902
18903 `-fshort-enums'
18904      Allocate to an `enum' type only as many bytes as it needs for the
18905      declared range of possible values.  Specifically, the `enum' type
18906      is equivalent to the smallest integer type that has enough room.
18907
18908      *Warning:* the `-fshort-enums' switch causes GCC to generate code
18909      that is not binary compatible with code generated without that
18910      switch.  Use it to conform to a non-default application binary
18911      interface.
18912
18913 `-fshort-double'
18914      Use the same size for `double' as for `float'.
18915
18916      *Warning:* the `-fshort-double' switch causes GCC to generate code
18917      that is not binary compatible with code generated without that
18918      switch.  Use it to conform to a non-default application binary
18919      interface.
18920
18921 `-fshort-wchar'
18922      Override the underlying type for `wchar_t' to be `short unsigned
18923      int' instead of the default for the target.  This option is useful
18924      for building programs to run under WINE.
18925
18926      *Warning:* the `-fshort-wchar' switch causes GCC to generate code
18927      that is not binary compatible with code generated without that
18928      switch.  Use it to conform to a non-default application binary
18929      interface.
18930
18931 `-fno-common'
18932      In C code, controls the placement of uninitialized global
18933      variables.  Unix C compilers have traditionally permitted multiple
18934      definitions of such variables in different compilation units by
18935      placing the variables in a common block.  This is the behavior
18936      specified by `-fcommon', and is the default for GCC on most
18937      targets.  On the other hand, this behavior is not required by ISO
18938      C, and on some targets may carry a speed or code size penalty on
18939      variable references.  The `-fno-common' option specifies that the
18940      compiler should place uninitialized global variables in the data
18941      section of the object file, rather than generating them as common
18942      blocks.  This has the effect that if the same variable is declared
18943      (without `extern') in two different compilations, you get a
18944      multiple-definition error when you link them.  In this case, you
18945      must compile with `-fcommon' instead.  Compiling with
18946      `-fno-common' is useful on targets for which it provides better
18947      performance, or if you wish to verify that the program will work
18948      on other systems that always treat uninitialized variable
18949      declarations this way.
18950
18951 `-fno-ident'
18952      Ignore the `#ident' directive.
18953
18954 `-finhibit-size-directive'
18955      Don't output a `.size' assembler directive, or anything else that
18956      would cause trouble if the function is split in the middle, and the
18957      two halves are placed at locations far apart in memory.  This
18958      option is used when compiling `crtstuff.c'; you should not need to
18959      use it for anything else.
18960
18961 `-fverbose-asm'
18962      Put extra commentary information in the generated assembly code to
18963      make it more readable.  This option is generally only of use to
18964      those who actually need to read the generated assembly code
18965      (perhaps while debugging the compiler itself).
18966
18967      `-fno-verbose-asm', the default, causes the extra information to
18968      be omitted and is useful when comparing two assembler files.
18969
18970 `-frecord-gcc-switches'
18971      This switch causes the command line used to invoke the compiler to
18972      be recorded into the object file that is being created.  This
18973      switch is only implemented on some targets and the exact format of
18974      the recording is target and binary file format dependent, but it
18975      usually takes the form of a section containing ASCII text.  This
18976      switch is related to the `-fverbose-asm' switch, but that switch
18977      only records information in the assembler output file as comments,
18978      so it never reaches the object file.  See also
18979      `-grecord-gcc-switches' for another way of storing compiler
18980      options into the object file.
18981
18982 `-fpic'
18983      Generate position-independent code (PIC) suitable for use in a
18984      shared library, if supported for the target machine.  Such code
18985      accesses all constant addresses through a global offset table
18986      (GOT).  The dynamic loader resolves the GOT entries when the
18987      program starts (the dynamic loader is not part of GCC; it is part
18988      of the operating system).  If the GOT size for the linked
18989      executable exceeds a machine-specific maximum size, you get an
18990      error message from the linker indicating that `-fpic' does not
18991      work; in that case, recompile with `-fPIC' instead.  (These
18992      maximums are 8k on the SPARC and 32k on the m68k and RS/6000.  The
18993      386 has no such limit.)
18994
18995      Position-independent code requires special support, and therefore
18996      works only on certain machines.  For the 386, GCC supports PIC for
18997      System V but not for the Sun 386i.  Code generated for the IBM
18998      RS/6000 is always position-independent.
18999
19000      When this flag is set, the macros `__pic__' and `__PIC__' are
19001      defined to 1.
19002
19003 `-fPIC'
19004      If supported for the target machine, emit position-independent
19005      code, suitable for dynamic linking and avoiding any limit on the
19006      size of the global offset table.  This option makes a difference
19007      on the m68k, PowerPC and SPARC.
19008
19009      Position-independent code requires special support, and therefore
19010      works only on certain machines.
19011
19012      When this flag is set, the macros `__pic__' and `__PIC__' are
19013      defined to 2.
19014
19015 `-fpie'
19016 `-fPIE'
19017      These options are similar to `-fpic' and `-fPIC', but generated
19018      position independent code can be only linked into executables.
19019      Usually these options are used when `-pie' GCC option is used
19020      during linking.
19021
19022      `-fpie' and `-fPIE' both define the macros `__pie__' and
19023      `__PIE__'.  The macros have the value 1 for `-fpie' and 2 for
19024      `-fPIE'.
19025
19026 `-fno-jump-tables'
19027      Do not use jump tables for switch statements even where it would be
19028      more efficient than other code generation strategies.  This option
19029      is of use in conjunction with `-fpic' or `-fPIC' for building code
19030      that forms part of a dynamic linker and cannot reference the
19031      address of a jump table.  On some targets, jump tables do not
19032      require a GOT and this option is not needed.
19033
19034 `-ffixed-REG'
19035      Treat the register named REG as a fixed register; generated code
19036      should never refer to it (except perhaps as a stack pointer, frame
19037      pointer or in some other fixed role).
19038
19039      REG must be the name of a register.  The register names accepted
19040      are machine-specific and are defined in the `REGISTER_NAMES' macro
19041      in the machine description macro file.
19042
19043      This flag does not have a negative form, because it specifies a
19044      three-way choice.
19045
19046 `-fcall-used-REG'
19047      Treat the register named REG as an allocable register that is
19048      clobbered by function calls.  It may be allocated for temporaries
19049      or variables that do not live across a call.  Functions compiled
19050      this way do not save and restore the register REG.
19051
19052      It is an error to use this flag with the frame pointer or stack
19053      pointer.  Use of this flag for other registers that have fixed
19054      pervasive roles in the machine's execution model produces
19055      disastrous results.
19056
19057      This flag does not have a negative form, because it specifies a
19058      three-way choice.
19059
19060 `-fcall-saved-REG'
19061      Treat the register named REG as an allocable register saved by
19062      functions.  It may be allocated even for temporaries or variables
19063      that live across a call.  Functions compiled this way save and
19064      restore the register REG if they use it.
19065
19066      It is an error to use this flag with the frame pointer or stack
19067      pointer.  Use of this flag for other registers that have fixed
19068      pervasive roles in the machine's execution model produces
19069      disastrous results.
19070
19071      A different sort of disaster results from the use of this flag for
19072      a register in which function values may be returned.
19073
19074      This flag does not have a negative form, because it specifies a
19075      three-way choice.
19076
19077 `-fpack-struct[=N]'
19078      Without a value specified, pack all structure members together
19079      without holes.  When a value is specified (which must be a small
19080      power of two), pack structure members according to this value,
19081      representing the maximum alignment (that is, objects with default
19082      alignment requirements larger than this are output potentially
19083      unaligned at the next fitting location.
19084
19085      *Warning:* the `-fpack-struct' switch causes GCC to generate code
19086      that is not binary compatible with code generated without that
19087      switch.  Additionally, it makes the code suboptimal.  Use it to
19088      conform to a non-default application binary interface.
19089
19090 `-finstrument-functions'
19091      Generate instrumentation calls for entry and exit to functions.
19092      Just after function entry and just before function exit, the
19093      following profiling functions are called with the address of the
19094      current function and its call site.  (On some platforms,
19095      `__builtin_return_address' does not work beyond the current
19096      function, so the call site information may not be available to the
19097      profiling functions otherwise.)
19098
19099           void __cyg_profile_func_enter (void *this_fn,
19100                                          void *call_site);
19101           void __cyg_profile_func_exit  (void *this_fn,
19102                                          void *call_site);
19103
19104      The first argument is the address of the start of the current
19105      function, which may be looked up exactly in the symbol table.
19106
19107      This instrumentation is also done for functions expanded inline in
19108      other functions.  The profiling calls indicate where,
19109      conceptually, the inline function is entered and exited.  This
19110      means that addressable versions of such functions must be
19111      available.  If all your uses of a function are expanded inline,
19112      this may mean an additional expansion of code size.  If you use
19113      `extern inline' in your C code, an addressable version of such
19114      functions must be provided.  (This is normally the case anyway,
19115      but if you get lucky and the optimizer always expands the
19116      functions inline, you might have gotten away without providing
19117      static copies.)
19118
19119      A function may be given the attribute `no_instrument_function', in
19120      which case this instrumentation is not done.  This can be used, for
19121      example, for the profiling functions listed above, high-priority
19122      interrupt routines, and any functions from which the profiling
19123      functions cannot safely be called (perhaps signal handlers, if the
19124      profiling routines generate output or allocate memory).
19125
19126 `-finstrument-functions-exclude-file-list=FILE,FILE,...'
19127      Set the list of functions that are excluded from instrumentation
19128      (see the description of `-finstrument-functions').  If the file
19129      that contains a function definition matches with one of FILE, then
19130      that function is not instrumented.  The match is done on
19131      substrings: if the FILE parameter is a substring of the file name,
19132      it is considered to be a match.
19133
19134      For example:
19135
19136           -finstrument-functions-exclude-file-list=/bits/stl,include/sys
19137
19138      excludes any inline function defined in files whose pathnames
19139      contain `/bits/stl' or `include/sys'.
19140
19141      If, for some reason, you want to include letter `','' in one of
19142      SYM, write `'\,''. For example,
19143      `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the
19144      single quote surrounding the option).
19145
19146 `-finstrument-functions-exclude-function-list=SYM,SYM,...'
19147      This is similar to `-finstrument-functions-exclude-file-list', but
19148      this option sets the list of function names to be excluded from
19149      instrumentation.  The function name to be matched is its
19150      user-visible name, such as `vector<int> blah(const vector<int>
19151      &)', not the internal mangled name (e.g.,
19152      `_Z4blahRSt6vectorIiSaIiEE').  The match is done on substrings: if
19153      the SYM parameter is a substring of the function name, it is
19154      considered to be a match.  For C99 and C++ extended identifiers,
19155      the function name must be given in UTF-8, not using universal
19156      character names.
19157
19158 `-fstack-check'
19159      Generate code to verify that you do not go beyond the boundary of
19160      the stack.  You should specify this flag if you are running in an
19161      environment with multiple threads, but you only rarely need to
19162      specify it in a single-threaded environment since stack overflow
19163      is automatically detected on nearly all systems if there is only
19164      one stack.
19165
19166      Note that this switch does not actually cause checking to be done;
19167      the operating system or the language runtime must do that.  The
19168      switch causes generation of code to ensure that they see the stack
19169      being extended.
19170
19171      You can additionally specify a string parameter: `no' means no
19172      checking, `generic' means force the use of old-style checking,
19173      `specific' means use the best checking method and is equivalent to
19174      bare `-fstack-check'.
19175
19176      Old-style checking is a generic mechanism that requires no specific
19177      target support in the compiler but comes with the following
19178      drawbacks:
19179
19180        1. Modified allocation strategy for large objects: they are
19181           always allocated dynamically if their size exceeds a fixed
19182           threshold.
19183
19184        2. Fixed limit on the size of the static frame of functions:
19185           when it is topped by a particular function, stack checking is
19186           not reliable and a warning is issued by the compiler.
19187
19188        3. Inefficiency: because of both the modified allocation
19189           strategy and the generic implementation, code performance is
19190           hampered.
19191
19192      Note that old-style stack checking is also the fallback method for
19193      `specific' if no target support has been added in the compiler.
19194
19195 `-fstack-limit-register=REG'
19196 `-fstack-limit-symbol=SYM'
19197 `-fno-stack-limit'
19198      Generate code to ensure that the stack does not grow beyond a
19199      certain value, either the value of a register or the address of a
19200      symbol.  If a larger stack is required, a signal is raised at run
19201      time.  For most targets, the signal is raised before the stack
19202      overruns the boundary, so it is possible to catch the signal
19203      without taking special precautions.
19204
19205      For instance, if the stack starts at absolute address `0x80000000'
19206      and grows downwards, you can use the flags
19207      `-fstack-limit-symbol=__stack_limit' and
19208      `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit
19209      of 128KB.  Note that this may only work with the GNU linker.
19210
19211 `-fsplit-stack'
19212      Generate code to automatically split the stack before it overflows.
19213      The resulting program has a discontiguous stack which can only
19214      overflow if the program is unable to allocate any more memory.
19215      This is most useful when running threaded programs, as it is no
19216      longer necessary to calculate a good stack size to use for each
19217      thread.  This is currently only implemented for the i386 and
19218      x86_64 back ends running GNU/Linux.
19219
19220      When code compiled with `-fsplit-stack' calls code compiled
19221      without `-fsplit-stack', there may not be much stack space
19222      available for the latter code to run.  If compiling all code,
19223      including library code, with `-fsplit-stack' is not an option,
19224      then the linker can fix up these calls so that the code compiled
19225      without `-fsplit-stack' always has a large stack.  Support for
19226      this is implemented in the gold linker in GNU binutils release 2.21
19227      and later.
19228
19229 `-fleading-underscore'
19230      This option and its counterpart, `-fno-leading-underscore',
19231      forcibly change the way C symbols are represented in the object
19232      file.  One use is to help link with legacy assembly code.
19233
19234      *Warning:* the `-fleading-underscore' switch causes GCC to
19235      generate code that is not binary compatible with code generated
19236      without that switch.  Use it to conform to a non-default
19237      application binary interface.  Not all targets provide complete
19238      support for this switch.
19239
19240 `-ftls-model=MODEL'
19241      Alter the thread-local storage model to be used (*note
19242      Thread-Local::).  The MODEL argument should be one of
19243      `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'.
19244
19245      The default without `-fpic' is `initial-exec'; with `-fpic' the
19246      default is `global-dynamic'.
19247
19248 `-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED'
19249      Set the default ELF image symbol visibility to the specified
19250      option--all symbols are marked with this unless overridden within
19251      the code.  Using this feature can very substantially improve
19252      linking and load times of shared object libraries, produce more
19253      optimized code, provide near-perfect API export and prevent symbol
19254      clashes.  It is *strongly* recommended that you use this in any
19255      shared objects you distribute.
19256
19257      Despite the nomenclature, `default' always means public; i.e.,
19258      available to be linked against from outside the shared object.
19259      `protected' and `internal' are pretty useless in real-world usage
19260      so the only other commonly used option is `hidden'.  The default
19261      if `-fvisibility' isn't specified is `default', i.e., make every
19262      symbol public--this causes the same behavior as previous versions
19263      of GCC.
19264
19265      A good explanation of the benefits offered by ensuring ELF symbols
19266      have the correct visibility is given by "How To Write Shared
19267      Libraries" by Ulrich Drepper (which can be found at
19268      `http://people.redhat.com/~drepper/')--however a superior solution
19269      made possible by this option to marking things hidden when the
19270      default is public is to make the default hidden and mark things
19271      public.  This is the norm with DLLs on Windows and with
19272      `-fvisibility=hidden' and `__attribute__
19273      ((visibility("default")))' instead of `__declspec(dllexport)' you
19274      get almost identical semantics with identical syntax.  This is a
19275      great boon to those working with cross-platform projects.
19276
19277      For those adding visibility support to existing code, you may find
19278      `#pragma GCC visibility' of use.  This works by you enclosing the
19279      declarations you wish to set visibility for with (for example)
19280      `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility
19281      pop'.  Bear in mind that symbol visibility should be viewed *as
19282      part of the API interface contract* and thus all new code should
19283      always specify visibility when it is not the default; i.e.,
19284      declarations only for use within the local DSO should *always* be
19285      marked explicitly as hidden as so to avoid PLT indirection
19286      overheads--making this abundantly clear also aids readability and
19287      self-documentation of the code.  Note that due to ISO C++
19288      specification requirements, `operator new' and `operator delete'
19289      must always be of default visibility.
19290
19291      Be aware that headers from outside your project, in particular
19292      system headers and headers from any other library you use, may not
19293      be expecting to be compiled with visibility other than the
19294      default.  You may need to explicitly say `#pragma GCC visibility
19295      push(default)' before including any such headers.
19296
19297      `extern' declarations are not affected by `-fvisibility', so a lot
19298      of code can be recompiled with `-fvisibility=hidden' with no
19299      modifications.  However, this means that calls to `extern'
19300      functions with no explicit visibility use the PLT, so it is more
19301      effective to use `__attribute ((visibility))' and/or `#pragma GCC
19302      visibility' to tell the compiler which `extern' declarations
19303      should be treated as hidden.
19304
19305      Note that `-fvisibility' does affect C++ vague linkage entities.
19306      This means that, for instance, an exception class that is be
19307      thrown between DSOs must be explicitly marked with default
19308      visibility so that the `type_info' nodes are unified between the
19309      DSOs.
19310
19311      An overview of these techniques, their benefits and how to use them
19312      is at `http://gcc.gnu.org/wiki/Visibility'.
19313
19314 `-fstrict-volatile-bitfields'
19315      This option should be used if accesses to volatile bit-fields (or
19316      other structure fields, although the compiler usually honors those
19317      types anyway) should use a single access of the width of the
19318      field's type, aligned to a natural alignment if possible.  For
19319      example, targets with memory-mapped peripheral registers might
19320      require all such accesses to be 16 bits wide; with this flag you
19321      can declare all peripheral bit-fields as `unsigned short'
19322      (assuming short is 16 bits on these targets) to force GCC to use
19323      16-bit accesses instead of, perhaps, a more efficient 32-bit
19324      access.
19325
19326      If this option is disabled, the compiler uses the most efficient
19327      instruction.  In the previous example, that might be a 32-bit load
19328      instruction, even though that accesses bytes that do not contain
19329      any portion of the bit-field, or memory-mapped registers unrelated
19330      to the one being updated.
19331
19332      If the target requires strict alignment, and honoring the field
19333      type would require violating this alignment, a warning is issued.
19334      If the field has `packed' attribute, the access is done without
19335      honoring the field type.  If the field doesn't have `packed'
19336      attribute, the access is done honoring the field type.  In both
19337      cases, GCC assumes that the user knows something about the target
19338      hardware that it is unaware of.
19339
19340      The default value of this option is determined by the application
19341      binary interface for the target processor.
19342
19343 `-fsync-libcalls'
19344      This option controls whether any out-of-line instance of the
19345      `__sync' family of functions may be used to implement the C++11
19346      `__atomic' family of functions.
19347
19348      The default value of this option is enabled, thus the only useful
19349      form of the option is `-fno-sync-libcalls'.  This option is used in
19350      the implementation of the `libatomic' runtime library.
19351
19352
19353 \1f
19354 File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Code Gen Options,  Up: Invoking GCC
19355
19356 3.19 Environment Variables Affecting GCC
19357 ========================================
19358
19359 This section describes several environment variables that affect how GCC
19360 operates.  Some of them work by specifying directories or prefixes to
19361 use when searching for various kinds of files.  Some are used to
19362 specify other aspects of the compilation environment.
19363
19364  Note that you can also specify places to search using options such as
19365 `-B', `-I' and `-L' (*note Directory Options::).  These take precedence
19366 over places specified using environment variables, which in turn take
19367 precedence over those specified by the configuration of GCC.  *Note
19368 Controlling the Compilation Driver `gcc': (gccint)Driver.
19369
19370 `LANG'
19371 `LC_CTYPE'
19372 `LC_MESSAGES'
19373 `LC_ALL'
19374      These environment variables control the way that GCC uses
19375      localization information which allows GCC to work with different
19376      national conventions.  GCC inspects the locale categories
19377      `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so.
19378      These locale categories can be set to any value supported by your
19379      installation.  A typical value is `en_GB.UTF-8' for English in the
19380      United Kingdom encoded in UTF-8.
19381
19382      The `LC_CTYPE' environment variable specifies character
19383      classification.  GCC uses it to determine the character boundaries
19384      in a string; this is needed for some multibyte encodings that
19385      contain quote and escape characters that are otherwise interpreted
19386      as a string end or escape.
19387
19388      The `LC_MESSAGES' environment variable specifies the language to
19389      use in diagnostic messages.
19390
19391      If the `LC_ALL' environment variable is set, it overrides the value
19392      of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and
19393      `LC_MESSAGES' default to the value of the `LANG' environment
19394      variable.  If none of these variables are set, GCC defaults to
19395      traditional C English behavior.
19396
19397 `TMPDIR'
19398      If `TMPDIR' is set, it specifies the directory to use for temporary
19399      files.  GCC uses temporary files to hold the output of one stage of
19400      compilation which is to be used as input to the next stage: for
19401      example, the output of the preprocessor, which is the input to the
19402      compiler proper.
19403
19404 `GCC_COMPARE_DEBUG'
19405      Setting `GCC_COMPARE_DEBUG' is nearly equivalent to passing
19406      `-fcompare-debug' to the compiler driver.  See the documentation
19407      of this option for more details.
19408
19409 `GCC_EXEC_PREFIX'
19410      If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
19411      names of the subprograms executed by the compiler.  No slash is
19412      added when this prefix is combined with the name of a subprogram,
19413      but you can specify a prefix that ends with a slash if you wish.
19414
19415      If `GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an
19416      appropriate prefix to use based on the pathname it is invoked with.
19417
19418      If GCC cannot find the subprogram using the specified prefix, it
19419      tries looking in the usual places for the subprogram.
19420
19421      The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where
19422      PREFIX is the prefix to the installed compiler. In many cases
19423      PREFIX is the value of `prefix' when you ran the `configure'
19424      script.
19425
19426      Other prefixes specified with `-B' take precedence over this
19427      prefix.
19428
19429      This prefix is also used for finding files such as `crt0.o' that
19430      are used for linking.
19431
19432      In addition, the prefix is used in an unusual way in finding the
19433      directories to search for header files.  For each of the standard
19434      directories whose name normally begins with `/usr/local/lib/gcc'
19435      (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries
19436      replacing that beginning with the specified prefix to produce an
19437      alternate directory name.  Thus, with `-Bfoo/', GCC searches
19438      `foo/bar' just before it searches the standard directory
19439      `/usr/local/lib/bar'.  If a standard directory begins with the
19440      configured PREFIX then the value of PREFIX is replaced by
19441      `GCC_EXEC_PREFIX' when looking for header files.
19442
19443 `COMPILER_PATH'
19444      The value of `COMPILER_PATH' is a colon-separated list of
19445      directories, much like `PATH'.  GCC tries the directories thus
19446      specified when searching for subprograms, if it can't find the
19447      subprograms using `GCC_EXEC_PREFIX'.
19448
19449 `LIBRARY_PATH'
19450      The value of `LIBRARY_PATH' is a colon-separated list of
19451      directories, much like `PATH'.  When configured as a native
19452      compiler, GCC tries the directories thus specified when searching
19453      for special linker files, if it can't find them using
19454      `GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
19455      when searching for ordinary libraries for the `-l' option (but
19456      directories specified with `-L' come first).
19457
19458 `LANG'
19459      This variable is used to pass locale information to the compiler.
19460      One way in which this information is used is to determine the
19461      character set to be used when character literals, string literals
19462      and comments are parsed in C and C++.  When the compiler is
19463      configured to allow multibyte characters, the following values for
19464      `LANG' are recognized:
19465
19466     `C-JIS'
19467           Recognize JIS characters.
19468
19469     `C-SJIS'
19470           Recognize SJIS characters.
19471
19472     `C-EUCJP'
19473           Recognize EUCJP characters.
19474
19475      If `LANG' is not defined, or if it has some other value, then the
19476      compiler uses `mblen' and `mbtowc' as defined by the default
19477      locale to recognize and translate multibyte characters.
19478
19479 Some additional environment variables affect the behavior of the
19480 preprocessor.
19481
19482 `CPATH'
19483 `C_INCLUDE_PATH'
19484 `CPLUS_INCLUDE_PATH'
19485 `OBJC_INCLUDE_PATH'
19486      Each variable's value is a list of directories separated by a
19487      special character, much like `PATH', in which to look for header
19488      files.  The special character, `PATH_SEPARATOR', is
19489      target-dependent and determined at GCC build time.  For Microsoft
19490      Windows-based targets it is a semicolon, and for almost all other
19491      targets it is a colon.
19492
19493      `CPATH' specifies a list of directories to be searched as if
19494      specified with `-I', but after any paths given with `-I' options
19495      on the command line.  This environment variable is used regardless
19496      of which language is being preprocessed.
19497
19498      The remaining environment variables apply only when preprocessing
19499      the particular language indicated.  Each specifies a list of
19500      directories to be searched as if specified with `-isystem', but
19501      after any paths given with `-isystem' options on the command line.
19502
19503      In all these variables, an empty element instructs the compiler to
19504      search its current working directory.  Empty elements can appear
19505      at the beginning or end of a path.  For instance, if the value of
19506      `CPATH' is `:/special/include', that has the same effect as
19507      `-I. -I/special/include'.
19508
19509 `DEPENDENCIES_OUTPUT'
19510      If this variable is set, its value specifies how to output
19511      dependencies for Make based on the non-system header files
19512      processed by the compiler.  System header files are ignored in the
19513      dependency output.
19514
19515      The value of `DEPENDENCIES_OUTPUT' can be just a file name, in
19516      which case the Make rules are written to that file, guessing the
19517      target name from the source file name.  Or the value can have the
19518      form `FILE TARGET', in which case the rules are written to file
19519      FILE using TARGET as the target name.
19520
19521      In other words, this environment variable is equivalent to
19522      combining the options `-MM' and `-MF' (*note Preprocessor
19523      Options::), with an optional `-MT' switch too.
19524
19525 `SUNPRO_DEPENDENCIES'
19526      This variable is the same as `DEPENDENCIES_OUTPUT' (see above),
19527      except that system header files are not ignored, so it implies
19528      `-M' rather than `-MM'.  However, the dependence on the main input
19529      file is omitted.  *Note Preprocessor Options::.
19530
19531 \1f
19532 File: gcc.info,  Node: Precompiled Headers,  Prev: Environment Variables,  Up: Invoking GCC
19533
19534 3.20 Using Precompiled Headers
19535 ==============================
19536
19537 Often large projects have many header files that are included in every
19538 source file.  The time the compiler takes to process these header files
19539 over and over again can account for nearly all of the time required to
19540 build the project.  To make builds faster, GCC allows you to
19541 "precompile" a header file.
19542
19543  To create a precompiled header file, simply compile it as you would any
19544 other file, if necessary using the `-x' option to make the driver treat
19545 it as a C or C++ header file.  You may want to use a tool like `make'
19546 to keep the precompiled header up-to-date when the headers it contains
19547 change.
19548
19549  A precompiled header file is searched for when `#include' is seen in
19550 the compilation.  As it searches for the included file (*note Search
19551 Path: (cpp)Search Path.) the compiler looks for a precompiled header in
19552 each directory just before it looks for the include file in that
19553 directory.  The name searched for is the name specified in the
19554 `#include' with `.gch' appended.  If the precompiled header file can't
19555 be used, it is ignored.
19556
19557  For instance, if you have `#include "all.h"', and you have `all.h.gch'
19558 in the same directory as `all.h', then the precompiled header file is
19559 used if possible, and the original header is used otherwise.
19560
19561  Alternatively, you might decide to put the precompiled header file in a
19562 directory and use `-I' to ensure that directory is searched before (or
19563 instead of) the directory containing the original header.  Then, if you
19564 want to check that the precompiled header file is always used, you can
19565 put a file of the same name as the original header in this directory
19566 containing an `#error' command.
19567
19568  This also works with `-include'.  So yet another way to use
19569 precompiled headers, good for projects not designed with precompiled
19570 header files in mind, is to simply take most of the header files used by
19571 a project, include them from another header file, precompile that header
19572 file, and `-include' the precompiled header.  If the header files have
19573 guards against multiple inclusion, they are skipped because they've
19574 already been included (in the precompiled header).
19575
19576  If you need to precompile the same header file for different
19577 languages, targets, or compiler options, you can instead make a
19578 _directory_ named like `all.h.gch', and put each precompiled header in
19579 the directory, perhaps using `-o'.  It doesn't matter what you call the
19580 files in the directory; every precompiled header in the directory is
19581 considered.  The first precompiled header encountered in the directory
19582 that is valid for this compilation is used; they're searched in no
19583 particular order.
19584
19585  There are many other possibilities, limited only by your imagination,
19586 good sense, and the constraints of your build system.
19587
19588  A precompiled header file can be used only when these conditions apply:
19589
19590    * Only one precompiled header can be used in a particular
19591      compilation.
19592
19593    * A precompiled header can't be used once the first C token is seen.
19594      You can have preprocessor directives before a precompiled header;
19595      you cannot include a precompiled header from inside another header.
19596
19597    * The precompiled header file must be produced for the same language
19598      as the current compilation.  You can't use a C precompiled header
19599      for a C++ compilation.
19600
19601    * The precompiled header file must have been produced by the same
19602      compiler binary as the current compilation is using.
19603
19604    * Any macros defined before the precompiled header is included must
19605      either be defined in the same way as when the precompiled header
19606      was generated, or must not affect the precompiled header, which
19607      usually means that they don't appear in the precompiled header at
19608      all.
19609
19610      The `-D' option is one way to define a macro before a precompiled
19611      header is included; using a `#define' can also do it.  There are
19612      also some options that define macros implicitly, like `-O' and
19613      `-Wdeprecated'; the same rule applies to macros defined this way.
19614
19615    * If debugging information is output when using the precompiled
19616      header, using `-g' or similar, the same kind of debugging
19617      information must have been output when building the precompiled
19618      header.  However, a precompiled header built using `-g' can be
19619      used in a compilation when no debugging information is being
19620      output.
19621
19622    * The same `-m' options must generally be used when building and
19623      using the precompiled header.  *Note Submodel Options::, for any
19624      cases where this rule is relaxed.
19625
19626    * Each of the following options must be the same when building and
19627      using the precompiled header:
19628
19629           -fexceptions
19630
19631    * Some other command-line options starting with `-f', `-p', or `-O'
19632      must be defined in the same way as when the precompiled header was
19633      generated.  At present, it's not clear which options are safe to
19634      change and which are not; the safest choice is to use exactly the
19635      same options when generating and using the precompiled header.
19636      The following are known to be safe:
19637
19638           -fmessage-length=  -fpreprocessed  -fsched-interblock
19639           -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous
19640           -fsched-verbose=NUMBER  -fschedule-insns  -fvisibility=
19641           -pedantic-errors
19642
19643
19644  For all of these except the last, the compiler automatically ignores
19645 the precompiled header if the conditions aren't met.  If you find an
19646 option combination that doesn't work and doesn't cause the precompiled
19647 header to be ignored, please consider filing a bug report, see *note
19648 Bugs::.
19649
19650  If you do use differing options when generating and using the
19651 precompiled header, the actual behavior is a mixture of the behavior
19652 for the options.  For instance, if you use `-g' to generate the
19653 precompiled header but not when using it, you may or may not get
19654 debugging information for routines in the precompiled header.
19655
19656 \1f
19657 File: gcc.info,  Node: C Implementation,  Next: C++ Implementation,  Prev: Invoking GCC,  Up: Top
19658
19659 4 C Implementation-defined behavior
19660 ***********************************
19661
19662 A conforming implementation of ISO C is required to document its choice
19663 of behavior in each of the areas that are designated "implementation
19664 defined".  The following lists all such areas, along with the section
19665 numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards.
19666 Some areas are only implementation-defined in one version of the
19667 standard.
19668
19669  Some choices depend on the externally determined ABI for the platform
19670 (including standard character encodings) which GCC follows; these are
19671 listed as "determined by ABI" below.  *Note Binary Compatibility:
19672 Compatibility, and `http://gcc.gnu.org/readings.html'.  Some choices
19673 are documented in the preprocessor manual.  *Note
19674 Implementation-defined behavior: (cpp)Implementation-defined behavior.
19675 Some choices are made by the library and operating system (or other
19676 environment when compiling for a freestanding environment); refer to
19677 their documentation for details.
19678
19679 * Menu:
19680
19681 * Translation implementation::
19682 * Environment implementation::
19683 * Identifiers implementation::
19684 * Characters implementation::
19685 * Integers implementation::
19686 * Floating point implementation::
19687 * Arrays and pointers implementation::
19688 * Hints implementation::
19689 * Structures unions enumerations and bit-fields implementation::
19690 * Qualifiers implementation::
19691 * Declarators implementation::
19692 * Statements implementation::
19693 * Preprocessing directives implementation::
19694 * Library functions implementation::
19695 * Architecture implementation::
19696 * Locale-specific behavior implementation::
19697
19698 \1f
19699 File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
19700
19701 4.1 Translation
19702 ===============
19703
19704    * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99
19705      5.1.1.3).'
19706
19707      Diagnostics consist of all the output sent to stderr by GCC.
19708
19709    * `Whether each nonempty sequence of white-space characters other
19710      than new-line is retained or replaced by one space character in
19711      translation phase 3 (C90 and C99 5.1.1.2).'
19712
19713      *Note Implementation-defined behavior: (cpp)Implementation-defined
19714      behavior.
19715
19716
19717 \1f
19718 File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
19719
19720 4.2 Environment
19721 ===============
19722
19723 The behavior of most of these points are dependent on the implementation
19724 of the C library, and are not defined by GCC itself.
19725
19726    * `The mapping between physical source file multibyte characters and
19727      the source character set in translation phase 1 (C90 and C99
19728      5.1.1.2).'
19729
19730      *Note Implementation-defined behavior: (cpp)Implementation-defined
19731      behavior.
19732
19733
19734 \1f
19735 File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
19736
19737 4.3 Identifiers
19738 ===============
19739
19740    * `Which additional multibyte characters may appear in identifiers
19741      and their correspondence to universal character names (C99 6.4.2).'
19742
19743      *Note Implementation-defined behavior: (cpp)Implementation-defined
19744      behavior.
19745
19746    * `The number of significant initial characters in an identifier
19747      (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).'
19748
19749      For internal names, all characters are significant.  For external
19750      names, the number of significant characters are defined by the
19751      linker; for almost all targets, all characters are significant.
19752
19753    * `Whether case distinctions are significant in an identifier with
19754      external linkage (C90 6.1.2).'
19755
19756      This is a property of the linker.  C99 requires that case
19757      distinctions are always significant in identifiers with external
19758      linkage and systems without this property are not supported by GCC.
19759
19760
19761 \1f
19762 File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
19763
19764 4.4 Characters
19765 ==============
19766
19767    * `The number of bits in a byte (C90 3.4, C99 3.6).'
19768
19769      Determined by ABI.
19770
19771    * `The values of the members of the execution character set (C90 and
19772      C99 5.2.1).'
19773
19774      Determined by ABI.
19775
19776    * `The unique value of the member of the execution character set
19777      produced for each of the standard alphabetic escape sequences (C90
19778      and C99 5.2.2).'
19779
19780      Determined by ABI.
19781
19782    * `The value of a `char' object into which has been stored any
19783      character other than a member of the basic execution character set
19784      (C90 6.1.2.5, C99 6.2.5).'
19785
19786      Determined by ABI.
19787
19788    * `Which of `signed char' or `unsigned char' has the same range,
19789      representation, and behavior as "plain" `char' (C90 6.1.2.5, C90
19790      6.2.1.1, C99 6.2.5, C99 6.3.1.1).'
19791
19792      Determined by ABI.  The options `-funsigned-char' and
19793      `-fsigned-char' change the default.  *Note Options Controlling C
19794      Dialect: C Dialect Options.
19795
19796    * `The mapping of members of the source character set (in character
19797      constants and string literals) to members of the execution
19798      character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).'
19799
19800      Determined by ABI.
19801
19802    * `The value of an integer character constant containing more than
19803      one character or containing a character or escape sequence that
19804      does not map to a single-byte execution character (C90 6.1.3.4,
19805      C99 6.4.4.4).'
19806
19807      *Note Implementation-defined behavior: (cpp)Implementation-defined
19808      behavior.
19809
19810    * `The value of a wide character constant containing more than one
19811      multibyte character, or containing a multibyte character or escape
19812      sequence not represented in the extended execution character set
19813      (C90 6.1.3.4, C99 6.4.4.4).'
19814
19815      *Note Implementation-defined behavior: (cpp)Implementation-defined
19816      behavior.
19817
19818    * `The current locale used to convert a wide character constant
19819      consisting of a single multibyte character that maps to a member
19820      of the extended execution character set into a corresponding wide
19821      character code (C90 6.1.3.4, C99 6.4.4.4).'
19822
19823      *Note Implementation-defined behavior: (cpp)Implementation-defined
19824      behavior.
19825
19826    * `The current locale used to convert a wide string literal into
19827      corresponding wide character codes (C90 6.1.4, C99 6.4.5).'
19828
19829      *Note Implementation-defined behavior: (cpp)Implementation-defined
19830      behavior.
19831
19832    * `The value of a string literal containing a multibyte character or
19833      escape sequence not represented in the execution character set
19834      (C90 6.1.4, C99 6.4.5).'
19835
19836      *Note Implementation-defined behavior: (cpp)Implementation-defined
19837      behavior.
19838
19839 \1f
19840 File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
19841
19842 4.5 Integers
19843 ============
19844
19845    * `Any extended integer types that exist in the implementation (C99
19846      6.2.5).'
19847
19848      GCC does not support any extended integer types.
19849
19850    * `Whether signed integer types are represented using sign and
19851      magnitude, two's complement, or one's complement, and whether the
19852      extraordinary value is a trap representation or an ordinary value
19853      (C99 6.2.6.2).'
19854
19855      GCC supports only two's complement integer types, and all bit
19856      patterns are ordinary values.
19857
19858    * `The rank of any extended integer type relative to another extended
19859      integer type with the same precision (C99 6.3.1.1).'
19860
19861      GCC does not support any extended integer types.
19862
19863    * `The result of, or the signal raised by, converting an integer to a
19864      signed integer type when the value cannot be represented in an
19865      object of that type (C90 6.2.1.2, C99 6.3.1.3).'
19866
19867      For conversion to a type of width N, the value is reduced modulo
19868      2^N to be within range of the type; no signal is raised.
19869
19870    * `The results of some bitwise operations on signed integers (C90
19871      6.3, C99 6.5).'
19872
19873      Bitwise operators act on the representation of the value including
19874      both the sign and value bits, where the sign bit is considered
19875      immediately above the highest-value value bit.  Signed `>>' acts
19876      on negative numbers by sign extension.
19877
19878      GCC does not use the latitude given in C99 only to treat certain
19879      aspects of signed `<<' as undefined, but this is subject to change.
19880
19881    * `The sign of the remainder on integer division (C90 6.3.5).'
19882
19883      GCC always follows the C99 requirement that the result of division
19884      is truncated towards zero.
19885
19886
19887 \1f
19888 File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
19889
19890 4.6 Floating point
19891 ==================
19892
19893    * `The accuracy of the floating-point operations and of the library
19894      functions in `<math.h>' and `<complex.h>' that return
19895      floating-point results (C90 and C99 5.2.4.2.2).'
19896
19897      The accuracy is unknown.
19898
19899    * `The rounding behaviors characterized by non-standard values of
19900      `FLT_ROUNDS'  (C90 and C99 5.2.4.2.2).'
19901
19902      GCC does not use such values.
19903
19904    * `The evaluation methods characterized by non-standard negative
19905      values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).'
19906
19907      GCC does not use such values.
19908
19909    * `The direction of rounding when an integer is converted to a
19910      floating-point number that cannot exactly represent the original
19911      value (C90 6.2.1.3, C99 6.3.1.4).'
19912
19913      C99 Annex F is followed.
19914
19915    * `The direction of rounding when a floating-point number is
19916      converted to a narrower floating-point number (C90 6.2.1.4, C99
19917      6.3.1.5).'
19918
19919      C99 Annex F is followed.
19920
19921    * `How the nearest representable value or the larger or smaller
19922      representable value immediately adjacent to the nearest
19923      representable value is chosen for certain floating constants (C90
19924      6.1.3.1, C99 6.4.4.2).'
19925
19926      C99 Annex F is followed.
19927
19928    * `Whether and how floating expressions are contracted when not
19929      disallowed by the `FP_CONTRACT' pragma (C99 6.5).'
19930
19931      Expressions are currently only contracted if
19932      `-funsafe-math-optimizations' or `-ffast-math' are used.  This is
19933      subject to change.
19934
19935    * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).'
19936
19937      This pragma is not implemented, but the default is to "off" unless
19938      `-frounding-math' is used in which case it is "on".
19939
19940    * `Additional floating-point exceptions, rounding modes,
19941      environments, and classifications, and their macro names (C99 7.6,
19942      C99 7.12).'
19943
19944      This is dependent on the implementation of the C library, and is
19945      not defined by GCC itself.
19946
19947    * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).'
19948
19949      This pragma is not implemented.  Expressions are currently only
19950      contracted if `-funsafe-math-optimizations' or `-ffast-math' are
19951      used.  This is subject to change.
19952
19953    * `Whether the "inexact" floating-point exception can be raised when
19954      the rounded result actually does equal the mathematical result in
19955      an IEC 60559 conformant implementation (C99 F.9).'
19956
19957      This is dependent on the implementation of the C library, and is
19958      not defined by GCC itself.
19959
19960    * `Whether the "underflow" (and "inexact") floating-point exception
19961      can be raised when a result is tiny but not inexact in an IEC
19962      60559 conformant implementation (C99 F.9).'
19963
19964      This is dependent on the implementation of the C library, and is
19965      not defined by GCC itself.
19966
19967
19968 \1f
19969 File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
19970
19971 4.7 Arrays and pointers
19972 =======================
19973
19974    * `The result of converting a pointer to an integer or vice versa
19975      (C90 6.3.4, C99 6.3.2.3).'
19976
19977      A cast from pointer to integer discards most-significant bits if
19978      the pointer representation is larger than the integer type,
19979      sign-extends(1) if the pointer representation is smaller than the
19980      integer type, otherwise the bits are unchanged.
19981
19982      A cast from integer to pointer discards most-significant bits if
19983      the pointer representation is smaller than the integer type,
19984      extends according to the signedness of the integer type if the
19985      pointer representation is larger than the integer type, otherwise
19986      the bits are unchanged.
19987
19988      When casting from pointer to integer and back again, the resulting
19989      pointer must reference the same object as the original pointer,
19990      otherwise the behavior is undefined.  That is, one may not use
19991      integer arithmetic to avoid the undefined behavior of pointer
19992      arithmetic as proscribed in C99 6.5.6/8.
19993
19994    * `The size of the result of subtracting two pointers to elements of
19995      the same array (C90 6.3.6, C99 6.5.6).'
19996
19997      The value is as specified in the standard and the type is
19998      determined by the ABI.
19999
20000
20001  ---------- Footnotes ----------
20002
20003  (1) Future versions of GCC may zero-extend, or use a target-defined
20004 `ptr_extend' pattern.  Do not rely on sign extension.
20005
20006 \1f
20007 File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
20008
20009 4.8 Hints
20010 =========
20011
20012    * `The extent to which suggestions made by using the `register'
20013      storage-class specifier are effective (C90 6.5.1, C99 6.7.1).'
20014
20015      The `register' specifier affects code generation only in these
20016      ways:
20017
20018         * When used as part of the register variable extension, see
20019           *note Explicit Reg Vars::.
20020
20021         * When `-O0' is in use, the compiler allocates distinct stack
20022           memory for all variables that do not have the `register'
20023           storage-class specifier; if `register' is specified, the
20024           variable may have a shorter lifespan than the code would
20025           indicate and may never be placed in memory.
20026
20027         * On some rare x86 targets, `setjmp' doesn't save the registers
20028           in all circumstances.  In those cases, GCC doesn't allocate
20029           any variables in registers unless they are marked `register'.
20030
20031
20032    * `The extent to which suggestions made by using the inline function
20033      specifier are effective (C99 6.7.4).'
20034
20035      GCC will not inline any functions if the `-fno-inline' option is
20036      used or if `-O0' is used.  Otherwise, GCC may still be unable to
20037      inline a function for many reasons; the `-Winline' option may be
20038      used to determine if a function has not been inlined and why not.
20039
20040
20041 \1f
20042 File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
20043
20044 4.9 Structures, unions, enumerations, and bit-fields
20045 ====================================================
20046
20047    * `A member of a union object is accessed using a member of a
20048      different type (C90 6.3.2.3).'
20049
20050      The relevant bytes of the representation of the object are treated
20051      as an object of the type used for the access.  *Note
20052      Type-punning::.  This may be a trap representation.
20053
20054    * `Whether a "plain" `int' bit-field is treated as a `signed int'
20055      bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90
20056      6.5.2.1, C99 6.7.2, C99 6.7.2.1).'
20057
20058      By default it is treated as `signed int' but this may be changed
20059      by the `-funsigned-bitfields' option.
20060
20061    * `Allowable bit-field types other than `_Bool', `signed int', and
20062      `unsigned int' (C99 6.7.2.1).'
20063
20064      No other types are permitted in strictly conforming mode.
20065
20066    * `Whether a bit-field can straddle a storage-unit boundary (C90
20067      6.5.2.1, C99 6.7.2.1).'
20068
20069      Determined by ABI.
20070
20071    * `The order of allocation of bit-fields within a unit (C90 6.5.2.1,
20072      C99 6.7.2.1).'
20073
20074      Determined by ABI.
20075
20076    * `The alignment of non-bit-field members of structures (C90
20077      6.5.2.1, C99 6.7.2.1).'
20078
20079      Determined by ABI.
20080
20081    * `The integer type compatible with each enumerated type (C90
20082      6.5.2.2, C99 6.7.2.2).'
20083
20084      Normally, the type is `unsigned int' if there are no negative
20085      values in the enumeration, otherwise `int'.  If `-fshort-enums' is
20086      specified, then if there are negative values it is the first of
20087      `signed char', `short' and `int' that can represent all the
20088      values, otherwise it is the first of `unsigned char', `unsigned
20089      short' and `unsigned int' that can represent all the values.
20090
20091      On some targets, `-fshort-enums' is the default; this is
20092      determined by the ABI.
20093
20094
20095 \1f
20096 File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
20097
20098 4.10 Qualifiers
20099 ===============
20100
20101    * `What constitutes an access to an object that has
20102      volatile-qualified type (C90 6.5.3, C99 6.7.3).'
20103
20104      Such an object is normally accessed by pointers and used for
20105      accessing hardware.  In most expressions, it is intuitively
20106      obvious what is a read and what is a write.  For example
20107
20108           volatile int *dst = SOMEVALUE;
20109           volatile int *src = SOMEOTHERVALUE;
20110           *dst = *src;
20111
20112      will cause a read of the volatile object pointed to by SRC and
20113      store the value into the volatile object pointed to by DST.  There
20114      is no guarantee that these reads and writes are atomic, especially
20115      for objects larger than `int'.
20116
20117      However, if the volatile storage is not being modified, and the
20118      value of the volatile storage is not used, then the situation is
20119      less obvious.  For example
20120
20121           volatile int *src = SOMEVALUE;
20122           *src;
20123
20124      According to the C standard, such an expression is an rvalue whose
20125      type is the unqualified version of its original type, i.e. `int'.
20126      Whether GCC interprets this as a read of the volatile object being
20127      pointed to or only as a request to evaluate the expression for its
20128      side-effects depends on this type.
20129
20130      If it is a scalar type, or on most targets an aggregate type whose
20131      only member object is of a scalar type, or a union type whose
20132      member objects are of scalar types, the expression is interpreted
20133      by GCC as a read of the volatile object; in the other cases, the
20134      expression is only evaluated for its side-effects.
20135
20136
20137 \1f
20138 File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
20139
20140 4.11 Declarators
20141 ================
20142
20143    * `The maximum number of declarators that may modify an arithmetic,
20144      structure or union type (C90 6.5.4).'
20145
20146      GCC is only limited by available memory.
20147
20148
20149 \1f
20150 File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation
20151
20152 4.12 Statements
20153 ===============
20154
20155    * `The maximum number of `case' values in a `switch' statement (C90
20156      6.6.4.2).'
20157
20158      GCC is only limited by available memory.
20159
20160
20161 \1f
20162 File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation
20163
20164 4.13 Preprocessing directives
20165 =============================
20166
20167 *Note Implementation-defined behavior: (cpp)Implementation-defined
20168 behavior, for details of these aspects of implementation-defined
20169 behavior.
20170
20171    * `How sequences in both forms of header names are mapped to headers
20172      or external source file names (C90 6.1.7, C99 6.4.7).'
20173
20174    * `Whether the value of a character constant in a constant expression
20175      that controls conditional inclusion matches the value of the same
20176      character constant in the execution character set (C90 6.8.1, C99
20177      6.10.1).'
20178
20179    * `Whether the value of a single-character character constant in a
20180      constant expression that controls conditional inclusion may have a
20181      negative value (C90 6.8.1, C99 6.10.1).'
20182
20183    * `The places that are searched for an included `<>' delimited
20184      header, and how the places are specified or the header is
20185      identified (C90 6.8.2, C99 6.10.2).'
20186
20187    * `How the named source file is searched for in an included `""'
20188      delimited header (C90 6.8.2, C99 6.10.2).'
20189
20190    * `The method by which preprocessing tokens (possibly resulting from
20191      macro expansion) in a `#include' directive are combined into a
20192      header name (C90 6.8.2, C99 6.10.2).'
20193
20194    * `The nesting limit for `#include' processing (C90 6.8.2, C99
20195      6.10.2).'
20196
20197    * `Whether the `#' operator inserts a `\' character before the `\'
20198      character that begins a universal character name in a character
20199      constant or string literal (C99 6.10.3.2).'
20200
20201    * `The behavior on each recognized non-`STDC #pragma' directive (C90
20202      6.8.6, C99 6.10.6).'
20203
20204      *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by
20205      GCC on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
20206      details of target-specific pragmas.
20207
20208    * `The definitions for `__DATE__' and `__TIME__' when respectively,
20209      the date and time of translation are not available (C90 6.8.8, C99
20210      6.10.8).'
20211
20212
20213 \1f
20214 File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
20215
20216 4.14 Library functions
20217 ======================
20218
20219 The behavior of most of these points are dependent on the implementation
20220 of the C library, and are not defined by GCC itself.
20221
20222    * `The null pointer constant to which the macro `NULL' expands (C90
20223      7.1.6, C99 7.17).'
20224
20225      In `<stddef.h>', `NULL' expands to `((void *)0)'.  GCC does not
20226      provide the other headers which define `NULL' and some library
20227      implementations may use other definitions in those headers.
20228
20229
20230 \1f
20231 File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
20232
20233 4.15 Architecture
20234 =================
20235
20236    * `The values or expressions assigned to the macros specified in the
20237      headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99
20238      5.2.4.2, C99 7.18.2, C99 7.18.3).'
20239
20240      Determined by ABI.
20241
20242    * `The number, order, and encoding of bytes in any object (when not
20243      explicitly specified in this International Standard) (C99
20244      6.2.6.1).'
20245
20246      Determined by ABI.
20247
20248    * `The value of the result of the `sizeof' operator (C90 6.3.3.4,
20249      C99 6.5.3.4).'
20250
20251      Determined by ABI.
20252
20253
20254 \1f
20255 File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
20256
20257 4.16 Locale-specific behavior
20258 =============================
20259
20260 The behavior of these points are dependent on the implementation of the
20261 C library, and are not defined by GCC itself.
20262
20263 \1f
20264 File: gcc.info,  Node: C++ Implementation,  Next: C Extensions,  Prev: C Implementation,  Up: Top
20265
20266 5 C++ Implementation-defined behavior
20267 *************************************
20268
20269 A conforming implementation of ISO C++ is required to document its
20270 choice of behavior in each of the areas that are designated
20271 "implementation defined".  The following lists all such areas, along
20272 with the section numbers from the ISO/IEC 14822:1998 and ISO/IEC
20273 14822:2003 standards.  Some areas are only implementation-defined in
20274 one version of the standard.
20275
20276  Some choices depend on the externally determined ABI for the platform
20277 (including standard character encodings) which GCC follows; these are
20278 listed as "determined by ABI" below.  *Note Binary Compatibility:
20279 Compatibility, and `http://gcc.gnu.org/readings.html'.  Some choices
20280 are documented in the preprocessor manual.  *Note
20281 Implementation-defined behavior: (cpp)Implementation-defined behavior.
20282 Some choices are documented in the corresponding document for the C
20283 language.  *Note C Implementation::.  Some choices are made by the
20284 library and operating system (or other environment when compiling for a
20285 freestanding environment); refer to their documentation for details.
20286
20287 * Menu:
20288
20289 * Conditionally-supported behavior::
20290 * Exception handling::
20291
20292 \1f
20293 File: gcc.info,  Node: Conditionally-supported behavior,  Next: Exception handling,  Up: C++ Implementation
20294
20295 5.1 Conditionally-supported behavior
20296 ====================================
20297
20298 `Each implementation shall include documentation that identifies all
20299 conditionally-supported constructs that it does not support (C++0x
20300 1.4).'
20301
20302    * `Whether an argument of class type with a non-trivial copy
20303      constructor or destructor can be passed to ... (C++0x 5.2.2).'
20304
20305      Such argument passing is not supported.
20306
20307
20308 \1f
20309 File: gcc.info,  Node: Exception handling,  Prev: Conditionally-supported behavior,  Up: C++ Implementation
20310
20311 5.2 Exception handling
20312 ======================
20313
20314    * `In the situation where no matching handler is found, it is
20315      implementation-defined whether or not the stack is unwound before
20316      std::terminate() is called (C++98 15.5.1).'
20317
20318      The stack is not unwound before std::terminate is called.
20319
20320
20321 \1f
20322 File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: C++ Implementation,  Up: Top
20323
20324 6 Extensions to the C Language Family
20325 *************************************
20326
20327 GNU C provides several language features not found in ISO standard C.
20328 (The `-pedantic' option directs GCC to print a warning message if any
20329 of these features is used.)  To test for the availability of these
20330 features in conditional compilation, check for a predefined macro
20331 `__GNUC__', which is always defined under GCC.
20332
20333  These extensions are available in C and Objective-C.  Most of them are
20334 also available in C++.  *Note Extensions to the C++ Language: C++
20335 Extensions, for extensions that apply _only_ to C++.
20336
20337  Some features that are in ISO C99 but not C90 or C++ are also, as
20338 extensions, accepted by GCC in C90 mode and in C++.
20339
20340 * Menu:
20341
20342 * Statement Exprs::     Putting statements and declarations inside expressions.
20343 * Local Labels::        Labels local to a block.
20344 * Labels as Values::    Getting pointers to labels, and computed gotos.
20345 * Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
20346 * Constructing Calls::  Dispatching a call to another function.
20347 * Typeof::              `typeof': referring to the type of an expression.
20348 * Conditionals::        Omitting the middle operand of a `?:' expression.
20349 * __int128::                    128-bit integers---`__int128'.
20350 * Long Long::           Double-word integers---`long long int'.
20351 * Complex::             Data types for complex numbers.
20352 * Floating Types::      Additional Floating Types.
20353 * Half-Precision::      Half-Precision Floating Point.
20354 * Decimal Float::       Decimal Floating Types.
20355 * Hex Floats::          Hexadecimal floating-point constants.
20356 * Fixed-Point::         Fixed-Point Types.
20357 * Named Address Spaces::Named address spaces.
20358 * Zero Length::         Zero-length arrays.
20359 * Empty Structures::    Structures with no members.
20360 * Variable Length::     Arrays whose length is computed at run time.
20361 * Variadic Macros::     Macros with a variable number of arguments.
20362 * Escaped Newlines::    Slightly looser rules for escaped newlines.
20363 * Subscripting::        Any array can be subscripted, even if not an lvalue.
20364 * Pointer Arith::       Arithmetic on `void'-pointers and function pointers.
20365 * Initializers::        Non-constant initializers.
20366 * Compound Literals::   Compound literals give structures, unions
20367                         or arrays as values.
20368 * Designated Inits::    Labeling elements of initializers.
20369 * Case Ranges::         `case 1 ... 9' and such.
20370 * Cast to Union::       Casting to union type from any member of the union.
20371 * Mixed Declarations::  Mixing declarations and code.
20372 * Function Attributes:: Declaring that functions have no side effects,
20373                         or that they can never return.
20374 * Attribute Syntax::    Formal syntax for attributes.
20375 * Function Prototypes:: Prototype declarations and old-style definitions.
20376 * C++ Comments::        C++ comments are recognized.
20377 * Dollar Signs::        Dollar sign is allowed in identifiers.
20378 * Character Escapes::   `\e' stands for the character <ESC>.
20379 * Variable Attributes:: Specifying attributes of variables.
20380 * Type Attributes::     Specifying attributes of types.
20381 * Alignment::           Inquiring about the alignment of a type or variable.
20382 * Inline::              Defining inline functions (as fast as macros).
20383 * Volatiles::           What constitutes an access to a volatile object.
20384 * Extended Asm::        Assembler instructions with C expressions as operands.
20385                         (With them you can define ``built-in'' functions.)
20386 * Constraints::         Constraints for asm operands
20387 * Asm Labels::          Specifying the assembler name to use for a C symbol.
20388 * Explicit Reg Vars::   Defining variables residing in specified registers.
20389 * Alternate Keywords::  `__const__', `__asm__', etc., for header files.
20390 * Incomplete Enums::    `enum foo;', with details to follow.
20391 * Function Names::      Printable strings which are the name of the current
20392                         function.
20393 * Return Address::      Getting the return or frame address of a function.
20394 * Vector Extensions::   Using vector instructions through built-in functions.
20395 * Offsetof::            Special syntax for implementing `offsetof'.
20396 * __sync Builtins::     Legacy built-in functions for atomic memory access.
20397 * __atomic Builtins::   Atomic built-in functions with memory model.
20398 * x86 specific memory model extensions for transactional memory:: x86 memory models.
20399 * Object Size Checking:: Built-in functions for limited buffer overflow
20400                         checking.
20401 * Other Builtins::      Other built-in functions.
20402 * Target Builtins::     Built-in functions specific to particular targets.
20403 * Target Format Checks:: Format checks specific to particular targets.
20404 * Pragmas::             Pragmas accepted by GCC.
20405 * Unnamed Fields::      Unnamed struct/union fields within structs/unions.
20406 * Thread-Local::        Per-thread variables.
20407 * Binary constants::    Binary constants using the `0b' prefix.
20408
20409 \1f
20410 File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
20411
20412 6.1 Statements and Declarations in Expressions
20413 ==============================================
20414
20415 A compound statement enclosed in parentheses may appear as an expression
20416 in GNU C.  This allows you to use loops, switches, and local variables
20417 within an expression.
20418
20419  Recall that a compound statement is a sequence of statements surrounded
20420 by braces; in this construct, parentheses go around the braces.  For
20421 example:
20422
20423      ({ int y = foo (); int z;
20424         if (y > 0) z = y;
20425         else z = - y;
20426         z; })
20427
20428 is a valid (though slightly more complex than necessary) expression for
20429 the absolute value of `foo ()'.
20430
20431  The last thing in the compound statement should be an expression
20432 followed by a semicolon; the value of this subexpression serves as the
20433 value of the entire construct.  (If you use some other kind of statement
20434 last within the braces, the construct has type `void', and thus
20435 effectively no value.)
20436
20437  This feature is especially useful in making macro definitions "safe"
20438 (so that they evaluate each operand exactly once).  For example, the
20439 "maximum" function is commonly defined as a macro in standard C as
20440 follows:
20441
20442      #define max(a,b) ((a) > (b) ? (a) : (b))
20443
20444 But this definition computes either A or B twice, with bad results if
20445 the operand has side effects.  In GNU C, if you know the type of the
20446 operands (here taken as `int'), you can define the macro safely as
20447 follows:
20448
20449      #define maxint(a,b) \
20450        ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
20451
20452  Embedded statements are not allowed in constant expressions, such as
20453 the value of an enumeration constant, the width of a bit-field, or the
20454 initial value of a static variable.
20455
20456  If you don't know the type of the operand, you can still do this, but
20457 you must use `typeof' (*note Typeof::).
20458
20459  In G++, the result value of a statement expression undergoes array and
20460 function pointer decay, and is returned by value to the enclosing
20461 expression.  For instance, if `A' is a class, then
20462
20463              A a;
20464
20465              ({a;}).Foo ()
20466
20467 constructs a temporary `A' object to hold the result of the statement
20468 expression, and that is used to invoke `Foo'.  Therefore the `this'
20469 pointer observed by `Foo' is not the address of `a'.
20470
20471  In a statement expression, any temporaries created within a statement
20472 are destroyed at that statement's end.  This makes statement
20473 expressions inside macros slightly different from function calls.  In
20474 the latter case temporaries introduced during argument evaluation are
20475 destroyed at the end of the statement that includes the function call.
20476 In the statement expression case they are destroyed during the
20477 statement expression.  For instance,
20478
20479      #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
20480      template<typename T> T function(T a) { T b = a; return b + 3; }
20481
20482      void foo ()
20483      {
20484        macro (X ());
20485        function (X ());
20486      }
20487
20488 has different places where temporaries are destroyed.  For the `macro'
20489 case, the temporary `X' is destroyed just after the initialization of
20490 `b'.  In the `function' case that temporary is destroyed when the
20491 function returns.
20492
20493  These considerations mean that it is probably a bad idea to use
20494 statement expressions of this form in header files that are designed to
20495 work with C++.  (Note that some versions of the GNU C Library contained
20496 header files using statement expressions that lead to precisely this
20497 bug.)
20498
20499  Jumping into a statement expression with `goto' or using a `switch'
20500 statement outside the statement expression with a `case' or `default'
20501 label inside the statement expression is not permitted.  Jumping into a
20502 statement expression with a computed `goto' (*note Labels as Values::)
20503 has undefined behavior.  Jumping out of a statement expression is
20504 permitted, but if the statement expression is part of a larger
20505 expression then it is unspecified which other subexpressions of that
20506 expression have been evaluated except where the language definition
20507 requires certain subexpressions to be evaluated before or after the
20508 statement expression.  In any case, as with a function call, the
20509 evaluation of a statement expression is not interleaved with the
20510 evaluation of other parts of the containing expression.  For example,
20511
20512        foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
20513
20514 calls `foo' and `bar1' and does not call `baz' but may or may not call
20515 `bar2'.  If `bar2' is called, it is called after `foo' and before
20516 `bar1'.
20517
20518 \1f
20519 File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
20520
20521 6.2 Locally Declared Labels
20522 ===========================
20523
20524 GCC allows you to declare "local labels" in any nested block scope.  A
20525 local label is just like an ordinary label, but you can only reference
20526 it (with a `goto' statement, or by taking its address) within the block
20527 in which it is declared.
20528
20529  A local label declaration looks like this:
20530
20531      __label__ LABEL;
20532
20533 or
20534
20535      __label__ LABEL1, LABEL2, /* ... */;
20536
20537  Local label declarations must come at the beginning of the block,
20538 before any ordinary declarations or statements.
20539
20540  The label declaration defines the label _name_, but does not define
20541 the label itself.  You must do this in the usual way, with `LABEL:',
20542 within the statements of the statement expression.
20543
20544  The local label feature is useful for complex macros.  If a macro
20545 contains nested loops, a `goto' can be useful for breaking out of them.
20546 However, an ordinary label whose scope is the whole function cannot be
20547 used: if the macro can be expanded several times in one function, the
20548 label is multiply defined in that function.  A local label avoids this
20549 problem.  For example:
20550
20551      #define SEARCH(value, array, target)              \
20552      do {                                              \
20553        __label__ found;                                \
20554        typeof (target) _SEARCH_target = (target);      \
20555        typeof (*(array)) *_SEARCH_array = (array);     \
20556        int i, j;                                       \
20557        int value;                                      \
20558        for (i = 0; i < max; i++)                       \
20559          for (j = 0; j < max; j++)                     \
20560            if (_SEARCH_array[i][j] == _SEARCH_target)  \
20561              { (value) = i; goto found; }              \
20562        (value) = -1;                                   \
20563       found:;                                          \
20564      } while (0)
20565
20566  This could also be written using a statement expression:
20567
20568      #define SEARCH(array, target)                     \
20569      ({                                                \
20570        __label__ found;                                \
20571        typeof (target) _SEARCH_target = (target);      \
20572        typeof (*(array)) *_SEARCH_array = (array);     \
20573        int i, j;                                       \
20574        int value;                                      \
20575        for (i = 0; i < max; i++)                       \
20576          for (j = 0; j < max; j++)                     \
20577            if (_SEARCH_array[i][j] == _SEARCH_target)  \
20578              { value = i; goto found; }                \
20579        value = -1;                                     \
20580       found:                                           \
20581        value;                                          \
20582      })
20583
20584  Local label declarations also make the labels they declare visible to
20585 nested functions, if there are any.  *Note Nested Functions::, for
20586 details.
20587
20588 \1f
20589 File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
20590
20591 6.3 Labels as Values
20592 ====================
20593
20594 You can get the address of a label defined in the current function (or
20595 a containing function) with the unary operator `&&'.  The value has
20596 type `void *'.  This value is a constant and can be used wherever a
20597 constant of that type is valid.  For example:
20598
20599      void *ptr;
20600      /* ... */
20601      ptr = &&foo;
20602
20603  To use these values, you need to be able to jump to one.  This is done
20604 with the computed goto statement(1), `goto *EXP;'.  For example,
20605
20606      goto *ptr;
20607
20608 Any expression of type `void *' is allowed.
20609
20610  One way of using these constants is in initializing a static array that
20611 serves as a jump table:
20612
20613      static void *array[] = { &&foo, &&bar, &&hack };
20614
20615 Then you can select a label with indexing, like this:
20616
20617      goto *array[i];
20618
20619 Note that this does not check whether the subscript is in bounds--array
20620 indexing in C never does that.
20621
20622  Such an array of label values serves a purpose much like that of the
20623 `switch' statement.  The `switch' statement is cleaner, so use that
20624 rather than an array unless the problem does not fit a `switch'
20625 statement very well.
20626
20627  Another use of label values is in an interpreter for threaded code.
20628 The labels within the interpreter function can be stored in the
20629 threaded code for super-fast dispatching.
20630
20631  You may not use this mechanism to jump to code in a different function.
20632 If you do that, totally unpredictable things happen.  The best way to
20633 avoid this is to store the label address only in automatic variables and
20634 never pass it as an argument.
20635
20636  An alternate way to write the above example is
20637
20638      static const int array[] = { &&foo - &&foo, &&bar - &&foo,
20639                                   &&hack - &&foo };
20640      goto *(&&foo + array[i]);
20641
20642 This is more friendly to code living in shared libraries, as it reduces
20643 the number of dynamic relocations that are needed, and by consequence,
20644 allows the data to be read-only.
20645
20646  The `&&foo' expressions for the same label might have different values
20647 if the containing function is inlined or cloned.  If a program relies
20648 on them being always the same,
20649 `__attribute__((__noinline__,__noclone__))' should be used to prevent
20650 inlining and cloning.  If `&&foo' is used in a static variable
20651 initializer, inlining and cloning is forbidden.
20652
20653  ---------- Footnotes ----------
20654
20655  (1) The analogous feature in Fortran is called an assigned goto, but
20656 that name seems inappropriate in C, where one can do more than simply
20657 store label addresses in label variables.
20658
20659 \1f
20660 File: gcc.info,  Node: Nested Functions,  Next: Constructing Calls,  Prev: Labels as Values,  Up: C Extensions
20661
20662 6.4 Nested Functions
20663 ====================
20664
20665 A "nested function" is a function defined inside another function.
20666 Nested functions are supported as an extension in GNU C, but are not
20667 supported by GNU C++.
20668
20669  The nested function's name is local to the block where it is defined.
20670 For example, here we define a nested function named `square', and call
20671 it twice:
20672
20673      foo (double a, double b)
20674      {
20675        double square (double z) { return z * z; }
20676
20677        return square (a) + square (b);
20678      }
20679
20680  The nested function can access all the variables of the containing
20681 function that are visible at the point of its definition.  This is
20682 called "lexical scoping".  For example, here we show a nested function
20683 which uses an inherited variable named `offset':
20684
20685      bar (int *array, int offset, int size)
20686      {
20687        int access (int *array, int index)
20688          { return array[index + offset]; }
20689        int i;
20690        /* ... */
20691        for (i = 0; i < size; i++)
20692          /* ... */ access (array, i) /* ... */
20693      }
20694
20695  Nested function definitions are permitted within functions in the
20696 places where variable definitions are allowed; that is, in any block,
20697 mixed with the other declarations and statements in the block.
20698
20699  It is possible to call the nested function from outside the scope of
20700 its name by storing its address or passing the address to another
20701 function:
20702
20703      hack (int *array, int size)
20704      {
20705        void store (int index, int value)
20706          { array[index] = value; }
20707
20708        intermediate (store, size);
20709      }
20710
20711  Here, the function `intermediate' receives the address of `store' as
20712 an argument.  If `intermediate' calls `store', the arguments given to
20713 `store' are used to store into `array'.  But this technique works only
20714 so long as the containing function (`hack', in this example) does not
20715 exit.
20716
20717  If you try to call the nested function through its address after the
20718 containing function exits, all hell breaks loose.  If you try to call
20719 it after a containing scope level exits, and if it refers to some of
20720 the variables that are no longer in scope, you may be lucky, but it's
20721 not wise to take the risk.  If, however, the nested function does not
20722 refer to anything that has gone out of scope, you should be safe.
20723
20724  GCC implements taking the address of a nested function using a
20725 technique called "trampolines".  This technique was described in
20726 `Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference
20727 Proceedings, October 17-21, 1988).
20728
20729  A nested function can jump to a label inherited from a containing
20730 function, provided the label is explicitly declared in the containing
20731 function (*note Local Labels::).  Such a jump returns instantly to the
20732 containing function, exiting the nested function that did the `goto'
20733 and any intermediate functions as well.  Here is an example:
20734
20735      bar (int *array, int offset, int size)
20736      {
20737        __label__ failure;
20738        int access (int *array, int index)
20739          {
20740            if (index > size)
20741              goto failure;
20742            return array[index + offset];
20743          }
20744        int i;
20745        /* ... */
20746        for (i = 0; i < size; i++)
20747          /* ... */ access (array, i) /* ... */
20748        /* ... */
20749        return 0;
20750
20751       /* Control comes here from `access'
20752          if it detects an error.  */
20753       failure:
20754        return -1;
20755      }
20756
20757  A nested function always has no linkage.  Declaring one with `extern'
20758 or `static' is erroneous.  If you need to declare the nested function
20759 before its definition, use `auto' (which is otherwise meaningless for
20760 function declarations).
20761
20762      bar (int *array, int offset, int size)
20763      {
20764        __label__ failure;
20765        auto int access (int *, int);
20766        /* ... */
20767        int access (int *array, int index)
20768          {
20769            if (index > size)
20770              goto failure;
20771            return array[index + offset];
20772          }
20773        /* ... */
20774      }
20775
20776 \1f
20777 File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nested Functions,  Up: C Extensions
20778
20779 6.5 Constructing Function Calls
20780 ===============================
20781
20782 Using the built-in functions described below, you can record the
20783 arguments a function received, and call another function with the same
20784 arguments, without knowing the number or types of the arguments.
20785
20786  You can also record the return value of that function call, and later
20787 return that value, without knowing what data type the function tried to
20788 return (as long as your caller expects that data type).
20789
20790  However, these built-in functions may interact badly with some
20791 sophisticated features or other extensions of the language.  It is,
20792 therefore, not recommended to use them outside very simple functions
20793 acting as mere forwarders for their arguments.
20794
20795  -- Built-in Function: void * __builtin_apply_args ()
20796      This built-in function returns a pointer to data describing how to
20797      perform a call with the same arguments as are passed to the
20798      current function.
20799
20800      The function saves the arg pointer register, structure value
20801      address, and all registers that might be used to pass arguments to
20802      a function into a block of memory allocated on the stack.  Then it
20803      returns the address of that block.
20804
20805  -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
20806           *ARGUMENTS, size_t SIZE)
20807      This built-in function invokes FUNCTION with a copy of the
20808      parameters described by ARGUMENTS and SIZE.
20809
20810      The value of ARGUMENTS should be the value returned by
20811      `__builtin_apply_args'.  The argument SIZE specifies the size of
20812      the stack argument data, in bytes.
20813
20814      This function returns a pointer to data describing how to return
20815      whatever value is returned by FUNCTION.  The data is saved in a
20816      block of memory allocated on the stack.
20817
20818      It is not always simple to compute the proper value for SIZE.  The
20819      value is used by `__builtin_apply' to compute the amount of data
20820      that should be pushed on the stack and copied from the incoming
20821      argument area.
20822
20823  -- Built-in Function: void __builtin_return (void *RESULT)
20824      This built-in function returns the value described by RESULT from
20825      the containing function.  You should specify, for RESULT, a value
20826      returned by `__builtin_apply'.
20827
20828  -- Built-in Function:  __builtin_va_arg_pack ()
20829      This built-in function represents all anonymous arguments of an
20830      inline function.  It can be used only in inline functions that are
20831      always inlined, never compiled as a separate function, such as
20832      those using `__attribute__ ((__always_inline__))' or
20833      `__attribute__ ((__gnu_inline__))' extern inline functions.  It
20834      must be only passed as last argument to some other function with
20835      variable arguments.  This is useful for writing small wrapper
20836      inlines for variable argument functions, when using preprocessor
20837      macros is undesirable.  For example:
20838           extern int myprintf (FILE *f, const char *format, ...);
20839           extern inline __attribute__ ((__gnu_inline__)) int
20840           myprintf (FILE *f, const char *format, ...)
20841           {
20842             int r = fprintf (f, "myprintf: ");
20843             if (r < 0)
20844               return r;
20845             int s = fprintf (f, format, __builtin_va_arg_pack ());
20846             if (s < 0)
20847               return s;
20848             return r + s;
20849           }
20850
20851  -- Built-in Function: size_t __builtin_va_arg_pack_len ()
20852      This built-in function returns the number of anonymous arguments of
20853      an inline function.  It can be used only in inline functions that
20854      are always inlined, never compiled as a separate function, such as
20855      those using `__attribute__ ((__always_inline__))' or
20856      `__attribute__ ((__gnu_inline__))' extern inline functions.  For
20857      example following does link- or run-time checking of open
20858      arguments for optimized code:
20859           #ifdef __OPTIMIZE__
20860           extern inline __attribute__((__gnu_inline__)) int
20861           myopen (const char *path, int oflag, ...)
20862           {
20863             if (__builtin_va_arg_pack_len () > 1)
20864               warn_open_too_many_arguments ();
20865
20866             if (__builtin_constant_p (oflag))
20867               {
20868                 if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
20869                   {
20870                     warn_open_missing_mode ();
20871                     return __open_2 (path, oflag);
20872                   }
20873                 return open (path, oflag, __builtin_va_arg_pack ());
20874               }
20875
20876             if (__builtin_va_arg_pack_len () < 1)
20877               return __open_2 (path, oflag);
20878
20879             return open (path, oflag, __builtin_va_arg_pack ());
20880           }
20881           #endif
20882
20883 \1f
20884 File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
20885
20886 6.6 Referring to a Type with `typeof'
20887 =====================================
20888
20889 Another way to refer to the type of an expression is with `typeof'.
20890 The syntax of using of this keyword looks like `sizeof', but the
20891 construct acts semantically like a type name defined with `typedef'.
20892
20893  There are two ways of writing the argument to `typeof': with an
20894 expression or with a type.  Here is an example with an expression:
20895
20896      typeof (x[0](1))
20897
20898 This assumes that `x' is an array of pointers to functions; the type
20899 described is that of the values of the functions.
20900
20901  Here is an example with a typename as the argument:
20902
20903      typeof (int *)
20904
20905 Here the type described is that of pointers to `int'.
20906
20907  If you are writing a header file that must work when included in ISO C
20908 programs, write `__typeof__' instead of `typeof'.  *Note Alternate
20909 Keywords::.
20910
20911  A `typeof' construct can be used anywhere a typedef name can be used.
20912 For example, you can use it in a declaration, in a cast, or inside of
20913 `sizeof' or `typeof'.
20914
20915  The operand of `typeof' is evaluated for its side effects if and only
20916 if it is an expression of variably modified type or the name of such a
20917 type.
20918
20919  `typeof' is often useful in conjunction with statement expressions
20920 (*note Statement Exprs::).  Here is how the two together can be used to
20921 define a safe "maximum" macro which operates on any arithmetic type and
20922 evaluates each of its arguments exactly once:
20923
20924      #define max(a,b) \
20925        ({ typeof (a) _a = (a); \
20926            typeof (b) _b = (b); \
20927          _a > _b ? _a : _b; })
20928
20929  The reason for using names that start with underscores for the local
20930 variables is to avoid conflicts with variable names that occur within
20931 the expressions that are substituted for `a' and `b'.  Eventually we
20932 hope to design a new form of declaration syntax that allows you to
20933 declare variables whose scopes start only after their initializers;
20934 this will be a more reliable way to prevent such conflicts.
20935
20936 Some more examples of the use of `typeof':
20937
20938    * This declares `y' with the type of what `x' points to.
20939
20940           typeof (*x) y;
20941
20942    * This declares `y' as an array of such values.
20943
20944           typeof (*x) y[4];
20945
20946    * This declares `y' as an array of pointers to characters:
20947
20948           typeof (typeof (char *)[4]) y;
20949
20950      It is equivalent to the following traditional C declaration:
20951
20952           char *y[4];
20953
20954      To see the meaning of the declaration using `typeof', and why it
20955      might be a useful way to write, rewrite it with these macros:
20956
20957           #define pointer(T)  typeof(T *)
20958           #define array(T, N) typeof(T [N])
20959
20960      Now the declaration can be rewritten this way:
20961
20962           array (pointer (char), 4) y;
20963
20964      Thus, `array (pointer (char), 4)' is the type of arrays of 4
20965      pointers to `char'.
20966
20967  _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more
20968 limited extension that permitted one to write
20969
20970      typedef T = EXPR;
20971
20972 with the effect of declaring T to have the type of the expression EXPR.
20973 This extension does not work with GCC 3 (versions between 3.0 and 3.2
20974 crash; 3.2.1 and later give an error).  Code that relies on it should
20975 be rewritten to use `typeof':
20976
20977      typedef typeof(EXPR) T;
20978
20979 This works with all versions of GCC.
20980
20981 \1f
20982 File: gcc.info,  Node: Conditionals,  Next: __int128,  Prev: Typeof,  Up: C Extensions
20983
20984 6.7 Conditionals with Omitted Operands
20985 ======================================
20986
20987 The middle operand in a conditional expression may be omitted.  Then if
20988 the first operand is nonzero, its value is the value of the conditional
20989 expression.
20990
20991  Therefore, the expression
20992
20993      x ? : y
20994
20995 has the value of `x' if that is nonzero; otherwise, the value of `y'.
20996
20997  This example is perfectly equivalent to
20998
20999      x ? x : y
21000
21001 In this simple case, the ability to omit the middle operand is not
21002 especially useful.  When it becomes useful is when the first operand
21003 does, or may (if it is a macro argument), contain a side effect.  Then
21004 repeating the operand in the middle would perform the side effect
21005 twice.  Omitting the middle operand uses the value already computed
21006 without the undesirable effects of recomputing it.
21007
21008 \1f
21009 File: gcc.info,  Node: __int128,  Next: Long Long,  Prev: Conditionals,  Up: C Extensions
21010
21011 6.8 128-bit integers
21012 ====================
21013
21014 As an extension the integer scalar type `__int128' is supported for
21015 targets which have an integer mode wide enough to hold 128 bits.
21016 Simply write `__int128' for a signed 128-bit integer, or `unsigned
21017 __int128' for an unsigned 128-bit integer.  There is no support in GCC
21018 for expressing an integer constant of type `__int128' for targets with
21019 `long long' integer less than 128 bits wide.
21020
21021 \1f
21022 File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: __int128,  Up: C Extensions
21023
21024 6.9 Double-Word Integers
21025 ========================
21026
21027 ISO C99 supports data types for integers that are at least 64 bits wide,
21028 and as an extension GCC supports them in C90 mode and in C++.  Simply
21029 write `long long int' for a signed integer, or `unsigned long long int'
21030 for an unsigned integer.  To make an integer constant of type `long
21031 long int', add the suffix `LL' to the integer.  To make an integer
21032 constant of type `unsigned long long int', add the suffix `ULL' to the
21033 integer.
21034
21035  You can use these types in arithmetic like any other integer types.
21036 Addition, subtraction, and bitwise boolean operations on these types
21037 are open-coded on all types of machines.  Multiplication is open-coded
21038 if the machine supports a fullword-to-doubleword widening multiply
21039 instruction.  Division and shifts are open-coded only on machines that
21040 provide special support.  The operations that are not open-coded use
21041 special library routines that come with GCC.
21042
21043  There may be pitfalls when you use `long long' types for function
21044 arguments without function prototypes.  If a function expects type
21045 `int' for its argument, and you pass a value of type `long long int',
21046 confusion results because the caller and the subroutine disagree about
21047 the number of bytes for the argument.  Likewise, if the function
21048 expects `long long int' and you pass `int'.  The best way to avoid such
21049 problems is to use prototypes.
21050
21051 \1f
21052 File: gcc.info,  Node: Complex,  Next: Floating Types,  Prev: Long Long,  Up: C Extensions
21053
21054 6.10 Complex Numbers
21055 ====================
21056
21057 ISO C99 supports complex floating data types, and as an extension GCC
21058 supports them in C90 mode and in C++.  GCC also supports complex
21059 integer data types which are not part of ISO C99.  You can declare
21060 complex types using the keyword `_Complex'.  As an extension, the older
21061 GNU keyword `__complex__' is also supported.
21062
21063  For example, `_Complex double x;' declares `x' as a variable whose
21064 real part and imaginary part are both of type `double'.  `_Complex
21065 short int y;' declares `y' to have real and imaginary parts of type
21066 `short int'; this is not likely to be useful, but it shows that the set
21067 of complex types is complete.
21068
21069  To write a constant with a complex data type, use the suffix `i' or
21070 `j' (either one; they are equivalent).  For example, `2.5fi' has type
21071 `_Complex float' and `3i' has type `_Complex int'.  Such a constant
21072 always has a pure imaginary value, but you can form any complex value
21073 you like by adding one to a real constant.  This is a GNU extension; if
21074 you have an ISO C99 conforming C library (such as the GNU C Library),
21075 and want to construct complex constants of floating type, you should
21076 include `<complex.h>' and use the macros `I' or `_Complex_I' instead.
21077
21078  To extract the real part of a complex-valued expression EXP, write
21079 `__real__ EXP'.  Likewise, use `__imag__' to extract the imaginary
21080 part.  This is a GNU extension; for values of floating type, you should
21081 use the ISO C99 functions `crealf', `creal', `creall', `cimagf',
21082 `cimag' and `cimagl', declared in `<complex.h>' and also provided as
21083 built-in functions by GCC.
21084
21085  The operator `~' performs complex conjugation when used on a value
21086 with a complex type.  This is a GNU extension; for values of floating
21087 type, you should use the ISO C99 functions `conjf', `conj' and `conjl',
21088 declared in `<complex.h>' and also provided as built-in functions by
21089 GCC.
21090
21091  GCC can allocate complex automatic variables in a noncontiguous
21092 fashion; it's even possible for the real part to be in a register while
21093 the imaginary part is on the stack (or vice versa).  Only the DWARF 2
21094 debug info format can represent this, so use of DWARF 2 is recommended.
21095 If you are using the stabs debug info format, GCC describes a
21096 noncontiguous complex variable as if it were two separate variables of
21097 noncomplex type.  If the variable's actual name is `foo', the two
21098 fictitious variables are named `foo$real' and `foo$imag'.  You can
21099 examine and set these two fictitious variables with your debugger.
21100
21101 \1f
21102 File: gcc.info,  Node: Floating Types,  Next: Half-Precision,  Prev: Complex,  Up: C Extensions
21103
21104 6.11 Additional Floating Types
21105 ==============================
21106
21107 As an extension, GNU C supports additional floating types, `__float80'
21108 and `__float128' to support 80-bit (`XFmode') and 128-bit (`TFmode')
21109 floating types.  Support for additional types includes the arithmetic
21110 operators: add, subtract, multiply, divide; unary arithmetic operators;
21111 relational operators; equality operators; and conversions to and from
21112 integer and other floating types.  Use a suffix `w' or `W' in a literal
21113 constant of type `__float80' and `q' or `Q' for `_float128'.  You can
21114 declare complex types using the corresponding internal complex type,
21115 `XCmode' for `__float80' type and `TCmode' for `__float128' type:
21116
21117      typedef _Complex float __attribute__((mode(TC))) _Complex128;
21118      typedef _Complex float __attribute__((mode(XC))) _Complex80;
21119
21120  Not all targets support additional floating-point types.  `__float80'
21121 and `__float128' types are supported on i386, x86_64 and IA-64 targets.
21122 The `__float128' type is supported on hppa HP-UX targets.
21123
21124 \1f
21125 File: gcc.info,  Node: Half-Precision,  Next: Decimal Float,  Prev: Floating Types,  Up: C Extensions
21126
21127 6.12 Half-Precision Floating Point
21128 ==================================
21129
21130 On ARM targets, GCC supports half-precision (16-bit) floating point via
21131 the `__fp16' type.  You must enable this type explicitly with the
21132 `-mfp16-format' command-line option in order to use it.
21133
21134  ARM supports two incompatible representations for half-precision
21135 floating-point values.  You must choose one of the representations and
21136 use it consistently in your program.
21137
21138  Specifying `-mfp16-format=ieee' selects the IEEE 754-2008 format.
21139 This format can represent normalized values in the range of 2^-14 to
21140 65504.  There are 11 bits of significand precision, approximately 3
21141 decimal digits.
21142
21143  Specifying `-mfp16-format=alternative' selects the ARM alternative
21144 format.  This representation is similar to the IEEE format, but does
21145 not support infinities or NaNs.  Instead, the range of exponents is
21146 extended, so that this format can represent normalized values in the
21147 range of 2^-14 to 131008.
21148
21149  The `__fp16' type is a storage format only.  For purposes of
21150 arithmetic and other operations, `__fp16' values in C or C++
21151 expressions are automatically promoted to `float'.  In addition, you
21152 cannot declare a function with a return value or parameters of type
21153 `__fp16'.
21154
21155  Note that conversions from `double' to `__fp16' involve an
21156 intermediate conversion to `float'.  Because of rounding, this can
21157 sometimes produce a different result than a direct conversion.
21158
21159  ARM provides hardware support for conversions between `__fp16' and
21160 `float' values as an extension to VFP and NEON (Advanced SIMD).  GCC
21161 generates code using these hardware instructions if you compile with
21162 options to select an FPU that provides them; for example,
21163 `-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the
21164 `-mfp16-format' option to select a half-precision format.
21165
21166  Language-level support for the `__fp16' data type is independent of
21167 whether GCC generates code using hardware floating-point instructions.
21168 In cases where hardware support is not specified, GCC implements
21169 conversions between `__fp16' and `float' values as library calls.
21170
21171 \1f
21172 File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Half-Precision,  Up: C Extensions
21173
21174 6.13 Decimal Floating Types
21175 ===========================
21176
21177 As an extension, GNU C supports decimal floating types as defined in
21178 the N1312 draft of ISO/IEC WDTR24732.  Support for decimal floating
21179 types in GCC will evolve as the draft technical report changes.
21180 Calling conventions for any target might also change.  Not all targets
21181 support decimal floating types.
21182
21183  The decimal floating types are `_Decimal32', `_Decimal64', and
21184 `_Decimal128'.  They use a radix of ten, unlike the floating types
21185 `float', `double', and `long double' whose radix is not specified by
21186 the C standard but is usually two.
21187
21188  Support for decimal floating types includes the arithmetic operators
21189 add, subtract, multiply, divide; unary arithmetic operators; relational
21190 operators; equality operators; and conversions to and from integer and
21191 other floating types.  Use a suffix `df' or `DF' in a literal constant
21192 of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL'
21193 for `_Decimal128'.
21194
21195  GCC support of decimal float as specified by the draft technical report
21196 is incomplete:
21197
21198    * When the value of a decimal floating type cannot be represented in
21199      the integer type to which it is being converted, the result is
21200      undefined rather than the result value specified by the draft
21201      technical report.
21202
21203    * GCC does not provide the C library functionality associated with
21204      `math.h', `fenv.h', `stdio.h', `stdlib.h', and `wchar.h', which
21205      must come from a separate C library implementation.  Because of
21206      this the GNU C compiler does not define macro `__STDC_DEC_FP__' to
21207      indicate that the implementation conforms to the technical report.
21208
21209  Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by
21210 the DWARF 2 debug information format.
21211
21212 \1f
21213 File: gcc.info,  Node: Hex Floats,  Next: Fixed-Point,  Prev: Decimal Float,  Up: C Extensions
21214
21215 6.14 Hex Floats
21216 ===============
21217
21218 ISO C99 supports floating-point numbers written not only in the usual
21219 decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3'
21220 written in hexadecimal format.  As a GNU extension, GCC supports this
21221 in C90 mode (except in some cases when strictly conforming) and in C++.
21222 In that format the `0x' hex introducer and the `p' or `P' exponent
21223 field are mandatory.  The exponent is a decimal number that indicates
21224 the power of 2 by which the significant part is multiplied.  Thus
21225 `0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3'
21226 is the same as `1.55e1'.
21227
21228  Unlike for floating-point numbers in the decimal notation the exponent
21229 is always required in the hexadecimal notation.  Otherwise the compiler
21230 would not be able to resolve the ambiguity of, e.g., `0x1.f'.  This
21231 could mean `1.0f' or `1.9375' since `f' is also the extension for
21232 floating-point constants of type `float'.
21233
21234 \1f
21235 File: gcc.info,  Node: Fixed-Point,  Next: Named Address Spaces,  Prev: Hex Floats,  Up: C Extensions
21236
21237 6.15 Fixed-Point Types
21238 ======================
21239
21240 As an extension, GNU C supports fixed-point types as defined in the
21241 N1169 draft of ISO/IEC DTR 18037.  Support for fixed-point types in GCC
21242 will evolve as the draft technical report changes.  Calling conventions
21243 for any target might also change.  Not all targets support fixed-point
21244 types.
21245
21246  The fixed-point types are `short _Fract', `_Fract', `long _Fract',
21247 `long long _Fract', `unsigned short _Fract', `unsigned _Fract',
21248 `unsigned long _Fract', `unsigned long long _Fract', `_Sat short
21249 _Fract', `_Sat _Fract', `_Sat long _Fract', `_Sat long long _Fract',
21250 `_Sat unsigned short _Fract', `_Sat unsigned _Fract', `_Sat unsigned
21251 long _Fract', `_Sat unsigned long long _Fract', `short _Accum',
21252 `_Accum', `long _Accum', `long long _Accum', `unsigned short _Accum',
21253 `unsigned _Accum', `unsigned long _Accum', `unsigned long long _Accum',
21254 `_Sat short _Accum', `_Sat _Accum', `_Sat long _Accum', `_Sat long long
21255 _Accum', `_Sat unsigned short _Accum', `_Sat unsigned _Accum', `_Sat
21256 unsigned long _Accum', `_Sat unsigned long long _Accum'.
21257
21258  Fixed-point data values contain fractional and optional integral parts.
21259 The format of fixed-point data varies and depends on the target machine.
21260
21261  Support for fixed-point types includes:
21262    * prefix and postfix increment and decrement operators (`++', `--')
21263
21264    * unary arithmetic operators (`+', `-', `!')
21265
21266    * binary arithmetic operators (`+', `-', `*', `/')
21267
21268    * binary shift operators (`<<', `>>')
21269
21270    * relational operators (`<', `<=', `>=', `>')
21271
21272    * equality operators (`==', `!=')
21273
21274    * assignment operators (`+=', `-=', `*=', `/=', `<<=', `>>=')
21275
21276    * conversions to and from integer, floating-point, or fixed-point
21277      types
21278
21279  Use a suffix in a fixed-point literal constant:
21280    * `hr' or `HR' for `short _Fract' and `_Sat short _Fract'
21281
21282    * `r' or `R' for `_Fract' and `_Sat _Fract'
21283
21284    * `lr' or `LR' for `long _Fract' and `_Sat long _Fract'
21285
21286    * `llr' or `LLR' for `long long _Fract' and `_Sat long long _Fract'
21287
21288    * `uhr' or `UHR' for `unsigned short _Fract' and `_Sat unsigned
21289      short _Fract'
21290
21291    * `ur' or `UR' for `unsigned _Fract' and `_Sat unsigned _Fract'
21292
21293    * `ulr' or `ULR' for `unsigned long _Fract' and `_Sat unsigned long
21294      _Fract'
21295
21296    * `ullr' or `ULLR' for `unsigned long long _Fract' and `_Sat
21297      unsigned long long _Fract'
21298
21299    * `hk' or `HK' for `short _Accum' and `_Sat short _Accum'
21300
21301    * `k' or `K' for `_Accum' and `_Sat _Accum'
21302
21303    * `lk' or `LK' for `long _Accum' and `_Sat long _Accum'
21304
21305    * `llk' or `LLK' for `long long _Accum' and `_Sat long long _Accum'
21306
21307    * `uhk' or `UHK' for `unsigned short _Accum' and `_Sat unsigned
21308      short _Accum'
21309
21310    * `uk' or `UK' for `unsigned _Accum' and `_Sat unsigned _Accum'
21311
21312    * `ulk' or `ULK' for `unsigned long _Accum' and `_Sat unsigned long
21313      _Accum'
21314
21315    * `ullk' or `ULLK' for `unsigned long long _Accum' and `_Sat
21316      unsigned long long _Accum'
21317
21318  GCC support of fixed-point types as specified by the draft technical
21319 report is incomplete:
21320
21321    * Pragmas to control overflow and rounding behaviors are not
21322      implemented.
21323
21324  Fixed-point types are supported by the DWARF 2 debug information
21325 format.
21326
21327 \1f
21328 File: gcc.info,  Node: Named Address Spaces,  Next: Zero Length,  Prev: Fixed-Point,  Up: C Extensions
21329
21330 6.16 Named Address Spaces
21331 =========================
21332
21333 As an extension, GNU C supports named address spaces as defined in the
21334 N1275 draft of ISO/IEC DTR 18037.  Support for named address spaces in
21335 GCC will evolve as the draft technical report changes.  Calling
21336 conventions for any target might also change.  At present, only the
21337 AVR, SPU, M32C, and RL78 targets support address spaces other than the
21338 generic address space.
21339
21340  Address space identifiers may be used exactly like any other C type
21341 qualifier (e.g., `const' or `volatile').  See the N1275 document for
21342 more details.
21343
21344 6.16.1 AVR Named Address Spaces
21345 -------------------------------
21346
21347 On the AVR target, there are several address spaces that can be used in
21348 order to put read-only data into the flash memory and access that data
21349 by means of the special instructions `LPM' or `ELPM' needed to read
21350 from flash.
21351
21352  Per default, any data including read-only data is located in RAM (the
21353 generic address space) so that non-generic address spaces are needed to
21354 locate read-only data in flash memory _and_ to generate the right
21355 instructions to access this data without using (inline) assembler code.
21356
21357 `__flash'
21358      The `__flash' qualifier locates data in the `.progmem.data'
21359      section. Data is read using the `LPM' instruction. Pointers to
21360      this address space are 16 bits wide.
21361
21362 `__flash1'
21363 `__flash2'
21364 `__flash3'
21365 `__flash4'
21366 `__flash5'
21367      These are 16-bit address spaces locating data in section
21368      `.progmemN.data' where N refers to address space `__flashN'.  The
21369      compiler sets the `RAMPZ' segment register appropriately before
21370      reading data by means of the `ELPM' instruction.
21371
21372 `__memx'
21373      This is a 24-bit address space that linearizes flash and RAM: If
21374      the high bit of the address is set, data is read from RAM using
21375      the lower two bytes as RAM address.  If the high bit of the
21376      address is clear, data is read from flash with `RAMPZ' set
21377      according to the high byte of the address.  *Note
21378      `__builtin_avr_flash_segment': AVR Built-in Functions.
21379
21380      Objects in this address space are located in `.progmemx.data'.
21381
21382  Example
21383
21384      char my_read (const __flash char ** p)
21385      {
21386          /* p is a pointer to RAM that points to a pointer to flash.
21387             The first indirection of p reads that flash pointer
21388             from RAM and the second indirection reads a char from this
21389             flash address.  */
21390
21391          return **p;
21392      }
21393
21394      /* Locate array[] in flash memory */
21395      const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 };
21396
21397      int i = 1;
21398
21399      int main (void)
21400      {
21401         /* Return 17 by reading from flash memory */
21402         return array[array[i]];
21403      }
21404
21405 For each named address space supported by avr-gcc there is an equally
21406 named but uppercase built-in macro defined.  The purpose is to
21407 facilitate testing if respective address space support is available or
21408 not:
21409
21410      #ifdef __FLASH
21411      const __flash int var = 1;
21412
21413      int read_var (void)
21414      {
21415          return var;
21416      }
21417      #else
21418      #include <avr/pgmspace.h> /* From AVR-LibC */
21419
21420      const int var PROGMEM = 1;
21421
21422      int read_var (void)
21423      {
21424          return (int) pgm_read_word (&var);
21425      }
21426      #endif /* __FLASH */
21427
21428 Notice that attribute *note `progmem': AVR Variable Attributes.
21429 locates data in flash but accesses to these data read from generic
21430 address space, i.e.  from RAM, so that you need special accessors like
21431 `pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/)
21432 together with attribute `progmem'.
21433
21434 Limitations and caveats
21435
21436    * Reading across the 64 KiB section boundary of the `__flash' or
21437      `__flashN' address spaces shows undefined behavior. The only
21438      address space that supports reading across the 64 KiB flash
21439      segment boundaries is `__memx'.
21440
21441    * If you use one of the `__flashN' address spaces you must arrange
21442      your linker script to locate the `.progmemN.data' sections
21443      according to your needs.
21444
21445    * Any data or pointers to the non-generic address spaces must be
21446      qualified as `const', i.e. as read-only data.  This still applies
21447      if the data in one of these address spaces like software version
21448      number or calibration lookup table are intended to be changed
21449      after load time by, say, a boot loader. In this case the right
21450      qualification is `const' `volatile' so that the compiler must not
21451      optimize away known values or insert them as immediates into
21452      operands of instructions.
21453
21454    * The following code initializes a variable `pfoo' located in static
21455      storage with a 24-bit address:
21456           extern const __memx char foo;
21457           const __memx void *pfoo = &foo;
21458
21459      Such code requires at least binutils 2.23, see
21460      PR13503 (http://sourceware.org/PR13503).
21461
21462
21463 6.16.2 M32C Named Address Spaces
21464 --------------------------------
21465
21466 On the M32C target, with the R8C and M16C CPU variants, variables
21467 qualified with `__far' are accessed using 32-bit addresses in order to
21468 access memory beyond the first 64 Ki bytes.  If `__far' is used with
21469 the M32CM or M32C CPU variants, it has no effect.
21470
21471 6.16.3 RL78 Named Address Spaces
21472 --------------------------------
21473
21474 On the RL78 target, variables qualified with `__far' are accessed with
21475 32-bit pointers (20-bit addresses) rather than the default 16-bit
21476 addresses.  Non-far variables are assumed to appear in the topmost
21477 64 KiB of the address space.
21478
21479 6.16.4 SPU Named Address Spaces
21480 -------------------------------
21481
21482 On the SPU target variables may be declared as belonging to another
21483 address space by qualifying the type with the `__ea' address space
21484 identifier:
21485
21486      extern int __ea i;
21487
21488 The compiler generates special code to access the variable `i'.  It may
21489 use runtime library support, or generate special machine instructions
21490 to access that address space.
21491
21492 \1f
21493 File: gcc.info,  Node: Zero Length,  Next: Empty Structures,  Prev: Named Address Spaces,  Up: C Extensions
21494
21495 6.17 Arrays of Length Zero
21496 ==========================
21497
21498 Zero-length arrays are allowed in GNU C.  They are very useful as the
21499 last element of a structure that is really a header for a
21500 variable-length object:
21501
21502      struct line {
21503        int length;
21504        char contents[0];
21505      };
21506
21507      struct line *thisline = (struct line *)
21508        malloc (sizeof (struct line) + this_length);
21509      thisline->length = this_length;
21510
21511  In ISO C90, you would have to give `contents' a length of 1, which
21512 means either you waste space or complicate the argument to `malloc'.
21513
21514  In ISO C99, you would use a "flexible array member", which is slightly
21515 different in syntax and semantics:
21516
21517    * Flexible array members are written as `contents[]' without the `0'.
21518
21519    * Flexible array members have incomplete type, and so the `sizeof'
21520      operator may not be applied.  As a quirk of the original
21521      implementation of zero-length arrays, `sizeof' evaluates to zero.
21522
21523    * Flexible array members may only appear as the last member of a
21524      `struct' that is otherwise non-empty.
21525
21526    * A structure containing a flexible array member, or a union
21527      containing such a structure (possibly recursively), may not be a
21528      member of a structure or an element of an array.  (However, these
21529      uses are permitted by GCC as extensions.)
21530
21531  GCC versions before 3.0 allowed zero-length arrays to be statically
21532 initialized, as if they were flexible arrays.  In addition to those
21533 cases that were useful, it also allowed initializations in situations
21534 that would corrupt later data.  Non-empty initialization of zero-length
21535 arrays is now treated like any case where there are more initializer
21536 elements than the array holds, in that a suitable warning about "excess
21537 elements in array" is given, and the excess elements (all of them, in
21538 this case) are ignored.
21539
21540  Instead GCC allows static initialization of flexible array members.
21541 This is equivalent to defining a new structure containing the original
21542 structure followed by an array of sufficient size to contain the data.
21543 E.g. in the following, `f1' is constructed as if it were declared like
21544 `f2'.
21545
21546      struct f1 {
21547        int x; int y[];
21548      } f1 = { 1, { 2, 3, 4 } };
21549
21550      struct f2 {
21551        struct f1 f1; int data[3];
21552      } f2 = { { 1 }, { 2, 3, 4 } };
21553
21554 The convenience of this extension is that `f1' has the desired type,
21555 eliminating the need to consistently refer to `f2.f1'.
21556
21557  This has symmetry with normal static arrays, in that an array of
21558 unknown size is also written with `[]'.
21559
21560  Of course, this extension only makes sense if the extra data comes at
21561 the end of a top-level object, as otherwise we would be overwriting
21562 data at subsequent offsets.  To avoid undue complication and confusion
21563 with initialization of deeply nested arrays, we simply disallow any
21564 non-empty initialization except when the structure is the top-level
21565 object.  For example:
21566
21567      struct foo { int x; int y[]; };
21568      struct bar { struct foo z; };
21569
21570      struct foo a = { 1, { 2, 3, 4 } };        // Valid.
21571      struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
21572      struct bar c = { { 1, { } } };            // Valid.
21573      struct foo d[1] = { { 1 { 2, 3, 4 } } };  // Invalid.
21574
21575 \1f
21576 File: gcc.info,  Node: Empty Structures,  Next: Variable Length,  Prev: Zero Length,  Up: C Extensions
21577
21578 6.18 Structures With No Members
21579 ===============================
21580
21581 GCC permits a C structure to have no members:
21582
21583      struct empty {
21584      };
21585
21586  The structure has size zero.  In C++, empty structures are part of the
21587 language.  G++ treats empty structures as if they had a single member
21588 of type `char'.
21589
21590 \1f
21591 File: gcc.info,  Node: Variable Length,  Next: Variadic Macros,  Prev: Empty Structures,  Up: C Extensions
21592
21593 6.19 Arrays of Variable Length
21594 ==============================
21595
21596 Variable-length automatic arrays are allowed in ISO C99, and as an
21597 extension GCC accepts them in C90 mode and in C++.  These arrays are
21598 declared like any other automatic arrays, but with a length that is not
21599 a constant expression.  The storage is allocated at the point of
21600 declaration and deallocated when the block scope containing the
21601 declaration exits.  For example:
21602
21603      FILE *
21604      concat_fopen (char *s1, char *s2, char *mode)
21605      {
21606        char str[strlen (s1) + strlen (s2) + 1];
21607        strcpy (str, s1);
21608        strcat (str, s2);
21609        return fopen (str, mode);
21610      }
21611
21612  Jumping or breaking out of the scope of the array name deallocates the
21613 storage.  Jumping into the scope is not allowed; you get an error
21614 message for it.
21615
21616  You can use the function `alloca' to get an effect much like
21617 variable-length arrays.  The function `alloca' is available in many
21618 other C implementations (but not in all).  On the other hand,
21619 variable-length arrays are more elegant.
21620
21621  There are other differences between these two methods.  Space allocated
21622 with `alloca' exists until the containing _function_ returns.  The
21623 space for a variable-length array is deallocated as soon as the array
21624 name's scope ends.  (If you use both variable-length arrays and
21625 `alloca' in the same function, deallocation of a variable-length array
21626 also deallocates anything more recently allocated with `alloca'.)
21627
21628  You can also use variable-length arrays as arguments to functions:
21629
21630      struct entry
21631      tester (int len, char data[len][len])
21632      {
21633        /* ... */
21634      }
21635
21636  The length of an array is computed once when the storage is allocated
21637 and is remembered for the scope of the array in case you access it with
21638 `sizeof'.
21639
21640  If you want to pass the array first and the length afterward, you can
21641 use a forward declaration in the parameter list--another GNU extension.
21642
21643      struct entry
21644      tester (int len; char data[len][len], int len)
21645      {
21646        /* ... */
21647      }
21648
21649  The `int len' before the semicolon is a "parameter forward
21650 declaration", and it serves the purpose of making the name `len' known
21651 when the declaration of `data' is parsed.
21652
21653  You can write any number of such parameter forward declarations in the
21654 parameter list.  They can be separated by commas or semicolons, but the
21655 last one must end with a semicolon, which is followed by the "real"
21656 parameter declarations.  Each forward declaration must match a "real"
21657 declaration in parameter name and data type.  ISO C99 does not support
21658 parameter forward declarations.
21659
21660 \1f
21661 File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Variable Length,  Up: C Extensions
21662
21663 6.20 Macros with a Variable Number of Arguments.
21664 ================================================
21665
21666 In the ISO C standard of 1999, a macro can be declared to accept a
21667 variable number of arguments much as a function can.  The syntax for
21668 defining the macro is similar to that of a function.  Here is an
21669 example:
21670
21671      #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
21672
21673 Here `...' is a "variable argument".  In the invocation of such a
21674 macro, it represents the zero or more tokens until the closing
21675 parenthesis that ends the invocation, including any commas.  This set of
21676 tokens replaces the identifier `__VA_ARGS__' in the macro body wherever
21677 it appears.  See the CPP manual for more information.
21678
21679  GCC has long supported variadic macros, and used a different syntax
21680 that allowed you to give a name to the variable arguments just like any
21681 other argument.  Here is an example:
21682
21683      #define debug(format, args...) fprintf (stderr, format, args)
21684
21685 This is in all ways equivalent to the ISO C example above, but arguably
21686 more readable and descriptive.
21687
21688  GNU CPP has two further variadic macro extensions, and permits them to
21689 be used with either of the above forms of macro definition.
21690
21691  In standard C, you are not allowed to leave the variable argument out
21692 entirely; but you are allowed to pass an empty argument.  For example,
21693 this invocation is invalid in ISO C, because there is no comma after
21694 the string:
21695
21696      debug ("A message")
21697
21698  GNU CPP permits you to completely omit the variable arguments in this
21699 way.  In the above examples, the compiler would complain, though since
21700 the expansion of the macro still has the extra comma after the format
21701 string.
21702
21703  To help solve this problem, CPP behaves specially for variable
21704 arguments used with the token paste operator, `##'.  If instead you
21705 write
21706
21707      #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
21708
21709 and if the variable arguments are omitted or empty, the `##' operator
21710 causes the preprocessor to remove the comma before it.  If you do
21711 provide some variable arguments in your macro invocation, GNU CPP does
21712 not complain about the paste operation and instead places the variable
21713 arguments after the comma.  Just like any other pasted macro argument,
21714 these arguments are not macro expanded.
21715
21716 \1f
21717 File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
21718
21719 6.21 Slightly Looser Rules for Escaped Newlines
21720 ===============================================
21721
21722 Recently, the preprocessor has relaxed its treatment of escaped
21723 newlines.  Previously, the newline had to immediately follow a
21724 backslash.  The current implementation allows whitespace in the form of
21725 spaces, horizontal and vertical tabs, and form feeds between the
21726 backslash and the subsequent newline.  The preprocessor issues a
21727 warning, but treats it as a valid escaped newline and combines the two
21728 lines to form a single logical line.  This works within comments and
21729 tokens, as well as between tokens.  Comments are _not_ treated as
21730 whitespace for the purposes of this relaxation, since they have not yet
21731 been replaced with spaces.
21732
21733 \1f
21734 File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
21735
21736 6.22 Non-Lvalue Arrays May Have Subscripts
21737 ==========================================
21738
21739 In ISO C99, arrays that are not lvalues still decay to pointers, and
21740 may be subscripted, although they may not be modified or used after the
21741 next sequence point and the unary `&' operator may not be applied to
21742 them.  As an extension, GNU C allows such arrays to be subscripted in
21743 C90 mode, though otherwise they do not decay to pointers outside C99
21744 mode.  For example, this is valid in GNU C though not valid in C90:
21745
21746      struct foo {int a[4];};
21747
21748      struct foo f();
21749
21750      bar (int index)
21751      {
21752        return f().a[index];
21753      }
21754
21755 \1f
21756 File: gcc.info,  Node: Pointer Arith,  Next: Initializers,  Prev: Subscripting,  Up: C Extensions
21757
21758 6.23 Arithmetic on `void'- and Function-Pointers
21759 ================================================
21760
21761 In GNU C, addition and subtraction operations are supported on pointers
21762 to `void' and on pointers to functions.  This is done by treating the
21763 size of a `void' or of a function as 1.
21764
21765  A consequence of this is that `sizeof' is also allowed on `void' and
21766 on function types, and returns 1.
21767
21768  The option `-Wpointer-arith' requests a warning if these extensions
21769 are used.
21770
21771 \1f
21772 File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointer Arith,  Up: C Extensions
21773
21774 6.24 Non-Constant Initializers
21775 ==============================
21776
21777 As in standard C++ and ISO C99, the elements of an aggregate
21778 initializer for an automatic variable are not required to be constant
21779 expressions in GNU C.  Here is an example of an initializer with
21780 run-time varying elements:
21781
21782      foo (float f, float g)
21783      {
21784        float beat_freqs[2] = { f-g, f+g };
21785        /* ... */
21786      }
21787
21788 \1f
21789 File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
21790
21791 6.25 Compound Literals
21792 ======================
21793
21794 ISO C99 supports compound literals.  A compound literal looks like a
21795 cast containing an initializer.  Its value is an object of the type
21796 specified in the cast, containing the elements specified in the
21797 initializer; it is an lvalue.  As an extension, GCC supports compound
21798 literals in C90 mode and in C++, though the semantics are somewhat
21799 different in C++.
21800
21801  Usually, the specified type is a structure.  Assume that `struct foo'
21802 and `structure' are declared as shown:
21803
21804      struct foo {int a; char b[2];} structure;
21805
21806 Here is an example of constructing a `struct foo' with a compound
21807 literal:
21808
21809      structure = ((struct foo) {x + y, 'a', 0});
21810
21811 This is equivalent to writing the following:
21812
21813      {
21814        struct foo temp = {x + y, 'a', 0};
21815        structure = temp;
21816      }
21817
21818  You can also construct an array, though this is dangerous in C++, as
21819 explained below.  If all the elements of the compound literal are (made
21820 up of) simple constant expressions, suitable for use in initializers of
21821 objects of static storage duration, then the compound literal can be
21822 coerced to a pointer to its first element and used in such an
21823 initializer, as shown here:
21824
21825      char **foo = (char *[]) { "x", "y", "z" };
21826
21827  Compound literals for scalar types and union types are also allowed,
21828 but then the compound literal is equivalent to a cast.
21829
21830  As a GNU extension, GCC allows initialization of objects with static
21831 storage duration by compound literals (which is not possible in ISO
21832 C99, because the initializer is not a constant).  It is handled as if
21833 the object is initialized only with the bracket enclosed list if the
21834 types of the compound literal and the object match.  The initializer
21835 list of the compound literal must be constant.  If the object being
21836 initialized has array type of unknown size, the size is determined by
21837 compound literal size.
21838
21839      static struct foo x = (struct foo) {1, 'a', 'b'};
21840      static int y[] = (int []) {1, 2, 3};
21841      static int z[] = (int [3]) {1};
21842
21843 The above lines are equivalent to the following:
21844      static struct foo x = {1, 'a', 'b'};
21845      static int y[] = {1, 2, 3};
21846      static int z[] = {1, 0, 0};
21847
21848  In C, a compound literal designates an unnamed object with static or
21849 automatic storage duration.  In C++, a compound literal designates a
21850 temporary object, which only lives until the end of its
21851 full-expression.  As a result, well-defined C code that takes the
21852 address of a subobject of a compound literal can be undefined in C++.
21853 For instance, if the array compound literal example above appeared
21854 inside a function, any subsequent use of `foo' in C++ has undefined
21855 behavior because the lifetime of the array ends after the declaration
21856 of `foo'.  As a result, the C++ compiler now rejects the conversion of
21857 a temporary array to a pointer.
21858
21859  As an optimization, the C++ compiler sometimes gives array compound
21860 literals longer lifetimes: when the array either appears outside a
21861 function or has const-qualified type.  If `foo' and its initializer had
21862 elements of `char *const' type rather than `char *', or if `foo' were a
21863 global variable, the array would have static storage duration.  But it
21864 is probably safest just to avoid the use of array compound literals in
21865 code compiled as C++.
21866
21867 \1f
21868 File: gcc.info,  Node: Designated Inits,  Next: Case Ranges,  Prev: Compound Literals,  Up: C Extensions
21869
21870 6.26 Designated Initializers
21871 ============================
21872
21873 Standard C90 requires the elements of an initializer to appear in a
21874 fixed order, the same as the order of the elements in the array or
21875 structure being initialized.
21876
21877  In ISO C99 you can give the elements in any order, specifying the array
21878 indices or structure field names they apply to, and GNU C allows this as
21879 an extension in C90 mode as well.  This extension is not implemented in
21880 GNU C++.
21881
21882  To specify an array index, write `[INDEX] =' before the element value.
21883 For example,
21884
21885      int a[6] = { [4] = 29, [2] = 15 };
21886
21887 is equivalent to
21888
21889      int a[6] = { 0, 0, 15, 0, 29, 0 };
21890
21891 The index values must be constant expressions, even if the array being
21892 initialized is automatic.
21893
21894  An alternative syntax for this that has been obsolete since GCC 2.5 but
21895 GCC still accepts is to write `[INDEX]' before the element value, with
21896 no `='.
21897
21898  To initialize a range of elements to the same value, write `[FIRST ...
21899 LAST] = VALUE'.  This is a GNU extension.  For example,
21900
21901      int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
21902
21903 If the value in it has side-effects, the side-effects happen only once,
21904 not for each initialized field by the range initializer.
21905
21906 Note that the length of the array is the highest value specified plus
21907 one.
21908
21909  In a structure initializer, specify the name of a field to initialize
21910 with `.FIELDNAME =' before the element value.  For example, given the
21911 following structure,
21912
21913      struct point { int x, y; };
21914
21915 the following initialization
21916
21917      struct point p = { .y = yvalue, .x = xvalue };
21918
21919 is equivalent to
21920
21921      struct point p = { xvalue, yvalue };
21922
21923  Another syntax that has the same meaning, obsolete since GCC 2.5, is
21924 `FIELDNAME:', as shown here:
21925
21926      struct point p = { y: yvalue, x: xvalue };
21927
21928  The `[INDEX]' or `.FIELDNAME' is known as a "designator".  You can
21929 also use a designator (or the obsolete colon syntax) when initializing
21930 a union, to specify which element of the union should be used.  For
21931 example,
21932
21933      union foo { int i; double d; };
21934
21935      union foo f = { .d = 4 };
21936
21937 converts 4 to a `double' to store it in the union using the second
21938 element.  By contrast, casting 4 to type `union foo' stores it into the
21939 union as the integer `i', since it is an integer.  (*Note Cast to
21940 Union::.)
21941
21942  You can combine this technique of naming elements with ordinary C
21943 initialization of successive elements.  Each initializer element that
21944 does not have a designator applies to the next consecutive element of
21945 the array or structure.  For example,
21946
21947      int a[6] = { [1] = v1, v2, [4] = v4 };
21948
21949 is equivalent to
21950
21951      int a[6] = { 0, v1, v2, 0, v4, 0 };
21952
21953  Labeling the elements of an array initializer is especially useful
21954 when the indices are characters or belong to an `enum' type.  For
21955 example:
21956
21957      int whitespace[256]
21958        = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
21959            ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
21960
21961  You can also write a series of `.FIELDNAME' and `[INDEX]' designators
21962 before an `=' to specify a nested subobject to initialize; the list is
21963 taken relative to the subobject corresponding to the closest
21964 surrounding brace pair.  For example, with the `struct point'
21965 declaration above:
21966
21967      struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
21968
21969 If the same field is initialized multiple times, it has the value from
21970 the last initialization.  If any such overridden initialization has
21971 side-effect, it is unspecified whether the side-effect happens or not.
21972 Currently, GCC discards them and issues a warning.
21973
21974 \1f
21975 File: gcc.info,  Node: Case Ranges,  Next: Cast to Union,  Prev: Designated Inits,  Up: C Extensions
21976
21977 6.27 Case Ranges
21978 ================
21979
21980 You can specify a range of consecutive values in a single `case' label,
21981 like this:
21982
21983      case LOW ... HIGH:
21984
21985 This has the same effect as the proper number of individual `case'
21986 labels, one for each integer value from LOW to HIGH, inclusive.
21987
21988  This feature is especially useful for ranges of ASCII character codes:
21989
21990      case 'A' ... 'Z':
21991
21992  *Be careful:* Write spaces around the `...', for otherwise it may be
21993 parsed wrong when you use it with integer values.  For example, write
21994 this:
21995
21996      case 1 ... 5:
21997
21998 rather than this:
21999
22000      case 1...5:
22001
22002 \1f
22003 File: gcc.info,  Node: Cast to Union,  Next: Mixed Declarations,  Prev: Case Ranges,  Up: C Extensions
22004
22005 6.28 Cast to a Union Type
22006 =========================
22007
22008 A cast to union type is similar to other casts, except that the type
22009 specified is a union type.  You can specify the type either with `union
22010 TAG' or with a typedef name.  A cast to union is actually a
22011 constructor, not a cast, and hence does not yield an lvalue like normal
22012 casts.  (*Note Compound Literals::.)
22013
22014  The types that may be cast to the union type are those of the members
22015 of the union.  Thus, given the following union and variables:
22016
22017      union foo { int i; double d; };
22018      int x;
22019      double y;
22020
22021 both `x' and `y' can be cast to type `union foo'.
22022
22023  Using the cast as the right-hand side of an assignment to a variable of
22024 union type is equivalent to storing in a member of the union:
22025
22026      union foo u;
22027      /* ... */
22028      u = (union foo) x  ==  u.i = x
22029      u = (union foo) y  ==  u.d = y
22030
22031  You can also use the union cast as a function argument:
22032
22033      void hack (union foo);
22034      /* ... */
22035      hack ((union foo) x);
22036
22037 \1f
22038 File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Cast to Union,  Up: C Extensions
22039
22040 6.29 Mixed Declarations and Code
22041 ================================
22042
22043 ISO C99 and ISO C++ allow declarations and code to be freely mixed
22044 within compound statements.  As an extension, GNU C also allows this in
22045 C90 mode.  For example, you could do:
22046
22047      int i;
22048      /* ... */
22049      i++;
22050      int j = i + 2;
22051
22052  Each identifier is visible from where it is declared until the end of
22053 the enclosing block.
22054
22055 \1f
22056 File: gcc.info,  Node: Function Attributes,  Next: Attribute Syntax,  Prev: Mixed Declarations,  Up: C Extensions
22057
22058 6.30 Declaring Attributes of Functions
22059 ======================================
22060
22061 In GNU C, you declare certain things about functions called in your
22062 program which help the compiler optimize function calls and check your
22063 code more carefully.
22064
22065  The keyword `__attribute__' allows you to specify special attributes
22066 when making a declaration.  This keyword is followed by an attribute
22067 specification inside double parentheses.  The following attributes are
22068 currently defined for functions on all targets: `aligned',
22069 `alloc_size', `noreturn', `returns_twice', `noinline', `noclone',
22070 `always_inline', `flatten', `pure', `const', `nothrow', `sentinel',
22071 `format', `format_arg', `no_instrument_function', `no_split_stack',
22072 `section', `constructor', `destructor', `used', `unused', `deprecated',
22073 `weak', `malloc', `alias', `ifunc', `warn_unused_result', `nonnull',
22074 `gnu_inline', `externally_visible', `hot', `cold', `artificial',
22075 `no_sanitize_address', `no_address_safety_analysis', `error' and
22076 `warning'.  Several other attributes are defined for functions on
22077 particular target systems.  Other attributes, including `section' are
22078 supported for variables declarations (*note Variable Attributes::) and
22079 for types (*note Type Attributes::).
22080
22081  GCC plugins may provide their own attributes.
22082
22083  You may also specify attributes with `__' preceding and following each
22084 keyword.  This allows you to use them in header files without being
22085 concerned about a possible macro of the same name.  For example, you
22086 may use `__noreturn__' instead of `noreturn'.
22087
22088  *Note Attribute Syntax::, for details of the exact syntax for using
22089 attributes.
22090
22091 `alias ("TARGET")'
22092      The `alias' attribute causes the declaration to be emitted as an
22093      alias for another symbol, which must be specified.  For instance,
22094
22095           void __f () { /* Do something. */; }
22096           void f () __attribute__ ((weak, alias ("__f")));
22097
22098      defines `f' to be a weak alias for `__f'.  In C++, the mangled
22099      name for the target must be used.  It is an error if `__f' is not
22100      defined in the same translation unit.
22101
22102      Not all target machines support this attribute.
22103
22104 `aligned (ALIGNMENT)'
22105      This attribute specifies a minimum alignment for the function,
22106      measured in bytes.
22107
22108      You cannot use this attribute to decrease the alignment of a
22109      function, only to increase it.  However, when you explicitly
22110      specify a function alignment this overrides the effect of the
22111      `-falign-functions' (*note Optimize Options::) option for this
22112      function.
22113
22114      Note that the effectiveness of `aligned' attributes may be limited
22115      by inherent limitations in your linker.  On many systems, the
22116      linker is only able to arrange for functions to be aligned up to a
22117      certain maximum alignment.  (For some linkers, the maximum
22118      supported alignment may be very very small.)  See your linker
22119      documentation for further information.
22120
22121      The `aligned' attribute can also be used for variables and fields
22122      (*note Variable Attributes::.)
22123
22124 `alloc_size'
22125      The `alloc_size' attribute is used to tell the compiler that the
22126      function return value points to memory, where the size is given by
22127      one or two of the functions parameters.  GCC uses this information
22128      to improve the correctness of `__builtin_object_size'.
22129
22130      The function parameter(s) denoting the allocated size are
22131      specified by one or two integer arguments supplied to the
22132      attribute.  The allocated size is either the value of the single
22133      function argument specified or the product of the two function
22134      arguments specified.  Argument numbering starts at one.
22135
22136      For instance,
22137
22138           void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2)))
22139           void my_realloc(void*, size_t) __attribute__((alloc_size(2)))
22140
22141      declares that `my_calloc' returns memory of the size given by the
22142      product of parameter 1 and 2 and that `my_realloc' returns memory
22143      of the size given by parameter 2.
22144
22145 `always_inline'
22146      Generally, functions are not inlined unless optimization is
22147      specified.  For functions declared inline, this attribute inlines
22148      the function even if no optimization level is specified.
22149
22150 `gnu_inline'
22151      This attribute should be used with a function that is also declared
22152      with the `inline' keyword.  It directs GCC to treat the function
22153      as if it were defined in gnu90 mode even when compiling in C99 or
22154      gnu99 mode.
22155
22156      If the function is declared `extern', then this definition of the
22157      function is used only for inlining.  In no case is the function
22158      compiled as a standalone function, not even if you take its address
22159      explicitly.  Such an address becomes an external reference, as if
22160      you had only declared the function, and had not defined it.  This
22161      has almost the effect of a macro.  The way to use this is to put a
22162      function definition in a header file with this attribute, and put
22163      another copy of the function, without `extern', in a library file.
22164      The definition in the header file causes most calls to the
22165      function to be inlined.  If any uses of the function remain, they
22166      refer to the single copy in the library.  Note that the two
22167      definitions of the functions need not be precisely the same,
22168      although if they do not have the same effect your program may
22169      behave oddly.
22170
22171      In C, if the function is neither `extern' nor `static', then the
22172      function is compiled as a standalone function, as well as being
22173      inlined where possible.
22174
22175      This is how GCC traditionally handled functions declared `inline'.
22176      Since ISO C99 specifies a different semantics for `inline', this
22177      function attribute is provided as a transition measure and as a
22178      useful feature in its own right.  This attribute is available in
22179      GCC 4.1.3 and later.  It is available if either of the
22180      preprocessor macros `__GNUC_GNU_INLINE__' or
22181      `__GNUC_STDC_INLINE__' are defined.  *Note An Inline Function is
22182      As Fast As a Macro: Inline.
22183
22184      In C++, this attribute does not depend on `extern' in any way, but
22185      it still requires the `inline' keyword to enable its special
22186      behavior.
22187
22188 `artificial'
22189      This attribute is useful for small inline wrappers that if possible
22190      should appear during debugging as a unit.  Depending on the debug
22191      info format it either means marking the function as artificial or
22192      using the caller location for all instructions within the inlined
22193      body.
22194
22195 `bank_switch'
22196      When added to an interrupt handler with the M32C port, causes the
22197      prologue and epilogue to use bank switching to preserve the
22198      registers rather than saving them on the stack.
22199
22200 `flatten'
22201      Generally, inlining into a function is limited.  For a function
22202      marked with this attribute, every call inside this function is
22203      inlined, if possible.  Whether the function itself is considered
22204      for inlining depends on its size and the current inlining
22205      parameters.
22206
22207 `error ("MESSAGE")'
22208      If this attribute is used on a function declaration and a call to
22209      such a function is not eliminated through dead code elimination or
22210      other optimizations, an error that includes MESSAGE is diagnosed.
22211      This is useful for compile-time checking, especially together with
22212      `__builtin_constant_p' and inline functions where checking the
22213      inline function arguments is not possible through `extern char
22214      [(condition) ? 1 : -1];' tricks.  While it is possible to leave
22215      the function undefined and thus invoke a link failure, when using
22216      this attribute the problem is diagnosed earlier and with exact
22217      location of the call even in presence of inline functions or when
22218      not emitting debugging information.
22219
22220 `warning ("MESSAGE")'
22221      If this attribute is used on a function declaration and a call to
22222      such a function is not eliminated through dead code elimination or
22223      other optimizations, a warning that includes MESSAGE is diagnosed.
22224      This is useful for compile-time checking, especially together with
22225      `__builtin_constant_p' and inline functions.  While it is possible
22226      to define the function with a message in `.gnu.warning*' section,
22227      when using this attribute the problem is diagnosed earlier and
22228      with exact location of the call even in presence of inline
22229      functions or when not emitting debugging information.
22230
22231 `cdecl'
22232      On the Intel 386, the `cdecl' attribute causes the compiler to
22233      assume that the calling function pops off the stack space used to
22234      pass arguments.  This is useful to override the effects of the
22235      `-mrtd' switch.
22236
22237 `const'
22238      Many functions do not examine any values except their arguments,
22239      and have no effects except the return value.  Basically this is
22240      just slightly more strict class than the `pure' attribute below,
22241      since function is not allowed to read global memory.
22242
22243      Note that a function that has pointer arguments and examines the
22244      data pointed to must _not_ be declared `const'.  Likewise, a
22245      function that calls a non-`const' function usually must not be
22246      `const'.  It does not make sense for a `const' function to return
22247      `void'.
22248
22249      The attribute `const' is not implemented in GCC versions earlier
22250      than 2.5.  An alternative way to declare that a function has no
22251      side effects, which works in the current version and in some older
22252      versions, is as follows:
22253
22254           typedef int intfn ();
22255
22256           extern const intfn square;
22257
22258      This approach does not work in GNU C++ from 2.6.0 on, since the
22259      language specifies that the `const' must be attached to the return
22260      value.
22261
22262 `constructor'
22263 `destructor'
22264 `constructor (PRIORITY)'
22265 `destructor (PRIORITY)'
22266      The `constructor' attribute causes the function to be called
22267      automatically before execution enters `main ()'.  Similarly, the
22268      `destructor' attribute causes the function to be called
22269      automatically after `main ()' completes or `exit ()' is called.
22270      Functions with these attributes are useful for initializing data
22271      that is used implicitly during the execution of the program.
22272
22273      You may provide an optional integer priority to control the order
22274      in which constructor and destructor functions are run.  A
22275      constructor with a smaller priority number runs before a
22276      constructor with a larger priority number; the opposite
22277      relationship holds for destructors.  So, if you have a constructor
22278      that allocates a resource and a destructor that deallocates the
22279      same resource, both functions typically have the same priority.
22280      The priorities for constructor and destructor functions are the
22281      same as those specified for namespace-scope C++ objects (*note C++
22282      Attributes::).
22283
22284      These attributes are not currently implemented for Objective-C.
22285
22286 `deprecated'
22287 `deprecated (MSG)'
22288      The `deprecated' attribute results in a warning if the function is
22289      used anywhere in the source file.  This is useful when identifying
22290      functions that are expected to be removed in a future version of a
22291      program.  The warning also includes the location of the declaration
22292      of the deprecated function, to enable users to easily find further
22293      information about why the function is deprecated, or what they
22294      should do instead.  Note that the warnings only occurs for uses:
22295
22296           int old_fn () __attribute__ ((deprecated));
22297           int old_fn ();
22298           int (*fn_ptr)() = old_fn;
22299
22300      results in a warning on line 3 but not line 2.  The optional MSG
22301      argument, which must be a string, is printed in the warning if
22302      present.
22303
22304      The `deprecated' attribute can also be used for variables and
22305      types (*note Variable Attributes::, *note Type Attributes::.)
22306
22307 `disinterrupt'
22308      On Epiphany and MeP targets, this attribute causes the compiler to
22309      emit instructions to disable interrupts for the duration of the
22310      given function.
22311
22312 `dllexport'
22313      On Microsoft Windows targets and Symbian OS targets the
22314      `dllexport' attribute causes the compiler to provide a global
22315      pointer to a pointer in a DLL, so that it can be referenced with
22316      the `dllimport' attribute.  On Microsoft Windows targets, the
22317      pointer name is formed by combining `_imp__' and the function or
22318      variable name.
22319
22320      You can use `__declspec(dllexport)' as a synonym for
22321      `__attribute__ ((dllexport))' for compatibility with other
22322      compilers.
22323
22324      On systems that support the `visibility' attribute, this attribute
22325      also implies "default" visibility.  It is an error to explicitly
22326      specify any other visibility.
22327
22328      In previous versions of GCC, the `dllexport' attribute was ignored
22329      for inlined functions, unless the `-fkeep-inline-functions' flag
22330      had been used.  The default behavior now is to emit all dllexported
22331      inline functions; however, this can cause object file-size bloat,
22332      in which case the old behavior can be restored by using
22333      `-fno-keep-inline-dllexport'.
22334
22335      The attribute is also ignored for undefined symbols.
22336
22337      When applied to C++ classes, the attribute marks defined
22338      non-inlined member functions and static data members as exports.
22339      Static consts initialized in-class are not marked unless they are
22340      also defined out-of-class.
22341
22342      For Microsoft Windows targets there are alternative methods for
22343      including the symbol in the DLL's export table such as using a
22344      `.def' file with an `EXPORTS' section or, with GNU ld, using the
22345      `--export-all' linker flag.
22346
22347 `dllimport'
22348      On Microsoft Windows and Symbian OS targets, the `dllimport'
22349      attribute causes the compiler to reference a function or variable
22350      via a global pointer to a pointer that is set up by the DLL
22351      exporting the symbol.  The attribute implies `extern'.  On
22352      Microsoft Windows targets, the pointer name is formed by combining
22353      `_imp__' and the function or variable name.
22354
22355      You can use `__declspec(dllimport)' as a synonym for
22356      `__attribute__ ((dllimport))' for compatibility with other
22357      compilers.
22358
22359      On systems that support the `visibility' attribute, this attribute
22360      also implies "default" visibility.  It is an error to explicitly
22361      specify any other visibility.
22362
22363      Currently, the attribute is ignored for inlined functions.  If the
22364      attribute is applied to a symbol _definition_, an error is
22365      reported.  If a symbol previously declared `dllimport' is later
22366      defined, the attribute is ignored in subsequent references, and a
22367      warning is emitted.  The attribute is also overridden by a
22368      subsequent declaration as `dllexport'.
22369
22370      When applied to C++ classes, the attribute marks non-inlined
22371      member functions and static data members as imports.  However, the
22372      attribute is ignored for virtual methods to allow creation of
22373      vtables using thunks.
22374
22375      On the SH Symbian OS target the `dllimport' attribute also has
22376      another affect--it can cause the vtable and run-time type
22377      information for a class to be exported.  This happens when the
22378      class has a dllimported constructor or a non-inline, non-pure
22379      virtual function and, for either of those two conditions, the
22380      class also has an inline constructor or destructor and has a key
22381      function that is defined in the current translation unit.
22382
22383      For Microsoft Windows targets the use of the `dllimport' attribute
22384      on functions is not necessary, but provides a small performance
22385      benefit by eliminating a thunk in the DLL.  The use of the
22386      `dllimport' attribute on imported variables was required on older
22387      versions of the GNU linker, but can now be avoided by passing the
22388      `--enable-auto-import' switch to the GNU linker.  As with
22389      functions, using the attribute for a variable eliminates a thunk in
22390      the DLL.
22391
22392      One drawback to using this attribute is that a pointer to a
22393      _variable_ marked as `dllimport' cannot be used as a constant
22394      address. However, a pointer to a _function_ with the `dllimport'
22395      attribute can be used as a constant initializer; in this case, the
22396      address of a stub function in the import lib is referenced.  On
22397      Microsoft Windows targets, the attribute can be disabled for
22398      functions by setting the `-mnop-fun-dllimport' flag.
22399
22400 `eightbit_data'
22401      Use this attribute on the H8/300, H8/300H, and H8S to indicate
22402      that the specified variable should be placed into the eight-bit
22403      data section.  The compiler generates more efficient code for
22404      certain operations on data in the eight-bit data area.  Note the
22405      eight-bit data area is limited to 256 bytes of data.
22406
22407      You must use GAS and GLD from GNU binutils version 2.7 or later for
22408      this attribute to work correctly.
22409
22410 `exception_handler'
22411      Use this attribute on the Blackfin to indicate that the specified
22412      function is an exception handler.  The compiler generates function
22413      entry and exit sequences suitable for use in an exception handler
22414      when this attribute is present.
22415
22416 `externally_visible'
22417      This attribute, attached to a global variable or function,
22418      nullifies the effect of the `-fwhole-program' command-line option,
22419      so the object remains visible outside the current compilation unit.
22420
22421      If `-fwhole-program' is used together with `-flto' and `gold' is
22422      used as the linker plugin, `externally_visible' attributes are
22423      automatically added to functions (not variable yet due to a
22424      current `gold' issue) that are accessed outside of LTO objects
22425      according to resolution file produced by `gold'.  For other
22426      linkers that cannot generate resolution file, explicit
22427      `externally_visible' attributes are still necessary.
22428
22429 `far'
22430      On 68HC11 and 68HC12 the `far' attribute causes the compiler to
22431      use a calling convention that takes care of switching memory banks
22432      when entering and leaving a function.  This calling convention is
22433      also the default when using the `-mlong-calls' option.
22434
22435      On 68HC12 the compiler uses the `call' and `rtc' instructions to
22436      call and return from a function.
22437
22438      On 68HC11 the compiler generates a sequence of instructions to
22439      invoke a board-specific routine to switch the memory bank and call
22440      the real function.  The board-specific routine simulates a `call'.
22441      At the end of a function, it jumps to a board-specific routine
22442      instead of using `rts'.  The board-specific return routine
22443      simulates the `rtc'.
22444
22445      On MeP targets this causes the compiler to use a calling convention
22446      that assumes the called function is too far away for the built-in
22447      addressing modes.
22448
22449 `fast_interrupt'
22450      Use this attribute on the M32C and RX ports to indicate that the
22451      specified function is a fast interrupt handler.  This is just like
22452      the `interrupt' attribute, except that `freit' is used to return
22453      instead of `reit'.
22454
22455 `fastcall'
22456      On the Intel 386, the `fastcall' attribute causes the compiler to
22457      pass the first argument (if of integral type) in the register ECX
22458      and the second argument (if of integral type) in the register EDX.
22459      Subsequent and other typed arguments are passed on the stack.  The
22460      called function pops the arguments off the stack.  If the number
22461      of arguments is variable all arguments are pushed on the stack.
22462
22463 `thiscall'
22464      On the Intel 386, the `thiscall' attribute causes the compiler to
22465      pass the first argument (if of integral type) in the register ECX.
22466      Subsequent and other typed arguments are passed on the stack. The
22467      called function pops the arguments off the stack.  If the number
22468      of arguments is variable all arguments are pushed on the stack.
22469      The `thiscall' attribute is intended for C++ non-static member
22470      functions.  As a GCC extension, this calling convention can be
22471      used for C functions and for static member methods.
22472
22473 `format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
22474      The `format' attribute specifies that a function takes `printf',
22475      `scanf', `strftime' or `strfmon' style arguments that should be
22476      type-checked against a format string.  For example, the
22477      declaration:
22478
22479           extern int
22480           my_printf (void *my_object, const char *my_format, ...)
22481                 __attribute__ ((format (printf, 2, 3)));
22482
22483      causes the compiler to check the arguments in calls to `my_printf'
22484      for consistency with the `printf' style format string argument
22485      `my_format'.
22486
22487      The parameter ARCHETYPE determines how the format string is
22488      interpreted, and should be `printf', `scanf', `strftime',
22489      `gnu_printf', `gnu_scanf', `gnu_strftime' or `strfmon'.  (You can
22490      also use `__printf__', `__scanf__', `__strftime__' or
22491      `__strfmon__'.)  On MinGW targets, `ms_printf', `ms_scanf', and
22492      `ms_strftime' are also present.  ARCHETYPE values such as `printf'
22493      refer to the formats accepted by the system's C runtime library,
22494      while values prefixed with `gnu_' always refer to the formats
22495      accepted by the GNU C Library.  On Microsoft Windows targets,
22496      values prefixed with `ms_' refer to the formats accepted by the
22497      `msvcrt.dll' library.  The parameter STRING-INDEX specifies which
22498      argument is the format string argument (starting from 1), while
22499      FIRST-TO-CHECK is the number of the first argument to check
22500      against the format string.  For functions where the arguments are
22501      not available to be checked (such as `vprintf'), specify the third
22502      parameter as zero.  In this case the compiler only checks the
22503      format string for consistency.  For `strftime' formats, the third
22504      parameter is required to be zero.  Since non-static C++ methods
22505      have an implicit `this' argument, the arguments of such methods
22506      should be counted from two, not one, when giving values for
22507      STRING-INDEX and FIRST-TO-CHECK.
22508
22509      In the example above, the format string (`my_format') is the second
22510      argument of the function `my_print', and the arguments to check
22511      start with the third argument, so the correct parameters for the
22512      format attribute are 2 and 3.
22513
22514      The `format' attribute allows you to identify your own functions
22515      that take format strings as arguments, so that GCC can check the
22516      calls to these functions for errors.  The compiler always (unless
22517      `-ffreestanding' or `-fno-builtin' is used) checks formats for the
22518      standard library functions `printf', `fprintf', `sprintf',
22519      `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and
22520      `vsprintf' whenever such warnings are requested (using
22521      `-Wformat'), so there is no need to modify the header file
22522      `stdio.h'.  In C99 mode, the functions `snprintf', `vsnprintf',
22523      `vscanf', `vfscanf' and `vsscanf' are also checked.  Except in
22524      strictly conforming C standard modes, the X/Open function
22525      `strfmon' is also checked as are `printf_unlocked' and
22526      `fprintf_unlocked'.  *Note Options Controlling C Dialect: C
22527      Dialect Options.
22528
22529      For Objective-C dialects, `NSString' (or `__NSString__') is
22530      recognized in the same context.  Declarations including these
22531      format attributes are parsed for correct syntax, however the
22532      result of checking of such format strings is not yet defined, and
22533      is not carried out by this version of the compiler.
22534
22535      The target may also provide additional types of format checks.
22536      *Note Format Checks Specific to Particular Target Machines: Target
22537      Format Checks.
22538
22539 `format_arg (STRING-INDEX)'
22540      The `format_arg' attribute specifies that a function takes a format
22541      string for a `printf', `scanf', `strftime' or `strfmon' style
22542      function and modifies it (for example, to translate it into
22543      another language), so the result can be passed to a `printf',
22544      `scanf', `strftime' or `strfmon' style function (with the
22545      remaining arguments to the format function the same as they would
22546      have been for the unmodified string).  For example, the
22547      declaration:
22548
22549           extern char *
22550           my_dgettext (char *my_domain, const char *my_format)
22551                 __attribute__ ((format_arg (2)));
22552
22553      causes the compiler to check the arguments in calls to a `printf',
22554      `scanf', `strftime' or `strfmon' type function, whose format
22555      string argument is a call to the `my_dgettext' function, for
22556      consistency with the format string argument `my_format'.  If the
22557      `format_arg' attribute had not been specified, all the compiler
22558      could tell in such calls to format functions would be that the
22559      format string argument is not constant; this would generate a
22560      warning when `-Wformat-nonliteral' is used, but the calls could
22561      not be checked without the attribute.
22562
22563      The parameter STRING-INDEX specifies which argument is the format
22564      string argument (starting from one).  Since non-static C++ methods
22565      have an implicit `this' argument, the arguments of such methods
22566      should be counted from two.
22567
22568      The `format_arg' attribute allows you to identify your own
22569      functions that modify format strings, so that GCC can check the
22570      calls to `printf', `scanf', `strftime' or `strfmon' type function
22571      whose operands are a call to one of your own function.  The
22572      compiler always treats `gettext', `dgettext', and `dcgettext' in
22573      this manner except when strict ISO C support is requested by
22574      `-ansi' or an appropriate `-std' option, or `-ffreestanding' or
22575      `-fno-builtin' is used.  *Note Options Controlling C Dialect: C
22576      Dialect Options.
22577
22578      For Objective-C dialects, the `format-arg' attribute may refer to
22579      an `NSString' reference for compatibility with the `format'
22580      attribute above.
22581
22582      The target may also allow additional types in `format-arg'
22583      attributes.  *Note Format Checks Specific to Particular Target
22584      Machines: Target Format Checks.
22585
22586 `function_vector'
22587      Use this attribute on the H8/300, H8/300H, and H8S to indicate
22588      that the specified function should be called through the function
22589      vector.  Calling a function through the function vector reduces
22590      code size, however; the function vector has a limited size
22591      (maximum 128 entries on the H8/300 and 64 entries on the H8/300H
22592      and H8S) and shares space with the interrupt vector.
22593
22594      On SH2A targets, this attribute declares a function to be called
22595      using the TBR relative addressing mode.  The argument to this
22596      attribute is the entry number of the same function in a vector
22597      table containing all the TBR relative addressable functions.  For
22598      correct operation the TBR must be setup accordingly to point to
22599      the start of the vector table before any functions with this
22600      attribute are invoked.  Usually a good place to do the
22601      initialization is the startup routine.  The TBR relative vector
22602      table can have at max 256 function entries.  The jumps to these
22603      functions are generated using a SH2A specific, non delayed branch
22604      instruction JSR/N @(disp8,TBR).  You must use GAS and GLD from GNU
22605      binutils version 2.7 or later for this attribute to work correctly.
22606
22607      Please refer the example of M16C target, to see the use of this
22608      attribute while declaring a function,
22609
22610      In an application, for a function being called once, this attribute
22611      saves at least 8 bytes of code; and if other successive calls are
22612      being made to the same function, it saves 2 bytes of code per each
22613      of these calls.
22614
22615      On M16C/M32C targets, the `function_vector' attribute declares a
22616      special page subroutine call function. Use of this attribute
22617      reduces the code size by 2 bytes for each call generated to the
22618      subroutine. The argument to the attribute is the vector number
22619      entry from the special page vector table which contains the 16
22620      low-order bits of the subroutine's entry address. Each vector
22621      table has special page number (18 to 255) that is used in `jsrs'
22622      instructions.  Jump addresses of the routines are generated by
22623      adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
22624      M32C targets), to the 2-byte addresses set in the vector table.
22625      Therefore you need to ensure that all the special page vector
22626      routines should get mapped within the address range 0x0F0000 to
22627      0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).
22628
22629      In the following example 2 bytes are saved for each call to
22630      function `foo'.
22631
22632           void foo (void) __attribute__((function_vector(0x18)));
22633           void foo (void)
22634           {
22635           }
22636
22637           void bar (void)
22638           {
22639               foo();
22640           }
22641
22642      If functions are defined in one file and are called in another
22643      file, then be sure to write this declaration in both files.
22644
22645      This attribute is ignored for R8C target.
22646
22647 `ifunc ("RESOLVER")'
22648      The `ifunc' attribute is used to mark a function as an indirect
22649      function using the STT_GNU_IFUNC symbol type extension to the ELF
22650      standard.  This allows the resolution of the symbol value to be
22651      determined dynamically at load time, and an optimized version of
22652      the routine can be selected for the particular processor or other
22653      system characteristics determined then.  To use this attribute,
22654      first define the implementation functions available, and a
22655      resolver function that returns a pointer to the selected
22656      implementation function.  The implementation functions'
22657      declarations must match the API of the function being implemented,
22658      the resolver's declaration is be a function returning pointer to
22659      void function returning void:
22660
22661           void *my_memcpy (void *dst, const void *src, size_t len)
22662           {
22663             ...
22664           }
22665
22666           static void (*resolve_memcpy (void)) (void)
22667           {
22668             return my_memcpy; // we'll just always select this routine
22669           }
22670
22671      The exported header file declaring the function the user calls
22672      would contain:
22673
22674           extern void *memcpy (void *, const void *, size_t);
22675
22676      allowing the user to call this as a regular function, unaware of
22677      the implementation.  Finally, the indirect function needs to be
22678      defined in the same translation unit as the resolver function:
22679
22680           void *memcpy (void *, const void *, size_t)
22681                __attribute__ ((ifunc ("resolve_memcpy")));
22682
22683      Indirect functions cannot be weak, and require a recent binutils
22684      (at least version 2.20.1), and GNU C library (at least version
22685      2.11.1).
22686
22687 `interrupt'
22688      Use this attribute on the ARM, AVR, CR16, Epiphany, M32C, M32R/D,
22689      m68k, MeP, MIPS, RL78, RX and Xstormy16 ports to indicate that the
22690      specified function is an interrupt handler.  The compiler
22691      generates function entry and exit sequences suitable for use in an
22692      interrupt handler when this attribute is present.  With Epiphany
22693      targets it may also generate a special section with code to
22694      initialize the interrupt vector table.
22695
22696      Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S,
22697      MicroBlaze, and SH processors can be specified via the
22698      `interrupt_handler' attribute.
22699
22700      Note, on the AVR, the hardware globally disables interrupts when an
22701      interrupt is executed.  The first instruction of an interrupt
22702      handler declared with this attribute is a `SEI' instruction to
22703      re-enable interrupts.  See also the `signal' function attribute
22704      that does not insert a `SEI' instruction.  If both `signal' and
22705      `interrupt' are specified for the same function, `signal' is
22706      silently ignored.
22707
22708      Note, for the ARM, you can specify the kind of interrupt to be
22709      handled by adding an optional parameter to the interrupt attribute
22710      like this:
22711
22712           void f () __attribute__ ((interrupt ("IRQ")));
22713
22714      Permissible values for this parameter are: `IRQ', `FIQ', `SWI',
22715      `ABORT' and `UNDEF'.
22716
22717      On ARMv7-M the interrupt type is ignored, and the attribute means
22718      the function may be called with a word-aligned stack pointer.
22719
22720      On Epiphany targets one or more optional parameters can be added
22721      like this:
22722
22723           void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
22724
22725      Permissible values for these parameters are: `reset',
22726      `software_exception', `page_miss', `timer0', `timer1', `message',
22727      `dma0', `dma1', `wand' and `swi'.  Multiple parameters indicate
22728      that multiple entries in the interrupt vector table should be
22729      initialized for this function, i.e. for each parameter NAME, a
22730      jump to the function is emitted in the section ivt_entry_NAME.
22731      The parameter(s) may be omitted entirely, in which case no
22732      interrupt vector table entry is provided.
22733
22734      Note, on Epiphany targets, interrupts are enabled inside the
22735      function unless the `disinterrupt' attribute is also specified.
22736
22737      On Epiphany targets, you can also use the following attribute to
22738      modify the behavior of an interrupt handler:
22739     `forwarder_section'
22740           The interrupt handler may be in external memory which cannot
22741           be reached by a branch instruction, so generate a local
22742           memory trampoline to transfer control.  The single parameter
22743           identifies the section where the trampoline is placed.
22744
22745      The following examples are all valid uses of these attributes on
22746      Epiphany targets:
22747           void __attribute__ ((interrupt)) universal_handler ();
22748           void __attribute__ ((interrupt ("dma1"))) dma1_handler ();
22749           void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
22750           void __attribute__ ((interrupt ("timer0"), disinterrupt))
22751             fast_timer_handler ();
22752           void __attribute__ ((interrupt ("dma0, dma1"), forwarder_section ("tramp")))
22753             external_dma_handler ();
22754
22755      On MIPS targets, you can use the following attributes to modify
22756      the behavior of an interrupt handler:
22757     `use_shadow_register_set'
22758           Assume that the handler uses a shadow register set, instead of
22759           the main general-purpose registers.
22760
22761     `keep_interrupts_masked'
22762           Keep interrupts masked for the whole function.  Without this
22763           attribute, GCC tries to reenable interrupts for as much of
22764           the function as it can.
22765
22766     `use_debug_exception_return'
22767           Return using the `deret' instruction.  Interrupt handlers
22768           that don't have this attribute return using `eret' instead.
22769
22770      You can use any combination of these attributes, as shown below:
22771           void __attribute__ ((interrupt)) v0 ();
22772           void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
22773           void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
22774           void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
22775           void __attribute__ ((interrupt, use_shadow_register_set,
22776                                keep_interrupts_masked)) v4 ();
22777           void __attribute__ ((interrupt, use_shadow_register_set,
22778                                use_debug_exception_return)) v5 ();
22779           void __attribute__ ((interrupt, keep_interrupts_masked,
22780                                use_debug_exception_return)) v6 ();
22781           void __attribute__ ((interrupt, use_shadow_register_set,
22782                                keep_interrupts_masked,
22783                                use_debug_exception_return)) v7 ();
22784
22785      On RL78, use `brk_interrupt' instead of `interrupt' for handlers
22786      intended to be used with the `BRK' opcode (i.e. those that must
22787      end with `RETB' instead of `RETI').
22788
22789 `interrupt_handler'
22790      Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S,
22791      and SH to indicate that the specified function is an interrupt
22792      handler.  The compiler generates function entry and exit sequences
22793      suitable for use in an interrupt handler when this attribute is
22794      present.
22795
22796 `interrupt_thread'
22797      Use this attribute on fido, a subarchitecture of the m68k, to
22798      indicate that the specified function is an interrupt handler that
22799      is designed to run as a thread.  The compiler omits generate
22800      prologue/epilogue sequences and replaces the return instruction
22801      with a `sleep' instruction.  This attribute is available only on
22802      fido.
22803
22804 `isr'
22805      Use this attribute on ARM to write Interrupt Service Routines.
22806      This is an alias to the `interrupt' attribute above.
22807
22808 `kspisusp'
22809      When used together with `interrupt_handler', `exception_handler'
22810      or `nmi_handler', code is generated to load the stack pointer from
22811      the USP register in the function prologue.
22812
22813 `l1_text'
22814      This attribute specifies a function to be placed into L1
22815      Instruction SRAM. The function is put into a specific section
22816      named `.l1.text'.  With `-mfdpic', function calls with a such
22817      function as the callee or caller uses inlined PLT.
22818
22819 `l2'
22820      On the Blackfin, this attribute specifies a function to be placed
22821      into L2 SRAM. The function is put into a specific section named
22822      `.l1.text'. With `-mfdpic', callers of such functions use an
22823      inlined PLT.
22824
22825 `leaf'
22826      Calls to external functions with this attribute must return to the
22827      current compilation unit only by return or by exception handling.
22828      In particular, leaf functions are not allowed to call callback
22829      function passed to it from the current compilation unit or
22830      directly call functions exported by the unit or longjmp into the
22831      unit.  Leaf function might still call functions from other
22832      compilation units and thus they are not necessarily leaf in the
22833      sense that they contain no function calls at all.
22834
22835      The attribute is intended for library functions to improve
22836      dataflow analysis.  The compiler takes the hint that any data not
22837      escaping the current compilation unit can not be used or modified
22838      by the leaf function.  For example, the `sin' function is a leaf
22839      function, but `qsort' is not.
22840
22841      Note that leaf functions might invoke signals and signal handlers
22842      might be defined in the current compilation unit and use static
22843      variables.  The only compliant way to write such a signal handler
22844      is to declare such variables `volatile'.
22845
22846      The attribute has no effect on functions defined within the
22847      current compilation unit.  This is to allow easy merging of
22848      multiple compilation units into one, for example, by using the
22849      link-time optimization.  For this reason the attribute is not
22850      allowed on types to annotate indirect calls.
22851
22852 `long_call/short_call'
22853      This attribute specifies how a particular function is called on
22854      ARM and Epiphany.  Both attributes override the `-mlong-calls'
22855      (*note ARM Options::) command-line switch and `#pragma long_calls'
22856      settings.  The `long_call' attribute indicates that the function
22857      might be far away from the call site and require a different (more
22858      expensive) calling sequence.   The `short_call' attribute always
22859      places the offset to the function from the call site into the `BL'
22860      instruction directly.
22861
22862 `longcall/shortcall'
22863      On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute
22864      indicates that the function might be far away from the call site
22865      and require a different (more expensive) calling sequence.  The
22866      `shortcall' attribute indicates that the function is always close
22867      enough for the shorter calling sequence to be used.  These
22868      attributes override both the `-mlongcall' switch and, on the
22869      RS/6000 and PowerPC, the `#pragma longcall' setting.
22870
22871      *Note RS/6000 and PowerPC Options::, for more information on
22872      whether long calls are necessary.
22873
22874 `long_call/near/far'
22875      These attributes specify how a particular function is called on
22876      MIPS.  The attributes override the `-mlong-calls' (*note MIPS
22877      Options::) command-line switch.  The `long_call' and `far'
22878      attributes are synonyms, and cause the compiler to always call the
22879      function by first loading its address into a register, and then
22880      using the contents of that register.  The `near' attribute has the
22881      opposite effect; it specifies that non-PIC calls should be made
22882      using the more efficient `jal' instruction.
22883
22884 `malloc'
22885      The `malloc' attribute is used to tell the compiler that a function
22886      may be treated as if any non-`NULL' pointer it returns cannot
22887      alias any other pointer valid when the function returns and that
22888      the memory has undefined content.  This often improves
22889      optimization.  Standard functions with this property include
22890      `malloc' and `calloc'.  `realloc'-like functions do not have this
22891      property as the memory pointed to does not have undefined content.
22892
22893 `mips16/nomips16'
22894      On MIPS targets, you can use the `mips16' and `nomips16' function
22895      attributes to locally select or turn off MIPS16 code generation.
22896      A function with the `mips16' attribute is emitted as MIPS16 code,
22897      while MIPS16 code generation is disabled for functions with the
22898      `nomips16' attribute.  These attributes override the `-mips16' and
22899      `-mno-mips16' options on the command line (*note MIPS Options::).
22900
22901      When compiling files containing mixed MIPS16 and non-MIPS16 code,
22902      the preprocessor symbol `__mips16' reflects the setting on the
22903      command line, not that within individual functions.  Mixed MIPS16
22904      and non-MIPS16 code may interact badly with some GCC extensions
22905      such as `__builtin_apply' (*note Constructing Calls::).
22906
22907 `model (MODEL-NAME)'
22908      On the M32R/D, use this attribute to set the addressability of an
22909      object, and of the code generated for a function.  The identifier
22910      MODEL-NAME is one of `small', `medium', or `large', representing
22911      each of the code models.
22912
22913      Small model objects live in the lower 16MB of memory (so that their
22914      addresses can be loaded with the `ld24' instruction), and are
22915      callable with the `bl' instruction.
22916
22917      Medium model objects may live anywhere in the 32-bit address space
22918      (the compiler generates `seth/add3' instructions to load their
22919      addresses), and are callable with the `bl' instruction.
22920
22921      Large model objects may live anywhere in the 32-bit address space
22922      (the compiler generates `seth/add3' instructions to load their
22923      addresses), and may not be reachable with the `bl' instruction
22924      (the compiler generates the much slower `seth/add3/jl' instruction
22925      sequence).
22926
22927      On IA-64, use this attribute to set the addressability of an
22928      object.  At present, the only supported identifier for MODEL-NAME
22929      is `small', indicating addressability via "small" (22-bit)
22930      addresses (so that their addresses can be loaded with the `addl'
22931      instruction).  Caveat: such addressing is by definition not
22932      position independent and hence this attribute must not be used for
22933      objects defined by shared libraries.
22934
22935 `ms_abi/sysv_abi'
22936      On 32-bit and 64-bit (i?86|x86_64)-*-* targets, you can use an ABI
22937      attribute to indicate which calling convention should be used for
22938      a function.  The `ms_abi' attribute tells the compiler to use the
22939      Microsoft ABI, while the `sysv_abi' attribute tells the compiler
22940      to use the ABI used on GNU/Linux and other systems.  The default
22941      is to use the Microsoft ABI when targeting Windows.  On all other
22942      systems, the default is the x86/AMD ABI.
22943
22944      Note, the `ms_abi' attribute for Microsoft Windows 64-bit targets
22945      currently requires the `-maccumulate-outgoing-args' option.
22946
22947 `callee_pop_aggregate_return (NUMBER)'
22948      On 32-bit i?86-*-* targets, you can use this attribute to control
22949      how aggregates are returned in memory.  If the caller is
22950      responsible for popping the hidden pointer together with the rest
22951      of the arguments, specify NUMBER equal to zero.  If callee is
22952      responsible for popping the hidden pointer, specify NUMBER equal
22953      to one.
22954
22955      The default i386 ABI assumes that the callee pops the stack for
22956      hidden pointer.  However, on 32-bit i386 Microsoft Windows targets,
22957      the compiler assumes that the caller pops the stack for hidden
22958      pointer.
22959
22960 `ms_hook_prologue'
22961      On 32-bit i[34567]86-*-* targets and 64-bit x86_64-*-* targets,
22962      you can use this function attribute to make GCC generate the
22963      "hot-patching" function prologue used in Win32 API functions in
22964      Microsoft Windows XP Service Pack 2 and newer.
22965
22966 `naked'
22967      Use this attribute on the ARM, AVR, MCORE, RX and SPU ports to
22968      indicate that the specified function does not need
22969      prologue/epilogue sequences generated by the compiler.  It is up
22970      to the programmer to provide these sequences. The only statements
22971      that can be safely included in naked functions are `asm'
22972      statements that do not have operands.  All other statements,
22973      including declarations of local variables, `if' statements, and so
22974      forth, should be avoided.  Naked functions should be used to
22975      implement the body of an assembly function, while allowing the
22976      compiler to construct the requisite function declaration for the
22977      assembler.
22978
22979 `near'
22980      On 68HC11 and 68HC12 the `near' attribute causes the compiler to
22981      use the normal calling convention based on `jsr' and `rts'.  This
22982      attribute can be used to cancel the effect of the `-mlong-calls'
22983      option.
22984
22985      On MeP targets this attribute causes the compiler to assume the
22986      called function is close enough to use the normal calling
22987      convention, overriding the `-mtf' command-line option.
22988
22989 `nesting'
22990      Use this attribute together with `interrupt_handler',
22991      `exception_handler' or `nmi_handler' to indicate that the function
22992      entry code should enable nested interrupts or exceptions.
22993
22994 `nmi_handler'
22995      Use this attribute on the Blackfin to indicate that the specified
22996      function is an NMI handler.  The compiler generates function entry
22997      and exit sequences suitable for use in an NMI handler when this
22998      attribute is present.
22999
23000 `no_instrument_function'
23001      If `-finstrument-functions' is given, profiling function calls are
23002      generated at entry and exit of most user-compiled functions.
23003      Functions with this attribute are not so instrumented.
23004
23005 `no_split_stack'
23006      If `-fsplit-stack' is given, functions have a small prologue which
23007      decides whether to split the stack.  Functions with the
23008      `no_split_stack' attribute do not have that prologue, and thus may
23009      run with only a small amount of stack space available.
23010
23011 `noinline'
23012      This function attribute prevents a function from being considered
23013      for inlining.  If the function does not have side-effects, there
23014      are optimizations other than inlining that cause function calls to
23015      be optimized away, although the function call is live.  To keep
23016      such calls from being optimized away, put
23017           asm ("");
23018
23019      (*note Extended Asm::) in the called function, to serve as a
23020      special side-effect.
23021
23022 `noclone'
23023      This function attribute prevents a function from being considered
23024      for cloning--a mechanism that produces specialized copies of
23025      functions and which is (currently) performed by interprocedural
23026      constant propagation.
23027
23028 `nonnull (ARG-INDEX, ...)'
23029      The `nonnull' attribute specifies that some function parameters
23030      should be non-null pointers.  For instance, the declaration:
23031
23032           extern void *
23033           my_memcpy (void *dest, const void *src, size_t len)
23034                   __attribute__((nonnull (1, 2)));
23035
23036      causes the compiler to check that, in calls to `my_memcpy',
23037      arguments DEST and SRC are non-null.  If the compiler determines
23038      that a null pointer is passed in an argument slot marked as
23039      non-null, and the `-Wnonnull' option is enabled, a warning is
23040      issued.  The compiler may also choose to make optimizations based
23041      on the knowledge that certain function arguments will never be
23042      null.
23043
23044      If no argument index list is given to the `nonnull' attribute, all
23045      pointer arguments are marked as non-null.  To illustrate, the
23046      following declaration is equivalent to the previous example:
23047
23048           extern void *
23049           my_memcpy (void *dest, const void *src, size_t len)
23050                   __attribute__((nonnull));
23051
23052 `noreturn'
23053      A few standard library functions, such as `abort' and `exit',
23054      cannot return.  GCC knows this automatically.  Some programs define
23055      their own functions that never return.  You can declare them
23056      `noreturn' to tell the compiler this fact.  For example,
23057
23058           void fatal () __attribute__ ((noreturn));
23059
23060           void
23061           fatal (/* ... */)
23062           {
23063             /* ... */ /* Print error message. */ /* ... */
23064             exit (1);
23065           }
23066
23067      The `noreturn' keyword tells the compiler to assume that `fatal'
23068      cannot return.  It can then optimize without regard to what would
23069      happen if `fatal' ever did return.  This makes slightly better
23070      code.  More importantly, it helps avoid spurious warnings of
23071      uninitialized variables.
23072
23073      The `noreturn' keyword does not affect the exceptional path when
23074      that applies: a `noreturn'-marked function may still return to the
23075      caller by throwing an exception or calling `longjmp'.
23076
23077      Do not assume that registers saved by the calling function are
23078      restored before calling the `noreturn' function.
23079
23080      It does not make sense for a `noreturn' function to have a return
23081      type other than `void'.
23082
23083      The attribute `noreturn' is not implemented in GCC versions
23084      earlier than 2.5.  An alternative way to declare that a function
23085      does not return, which works in the current version and in some
23086      older versions, is as follows:
23087
23088           typedef void voidfn ();
23089
23090           volatile voidfn fatal;
23091
23092      This approach does not work in GNU C++.
23093
23094 `nothrow'
23095      The `nothrow' attribute is used to inform the compiler that a
23096      function cannot throw an exception.  For example, most functions in
23097      the standard C library can be guaranteed not to throw an exception
23098      with the notable exceptions of `qsort' and `bsearch' that take
23099      function pointer arguments.  The `nothrow' attribute is not
23100      implemented in GCC versions earlier than 3.3.
23101
23102 `nosave_low_regs'
23103      Use this attribute on SH targets to indicate that an
23104      `interrupt_handler' function should not save and restore registers
23105      R0..R7.  This can be used on SH3* and SH4* targets that have a
23106      second R0..R7 register bank for non-reentrant interrupt handlers.
23107
23108 `optimize'
23109      The `optimize' attribute is used to specify that a function is to
23110      be compiled with different optimization options than specified on
23111      the command line.  Arguments can either be numbers or strings.
23112      Numbers are assumed to be an optimization level.  Strings that
23113      begin with `O' are assumed to be an optimization option, while
23114      other options are assumed to be used with a `-f' prefix.  You can
23115      also use the `#pragma GCC optimize' pragma to set the optimization
23116      options that affect more than one function.  *Note Function
23117      Specific Option Pragmas::, for details about the `#pragma GCC
23118      optimize' pragma.
23119
23120      This can be used for instance to have frequently-executed functions
23121      compiled with more aggressive optimization options that produce
23122      faster and larger code, while other functions can be compiled with
23123      less aggressive options.
23124
23125 `OS_main/OS_task'
23126      On AVR, functions with the `OS_main' or `OS_task' attribute do not
23127      save/restore any call-saved register in their prologue/epilogue.
23128
23129      The `OS_main' attribute can be used when there _is guarantee_ that
23130      interrupts are disabled at the time when the function is entered.
23131      This saves resources when the stack pointer has to be changed to
23132      set up a frame for local variables.
23133
23134      The `OS_task' attribute can be used when there is _no guarantee_
23135      that interrupts are disabled at that time when the function is
23136      entered like for, e.g. task functions in a multi-threading
23137      operating system. In that case, changing the stack pointer
23138      register is guarded by save/clear/restore of the global interrupt
23139      enable flag.
23140
23141      The differences to the `naked' function attribute are:
23142         * `naked' functions do not have a return instruction whereas
23143           `OS_main' and `OS_task' functions have a `RET' or `RETI'
23144           return instruction.
23145
23146         * `naked' functions do not set up a frame for local variables
23147           or a frame pointer whereas `OS_main' and `OS_task' do this as
23148           needed.
23149
23150 `pcs'
23151      The `pcs' attribute can be used to control the calling convention
23152      used for a function on ARM.  The attribute takes an argument that
23153      specifies the calling convention to use.
23154
23155      When compiling using the AAPCS ABI (or a variant of it) then valid
23156      values for the argument are `"aapcs"' and `"aapcs-vfp"'.  In order
23157      to use a variant other than `"aapcs"' then the compiler must be
23158      permitted to use the appropriate co-processor registers (i.e., the
23159      VFP registers must be available in order to use `"aapcs-vfp"').
23160      For example,
23161
23162           /* Argument passed in r0, and result returned in r0+r1.  */
23163           double f2d (float) __attribute__((pcs("aapcs")));
23164
23165      Variadic functions always use the `"aapcs"' calling convention and
23166      the compiler rejects attempts to specify an alternative.
23167
23168 `pure'
23169      Many functions have no effects except the return value and their
23170      return value depends only on the parameters and/or global
23171      variables.  Such a function can be subject to common subexpression
23172      elimination and loop optimization just as an arithmetic operator
23173      would be.  These functions should be declared with the attribute
23174      `pure'.  For example,
23175
23176           int square (int) __attribute__ ((pure));
23177
23178      says that the hypothetical function `square' is safe to call fewer
23179      times than the program says.
23180
23181      Some of common examples of pure functions are `strlen' or `memcmp'.
23182      Interesting non-pure functions are functions with infinite loops
23183      or those depending on volatile memory or other system resource,
23184      that may change between two consecutive calls (such as `feof' in a
23185      multithreading environment).
23186
23187      The attribute `pure' is not implemented in GCC versions earlier
23188      than 2.96.
23189
23190 `hot'
23191      The `hot' attribute on a function is used to inform the compiler
23192      that the function is a hot spot of the compiled program.  The
23193      function is optimized more aggressively and on many target it is
23194      placed into special subsection of the text section so all hot
23195      functions appears close together improving locality.
23196
23197      When profile feedback is available, via `-fprofile-use', hot
23198      functions are automatically detected and this attribute is ignored.
23199
23200      The `hot' attribute on functions is not implemented in GCC versions
23201      earlier than 4.3.
23202
23203      The `hot' attribute on a label is used to inform the compiler that
23204      path following the label are more likely than paths that are not so
23205      annotated.  This attribute is used in cases where
23206      `__builtin_expect' cannot be used, for instance with computed goto
23207      or `asm goto'.
23208
23209      The `hot' attribute on labels is not implemented in GCC versions
23210      earlier than 4.8.
23211
23212 `cold'
23213      The `cold' attribute on functions is used to inform the compiler
23214      that the function is unlikely to be executed.  The function is
23215      optimized for size rather than speed and on many targets it is
23216      placed into special subsection of the text section so all cold
23217      functions appears close together improving code locality of
23218      non-cold parts of program.  The paths leading to call of cold
23219      functions within code are marked as unlikely by the branch
23220      prediction mechanism.  It is thus useful to mark functions used to
23221      handle unlikely conditions, such as `perror', as cold to improve
23222      optimization of hot functions that do call marked functions in
23223      rare occasions.
23224
23225      When profile feedback is available, via `-fprofile-use', cold
23226      functions are automatically detected and this attribute is ignored.
23227
23228      The `cold' attribute on functions is not implemented in GCC
23229      versions earlier than 4.3.
23230
23231      The `cold' attribute on labels is used to inform the compiler that
23232      the path following the label is unlikely to be executed.  This
23233      attribute is used in cases where `__builtin_expect' cannot be
23234      used, for instance with computed goto or `asm goto'.
23235
23236      The `cold' attribute on labels is not implemented in GCC versions
23237      earlier than 4.8.
23238
23239 `no_sanitize_address'
23240 `no_address_safety_analysis'
23241      The `no_sanitize_address' attribute on functions is used to inform
23242      the compiler that it should not instrument memory accesses in the
23243      function when compiling with the `-fsanitize=address' option.  The
23244      `no_address_safety_analysis' is a deprecated alias of the
23245      `no_sanitize_address' attribute, new code should use
23246      `no_sanitize_address'.
23247
23248 `regparm (NUMBER)'
23249      On the Intel 386, the `regparm' attribute causes the compiler to
23250      pass arguments number one to NUMBER if they are of integral type
23251      in registers EAX, EDX, and ECX instead of on the stack.  Functions
23252      that take a variable number of arguments continue to be passed all
23253      of their arguments on the stack.
23254
23255      Beware that on some ELF systems this attribute is unsuitable for
23256      global functions in shared libraries with lazy binding (which is
23257      the default).  Lazy binding sends the first call via resolving
23258      code in the loader, which might assume EAX, EDX and ECX can be
23259      clobbered, as per the standard calling conventions.  Solaris 8 is
23260      affected by this.  Systems with the GNU C Library version 2.1 or
23261      higher and FreeBSD are believed to be safe since the loaders there
23262      save EAX, EDX and ECX.  (Lazy binding can be disabled with the
23263      linker or the loader if desired, to avoid the problem.)
23264
23265 `sseregparm'
23266      On the Intel 386 with SSE support, the `sseregparm' attribute
23267      causes the compiler to pass up to 3 floating-point arguments in
23268      SSE registers instead of on the stack.  Functions that take a
23269      variable number of arguments continue to pass all of their
23270      floating-point arguments on the stack.
23271
23272 `force_align_arg_pointer'
23273      On the Intel x86, the `force_align_arg_pointer' attribute may be
23274      applied to individual function definitions, generating an alternate
23275      prologue and epilogue that realigns the run-time stack if
23276      necessary.  This supports mixing legacy codes that run with a
23277      4-byte aligned stack with modern codes that keep a 16-byte stack
23278      for SSE compatibility.
23279
23280 `renesas'
23281      On SH targets this attribute specifies that the function or struct
23282      follows the Renesas ABI.
23283
23284 `resbank'
23285      On the SH2A target, this attribute enables the high-speed register
23286      saving and restoration using a register bank for
23287      `interrupt_handler' routines.  Saving to the bank is performed
23288      automatically after the CPU accepts an interrupt that uses a
23289      register bank.
23290
23291      The nineteen 32-bit registers comprising general register R0 to
23292      R14, control register GBR, and system registers MACH, MACL, and PR
23293      and the vector table address offset are saved into a register
23294      bank.  Register banks are stacked in first-in last-out (FILO)
23295      sequence.  Restoration from the bank is executed by issuing a
23296      RESBANK instruction.
23297
23298 `returns_twice'
23299      The `returns_twice' attribute tells the compiler that a function
23300      may return more than one time.  The compiler ensures that all
23301      registers are dead before calling such a function and emits a
23302      warning about the variables that may be clobbered after the second
23303      return from the function.  Examples of such functions are `setjmp'
23304      and `vfork'.  The `longjmp'-like counterpart of such function, if
23305      any, might need to be marked with the `noreturn' attribute.
23306
23307 `saveall'
23308      Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to
23309      indicate that all registers except the stack pointer should be
23310      saved in the prologue regardless of whether they are used or not.
23311
23312 `save_volatiles'
23313      Use this attribute on the MicroBlaze to indicate that the function
23314      is an interrupt handler.  All volatile registers (in addition to
23315      non-volatile registers) are saved in the function prologue.  If
23316      the function is a leaf function, only volatiles used by the
23317      function are saved.  A normal function return is generated instead
23318      of a return from interrupt.
23319
23320 `section ("SECTION-NAME")'
23321      Normally, the compiler places the code it generates in the `text'
23322      section.  Sometimes, however, you need additional sections, or you
23323      need certain particular functions to appear in special sections.
23324      The `section' attribute specifies that a function lives in a
23325      particular section.  For example, the declaration:
23326
23327           extern void foobar (void) __attribute__ ((section ("bar")));
23328
23329      puts the function `foobar' in the `bar' section.
23330
23331      Some file formats do not support arbitrary sections so the
23332      `section' attribute is not available on all platforms.  If you
23333      need to map the entire contents of a module to a particular
23334      section, consider using the facilities of the linker instead.
23335
23336 `sentinel'
23337      This function attribute ensures that a parameter in a function
23338      call is an explicit `NULL'.  The attribute is only valid on
23339      variadic functions.  By default, the sentinel is located at
23340      position zero, the last parameter of the function call.  If an
23341      optional integer position argument P is supplied to the attribute,
23342      the sentinel must be located at position P counting backwards from
23343      the end of the argument list.
23344
23345           __attribute__ ((sentinel))
23346           is equivalent to
23347           __attribute__ ((sentinel(0)))
23348
23349      The attribute is automatically set with a position of 0 for the
23350      built-in functions `execl' and `execlp'.  The built-in function
23351      `execle' has the attribute set with a position of 1.
23352
23353      A valid `NULL' in this context is defined as zero with any pointer
23354      type.  If your system defines the `NULL' macro with an integer type
23355      then you need to add an explicit cast.  GCC replaces `stddef.h'
23356      with a copy that redefines NULL appropriately.
23357
23358      The warnings for missing or incorrect sentinels are enabled with
23359      `-Wformat'.
23360
23361 `short_call'
23362      See `long_call/short_call'.
23363
23364 `shortcall'
23365      See `longcall/shortcall'.
23366
23367 `signal'
23368      Use this attribute on the AVR to indicate that the specified
23369      function is an interrupt handler.  The compiler generates function
23370      entry and exit sequences suitable for use in an interrupt handler
23371      when this attribute is present.
23372
23373      See also the `interrupt' function attribute.
23374
23375      The AVR hardware globally disables interrupts when an interrupt is
23376      executed.  Interrupt handler functions defined with the `signal'
23377      attribute do not re-enable interrupts.  It is save to enable
23378      interrupts in a `signal' handler.  This "save" only applies to the
23379      code generated by the compiler and not to the IRQ layout of the
23380      application which is responsibility of the application.
23381
23382      If both `signal' and `interrupt' are specified for the same
23383      function, `signal' is silently ignored.
23384
23385 `sp_switch'
23386      Use this attribute on the SH to indicate an `interrupt_handler'
23387      function should switch to an alternate stack.  It expects a string
23388      argument that names a global variable holding the address of the
23389      alternate stack.
23390
23391           void *alt_stack;
23392           void f () __attribute__ ((interrupt_handler,
23393                                     sp_switch ("alt_stack")));
23394
23395 `stdcall'
23396      On the Intel 386, the `stdcall' attribute causes the compiler to
23397      assume that the called function pops off the stack space used to
23398      pass arguments, unless it takes a variable number of arguments.
23399
23400 `syscall_linkage'
23401      This attribute is used to modify the IA-64 calling convention by
23402      marking all input registers as live at all function exits.  This
23403      makes it possible to restart a system call after an interrupt
23404      without having to save/restore the input registers.  This also
23405      prevents kernel data from leaking into application code.
23406
23407 `target'
23408      The `target' attribute is used to specify that a function is to be
23409      compiled with different target options than specified on the
23410      command line.  This can be used for instance to have functions
23411      compiled with a different ISA (instruction set architecture) than
23412      the default.  You can also use the `#pragma GCC target' pragma to
23413      set more than one function to be compiled with specific target
23414      options.  *Note Function Specific Option Pragmas::, for details
23415      about the `#pragma GCC target' pragma.
23416
23417      For instance on a 386, you could compile one function with
23418      `target("sse4.1,arch=core2")' and another with
23419      `target("sse4a,arch=amdfam10")'.  This is equivalent to compiling
23420      the first function with `-msse4.1' and `-march=core2' options, and
23421      the second function with `-msse4a' and `-march=amdfam10' options.
23422      It is up to the user to make sure that a function is only invoked
23423      on a machine that supports the particular ISA it is compiled for
23424      (for example by using `cpuid' on 386 to determine what feature
23425      bits and architecture family are used).
23426
23427           int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
23428           int sse3_func (void) __attribute__ ((__target__ ("sse3")));
23429
23430      On the 386, the following options are allowed:
23431
23432     `abm'
23433     `no-abm'
23434           Enable/disable the generation of the advanced bit
23435           instructions.
23436
23437     `aes'
23438     `no-aes'
23439           Enable/disable the generation of the AES instructions.
23440
23441     `default'
23442           *Note Function Multiversioning::, where it is used to specify
23443           the default function version.
23444
23445     `mmx'
23446     `no-mmx'
23447           Enable/disable the generation of the MMX instructions.
23448
23449     `pclmul'
23450     `no-pclmul'
23451           Enable/disable the generation of the PCLMUL instructions.
23452
23453     `popcnt'
23454     `no-popcnt'
23455           Enable/disable the generation of the POPCNT instruction.
23456
23457     `sse'
23458     `no-sse'
23459           Enable/disable the generation of the SSE instructions.
23460
23461     `sse2'
23462     `no-sse2'
23463           Enable/disable the generation of the SSE2 instructions.
23464
23465     `sse3'
23466     `no-sse3'
23467           Enable/disable the generation of the SSE3 instructions.
23468
23469     `sse4'
23470     `no-sse4'
23471           Enable/disable the generation of the SSE4 instructions (both
23472           SSE4.1 and SSE4.2).
23473
23474     `sse4.1'
23475     `no-sse4.1'
23476           Enable/disable the generation of the sse4.1 instructions.
23477
23478     `sse4.2'
23479     `no-sse4.2'
23480           Enable/disable the generation of the sse4.2 instructions.
23481
23482     `sse4a'
23483     `no-sse4a'
23484           Enable/disable the generation of the SSE4A instructions.
23485
23486     `fma4'
23487     `no-fma4'
23488           Enable/disable the generation of the FMA4 instructions.
23489
23490     `xop'
23491     `no-xop'
23492           Enable/disable the generation of the XOP instructions.
23493
23494     `lwp'
23495     `no-lwp'
23496           Enable/disable the generation of the LWP instructions.
23497
23498     `ssse3'
23499     `no-ssse3'
23500           Enable/disable the generation of the SSSE3 instructions.
23501
23502     `cld'
23503     `no-cld'
23504           Enable/disable the generation of the CLD before string moves.
23505
23506     `fancy-math-387'
23507     `no-fancy-math-387'
23508           Enable/disable the generation of the `sin', `cos', and `sqrt'
23509           instructions on the 387 floating-point unit.
23510
23511     `fused-madd'
23512     `no-fused-madd'
23513           Enable/disable the generation of the fused multiply/add
23514           instructions.
23515
23516     `ieee-fp'
23517     `no-ieee-fp'
23518           Enable/disable the generation of floating point that depends
23519           on IEEE arithmetic.
23520
23521     `inline-all-stringops'
23522     `no-inline-all-stringops'
23523           Enable/disable inlining of string operations.
23524
23525     `inline-stringops-dynamically'
23526     `no-inline-stringops-dynamically'
23527           Enable/disable the generation of the inline code to do small
23528           string operations and calling the library routines for large
23529           operations.
23530
23531     `align-stringops'
23532     `no-align-stringops'
23533           Do/do not align destination of inlined string operations.
23534
23535     `recip'
23536     `no-recip'
23537           Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and
23538           RSQRTPS instructions followed an additional Newton-Raphson
23539           step instead of doing a floating-point division.
23540
23541     `arch=ARCH'
23542           Specify the architecture to generate code for in compiling
23543           the function.
23544
23545     `tune=TUNE'
23546           Specify the architecture to tune for in compiling the
23547           function.
23548
23549     `fpmath=FPMATH'
23550           Specify which floating-point unit to use.  The
23551           `target("fpmath=sse,387")' option must be specified as
23552           `target("fpmath=sse+387")' because the comma would separate
23553           different options.
23554
23555      On the PowerPC, the following options are allowed:
23556
23557     `altivec'
23558     `no-altivec'
23559           Generate code that uses (does not use) AltiVec instructions.
23560           In 32-bit code, you cannot enable AltiVec instructions unless
23561           `-mabi=altivec' is used on the command line.
23562
23563     `cmpb'
23564     `no-cmpb'
23565           Generate code that uses (does not use) the compare bytes
23566           instruction implemented on the POWER6 processor and other
23567           processors that support the PowerPC V2.05 architecture.
23568
23569     `dlmzb'
23570     `no-dlmzb'
23571           Generate code that uses (does not use) the string-search
23572           `dlmzb' instruction on the IBM 405, 440, 464 and 476
23573           processors.  This instruction is generated by default when
23574           targeting those processors.
23575
23576     `fprnd'
23577     `no-fprnd'
23578           Generate code that uses (does not use) the FP round to integer
23579           instructions implemented on the POWER5+ processor and other
23580           processors that support the PowerPC V2.03 architecture.
23581
23582     `hard-dfp'
23583     `no-hard-dfp'
23584           Generate code that uses (does not use) the decimal
23585           floating-point instructions implemented on some POWER
23586           processors.
23587
23588     `isel'
23589     `no-isel'
23590           Generate code that uses (does not use) ISEL instruction.
23591
23592     `mfcrf'
23593     `no-mfcrf'
23594           Generate code that uses (does not use) the move from condition
23595           register field instruction implemented on the POWER4
23596           processor and other processors that support the PowerPC V2.01
23597           architecture.
23598
23599     `mfpgpr'
23600     `no-mfpgpr'
23601           Generate code that uses (does not use) the FP move to/from
23602           general purpose register instructions implemented on the
23603           POWER6X processor and other processors that support the
23604           extended PowerPC V2.05 architecture.
23605
23606     `mulhw'
23607     `no-mulhw'
23608           Generate code that uses (does not use) the half-word multiply
23609           and multiply-accumulate instructions on the IBM 405, 440, 464
23610           and 476 processors.  These instructions are generated by
23611           default when targeting those processors.
23612
23613     `multiple'
23614     `no-multiple'
23615           Generate code that uses (does not use) the load multiple word
23616           instructions and the store multiple word instructions.
23617
23618     `update'
23619     `no-update'
23620           Generate code that uses (does not use) the load or store
23621           instructions that update the base register to the address of
23622           the calculated memory location.
23623
23624     `popcntb'
23625     `no-popcntb'
23626           Generate code that uses (does not use) the popcount and
23627           double-precision FP reciprocal estimate instruction
23628           implemented on the POWER5 processor and other processors that
23629           support the PowerPC V2.02 architecture.
23630
23631     `popcntd'
23632     `no-popcntd'
23633           Generate code that uses (does not use) the popcount
23634           instruction implemented on the POWER7 processor and other
23635           processors that support the PowerPC V2.06 architecture.
23636
23637     `powerpc-gfxopt'
23638     `no-powerpc-gfxopt'
23639           Generate code that uses (does not use) the optional PowerPC
23640           architecture instructions in the Graphics group, including
23641           floating-point select.
23642
23643     `powerpc-gpopt'
23644     `no-powerpc-gpopt'
23645           Generate code that uses (does not use) the optional PowerPC
23646           architecture instructions in the General Purpose group,
23647           including floating-point square root.
23648
23649     `recip-precision'
23650     `no-recip-precision'
23651           Assume (do not assume) that the reciprocal estimate
23652           instructions provide higher-precision estimates than is
23653           mandated by the powerpc ABI.
23654
23655     `string'
23656     `no-string'
23657           Generate code that uses (does not use) the load string
23658           instructions and the store string word instructions to save
23659           multiple registers and do small block moves.
23660
23661     `vsx'
23662     `no-vsx'
23663           Generate code that uses (does not use) vector/scalar (VSX)
23664           instructions, and also enable the use of built-in functions
23665           that allow more direct access to the VSX instruction set.  In
23666           32-bit code, you cannot enable VSX or AltiVec instructions
23667           unless `-mabi=altivec' is used on the command line.
23668
23669     `friz'
23670     `no-friz'
23671           Generate (do not generate) the `friz' instruction when the
23672           `-funsafe-math-optimizations' option is used to optimize
23673           rounding a floating-point value to 64-bit integer and back to
23674           floating point.  The `friz' instruction does not return the
23675           same value if the floating-point number is too large to fit
23676           in an integer.
23677
23678     `avoid-indexed-addresses'
23679     `no-avoid-indexed-addresses'
23680           Generate code that tries to avoid (not avoid) the use of
23681           indexed load or store instructions.
23682
23683     `paired'
23684     `no-paired'
23685           Generate code that uses (does not use) the generation of
23686           PAIRED simd instructions.
23687
23688     `longcall'
23689     `no-longcall'
23690           Generate code that assumes (does not assume) that all calls
23691           are far away so that a longer more expensive calling sequence
23692           is required.
23693
23694     `cpu=CPU'
23695           Specify the architecture to generate code for when compiling
23696           the function.  If you select the `target("cpu=power7")'
23697           attribute when generating 32-bit code, VSX and AltiVec
23698           instructions are not generated unless you use the
23699           `-mabi=altivec' option on the command line.
23700
23701     `tune=TUNE'
23702           Specify the architecture to tune for when compiling the
23703           function.  If you do not specify the `target("tune=TUNE")'
23704           attribute and you do specify the `target("cpu=CPU")'
23705           attribute, compilation tunes for the CPU architecture, and
23706           not the default tuning specified on the command line.
23707
23708      On the 386/x86_64 and PowerPC back ends, you can use either
23709      multiple strings to specify multiple options, or you can separate
23710      the option with a comma (`,').
23711
23712      On the 386/x86_64 and PowerPC back ends, the inliner does not
23713      inline a function that has different target options than the
23714      caller, unless the callee has a subset of the target options of
23715      the caller.  For example a function declared with `target("sse3")'
23716      can inline a function with `target("sse2")', since `-msse3'
23717      implies `-msse2'.
23718
23719      The `target' attribute is not implemented in GCC versions earlier
23720      than 4.4 for the i386/x86_64 and 4.6 for the PowerPC back ends.
23721      It is not currently implemented for other back ends.
23722
23723 `tiny_data'
23724      Use this attribute on the H8/300H and H8S to indicate that the
23725      specified variable should be placed into the tiny data section.
23726      The compiler generates more efficient code for loads and stores on
23727      data in the tiny data section.  Note the tiny data area is limited
23728      to slightly under 32KB of data.
23729
23730 `trap_exit'
23731      Use this attribute on the SH for an `interrupt_handler' to return
23732      using `trapa' instead of `rte'.  This attribute expects an integer
23733      argument specifying the trap number to be used.
23734
23735 `trapa_handler'
23736      On SH targets this function attribute is similar to
23737      `interrupt_handler' but it does not save and restore all registers.
23738
23739 `unused'
23740      This attribute, attached to a function, means that the function is
23741      meant to be possibly unused.  GCC does not produce a warning for
23742      this function.
23743
23744 `used'
23745      This attribute, attached to a function, means that code must be
23746      emitted for the function even if it appears that the function is
23747      not referenced.  This is useful, for example, when the function is
23748      referenced only in inline assembly.
23749
23750      When applied to a member function of a C++ class template, the
23751      attribute also means that the function is instantiated if the
23752      class itself is instantiated.
23753
23754 `version_id'
23755      This IA-64 HP-UX attribute, attached to a global variable or
23756      function, renames a symbol to contain a version string, thus
23757      allowing for function level versioning.  HP-UX system header files
23758      may use version level functioning for some system calls.
23759
23760           extern int foo () __attribute__((version_id ("20040821")));
23761
23762      Calls to FOO are mapped to calls to FOO{20040821}.
23763
23764 `visibility ("VISIBILITY_TYPE")'
23765      This attribute affects the linkage of the declaration to which it
23766      is attached.  There are four supported VISIBILITY_TYPE values:
23767      default, hidden, protected or internal visibility.
23768
23769           void __attribute__ ((visibility ("protected")))
23770           f () { /* Do something. */; }
23771           int i __attribute__ ((visibility ("hidden")));
23772
23773      The possible values of VISIBILITY_TYPE correspond to the
23774      visibility settings in the ELF gABI.
23775
23776     "default"
23777           Default visibility is the normal case for the object file
23778           format.  This value is available for the visibility attribute
23779           to override other options that may change the assumed
23780           visibility of entities.
23781
23782           On ELF, default visibility means that the declaration is
23783           visible to other modules and, in shared libraries, means that
23784           the declared entity may be overridden.
23785
23786           On Darwin, default visibility means that the declaration is
23787           visible to other modules.
23788
23789           Default visibility corresponds to "external linkage" in the
23790           language.
23791
23792     "hidden"
23793           Hidden visibility indicates that the entity declared has a new
23794           form of linkage, which we call "hidden linkage".  Two
23795           declarations of an object with hidden linkage refer to the
23796           same object if they are in the same shared object.
23797
23798     "internal"
23799           Internal visibility is like hidden visibility, but with
23800           additional processor specific semantics.  Unless otherwise
23801           specified by the psABI, GCC defines internal visibility to
23802           mean that a function is _never_ called from another module.
23803           Compare this with hidden functions which, while they cannot
23804           be referenced directly by other modules, can be referenced
23805           indirectly via function pointers.  By indicating that a
23806           function cannot be called from outside the module, GCC may
23807           for instance omit the load of a PIC register since it is known
23808           that the calling function loaded the correct value.
23809
23810     "protected"
23811           Protected visibility is like default visibility except that it
23812           indicates that references within the defining module bind to
23813           the definition in that module.  That is, the declared entity
23814           cannot be overridden by another module.
23815
23816
23817      All visibilities are supported on many, but not all, ELF targets
23818      (supported when the assembler supports the `.visibility'
23819      pseudo-op).  Default visibility is supported everywhere.  Hidden
23820      visibility is supported on Darwin targets.
23821
23822      The visibility attribute should be applied only to declarations
23823      that would otherwise have external linkage.  The attribute should
23824      be applied consistently, so that the same entity should not be
23825      declared with different settings of the attribute.
23826
23827      In C++, the visibility attribute applies to types as well as
23828      functions and objects, because in C++ types have linkage.  A class
23829      must not have greater visibility than its non-static data member
23830      types and bases, and class members default to the visibility of
23831      their class.  Also, a declaration without explicit visibility is
23832      limited to the visibility of its type.
23833
23834      In C++, you can mark member functions and static member variables
23835      of a class with the visibility attribute.  This is useful if you
23836      know a particular method or static member variable should only be
23837      used from one shared object; then you can mark it hidden while the
23838      rest of the class has default visibility.  Care must be taken to
23839      avoid breaking the One Definition Rule; for example, it is usually
23840      not useful to mark an inline method as hidden without marking the
23841      whole class as hidden.
23842
23843      A C++ namespace declaration can also have the visibility attribute.
23844      This attribute applies only to the particular namespace body, not
23845      to other definitions of the same namespace; it is equivalent to
23846      using `#pragma GCC visibility' before and after the namespace
23847      definition (*note Visibility Pragmas::).
23848
23849      In C++, if a template argument has limited visibility, this
23850      restriction is implicitly propagated to the template instantiation.
23851      Otherwise, template instantiations and specializations default to
23852      the visibility of their template.
23853
23854      If both the template and enclosing class have explicit visibility,
23855      the visibility from the template is used.
23856
23857 `vliw'
23858      On MeP, the `vliw' attribute tells the compiler to emit
23859      instructions in VLIW mode instead of core mode.  Note that this
23860      attribute is not allowed unless a VLIW coprocessor has been
23861      configured and enabled through command-line options.
23862
23863 `warn_unused_result'
23864      The `warn_unused_result' attribute causes a warning to be emitted
23865      if a caller of the function with this attribute does not use its
23866      return value.  This is useful for functions where not checking the
23867      result is either a security problem or always a bug, such as
23868      `realloc'.
23869
23870           int fn () __attribute__ ((warn_unused_result));
23871           int foo ()
23872           {
23873             if (fn () < 0) return -1;
23874             fn ();
23875             return 0;
23876           }
23877
23878      results in warning on line 5.
23879
23880 `weak'
23881      The `weak' attribute causes the declaration to be emitted as a weak
23882      symbol rather than a global.  This is primarily useful in defining
23883      library functions that can be overridden in user code, though it
23884      can also be used with non-function declarations.  Weak symbols are
23885      supported for ELF targets, and also for a.out targets when using
23886      the GNU assembler and linker.
23887
23888 `weakref'
23889 `weakref ("TARGET")'
23890      The `weakref' attribute marks a declaration as a weak reference.
23891      Without arguments, it should be accompanied by an `alias' attribute
23892      naming the target symbol.  Optionally, the TARGET may be given as
23893      an argument to `weakref' itself.  In either case, `weakref'
23894      implicitly marks the declaration as `weak'.  Without a TARGET,
23895      given as an argument to `weakref' or to `alias', `weakref' is
23896      equivalent to `weak'.
23897
23898           static int x() __attribute__ ((weakref ("y")));
23899           /* is equivalent to... */
23900           static int x() __attribute__ ((weak, weakref, alias ("y")));
23901           /* and to... */
23902           static int x() __attribute__ ((weakref));
23903           static int x() __attribute__ ((alias ("y")));
23904
23905      A weak reference is an alias that does not by itself require a
23906      definition to be given for the target symbol.  If the target
23907      symbol is only referenced through weak references, then it becomes
23908      a `weak' undefined symbol.  If it is directly referenced, however,
23909      then such strong references prevail, and a definition is required
23910      for the symbol, not necessarily in the same translation unit.
23911
23912      The effect is equivalent to moving all references to the alias to a
23913      separate translation unit, renaming the alias to the aliased
23914      symbol, declaring it as weak, compiling the two separate
23915      translation units and performing a reloadable link on them.
23916
23917      At present, a declaration to which `weakref' is attached can only
23918      be `static'.
23919
23920
23921  You can specify multiple attributes in a declaration by separating them
23922 by commas within the double parentheses or by immediately following an
23923 attribute declaration with another attribute declaration.
23924
23925  Some people object to the `__attribute__' feature, suggesting that ISO
23926 C's `#pragma' should be used instead.  At the time `__attribute__' was
23927 designed, there were two reasons for not doing this.
23928
23929   1. It is impossible to generate `#pragma' commands from a macro.
23930
23931   2. There is no telling what the same `#pragma' might mean in another
23932      compiler.
23933
23934  These two reasons applied to almost any application that might have
23935 been proposed for `#pragma'.  It was basically a mistake to use
23936 `#pragma' for _anything_.
23937
23938  The ISO C99 standard includes `_Pragma', which now allows pragmas to
23939 be generated from macros.  In addition, a `#pragma GCC' namespace is
23940 now in use for GCC-specific pragmas.  However, it has been found
23941 convenient to use `__attribute__' to achieve a natural attachment of
23942 attributes to their corresponding declarations, whereas `#pragma GCC'
23943 is of use for constructs that do not naturally form part of the
23944 grammar.  *Note Pragmas Accepted by GCC: Pragmas.
23945
23946 \1f
23947 File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Function Attributes,  Up: C Extensions
23948
23949 6.31 Attribute Syntax
23950 =====================
23951
23952 This section describes the syntax with which `__attribute__' may be
23953 used, and the constructs to which attribute specifiers bind, for the C
23954 language.  Some details may vary for C++ and Objective-C.  Because of
23955 infelicities in the grammar for attributes, some forms described here
23956 may not be successfully parsed in all cases.
23957
23958  There are some problems with the semantics of attributes in C++.  For
23959 example, there are no manglings for attributes, although they may affect
23960 code generation, so problems may arise when attributed types are used in
23961 conjunction with templates or overloading.  Similarly, `typeid' does
23962 not distinguish between types with different attributes.  Support for
23963 attributes in C++ may be restricted in future to attributes on
23964 declarations only, but not on nested declarators.
23965
23966  *Note Function Attributes::, for details of the semantics of attributes
23967 applying to functions.  *Note Variable Attributes::, for details of the
23968 semantics of attributes applying to variables.  *Note Type Attributes::,
23969 for details of the semantics of attributes applying to structure, union
23970 and enumerated types.
23971
23972  An "attribute specifier" is of the form `__attribute__
23973 ((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
23974 comma-separated sequence of "attributes", where each attribute is one
23975 of the following:
23976
23977    * Empty.  Empty attributes are ignored.
23978
23979    * A word (which may be an identifier such as `unused', or a reserved
23980      word such as `const').
23981
23982    * A word, followed by, in parentheses, parameters for the attribute.
23983      These parameters take one of the following forms:
23984
23985         * An identifier.  For example, `mode' attributes use this form.
23986
23987         * An identifier followed by a comma and a non-empty
23988           comma-separated list of expressions.  For example, `format'
23989           attributes use this form.
23990
23991         * A possibly empty comma-separated list of expressions.  For
23992           example, `format_arg' attributes use this form with the list
23993           being a single integer constant expression, and `alias'
23994           attributes use this form with the list being a single string
23995           constant.
23996
23997  An "attribute specifier list" is a sequence of one or more attribute
23998 specifiers, not separated by any other tokens.
23999
24000  In GNU C, an attribute specifier list may appear after the colon
24001 following a label, other than a `case' or `default' label.  The only
24002 attribute it makes sense to use after a label is `unused'.  This
24003 feature is intended for program-generated code that may contain unused
24004 labels, but which is compiled with `-Wall'.  It is not normally
24005 appropriate to use in it human-written code, though it could be useful
24006 in cases where the code that jumps to the label is contained within an
24007 `#ifdef' conditional.  GNU C++ only permits attributes on labels if the
24008 attribute specifier is immediately followed by a semicolon (i.e., the
24009 label applies to an empty statement).  If the semicolon is missing, C++
24010 label attributes are ambiguous, as it is permissible for a declaration,
24011 which could begin with an attribute list, to be labelled in C++.
24012 Declarations cannot be labelled in C90 or C99, so the ambiguity does
24013 not arise there.
24014
24015  An attribute specifier list may appear as part of a `struct', `union'
24016 or `enum' specifier.  It may go either immediately after the `struct',
24017 `union' or `enum' keyword, or after the closing brace.  The former
24018 syntax is preferred.  Where attribute specifiers follow the closing
24019 brace, they are considered to relate to the structure, union or
24020 enumerated type defined, not to any enclosing declaration the type
24021 specifier appears in, and the type defined is not complete until after
24022 the attribute specifiers.
24023
24024  Otherwise, an attribute specifier appears as part of a declaration,
24025 counting declarations of unnamed parameters and type names, and relates
24026 to that declaration (which may be nested in another declaration, for
24027 example in the case of a parameter declaration), or to a particular
24028 declarator within a declaration.  Where an attribute specifier is
24029 applied to a parameter declared as a function or an array, it should
24030 apply to the function or array rather than the pointer to which the
24031 parameter is implicitly converted, but this is not yet correctly
24032 implemented.
24033
24034  Any list of specifiers and qualifiers at the start of a declaration may
24035 contain attribute specifiers, whether or not such a list may in that
24036 context contain storage class specifiers.  (Some attributes, however,
24037 are essentially in the nature of storage class specifiers, and only make
24038 sense where storage class specifiers may be used; for example,
24039 `section'.)  There is one necessary limitation to this syntax: the
24040 first old-style parameter declaration in a function definition cannot
24041 begin with an attribute specifier, because such an attribute applies to
24042 the function instead by syntax described below (which, however, is not
24043 yet implemented in this case).  In some other cases, attribute
24044 specifiers are permitted by this grammar but not yet supported by the
24045 compiler.  All attribute specifiers in this place relate to the
24046 declaration as a whole.  In the obsolescent usage where a type of `int'
24047 is implied by the absence of type specifiers, such a list of specifiers
24048 and qualifiers may be an attribute specifier list with no other
24049 specifiers or qualifiers.
24050
24051  At present, the first parameter in a function prototype must have some
24052 type specifier that is not an attribute specifier; this resolves an
24053 ambiguity in the interpretation of `void f(int (__attribute__((foo))
24054 x))', but is subject to change.  At present, if the parentheses of a
24055 function declarator contain only attributes then those attributes are
24056 ignored, rather than yielding an error or warning or implying a single
24057 parameter of type int, but this is subject to change.
24058
24059  An attribute specifier list may appear immediately before a declarator
24060 (other than the first) in a comma-separated list of declarators in a
24061 declaration of more than one identifier using a single list of
24062 specifiers and qualifiers.  Such attribute specifiers apply only to the
24063 identifier before whose declarator they appear.  For example, in
24064
24065      __attribute__((noreturn)) void d0 (void),
24066          __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
24067           d2 (void)
24068
24069 the `noreturn' attribute applies to all the functions declared; the
24070 `format' attribute only applies to `d1'.
24071
24072  An attribute specifier list may appear immediately before the comma,
24073 `=' or semicolon terminating the declaration of an identifier other
24074 than a function definition.  Such attribute specifiers apply to the
24075 declared object or function.  Where an assembler name for an object or
24076 function is specified (*note Asm Labels::), the attribute must follow
24077 the `asm' specification.
24078
24079  An attribute specifier list may, in future, be permitted to appear
24080 after the declarator in a function definition (before any old-style
24081 parameter declarations or the function body).
24082
24083  Attribute specifiers may be mixed with type qualifiers appearing inside
24084 the `[]' of a parameter array declarator, in the C99 construct by which
24085 such qualifiers are applied to the pointer to which the array is
24086 implicitly converted.  Such attribute specifiers apply to the pointer,
24087 not to the array, but at present this is not implemented and they are
24088 ignored.
24089
24090  An attribute specifier list may appear at the start of a nested
24091 declarator.  At present, there are some limitations in this usage: the
24092 attributes correctly apply to the declarator, but for most individual
24093 attributes the semantics this implies are not implemented.  When
24094 attribute specifiers follow the `*' of a pointer declarator, they may
24095 be mixed with any type qualifiers present.  The following describes the
24096 formal semantics of this syntax.  It makes the most sense if you are
24097 familiar with the formal specification of declarators in the ISO C
24098 standard.
24099
24100  Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1',
24101 where `T' contains declaration specifiers that specify a type TYPE
24102 (such as `int') and `D1' is a declarator that contains an identifier
24103 IDENT.  The type specified for IDENT for derived declarators whose type
24104 does not include an attribute specifier is as in the ISO C standard.
24105
24106  If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the
24107 declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
24108 TYPE" for IDENT, then `T D1' specifies the type
24109 "DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
24110
24111  If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST
24112 D', and the declaration `T D' specifies the type
24113 "DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies
24114 the type "DERIVED-DECLARATOR-TYPE-LIST
24115 TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT.
24116
24117  For example,
24118
24119      void (__attribute__((noreturn)) ****f) (void);
24120
24121 specifies the type "pointer to pointer to pointer to pointer to
24122 non-returning function returning `void'".  As another example,
24123
24124      char *__attribute__((aligned(8))) *f;
24125
24126 specifies the type "pointer to 8-byte-aligned pointer to `char'".  Note
24127 again that this does not work with most attributes; for example, the
24128 usage of `aligned' and `noreturn' attributes given above is not yet
24129 supported.
24130
24131  For compatibility with existing code written for compiler versions that
24132 did not implement attributes on nested declarators, some laxity is
24133 allowed in the placing of attributes.  If an attribute that only applies
24134 to types is applied to a declaration, it is treated as applying to the
24135 type of that declaration.  If an attribute that only applies to
24136 declarations is applied to the type of a declaration, it is treated as
24137 applying to that declaration; and, for compatibility with code placing
24138 the attributes immediately before the identifier declared, such an
24139 attribute applied to a function return type is treated as applying to
24140 the function type, and such an attribute applied to an array element
24141 type is treated as applying to the array type.  If an attribute that
24142 only applies to function types is applied to a pointer-to-function
24143 type, it is treated as applying to the pointer target type; if such an
24144 attribute is applied to a function return type that is not a
24145 pointer-to-function type, it is treated as applying to the function
24146 type.
24147
24148 \1f
24149 File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
24150
24151 6.32 Prototypes and Old-Style Function Definitions
24152 ==================================================
24153
24154 GNU C extends ISO C to allow a function prototype to override a later
24155 old-style non-prototype definition.  Consider the following example:
24156
24157      /* Use prototypes unless the compiler is old-fashioned.  */
24158      #ifdef __STDC__
24159      #define P(x) x
24160      #else
24161      #define P(x) ()
24162      #endif
24163
24164      /* Prototype function declaration.  */
24165      int isroot P((uid_t));
24166
24167      /* Old-style function definition.  */
24168      int
24169      isroot (x)   /* ??? lossage here ??? */
24170           uid_t x;
24171      {
24172        return x == 0;
24173      }
24174
24175  Suppose the type `uid_t' happens to be `short'.  ISO C does not allow
24176 this example, because subword arguments in old-style non-prototype
24177 definitions are promoted.  Therefore in this example the function
24178 definition's argument is really an `int', which does not match the
24179 prototype argument type of `short'.
24180
24181  This restriction of ISO C makes it hard to write code that is portable
24182 to traditional C compilers, because the programmer does not know
24183 whether the `uid_t' type is `short', `int', or `long'.  Therefore, in
24184 cases like these GNU C allows a prototype to override a later old-style
24185 definition.  More precisely, in GNU C, a function prototype argument
24186 type overrides the argument type specified by a later old-style
24187 definition if the former type is the same as the latter type before
24188 promotion.  Thus in GNU C the above example is equivalent to the
24189 following:
24190
24191      int isroot (uid_t);
24192
24193      int
24194      isroot (uid_t x)
24195      {
24196        return x == 0;
24197      }
24198
24199 GNU C++ does not support old-style function definitions, so this
24200 extension is irrelevant.
24201
24202 \1f
24203 File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
24204
24205 6.33 C++ Style Comments
24206 =======================
24207
24208 In GNU C, you may use C++ style comments, which start with `//' and
24209 continue until the end of the line.  Many other C implementations allow
24210 such comments, and they are included in the 1999 C standard.  However,
24211 C++ style comments are not recognized if you specify an `-std' option
24212 specifying a version of ISO C before C99, or `-ansi' (equivalent to
24213 `-std=c90').
24214
24215 \1f
24216 File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
24217
24218 6.34 Dollar Signs in Identifier Names
24219 =====================================
24220
24221 In GNU C, you may normally use dollar signs in identifier names.  This
24222 is because many traditional C implementations allow such identifiers.
24223 However, dollar signs in identifiers are not supported on a few target
24224 machines, typically because the target assembler does not allow them.
24225
24226 \1f
24227 File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: C Extensions
24228
24229 6.35 The Character <ESC> in Constants
24230 =====================================
24231
24232 You can use the sequence `\e' in a string or character constant to
24233 stand for the ASCII character <ESC>.
24234
24235 \1f
24236 File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Character Escapes,  Up: C Extensions
24237
24238 6.36 Specifying Attributes of Variables
24239 =======================================
24240
24241 The keyword `__attribute__' allows you to specify special attributes of
24242 variables or structure fields.  This keyword is followed by an
24243 attribute specification inside double parentheses.  Some attributes are
24244 currently defined generically for variables.  Other attributes are
24245 defined for variables on particular target systems.  Other attributes
24246 are available for functions (*note Function Attributes::) and for types
24247 (*note Type Attributes::).  Other front ends might define more
24248 attributes (*note Extensions to the C++ Language: C++ Extensions.).
24249
24250  You may also specify attributes with `__' preceding and following each
24251 keyword.  This allows you to use them in header files without being
24252 concerned about a possible macro of the same name.  For example, you
24253 may use `__aligned__' instead of `aligned'.
24254
24255  *Note Attribute Syntax::, for details of the exact syntax for using
24256 attributes.
24257
24258 `aligned (ALIGNMENT)'
24259      This attribute specifies a minimum alignment for the variable or
24260      structure field, measured in bytes.  For example, the declaration:
24261
24262           int x __attribute__ ((aligned (16))) = 0;
24263
24264      causes the compiler to allocate the global variable `x' on a
24265      16-byte boundary.  On a 68040, this could be used in conjunction
24266      with an `asm' expression to access the `move16' instruction which
24267      requires 16-byte aligned operands.
24268
24269      You can also specify the alignment of structure fields.  For
24270      example, to create a double-word aligned `int' pair, you could
24271      write:
24272
24273           struct foo { int x[2] __attribute__ ((aligned (8))); };
24274
24275      This is an alternative to creating a union with a `double' member,
24276      which forces the union to be double-word aligned.
24277
24278      As in the preceding examples, you can explicitly specify the
24279      alignment (in bytes) that you wish the compiler to use for a given
24280      variable or structure field.  Alternatively, you can leave out the
24281      alignment factor and just ask the compiler to align a variable or
24282      field to the default alignment for the target architecture you are
24283      compiling for.  The default alignment is sufficient for all scalar
24284      types, but may not be enough for all vector types on a target that
24285      supports vector operations.  The default alignment is fixed for a
24286      particular target ABI.
24287
24288      GCC also provides a target specific macro `__BIGGEST_ALIGNMENT__',
24289      which is the largest alignment ever used for any data type on the
24290      target machine you are compiling for.  For example, you could
24291      write:
24292
24293           short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
24294
24295      The compiler automatically sets the alignment for the declared
24296      variable or field to `__BIGGEST_ALIGNMENT__'.  Doing this can
24297      often make copy operations more efficient, because the compiler can
24298      use whatever instructions copy the biggest chunks of memory when
24299      performing copies to or from the variables or fields that you have
24300      aligned this way.  Note that the value of `__BIGGEST_ALIGNMENT__'
24301      may change depending on command-line options.
24302
24303      When used on a struct, or struct member, the `aligned' attribute
24304      can only increase the alignment; in order to decrease it, the
24305      `packed' attribute must be specified as well.  When used as part
24306      of a typedef, the `aligned' attribute can both increase and
24307      decrease alignment, and specifying the `packed' attribute
24308      generates a warning.
24309
24310      Note that the effectiveness of `aligned' attributes may be limited
24311      by inherent limitations in your linker.  On many systems, the
24312      linker is only able to arrange for variables to be aligned up to a
24313      certain maximum alignment.  (For some linkers, the maximum
24314      supported alignment may be very very small.)  If your linker is
24315      only able to align variables up to a maximum of 8-byte alignment,
24316      then specifying `aligned(16)' in an `__attribute__' still only
24317      provides you with 8-byte alignment.  See your linker documentation
24318      for further information.
24319
24320      The `aligned' attribute can also be used for functions (*note
24321      Function Attributes::.)
24322
24323 `cleanup (CLEANUP_FUNCTION)'
24324      The `cleanup' attribute runs a function when the variable goes out
24325      of scope.  This attribute can only be applied to auto function
24326      scope variables; it may not be applied to parameters or variables
24327      with static storage duration.  The function must take one
24328      parameter, a pointer to a type compatible with the variable.  The
24329      return value of the function (if any) is ignored.
24330
24331      If `-fexceptions' is enabled, then CLEANUP_FUNCTION is run during
24332      the stack unwinding that happens during the processing of the
24333      exception.  Note that the `cleanup' attribute does not allow the
24334      exception to be caught, only to perform an action.  It is
24335      undefined what happens if CLEANUP_FUNCTION does not return
24336      normally.
24337
24338 `common'
24339 `nocommon'
24340      The `common' attribute requests GCC to place a variable in
24341      "common" storage.  The `nocommon' attribute requests the
24342      opposite--to allocate space for it directly.
24343
24344      These attributes override the default chosen by the `-fno-common'
24345      and `-fcommon' flags respectively.
24346
24347 `deprecated'
24348 `deprecated (MSG)'
24349      The `deprecated' attribute results in a warning if the variable is
24350      used anywhere in the source file.  This is useful when identifying
24351      variables that are expected to be removed in a future version of a
24352      program.  The warning also includes the location of the declaration
24353      of the deprecated variable, to enable users to easily find further
24354      information about why the variable is deprecated, or what they
24355      should do instead.  Note that the warning only occurs for uses:
24356
24357           extern int old_var __attribute__ ((deprecated));
24358           extern int old_var;
24359           int new_fn () { return old_var; }
24360
24361      results in a warning on line 3 but not line 2.  The optional MSG
24362      argument, which must be a string, is printed in the warning if
24363      present.
24364
24365      The `deprecated' attribute can also be used for functions and
24366      types (*note Function Attributes::, *note Type Attributes::.)
24367
24368 `mode (MODE)'
24369      This attribute specifies the data type for the
24370      declaration--whichever type corresponds to the mode MODE.  This in
24371      effect lets you request an integer or floating-point type
24372      according to its width.
24373
24374      You may also specify a mode of `byte' or `__byte__' to indicate
24375      the mode corresponding to a one-byte integer, `word' or `__word__'
24376      for the mode of a one-word integer, and `pointer' or `__pointer__'
24377      for the mode used to represent pointers.
24378
24379 `packed'
24380      The `packed' attribute specifies that a variable or structure field
24381      should have the smallest possible alignment--one byte for a
24382      variable, and one bit for a field, unless you specify a larger
24383      value with the `aligned' attribute.
24384
24385      Here is a structure in which the field `x' is packed, so that it
24386      immediately follows `a':
24387
24388           struct foo
24389           {
24390             char a;
24391             int x[2] __attribute__ ((packed));
24392           };
24393
24394      _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the `packed'
24395      attribute on bit-fields of type `char'.  This has been fixed in
24396      GCC 4.4 but the change can lead to differences in the structure
24397      layout.  See the documentation of `-Wpacked-bitfield-compat' for
24398      more information.
24399
24400 `section ("SECTION-NAME")'
24401      Normally, the compiler places the objects it generates in sections
24402      like `data' and `bss'.  Sometimes, however, you need additional
24403      sections, or you need certain particular variables to appear in
24404      special sections, for example to map to special hardware.  The
24405      `section' attribute specifies that a variable (or function) lives
24406      in a particular section.  For example, this small program uses
24407      several specific section names:
24408
24409           struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
24410           struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
24411           char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
24412           int init_data __attribute__ ((section ("INITDATA")));
24413
24414           main()
24415           {
24416             /* Initialize stack pointer */
24417             init_sp (stack + sizeof (stack));
24418
24419             /* Initialize initialized data */
24420             memcpy (&init_data, &data, &edata - &data);
24421
24422             /* Turn on the serial ports */
24423             init_duart (&a);
24424             init_duart (&b);
24425           }
24426
24427      Use the `section' attribute with _global_ variables and not
24428      _local_ variables, as shown in the example.
24429
24430      You may use the `section' attribute with initialized or
24431      uninitialized global variables but the linker requires each object
24432      be defined once, with the exception that uninitialized variables
24433      tentatively go in the `common' (or `bss') section and can be
24434      multiply "defined".  Using the `section' attribute changes what
24435      section the variable goes into and may cause the linker to issue
24436      an error if an uninitialized variable has multiple definitions.
24437      You can force a variable to be initialized with the `-fno-common'
24438      flag or the `nocommon' attribute.
24439
24440      Some file formats do not support arbitrary sections so the
24441      `section' attribute is not available on all platforms.  If you
24442      need to map the entire contents of a module to a particular
24443      section, consider using the facilities of the linker instead.
24444
24445 `shared'
24446      On Microsoft Windows, in addition to putting variable definitions
24447      in a named section, the section can also be shared among all
24448      running copies of an executable or DLL.  For example, this small
24449      program defines shared data by putting it in a named section
24450      `shared' and marking the section shareable:
24451
24452           int foo __attribute__((section ("shared"), shared)) = 0;
24453
24454           int
24455           main()
24456           {
24457             /* Read and write foo.  All running
24458                copies see the same value.  */
24459             return 0;
24460           }
24461
24462      You may only use the `shared' attribute along with `section'
24463      attribute with a fully-initialized global definition because of
24464      the way linkers work.  See `section' attribute for more
24465      information.
24466
24467      The `shared' attribute is only available on Microsoft Windows.
24468
24469 `tls_model ("TLS_MODEL")'
24470      The `tls_model' attribute sets thread-local storage model (*note
24471      Thread-Local::) of a particular `__thread' variable, overriding
24472      `-ftls-model=' command-line switch on a per-variable basis.  The
24473      TLS_MODEL argument should be one of `global-dynamic',
24474      `local-dynamic', `initial-exec' or `local-exec'.
24475
24476      Not all targets support this attribute.
24477
24478 `unused'
24479      This attribute, attached to a variable, means that the variable is
24480      meant to be possibly unused.  GCC does not produce a warning for
24481      this variable.
24482
24483 `used'
24484      This attribute, attached to a variable, means that the variable
24485      must be emitted even if it appears that the variable is not
24486      referenced.
24487
24488      When applied to a static data member of a C++ class template, the
24489      attribute also means that the member is instantiated if the class
24490      itself is instantiated.
24491
24492 `vector_size (BYTES)'
24493      This attribute specifies the vector size for the variable,
24494      measured in bytes.  For example, the declaration:
24495
24496           int foo __attribute__ ((vector_size (16)));
24497
24498      causes the compiler to set the mode for `foo', to be 16 bytes,
24499      divided into `int' sized units.  Assuming a 32-bit int (a vector of
24500      4 units of 4 bytes), the corresponding mode of `foo' is V4SI.
24501
24502      This attribute is only applicable to integral and float scalars,
24503      although arrays, pointers, and function return values are allowed
24504      in conjunction with this construct.
24505
24506      Aggregates with this attribute are invalid, even if they are of
24507      the same size as a corresponding scalar.  For example, the
24508      declaration:
24509
24510           struct S { int a; };
24511           struct S  __attribute__ ((vector_size (16))) foo;
24512
24513      is invalid even if the size of the structure is the same as the
24514      size of the `int'.
24515
24516 `selectany'
24517      The `selectany' attribute causes an initialized global variable to
24518      have link-once semantics.  When multiple definitions of the
24519      variable are encountered by the linker, the first is selected and
24520      the remainder are discarded.  Following usage by the Microsoft
24521      compiler, the linker is told _not_ to warn about size or content
24522      differences of the multiple definitions.
24523
24524      Although the primary usage of this attribute is for POD types, the
24525      attribute can also be applied to global C++ objects that are
24526      initialized by a constructor.  In this case, the static
24527      initialization and destruction code for the object is emitted in
24528      each translation defining the object, but the calls to the
24529      constructor and destructor are protected by a link-once guard
24530      variable.
24531
24532      The `selectany' attribute is only available on Microsoft Windows
24533      targets.  You can use `__declspec (selectany)' as a synonym for
24534      `__attribute__ ((selectany))' for compatibility with other
24535      compilers.
24536
24537 `weak'
24538      The `weak' attribute is described in *note Function Attributes::.
24539
24540 `dllimport'
24541      The `dllimport' attribute is described in *note Function
24542      Attributes::.
24543
24544 `dllexport'
24545      The `dllexport' attribute is described in *note Function
24546      Attributes::.
24547
24548
24549 6.36.1 AVR Variable Attributes
24550 ------------------------------
24551
24552 `progmem'
24553      The `progmem' attribute is used on the AVR to place read-only data
24554      in the non-volatile program memory (flash). The `progmem'
24555      attribute accomplishes this by putting respective variables into a
24556      section whose name starts with `.progmem'.
24557
24558      This attribute works similar to the `section' attribute but adds
24559      additional checking. Notice that just like the `section'
24560      attribute, `progmem' affects the location of the data but not how
24561      this data is accessed.
24562
24563      In order to read data located with the `progmem' attribute
24564      (inline) assembler must be used.
24565           /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */
24566           #include <avr/pgmspace.h>
24567
24568           /* Locate var in flash memory */
24569           const int var[2] PROGMEM = { 1, 2 };
24570
24571           int read_var (int i)
24572           {
24573               /* Access var[] by accessor macro from avr/pgmspace.h */
24574               return (int) pgm_read_word (& var[i]);
24575           }
24576
24577      AVR is a Harvard architecture processor and data and read-only data
24578      normally resides in the data memory (RAM).
24579
24580      See also the *note AVR Named Address Spaces:: section for an
24581      alternate way to locate and access data in flash memory.
24582
24583 6.36.2 Blackfin Variable Attributes
24584 -----------------------------------
24585
24586 Three attributes are currently defined for the Blackfin.
24587
24588 `l1_data'
24589 `l1_data_A'
24590 `l1_data_B'
24591      Use these attributes on the Blackfin to place the variable into L1
24592      Data SRAM.  Variables with `l1_data' attribute are put into the
24593      specific section named `.l1.data'. Those with `l1_data_A'
24594      attribute are put into the specific section named `.l1.data.A'.
24595      Those with `l1_data_B' attribute are put into the specific section
24596      named `.l1.data.B'.
24597
24598 `l2'
24599      Use this attribute on the Blackfin to place the variable into L2
24600      SRAM.  Variables with `l2' attribute are put into the specific
24601      section named `.l2.data'.
24602
24603 6.36.3 M32R/D Variable Attributes
24604 ---------------------------------
24605
24606 One attribute is currently defined for the M32R/D.
24607
24608 `model (MODEL-NAME)'
24609      Use this attribute on the M32R/D to set the addressability of an
24610      object.  The identifier MODEL-NAME is one of `small', `medium', or
24611      `large', representing each of the code models.
24612
24613      Small model objects live in the lower 16MB of memory (so that their
24614      addresses can be loaded with the `ld24' instruction).
24615
24616      Medium and large model objects may live anywhere in the 32-bit
24617      address space (the compiler generates `seth/add3' instructions to
24618      load their addresses).
24619
24620 6.36.4 MeP Variable Attributes
24621 ------------------------------
24622
24623 The MeP target has a number of addressing modes and busses.  The `near'
24624 space spans the standard memory space's first 16 megabytes (24 bits).
24625 The `far' space spans the entire 32-bit memory space.  The `based'
24626 space is a 128-byte region in the memory space that is addressed
24627 relative to the `$tp' register.  The `tiny' space is a 65536-byte
24628 region relative to the `$gp' register.  In addition to these memory
24629 regions, the MeP target has a separate 16-bit control bus which is
24630 specified with `cb' attributes.
24631
24632 `based'
24633      Any variable with the `based' attribute is assigned to the
24634      `.based' section, and is accessed with relative to the `$tp'
24635      register.
24636
24637 `tiny'
24638      Likewise, the `tiny' attribute assigned variables to the `.tiny'
24639      section, relative to the `$gp' register.
24640
24641 `near'
24642      Variables with the `near' attribute are assumed to have addresses
24643      that fit in a 24-bit addressing mode.  This is the default for
24644      large variables (`-mtiny=4' is the default) but this attribute can
24645      override `-mtiny=' for small variables, or override `-ml'.
24646
24647 `far'
24648      Variables with the `far' attribute are addressed using a full
24649      32-bit address.  Since this covers the entire memory space, this
24650      allows modules to make no assumptions about where variables might
24651      be stored.
24652
24653 `io'
24654 `io (ADDR)'
24655      Variables with the `io' attribute are used to address
24656      memory-mapped peripherals.  If an address is specified, the
24657      variable is assigned that address, else it is not assigned an
24658      address (it is assumed some other module assigns an address).
24659      Example:
24660
24661           int timer_count __attribute__((io(0x123)));
24662
24663 `cb'
24664 `cb (ADDR)'
24665      Variables with the `cb' attribute are used to access the control
24666      bus, using special instructions.  `addr' indicates the control bus
24667      address.  Example:
24668
24669           int cpu_clock __attribute__((cb(0x123)));
24670
24671
24672 6.36.5 i386 Variable Attributes
24673 -------------------------------
24674
24675 Two attributes are currently defined for i386 configurations:
24676 `ms_struct' and `gcc_struct'
24677
24678 `ms_struct'
24679 `gcc_struct'
24680      If `packed' is used on a structure, or if bit-fields are used, it
24681      may be that the Microsoft ABI lays out the structure differently
24682      than the way GCC normally does.  Particularly when moving packed
24683      data between functions compiled with GCC and the native Microsoft
24684      compiler (either via function call or as data in a file), it may
24685      be necessary to access either format.
24686
24687      Currently `-m[no-]ms-bitfields' is provided for the Microsoft
24688      Windows X86 compilers to match the native Microsoft compiler.
24689
24690      The Microsoft structure layout algorithm is fairly simple with the
24691      exception of the bit-field packing.  The padding and alignment of
24692      members of structures and whether a bit-field can straddle a
24693      storage-unit boundary are determine by these rules:
24694
24695        1. Structure members are stored sequentially in the order in
24696           which they are declared: the first member has the lowest
24697           memory address and the last member the highest.
24698
24699        2. Every data object has an alignment requirement.  The
24700           alignment requirement for all data except structures, unions,
24701           and arrays is either the size of the object or the current
24702           packing size (specified with either the `aligned' attribute
24703           or the `pack' pragma), whichever is less.  For structures,
24704           unions, and arrays, the alignment requirement is the largest
24705           alignment requirement of its members.  Every object is
24706           allocated an offset so that:
24707
24708                offset % alignment_requirement == 0
24709
24710        3. Adjacent bit-fields are packed into the same 1-, 2-, or
24711           4-byte allocation unit if the integral types are the same
24712           size and if the next bit-field fits into the current
24713           allocation unit without crossing the boundary imposed by the
24714           common alignment requirements of the bit-fields.
24715
24716      MSVC interprets zero-length bit-fields in the following ways:
24717
24718        1. If a zero-length bit-field is inserted between two bit-fields
24719           that are normally coalesced, the bit-fields are not coalesced.
24720
24721           For example:
24722
24723                struct
24724                 {
24725                   unsigned long bf_1 : 12;
24726                   unsigned long : 0;
24727                   unsigned long bf_2 : 12;
24728                 } t1;
24729
24730           The size of `t1' is 8 bytes with the zero-length bit-field.
24731           If the zero-length bit-field were removed, `t1''s size would
24732           be 4 bytes.
24733
24734        2. If a zero-length bit-field is inserted after a bit-field,
24735           `foo', and the alignment of the zero-length bit-field is
24736           greater than the member that follows it, `bar', `bar' is
24737           aligned as the type of the zero-length bit-field.
24738
24739           For example:
24740
24741                struct
24742                 {
24743                   char foo : 4;
24744                   short : 0;
24745                   char bar;
24746                 } t2;
24747
24748                struct
24749                 {
24750                   char foo : 4;
24751                   short : 0;
24752                   double bar;
24753                 } t3;
24754
24755           For `t2', `bar' is placed at offset 2, rather than offset 1.
24756           Accordingly, the size of `t2' is 4.  For `t3', the zero-length
24757           bit-field does not affect the alignment of `bar' or, as a
24758           result, the size of the structure.
24759
24760           Taking this into account, it is important to note the
24761           following:
24762
24763             1. If a zero-length bit-field follows a normal bit-field,
24764                the type of the zero-length bit-field may affect the
24765                alignment of the structure as whole. For example, `t2'
24766                has a size of 4 bytes, since the zero-length bit-field
24767                follows a normal bit-field, and is of type short.
24768
24769             2. Even if a zero-length bit-field is not followed by a
24770                normal bit-field, it may still affect the alignment of
24771                the structure:
24772
24773                     struct
24774                      {
24775                        char foo : 6;
24776                        long : 0;
24777                      } t4;
24778
24779                Here, `t4' takes up 4 bytes.
24780
24781        3. Zero-length bit-fields following non-bit-field members are
24782           ignored:
24783
24784                struct
24785                 {
24786                   char foo;
24787                   long : 0;
24788                   char bar;
24789                 } t5;
24790
24791           Here, `t5' takes up 2 bytes.
24792
24793 6.36.6 PowerPC Variable Attributes
24794 ----------------------------------
24795
24796 Three attributes currently are defined for PowerPC configurations:
24797 `altivec', `ms_struct' and `gcc_struct'.
24798
24799  For full documentation of the struct attributes please see the
24800 documentation in *note i386 Variable Attributes::.
24801
24802  For documentation of `altivec' attribute please see the documentation
24803 in *note PowerPC Type Attributes::.
24804
24805 6.36.7 SPU Variable Attributes
24806 ------------------------------
24807
24808 The SPU supports the `spu_vector' attribute for variables.  For
24809 documentation of this attribute please see the documentation in *note
24810 SPU Type Attributes::.
24811
24812 6.36.8 Xstormy16 Variable Attributes
24813 ------------------------------------
24814
24815 One attribute is currently defined for xstormy16 configurations:
24816 `below100'.
24817
24818 `below100'
24819      If a variable has the `below100' attribute (`BELOW100' is allowed
24820      also), GCC places the variable in the first 0x100 bytes of memory
24821      and use special opcodes to access it.  Such variables are placed
24822      in either the `.bss_below100' section or the `.data_below100'
24823      section.
24824
24825
24826 \1f
24827 File: gcc.info,  Node: Type Attributes,  Next: Alignment,  Prev: Variable Attributes,  Up: C Extensions
24828
24829 6.37 Specifying Attributes of Types
24830 ===================================
24831
24832 The keyword `__attribute__' allows you to specify special attributes of
24833 `struct' and `union' types when you define such types.  This keyword is
24834 followed by an attribute specification inside double parentheses.
24835 Seven attributes are currently defined for types: `aligned', `packed',
24836 `transparent_union', `unused', `deprecated', `visibility', and
24837 `may_alias'.  Other attributes are defined for functions (*note
24838 Function Attributes::) and for variables (*note Variable Attributes::).
24839
24840  You may also specify any one of these attributes with `__' preceding
24841 and following its keyword.  This allows you to use these attributes in
24842 header files without being concerned about a possible macro of the same
24843 name.  For example, you may use `__aligned__' instead of `aligned'.
24844
24845  You may specify type attributes in an enum, struct or union type
24846 declaration or definition, or for other types in a `typedef'
24847 declaration.
24848
24849  For an enum, struct or union type, you may specify attributes either
24850 between the enum, struct or union tag and the name of the type, or just
24851 past the closing curly brace of the _definition_.  The former syntax is
24852 preferred.
24853
24854  *Note Attribute Syntax::, for details of the exact syntax for using
24855 attributes.
24856
24857 `aligned (ALIGNMENT)'
24858      This attribute specifies a minimum alignment (in bytes) for
24859      variables of the specified type.  For example, the declarations:
24860
24861           struct S { short f[3]; } __attribute__ ((aligned (8)));
24862           typedef int more_aligned_int __attribute__ ((aligned (8)));
24863
24864      force the compiler to ensure (as far as it can) that each variable
24865      whose type is `struct S' or `more_aligned_int' is allocated and
24866      aligned _at least_ on a 8-byte boundary.  On a SPARC, having all
24867      variables of type `struct S' aligned to 8-byte boundaries allows
24868      the compiler to use the `ldd' and `std' (doubleword load and
24869      store) instructions when copying one variable of type `struct S' to
24870      another, thus improving run-time efficiency.
24871
24872      Note that the alignment of any given `struct' or `union' type is
24873      required by the ISO C standard to be at least a perfect multiple of
24874      the lowest common multiple of the alignments of all of the members
24875      of the `struct' or `union' in question.  This means that you _can_
24876      effectively adjust the alignment of a `struct' or `union' type by
24877      attaching an `aligned' attribute to any one of the members of such
24878      a type, but the notation illustrated in the example above is a
24879      more obvious, intuitive, and readable way to request the compiler
24880      to adjust the alignment of an entire `struct' or `union' type.
24881
24882      As in the preceding example, you can explicitly specify the
24883      alignment (in bytes) that you wish the compiler to use for a given
24884      `struct' or `union' type.  Alternatively, you can leave out the
24885      alignment factor and just ask the compiler to align a type to the
24886      maximum useful alignment for the target machine you are compiling
24887      for.  For example, you could write:
24888
24889           struct S { short f[3]; } __attribute__ ((aligned));
24890
24891      Whenever you leave out the alignment factor in an `aligned'
24892      attribute specification, the compiler automatically sets the
24893      alignment for the type to the largest alignment that is ever used
24894      for any data type on the target machine you are compiling for.
24895      Doing this can often make copy operations more efficient, because
24896      the compiler can use whatever instructions copy the biggest chunks
24897      of memory when performing copies to or from the variables that
24898      have types that you have aligned this way.
24899
24900      In the example above, if the size of each `short' is 2 bytes, then
24901      the size of the entire `struct S' type is 6 bytes.  The smallest
24902      power of two that is greater than or equal to that is 8, so the
24903      compiler sets the alignment for the entire `struct S' type to 8
24904      bytes.
24905
24906      Note that although you can ask the compiler to select a
24907      time-efficient alignment for a given type and then declare only
24908      individual stand-alone objects of that type, the compiler's
24909      ability to select a time-efficient alignment is primarily useful
24910      only when you plan to create arrays of variables having the
24911      relevant (efficiently aligned) type.  If you declare or use arrays
24912      of variables of an efficiently-aligned type, then it is likely
24913      that your program also does pointer arithmetic (or subscripting,
24914      which amounts to the same thing) on pointers to the relevant type,
24915      and the code that the compiler generates for these pointer
24916      arithmetic operations is often more efficient for
24917      efficiently-aligned types than for other types.
24918
24919      The `aligned' attribute can only increase the alignment; but you
24920      can decrease it by specifying `packed' as well.  See below.
24921
24922      Note that the effectiveness of `aligned' attributes may be limited
24923      by inherent limitations in your linker.  On many systems, the
24924      linker is only able to arrange for variables to be aligned up to a
24925      certain maximum alignment.  (For some linkers, the maximum
24926      supported alignment may be very very small.)  If your linker is
24927      only able to align variables up to a maximum of 8-byte alignment,
24928      then specifying `aligned(16)' in an `__attribute__' still only
24929      provides you with 8-byte alignment.  See your linker documentation
24930      for further information.
24931
24932 `packed'
24933      This attribute, attached to `struct' or `union' type definition,
24934      specifies that each member (other than zero-width bit-fields) of
24935      the structure or union is placed to minimize the memory required.
24936      When attached to an `enum' definition, it indicates that the
24937      smallest integral type should be used.
24938
24939      Specifying this attribute for `struct' and `union' types is
24940      equivalent to specifying the `packed' attribute on each of the
24941      structure or union members.  Specifying the `-fshort-enums' flag
24942      on the line is equivalent to specifying the `packed' attribute on
24943      all `enum' definitions.
24944
24945      In the following example `struct my_packed_struct''s members are
24946      packed closely together, but the internal layout of its `s' member
24947      is not packed--to do that, `struct my_unpacked_struct' needs to be
24948      packed too.
24949
24950           struct my_unpacked_struct
24951            {
24952               char c;
24953               int i;
24954            };
24955
24956           struct __attribute__ ((__packed__)) my_packed_struct
24957             {
24958                char c;
24959                int  i;
24960                struct my_unpacked_struct s;
24961             };
24962
24963      You may only specify this attribute on the definition of an `enum',
24964      `struct' or `union', not on a `typedef' that does not also define
24965      the enumerated type, structure or union.
24966
24967 `transparent_union'
24968      This attribute, attached to a `union' type definition, indicates
24969      that any function parameter having that union type causes calls to
24970      that function to be treated in a special way.
24971
24972      First, the argument corresponding to a transparent union type can
24973      be of any type in the union; no cast is required.  Also, if the
24974      union contains a pointer type, the corresponding argument can be a
24975      null pointer constant or a void pointer expression; and if the
24976      union contains a void pointer type, the corresponding argument can
24977      be any pointer expression.  If the union member type is a pointer,
24978      qualifiers like `const' on the referenced type must be respected,
24979      just as with normal pointer conversions.
24980
24981      Second, the argument is passed to the function using the calling
24982      conventions of the first member of the transparent union, not the
24983      calling conventions of the union itself.  All members of the union
24984      must have the same machine representation; this is necessary for
24985      this argument passing to work properly.
24986
24987      Transparent unions are designed for library functions that have
24988      multiple interfaces for compatibility reasons.  For example,
24989      suppose the `wait' function must accept either a value of type
24990      `int *' to comply with POSIX, or a value of type `union wait *' to
24991      comply with the 4.1BSD interface.  If `wait''s parameter were
24992      `void *', `wait' would accept both kinds of arguments, but it
24993      would also accept any other pointer type and this would make
24994      argument type checking less useful.  Instead, `<sys/wait.h>' might
24995      define the interface as follows:
24996
24997           typedef union __attribute__ ((__transparent_union__))
24998             {
24999               int *__ip;
25000               union wait *__up;
25001             } wait_status_ptr_t;
25002
25003           pid_t wait (wait_status_ptr_t);
25004
25005      This interface allows either `int *' or `union wait *' arguments
25006      to be passed, using the `int *' calling convention.  The program
25007      can call `wait' with arguments of either type:
25008
25009           int w1 () { int w; return wait (&w); }
25010           int w2 () { union wait w; return wait (&w); }
25011
25012      With this interface, `wait''s implementation might look like this:
25013
25014           pid_t wait (wait_status_ptr_t p)
25015           {
25016             return waitpid (-1, p.__ip, 0);
25017           }
25018
25019 `unused'
25020      When attached to a type (including a `union' or a `struct'), this
25021      attribute means that variables of that type are meant to appear
25022      possibly unused.  GCC does not produce a warning for any variables
25023      of that type, even if the variable appears to do nothing.  This is
25024      often the case with lock or thread classes, which are usually
25025      defined and then not referenced, but contain constructors and
25026      destructors that have nontrivial bookkeeping functions.
25027
25028 `deprecated'
25029 `deprecated (MSG)'
25030      The `deprecated' attribute results in a warning if the type is
25031      used anywhere in the source file.  This is useful when identifying
25032      types that are expected to be removed in a future version of a
25033      program.  If possible, the warning also includes the location of
25034      the declaration of the deprecated type, to enable users to easily
25035      find further information about why the type is deprecated, or what
25036      they should do instead.  Note that the warnings only occur for
25037      uses and then only if the type is being applied to an identifier
25038      that itself is not being declared as deprecated.
25039
25040           typedef int T1 __attribute__ ((deprecated));
25041           T1 x;
25042           typedef T1 T2;
25043           T2 y;
25044           typedef T1 T3 __attribute__ ((deprecated));
25045           T3 z __attribute__ ((deprecated));
25046
25047      results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
25048      warning is issued for line 4 because T2 is not explicitly
25049      deprecated.  Line 5 has no warning because T3 is explicitly
25050      deprecated.  Similarly for line 6.  The optional MSG argument,
25051      which must be a string, is printed in the warning if present.
25052
25053      The `deprecated' attribute can also be used for functions and
25054      variables (*note Function Attributes::, *note Variable
25055      Attributes::.)
25056
25057 `may_alias'
25058      Accesses through pointers to types with this attribute are not
25059      subject to type-based alias analysis, but are instead assumed to
25060      be able to alias any other type of objects.  In the context of
25061      section 6.5 paragraph 7 of the C99 standard, an lvalue expression
25062      dereferencing such a pointer is treated like having a character
25063      type.  See `-fstrict-aliasing' for more information on aliasing
25064      issues.  This extension exists to support some vector APIs, in
25065      which pointers to one vector type are permitted to alias pointers
25066      to a different vector type.
25067
25068      Note that an object of a type with this attribute does not have any
25069      special semantics.
25070
25071      Example of use:
25072
25073           typedef short __attribute__((__may_alias__)) short_a;
25074
25075           int
25076           main (void)
25077           {
25078             int a = 0x12345678;
25079             short_a *b = (short_a *) &a;
25080
25081             b[1] = 0;
25082
25083             if (a == 0x12345678)
25084               abort();
25085
25086             exit(0);
25087           }
25088
25089      If you replaced `short_a' with `short' in the variable
25090      declaration, the above program would abort when compiled with
25091      `-fstrict-aliasing', which is on by default at `-O2' or above in
25092      recent GCC versions.
25093
25094 `visibility'
25095      In C++, attribute visibility (*note Function Attributes::) can
25096      also be applied to class, struct, union and enum types.  Unlike
25097      other type attributes, the attribute must appear between the
25098      initial keyword and the name of the type; it cannot appear after
25099      the body of the type.
25100
25101      Note that the type visibility is applied to vague linkage entities
25102      associated with the class (vtable, typeinfo node, etc.).  In
25103      particular, if a class is thrown as an exception in one shared
25104      object and caught in another, the class must have default
25105      visibility.  Otherwise the two shared objects are unable to use
25106      the same typeinfo node and exception handling will break.
25107
25108
25109  To specify multiple attributes, separate them by commas within the
25110 double parentheses: for example, `__attribute__ ((aligned (16),
25111 packed))'.
25112
25113 6.37.1 ARM Type Attributes
25114 --------------------------
25115
25116 On those ARM targets that support `dllimport' (such as Symbian OS), you
25117 can use the `notshared' attribute to indicate that the virtual table
25118 and other similar data for a class should not be exported from a DLL.
25119 For example:
25120
25121      class __declspec(notshared) C {
25122      public:
25123        __declspec(dllimport) C();
25124        virtual void f();
25125      }
25126
25127      __declspec(dllexport)
25128      C::C() {}
25129
25130 In this code, `C::C' is exported from the current DLL, but the virtual
25131 table for `C' is not exported.  (You can use `__attribute__' instead of
25132 `__declspec' if you prefer, but most Symbian OS code uses `__declspec'.)
25133
25134 6.37.2 MeP Type Attributes
25135 --------------------------
25136
25137 Many of the MeP variable attributes may be applied to types as well.
25138 Specifically, the `based', `tiny', `near', and `far' attributes may be
25139 applied to either.  The `io' and `cb' attributes may not be applied to
25140 types.
25141
25142 6.37.3 i386 Type Attributes
25143 ---------------------------
25144
25145 Two attributes are currently defined for i386 configurations:
25146 `ms_struct' and `gcc_struct'.
25147
25148 `ms_struct'
25149 `gcc_struct'
25150      If `packed' is used on a structure, or if bit-fields are used it
25151      may be that the Microsoft ABI packs them differently than GCC
25152      normally packs them.  Particularly when moving packed data between
25153      functions compiled with GCC and the native Microsoft compiler
25154      (either via function call or as data in a file), it may be
25155      necessary to access either format.
25156
25157      Currently `-m[no-]ms-bitfields' is provided for the Microsoft
25158      Windows X86 compilers to match the native Microsoft compiler.
25159
25160 6.37.4 PowerPC Type Attributes
25161 ------------------------------
25162
25163 Three attributes currently are defined for PowerPC configurations:
25164 `altivec', `ms_struct' and `gcc_struct'.
25165
25166  For full documentation of the `ms_struct' and `gcc_struct' attributes
25167 please see the documentation in *note i386 Type Attributes::.
25168
25169  The `altivec' attribute allows one to declare AltiVec vector data
25170 types supported by the AltiVec Programming Interface Manual.  The
25171 attribute requires an argument to specify one of three vector types:
25172 `vector__', `pixel__' (always followed by unsigned short), and `bool__'
25173 (always followed by unsigned).
25174
25175      __attribute__((altivec(vector__)))
25176      __attribute__((altivec(pixel__))) unsigned short
25177      __attribute__((altivec(bool__))) unsigned
25178
25179  These attributes mainly are intended to support the `__vector',
25180 `__pixel', and `__bool' AltiVec keywords.
25181
25182 6.37.5 SPU Type Attributes
25183 --------------------------
25184
25185 The SPU supports the `spu_vector' attribute for types.  This attribute
25186 allows one to declare vector data types supported by the
25187 Sony/Toshiba/IBM SPU Language Extensions Specification.  It is intended
25188 to support the `__vector' keyword.
25189
25190 \1f
25191 File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Type Attributes,  Up: C Extensions
25192
25193 6.38 Inquiring on Alignment of Types or Variables
25194 =================================================
25195
25196 The keyword `__alignof__' allows you to inquire about how an object is
25197 aligned, or the minimum alignment usually required by a type.  Its
25198 syntax is just like `sizeof'.
25199
25200  For example, if the target machine requires a `double' value to be
25201 aligned on an 8-byte boundary, then `__alignof__ (double)' is 8.  This
25202 is true on many RISC machines.  On more traditional machine designs,
25203 `__alignof__ (double)' is 4 or even 2.
25204
25205  Some machines never actually require alignment; they allow reference
25206 to any data type even at an odd address.  For these machines,
25207 `__alignof__' reports the smallest alignment that GCC gives the data
25208 type, usually as mandated by the target ABI.
25209
25210  If the operand of `__alignof__' is an lvalue rather than a type, its
25211 value is the required alignment for its type, taking into account any
25212 minimum alignment specified with GCC's `__attribute__' extension (*note
25213 Variable Attributes::).  For example, after this declaration:
25214
25215      struct foo { int x; char y; } foo1;
25216
25217 the value of `__alignof__ (foo1.y)' is 1, even though its actual
25218 alignment is probably 2 or 4, the same as `__alignof__ (int)'.
25219
25220  It is an error to ask for the alignment of an incomplete type.
25221
25222 \1f
25223 File: gcc.info,  Node: Inline,  Next: Volatiles,  Prev: Alignment,  Up: C Extensions
25224
25225 6.39 An Inline Function is As Fast As a Macro
25226 =============================================
25227
25228 By declaring a function inline, you can direct GCC to make calls to
25229 that function faster.  One way GCC can achieve this is to integrate
25230 that function's code into the code for its callers.  This makes
25231 execution faster by eliminating the function-call overhead; in
25232 addition, if any of the actual argument values are constant, their
25233 known values may permit simplifications at compile time so that not all
25234 of the inline function's code needs to be included.  The effect on code
25235 size is less predictable; object code may be larger or smaller with
25236 function inlining, depending on the particular case.  You can also
25237 direct GCC to try to integrate all "simple enough" functions into their
25238 callers with the option `-finline-functions'.
25239
25240  GCC implements three different semantics of declaring a function
25241 inline.  One is available with `-std=gnu89' or `-fgnu89-inline' or when
25242 `gnu_inline' attribute is present on all inline declarations, another
25243 when `-std=c99', `-std=c11', `-std=gnu99' or `-std=gnu11' (without
25244 `-fgnu89-inline'), and the third is used when compiling C++.
25245
25246  To declare a function inline, use the `inline' keyword in its
25247 declaration, like this:
25248
25249      static inline int
25250      inc (int *a)
25251      {
25252        return (*a)++;
25253      }
25254
25255  If you are writing a header file to be included in ISO C90 programs,
25256 write `__inline__' instead of `inline'.  *Note Alternate Keywords::.
25257
25258  The three types of inlining behave similarly in two important cases:
25259 when the `inline' keyword is used on a `static' function, like the
25260 example above, and when a function is first declared without using the
25261 `inline' keyword and then is defined with `inline', like this:
25262
25263      extern int inc (int *a);
25264      inline int
25265      inc (int *a)
25266      {
25267        return (*a)++;
25268      }
25269
25270  In both of these common cases, the program behaves the same as if you
25271 had not used the `inline' keyword, except for its speed.
25272
25273  When a function is both inline and `static', if all calls to the
25274 function are integrated into the caller, and the function's address is
25275 never used, then the function's own assembler code is never referenced.
25276 In this case, GCC does not actually output assembler code for the
25277 function, unless you specify the option `-fkeep-inline-functions'.
25278 Some calls cannot be integrated for various reasons (in particular,
25279 calls that precede the function's definition cannot be integrated, and
25280 neither can recursive calls within the definition).  If there is a
25281 nonintegrated call, then the function is compiled to assembler code as
25282 usual.  The function must also be compiled as usual if the program
25283 refers to its address, because that can't be inlined.
25284
25285  Note that certain usages in a function definition can make it
25286 unsuitable for inline substitution.  Among these usages are: variadic
25287 functions, use of `alloca', use of variable-length data types (*note
25288 Variable Length::), use of computed goto (*note Labels as Values::),
25289 use of nonlocal goto, and nested functions (*note Nested Functions::).
25290 Using `-Winline' warns when a function marked `inline' could not be
25291 substituted, and gives the reason for the failure.
25292
25293  As required by ISO C++, GCC considers member functions defined within
25294 the body of a class to be marked inline even if they are not explicitly
25295 declared with the `inline' keyword.  You can override this with
25296 `-fno-default-inline'; *note Options Controlling C++ Dialect: C++
25297 Dialect Options.
25298
25299  GCC does not inline any functions when not optimizing unless you
25300 specify the `always_inline' attribute for the function, like this:
25301
25302      /* Prototype.  */
25303      inline void foo (const char) __attribute__((always_inline));
25304
25305  The remainder of this section is specific to GNU C90 inlining.
25306
25307  When an inline function is not `static', then the compiler must assume
25308 that there may be calls from other source files; since a global symbol
25309 can be defined only once in any program, the function must not be
25310 defined in the other source files, so the calls therein cannot be
25311 integrated.  Therefore, a non-`static' inline function is always
25312 compiled on its own in the usual fashion.
25313
25314  If you specify both `inline' and `extern' in the function definition,
25315 then the definition is used only for inlining.  In no case is the
25316 function compiled on its own, not even if you refer to its address
25317 explicitly.  Such an address becomes an external reference, as if you
25318 had only declared the function, and had not defined it.
25319
25320  This combination of `inline' and `extern' has almost the effect of a
25321 macro.  The way to use it is to put a function definition in a header
25322 file with these keywords, and put another copy of the definition
25323 (lacking `inline' and `extern') in a library file.  The definition in
25324 the header file causes most calls to the function to be inlined.  If
25325 any uses of the function remain, they refer to the single copy in the
25326 library.
25327
25328 \1f
25329 File: gcc.info,  Node: Volatiles,  Next: Extended Asm,  Prev: Inline,  Up: C Extensions
25330
25331 6.40 When is a Volatile Object Accessed?
25332 ========================================
25333
25334 C has the concept of volatile objects.  These are normally accessed by
25335 pointers and used for accessing hardware or inter-thread communication.
25336 The standard encourages compilers to refrain from optimizations
25337 concerning accesses to volatile objects, but leaves it implementation
25338 defined as to what constitutes a volatile access.  The minimum
25339 requirement is that at a sequence point all previous accesses to
25340 volatile objects have stabilized and no subsequent accesses have
25341 occurred.  Thus an implementation is free to reorder and combine
25342 volatile accesses that occur between sequence points, but cannot do so
25343 for accesses across a sequence point.  The use of volatile does not
25344 allow you to violate the restriction on updating objects multiple times
25345 between two sequence points.
25346
25347  Accesses to non-volatile objects are not ordered with respect to
25348 volatile accesses.  You cannot use a volatile object as a memory
25349 barrier to order a sequence of writes to non-volatile memory.  For
25350 instance:
25351
25352      int *ptr = SOMETHING;
25353      volatile int vobj;
25354      *ptr = SOMETHING;
25355      vobj = 1;
25356
25357 Unless *PTR and VOBJ can be aliased, it is not guaranteed that the
25358 write to *PTR occurs by the time the update of VOBJ happens.  If you
25359 need this guarantee, you must use a stronger memory barrier such as:
25360
25361      int *ptr = SOMETHING;
25362      volatile int vobj;
25363      *ptr = SOMETHING;
25364      asm volatile ("" : : : "memory");
25365      vobj = 1;
25366
25367  A scalar volatile object is read when it is accessed in a void context:
25368
25369      volatile int *src = SOMEVALUE;
25370      *src;
25371
25372  Such expressions are rvalues, and GCC implements this as a read of the
25373 volatile object being pointed to.
25374
25375  Assignments are also expressions and have an rvalue.  However when
25376 assigning to a scalar volatile, the volatile object is not reread,
25377 regardless of whether the assignment expression's rvalue is used or
25378 not.  If the assignment's rvalue is used, the value is that assigned to
25379 the volatile object.  For instance, there is no read of VOBJ in all the
25380 following cases:
25381
25382      int obj;
25383      volatile int vobj;
25384      vobj = SOMETHING;
25385      obj = vobj = SOMETHING;
25386      obj ? vobj = ONETHING : vobj = ANOTHERTHING;
25387      obj = (SOMETHING, vobj = ANOTHERTHING);
25388
25389  If you need to read the volatile object after an assignment has
25390 occurred, you must use a separate expression with an intervening
25391 sequence point.
25392
25393  As bit-fields are not individually addressable, volatile bit-fields may
25394 be implicitly read when written to, or when adjacent bit-fields are
25395 accessed.  Bit-field operations may be optimized such that adjacent
25396 bit-fields are only partially accessed, if they straddle a storage unit
25397 boundary.  For these reasons it is unwise to use volatile bit-fields to
25398 access hardware.
25399
25400 \1f
25401 File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Volatiles,  Up: C Extensions
25402
25403 6.41 Assembler Instructions with C Expression Operands
25404 ======================================================
25405
25406 In an assembler instruction using `asm', you can specify the operands
25407 of the instruction using C expressions.  This means you need not guess
25408 which registers or memory locations contain the data you want to use.
25409
25410  You must specify an assembler instruction template much like what
25411 appears in a machine description, plus an operand constraint string for
25412 each operand.
25413
25414  For example, here is how to use the 68881's `fsinx' instruction:
25415
25416      asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
25417
25418 Here `angle' is the C expression for the input operand while `result'
25419 is that of the output operand.  Each has `"f"' as its operand
25420 constraint, saying that a floating-point register is required.  The `='
25421 in `=f' indicates that the operand is an output; all output operands'
25422 constraints must use `='.  The constraints use the same language used
25423 in the machine description (*note Constraints::).
25424
25425  Each operand is described by an operand-constraint string followed by
25426 the C expression in parentheses.  A colon separates the assembler
25427 template from the first output operand and another separates the last
25428 output operand from the first input, if any.  Commas separate the
25429 operands within each group.  The total number of operands is currently
25430 limited to 30; this limitation may be lifted in some future version of
25431 GCC.
25432
25433  If there are no output operands but there are input operands, you must
25434 place two consecutive colons surrounding the place where the output
25435 operands would go.
25436
25437  As of GCC version 3.1, it is also possible to specify input and output
25438 operands using symbolic names which can be referenced within the
25439 assembler code.  These names are specified inside square brackets
25440 preceding the constraint string, and can be referenced inside the
25441 assembler code using `%[NAME]' instead of a percentage sign followed by
25442 the operand number.  Using named operands the above example could look
25443 like:
25444
25445      asm ("fsinx %[angle],%[output]"
25446           : [output] "=f" (result)
25447           : [angle] "f" (angle));
25448
25449 Note that the symbolic operand names have no relation whatsoever to
25450 other C identifiers.  You may use any name you like, even those of
25451 existing C symbols, but you must ensure that no two operands within the
25452 same assembler construct use the same symbolic name.
25453
25454  Output operand expressions must be lvalues; the compiler can check
25455 this.  The input operands need not be lvalues.  The compiler cannot
25456 check whether the operands have data types that are reasonable for the
25457 instruction being executed.  It does not parse the assembler instruction
25458 template and does not know what it means or even whether it is valid
25459 assembler input.  The extended `asm' feature is most often used for
25460 machine instructions the compiler itself does not know exist.  If the
25461 output expression cannot be directly addressed (for example, it is a
25462 bit-field), your constraint must allow a register.  In that case, GCC
25463 uses the register as the output of the `asm', and then stores that
25464 register into the output.
25465
25466  The ordinary output operands must be write-only; GCC assumes that the
25467 values in these operands before the instruction are dead and need not
25468 be generated.  Extended asm supports input-output or read-write
25469 operands.  Use the constraint character `+' to indicate such an operand
25470 and list it with the output operands.
25471
25472  You may, as an alternative, logically split its function into two
25473 separate operands, one input operand and one write-only output operand.
25474 The connection between them is expressed by constraints that say they
25475 need to be in the same location when the instruction executes.  You can
25476 use the same C expression for both operands, or different expressions.
25477 For example, here we write the (fictitious) `combine' instruction with
25478 `bar' as its read-only source operand and `foo' as its read-write
25479 destination:
25480
25481      asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
25482
25483 The constraint `"0"' for operand 1 says that it must occupy the same
25484 location as operand 0.  A number in constraint is allowed only in an
25485 input operand and it must refer to an output operand.
25486
25487  Only a number in the constraint can guarantee that one operand is in
25488 the same place as another.  The mere fact that `foo' is the value of
25489 both operands is not enough to guarantee that they are in the same
25490 place in the generated assembler code.  The following does not work
25491 reliably:
25492
25493      asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
25494
25495  Various optimizations or reloading could cause operands 0 and 1 to be
25496 in different registers; GCC knows no reason not to do so.  For example,
25497 the compiler might find a copy of the value of `foo' in one register and
25498 use it for operand 1, but generate the output operand 0 in a different
25499 register (copying it afterward to `foo''s own address).  Of course,
25500 since the register for operand 1 is not even mentioned in the assembler
25501 code, the result will not work, but GCC can't tell that.
25502
25503  As of GCC version 3.1, one may write `[NAME]' instead of the operand
25504 number for a matching constraint.  For example:
25505
25506      asm ("cmoveq %1,%2,%[result]"
25507           : [result] "=r"(result)
25508           : "r" (test), "r"(new), "[result]"(old));
25509
25510  Sometimes you need to make an `asm' operand be a specific register,
25511 but there's no matching constraint letter for that register _by
25512 itself_.  To force the operand into that register, use a local variable
25513 for the operand and specify the register in the variable declaration.
25514 *Note Explicit Reg Vars::.  Then for the `asm' operand, use any
25515 register constraint letter that matches the register:
25516
25517      register int *p1 asm ("r0") = ...;
25518      register int *p2 asm ("r1") = ...;
25519      register int *result asm ("r0");
25520      asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
25521
25522  In the above example, beware that a register that is call-clobbered by
25523 the target ABI will be overwritten by any function call in the
25524 assignment, including library calls for arithmetic operators.  Also a
25525 register may be clobbered when generating some operations, like
25526 variable shift, memory copy or memory move on x86.  Assuming it is a
25527 call-clobbered register, this may happen to `r0' above by the
25528 assignment to `p2'.  If you have to use such a register, use temporary
25529 variables for expressions between the register assignment and use:
25530
25531      int t1 = ...;
25532      register int *p1 asm ("r0") = ...;
25533      register int *p2 asm ("r1") = t1;
25534      register int *result asm ("r0");
25535      asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
25536
25537  Some instructions clobber specific hard registers.  To describe this,
25538 write a third colon after the input operands, followed by the names of
25539 the clobbered hard registers (given as strings).  Here is a realistic
25540 example for the VAX:
25541
25542      asm volatile ("movc3 %0,%1,%2"
25543                    : /* no outputs */
25544                    : "g" (from), "g" (to), "g" (count)
25545                    : "r0", "r1", "r2", "r3", "r4", "r5");
25546
25547  You may not write a clobber description in a way that overlaps with an
25548 input or output operand.  For example, you may not have an operand
25549 describing a register class with one member if you mention that register
25550 in the clobber list.  Variables declared to live in specific registers
25551 (*note Explicit Reg Vars::), and used as asm input or output operands
25552 must have no part mentioned in the clobber description.  There is no
25553 way for you to specify that an input operand is modified without also
25554 specifying it as an output operand.  Note that if all the output
25555 operands you specify are for this purpose (and hence unused), you then
25556 also need to specify `volatile' for the `asm' construct, as described
25557 below, to prevent GCC from deleting the `asm' statement as unused.
25558
25559  If you refer to a particular hardware register from the assembler code,
25560 you probably have to list the register after the third colon to tell
25561 the compiler the register's value is modified.  In some assemblers, the
25562 register names begin with `%'; to produce one `%' in the assembler
25563 code, you must write `%%' in the input.
25564
25565  If your assembler instruction can alter the condition code register,
25566 add `cc' to the list of clobbered registers.  GCC on some machines
25567 represents the condition codes as a specific hardware register; `cc'
25568 serves to name this register.  On other machines, the condition code is
25569 handled differently, and specifying `cc' has no effect.  But it is
25570 valid no matter what the machine.
25571
25572  If your assembler instructions access memory in an unpredictable
25573 fashion, add `memory' to the list of clobbered registers.  This causes
25574 GCC to not keep memory values cached in registers across the assembler
25575 instruction and not optimize stores or loads to that memory.  You also
25576 should add the `volatile' keyword if the memory affected is not listed
25577 in the inputs or outputs of the `asm', as the `memory' clobber does not
25578 count as a side-effect of the `asm'.  If you know how large the
25579 accessed memory is, you can add it as input or output but if this is
25580 not known, you should add `memory'.  As an example, if you access ten
25581 bytes of a string, you can use a memory input like:
25582
25583      {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}.
25584
25585  Note that in the following example the memory input is necessary,
25586 otherwise GCC might optimize the store to `x' away:
25587      int foo ()
25588      {
25589        int x = 42;
25590        int *y = &x;
25591        int result;
25592        asm ("magic stuff accessing an 'int' pointed to by '%1'"
25593             : "=&d" (r) : "a" (y), "m" (*y));
25594        return result;
25595      }
25596
25597  You can put multiple assembler instructions together in a single `asm'
25598 template, separated by the characters normally used in assembly code
25599 for the system.  A combination that works in most places is a newline
25600 to break the line, plus a tab character to move to the instruction field
25601 (written as `\n\t').  Sometimes semicolons can be used, if the
25602 assembler allows semicolons as a line-breaking character.  Note that
25603 some assembler dialects use semicolons to start a comment.  The input
25604 operands are guaranteed not to use any of the clobbered registers, and
25605 neither do the output operands' addresses, so you can read and write
25606 the clobbered registers as many times as you like.  Here is an example
25607 of multiple instructions in a template; it assumes the subroutine
25608 `_foo' accepts arguments in registers 9 and 10:
25609
25610      asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
25611           : /* no outputs */
25612           : "g" (from), "g" (to)
25613           : "r9", "r10");
25614
25615  Unless an output operand has the `&' constraint modifier, GCC may
25616 allocate it in the same register as an unrelated input operand, on the
25617 assumption the inputs are consumed before the outputs are produced.
25618 This assumption may be false if the assembler code actually consists of
25619 more than one instruction.  In such a case, use `&' for each output
25620 operand that may not overlap an input.  *Note Modifiers::.
25621
25622  If you want to test the condition code produced by an assembler
25623 instruction, you must include a branch and a label in the `asm'
25624 construct, as follows:
25625
25626      asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:"
25627           : "g" (result)
25628           : "g" (input));
25629
25630 This assumes your assembler supports local labels, as the GNU assembler
25631 and most Unix assemblers do.
25632
25633  Speaking of labels, jumps from one `asm' to another are not supported.
25634 The compiler's optimizers do not know about these jumps, and therefore
25635 they cannot take account of them when deciding how to optimize.  *Note
25636 Extended asm with goto::.
25637
25638  Usually the most convenient way to use these `asm' instructions is to
25639 encapsulate them in macros that look like functions.  For example,
25640
25641      #define sin(x)       \
25642      ({ double __value, __arg = (x);   \
25643         asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
25644         __value; })
25645
25646 Here the variable `__arg' is used to make sure that the instruction
25647 operates on a proper `double' value, and to accept only those arguments
25648 `x' that can convert automatically to a `double'.
25649
25650  Another way to make sure the instruction operates on the correct data
25651 type is to use a cast in the `asm'.  This is different from using a
25652 variable `__arg' in that it converts more different types.  For
25653 example, if the desired type is `int', casting the argument to `int'
25654 accepts a pointer with no complaint, while assigning the argument to an
25655 `int' variable named `__arg' warns about using a pointer unless the
25656 caller explicitly casts it.
25657
25658  If an `asm' has output operands, GCC assumes for optimization purposes
25659 the instruction has no side effects except to change the output
25660 operands.  This does not mean instructions with a side effect cannot be
25661 used, but you must be careful, because the compiler may eliminate them
25662 if the output operands aren't used, or move them out of loops, or
25663 replace two with one if they constitute a common subexpression.  Also,
25664 if your instruction does have a side effect on a variable that otherwise
25665 appears not to change, the old value of the variable may be reused later
25666 if it happens to be found in a register.
25667
25668  You can prevent an `asm' instruction from being deleted by writing the
25669 keyword `volatile' after the `asm'.  For example:
25670
25671      #define get_and_set_priority(new)              \
25672      ({ int __old;                                  \
25673         asm volatile ("get_and_set_priority %0, %1" \
25674                       : "=g" (__old) : "g" (new));  \
25675         __old; })
25676
25677 The `volatile' keyword indicates that the instruction has important
25678 side-effects.  GCC does not delete a volatile `asm' if it is reachable.
25679 (The instruction can still be deleted if GCC can prove that control
25680 flow never reaches the location of the instruction.)  Note that even a
25681 volatile `asm' instruction can be moved relative to other code,
25682 including across jump instructions.  For example, on many targets there
25683 is a system register that can be set to control the rounding mode of
25684 floating-point operations.  You might try setting it with a volatile
25685 `asm', like this PowerPC example:
25686
25687             asm volatile("mtfsf 255,%0" : : "f" (fpenv));
25688             sum = x + y;
25689
25690 This does not work reliably, as the compiler may move the addition back
25691 before the volatile `asm'.  To make it work you need to add an
25692 artificial dependency to the `asm' referencing a variable in the code
25693 you don't want moved, for example:
25694
25695          asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv));
25696          sum = x + y;
25697
25698  Similarly, you can't expect a sequence of volatile `asm' instructions
25699 to remain perfectly consecutive.  If you want consecutive output, use a
25700 single `asm'.  Also, GCC performs some optimizations across a volatile
25701 `asm' instruction; GCC does not "forget everything" when it encounters
25702 a volatile `asm' instruction the way some other compilers do.
25703
25704  An `asm' instruction without any output operands is treated
25705 identically to a volatile `asm' instruction.
25706
25707  It is a natural idea to look for a way to give access to the condition
25708 code left by the assembler instruction.  However, when we attempted to
25709 implement this, we found no way to make it work reliably.  The problem
25710 is that output operands might need reloading, which result in
25711 additional following "store" instructions.  On most machines, these
25712 instructions alter the condition code before there is time to test it.
25713 This problem doesn't arise for ordinary "test" and "compare"
25714 instructions because they don't have any output operands.
25715
25716  For reasons similar to those described above, it is not possible to
25717 give an assembler instruction access to the condition code left by
25718 previous instructions.
25719
25720  As of GCC version 4.5, `asm goto' may be used to have the assembly
25721 jump to one or more C labels.  In this form, a fifth section after the
25722 clobber list contains a list of all C labels to which the assembly may
25723 jump.  Each label operand is implicitly self-named.  The `asm' is also
25724 assumed to fall through to the next statement.
25725
25726  This form of `asm' is restricted to not have outputs.  This is due to
25727 a internal restriction in the compiler that control transfer
25728 instructions cannot have outputs.  This restriction on `asm goto' may
25729 be lifted in some future version of the compiler.  In the meantime,
25730 `asm goto' may include a memory clobber, and so leave outputs in memory.
25731
25732      int frob(int x)
25733      {
25734        int y;
25735        asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
25736                  : : "r"(x), "r"(&y) : "r5", "memory" : error);
25737        return y;
25738       error:
25739        return -1;
25740      }
25741
25742 In this (inefficient) example, the `frob' instruction sets the carry
25743 bit to indicate an error.  The `jc' instruction detects this and
25744 branches to the `error' label.  Finally, the output of the `frob'
25745 instruction (`%r5') is stored into the memory for variable `y', which
25746 is later read by the `return' statement.
25747
25748      void doit(void)
25749      {
25750        int i = 0;
25751        asm goto ("mfsr %%r1, 123; jmp %%r1;"
25752                  ".pushsection doit_table;"
25753                  ".long %l0, %l1, %l2, %l3;"
25754                  ".popsection"
25755                  : : : "r1" : label1, label2, label3, label4);
25756        __builtin_unreachable ();
25757
25758       label1:
25759        f1();
25760        return;
25761       label2:
25762        f2();
25763        return;
25764       label3:
25765        i = 1;
25766       label4:
25767        f3(i);
25768      }
25769
25770 In this (also inefficient) example, the `mfsr' instruction reads an
25771 address from some out-of-band machine register, and the following `jmp'
25772 instruction branches to that address.  The address read by the `mfsr'
25773 instruction is assumed to have been previously set via some
25774 application-specific mechanism to be one of the four values stored in
25775 the `doit_table' section.  Finally, the `asm' is followed by a call to
25776 `__builtin_unreachable' to indicate that the `asm' does not in fact
25777 fall through.
25778
25779      #define TRACE1(NUM)                         \
25780        do {                                      \
25781          asm goto ("0: nop;"                     \
25782                    ".pushsection trace_table;"   \
25783                    ".long 0b, %l0;"              \
25784                    ".popsection"                 \
25785                    : : : : trace#NUM);           \
25786          if (0) { trace#NUM: trace(); }          \
25787        } while (0)
25788      #define TRACE  TRACE1(__COUNTER__)
25789
25790 In this example (which in fact inspired the `asm goto' feature) we want
25791 on rare occasions to call the `trace' function; on other occasions we'd
25792 like to keep the overhead to the absolute minimum.  The normal code
25793 path consists of a single `nop' instruction.  However, we record the
25794 address of this `nop' together with the address of a label that calls
25795 the `trace' function.  This allows the `nop' instruction to be patched
25796 at run time to be an unconditional branch to the stored label.  It is
25797 assumed that an optimizing compiler moves the labeled block out of
25798 line, to optimize the fall through path from the `asm'.
25799
25800  If you are writing a header file that should be includable in ISO C
25801 programs, write `__asm__' instead of `asm'.  *Note Alternate Keywords::.
25802
25803 6.41.1 Size of an `asm'
25804 -----------------------
25805
25806 Some targets require that GCC track the size of each instruction used in
25807 order to generate correct code.  Because the final length of an `asm'
25808 is only known by the assembler, GCC must make an estimate as to how big
25809 it will be.  The estimate is formed by counting the number of
25810 statements in the pattern of the `asm' and multiplying that by the
25811 length of the longest instruction on that processor.  Statements in the
25812 `asm' are identified by newline characters and whatever statement
25813 separator characters are supported by the assembler; on most processors
25814 this is the `;' character.
25815
25816  Normally, GCC's estimate is perfectly adequate to ensure that correct
25817 code is generated, but it is possible to confuse the compiler if you use
25818 pseudo instructions or assembler macros that expand into multiple real
25819 instructions or if you use assembler directives that expand to more
25820 space in the object file than is needed for a single instruction.  If
25821 this happens then the assembler produces a diagnostic saying that a
25822 label is unreachable.
25823
25824 6.41.2 i386 floating-point asm operands
25825 ---------------------------------------
25826
25827 On i386 targets, there are several rules on the usage of stack-like
25828 registers in the operands of an `asm'.  These rules apply only to the
25829 operands that are stack-like registers:
25830
25831   1. Given a set of input registers that die in an `asm', it is
25832      necessary to know which are implicitly popped by the `asm', and
25833      which must be explicitly popped by GCC.
25834
25835      An input register that is implicitly popped by the `asm' must be
25836      explicitly clobbered, unless it is constrained to match an output
25837      operand.
25838
25839   2. For any input register that is implicitly popped by an `asm', it is
25840      necessary to know how to adjust the stack to compensate for the
25841      pop.  If any non-popped input is closer to the top of the
25842      reg-stack than the implicitly popped register, it would not be
25843      possible to know what the stack looked like--it's not clear how
25844      the rest of the stack "slides up".
25845
25846      All implicitly popped input registers must be closer to the top of
25847      the reg-stack than any input that is not implicitly popped.
25848
25849      It is possible that if an input dies in an `asm', the compiler
25850      might use the input register for an output reload.  Consider this
25851      example:
25852
25853           asm ("foo" : "=t" (a) : "f" (b));
25854
25855      This code says that input `b' is not popped by the `asm', and that
25856      the `asm' pushes a result onto the reg-stack, i.e., the stack is
25857      one deeper after the `asm' than it was before.  But, it is
25858      possible that reload may think that it can use the same register
25859      for both the input and the output.
25860
25861      To prevent this from happening, if any input operand uses the `f'
25862      constraint, all output register constraints must use the `&'
25863      early-clobber modifier.
25864
25865      The example above would be correctly written as:
25866
25867           asm ("foo" : "=&t" (a) : "f" (b));
25868
25869   3. Some operands need to be in particular places on the stack.  All
25870      output operands fall in this category--GCC has no other way to
25871      know which registers the outputs appear in unless you indicate
25872      this in the constraints.
25873
25874      Output operands must specifically indicate which register an output
25875      appears in after an `asm'.  `=f' is not allowed: the operand
25876      constraints must select a class with a single register.
25877
25878   4. Output operands may not be "inserted" between existing stack
25879      registers.  Since no 387 opcode uses a read/write operand, all
25880      output operands are dead before the `asm', and are pushed by the
25881      `asm'.  It makes no sense to push anywhere but the top of the
25882      reg-stack.
25883
25884      Output operands must start at the top of the reg-stack: output
25885      operands may not "skip" a register.
25886
25887   5. Some `asm' statements may need extra stack space for internal
25888      calculations.  This can be guaranteed by clobbering stack registers
25889      unrelated to the inputs and outputs.
25890
25891
25892  Here are a couple of reasonable `asm's to want to write.  This `asm'
25893 takes one input, which is internally popped, and produces two outputs.
25894
25895      asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
25896
25897 This `asm' takes two inputs, which are popped by the `fyl2xp1' opcode,
25898 and replaces them with one output.  The `st(1)' clobber is necessary
25899 for the compiler to know that `fyl2xp1' pops both inputs.
25900
25901      asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
25902
25903 \1f
25904 File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: C Extensions
25905
25906 6.42 Constraints for `asm' Operands
25907 ===================================
25908
25909 Here are specific details on what constraint letters you can use with
25910 `asm' operands.  Constraints can say whether an operand may be in a
25911 register, and which kinds of register; whether the operand can be a
25912 memory reference, and which kinds of address; whether the operand may
25913 be an immediate constant, and which possible values it may have.
25914 Constraints can also require two operands to match.  Side-effects
25915 aren't allowed in operands of inline `asm', unless `<' or `>'
25916 constraints are used, because there is no guarantee that the
25917 side-effects will happen exactly once in an instruction that can update
25918 the addressing register.
25919
25920 * Menu:
25921
25922 * Simple Constraints::  Basic use of constraints.
25923 * Multi-Alternative::   When an insn has two alternative constraint-patterns.
25924 * Modifiers::           More precise control over effects of constraints.
25925 * Machine Constraints:: Special constraints for some particular machines.
25926
25927 \1f
25928 File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
25929
25930 6.42.1 Simple Constraints
25931 -------------------------
25932
25933 The simplest kind of constraint is a string full of letters, each of
25934 which describes one kind of operand that is permitted.  Here are the
25935 letters that are allowed:
25936
25937 whitespace
25938      Whitespace characters are ignored and can be inserted at any
25939      position except the first.  This enables each alternative for
25940      different operands to be visually aligned in the machine
25941      description even if they have different number of constraints and
25942      modifiers.
25943
25944 `m'
25945      A memory operand is allowed, with any kind of address that the
25946      machine supports in general.  Note that the letter used for the
25947      general memory constraint can be re-defined by a back end using
25948      the `TARGET_MEM_CONSTRAINT' macro.
25949
25950 `o'
25951      A memory operand is allowed, but only if the address is
25952      "offsettable".  This means that adding a small integer (actually,
25953      the width in bytes of the operand, as determined by its machine
25954      mode) may be added to the address and the result is also a valid
25955      memory address.
25956
25957      For example, an address which is constant is offsettable; so is an
25958      address that is the sum of a register and a constant (as long as a
25959      slightly larger constant is also within the range of
25960      address-offsets supported by the machine); but an autoincrement or
25961      autodecrement address is not offsettable.  More complicated
25962      indirect/indexed addresses may or may not be offsettable depending
25963      on the other addressing modes that the machine supports.
25964
25965      Note that in an output operand which can be matched by another
25966      operand, the constraint letter `o' is valid only when accompanied
25967      by both `<' (if the target machine has predecrement addressing)
25968      and `>' (if the target machine has preincrement addressing).
25969
25970 `V'
25971      A memory operand that is not offsettable.  In other words,
25972      anything that would fit the `m' constraint but not the `o'
25973      constraint.
25974
25975 `<'
25976      A memory operand with autodecrement addressing (either
25977      predecrement or postdecrement) is allowed.  In inline `asm' this
25978      constraint is only allowed if the operand is used exactly once in
25979      an instruction that can handle the side-effects.  Not using an
25980      operand with `<' in constraint string in the inline `asm' pattern
25981      at all or using it in multiple instructions isn't valid, because
25982      the side-effects wouldn't be performed or would be performed more
25983      than once.  Furthermore, on some targets the operand with `<' in
25984      constraint string must be accompanied by special instruction
25985      suffixes like `%U0' instruction suffix on PowerPC or `%P0' on
25986      IA-64.
25987
25988 `>'
25989      A memory operand with autoincrement addressing (either
25990      preincrement or postincrement) is allowed.  In inline `asm' the
25991      same restrictions as for `<' apply.
25992
25993 `r'
25994      A register operand is allowed provided that it is in a general
25995      register.
25996
25997 `i'
25998      An immediate integer operand (one with constant value) is allowed.
25999      This includes symbolic constants whose values will be known only at
26000      assembly time or later.
26001
26002 `n'
26003      An immediate integer operand with a known numeric value is allowed.
26004      Many systems cannot support assembly-time constants for operands
26005      less than a word wide.  Constraints for these operands should use
26006      `n' rather than `i'.
26007
26008 `I', `J', `K', ... `P'
26009      Other letters in the range `I' through `P' may be defined in a
26010      machine-dependent fashion to permit immediate integer operands with
26011      explicit integer values in specified ranges.  For example, on the
26012      68000, `I' is defined to stand for the range of values 1 to 8.
26013      This is the range permitted as a shift count in the shift
26014      instructions.
26015
26016 `E'
26017      An immediate floating operand (expression code `const_double') is
26018      allowed, but only if the target floating point format is the same
26019      as that of the host machine (on which the compiler is running).
26020
26021 `F'
26022      An immediate floating operand (expression code `const_double' or
26023      `const_vector') is allowed.
26024
26025 `G', `H'
26026      `G' and `H' may be defined in a machine-dependent fashion to
26027      permit immediate floating operands in particular ranges of values.
26028
26029 `s'
26030      An immediate integer operand whose value is not an explicit
26031      integer is allowed.
26032
26033      This might appear strange; if an insn allows a constant operand
26034      with a value not known at compile time, it certainly must allow
26035      any known value.  So why use `s' instead of `i'?  Sometimes it
26036      allows better code to be generated.
26037
26038      For example, on the 68000 in a fullword instruction it is possible
26039      to use an immediate operand; but if the immediate value is between
26040      -128 and 127, better code results from loading the value into a
26041      register and using the register.  This is because the load into
26042      the register can be done with a `moveq' instruction.  We arrange
26043      for this to happen by defining the letter `K' to mean "any integer
26044      outside the range -128 to 127", and then specifying `Ks' in the
26045      operand constraints.
26046
26047 `g'
26048      Any register, memory or immediate integer operand is allowed,
26049      except for registers that are not general registers.
26050
26051 `X'
26052      Any operand whatsoever is allowed.
26053
26054 `0', `1', `2', ... `9'
26055      An operand that matches the specified operand number is allowed.
26056      If a digit is used together with letters within the same
26057      alternative, the digit should come last.
26058
26059      This number is allowed to be more than a single digit.  If multiple
26060      digits are encountered consecutively, they are interpreted as a
26061      single decimal integer.  There is scant chance for ambiguity,
26062      since to-date it has never been desirable that `10' be interpreted
26063      as matching either operand 1 _or_ operand 0.  Should this be
26064      desired, one can use multiple alternatives instead.
26065
26066      This is called a "matching constraint" and what it really means is
26067      that the assembler has only a single operand that fills two roles
26068      which `asm' distinguishes.  For example, an add instruction uses
26069      two input operands and an output operand, but on most CISC
26070      machines an add instruction really has only two operands, one of
26071      them an input-output operand:
26072
26073           addl #35,r12
26074
26075      Matching constraints are used in these circumstances.  More
26076      precisely, the two operands that match must include one input-only
26077      operand and one output-only operand.  Moreover, the digit must be a
26078      smaller number than the number of the operand that uses it in the
26079      constraint.
26080
26081 `p'
26082      An operand that is a valid memory address is allowed.  This is for
26083      "load address" and "push address" instructions.
26084
26085      `p' in the constraint must be accompanied by `address_operand' as
26086      the predicate in the `match_operand'.  This predicate interprets
26087      the mode specified in the `match_operand' as the mode of the memory
26088      reference for which the address would be valid.
26089
26090 OTHER-LETTERS
26091      Other letters can be defined in machine-dependent fashion to stand
26092      for particular classes of registers or other arbitrary operand
26093      types.  `d', `a' and `f' are defined on the 68000/68020 to stand
26094      for data, address and floating point registers.
26095
26096 \1f
26097 File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
26098
26099 6.42.2 Multiple Alternative Constraints
26100 ---------------------------------------
26101
26102 Sometimes a single instruction has multiple alternative sets of possible
26103 operands.  For example, on the 68000, a logical-or instruction can
26104 combine register or an immediate value into memory, or it can combine
26105 any kind of operand into a register; but it cannot combine one memory
26106 location into another.
26107
26108  These constraints are represented as multiple alternatives.  An
26109 alternative can be described by a series of letters for each operand.
26110 The overall constraint for an operand is made from the letters for this
26111 operand from the first alternative, a comma, the letters for this
26112 operand from the second alternative, a comma, and so on until the last
26113 alternative.
26114
26115  If all the operands fit any one alternative, the instruction is valid.
26116 Otherwise, for each alternative, the compiler counts how many
26117 instructions must be added to copy the operands so that that
26118 alternative applies.  The alternative requiring the least copying is
26119 chosen.  If two alternatives need the same amount of copying, the one
26120 that comes first is chosen.  These choices can be altered with the `?'
26121 and `!' characters:
26122
26123 `?'
26124      Disparage slightly the alternative that the `?' appears in, as a
26125      choice when no alternative applies exactly.  The compiler regards
26126      this alternative as one unit more costly for each `?' that appears
26127      in it.
26128
26129 `!'
26130      Disparage severely the alternative that the `!' appears in.  This
26131      alternative can still be used if it fits without reloading, but if
26132      reloading is needed, some other alternative will be used.
26133
26134 \1f
26135 File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
26136
26137 6.42.3 Constraint Modifier Characters
26138 -------------------------------------
26139
26140 Here are constraint modifier characters.
26141
26142 `='
26143      Means that this operand is write-only for this instruction: the
26144      previous value is discarded and replaced by output data.
26145
26146 `+'
26147      Means that this operand is both read and written by the
26148      instruction.
26149
26150      When the compiler fixes up the operands to satisfy the constraints,
26151      it needs to know which operands are inputs to the instruction and
26152      which are outputs from it.  `=' identifies an output; `+'
26153      identifies an operand that is both input and output; all other
26154      operands are assumed to be input only.
26155
26156      If you specify `=' or `+' in a constraint, you put it in the first
26157      character of the constraint string.
26158
26159 `&'
26160      Means (in a particular alternative) that this operand is an
26161      "earlyclobber" operand, which is modified before the instruction is
26162      finished using the input operands.  Therefore, this operand may
26163      not lie in a register that is used as an input operand or as part
26164      of any memory address.
26165
26166      `&' applies only to the alternative in which it is written.  In
26167      constraints with multiple alternatives, sometimes one alternative
26168      requires `&' while others do not.  See, for example, the `movdf'
26169      insn of the 68000.
26170
26171      An input operand can be tied to an earlyclobber operand if its only
26172      use as an input occurs before the early result is written.  Adding
26173      alternatives of this form often allows GCC to produce better code
26174      when only some of the inputs can be affected by the earlyclobber.
26175      See, for example, the `mulsi3' insn of the ARM.
26176
26177      `&' does not obviate the need to write `='.
26178
26179 `%'
26180      Declares the instruction to be commutative for this operand and the
26181      following operand.  This means that the compiler may interchange
26182      the two operands if that is the cheapest way to make all operands
26183      fit the constraints.  GCC can only handle one commutative pair in
26184      an asm; if you use more, the compiler may fail.  Note that you
26185      need not use the modifier if the two alternatives are strictly
26186      identical; this would only waste time in the reload pass.  The
26187      modifier is not operational after register allocation, so the
26188      result of `define_peephole2' and `define_split's performed after
26189      reload cannot rely on `%' to make the intended insn match.
26190
26191 `#'
26192      Says that all following characters, up to the next comma, are to be
26193      ignored as a constraint.  They are significant only for choosing
26194      register preferences.
26195
26196 `*'
26197      Says that the following character should be ignored when choosing
26198      register preferences.  `*' has no effect on the meaning of the
26199      constraint as a constraint, and no effect on reloading.  For LRA
26200      `*' additionally disparages slightly the alternative if the
26201      following character matches the operand.
26202
26203
26204 \1f
26205 File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
26206
26207 6.42.4 Constraints for Particular Machines
26208 ------------------------------------------
26209
26210 Whenever possible, you should use the general-purpose constraint letters
26211 in `asm' arguments, since they will convey meaning more readily to
26212 people reading your code.  Failing that, use the constraint letters
26213 that usually have very similar meanings across architectures.  The most
26214 commonly used constraints are `m' and `r' (for memory and
26215 general-purpose registers respectively; *note Simple Constraints::), and
26216 `I', usually the letter indicating the most common immediate-constant
26217 format.
26218
26219  Each architecture defines additional constraints.  These constraints
26220 are used by the compiler itself for instruction generation, as well as
26221 for `asm' statements; therefore, some of the constraints are not
26222 particularly useful for `asm'.  Here is a summary of some of the
26223 machine-dependent constraints available on some particular machines; it
26224 includes both constraints that are useful for `asm' and constraints
26225 that aren't.  The compiler source file mentioned in the table heading
26226 for each architecture is the definitive reference for the meanings of
26227 that architecture's constraints.
26228
26229 _AArch64 family--`config/aarch64/constraints.md'_
26230
26231     `k'
26232           The stack pointer register (`SP')
26233
26234     `w'
26235           Floating point or SIMD vector register
26236
26237     `I'
26238           Integer constant that is valid as an immediate operand in an
26239           `ADD' instruction
26240
26241     `J'
26242           Integer constant that is valid as an immediate operand in a
26243           `SUB' instruction (once negated)
26244
26245     `K'
26246           Integer constant that can be used with a 32-bit logical
26247           instruction
26248
26249     `L'
26250           Integer constant that can be used with a 64-bit logical
26251           instruction
26252
26253     `M'
26254           Integer constant that is valid as an immediate operand in a
26255           32-bit `MOV' pseudo instruction. The `MOV' may be assembled
26256           to one of several different machine instructions depending on
26257           the value
26258
26259     `N'
26260           Integer constant that is valid as an immediate operand in a
26261           64-bit `MOV' pseudo instruction
26262
26263     `S'
26264           An absolute symbolic address or a label reference
26265
26266     `Y'
26267           Floating point constant zero
26268
26269     `Z'
26270           Integer constant zero
26271
26272     `Usa'
26273           An absolute symbolic address
26274
26275     `Ush'
26276           The high part (bits 12 and upwards) of the pc-relative
26277           address of a symbol within 4GB of the instruction
26278
26279     `Q'
26280           A memory address which uses a single base register with no
26281           offset
26282
26283     `Ump'
26284           A memory address suitable for a load/store pair instruction
26285           in SI, DI, SF and DF modes
26286
26287
26288 _ARM family--`config/arm/constraints.md'_
26289
26290     `w'
26291           VFP floating-point register
26292
26293     `G'
26294           The floating-point constant 0.0
26295
26296     `I'
26297           Integer that is valid as an immediate operand in a data
26298           processing instruction.  That is, an integer in the range 0
26299           to 255 rotated by a multiple of 2
26300
26301     `J'
26302           Integer in the range -4095 to 4095
26303
26304     `K'
26305           Integer that satisfies constraint `I' when inverted (ones
26306           complement)
26307
26308     `L'
26309           Integer that satisfies constraint `I' when negated (twos
26310           complement)
26311
26312     `M'
26313           Integer in the range 0 to 32
26314
26315     `Q'
26316           A memory reference where the exact address is in a single
26317           register (``m'' is preferable for `asm' statements)
26318
26319     `R'
26320           An item in the constant pool
26321
26322     `S'
26323           A symbol in the text segment of the current file
26324
26325     `Uv'
26326           A memory reference suitable for VFP load/store insns
26327           (reg+constant offset)
26328
26329     `Uy'
26330           A memory reference suitable for iWMMXt load/store
26331           instructions.
26332
26333     `Uq'
26334           A memory reference suitable for the ARMv4 ldrsb instruction.
26335
26336 _AVR family--`config/avr/constraints.md'_
26337
26338     `l'
26339           Registers from r0 to r15
26340
26341     `a'
26342           Registers from r16 to r23
26343
26344     `d'
26345           Registers from r16 to r31
26346
26347     `w'
26348           Registers from r24 to r31.  These registers can be used in
26349           `adiw' command
26350
26351     `e'
26352           Pointer register (r26-r31)
26353
26354     `b'
26355           Base pointer register (r28-r31)
26356
26357     `q'
26358           Stack pointer register (SPH:SPL)
26359
26360     `t'
26361           Temporary register r0
26362
26363     `x'
26364           Register pair X (r27:r26)
26365
26366     `y'
26367           Register pair Y (r29:r28)
26368
26369     `z'
26370           Register pair Z (r31:r30)
26371
26372     `I'
26373           Constant greater than -1, less than 64
26374
26375     `J'
26376           Constant greater than -64, less than 1
26377
26378     `K'
26379           Constant integer 2
26380
26381     `L'
26382           Constant integer 0
26383
26384     `M'
26385           Constant that fits in 8 bits
26386
26387     `N'
26388           Constant integer -1
26389
26390     `O'
26391           Constant integer 8, 16, or 24
26392
26393     `P'
26394           Constant integer 1
26395
26396     `G'
26397           A floating point constant 0.0
26398
26399     `Q'
26400           A memory address based on Y or Z pointer with displacement.
26401
26402 _Epiphany--`config/epiphany/constraints.md'_
26403
26404     `U16'
26405           An unsigned 16-bit constant.
26406
26407     `K'
26408           An unsigned 5-bit constant.
26409
26410     `L'
26411           A signed 11-bit constant.
26412
26413     `Cm1'
26414           A signed 11-bit constant added to -1.  Can only match when
26415           the `-m1reg-REG' option is active.
26416
26417     `Cl1'
26418           Left-shift of -1, i.e., a bit mask with a block of leading
26419           ones, the rest being a block of trailing zeroes.  Can only
26420           match when the `-m1reg-REG' option is active.
26421
26422     `Cr1'
26423           Right-shift of -1, i.e., a bit mask with a trailing block of
26424           ones, the rest being zeroes.  Or to put it another way, one
26425           less than a power of two.  Can only match when the
26426           `-m1reg-REG' option is active.
26427
26428     `Cal'
26429           Constant for arithmetic/logical operations.  This is like
26430           `i', except that for position independent code, no symbols /
26431           expressions needing relocations are allowed.
26432
26433     `Csy'
26434           Symbolic constant for call/jump instruction.
26435
26436     `Rcs'
26437           The register class usable in short insns.  This is a register
26438           class constraint, and can thus drive register allocation.
26439           This constraint won't match unless `-mprefer-short-insn-regs'
26440           is in effect.
26441
26442     `Rsc'
26443           The the register class of registers that can be used to hold a
26444           sibcall call address.  I.e., a caller-saved register.
26445
26446     `Rct'
26447           Core control register class.
26448
26449     `Rgs'
26450           The register group usable in short insns.  This constraint
26451           does not use a register class, so that it only passively
26452           matches suitable registers, and doesn't drive register
26453           allocation.
26454
26455     `Rra'
26456           Matches the return address if it can be replaced with the
26457           link register.
26458
26459     `Rcc'
26460           Matches the integer condition code register.
26461
26462     `Sra'
26463           Matches the return address if it is in a stack slot.
26464
26465     `Cfm'
26466           Matches control register values to switch fp mode, which are
26467           encapsulated in `UNSPEC_FP_MODE'.
26468
26469 _CR16 Architecture--`config/cr16/cr16.h'_
26470
26471     `b'
26472           Registers from r0 to r14 (registers without stack pointer)
26473
26474     `t'
26475           Register from r0 to r11 (all 16-bit registers)
26476
26477     `p'
26478           Register from r12 to r15 (all 32-bit registers)
26479
26480     `I'
26481           Signed constant that fits in 4 bits
26482
26483     `J'
26484           Signed constant that fits in 5 bits
26485
26486     `K'
26487           Signed constant that fits in 6 bits
26488
26489     `L'
26490           Unsigned constant that fits in 4 bits
26491
26492     `M'
26493           Signed constant that fits in 32 bits
26494
26495     `N'
26496           Check for 64 bits wide constants for add/sub instructions
26497
26498     `G'
26499           Floating point constant that is legal for store immediate
26500
26501 _Hewlett-Packard PA-RISC--`config/pa/pa.h'_
26502
26503     `a'
26504           General register 1
26505
26506     `f'
26507           Floating point register
26508
26509     `q'
26510           Shift amount register
26511
26512     `x'
26513           Floating point register (deprecated)
26514
26515     `y'
26516           Upper floating point register (32-bit), floating point
26517           register (64-bit)
26518
26519     `Z'
26520           Any register
26521
26522     `I'
26523           Signed 11-bit integer constant
26524
26525     `J'
26526           Signed 14-bit integer constant
26527
26528     `K'
26529           Integer constant that can be deposited with a `zdepi'
26530           instruction
26531
26532     `L'
26533           Signed 5-bit integer constant
26534
26535     `M'
26536           Integer constant 0
26537
26538     `N'
26539           Integer constant that can be loaded with a `ldil' instruction
26540
26541     `O'
26542           Integer constant whose value plus one is a power of 2
26543
26544     `P'
26545           Integer constant that can be used for `and' operations in
26546           `depi' and `extru' instructions
26547
26548     `S'
26549           Integer constant 31
26550
26551     `U'
26552           Integer constant 63
26553
26554     `G'
26555           Floating-point constant 0.0
26556
26557     `A'
26558           A `lo_sum' data-linkage-table memory operand
26559
26560     `Q'
26561           A memory operand that can be used as the destination operand
26562           of an integer store instruction
26563
26564     `R'
26565           A scaled or unscaled indexed memory operand
26566
26567     `T'
26568           A memory operand for floating-point loads and stores
26569
26570     `W'
26571           A register indirect memory operand
26572
26573 _picoChip family--`picochip.h'_
26574
26575     `k'
26576           Stack register.
26577
26578     `f'
26579           Pointer register.  A register which can be used to access
26580           memory without supplying an offset.  Any other register can
26581           be used to access memory, but will need a constant offset.
26582           In the case of the offset being zero, it is more efficient to
26583           use a pointer register, since this reduces code size.
26584
26585     `t'
26586           A twin register.  A register which may be paired with an
26587           adjacent register to create a 32-bit register.
26588
26589     `a'
26590           Any absolute memory address (e.g., symbolic constant, symbolic
26591           constant + offset).
26592
26593     `I'
26594           4-bit signed integer.
26595
26596     `J'
26597           4-bit unsigned integer.
26598
26599     `K'
26600           8-bit signed integer.
26601
26602     `M'
26603           Any constant whose absolute value is no greater than 4-bits.
26604
26605     `N'
26606           10-bit signed integer
26607
26608     `O'
26609           16-bit signed integer.
26610
26611
26612 _PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_
26613
26614     `b'
26615           Address base register
26616
26617     `d'
26618           Floating point register (containing 64-bit value)
26619
26620     `f'
26621           Floating point register (containing 32-bit value)
26622
26623     `v'
26624           Altivec vector register
26625
26626     `wd'
26627           VSX vector register to hold vector double data
26628
26629     `wf'
26630           VSX vector register to hold vector float data
26631
26632     `ws'
26633           VSX vector register to hold scalar float data
26634
26635     `wa'
26636           Any VSX register
26637
26638     `h'
26639           `MQ', `CTR', or `LINK' register
26640
26641     `q'
26642           `MQ' register
26643
26644     `c'
26645           `CTR' register
26646
26647     `l'
26648           `LINK' register
26649
26650     `x'
26651           `CR' register (condition register) number 0
26652
26653     `y'
26654           `CR' register (condition register)
26655
26656     `z'
26657           `XER[CA]' carry bit (part of the XER register)
26658
26659     `I'
26660           Signed 16-bit constant
26661
26662     `J'
26663           Unsigned 16-bit constant shifted left 16 bits (use `L'
26664           instead for `SImode' constants)
26665
26666     `K'
26667           Unsigned 16-bit constant
26668
26669     `L'
26670           Signed 16-bit constant shifted left 16 bits
26671
26672     `M'
26673           Constant larger than 31
26674
26675     `N'
26676           Exact power of 2
26677
26678     `O'
26679           Zero
26680
26681     `P'
26682           Constant whose negation is a signed 16-bit constant
26683
26684     `G'
26685           Floating point constant that can be loaded into a register
26686           with one instruction per word
26687
26688     `H'
26689           Integer/Floating point constant that can be loaded into a
26690           register using three instructions
26691
26692     `m'
26693           Memory operand.  Normally, `m' does not allow addresses that
26694           update the base register.  If `<' or `>' constraint is also
26695           used, they are allowed and therefore on PowerPC targets in
26696           that case it is only safe to use `m<>' in an `asm' statement
26697           if that `asm' statement accesses the operand exactly once.
26698           The `asm' statement must also use `%U<OPNO>' as a placeholder
26699           for the "update" flag in the corresponding load or store
26700           instruction.  For example:
26701
26702                asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
26703
26704           is correct but:
26705
26706                asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
26707
26708           is not.
26709
26710     `es'
26711           A "stable" memory operand; that is, one which does not
26712           include any automodification of the base register.  This used
26713           to be useful when `m' allowed automodification of the base
26714           register, but as those are now only allowed when `<' or `>'
26715           is used, `es' is basically the same as `m' without `<' and
26716           `>'.
26717
26718     `Q'
26719           Memory operand that is an offset from a register (it is
26720           usually better to use `m' or `es' in `asm' statements)
26721
26722     `Z'
26723           Memory operand that is an indexed or indirect from a register
26724           (it is usually better to use `m' or `es' in `asm' statements)
26725
26726     `R'
26727           AIX TOC entry
26728
26729     `a'
26730           Address operand that is an indexed or indirect from a
26731           register (`p' is preferable for `asm' statements)
26732
26733     `S'
26734           Constant suitable as a 64-bit mask operand
26735
26736     `T'
26737           Constant suitable as a 32-bit mask operand
26738
26739     `U'
26740           System V Release 4 small data area reference
26741
26742     `t'
26743           AND masks that can be performed by two rldic{l, r}
26744           instructions
26745
26746     `W'
26747           Vector constant that does not require memory
26748
26749     `j'
26750           Vector constant that is all zeros.
26751
26752
26753 _Intel 386--`config/i386/constraints.md'_
26754
26755     `R'
26756           Legacy register--the eight integer registers available on all
26757           i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp').
26758
26759     `q'
26760           Any register accessible as `Rl'.  In 32-bit mode, `a', `b',
26761           `c', and `d'; in 64-bit mode, any integer register.
26762
26763     `Q'
26764           Any register accessible as `Rh': `a', `b', `c', and `d'.
26765
26766     `a'
26767           The `a' register.
26768
26769     `b'
26770           The `b' register.
26771
26772     `c'
26773           The `c' register.
26774
26775     `d'
26776           The `d' register.
26777
26778     `S'
26779           The `si' register.
26780
26781     `D'
26782           The `di' register.
26783
26784     `A'
26785           The `a' and `d' registers.  This class is used for
26786           instructions that return double word results in the `ax:dx'
26787           register pair.  Single word values will be allocated either
26788           in `ax' or `dx'.  For example on i386 the following
26789           implements `rdtsc':
26790
26791                unsigned long long rdtsc (void)
26792                {
26793                  unsigned long long tick;
26794                  __asm__ __volatile__("rdtsc":"=A"(tick));
26795                  return tick;
26796                }
26797
26798           This is not correct on x86_64 as it would allocate tick in
26799           either `ax' or `dx'.  You have to use the following variant
26800           instead:
26801
26802                unsigned long long rdtsc (void)
26803                {
26804                  unsigned int tickl, tickh;
26805                  __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
26806                  return ((unsigned long long)tickh << 32)|tickl;
26807                }
26808
26809     `f'
26810           Any 80387 floating-point (stack) register.
26811
26812     `t'
26813           Top of 80387 floating-point stack (`%st(0)').
26814
26815     `u'
26816           Second from top of 80387 floating-point stack (`%st(1)').
26817
26818     `y'
26819           Any MMX register.
26820
26821     `x'
26822           Any SSE register.
26823
26824     `Yz'
26825           First SSE register (`%xmm0').
26826
26827     `I'
26828           Integer constant in the range 0 ... 31, for 32-bit shifts.
26829
26830     `J'
26831           Integer constant in the range 0 ... 63, for 64-bit shifts.
26832
26833     `K'
26834           Signed 8-bit integer constant.
26835
26836     `L'
26837           `0xFF' or `0xFFFF', for andsi as a zero-extending move.
26838
26839     `M'
26840           0, 1, 2, or 3 (shifts for the `lea' instruction).
26841
26842     `N'
26843           Unsigned 8-bit integer constant (for `in' and `out'
26844           instructions).
26845
26846     `G'
26847           Standard 80387 floating point constant.
26848
26849     `C'
26850           Standard SSE floating point constant.
26851
26852     `e'
26853           32-bit signed integer constant, or a symbolic reference known
26854           to fit that range (for immediate operands in sign-extending
26855           x86-64 instructions).
26856
26857     `Z'
26858           32-bit unsigned integer constant, or a symbolic reference
26859           known to fit that range (for immediate operands in
26860           zero-extending x86-64 instructions).
26861
26862
26863 _Intel IA-64--`config/ia64/ia64.h'_
26864
26865     `a'
26866           General register `r0' to `r3' for `addl' instruction
26867
26868     `b'
26869           Branch register
26870
26871     `c'
26872           Predicate register (`c' as in "conditional")
26873
26874     `d'
26875           Application register residing in M-unit
26876
26877     `e'
26878           Application register residing in I-unit
26879
26880     `f'
26881           Floating-point register
26882
26883     `m'
26884           Memory operand.  If used together with `<' or `>', the
26885           operand can have postincrement and postdecrement which
26886           require printing with `%Pn' on IA-64.
26887
26888     `G'
26889           Floating-point constant 0.0 or 1.0
26890
26891     `I'
26892           14-bit signed integer constant
26893
26894     `J'
26895           22-bit signed integer constant
26896
26897     `K'
26898           8-bit signed integer constant for logical instructions
26899
26900     `L'
26901           8-bit adjusted signed integer constant for compare pseudo-ops
26902
26903     `M'
26904           6-bit unsigned integer constant for shift counts
26905
26906     `N'
26907           9-bit signed integer constant for load and store
26908           postincrements
26909
26910     `O'
26911           The constant zero
26912
26913     `P'
26914           0 or -1 for `dep' instruction
26915
26916     `Q'
26917           Non-volatile memory for floating-point loads and stores
26918
26919     `R'
26920           Integer constant in the range 1 to 4 for `shladd' instruction
26921
26922     `S'
26923           Memory operand except postincrement and postdecrement.  This
26924           is now roughly the same as `m' when not used together with `<'
26925           or `>'.
26926
26927 _FRV--`config/frv/frv.h'_
26928
26929     `a'
26930           Register in the class `ACC_REGS' (`acc0' to `acc7').
26931
26932     `b'
26933           Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
26934
26935     `c'
26936           Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
26937           to `icc3').
26938
26939     `d'
26940           Register in the class `GPR_REGS' (`gr0' to `gr63').
26941
26942     `e'
26943           Register in the class `EVEN_REGS' (`gr0' to `gr63').  Odd
26944           registers are excluded not in the class but through the use
26945           of a machine mode larger than 4 bytes.
26946
26947     `f'
26948           Register in the class `FPR_REGS' (`fr0' to `fr63').
26949
26950     `h'
26951           Register in the class `FEVEN_REGS' (`fr0' to `fr63').  Odd
26952           registers are excluded not in the class but through the use
26953           of a machine mode larger than 4 bytes.
26954
26955     `l'
26956           Register in the class `LR_REG' (the `lr' register).
26957
26958     `q'
26959           Register in the class `QUAD_REGS' (`gr2' to `gr63').
26960           Register numbers not divisible by 4 are excluded not in the
26961           class but through the use of a machine mode larger than 8
26962           bytes.
26963
26964     `t'
26965           Register in the class `ICC_REGS' (`icc0' to `icc3').
26966
26967     `u'
26968           Register in the class `FCC_REGS' (`fcc0' to `fcc3').
26969
26970     `v'
26971           Register in the class `ICR_REGS' (`cc4' to `cc7').
26972
26973     `w'
26974           Register in the class `FCR_REGS' (`cc0' to `cc3').
26975
26976     `x'
26977           Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
26978           Register numbers not divisible by 4 are excluded not in the
26979           class but through the use of a machine mode larger than 8
26980           bytes.
26981
26982     `z'
26983           Register in the class `SPR_REGS' (`lcr' and `lr').
26984
26985     `A'
26986           Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
26987
26988     `B'
26989           Register in the class `ACCG_REGS' (`accg0' to `accg7').
26990
26991     `C'
26992           Register in the class `CR_REGS' (`cc0' to `cc7').
26993
26994     `G'
26995           Floating point constant zero
26996
26997     `I'
26998           6-bit signed integer constant
26999
27000     `J'
27001           10-bit signed integer constant
27002
27003     `L'
27004           16-bit signed integer constant
27005
27006     `M'
27007           16-bit unsigned integer constant
27008
27009     `N'
27010           12-bit signed integer constant that is negative--i.e. in the
27011           range of -2048 to -1
27012
27013     `O'
27014           Constant zero
27015
27016     `P'
27017           12-bit signed integer constant that is greater than
27018           zero--i.e. in the range of 1 to 2047.
27019
27020
27021 _Blackfin family--`config/bfin/constraints.md'_
27022
27023     `a'
27024           P register
27025
27026     `d'
27027           D register
27028
27029     `z'
27030           A call clobbered P register.
27031
27032     `qN'
27033           A single register.  If N is in the range 0 to 7, the
27034           corresponding D register.  If it is `A', then the register P0.
27035
27036     `D'
27037           Even-numbered D register
27038
27039     `W'
27040           Odd-numbered D register
27041
27042     `e'
27043           Accumulator register.
27044
27045     `A'
27046           Even-numbered accumulator register.
27047
27048     `B'
27049           Odd-numbered accumulator register.
27050
27051     `b'
27052           I register
27053
27054     `v'
27055           B register
27056
27057     `f'
27058           M register
27059
27060     `c'
27061           Registers used for circular buffering, i.e. I, B, or L
27062           registers.
27063
27064     `C'
27065           The CC register.
27066
27067     `t'
27068           LT0 or LT1.
27069
27070     `k'
27071           LC0 or LC1.
27072
27073     `u'
27074           LB0 or LB1.
27075
27076     `x'
27077           Any D, P, B, M, I or L register.
27078
27079     `y'
27080           Additional registers typically used only in prologues and
27081           epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
27082           USP.
27083
27084     `w'
27085           Any register except accumulators or CC.
27086
27087     `Ksh'
27088           Signed 16 bit integer (in the range -32768 to 32767)
27089
27090     `Kuh'
27091           Unsigned 16 bit integer (in the range 0 to 65535)
27092
27093     `Ks7'
27094           Signed 7 bit integer (in the range -64 to 63)
27095
27096     `Ku7'
27097           Unsigned 7 bit integer (in the range 0 to 127)
27098
27099     `Ku5'
27100           Unsigned 5 bit integer (in the range 0 to 31)
27101
27102     `Ks4'
27103           Signed 4 bit integer (in the range -8 to 7)
27104
27105     `Ks3'
27106           Signed 3 bit integer (in the range -3 to 4)
27107
27108     `Ku3'
27109           Unsigned 3 bit integer (in the range 0 to 7)
27110
27111     `PN'
27112           Constant N, where N is a single-digit constant in the range 0
27113           to 4.
27114
27115     `PA'
27116           An integer equal to one of the MACFLAG_XXX constants that is
27117           suitable for use with either accumulator.
27118
27119     `PB'
27120           An integer equal to one of the MACFLAG_XXX constants that is
27121           suitable for use only with accumulator A1.
27122
27123     `M1'
27124           Constant 255.
27125
27126     `M2'
27127           Constant 65535.
27128
27129     `J'
27130           An integer constant with exactly a single bit set.
27131
27132     `L'
27133           An integer constant with all bits set except exactly one.
27134
27135     `H'
27136
27137     `Q'
27138           Any SYMBOL_REF.
27139
27140 _M32C--`config/m32c/m32c.c'_
27141
27142     `Rsp'
27143     `Rfb'
27144     `Rsb'
27145           `$sp', `$fb', `$sb'.
27146
27147     `Rcr'
27148           Any control register, when they're 16 bits wide (nothing if
27149           control registers are 24 bits wide)
27150
27151     `Rcl'
27152           Any control register, when they're 24 bits wide.
27153
27154     `R0w'
27155     `R1w'
27156     `R2w'
27157     `R3w'
27158           $r0, $r1, $r2, $r3.
27159
27160     `R02'
27161           $r0 or $r2, or $r2r0 for 32 bit values.
27162
27163     `R13'
27164           $r1 or $r3, or $r3r1 for 32 bit values.
27165
27166     `Rdi'
27167           A register that can hold a 64 bit value.
27168
27169     `Rhl'
27170           $r0 or $r1 (registers with addressable high/low bytes)
27171
27172     `R23'
27173           $r2 or $r3
27174
27175     `Raa'
27176           Address registers
27177
27178     `Raw'
27179           Address registers when they're 16 bits wide.
27180
27181     `Ral'
27182           Address registers when they're 24 bits wide.
27183
27184     `Rqi'
27185           Registers that can hold QI values.
27186
27187     `Rad'
27188           Registers that can be used with displacements ($a0, $a1, $sb).
27189
27190     `Rsi'
27191           Registers that can hold 32 bit values.
27192
27193     `Rhi'
27194           Registers that can hold 16 bit values.
27195
27196     `Rhc'
27197           Registers chat can hold 16 bit values, including all control
27198           registers.
27199
27200     `Rra'
27201           $r0 through R1, plus $a0 and $a1.
27202
27203     `Rfl'
27204           The flags register.
27205
27206     `Rmm'
27207           The memory-based pseudo-registers $mem0 through $mem15.
27208
27209     `Rpi'
27210           Registers that can hold pointers (16 bit registers for r8c,
27211           m16c; 24 bit registers for m32cm, m32c).
27212
27213     `Rpa'
27214           Matches multiple registers in a PARALLEL to form a larger
27215           register.  Used to match function return values.
27216
27217     `Is3'
27218           -8 ... 7
27219
27220     `IS1'
27221           -128 ... 127
27222
27223     `IS2'
27224           -32768 ... 32767
27225
27226     `IU2'
27227           0 ... 65535
27228
27229     `In4'
27230           -8 ... -1 or 1 ... 8
27231
27232     `In5'
27233           -16 ... -1 or 1 ... 16
27234
27235     `In6'
27236           -32 ... -1 or 1 ... 32
27237
27238     `IM2'
27239           -65536 ... -1
27240
27241     `Ilb'
27242           An 8 bit value with exactly one bit set.
27243
27244     `Ilw'
27245           A 16 bit value with exactly one bit set.
27246
27247     `Sd'
27248           The common src/dest memory addressing modes.
27249
27250     `Sa'
27251           Memory addressed using $a0 or $a1.
27252
27253     `Si'
27254           Memory addressed with immediate addresses.
27255
27256     `Ss'
27257           Memory addressed using the stack pointer ($sp).
27258
27259     `Sf'
27260           Memory addressed using the frame base register ($fb).
27261
27262     `Ss'
27263           Memory addressed using the small base register ($sb).
27264
27265     `S1'
27266           $r1h
27267
27268 _MeP--`config/mep/constraints.md'_
27269
27270     `a'
27271           The $sp register.
27272
27273     `b'
27274           The $tp register.
27275
27276     `c'
27277           Any control register.
27278
27279     `d'
27280           Either the $hi or the $lo register.
27281
27282     `em'
27283           Coprocessor registers that can be directly loaded ($c0-$c15).
27284
27285     `ex'
27286           Coprocessor registers that can be moved to each other.
27287
27288     `er'
27289           Coprocessor registers that can be moved to core registers.
27290
27291     `h'
27292           The $hi register.
27293
27294     `j'
27295           The $rpc register.
27296
27297     `l'
27298           The $lo register.
27299
27300     `t'
27301           Registers which can be used in $tp-relative addressing.
27302
27303     `v'
27304           The $gp register.
27305
27306     `x'
27307           The coprocessor registers.
27308
27309     `y'
27310           The coprocessor control registers.
27311
27312     `z'
27313           The $0 register.
27314
27315     `A'
27316           User-defined register set A.
27317
27318     `B'
27319           User-defined register set B.
27320
27321     `C'
27322           User-defined register set C.
27323
27324     `D'
27325           User-defined register set D.
27326
27327     `I'
27328           Offsets for $gp-rel addressing.
27329
27330     `J'
27331           Constants that can be used directly with boolean insns.
27332
27333     `K'
27334           Constants that can be moved directly to registers.
27335
27336     `L'
27337           Small constants that can be added to registers.
27338
27339     `M'
27340           Long shift counts.
27341
27342     `N'
27343           Small constants that can be compared to registers.
27344
27345     `O'
27346           Constants that can be loaded into the top half of registers.
27347
27348     `S'
27349           Signed 8-bit immediates.
27350
27351     `T'
27352           Symbols encoded for $tp-rel or $gp-rel addressing.
27353
27354     `U'
27355           Non-constant addresses for loading/saving coprocessor
27356           registers.
27357
27358     `W'
27359           The top half of a symbol's value.
27360
27361     `Y'
27362           A register indirect address without offset.
27363
27364     `Z'
27365           Symbolic references to the control bus.
27366
27367
27368 _MicroBlaze--`config/microblaze/constraints.md'_
27369
27370     `d'
27371           A general register (`r0' to `r31').
27372
27373     `z'
27374           A status register (`rmsr', `$fcc1' to `$fcc7').
27375
27376
27377 _MIPS--`config/mips/constraints.md'_
27378
27379     `d'
27380           An address register.  This is equivalent to `r' unless
27381           generating MIPS16 code.
27382
27383     `f'
27384           A floating-point register (if available).
27385
27386     `h'
27387           Formerly the `hi' register.  This constraint is no longer
27388           supported.
27389
27390     `l'
27391           The `lo' register.  Use this register to store values that are
27392           no bigger than a word.
27393
27394     `x'
27395           The concatenated `hi' and `lo' registers.  Use this register
27396           to store doubleword values.
27397
27398     `c'
27399           A register suitable for use in an indirect jump.  This will
27400           always be `$25' for `-mabicalls'.
27401
27402     `v'
27403           Register `$3'.  Do not use this constraint in new code; it is
27404           retained only for compatibility with glibc.
27405
27406     `y'
27407           Equivalent to `r'; retained for backwards compatibility.
27408
27409     `z'
27410           A floating-point condition code register.
27411
27412     `I'
27413           A signed 16-bit constant (for arithmetic instructions).
27414
27415     `J'
27416           Integer zero.
27417
27418     `K'
27419           An unsigned 16-bit constant (for logic instructions).
27420
27421     `L'
27422           A signed 32-bit constant in which the lower 16 bits are zero.
27423           Such constants can be loaded using `lui'.
27424
27425     `M'
27426           A constant that cannot be loaded using `lui', `addiu' or
27427           `ori'.
27428
27429     `N'
27430           A constant in the range -65535 to -1 (inclusive).
27431
27432     `O'
27433           A signed 15-bit constant.
27434
27435     `P'
27436           A constant in the range 1 to 65535 (inclusive).
27437
27438     `G'
27439           Floating-point zero.
27440
27441     `R'
27442           An address that can be used in a non-macro load or store.
27443
27444 _Motorola 680x0--`config/m68k/constraints.md'_
27445
27446     `a'
27447           Address register
27448
27449     `d'
27450           Data register
27451
27452     `f'
27453           68881 floating-point register, if available
27454
27455     `I'
27456           Integer in the range 1 to 8
27457
27458     `J'
27459           16-bit signed number
27460
27461     `K'
27462           Signed number whose magnitude is greater than 0x80
27463
27464     `L'
27465           Integer in the range -8 to -1
27466
27467     `M'
27468           Signed number whose magnitude is greater than 0x100
27469
27470     `N'
27471           Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
27472
27473     `O'
27474           16 (for rotate using swap)
27475
27476     `P'
27477           Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
27478
27479     `R'
27480           Numbers that mov3q can handle
27481
27482     `G'
27483           Floating point constant that is not a 68881 constant
27484
27485     `S'
27486           Operands that satisfy 'm' when -mpcrel is in effect
27487
27488     `T'
27489           Operands that satisfy 's' when -mpcrel is not in effect
27490
27491     `Q'
27492           Address register indirect addressing mode
27493
27494     `U'
27495           Register offset addressing
27496
27497     `W'
27498           const_call_operand
27499
27500     `Cs'
27501           symbol_ref or const
27502
27503     `Ci'
27504           const_int
27505
27506     `C0'
27507           const_int 0
27508
27509     `Cj'
27510           Range of signed numbers that don't fit in 16 bits
27511
27512     `Cmvq'
27513           Integers valid for mvq
27514
27515     `Capsw'
27516           Integers valid for a moveq followed by a swap
27517
27518     `Cmvz'
27519           Integers valid for mvz
27520
27521     `Cmvs'
27522           Integers valid for mvs
27523
27524     `Ap'
27525           push_operand
27526
27527     `Ac'
27528           Non-register operands allowed in clr
27529
27530
27531 _Moxie--`config/moxie/constraints.md'_
27532
27533     `A'
27534           An absolute address
27535
27536     `B'
27537           An offset address
27538
27539     `W'
27540           A register indirect memory operand
27541
27542     `I'
27543           A constant in the range of 0 to 255.
27544
27545     `N'
27546           A constant in the range of 0 to -255.
27547
27548
27549 _PDP-11--`config/pdp11/constraints.md'_
27550
27551     `a'
27552           Floating point registers AC0 through AC3.  These can be
27553           loaded from/to memory with a single instruction.
27554
27555     `d'
27556           Odd numbered general registers (R1, R3, R5).  These are used
27557           for 16-bit multiply operations.
27558
27559     `f'
27560           Any of the floating point registers (AC0 through AC5).
27561
27562     `G'
27563           Floating point constant 0.
27564
27565     `I'
27566           An integer constant that fits in 16 bits.
27567
27568     `J'
27569           An integer constant whose low order 16 bits are zero.
27570
27571     `K'
27572           An integer constant that does not meet the constraints for
27573           codes `I' or `J'.
27574
27575     `L'
27576           The integer constant 1.
27577
27578     `M'
27579           The integer constant -1.
27580
27581     `N'
27582           The integer constant 0.
27583
27584     `O'
27585           Integer constants -4 through -1 and 1 through 4; shifts by
27586           these amounts are handled as multiple single-bit shifts
27587           rather than a single variable-length shift.
27588
27589     `Q'
27590           A memory reference which requires an additional word (address
27591           or offset) after the opcode.
27592
27593     `R'
27594           A memory reference that is encoded within the opcode.
27595
27596
27597 _RL78--`config/rl78/constraints.md'_
27598
27599     `Int3'
27600           An integer constant in the range 1 ... 7.
27601
27602     `Int8'
27603           An integer constant in the range 0 ... 255.
27604
27605     `J'
27606           An integer constant in the range -255 ... 0
27607
27608     `K'
27609           The integer constant 1.
27610
27611     `L'
27612           The integer constant -1.
27613
27614     `M'
27615           The integer constant 0.
27616
27617     `N'
27618           The integer constant 2.
27619
27620     `O'
27621           The integer constant -2.
27622
27623     `P'
27624           An integer constant in the range 1 ... 15.
27625
27626     `Qbi'
27627           The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
27628
27629     `Qsc'
27630           The synthetic compare types-gt, lt, ge, and le.
27631
27632     `Wab'
27633           A memory reference with an absolute address.
27634
27635     `Wbc'
27636           A memory reference using `BC' as a base register, with an
27637           optional offset.
27638
27639     `Wca'
27640           A memory reference using `AX', `BC', `DE', or `HL' for the
27641           address, for calls.
27642
27643     `Wcv'
27644           A memory reference using any 16-bit register pair for the
27645           address, for calls.
27646
27647     `Wd2'
27648           A memory reference using `DE' as a base register, with an
27649           optional offset.
27650
27651     `Wde'
27652           A memory reference using `DE' as a base register, without any
27653           offset.
27654
27655     `Wfr'
27656           Any memory reference to an address in the far address space.
27657
27658     `Wh1'
27659           A memory reference using `HL' as a base register, with an
27660           optional one-byte offset.
27661
27662     `Whb'
27663           A memory reference using `HL' as a base register, with `B' or
27664           `C' as the index register.
27665
27666     `Whl'
27667           A memory reference using `HL' as a base register, without any
27668           offset.
27669
27670     `Ws1'
27671           A memory reference using `SP' as a base register, with an
27672           optional one-byte offset.
27673
27674     `Y'
27675           Any memory reference to an address in the near address space.
27676
27677     `A'
27678           The `AX' register.
27679
27680     `B'
27681           The `BC' register.
27682
27683     `D'
27684           The `DE' register.
27685
27686     `R'
27687           `A' through `L' registers.
27688
27689     `S'
27690           The `SP' register.
27691
27692     `T'
27693           The `HL' register.
27694
27695     `Z08W'
27696           The 16-bit `R8' register.
27697
27698     `Z10W'
27699           The 16-bit `R10' register.
27700
27701     `Zint'
27702           The registers reserved for interrupts (`R24' to `R31').
27703
27704     `a'
27705           The `A' register.
27706
27707     `b'
27708           The `B' register.
27709
27710     `c'
27711           The `C' register.
27712
27713     `d'
27714           The `D' register.
27715
27716     `e'
27717           The `E' register.
27718
27719     `h'
27720           The `H' register.
27721
27722     `l'
27723           The `L' register.
27724
27725     `v'
27726           The virtual registers.
27727
27728     `w'
27729           The `PSW' register.
27730
27731     `x'
27732           The `X' register.
27733
27734
27735 _RX--`config/rx/constraints.md'_
27736
27737     `Q'
27738           An address which does not involve register indirect
27739           addressing or pre/post increment/decrement addressing.
27740
27741     `Symbol'
27742           A symbol reference.
27743
27744     `Int08'
27745           A constant in the range -256 to 255, inclusive.
27746
27747     `Sint08'
27748           A constant in the range -128 to 127, inclusive.
27749
27750     `Sint16'
27751           A constant in the range -32768 to 32767, inclusive.
27752
27753     `Sint24'
27754           A constant in the range -8388608 to 8388607, inclusive.
27755
27756     `Uint04'
27757           A constant in the range 0 to 15, inclusive.
27758
27759
27760 _SPARC--`config/sparc/sparc.h'_
27761
27762     `f'
27763           Floating-point register on the SPARC-V8 architecture and
27764           lower floating-point register on the SPARC-V9 architecture.
27765
27766     `e'
27767           Floating-point register.  It is equivalent to `f' on the
27768           SPARC-V8 architecture and contains both lower and upper
27769           floating-point registers on the SPARC-V9 architecture.
27770
27771     `c'
27772           Floating-point condition code register.
27773
27774     `d'
27775           Lower floating-point register.  It is only valid on the
27776           SPARC-V9 architecture when the Visual Instruction Set is
27777           available.
27778
27779     `b'
27780           Floating-point register.  It is only valid on the SPARC-V9
27781           architecture when the Visual Instruction Set is available.
27782
27783     `h'
27784           64-bit global or out register for the SPARC-V8+ architecture.
27785
27786     `C'
27787           The constant all-ones, for floating-point.
27788
27789     `A'
27790           Signed 5-bit constant
27791
27792     `D'
27793           A vector constant
27794
27795     `I'
27796           Signed 13-bit constant
27797
27798     `J'
27799           Zero
27800
27801     `K'
27802           32-bit constant with the low 12 bits clear (a constant that
27803           can be loaded with the `sethi' instruction)
27804
27805     `L'
27806           A constant in the range supported by `movcc' instructions
27807           (11-bit signed immediate)
27808
27809     `M'
27810           A constant in the range supported by `movrcc' instructions
27811           (10-bit signed immediate)
27812
27813     `N'
27814           Same as `K', except that it verifies that bits that are not
27815           in the lower 32-bit range are all zero.  Must be used instead
27816           of `K' for modes wider than `SImode'
27817
27818     `O'
27819           The constant 4096
27820
27821     `G'
27822           Floating-point zero
27823
27824     `H'
27825           Signed 13-bit constant, sign-extended to 32 or 64 bits
27826
27827     `P'
27828           The constant -1
27829
27830     `Q'
27831           Floating-point constant whose integral representation can be
27832           moved into an integer register using a single sethi
27833           instruction
27834
27835     `R'
27836           Floating-point constant whose integral representation can be
27837           moved into an integer register using a single mov instruction
27838
27839     `S'
27840           Floating-point constant whose integral representation can be
27841           moved into an integer register using a high/lo_sum
27842           instruction sequence
27843
27844     `T'
27845           Memory address aligned to an 8-byte boundary
27846
27847     `U'
27848           Even register
27849
27850     `W'
27851           Memory address for `e' constraint registers
27852
27853     `w'
27854           Memory address with only a base register
27855
27856     `Y'
27857           Vector zero
27858
27859
27860 _SPU--`config/spu/spu.h'_
27861
27862     `a'
27863           An immediate which can be loaded with the il/ila/ilh/ilhu
27864           instructions.  const_int is treated as a 64 bit value.
27865
27866     `c'
27867           An immediate for and/xor/or instructions.  const_int is
27868           treated as a 64 bit value.
27869
27870     `d'
27871           An immediate for the `iohl' instruction.  const_int is
27872           treated as a 64 bit value.
27873
27874     `f'
27875           An immediate which can be loaded with `fsmbi'.
27876
27877     `A'
27878           An immediate which can be loaded with the il/ila/ilh/ilhu
27879           instructions.  const_int is treated as a 32 bit value.
27880
27881     `B'
27882           An immediate for most arithmetic instructions.  const_int is
27883           treated as a 32 bit value.
27884
27885     `C'
27886           An immediate for and/xor/or instructions.  const_int is
27887           treated as a 32 bit value.
27888
27889     `D'
27890           An immediate for the `iohl' instruction.  const_int is
27891           treated as a 32 bit value.
27892
27893     `I'
27894           A constant in the range [-64, 63] for shift/rotate
27895           instructions.
27896
27897     `J'
27898           An unsigned 7-bit constant for conversion/nop/channel
27899           instructions.
27900
27901     `K'
27902           A signed 10-bit constant for most arithmetic instructions.
27903
27904     `M'
27905           A signed 16 bit immediate for `stop'.
27906
27907     `N'
27908           An unsigned 16-bit constant for `iohl' and `fsmbi'.
27909
27910     `O'
27911           An unsigned 7-bit constant whose 3 least significant bits are
27912           0.
27913
27914     `P'
27915           An unsigned 3-bit constant for 16-byte rotates and shifts
27916
27917     `R'
27918           Call operand, reg, for indirect calls
27919
27920     `S'
27921           Call operand, symbol, for relative calls.
27922
27923     `T'
27924           Call operand, const_int, for absolute calls.
27925
27926     `U'
27927           An immediate which can be loaded with the il/ila/ilh/ilhu
27928           instructions.  const_int is sign extended to 128 bit.
27929
27930     `W'
27931           An immediate for shift and rotate instructions.  const_int is
27932           treated as a 32 bit value.
27933
27934     `Y'
27935           An immediate for and/xor/or instructions.  const_int is sign
27936           extended as a 128 bit.
27937
27938     `Z'
27939           An immediate for the `iohl' instruction.  const_int is sign
27940           extended to 128 bit.
27941
27942
27943 _S/390 and zSeries--`config/s390/s390.h'_
27944
27945     `a'
27946           Address register (general purpose register except r0)
27947
27948     `c'
27949           Condition code register
27950
27951     `d'
27952           Data register (arbitrary general purpose register)
27953
27954     `f'
27955           Floating-point register
27956
27957     `I'
27958           Unsigned 8-bit constant (0-255)
27959
27960     `J'
27961           Unsigned 12-bit constant (0-4095)
27962
27963     `K'
27964           Signed 16-bit constant (-32768-32767)
27965
27966     `L'
27967           Value appropriate as displacement.
27968          `(0..4095)'
27969                for short displacement
27970
27971          `(-524288..524287)'
27972                for long displacement
27973
27974     `M'
27975           Constant integer with a value of 0x7fffffff.
27976
27977     `N'
27978           Multiple letter constraint followed by 4 parameter letters.
27979          `0..9:'
27980                number of the part counting from most to least
27981                significant
27982
27983          `H,Q:'
27984                mode of the part
27985
27986          `D,S,H:'
27987                mode of the containing operand
27988
27989          `0,F:'
27990                value of the other parts (F--all bits set)
27991           The constraint matches if the specified part of a constant
27992           has a value different from its other parts.
27993
27994     `Q'
27995           Memory reference without index register and with short
27996           displacement.
27997
27998     `R'
27999           Memory reference with index register and short displacement.
28000
28001     `S'
28002           Memory reference without index register but with long
28003           displacement.
28004
28005     `T'
28006           Memory reference with index register and long displacement.
28007
28008     `U'
28009           Pointer with short displacement.
28010
28011     `W'
28012           Pointer with long displacement.
28013
28014     `Y'
28015           Shift count operand.
28016
28017
28018 _Score family--`config/score/score.h'_
28019
28020     `d'
28021           Registers from r0 to r32.
28022
28023     `e'
28024           Registers from r0 to r16.
28025
28026     `t'
28027           r8--r11 or r22--r27 registers.
28028
28029     `h'
28030           hi register.
28031
28032     `l'
28033           lo register.
28034
28035     `x'
28036           hi + lo register.
28037
28038     `q'
28039           cnt register.
28040
28041     `y'
28042           lcb register.
28043
28044     `z'
28045           scb register.
28046
28047     `a'
28048           cnt + lcb + scb register.
28049
28050     `c'
28051           cr0--cr15 register.
28052
28053     `b'
28054           cp1 registers.
28055
28056     `f'
28057           cp2 registers.
28058
28059     `i'
28060           cp3 registers.
28061
28062     `j'
28063           cp1 + cp2 + cp3 registers.
28064
28065     `I'
28066           High 16-bit constant (32-bit constant with 16 LSBs zero).
28067
28068     `J'
28069           Unsigned 5 bit integer (in the range 0 to 31).
28070
28071     `K'
28072           Unsigned 16 bit integer (in the range 0 to 65535).
28073
28074     `L'
28075           Signed 16 bit integer (in the range -32768 to 32767).
28076
28077     `M'
28078           Unsigned 14 bit integer (in the range 0 to 16383).
28079
28080     `N'
28081           Signed 14 bit integer (in the range -8192 to 8191).
28082
28083     `Z'
28084           Any SYMBOL_REF.
28085
28086 _Xstormy16--`config/stormy16/stormy16.h'_
28087
28088     `a'
28089           Register r0.
28090
28091     `b'
28092           Register r1.
28093
28094     `c'
28095           Register r2.
28096
28097     `d'
28098           Register r8.
28099
28100     `e'
28101           Registers r0 through r7.
28102
28103     `t'
28104           Registers r0 and r1.
28105
28106     `y'
28107           The carry register.
28108
28109     `z'
28110           Registers r8 and r9.
28111
28112     `I'
28113           A constant between 0 and 3 inclusive.
28114
28115     `J'
28116           A constant that has exactly one bit set.
28117
28118     `K'
28119           A constant that has exactly one bit clear.
28120
28121     `L'
28122           A constant between 0 and 255 inclusive.
28123
28124     `M'
28125           A constant between -255 and 0 inclusive.
28126
28127     `N'
28128           A constant between -3 and 0 inclusive.
28129
28130     `O'
28131           A constant between 1 and 4 inclusive.
28132
28133     `P'
28134           A constant between -4 and -1 inclusive.
28135
28136     `Q'
28137           A memory reference that is a stack push.
28138
28139     `R'
28140           A memory reference that is a stack pop.
28141
28142     `S'
28143           A memory reference that refers to a constant address of known
28144           value.
28145
28146     `T'
28147           The register indicated by Rx (not implemented yet).
28148
28149     `U'
28150           A constant that is not between 2 and 15 inclusive.
28151
28152     `Z'
28153           The constant 0.
28154
28155
28156 _TI C6X family--`config/c6x/constraints.md'_
28157
28158     `a'
28159           Register file A (A0-A31).
28160
28161     `b'
28162           Register file B (B0-B31).
28163
28164     `A'
28165           Predicate registers in register file A (A0-A2 on C64X and
28166           higher, A1 and A2 otherwise).
28167
28168     `B'
28169           Predicate registers in register file B (B0-B2).
28170
28171     `C'
28172           A call-used register in register file B (B0-B9, B16-B31).
28173
28174     `Da'
28175           Register file A, excluding predicate registers (A3-A31, plus
28176           A0 if not C64X or higher).
28177
28178     `Db'
28179           Register file B, excluding predicate registers (B3-B31).
28180
28181     `Iu4'
28182           Integer constant in the range 0 ... 15.
28183
28184     `Iu5'
28185           Integer constant in the range 0 ... 31.
28186
28187     `In5'
28188           Integer constant in the range -31 ... 0.
28189
28190     `Is5'
28191           Integer constant in the range -16 ... 15.
28192
28193     `I5x'
28194           Integer constant that can be the operand of an ADDA or a SUBA
28195           insn.
28196
28197     `IuB'
28198           Integer constant in the range 0 ... 65535.
28199
28200     `IsB'
28201           Integer constant in the range -32768 ... 32767.
28202
28203     `IsC'
28204           Integer constant in the range -2^20 ... 2^20 - 1.
28205
28206     `Jc'
28207           Integer constant that is a valid mask for the clr instruction.
28208
28209     `Js'
28210           Integer constant that is a valid mask for the set instruction.
28211
28212     `Q'
28213           Memory location with A base register.
28214
28215     `R'
28216           Memory location with B base register.
28217
28218     `Z'
28219           Register B14 (aka DP).
28220
28221
28222 _TILE-Gx--`config/tilegx/constraints.md'_
28223
28224     `R00'
28225     `R01'
28226     `R02'
28227     `R03'
28228     `R04'
28229     `R05'
28230     `R06'
28231     `R07'
28232     `R08'
28233     `R09'
28234     `R10'
28235           Each of these represents a register constraint for an
28236           individual register, from r0 to r10.
28237
28238     `I'
28239           Signed 8-bit integer constant.
28240
28241     `J'
28242           Signed 16-bit integer constant.
28243
28244     `K'
28245           Unsigned 16-bit integer constant.
28246
28247     `L'
28248           Integer constant that fits in one signed byte when
28249           incremented by one (-129 ... 126).
28250
28251     `m'
28252           Memory operand.  If used together with `<' or `>', the
28253           operand can have postincrement which requires printing with
28254           `%In' and `%in' on TILE-Gx.  For example:
28255
28256                asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));
28257
28258     `M'
28259           A bit mask suitable for the BFINS instruction.
28260
28261     `N'
28262           Integer constant that is a byte tiled out eight times.
28263
28264     `O'
28265           The integer zero constant.
28266
28267     `P'
28268           Integer constant that is a sign-extended byte tiled out as
28269           four shorts.
28270
28271     `Q'
28272           Integer constant that fits in one signed byte when incremented
28273           (-129 ... 126), but excluding -1.
28274
28275     `S'
28276           Integer constant that has all 1 bits consecutive and starting
28277           at bit 0.
28278
28279     `T'
28280           A 16-bit fragment of a got, tls, or pc-relative reference.
28281
28282     `U'
28283           Memory operand except postincrement.  This is roughly the
28284           same as `m' when not used together with `<' or `>'.
28285
28286     `W'
28287           An 8-element vector constant with identical elements.
28288
28289     `Y'
28290           A 4-element vector constant with identical elements.
28291
28292     `Z0'
28293           The integer constant 0xffffffff.
28294
28295     `Z1'
28296           The integer constant 0xffffffff00000000.
28297
28298
28299 _TILEPro--`config/tilepro/constraints.md'_
28300
28301     `R00'
28302     `R01'
28303     `R02'
28304     `R03'
28305     `R04'
28306     `R05'
28307     `R06'
28308     `R07'
28309     `R08'
28310     `R09'
28311     `R10'
28312           Each of these represents a register constraint for an
28313           individual register, from r0 to r10.
28314
28315     `I'
28316           Signed 8-bit integer constant.
28317
28318     `J'
28319           Signed 16-bit integer constant.
28320
28321     `K'
28322           Nonzero integer constant with low 16 bits zero.
28323
28324     `L'
28325           Integer constant that fits in one signed byte when
28326           incremented by one (-129 ... 126).
28327
28328     `m'
28329           Memory operand.  If used together with `<' or `>', the
28330           operand can have postincrement which requires printing with
28331           `%In' and `%in' on TILEPro.  For example:
28332
28333                asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));
28334
28335     `M'
28336           A bit mask suitable for the MM instruction.
28337
28338     `N'
28339           Integer constant that is a byte tiled out four times.
28340
28341     `O'
28342           The integer zero constant.
28343
28344     `P'
28345           Integer constant that is a sign-extended byte tiled out as
28346           two shorts.
28347
28348     `Q'
28349           Integer constant that fits in one signed byte when incremented
28350           (-129 ... 126), but excluding -1.
28351
28352     `T'
28353           A symbolic operand, or a 16-bit fragment of a got, tls, or
28354           pc-relative reference.
28355
28356     `U'
28357           Memory operand except postincrement.  This is roughly the
28358           same as `m' when not used together with `<' or `>'.
28359
28360     `W'
28361           A 4-element vector constant with identical elements.
28362
28363     `Y'
28364           A 2-element vector constant with identical elements.
28365
28366
28367 _Xtensa--`config/xtensa/constraints.md'_
28368
28369     `a'
28370           General-purpose 32-bit register
28371
28372     `b'
28373           One-bit boolean register
28374
28375     `A'
28376           MAC16 40-bit accumulator register
28377
28378     `I'
28379           Signed 12-bit integer constant, for use in MOVI instructions
28380
28381     `J'
28382           Signed 8-bit integer constant, for use in ADDI instructions
28383
28384     `K'
28385           Integer constant valid for BccI instructions
28386
28387     `L'
28388           Unsigned constant valid for BccUI instructions
28389
28390
28391
28392 \1f
28393 File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Constraints,  Up: C Extensions
28394
28395 6.43 Controlling Names Used in Assembler Code
28396 =============================================
28397
28398 You can specify the name to be used in the assembler code for a C
28399 function or variable by writing the `asm' (or `__asm__') keyword after
28400 the declarator as follows:
28401
28402      int foo asm ("myfoo") = 2;
28403
28404 This specifies that the name to be used for the variable `foo' in the
28405 assembler code should be `myfoo' rather than the usual `_foo'.
28406
28407  On systems where an underscore is normally prepended to the name of a C
28408 function or variable, this feature allows you to define names for the
28409 linker that do not start with an underscore.
28410
28411  It does not make sense to use this feature with a non-static local
28412 variable since such variables do not have assembler names.  If you are
28413 trying to put the variable in a particular register, see *note Explicit
28414 Reg Vars::.  GCC presently accepts such code with a warning, but will
28415 probably be changed to issue an error, rather than a warning, in the
28416 future.
28417
28418  You cannot use `asm' in this way in a function _definition_; but you
28419 can get the same effect by writing a declaration for the function
28420 before its definition and putting `asm' there, like this:
28421
28422      extern func () asm ("FUNC");
28423
28424      func (x, y)
28425           int x, y;
28426      /* ... */
28427
28428  It is up to you to make sure that the assembler names you choose do not
28429 conflict with any other assembler symbols.  Also, you must not use a
28430 register name; that would produce completely invalid assembler code.
28431 GCC does not as yet have the ability to store static variables in
28432 registers.  Perhaps that will be added.
28433
28434 \1f
28435 File: gcc.info,  Node: Explicit Reg Vars,  Next: Alternate Keywords,  Prev: Asm Labels,  Up: C Extensions
28436
28437 6.44 Variables in Specified Registers
28438 =====================================
28439
28440 GNU C allows you to put a few global variables into specified hardware
28441 registers.  You can also specify the register in which an ordinary
28442 register variable should be allocated.
28443
28444    * Global register variables reserve registers throughout the program.
28445      This may be useful in programs such as programming language
28446      interpreters that have a couple of global variables that are
28447      accessed very often.
28448
28449    * Local register variables in specific registers do not reserve the
28450      registers, except at the point where they are used as input or
28451      output operands in an `asm' statement and the `asm' statement
28452      itself is not deleted.  The compiler's data flow analysis is
28453      capable of determining where the specified registers contain live
28454      values, and where they are available for other uses.  Stores into
28455      local register variables may be deleted when they appear to be
28456      dead according to dataflow analysis.  References to local register
28457      variables may be deleted or moved or simplified.
28458
28459      These local variables are sometimes convenient for use with the
28460      extended `asm' feature (*note Extended Asm::), if you want to
28461      write one output of the assembler instruction directly into a
28462      particular register.  (This works provided the register you
28463      specify fits the constraints specified for that operand in the
28464      `asm'.)
28465
28466 * Menu:
28467
28468 * Global Reg Vars::
28469 * Local Reg Vars::
28470
28471 \1f
28472 File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars
28473
28474 6.44.1 Defining Global Register Variables
28475 -----------------------------------------
28476
28477 You can define a global register variable in GNU C like this:
28478
28479      register int *foo asm ("a5");
28480
28481 Here `a5' is the name of the register that should be used.  Choose a
28482 register that is normally saved and restored by function calls on your
28483 machine, so that library routines will not clobber it.
28484
28485  Naturally the register name is cpu-dependent, so you need to
28486 conditionalize your program according to cpu type.  The register `a5'
28487 is a good choice on a 68000 for a variable of pointer type.  On
28488 machines with register windows, be sure to choose a "global" register
28489 that is not affected magically by the function call mechanism.
28490
28491  In addition, different operating systems on the same CPU may differ in
28492 how they name the registers; then you need additional conditionals.  For
28493 example, some 68000 operating systems call this register `%a5'.
28494
28495  Eventually there may be a way of asking the compiler to choose a
28496 register automatically, but first we need to figure out how it should
28497 choose and how to enable you to guide the choice.  No solution is
28498 evident.
28499
28500  Defining a global register variable in a certain register reserves that
28501 register entirely for this use, at least within the current compilation.
28502 The register is not allocated for any other purpose in the functions in
28503 the current compilation, and is not saved and restored by these
28504 functions.  Stores into this register are never deleted even if they
28505 appear to be dead, but references may be deleted or moved or simplified.
28506
28507  It is not safe to access the global register variables from signal
28508 handlers, or from more than one thread of control, because the system
28509 library routines may temporarily use the register for other things
28510 (unless you recompile them specially for the task at hand).
28511
28512  It is not safe for one function that uses a global register variable to
28513 call another such function `foo' by way of a third function `lose' that
28514 is compiled without knowledge of this variable (i.e. in a different
28515 source file in which the variable isn't declared).  This is because
28516 `lose' might save the register and put some other value there.  For
28517 example, you can't expect a global register variable to be available in
28518 the comparison-function that you pass to `qsort', since `qsort' might
28519 have put something else in that register.  (If you are prepared to
28520 recompile `qsort' with the same global register variable, you can solve
28521 this problem.)
28522
28523  If you want to recompile `qsort' or other source files that do not
28524 actually use your global register variable, so that they do not use that
28525 register for any other purpose, then it suffices to specify the compiler
28526 option `-ffixed-REG'.  You need not actually add a global register
28527 declaration to their source code.
28528
28529  A function that can alter the value of a global register variable
28530 cannot safely be called from a function compiled without this variable,
28531 because it could clobber the value the caller expects to find there on
28532 return.  Therefore, the function that is the entry point into the part
28533 of the program that uses the global register variable must explicitly
28534 save and restore the value that belongs to its caller.
28535
28536  On most machines, `longjmp' restores to each global register variable
28537 the value it had at the time of the `setjmp'.  On some machines,
28538 however, `longjmp' does not change the value of global register
28539 variables.  To be portable, the function that called `setjmp' should
28540 make other arrangements to save the values of the global register
28541 variables, and to restore them in a `longjmp'.  This way, the same
28542 thing happens regardless of what `longjmp' does.
28543
28544  All global register variable declarations must precede all function
28545 definitions.  If such a declaration could appear after function
28546 definitions, the declaration would be too late to prevent the register
28547 from being used for other purposes in the preceding functions.
28548
28549  Global register variables may not have initial values, because an
28550 executable file has no means to supply initial contents for a register.
28551
28552  On the SPARC, there are reports that g3 ... g7 are suitable registers,
28553 but certain library functions, such as `getwd', as well as the
28554 subroutines for division and remainder, modify g3 and g4.  g1 and g2
28555 are local temporaries.
28556
28557  On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.  Of
28558 course, it does not do to use more than a few of those.
28559
28560 \1f
28561 File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars
28562
28563 6.44.2 Specifying Registers for Local Variables
28564 -----------------------------------------------
28565
28566 You can define a local register variable with a specified register like
28567 this:
28568
28569      register int *foo asm ("a5");
28570
28571 Here `a5' is the name of the register that should be used.  Note that
28572 this is the same syntax used for defining global register variables,
28573 but for a local variable it appears within a function.
28574
28575  Naturally the register name is cpu-dependent, but this is not a
28576 problem, since specific registers are most often useful with explicit
28577 assembler instructions (*note Extended Asm::).  Both of these things
28578 generally require that you conditionalize your program according to cpu
28579 type.
28580
28581  In addition, operating systems on one type of cpu may differ in how
28582 they name the registers; then you need additional conditionals.  For
28583 example, some 68000 operating systems call this register `%a5'.
28584
28585  Defining such a register variable does not reserve the register; it
28586 remains available for other uses in places where flow control determines
28587 the variable's value is not live.
28588
28589  This option does not guarantee that GCC generates code that has this
28590 variable in the register you specify at all times.  You may not code an
28591 explicit reference to this register in the _assembler instruction
28592 template_ part of an `asm' statement and assume it always refers to
28593 this variable.  However, using the variable as an `asm' _operand_
28594 guarantees that the specified register is used for the operand.
28595
28596  Stores into local register variables may be deleted when they appear
28597 to be dead according to dataflow analysis.  References to local
28598 register variables may be deleted or moved or simplified.
28599
28600  As for global register variables, it's recommended that you choose a
28601 register that is normally saved and restored by function calls on your
28602 machine, so that library routines will not clobber it.  A common
28603 pitfall is to initialize multiple call-clobbered registers with
28604 arbitrary expressions, where a function call or library call for an
28605 arithmetic operator overwrites a register value from a previous
28606 assignment, for example `r0' below:
28607      register int *p1 asm ("r0") = ...;
28608      register int *p2 asm ("r1") = ...;
28609
28610 In those cases, a solution is to use a temporary variable for each
28611 arbitrary expression.   *Note Example of asm with clobbered asm reg::.
28612
28613 \1f
28614 File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Explicit Reg Vars,  Up: C Extensions
28615
28616 6.45 Alternate Keywords
28617 =======================
28618
28619 `-ansi' and the various `-std' options disable certain keywords.  This
28620 causes trouble when you want to use GNU C extensions, or a
28621 general-purpose header file that should be usable by all programs,
28622 including ISO C programs.  The keywords `asm', `typeof' and `inline'
28623 are not available in programs compiled with `-ansi' or `-std' (although
28624 `inline' can be used in a program compiled with `-std=c99' or
28625 `-std=c11').  The ISO C99 keyword `restrict' is only available when
28626 `-std=gnu99' (which will eventually be the default) or `-std=c99' (or
28627 the equivalent `-std=iso9899:1999'), or an option for a later standard
28628 version, is used.
28629
28630  The way to solve these problems is to put `__' at the beginning and
28631 end of each problematical keyword.  For example, use `__asm__' instead
28632 of `asm', and `__inline__' instead of `inline'.
28633
28634  Other C compilers won't accept these alternative keywords; if you want
28635 to compile with another compiler, you can define the alternate keywords
28636 as macros to replace them with the customary keywords.  It looks like
28637 this:
28638
28639      #ifndef __GNUC__
28640      #define __asm__ asm
28641      #endif
28642
28643  `-pedantic' and other options cause warnings for many GNU C extensions.
28644 You can prevent such warnings within one expression by writing
28645 `__extension__' before the expression.  `__extension__' has no effect
28646 aside from this.
28647
28648 \1f
28649 File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
28650
28651 6.46 Incomplete `enum' Types
28652 ============================
28653
28654 You can define an `enum' tag without specifying its possible values.
28655 This results in an incomplete type, much like what you get if you write
28656 `struct foo' without describing the elements.  A later declaration that
28657 does specify the possible values completes the type.
28658
28659  You can't allocate variables or storage using the type while it is
28660 incomplete.  However, you can work with pointers to that type.
28661
28662  This extension may not be very useful, but it makes the handling of
28663 `enum' more consistent with the way `struct' and `union' are handled.
28664
28665  This extension is not supported by GNU C++.
28666
28667 \1f
28668 File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
28669
28670 6.47 Function Names as Strings
28671 ==============================
28672
28673 GCC provides three magic variables that hold the name of the current
28674 function, as a string.  The first of these is `__func__', which is part
28675 of the C99 standard:
28676
28677  The identifier `__func__' is implicitly declared by the translator as
28678 if, immediately following the opening brace of each function
28679 definition, the declaration
28680
28681      static const char __func__[] = "function-name";
28682
28683 appeared, where function-name is the name of the lexically-enclosing
28684 function.  This name is the unadorned name of the function.
28685
28686  `__FUNCTION__' is another name for `__func__'.  Older versions of GCC
28687 recognize only this name.  However, it is not standardized.  For
28688 maximum portability, we recommend you use `__func__', but provide a
28689 fallback definition with the preprocessor:
28690
28691      #if __STDC_VERSION__ < 199901L
28692      # if __GNUC__ >= 2
28693      #  define __func__ __FUNCTION__
28694      # else
28695      #  define __func__ "<unknown>"
28696      # endif
28697      #endif
28698
28699  In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'.
28700 However, in C++, `__PRETTY_FUNCTION__' contains the type signature of
28701 the function as well as its bare name.  For example, this program:
28702
28703      extern "C" {
28704      extern int printf (char *, ...);
28705      }
28706
28707      class a {
28708       public:
28709        void sub (int i)
28710          {
28711            printf ("__FUNCTION__ = %s\n", __FUNCTION__);
28712            printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
28713          }
28714      };
28715
28716      int
28717      main (void)
28718      {
28719        a ax;
28720        ax.sub (0);
28721        return 0;
28722      }
28723
28724 gives this output:
28725
28726      __FUNCTION__ = sub
28727      __PRETTY_FUNCTION__ = void a::sub(int)
28728
28729  These identifiers are not preprocessor macros.  In GCC 3.3 and
28730 earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were
28731 treated as string literals; they could be used to initialize `char'
28732 arrays, and they could be concatenated with other string literals.  GCC
28733 3.4 and later treat them as variables, like `__func__'.  In C++,
28734 `__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables.
28735
28736 \1f
28737 File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
28738
28739 6.48 Getting the Return or Frame Address of a Function
28740 ======================================================
28741
28742 These functions may be used to get information about the callers of a
28743 function.
28744
28745  -- Built-in Function: void * __builtin_return_address (unsigned int
28746           LEVEL)
28747      This function returns the return address of the current function,
28748      or of one of its callers.  The LEVEL argument is number of frames
28749      to scan up the call stack.  A value of `0' yields the return
28750      address of the current function, a value of `1' yields the return
28751      address of the caller of the current function, and so forth.  When
28752      inlining the expected behavior is that the function returns the
28753      address of the function that is returned to.  To work around this
28754      behavior use the `noinline' function attribute.
28755
28756      The LEVEL argument must be a constant integer.
28757
28758      On some machines it may be impossible to determine the return
28759      address of any function other than the current one; in such cases,
28760      or when the top of the stack has been reached, this function
28761      returns `0' or a random value.  In addition,
28762      `__builtin_frame_address' may be used to determine if the top of
28763      the stack has been reached.
28764
28765      Additional post-processing of the returned value may be needed, see
28766      `__builtin_extract_return_addr'.
28767
28768      This function should only be used with a nonzero argument for
28769      debugging purposes.
28770
28771  -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR)
28772      The address as returned by `__builtin_return_address' may have to
28773      be fed through this function to get the actual encoded address.
28774      For example, on the 31-bit S/390 platform the highest bit has to
28775      be masked out, or on SPARC platforms an offset has to be added for
28776      the true next instruction to be executed.
28777
28778      If no fixup is needed, this function simply passes through ADDR.
28779
28780  -- Built-in Function: void * __builtin_frob_return_address (void *ADDR)
28781      This function does the reverse of `__builtin_extract_return_addr'.
28782
28783  -- Built-in Function: void * __builtin_frame_address (unsigned int
28784           LEVEL)
28785      This function is similar to `__builtin_return_address', but it
28786      returns the address of the function frame rather than the return
28787      address of the function.  Calling `__builtin_frame_address' with a
28788      value of `0' yields the frame address of the current function, a
28789      value of `1' yields the frame address of the caller of the current
28790      function, and so forth.
28791
28792      The frame is the area on the stack that holds local variables and
28793      saved registers.  The frame address is normally the address of the
28794      first word pushed on to the stack by the function.  However, the
28795      exact definition depends upon the processor and the calling
28796      convention.  If the processor has a dedicated frame pointer
28797      register, and the function has a frame, then
28798      `__builtin_frame_address' returns the value of the frame pointer
28799      register.
28800
28801      On some machines it may be impossible to determine the frame
28802      address of any function other than the current one; in such cases,
28803      or when the top of the stack has been reached, this function
28804      returns `0' if the first frame pointer is properly initialized by
28805      the startup code.
28806
28807      This function should only be used with a nonzero argument for
28808      debugging purposes.
28809
28810 \1f
28811 File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions
28812
28813 6.49 Using Vector Instructions through Built-in Functions
28814 =========================================================
28815
28816 On some targets, the instruction set contains SIMD vector instructions
28817 which operate on multiple values contained in one large register at the
28818 same time.  For example, on the i386 the MMX, 3DNow! and SSE extensions
28819 can be used this way.
28820
28821  The first step in using these extensions is to provide the necessary
28822 data types.  This should be done using an appropriate `typedef':
28823
28824      typedef int v4si __attribute__ ((vector_size (16)));
28825
28826 The `int' type specifies the base type, while the attribute specifies
28827 the vector size for the variable, measured in bytes.  For example, the
28828 declaration above causes the compiler to set the mode for the `v4si'
28829 type to be 16 bytes wide and divided into `int' sized units.  For a
28830 32-bit `int' this means a vector of 4 units of 4 bytes, and the
28831 corresponding mode of `foo' is V4SI.
28832
28833  The `vector_size' attribute is only applicable to integral and float
28834 scalars, although arrays, pointers, and function return values are
28835 allowed in conjunction with this construct. Only sizes that are a power
28836 of two are currently allowed.
28837
28838  All the basic integer types can be used as base types, both as signed
28839 and as unsigned: `char', `short', `int', `long', `long long'.  In
28840 addition, `float' and `double' can be used to build floating-point
28841 vector types.
28842
28843  Specifying a combination that is not valid for the current architecture
28844 causes GCC to synthesize the instructions using a narrower mode.  For
28845 example, if you specify a variable of type `V4SI' and your architecture
28846 does not allow for this specific SIMD type, GCC produces code that uses
28847 4 `SIs'.
28848
28849  The types defined in this manner can be used with a subset of normal C
28850 operations.  Currently, GCC allows using the following operators on
28851 these types: `+, -, *, /, unary minus, ^, |, &, ~, %'.
28852
28853  The operations behave like C++ `valarrays'.  Addition is defined as
28854 the addition of the corresponding elements of the operands.  For
28855 example, in the code below, each of the 4 elements in A is added to the
28856 corresponding 4 elements in B and the resulting vector is stored in C.
28857
28858      typedef int v4si __attribute__ ((vector_size (16)));
28859
28860      v4si a, b, c;
28861
28862      c = a + b;
28863
28864  Subtraction, multiplication, division, and the logical operations
28865 operate in a similar manner.  Likewise, the result of using the unary
28866 minus or complement operators on a vector type is a vector whose
28867 elements are the negative or complemented values of the corresponding
28868 elements in the operand.
28869
28870  It is possible to use shifting operators `<<', `>>' on integer-type
28871 vectors. The operation is defined as following: `{a0, a1, ..., an} >>
28872 {b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'. Vector
28873 operands must have the same number of elements.
28874
28875  For convenience, it is allowed to use a binary vector operation where
28876 one operand is a scalar. In that case the compiler transforms the
28877 scalar operand into a vector where each element is the scalar from the
28878 operation. The transformation happens only if the scalar could be
28879 safely converted to the vector-element type.  Consider the following
28880 code.
28881
28882      typedef int v4si __attribute__ ((vector_size (16)));
28883
28884      v4si a, b, c;
28885      long l;
28886
28887      a = b + 1;    /* a = b + {1,1,1,1}; */
28888      a = 2 * b;    /* a = {2,2,2,2} * b; */
28889
28890      a = l + a;    /* Error, cannot convert long to int. */
28891
28892  Vectors can be subscripted as if the vector were an array with the
28893 same number of elements and base type.  Out of bound accesses invoke
28894 undefined behavior at run time.  Warnings for out of bound accesses for
28895 vector subscription can be enabled with `-Warray-bounds'.
28896
28897  Vector comparison is supported with standard comparison operators:
28898 `==, !=, <, <=, >, >='. Comparison operands can be vector expressions
28899 of integer-type or real-type. Comparison between integer-type vectors
28900 and real-type vectors are not supported.  The result of the comparison
28901 is a vector of the same width and number of elements as the comparison
28902 operands with a signed integral element type.
28903
28904  Vectors are compared element-wise producing 0 when comparison is false
28905 and -1 (constant of the appropriate type where all bits are set)
28906 otherwise. Consider the following example.
28907
28908      typedef int v4si __attribute__ ((vector_size (16)));
28909
28910      v4si a = {1,2,3,4};
28911      v4si b = {3,2,1,4};
28912      v4si c;
28913
28914      c = a >  b;     /* The result would be {0, 0,-1, 0}  */
28915      c = a == b;     /* The result would be {0,-1, 0,-1}  */
28916
28917  Vector shuffling is available using functions `__builtin_shuffle (vec,
28918 mask)' and `__builtin_shuffle (vec0, vec1, mask)'.  Both functions
28919 construct a permutation of elements from one or two vectors and return
28920 a vector of the same type as the input vector(s).  The MASK is an
28921 integral vector with the same width (W) and element count (N) as the
28922 output vector.
28923
28924  The elements of the input vectors are numbered in memory ordering of
28925 VEC0 beginning at 0 and VEC1 beginning at N.  The elements of MASK are
28926 considered modulo N in the single-operand case and modulo 2*N in the
28927 two-operand case.
28928
28929  Consider the following example,
28930
28931      typedef int v4si __attribute__ ((vector_size (16)));
28932
28933      v4si a = {1,2,3,4};
28934      v4si b = {5,6,7,8};
28935      v4si mask1 = {0,1,1,3};
28936      v4si mask2 = {0,4,2,5};
28937      v4si res;
28938
28939      res = __builtin_shuffle (a, mask1);       /* res is {1,2,2,4}  */
28940      res = __builtin_shuffle (a, b, mask2);    /* res is {1,5,3,6}  */
28941
28942  Note that `__builtin_shuffle' is intentionally semantically compatible
28943 with the OpenCL `shuffle' and `shuffle2' functions.
28944
28945  You can declare variables and use them in function calls and returns,
28946 as well as in assignments and some casts.  You can specify a vector
28947 type as a return type for a function.  Vector types can also be used as
28948 function arguments.  It is possible to cast from one vector type to
28949 another, provided they are of the same size (in fact, you can also cast
28950 vectors to and from other datatypes of the same size).
28951
28952  You cannot operate between vectors of different lengths or different
28953 signedness without a cast.
28954
28955 \1f
28956 File: gcc.info,  Node: Offsetof,  Next: __sync Builtins,  Prev: Vector Extensions,  Up: C Extensions
28957
28958 6.50 Offsetof
28959 =============
28960
28961 GCC implements for both C and C++ a syntactic extension to implement
28962 the `offsetof' macro.
28963
28964      primary:
28965              "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")"
28966
28967      offsetof_member_designator:
28968                `identifier'
28969              | offsetof_member_designator "." `identifier'
28970              | offsetof_member_designator "[" `expr' "]"
28971
28972  This extension is sufficient such that
28973
28974      #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
28975
28976 is a suitable definition of the `offsetof' macro.  In C++, TYPE may be
28977 dependent.  In either case, MEMBER may consist of a single identifier,
28978 or a sequence of member accesses and array references.
28979
28980 \1f
28981 File: gcc.info,  Node: __sync Builtins,  Next: __atomic Builtins,  Prev: Offsetof,  Up: C Extensions
28982
28983 6.51 Legacy __sync Built-in Functions for Atomic Memory Access
28984 ==============================================================
28985
28986 The following built-in functions are intended to be compatible with
28987 those described in the `Intel Itanium Processor-specific Application
28988 Binary Interface', section 7.4.  As such, they depart from the normal
28989 GCC practice of using the `__builtin_' prefix, and further that they
28990 are overloaded such that they work on multiple types.
28991
28992  The definition given in the Intel documentation allows only for the
28993 use of the types `int', `long', `long long' as well as their unsigned
28994 counterparts.  GCC allows any integral scalar or pointer type that is
28995 1, 2, 4 or 8 bytes in length.
28996
28997  Not all operations are supported by all target processors.  If a
28998 particular operation cannot be implemented on the target processor, a
28999 warning is generated and a call an external function is generated.  The
29000 external function carries the same name as the built-in version, with
29001 an additional suffix `_N' where N is the size of the data type.
29002
29003  In most cases, these built-in functions are considered a "full
29004 barrier".  That is, no memory operand is moved across the operation,
29005 either forward or backward.  Further, instructions are issued as
29006 necessary to prevent the processor from speculating loads across the
29007 operation and from queuing stores after the operation.
29008
29009  All of the routines are described in the Intel documentation to take
29010 "an optional list of variables protected by the memory barrier".  It's
29011 not clear what is meant by that; it could mean that _only_ the
29012 following variables are protected, or it could mean that these variables
29013 should in addition be protected.  At present GCC ignores this list and
29014 protects all variables that are globally accessible.  If in the future
29015 we make some use of this list, an empty list will continue to mean all
29016 globally accessible variables.
29017
29018 `TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
29019 `TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
29020 `TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
29021 `TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
29022 `TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
29023 `TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
29024      These built-in functions perform the operation suggested by the
29025      name, and returns the value that had previously been in memory.
29026      That is,
29027
29028           { tmp = *ptr; *ptr OP= value; return tmp; }
29029           { tmp = *ptr; *ptr = ~(tmp & value); return tmp; }   // nand
29030
29031      _Note:_ GCC 4.4 and later implement `__sync_fetch_and_nand' as
29032      `*ptr = ~(tmp & value)' instead of `*ptr = ~tmp & value'.
29033
29034 `TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
29035 `TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
29036 `TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
29037 `TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
29038 `TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
29039 `TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
29040      These built-in functions perform the operation suggested by the
29041      name, and return the new value.  That is,
29042
29043           { *ptr OP= value; return *ptr; }
29044           { *ptr = ~(*ptr & value); return *ptr; }   // nand
29045
29046      _Note:_ GCC 4.4 and later implement `__sync_nand_and_fetch' as
29047      `*ptr = ~(*ptr & value)' instead of `*ptr = ~*ptr & value'.
29048
29049 `bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
29050 `TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
29051      These built-in functions perform an atomic compare and swap.  That
29052      is, if the current value of `*PTR' is OLDVAL, then write NEWVAL
29053      into `*PTR'.
29054
29055      The "bool" version returns true if the comparison is successful and
29056      NEWVAL is written.  The "val" version returns the contents of
29057      `*PTR' before the operation.
29058
29059 `__sync_synchronize (...)'
29060      This built-in function issues a full memory barrier.
29061
29062 `TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
29063      This built-in function, as described by Intel, is not a
29064      traditional test-and-set operation, but rather an atomic exchange
29065      operation.  It writes VALUE into `*PTR', and returns the previous
29066      contents of `*PTR'.
29067
29068      Many targets have only minimal support for such locks, and do not
29069      support a full exchange operation.  In this case, a target may
29070      support reduced functionality here by which the _only_ valid value
29071      to store is the immediate constant 1.  The exact value actually
29072      stored in `*PTR' is implementation defined.
29073
29074      This built-in function is not a full barrier, but rather an
29075      "acquire barrier".  This means that references after the operation
29076      cannot move to (or be speculated to) before the operation, but
29077      previous memory stores may not be globally visible yet, and
29078      previous memory loads may not yet be satisfied.
29079
29080 `void __sync_lock_release (TYPE *ptr, ...)'
29081      This built-in function releases the lock acquired by
29082      `__sync_lock_test_and_set'.  Normally this means writing the
29083      constant 0 to `*PTR'.
29084
29085      This built-in function is not a full barrier, but rather a
29086      "release barrier".  This means that all previous memory stores are
29087      globally visible, and all previous memory loads have been
29088      satisfied, but following memory reads are not prevented from being
29089      speculated to before the barrier.
29090
29091 \1f
29092 File: gcc.info,  Node: __atomic Builtins,  Next: x86 specific memory model extensions for transactional memory,  Prev: __sync Builtins,  Up: C Extensions
29093
29094 6.52 Built-in functions for memory model aware atomic operations
29095 ================================================================
29096
29097 The following built-in functions approximately match the requirements
29098 for C++11 memory model. Many are similar to the `__sync' prefixed
29099 built-in functions, but all also have a memory model parameter.  These
29100 are all identified by being prefixed with `__atomic', and most are
29101 overloaded such that they work with multiple types.
29102
29103  GCC allows any integral scalar or pointer type that is 1, 2, 4, or 8
29104 bytes in length. 16-byte integral types are also allowed if `__int128'
29105 (*note __int128::) is supported by the architecture.
29106
29107  Target architectures are encouraged to provide their own patterns for
29108 each of these built-in functions.  If no target is provided, the
29109 original non-memory model set of `__sync' atomic built-in functions are
29110 utilized, along with any required synchronization fences surrounding it
29111 in order to achieve the proper behavior.  Execution in this case is
29112 subject to the same restrictions as those built-in functions.
29113
29114  If there is no pattern or mechanism to provide a lock free instruction
29115 sequence, a call is made to an external routine with the same parameters
29116 to be resolved at run time.
29117
29118  The four non-arithmetic functions (load, store, exchange, and
29119 compare_exchange) all have a generic version as well.  This generic
29120 version works on any data type.  If the data type size maps to one of
29121 the integral sizes that may have lock free support, the generic version
29122 utilizes the lock free built-in function.  Otherwise an external call
29123 is left to be resolved at run time.  This external call is the same
29124 format with the addition of a `size_t' parameter inserted as the first
29125 parameter indicating the size of the object being pointed to.  All
29126 objects must be the same size.
29127
29128  There are 6 different memory models that can be specified.  These map
29129 to the same names in the C++11 standard.  Refer there or to the GCC
29130 wiki on atomic synchronization
29131 (http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for more detailed
29132 definitions.  These memory models integrate both barriers to code
29133 motion as well as synchronization requirements with other threads.
29134 These are listed in approximately ascending order of strength. It is
29135 also possible to use target specific flags for memory model flags, like
29136 Hardware Lock Elision.
29137
29138 `__ATOMIC_RELAXED'
29139      No barriers or synchronization.
29140
29141 `__ATOMIC_CONSUME'
29142      Data dependency only for both barrier and synchronization with
29143      another thread.
29144
29145 `__ATOMIC_ACQUIRE'
29146      Barrier to hoisting of code and synchronizes with release (or
29147      stronger) semantic stores from another thread.
29148
29149 `__ATOMIC_RELEASE'
29150      Barrier to sinking of code and synchronizes with acquire (or
29151      stronger) semantic loads from another thread.
29152
29153 `__ATOMIC_ACQ_REL'
29154      Full barrier in both directions and synchronizes with acquire
29155      loads and release stores in another thread.
29156
29157 `__ATOMIC_SEQ_CST'
29158      Full barrier in both directions and synchronizes with acquire
29159      loads and release stores in all threads.
29160
29161  When implementing patterns for these built-in functions, the memory
29162 model parameter can be ignored as long as the pattern implements the
29163 most restrictive `__ATOMIC_SEQ_CST' model.  Any of the other memory
29164 models execute correctly with this memory model but they may not
29165 execute as efficiently as they could with a more appropriate
29166 implementation of the relaxed requirements.
29167
29168  Note that the C++11 standard allows for the memory model parameter to
29169 be determined at run time rather than at compile time.  These built-in
29170 functions map any run-time value to `__ATOMIC_SEQ_CST' rather than
29171 invoke a runtime library call or inline a switch statement.  This is
29172 standard compliant, safe, and the simplest approach for now.
29173
29174  The memory model parameter is a signed int, but only the lower 8 bits
29175 are reserved for the memory model.  The remainder of the signed int is
29176 reserved for future use and should be 0.  Use of the predefined atomic
29177 values ensures proper usage.
29178
29179  -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memmodel)
29180      This built-in function implements an atomic load operation.  It
29181      returns the contents of `*PTR'.
29182
29183      The valid memory model variants are `__ATOMIC_RELAXED',
29184      `__ATOMIC_SEQ_CST', `__ATOMIC_ACQUIRE', and `__ATOMIC_CONSUME'.
29185
29186
29187  -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int
29188           memmodel)
29189      This is the generic version of an atomic load.  It returns the
29190      contents of `*PTR' in `*RET'.
29191
29192
29193  -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int
29194           memmodel)
29195      This built-in function implements an atomic store operation.  It
29196      writes `VAL' into `*PTR'.
29197
29198      The valid memory model variants are `__ATOMIC_RELAXED',
29199      `__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'.
29200
29201
29202  -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int
29203           memmodel)
29204      This is the generic version of an atomic store.  It stores the
29205      value of `*VAL' into `*PTR'.
29206
29207
29208  -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val,
29209           int memmodel)
29210      This built-in function implements an atomic exchange operation.
29211      It writes VAL into `*PTR', and returns the previous contents of
29212      `*PTR'.
29213
29214      The valid memory model variants are `__ATOMIC_RELAXED',
29215      `__ATOMIC_SEQ_CST', `__ATOMIC_ACQUIRE', `__ATOMIC_RELEASE', and
29216      `__ATOMIC_ACQ_REL'.
29217
29218
29219  -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val,
29220           TYPE *ret, int memmodel)
29221      This is the generic version of an atomic exchange.  It stores the
29222      contents of `*VAL' into `*PTR'. The original value of `*PTR' is
29223      copied into `*RET'.
29224
29225
29226  -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr,
29227           TYPE *expected, TYPE desired, bool weak, int
29228           success_memmodel, int failure_memmodel)
29229      This built-in function implements an atomic compare and exchange
29230      operation.  This compares the contents of `*PTR' with the contents
29231      of `*EXPECTED' and if equal, writes DESIRED into `*PTR'.  If they
29232      are not equal, the current contents of `*PTR' is written into
29233      `*EXPECTED'.  WEAK is true for weak compare_exchange, and false
29234      for the strong variation.  Many targets only offer the strong
29235      variation and ignore the parameter.  When in doubt, use the strong
29236      variation.
29237
29238      True is returned if DESIRED is written into `*PTR' and the
29239      execution is considered to conform to the memory model specified
29240      by SUCCESS_MEMMODEL.  There are no restrictions on what memory
29241      model can be used here.
29242
29243      False is returned otherwise, and the execution is considered to
29244      conform to FAILURE_MEMMODEL. This memory model cannot be
29245      `__ATOMIC_RELEASE' nor `__ATOMIC_ACQ_REL'.  It also cannot be a
29246      stronger model than that specified by SUCCESS_MEMMODEL.
29247
29248
29249  -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE
29250           *expected, TYPE *desired, bool weak, int success_memmodel,
29251           int failure_memmodel)
29252      This built-in function implements the generic version of
29253      `__atomic_compare_exchange'.  The function is virtually identical
29254      to `__atomic_compare_exchange_n', except the desired value is also
29255      a pointer.
29256
29257
29258  -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val,
29259           int memmodel)
29260  -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val,
29261           int memmodel)
29262  -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val,
29263           int memmodel)
29264  -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val,
29265           int memmodel)
29266  -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int
29267           memmodel)
29268  -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val,
29269           int memmodel)
29270      These built-in functions perform the operation suggested by the
29271      name, and return the result of the operation. That is,
29272
29273           { *ptr OP= val; return *ptr; }
29274
29275      All memory models are valid.
29276
29277
29278  -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val,
29279           int memmodel)
29280  -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val,
29281           int memmodel)
29282  -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val,
29283           int memmodel)
29284  -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val,
29285           int memmodel)
29286  -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int
29287           memmodel)
29288  -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val,
29289           int memmodel)
29290      These built-in functions perform the operation suggested by the
29291      name, and return the value that had previously been in `*PTR'.
29292      That is,
29293
29294           { tmp = *ptr; *ptr OP= val; return tmp; }
29295
29296      All memory models are valid.
29297
29298
29299  -- Built-in Function: bool __atomic_test_and_set (void *ptr, int
29300           memmodel)
29301      This built-in function performs an atomic test-and-set operation on
29302      the byte at `*PTR'.  The byte is set to some implementation
29303      defined nonzero "set" value and the return value is `true' if and
29304      only if the previous contents were "set".
29305
29306      All memory models are valid.
29307
29308
29309  -- Built-in Function: void __atomic_clear (bool *ptr, int memmodel)
29310      This built-in function performs an atomic clear operation on
29311      `*PTR'.  After the operation, `*PTR' contains 0.
29312
29313      The valid memory model variants are `__ATOMIC_RELAXED',
29314      `__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'.
29315
29316
29317  -- Built-in Function: void __atomic_thread_fence (int memmodel)
29318      This built-in function acts as a synchronization fence between
29319      threads based on the specified memory model.
29320
29321      All memory orders are valid.
29322
29323
29324  -- Built-in Function: void __atomic_signal_fence (int memmodel)
29325      This built-in function acts as a synchronization fence between a
29326      thread and signal handlers based in the same thread.
29327
29328      All memory orders are valid.
29329
29330
29331  -- Built-in Function: bool __atomic_always_lock_free (size_t size,
29332           void *ptr)
29333      This built-in function returns true if objects of SIZE bytes always
29334      generate lock free atomic instructions for the target architecture.
29335      SIZE must resolve to a compile-time constant and the result also
29336      resolves to a compile-time constant.
29337
29338      PTR is an optional pointer to the object that may be used to
29339      determine alignment.  A value of 0 indicates typical alignment
29340      should be used.  The compiler may also ignore this parameter.
29341
29342           if (_atomic_always_lock_free (sizeof (long long), 0))
29343
29344
29345  -- Built-in Function: bool __atomic_is_lock_free (size_t size, void
29346           *ptr)
29347      This built-in function returns true if objects of SIZE bytes always
29348      generate lock free atomic instructions for the target
29349      architecture.  If it is not known to be lock free a call is made
29350      to a runtime routine named `__atomic_is_lock_free'.
29351
29352      PTR is an optional pointer to the object that may be used to
29353      determine alignment.  A value of 0 indicates typical alignment
29354      should be used.  The compiler may also ignore this parameter.
29355
29356 \1f
29357 File: gcc.info,  Node: x86 specific memory model extensions for transactional memory,  Next: Object Size Checking,  Prev: __atomic Builtins,  Up: C Extensions
29358
29359 6.53 x86 specific memory model extensions for transactional memory
29360 ==================================================================
29361
29362 The i386 architecture supports additional memory ordering flags to mark
29363 lock critical sections for hardware lock elision.  These must be
29364 specified in addition to an existing memory model to atomic intrinsics.
29365
29366 `__ATOMIC_HLE_ACQUIRE'
29367      Start lock elision on a lock variable.  Memory model must be
29368      `__ATOMIC_ACQUIRE' or stronger.
29369
29370 `__ATOMIC_HLE_RELEASE'
29371      End lock elision on a lock variable.  Memory model must be
29372      `__ATOMIC_RELEASE' or stronger.
29373
29374  When a lock acquire fails it's required for good performance to abort
29375 the transaction quickly. This can be done with a `_mm_pause'
29376
29377      #include <immintrin.h> // For _mm_pause
29378
29379      /* Acquire lock with lock elision */
29380      while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE))
29381          _mm_pause(); /* Abort failed transaction */
29382      ...
29383      /* Free lock with lock elision */
29384      __atomic_clear(&lockvar, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);
29385
29386 \1f
29387 File: gcc.info,  Node: Object Size Checking,  Next: Other Builtins,  Prev: x86 specific memory model extensions for transactional memory,  Up: C Extensions
29388
29389 6.54 Object Size Checking Built-in Functions
29390 ============================================
29391
29392 GCC implements a limited buffer overflow protection mechanism that can
29393 prevent some buffer overflow attacks.
29394
29395  -- Built-in Function: size_t __builtin_object_size (void * PTR, int
29396           TYPE)
29397      is a built-in construct that returns a constant number of bytes
29398      from PTR to the end of the object PTR pointer points to (if known
29399      at compile time).  `__builtin_object_size' never evaluates its
29400      arguments for side-effects.  If there are any side-effects in
29401      them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0'
29402      for TYPE 2 or 3.  If there are multiple objects PTR can point to
29403      and all of them are known at compile time, the returned number is
29404      the maximum of remaining byte counts in those objects if TYPE & 2
29405      is 0 and minimum if nonzero.  If it is not possible to determine
29406      which objects PTR points to at compile time,
29407      `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or
29408      1 and `(size_t) 0' for TYPE 2 or 3.
29409
29410      TYPE is an integer constant from 0 to 3.  If the least significant
29411      bit is clear, objects are whole variables, if it is set, a closest
29412      surrounding subobject is considered the object a pointer points to.
29413      The second bit determines if maximum or minimum of remaining bytes
29414      is computed.
29415
29416           struct V { char buf1[10]; int b; char buf2[10]; } var;
29417           char *p = &var.buf1[1], *q = &var.b;
29418
29419           /* Here the object p points to is var.  */
29420           assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
29421           /* The subobject p points to is var.buf1.  */
29422           assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
29423           /* The object q points to is var.  */
29424           assert (__builtin_object_size (q, 0)
29425                   == (char *) (&var + 1) - (char *) &var.b);
29426           /* The subobject q points to is var.b.  */
29427           assert (__builtin_object_size (q, 1) == sizeof (var.b));
29428
29429  There are built-in functions added for many common string operation
29430 functions, e.g., for `memcpy' `__builtin___memcpy_chk' built-in is
29431 provided.  This built-in has an additional last argument, which is the
29432 number of bytes remaining in object the DEST argument points to or
29433 `(size_t) -1' if the size is not known.
29434
29435  The built-in functions are optimized into the normal string functions
29436 like `memcpy' if the last argument is `(size_t) -1' or if it is known
29437 at compile time that the destination object will not be overflown.  If
29438 the compiler can determine at compile time the object will be always
29439 overflown, it issues a warning.
29440
29441  The intended use can be e.g.
29442
29443      #undef memcpy
29444      #define bos0(dest) __builtin_object_size (dest, 0)
29445      #define memcpy(dest, src, n) \
29446        __builtin___memcpy_chk (dest, src, n, bos0 (dest))
29447
29448      char *volatile p;
29449      char buf[10];
29450      /* It is unknown what object p points to, so this is optimized
29451         into plain memcpy - no checking is possible.  */
29452      memcpy (p, "abcde", n);
29453      /* Destination is known and length too.  It is known at compile
29454         time there will be no overflow.  */
29455      memcpy (&buf[5], "abcde", 5);
29456      /* Destination is known, but the length is not known at compile time.
29457         This will result in __memcpy_chk call that can check for overflow
29458         at run time.  */
29459      memcpy (&buf[5], "abcde", n);
29460      /* Destination is known and it is known at compile time there will
29461         be overflow.  There will be a warning and __memcpy_chk call that
29462         will abort the program at run time.  */
29463      memcpy (&buf[6], "abcde", 5);
29464
29465  Such built-in functions are provided for `memcpy', `mempcpy',
29466 `memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and
29467 `strncat'.
29468
29469  There are also checking built-in functions for formatted output
29470 functions.
29471      int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
29472      int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
29473                                    const char *fmt, ...);
29474      int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
29475                                    va_list ap);
29476      int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
29477                                     const char *fmt, va_list ap);
29478
29479  The added FLAG argument is passed unchanged to `__sprintf_chk' etc.
29480 functions and can contain implementation specific flags on what
29481 additional security measures the checking function might take, such as
29482 handling `%n' differently.
29483
29484  The OS argument is the object size S points to, like in the other
29485 built-in functions.  There is a small difference in the behavior
29486 though, if OS is `(size_t) -1', the built-in functions are optimized
29487 into the non-checking functions only if FLAG is 0, otherwise the
29488 checking function is called with OS argument set to `(size_t) -1'.
29489
29490  In addition to this, there are checking built-in functions
29491 `__builtin___printf_chk', `__builtin___vprintf_chk',
29492 `__builtin___fprintf_chk' and `__builtin___vfprintf_chk'.  These have
29493 just one additional argument, FLAG, right before format string FMT.  If
29494 the compiler is able to optimize them to `fputc' etc. functions, it
29495 does, otherwise the checking function is called and the FLAG argument
29496 passed to it.
29497
29498 \1f
29499 File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Object Size Checking,  Up: C Extensions
29500
29501 6.55 Other Built-in Functions Provided by GCC
29502 =============================================
29503
29504 GCC provides a large number of built-in functions other than the ones
29505 mentioned above.  Some of these are for internal use in the processing
29506 of exceptions or variable-length argument lists and are not documented
29507 here because they may change from time to time; we do not recommend
29508 general use of these functions.
29509
29510  The remaining functions are provided for optimization purposes.
29511
29512  GCC includes built-in versions of many of the functions in the standard
29513 C library.  The versions prefixed with `__builtin_' are always treated
29514 as having the same meaning as the C library function even if you
29515 specify the `-fno-builtin' option.  (*note C Dialect Options::) Many of
29516 these functions are only optimized in certain cases; if they are not
29517 optimized in a particular case, a call to the library function is
29518 emitted.
29519
29520  Outside strict ISO C mode (`-ansi', `-std=c90', `-std=c99' or
29521 `-std=c11'), the functions `_exit', `alloca', `bcmp', `bzero',
29522 `dcgettext', `dgettext', `dremf', `dreml', `drem', `exp10f', `exp10l',
29523 `exp10', `ffsll', `ffsl', `ffs', `fprintf_unlocked', `fputs_unlocked',
29524 `gammaf', `gammal', `gamma', `gammaf_r', `gammal_r', `gamma_r',
29525 `gettext', `index', `isascii', `j0f', `j0l', `j0', `j1f', `j1l', `j1',
29526 `jnf', `jnl', `jn', `lgammaf_r', `lgammal_r', `lgamma_r', `mempcpy',
29527 `pow10f', `pow10l', `pow10', `printf_unlocked', `rindex', `scalbf',
29528 `scalbl', `scalb', `signbit', `signbitf', `signbitl', `signbitd32',
29529 `signbitd64', `signbitd128', `significandf', `significandl',
29530 `significand', `sincosf', `sincosl', `sincos', `stpcpy', `stpncpy',
29531 `strcasecmp', `strdup', `strfmon', `strncasecmp', `strndup', `toascii',
29532 `y0f', `y0l', `y0', `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be
29533 handled as built-in functions.  All these functions have corresponding
29534 versions prefixed with `__builtin_', which may be used even in strict
29535 C90 mode.
29536
29537  The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf',
29538 `asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl',
29539 `cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos',
29540 `cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh',
29541 `casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl',
29542 `catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl',
29543 `ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl',
29544 `cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj',
29545 `copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow',
29546 `cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf',
29547 `csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl',
29548 `csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan',
29549 `erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l',
29550 `exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf',
29551 `fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin',
29552 `hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs',
29553 `isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs',
29554 `llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround',
29555 `log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf',
29556 `logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl',
29557 `lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf',
29558 `nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward',
29559 `remainderf', `remainderl', `remainder', `remquof', `remquol',
29560 `remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round',
29561 `scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn',
29562 `snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc',
29563 `vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in
29564 functions except in strict ISO C90 mode (`-ansi' or `-std=c90').
29565
29566  There are also built-in versions of the ISO C99 functions `acosf',
29567 `acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl',
29568 `ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl',
29569 `fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf',
29570 `frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl',
29571 `modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl',
29572 `sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are
29573 recognized in any mode since ISO C90 reserves these names for the
29574 purpose to which ISO C99 puts them.  All these functions have
29575 corresponding versions prefixed with `__builtin_'.
29576
29577  The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit',
29578 `iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper',
29579 `iswxdigit', `towlower' and `towupper' are handled as built-in functions
29580 except in strict ISO C90 mode (`-ansi' or `-std=c90').
29581
29582  The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan',
29583 `calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod',
29584 `fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl',
29585 `isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace',
29586 `isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10',
29587 `log', `malloc', `memchr', `memcmp', `memcpy', `memset', `modf', `pow',
29588 `printf', `putchar', `puts', `scanf', `sinh', `sin', `snprintf',
29589 `sprintf', `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy',
29590 `strcspn', `strlen', `strncat', `strncmp', `strncpy', `strpbrk',
29591 `strrchr', `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and
29592 `vsprintf' are all recognized as built-in functions unless
29593 `-fno-builtin' is specified (or `-fno-builtin-FUNCTION' is specified
29594 for an individual function).  All of these functions have corresponding
29595 versions prefixed with `__builtin_'.
29596
29597  GCC provides built-in versions of the ISO C99 floating-point comparison
29598 macros that avoid raising exceptions for unordered operands.  They have
29599 the same names as the standard macros ( `isgreater', `isgreaterequal',
29600 `isless', `islessequal', `islessgreater', and `isunordered') , with
29601 `__builtin_' prefixed.  We intend for a library implementor to be able
29602 to simply `#define' each standard macro to its built-in equivalent.  In
29603 the same fashion, GCC provides `fpclassify', `isfinite', `isinf_sign'
29604 and `isnormal' built-ins used with `__builtin_' prefixed.  The `isinf'
29605 and `isnan' built-in functions appear both with and without the
29606 `__builtin_' prefix.
29607
29608  -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
29609      You can use the built-in function `__builtin_types_compatible_p' to
29610      determine whether two types are the same.
29611
29612      This built-in function returns 1 if the unqualified versions of the
29613      types TYPE1 and TYPE2 (which are types, not expressions) are
29614      compatible, 0 otherwise.  The result of this built-in function can
29615      be used in integer constant expressions.
29616
29617      This built-in function ignores top level qualifiers (e.g., `const',
29618      `volatile').  For example, `int' is equivalent to `const int'.
29619
29620      The type `int[]' and `int[5]' are compatible.  On the other hand,
29621      `int' and `char *' are not compatible, even if the size of their
29622      types, on the particular architecture are the same.  Also, the
29623      amount of pointer indirection is taken into account when
29624      determining similarity.  Consequently, `short *' is not similar to
29625      `short **'.  Furthermore, two types that are typedefed are
29626      considered compatible if their underlying types are compatible.
29627
29628      An `enum' type is not considered to be compatible with another
29629      `enum' type even if both are compatible with the same integer
29630      type; this is what the C standard specifies.  For example, `enum
29631      {foo, bar}' is not similar to `enum {hot, dog}'.
29632
29633      You typically use this function in code whose execution varies
29634      depending on the arguments' types.  For example:
29635
29636           #define foo(x)                                                  \
29637             ({                                                           \
29638               typeof (x) tmp = (x);                                       \
29639               if (__builtin_types_compatible_p (typeof (x), long double)) \
29640                 tmp = foo_long_double (tmp);                              \
29641               else if (__builtin_types_compatible_p (typeof (x), double)) \
29642                 tmp = foo_double (tmp);                                   \
29643               else if (__builtin_types_compatible_p (typeof (x), float))  \
29644                 tmp = foo_float (tmp);                                    \
29645               else                                                        \
29646                 abort ();                                                 \
29647               tmp;                                                        \
29648             })
29649
29650      _Note:_ This construct is only available for C.
29651
29652
29653  -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
29654           EXP2)
29655      You can use the built-in function `__builtin_choose_expr' to
29656      evaluate code depending on the value of a constant expression.
29657      This built-in function returns EXP1 if CONST_EXP, which is an
29658      integer constant expression, is nonzero.  Otherwise it returns
29659      EXP2.
29660
29661      This built-in function is analogous to the `? :' operator in C,
29662      except that the expression returned has its type unaltered by
29663      promotion rules.  Also, the built-in function does not evaluate
29664      the expression that is not chosen.  For example, if CONST_EXP
29665      evaluates to true, EXP2 is not evaluated even if it has
29666      side-effects.
29667
29668      This built-in function can return an lvalue if the chosen argument
29669      is an lvalue.
29670
29671      If EXP1 is returned, the return type is the same as EXP1's type.
29672      Similarly, if EXP2 is returned, its return type is the same as
29673      EXP2.
29674
29675      Example:
29676
29677           #define foo(x)                                                    \
29678             __builtin_choose_expr (                                         \
29679               __builtin_types_compatible_p (typeof (x), double),            \
29680               foo_double (x),                                               \
29681               __builtin_choose_expr (                                       \
29682                 __builtin_types_compatible_p (typeof (x), float),           \
29683                 foo_float (x),                                              \
29684                 /* The void expression results in a compile-time error  \
29685                    when assigning the result to something.  */          \
29686                 (void)0))
29687
29688      _Note:_ This construct is only available for C.  Furthermore, the
29689      unused expression (EXP1 or EXP2 depending on the value of
29690      CONST_EXP) may still generate syntax errors.  This may change in
29691      future revisions.
29692
29693
29694  -- Built-in Function: TYPE __builtin_complex (REAL, IMAG)
29695      The built-in function `__builtin_complex' is provided for use in
29696      implementing the ISO C11 macros `CMPLXF', `CMPLX' and `CMPLXL'.
29697      REAL and IMAG must have the same type, a real binary
29698      floating-point type, and the result has the corresponding complex
29699      type with real and imaginary parts REAL and IMAG.  Unlike `REAL +
29700      I * IMAG', this works even when infinities, NaNs and negative
29701      zeros are involved.
29702
29703
29704  -- Built-in Function: int __builtin_constant_p (EXP)
29705      You can use the built-in function `__builtin_constant_p' to
29706      determine if a value is known to be constant at compile time and
29707      hence that GCC can perform constant-folding on expressions
29708      involving that value.  The argument of the function is the value
29709      to test.  The function returns the integer 1 if the argument is
29710      known to be a compile-time constant and 0 if it is not known to be
29711      a compile-time constant.  A return of 0 does not indicate that the
29712      value is _not_ a constant, but merely that GCC cannot prove it is
29713      a constant with the specified value of the `-O' option.
29714
29715      You typically use this function in an embedded application where
29716      memory is a critical resource.  If you have some complex
29717      calculation, you may want it to be folded if it involves
29718      constants, but need to call a function if it does not.  For
29719      example:
29720
29721           #define Scale_Value(X)      \
29722             (__builtin_constant_p (X) \
29723             ? ((X) * SCALE + OFFSET) : Scale (X))
29724
29725      You may use this built-in function in either a macro or an inline
29726      function.  However, if you use it in an inlined function and pass
29727      an argument of the function as the argument to the built-in, GCC
29728      never returns 1 when you call the inline function with a string
29729      constant or compound literal (*note Compound Literals::) and does
29730      not return 1 when you pass a constant numeric value to the inline
29731      function unless you specify the `-O' option.
29732
29733      You may also use `__builtin_constant_p' in initializers for static
29734      data.  For instance, you can write
29735
29736           static const int table[] = {
29737              __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
29738              /* ... */
29739           };
29740
29741      This is an acceptable initializer even if EXPRESSION is not a
29742      constant expression, including the case where
29743      `__builtin_constant_p' returns 1 because EXPRESSION can be folded
29744      to a constant but EXPRESSION contains operands that are not
29745      otherwise permitted in a static initializer (for example, `0 &&
29746      foo ()').  GCC must be more conservative about evaluating the
29747      built-in in this case, because it has no opportunity to perform
29748      optimization.
29749
29750      Previous versions of GCC did not accept this built-in in data
29751      initializers.  The earliest version where it is completely safe is
29752      3.0.1.
29753
29754  -- Built-in Function: long __builtin_expect (long EXP, long C)
29755      You may use `__builtin_expect' to provide the compiler with branch
29756      prediction information.  In general, you should prefer to use
29757      actual profile feedback for this (`-fprofile-arcs'), as
29758      programmers are notoriously bad at predicting how their programs
29759      actually perform.  However, there are applications in which this
29760      data is hard to collect.
29761
29762      The return value is the value of EXP, which should be an integral
29763      expression.  The semantics of the built-in are that it is expected
29764      that EXP == C.  For example:
29765
29766           if (__builtin_expect (x, 0))
29767             foo ();
29768
29769      indicates that we do not expect to call `foo', since we expect `x'
29770      to be zero.  Since you are limited to integral expressions for
29771      EXP, you should use constructions such as
29772
29773           if (__builtin_expect (ptr != NULL, 1))
29774             foo (*ptr);
29775
29776      when testing pointer or floating-point values.
29777
29778  -- Built-in Function: void __builtin_trap (void)
29779      This function causes the program to exit abnormally.  GCC
29780      implements this function by using a target-dependent mechanism
29781      (such as intentionally executing an illegal instruction) or by
29782      calling `abort'.  The mechanism used may vary from release to
29783      release so you should not rely on any particular implementation.
29784
29785  -- Built-in Function: void __builtin_unreachable (void)
29786      If control flow reaches the point of the `__builtin_unreachable',
29787      the program is undefined.  It is useful in situations where the
29788      compiler cannot deduce the unreachability of the code.
29789
29790      One such case is immediately following an `asm' statement that
29791      either never terminates, or one that transfers control elsewhere
29792      and never returns.  In this example, without the
29793      `__builtin_unreachable', GCC issues a warning that control reaches
29794      the end of a non-void function.  It also generates code to return
29795      after the `asm'.
29796
29797           int f (int c, int v)
29798           {
29799             if (c)
29800               {
29801                 return v;
29802               }
29803             else
29804               {
29805                 asm("jmp error_handler");
29806                 __builtin_unreachable ();
29807               }
29808           }
29809
29810      Because the `asm' statement unconditionally transfers control out
29811      of the function, control never reaches the end of the function
29812      body.  The `__builtin_unreachable' is in fact unreachable and
29813      communicates this fact to the compiler.
29814
29815      Another use for `__builtin_unreachable' is following a call a
29816      function that never returns but that is not declared
29817      `__attribute__((noreturn))', as in this example:
29818
29819           void function_that_never_returns (void);
29820
29821           int g (int c)
29822           {
29823             if (c)
29824               {
29825                 return 1;
29826               }
29827             else
29828               {
29829                 function_that_never_returns ();
29830                 __builtin_unreachable ();
29831               }
29832           }
29833
29834
29835  -- Built-in Function: void *__builtin_assume_aligned (const void *EXP,
29836           size_t ALIGN, ...)
29837      This function returns its first argument, and allows the compiler
29838      to assume that the returned pointer is at least ALIGN bytes
29839      aligned.  This built-in can have either two or three arguments, if
29840      it has three, the third argument should have integer type, and if
29841      it is nonzero means misalignment offset.  For example:
29842
29843           void *x = __builtin_assume_aligned (arg, 16);
29844
29845      means that the compiler can assume `x', set to `arg', is at least
29846      16-byte aligned, while:
29847
29848           void *x = __builtin_assume_aligned (arg, 32, 8);
29849
29850      means that the compiler can assume for `x', set to `arg', that
29851      `(char *) x - 8' is 32-byte aligned.
29852
29853  -- Built-in Function: int __builtin_LINE ()
29854      This function is the equivalent to the preprocessor `__LINE__'
29855      macro and returns the line number of the invocation of the
29856      built-in.
29857
29858  -- Built-in Function: int __builtin_FUNCTION ()
29859      This function is the equivalent to the preprocessor `__FUNCTION__'
29860      macro and returns the function name the invocation of the built-in
29861      is in.
29862
29863  -- Built-in Function: int __builtin_FILE ()
29864      This function is the equivalent to the preprocessor `__FILE__'
29865      macro and returns the file name the invocation of the built-in is
29866      in.
29867
29868  -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char
29869           *END)
29870      This function is used to flush the processor's instruction cache
29871      for the region of memory between BEGIN inclusive and END
29872      exclusive.  Some targets require that the instruction cache be
29873      flushed, after modifying memory containing code, in order to obtain
29874      deterministic behavior.
29875
29876      If the target does not require instruction cache flushes,
29877      `__builtin___clear_cache' has no effect.  Otherwise either
29878      instructions are emitted in-line to clear the instruction cache or
29879      a call to the `__clear_cache' function in libgcc is made.
29880
29881  -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
29882      This function is used to minimize cache-miss latency by moving
29883      data into a cache before it is accessed.  You can insert calls to
29884      `__builtin_prefetch' into code for which you know addresses of
29885      data in memory that is likely to be accessed soon.  If the target
29886      supports them, data prefetch instructions are generated.  If the
29887      prefetch is done early enough before the access then the data will
29888      be in the cache by the time it is accessed.
29889
29890      The value of ADDR is the address of the memory to prefetch.  There
29891      are two optional arguments, RW and LOCALITY.  The value of RW is a
29892      compile-time constant one or zero; one means that the prefetch is
29893      preparing for a write to the memory address and zero, the default,
29894      means that the prefetch is preparing for a read.  The value
29895      LOCALITY must be a compile-time constant integer between zero and
29896      three.  A value of zero means that the data has no temporal
29897      locality, so it need not be left in the cache after the access.  A
29898      value of three means that the data has a high degree of temporal
29899      locality and should be left in all levels of cache possible.
29900      Values of one and two mean, respectively, a low or moderate degree
29901      of temporal locality.  The default is three.
29902
29903           for (i = 0; i < n; i++)
29904             {
29905               a[i] = a[i] + b[i];
29906               __builtin_prefetch (&a[i+j], 1, 1);
29907               __builtin_prefetch (&b[i+j], 0, 1);
29908               /* ... */
29909             }
29910
29911      Data prefetch does not generate faults if ADDR is invalid, but the
29912      address expression itself must be valid.  For example, a prefetch
29913      of `p->next' does not fault if `p->next' is not a valid address,
29914      but evaluation faults if `p' is not a valid address.
29915
29916      If the target does not support data prefetch, the address
29917      expression is evaluated if it includes side effects but no other
29918      code is generated and GCC does not issue a warning.
29919
29920  -- Built-in Function: double __builtin_huge_val (void)
29921      Returns a positive infinity, if supported by the floating-point
29922      format, else `DBL_MAX'.  This function is suitable for
29923      implementing the ISO C macro `HUGE_VAL'.
29924
29925  -- Built-in Function: float __builtin_huge_valf (void)
29926      Similar to `__builtin_huge_val', except the return type is `float'.
29927
29928  -- Built-in Function: long double __builtin_huge_vall (void)
29929      Similar to `__builtin_huge_val', except the return type is `long
29930      double'.
29931
29932  -- Built-in Function: int __builtin_fpclassify (int, int, int, int,
29933           int, ...)
29934      This built-in implements the C99 fpclassify functionality.  The
29935      first five int arguments should be the target library's notion of
29936      the possible FP classes and are used for return values.  They must
29937      be constant values and they must appear in this order: `FP_NAN',
29938      `FP_INFINITE', `FP_NORMAL', `FP_SUBNORMAL' and `FP_ZERO'.  The
29939      ellipsis is for exactly one floating-point value to classify.  GCC
29940      treats the last argument as type-generic, which means it does not
29941      do default promotion from float to double.
29942
29943  -- Built-in Function: double __builtin_inf (void)
29944      Similar to `__builtin_huge_val', except a warning is generated if
29945      the target floating-point format does not support infinities.
29946
29947  -- Built-in Function: _Decimal32 __builtin_infd32 (void)
29948      Similar to `__builtin_inf', except the return type is `_Decimal32'.
29949
29950  -- Built-in Function: _Decimal64 __builtin_infd64 (void)
29951      Similar to `__builtin_inf', except the return type is `_Decimal64'.
29952
29953  -- Built-in Function: _Decimal128 __builtin_infd128 (void)
29954      Similar to `__builtin_inf', except the return type is
29955      `_Decimal128'.
29956
29957  -- Built-in Function: float __builtin_inff (void)
29958      Similar to `__builtin_inf', except the return type is `float'.
29959      This function is suitable for implementing the ISO C99 macro
29960      `INFINITY'.
29961
29962  -- Built-in Function: long double __builtin_infl (void)
29963      Similar to `__builtin_inf', except the return type is `long
29964      double'.
29965
29966  -- Built-in Function: int __builtin_isinf_sign (...)
29967      Similar to `isinf', except the return value is negative for an
29968      argument of `-Inf'.  Note while the parameter list is an ellipsis,
29969      this function only accepts exactly one floating-point argument.
29970      GCC treats this parameter as type-generic, which means it does not
29971      do default promotion from float to double.
29972
29973  -- Built-in Function: double __builtin_nan (const char *str)
29974      This is an implementation of the ISO C99 function `nan'.
29975
29976      Since ISO C99 defines this function in terms of `strtod', which we
29977      do not implement, a description of the parsing is in order.  The
29978      string is parsed as by `strtol'; that is, the base is recognized by
29979      leading `0' or `0x' prefixes.  The number parsed is placed in the
29980      significand such that the least significant bit of the number is
29981      at the least significant bit of the significand.  The number is
29982      truncated to fit the significand field provided.  The significand
29983      is forced to be a quiet NaN.
29984
29985      This function, if given a string literal all of which would have
29986      been consumed by `strtol', is evaluated early enough that it is
29987      considered a compile-time constant.
29988
29989  -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
29990      Similar to `__builtin_nan', except the return type is `_Decimal32'.
29991
29992  -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
29993      Similar to `__builtin_nan', except the return type is `_Decimal64'.
29994
29995  -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
29996      Similar to `__builtin_nan', except the return type is
29997      `_Decimal128'.
29998
29999  -- Built-in Function: float __builtin_nanf (const char *str)
30000      Similar to `__builtin_nan', except the return type is `float'.
30001
30002  -- Built-in Function: long double __builtin_nanl (const char *str)
30003      Similar to `__builtin_nan', except the return type is `long
30004      double'.
30005
30006  -- Built-in Function: double __builtin_nans (const char *str)
30007      Similar to `__builtin_nan', except the significand is forced to be
30008      a signaling NaN.  The `nans' function is proposed by WG14 N965.
30009
30010  -- Built-in Function: float __builtin_nansf (const char *str)
30011      Similar to `__builtin_nans', except the return type is `float'.
30012
30013  -- Built-in Function: long double __builtin_nansl (const char *str)
30014      Similar to `__builtin_nans', except the return type is `long
30015      double'.
30016
30017  -- Built-in Function: int __builtin_ffs (unsigned int x)
30018      Returns one plus the index of the least significant 1-bit of X, or
30019      if X is zero, returns zero.
30020
30021  -- Built-in Function: int __builtin_clz (unsigned int x)
30022      Returns the number of leading 0-bits in X, starting at the most
30023      significant bit position.  If X is 0, the result is undefined.
30024
30025  -- Built-in Function: int __builtin_ctz (unsigned int x)
30026      Returns the number of trailing 0-bits in X, starting at the least
30027      significant bit position.  If X is 0, the result is undefined.
30028
30029  -- Built-in Function: int __builtin_clrsb (int x)
30030      Returns the number of leading redundant sign bits in X, i.e. the
30031      number of bits following the most significant bit that are
30032      identical to it.  There are no special cases for 0 or other values.
30033
30034  -- Built-in Function: int __builtin_popcount (unsigned int x)
30035      Returns the number of 1-bits in X.
30036
30037  -- Built-in Function: int __builtin_parity (unsigned int x)
30038      Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
30039
30040  -- Built-in Function: int __builtin_ffsl (unsigned long)
30041      Similar to `__builtin_ffs', except the argument type is `unsigned
30042      long'.
30043
30044  -- Built-in Function: int __builtin_clzl (unsigned long)
30045      Similar to `__builtin_clz', except the argument type is `unsigned
30046      long'.
30047
30048  -- Built-in Function: int __builtin_ctzl (unsigned long)
30049      Similar to `__builtin_ctz', except the argument type is `unsigned
30050      long'.
30051
30052  -- Built-in Function: int __builtin_clrsbl (long)
30053      Similar to `__builtin_clrsb', except the argument type is `long'.
30054
30055  -- Built-in Function: int __builtin_popcountl (unsigned long)
30056      Similar to `__builtin_popcount', except the argument type is
30057      `unsigned long'.
30058
30059  -- Built-in Function: int __builtin_parityl (unsigned long)
30060      Similar to `__builtin_parity', except the argument type is
30061      `unsigned long'.
30062
30063  -- Built-in Function: int __builtin_ffsll (unsigned long long)
30064      Similar to `__builtin_ffs', except the argument type is `unsigned
30065      long long'.
30066
30067  -- Built-in Function: int __builtin_clzll (unsigned long long)
30068      Similar to `__builtin_clz', except the argument type is `unsigned
30069      long long'.
30070
30071  -- Built-in Function: int __builtin_ctzll (unsigned long long)
30072      Similar to `__builtin_ctz', except the argument type is `unsigned
30073      long long'.
30074
30075  -- Built-in Function: int __builtin_clrsbll (long long)
30076      Similar to `__builtin_clrsb', except the argument type is `long
30077      long'.
30078
30079  -- Built-in Function: int __builtin_popcountll (unsigned long long)
30080      Similar to `__builtin_popcount', except the argument type is
30081      `unsigned long long'.
30082
30083  -- Built-in Function: int __builtin_parityll (unsigned long long)
30084      Similar to `__builtin_parity', except the argument type is
30085      `unsigned long long'.
30086
30087  -- Built-in Function: double __builtin_powi (double, int)
30088      Returns the first argument raised to the power of the second.
30089      Unlike the `pow' function no guarantees about precision and
30090      rounding are made.
30091
30092  -- Built-in Function: float __builtin_powif (float, int)
30093      Similar to `__builtin_powi', except the argument and return types
30094      are `float'.
30095
30096  -- Built-in Function: long double __builtin_powil (long double, int)
30097      Similar to `__builtin_powi', except the argument and return types
30098      are `long double'.
30099
30100  -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x)
30101      Returns X with the order of the bytes reversed; for example,
30102      `0xaabb' becomes `0xbbaa'.  Byte here always means exactly 8 bits.
30103
30104  -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x)
30105      Similar to `__builtin_bswap16', except the argument and return
30106      types are 32 bit.
30107
30108  -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x)
30109      Similar to `__builtin_bswap32', except the argument and return
30110      types are 64 bit.
30111
30112 \1f
30113 File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions
30114
30115 6.56 Built-in Functions Specific to Particular Target Machines
30116 ==============================================================
30117
30118 On some target machines, GCC supports many built-in functions specific
30119 to those machines.  Generally these generate calls to specific machine
30120 instructions, but allow the compiler to schedule those calls.
30121
30122 * Menu:
30123
30124 * Alpha Built-in Functions::
30125 * ARM iWMMXt Built-in Functions::
30126 * ARM NEON Intrinsics::
30127 * AVR Built-in Functions::
30128 * Blackfin Built-in Functions::
30129 * FR-V Built-in Functions::
30130 * X86 Built-in Functions::
30131 * X86 transactional memory intrinsics::
30132 * MIPS DSP Built-in Functions::
30133 * MIPS Paired-Single Support::
30134 * MIPS Loongson Built-in Functions::
30135 * Other MIPS Built-in Functions::
30136 * picoChip Built-in Functions::
30137 * PowerPC Built-in Functions::
30138 * PowerPC AltiVec/VSX Built-in Functions::
30139 * RX Built-in Functions::
30140 * SH Built-in Functions::
30141 * SPARC VIS Built-in Functions::
30142 * SPU Built-in Functions::
30143 * TI C6X Built-in Functions::
30144 * TILE-Gx Built-in Functions::
30145 * TILEPro Built-in Functions::
30146
30147 \1f
30148 File: gcc.info,  Node: Alpha Built-in Functions,  Next: ARM iWMMXt Built-in Functions,  Up: Target Builtins
30149
30150 6.56.1 Alpha Built-in Functions
30151 -------------------------------
30152
30153 These built-in functions are available for the Alpha family of
30154 processors, depending on the command-line switches used.
30155
30156  The following built-in functions are always available.  They all
30157 generate the machine instruction that is part of the name.
30158
30159      long __builtin_alpha_implver (void)
30160      long __builtin_alpha_rpcc (void)
30161      long __builtin_alpha_amask (long)
30162      long __builtin_alpha_cmpbge (long, long)
30163      long __builtin_alpha_extbl (long, long)
30164      long __builtin_alpha_extwl (long, long)
30165      long __builtin_alpha_extll (long, long)
30166      long __builtin_alpha_extql (long, long)
30167      long __builtin_alpha_extwh (long, long)
30168      long __builtin_alpha_extlh (long, long)
30169      long __builtin_alpha_extqh (long, long)
30170      long __builtin_alpha_insbl (long, long)
30171      long __builtin_alpha_inswl (long, long)
30172      long __builtin_alpha_insll (long, long)
30173      long __builtin_alpha_insql (long, long)
30174      long __builtin_alpha_inswh (long, long)
30175      long __builtin_alpha_inslh (long, long)
30176      long __builtin_alpha_insqh (long, long)
30177      long __builtin_alpha_mskbl (long, long)
30178      long __builtin_alpha_mskwl (long, long)
30179      long __builtin_alpha_mskll (long, long)
30180      long __builtin_alpha_mskql (long, long)
30181      long __builtin_alpha_mskwh (long, long)
30182      long __builtin_alpha_msklh (long, long)
30183      long __builtin_alpha_mskqh (long, long)
30184      long __builtin_alpha_umulh (long, long)
30185      long __builtin_alpha_zap (long, long)
30186      long __builtin_alpha_zapnot (long, long)
30187
30188  The following built-in functions are always with `-mmax' or
30189 `-mcpu=CPU' where CPU is `pca56' or later.  They all generate the
30190 machine instruction that is part of the name.
30191
30192      long __builtin_alpha_pklb (long)
30193      long __builtin_alpha_pkwb (long)
30194      long __builtin_alpha_unpkbl (long)
30195      long __builtin_alpha_unpkbw (long)
30196      long __builtin_alpha_minub8 (long, long)
30197      long __builtin_alpha_minsb8 (long, long)
30198      long __builtin_alpha_minuw4 (long, long)
30199      long __builtin_alpha_minsw4 (long, long)
30200      long __builtin_alpha_maxub8 (long, long)
30201      long __builtin_alpha_maxsb8 (long, long)
30202      long __builtin_alpha_maxuw4 (long, long)
30203      long __builtin_alpha_maxsw4 (long, long)
30204      long __builtin_alpha_perr (long, long)
30205
30206  The following built-in functions are always with `-mcix' or
30207 `-mcpu=CPU' where CPU is `ev67' or later.  They all generate the
30208 machine instruction that is part of the name.
30209
30210      long __builtin_alpha_cttz (long)
30211      long __builtin_alpha_ctlz (long)
30212      long __builtin_alpha_ctpop (long)
30213
30214  The following built-in functions are available on systems that use the
30215 OSF/1 PALcode.  Normally they invoke the `rduniq' and `wruniq' PAL
30216 calls, but when invoked with `-mtls-kernel', they invoke `rdval' and
30217 `wrval'.
30218
30219      void *__builtin_thread_pointer (void)
30220      void __builtin_set_thread_pointer (void *)
30221
30222 \1f
30223 File: gcc.info,  Node: ARM iWMMXt Built-in Functions,  Next: ARM NEON Intrinsics,  Prev: Alpha Built-in Functions,  Up: Target Builtins
30224
30225 6.56.2 ARM iWMMXt Built-in Functions
30226 ------------------------------------
30227
30228 These built-in functions are available for the ARM family of processors
30229 when the `-mcpu=iwmmxt' switch is used:
30230
30231      typedef int v2si __attribute__ ((vector_size (8)));
30232      typedef short v4hi __attribute__ ((vector_size (8)));
30233      typedef char v8qi __attribute__ ((vector_size (8)));
30234
30235      int __builtin_arm_getwcgr0 (void)
30236      void __builtin_arm_setwcgr0 (int)
30237      int __builtin_arm_getwcgr1 (void)
30238      void __builtin_arm_setwcgr1 (int)
30239      int __builtin_arm_getwcgr2 (void)
30240      void __builtin_arm_setwcgr2 (int)
30241      int __builtin_arm_getwcgr3 (void)
30242      void __builtin_arm_setwcgr3 (int)
30243      int __builtin_arm_textrmsb (v8qi, int)
30244      int __builtin_arm_textrmsh (v4hi, int)
30245      int __builtin_arm_textrmsw (v2si, int)
30246      int __builtin_arm_textrmub (v8qi, int)
30247      int __builtin_arm_textrmuh (v4hi, int)
30248      int __builtin_arm_textrmuw (v2si, int)
30249      v8qi __builtin_arm_tinsrb (v8qi, int, int)
30250      v4hi __builtin_arm_tinsrh (v4hi, int, int)
30251      v2si __builtin_arm_tinsrw (v2si, int, int)
30252      long long __builtin_arm_tmia (long long, int, int)
30253      long long __builtin_arm_tmiabb (long long, int, int)
30254      long long __builtin_arm_tmiabt (long long, int, int)
30255      long long __builtin_arm_tmiaph (long long, int, int)
30256      long long __builtin_arm_tmiatb (long long, int, int)
30257      long long __builtin_arm_tmiatt (long long, int, int)
30258      int __builtin_arm_tmovmskb (v8qi)
30259      int __builtin_arm_tmovmskh (v4hi)
30260      int __builtin_arm_tmovmskw (v2si)
30261      long long __builtin_arm_waccb (v8qi)
30262      long long __builtin_arm_wacch (v4hi)
30263      long long __builtin_arm_waccw (v2si)
30264      v8qi __builtin_arm_waddb (v8qi, v8qi)
30265      v8qi __builtin_arm_waddbss (v8qi, v8qi)
30266      v8qi __builtin_arm_waddbus (v8qi, v8qi)
30267      v4hi __builtin_arm_waddh (v4hi, v4hi)
30268      v4hi __builtin_arm_waddhss (v4hi, v4hi)
30269      v4hi __builtin_arm_waddhus (v4hi, v4hi)
30270      v2si __builtin_arm_waddw (v2si, v2si)
30271      v2si __builtin_arm_waddwss (v2si, v2si)
30272      v2si __builtin_arm_waddwus (v2si, v2si)
30273      v8qi __builtin_arm_walign (v8qi, v8qi, int)
30274      long long __builtin_arm_wand(long long, long long)
30275      long long __builtin_arm_wandn (long long, long long)
30276      v8qi __builtin_arm_wavg2b (v8qi, v8qi)
30277      v8qi __builtin_arm_wavg2br (v8qi, v8qi)
30278      v4hi __builtin_arm_wavg2h (v4hi, v4hi)
30279      v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
30280      v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
30281      v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
30282      v2si __builtin_arm_wcmpeqw (v2si, v2si)
30283      v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
30284      v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
30285      v2si __builtin_arm_wcmpgtsw (v2si, v2si)
30286      v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
30287      v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
30288      v2si __builtin_arm_wcmpgtuw (v2si, v2si)
30289      long long __builtin_arm_wmacs (long long, v4hi, v4hi)
30290      long long __builtin_arm_wmacsz (v4hi, v4hi)
30291      long long __builtin_arm_wmacu (long long, v4hi, v4hi)
30292      long long __builtin_arm_wmacuz (v4hi, v4hi)
30293      v4hi __builtin_arm_wmadds (v4hi, v4hi)
30294      v4hi __builtin_arm_wmaddu (v4hi, v4hi)
30295      v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
30296      v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
30297      v2si __builtin_arm_wmaxsw (v2si, v2si)
30298      v8qi __builtin_arm_wmaxub (v8qi, v8qi)
30299      v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
30300      v2si __builtin_arm_wmaxuw (v2si, v2si)
30301      v8qi __builtin_arm_wminsb (v8qi, v8qi)
30302      v4hi __builtin_arm_wminsh (v4hi, v4hi)
30303      v2si __builtin_arm_wminsw (v2si, v2si)
30304      v8qi __builtin_arm_wminub (v8qi, v8qi)
30305      v4hi __builtin_arm_wminuh (v4hi, v4hi)
30306      v2si __builtin_arm_wminuw (v2si, v2si)
30307      v4hi __builtin_arm_wmulsm (v4hi, v4hi)
30308      v4hi __builtin_arm_wmulul (v4hi, v4hi)
30309      v4hi __builtin_arm_wmulum (v4hi, v4hi)
30310      long long __builtin_arm_wor (long long, long long)
30311      v2si __builtin_arm_wpackdss (long long, long long)
30312      v2si __builtin_arm_wpackdus (long long, long long)
30313      v8qi __builtin_arm_wpackhss (v4hi, v4hi)
30314      v8qi __builtin_arm_wpackhus (v4hi, v4hi)
30315      v4hi __builtin_arm_wpackwss (v2si, v2si)
30316      v4hi __builtin_arm_wpackwus (v2si, v2si)
30317      long long __builtin_arm_wrord (long long, long long)
30318      long long __builtin_arm_wrordi (long long, int)
30319      v4hi __builtin_arm_wrorh (v4hi, long long)
30320      v4hi __builtin_arm_wrorhi (v4hi, int)
30321      v2si __builtin_arm_wrorw (v2si, long long)
30322      v2si __builtin_arm_wrorwi (v2si, int)
30323      v2si __builtin_arm_wsadb (v2si, v8qi, v8qi)
30324      v2si __builtin_arm_wsadbz (v8qi, v8qi)
30325      v2si __builtin_arm_wsadh (v2si, v4hi, v4hi)
30326      v2si __builtin_arm_wsadhz (v4hi, v4hi)
30327      v4hi __builtin_arm_wshufh (v4hi, int)
30328      long long __builtin_arm_wslld (long long, long long)
30329      long long __builtin_arm_wslldi (long long, int)
30330      v4hi __builtin_arm_wsllh (v4hi, long long)
30331      v4hi __builtin_arm_wsllhi (v4hi, int)
30332      v2si __builtin_arm_wsllw (v2si, long long)
30333      v2si __builtin_arm_wsllwi (v2si, int)
30334      long long __builtin_arm_wsrad (long long, long long)
30335      long long __builtin_arm_wsradi (long long, int)
30336      v4hi __builtin_arm_wsrah (v4hi, long long)
30337      v4hi __builtin_arm_wsrahi (v4hi, int)
30338      v2si __builtin_arm_wsraw (v2si, long long)
30339      v2si __builtin_arm_wsrawi (v2si, int)
30340      long long __builtin_arm_wsrld (long long, long long)
30341      long long __builtin_arm_wsrldi (long long, int)
30342      v4hi __builtin_arm_wsrlh (v4hi, long long)
30343      v4hi __builtin_arm_wsrlhi (v4hi, int)
30344      v2si __builtin_arm_wsrlw (v2si, long long)
30345      v2si __builtin_arm_wsrlwi (v2si, int)
30346      v8qi __builtin_arm_wsubb (v8qi, v8qi)
30347      v8qi __builtin_arm_wsubbss (v8qi, v8qi)
30348      v8qi __builtin_arm_wsubbus (v8qi, v8qi)
30349      v4hi __builtin_arm_wsubh (v4hi, v4hi)
30350      v4hi __builtin_arm_wsubhss (v4hi, v4hi)
30351      v4hi __builtin_arm_wsubhus (v4hi, v4hi)
30352      v2si __builtin_arm_wsubw (v2si, v2si)
30353      v2si __builtin_arm_wsubwss (v2si, v2si)
30354      v2si __builtin_arm_wsubwus (v2si, v2si)
30355      v4hi __builtin_arm_wunpckehsb (v8qi)
30356      v2si __builtin_arm_wunpckehsh (v4hi)
30357      long long __builtin_arm_wunpckehsw (v2si)
30358      v4hi __builtin_arm_wunpckehub (v8qi)
30359      v2si __builtin_arm_wunpckehuh (v4hi)
30360      long long __builtin_arm_wunpckehuw (v2si)
30361      v4hi __builtin_arm_wunpckelsb (v8qi)
30362      v2si __builtin_arm_wunpckelsh (v4hi)
30363      long long __builtin_arm_wunpckelsw (v2si)
30364      v4hi __builtin_arm_wunpckelub (v8qi)
30365      v2si __builtin_arm_wunpckeluh (v4hi)
30366      long long __builtin_arm_wunpckeluw (v2si)
30367      v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
30368      v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
30369      v2si __builtin_arm_wunpckihw (v2si, v2si)
30370      v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
30371      v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
30372      v2si __builtin_arm_wunpckilw (v2si, v2si)
30373      long long __builtin_arm_wxor (long long, long long)
30374      long long __builtin_arm_wzero ()
30375
30376 \1f
30377 File: gcc.info,  Node: ARM NEON Intrinsics,  Next: AVR Built-in Functions,  Prev: ARM iWMMXt Built-in Functions,  Up: Target Builtins
30378
30379 6.56.3 ARM NEON Intrinsics
30380 --------------------------
30381
30382 These built-in intrinsics for the ARM Advanced SIMD extension are
30383 available when the `-mfpu=neon' switch is used:
30384
30385 6.56.3.1 Addition
30386 .................
30387
30388    * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t)
30389      _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0'
30390
30391    * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t)
30392      _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0'
30393
30394    * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t)
30395      _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0'
30396
30397    * int32x2_t vadd_s32 (int32x2_t, int32x2_t)
30398      _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0'
30399
30400    * int16x4_t vadd_s16 (int16x4_t, int16x4_t)
30401      _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0'
30402
30403    * int8x8_t vadd_s8 (int8x8_t, int8x8_t)
30404      _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0'
30405
30406    * float32x2_t vadd_f32 (float32x2_t, float32x2_t)
30407      _Form of expected instruction(s):_ `vadd.f32 D0, D0, D0'
30408
30409    * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t)
30410
30411    * int64x1_t vadd_s64 (int64x1_t, int64x1_t)
30412
30413    * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t)
30414      _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0'
30415
30416    * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t)
30417      _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0'
30418
30419    * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t)
30420      _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0'
30421
30422    * int32x4_t vaddq_s32 (int32x4_t, int32x4_t)
30423      _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0'
30424
30425    * int16x8_t vaddq_s16 (int16x8_t, int16x8_t)
30426      _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0'
30427
30428    * int8x16_t vaddq_s8 (int8x16_t, int8x16_t)
30429      _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0'
30430
30431    * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t)
30432      _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0'
30433
30434    * int64x2_t vaddq_s64 (int64x2_t, int64x2_t)
30435      _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0'
30436
30437    * float32x4_t vaddq_f32 (float32x4_t, float32x4_t)
30438      _Form of expected instruction(s):_ `vadd.f32 Q0, Q0, Q0'
30439
30440    * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t)
30441      _Form of expected instruction(s):_ `vaddl.u32 Q0, D0, D0'
30442
30443    * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t)
30444      _Form of expected instruction(s):_ `vaddl.u16 Q0, D0, D0'
30445
30446    * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t)
30447      _Form of expected instruction(s):_ `vaddl.u8 Q0, D0, D0'
30448
30449    * int64x2_t vaddl_s32 (int32x2_t, int32x2_t)
30450      _Form of expected instruction(s):_ `vaddl.s32 Q0, D0, D0'
30451
30452    * int32x4_t vaddl_s16 (int16x4_t, int16x4_t)
30453      _Form of expected instruction(s):_ `vaddl.s16 Q0, D0, D0'
30454
30455    * int16x8_t vaddl_s8 (int8x8_t, int8x8_t)
30456      _Form of expected instruction(s):_ `vaddl.s8 Q0, D0, D0'
30457
30458    * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t)
30459      _Form of expected instruction(s):_ `vaddw.u32 Q0, Q0, D0'
30460
30461    * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t)
30462      _Form of expected instruction(s):_ `vaddw.u16 Q0, Q0, D0'
30463
30464    * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t)
30465      _Form of expected instruction(s):_ `vaddw.u8 Q0, Q0, D0'
30466
30467    * int64x2_t vaddw_s32 (int64x2_t, int32x2_t)
30468      _Form of expected instruction(s):_ `vaddw.s32 Q0, Q0, D0'
30469
30470    * int32x4_t vaddw_s16 (int32x4_t, int16x4_t)
30471      _Form of expected instruction(s):_ `vaddw.s16 Q0, Q0, D0'
30472
30473    * int16x8_t vaddw_s8 (int16x8_t, int8x8_t)
30474      _Form of expected instruction(s):_ `vaddw.s8 Q0, Q0, D0'
30475
30476    * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t)
30477      _Form of expected instruction(s):_ `vhadd.u32 D0, D0, D0'
30478
30479    * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t)
30480      _Form of expected instruction(s):_ `vhadd.u16 D0, D0, D0'
30481
30482    * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t)
30483      _Form of expected instruction(s):_ `vhadd.u8 D0, D0, D0'
30484
30485    * int32x2_t vhadd_s32 (int32x2_t, int32x2_t)
30486      _Form of expected instruction(s):_ `vhadd.s32 D0, D0, D0'
30487
30488    * int16x4_t vhadd_s16 (int16x4_t, int16x4_t)
30489      _Form of expected instruction(s):_ `vhadd.s16 D0, D0, D0'
30490
30491    * int8x8_t vhadd_s8 (int8x8_t, int8x8_t)
30492      _Form of expected instruction(s):_ `vhadd.s8 D0, D0, D0'
30493
30494    * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t)
30495      _Form of expected instruction(s):_ `vhadd.u32 Q0, Q0, Q0'
30496
30497    * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t)
30498      _Form of expected instruction(s):_ `vhadd.u16 Q0, Q0, Q0'
30499
30500    * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t)
30501      _Form of expected instruction(s):_ `vhadd.u8 Q0, Q0, Q0'
30502
30503    * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t)
30504      _Form of expected instruction(s):_ `vhadd.s32 Q0, Q0, Q0'
30505
30506    * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t)
30507      _Form of expected instruction(s):_ `vhadd.s16 Q0, Q0, Q0'
30508
30509    * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t)
30510      _Form of expected instruction(s):_ `vhadd.s8 Q0, Q0, Q0'
30511
30512    * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t)
30513      _Form of expected instruction(s):_ `vrhadd.u32 D0, D0, D0'
30514
30515    * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t)
30516      _Form of expected instruction(s):_ `vrhadd.u16 D0, D0, D0'
30517
30518    * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t)
30519      _Form of expected instruction(s):_ `vrhadd.u8 D0, D0, D0'
30520
30521    * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t)
30522      _Form of expected instruction(s):_ `vrhadd.s32 D0, D0, D0'
30523
30524    * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t)
30525      _Form of expected instruction(s):_ `vrhadd.s16 D0, D0, D0'
30526
30527    * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t)
30528      _Form of expected instruction(s):_ `vrhadd.s8 D0, D0, D0'
30529
30530    * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t)
30531      _Form of expected instruction(s):_ `vrhadd.u32 Q0, Q0, Q0'
30532
30533    * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t)
30534      _Form of expected instruction(s):_ `vrhadd.u16 Q0, Q0, Q0'
30535
30536    * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t)
30537      _Form of expected instruction(s):_ `vrhadd.u8 Q0, Q0, Q0'
30538
30539    * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t)
30540      _Form of expected instruction(s):_ `vrhadd.s32 Q0, Q0, Q0'
30541
30542    * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t)
30543      _Form of expected instruction(s):_ `vrhadd.s16 Q0, Q0, Q0'
30544
30545    * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t)
30546      _Form of expected instruction(s):_ `vrhadd.s8 Q0, Q0, Q0'
30547
30548    * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t)
30549      _Form of expected instruction(s):_ `vqadd.u32 D0, D0, D0'
30550
30551    * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t)
30552      _Form of expected instruction(s):_ `vqadd.u16 D0, D0, D0'
30553
30554    * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t)
30555      _Form of expected instruction(s):_ `vqadd.u8 D0, D0, D0'
30556
30557    * int32x2_t vqadd_s32 (int32x2_t, int32x2_t)
30558      _Form of expected instruction(s):_ `vqadd.s32 D0, D0, D0'
30559
30560    * int16x4_t vqadd_s16 (int16x4_t, int16x4_t)
30561      _Form of expected instruction(s):_ `vqadd.s16 D0, D0, D0'
30562
30563    * int8x8_t vqadd_s8 (int8x8_t, int8x8_t)
30564      _Form of expected instruction(s):_ `vqadd.s8 D0, D0, D0'
30565
30566    * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t)
30567      _Form of expected instruction(s):_ `vqadd.u64 D0, D0, D0'
30568
30569    * int64x1_t vqadd_s64 (int64x1_t, int64x1_t)
30570      _Form of expected instruction(s):_ `vqadd.s64 D0, D0, D0'
30571
30572    * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t)
30573      _Form of expected instruction(s):_ `vqadd.u32 Q0, Q0, Q0'
30574
30575    * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t)
30576      _Form of expected instruction(s):_ `vqadd.u16 Q0, Q0, Q0'
30577
30578    * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t)
30579      _Form of expected instruction(s):_ `vqadd.u8 Q0, Q0, Q0'
30580
30581    * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t)
30582      _Form of expected instruction(s):_ `vqadd.s32 Q0, Q0, Q0'
30583
30584    * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t)
30585      _Form of expected instruction(s):_ `vqadd.s16 Q0, Q0, Q0'
30586
30587    * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t)
30588      _Form of expected instruction(s):_ `vqadd.s8 Q0, Q0, Q0'
30589
30590    * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t)
30591      _Form of expected instruction(s):_ `vqadd.u64 Q0, Q0, Q0'
30592
30593    * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t)
30594      _Form of expected instruction(s):_ `vqadd.s64 Q0, Q0, Q0'
30595
30596    * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t)
30597      _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0'
30598
30599    * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t)
30600      _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0'
30601
30602    * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t)
30603      _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0'
30604
30605    * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t)
30606      _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0'
30607
30608    * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t)
30609      _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0'
30610
30611    * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t)
30612      _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0'
30613
30614    * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t)
30615      _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0'
30616
30617    * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t)
30618      _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0'
30619
30620    * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t)
30621      _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0'
30622
30623    * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t)
30624      _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0'
30625
30626    * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t)
30627      _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0'
30628
30629    * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t)
30630      _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0'
30631
30632 6.56.3.2 Multiplication
30633 .......................
30634
30635    * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t)
30636      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0'
30637
30638    * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t)
30639      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0'
30640
30641    * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t)
30642      _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0'
30643
30644    * int32x2_t vmul_s32 (int32x2_t, int32x2_t)
30645      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0'
30646
30647    * int16x4_t vmul_s16 (int16x4_t, int16x4_t)
30648      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0'
30649
30650    * int8x8_t vmul_s8 (int8x8_t, int8x8_t)
30651      _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0'
30652
30653    * float32x2_t vmul_f32 (float32x2_t, float32x2_t)
30654      _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0'
30655
30656    * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t)
30657      _Form of expected instruction(s):_ `vmul.p8 D0, D0, D0'
30658
30659    * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t)
30660      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0'
30661
30662    * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t)
30663      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0'
30664
30665    * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t)
30666      _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0'
30667
30668    * int32x4_t vmulq_s32 (int32x4_t, int32x4_t)
30669      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0'
30670
30671    * int16x8_t vmulq_s16 (int16x8_t, int16x8_t)
30672      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0'
30673
30674    * int8x16_t vmulq_s8 (int8x16_t, int8x16_t)
30675      _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0'
30676
30677    * float32x4_t vmulq_f32 (float32x4_t, float32x4_t)
30678      _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, Q0'
30679
30680    * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t)
30681      _Form of expected instruction(s):_ `vmul.p8 Q0, Q0, Q0'
30682
30683    * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t)
30684      _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0'
30685
30686    * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t)
30687      _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0'
30688
30689    * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t)
30690      _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, Q0'
30691
30692    * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t)
30693      _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, Q0'
30694
30695    * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t)
30696      _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0'
30697
30698    * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t)
30699      _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0'
30700
30701    * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t)
30702      _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, Q0'
30703
30704    * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t)
30705      _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, Q0'
30706
30707    * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t)
30708      _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0'
30709
30710    * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t)
30711      _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0'
30712
30713    * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t)
30714      _Form of expected instruction(s):_ `vmull.u8 Q0, D0, D0'
30715
30716    * int64x2_t vmull_s32 (int32x2_t, int32x2_t)
30717      _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0'
30718
30719    * int32x4_t vmull_s16 (int16x4_t, int16x4_t)
30720      _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0'
30721
30722    * int16x8_t vmull_s8 (int8x8_t, int8x8_t)
30723      _Form of expected instruction(s):_ `vmull.s8 Q0, D0, D0'
30724
30725    * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t)
30726      _Form of expected instruction(s):_ `vmull.p8 Q0, D0, D0'
30727
30728    * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t)
30729      _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0'
30730
30731    * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t)
30732      _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0'
30733
30734 6.56.3.3 Multiply-accumulate
30735 ............................
30736
30737    * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
30738      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0'
30739
30740    * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
30741      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0'
30742
30743    * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
30744      _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0'
30745
30746    * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t)
30747      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0'
30748
30749    * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t)
30750      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0'
30751
30752    * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t)
30753      _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0'
30754
30755    * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t)
30756      _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0'
30757
30758    * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
30759      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0'
30760
30761    * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
30762      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0'
30763
30764    * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
30765      _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0'
30766
30767    * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t)
30768      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0'
30769
30770    * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t)
30771      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0'
30772
30773    * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t)
30774      _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0'
30775
30776    * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t)
30777      _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, Q0'
30778
30779    * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
30780      _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0'
30781
30782    * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
30783      _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0'
30784
30785    * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
30786      _Form of expected instruction(s):_ `vmlal.u8 Q0, D0, D0'
30787
30788    * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
30789      _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0'
30790
30791    * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
30792      _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0'
30793
30794    * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t)
30795      _Form of expected instruction(s):_ `vmlal.s8 Q0, D0, D0'
30796
30797    * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
30798      _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0'
30799
30800    * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
30801      _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0'
30802
30803 6.56.3.4 Multiply-subtract
30804 ..........................
30805
30806    * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
30807      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0'
30808
30809    * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
30810      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0'
30811
30812    * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
30813      _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0'
30814
30815    * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t)
30816      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0'
30817
30818    * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t)
30819      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0'
30820
30821    * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t)
30822      _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0'
30823
30824    * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t)
30825      _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0'
30826
30827    * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
30828      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0'
30829
30830    * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
30831      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0'
30832
30833    * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
30834      _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0'
30835
30836    * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t)
30837      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0'
30838
30839    * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t)
30840      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0'
30841
30842    * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t)
30843      _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0'
30844
30845    * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t)
30846      _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, Q0'
30847
30848    * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
30849      _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0'
30850
30851    * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
30852      _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0'
30853
30854    * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
30855      _Form of expected instruction(s):_ `vmlsl.u8 Q0, D0, D0'
30856
30857    * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
30858      _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0'
30859
30860    * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
30861      _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0'
30862
30863    * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t)
30864      _Form of expected instruction(s):_ `vmlsl.s8 Q0, D0, D0'
30865
30866    * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
30867      _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0'
30868
30869    * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
30870      _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0'
30871
30872 6.56.3.5 Fused-multiply-accumulate
30873 ..................................
30874
30875    * float32x2_t vfma_f32 (float32x2_t, float32x2_t, float32x2_t)
30876      _Form of expected instruction(s):_ `vfma.f32 D0, D0, D0'
30877
30878    * float32x4_t vfmaq_f32 (float32x4_t, float32x4_t, float32x4_t)
30879      _Form of expected instruction(s):_ `vfma.f32 Q0, Q0, Q0'
30880
30881 6.56.3.6 Fused-multiply-subtract
30882 ................................
30883
30884    * float32x2_t vfms_f32 (float32x2_t, float32x2_t, float32x2_t)
30885      _Form of expected instruction(s):_ `vfms.f32 D0, D0, D0'
30886
30887    * float32x4_t vfmsq_f32 (float32x4_t, float32x4_t, float32x4_t)
30888      _Form of expected instruction(s):_ `vfms.f32 Q0, Q0, Q0'
30889
30890 6.56.3.7 Round to integral (to nearest, ties to even)
30891 .....................................................
30892
30893    * float32x2_t vrndn_f32 (float32x2_t)
30894      _Form of expected instruction(s):_ `vrintn.f32 D0, D0'
30895
30896    * float32x4_t vrndqn_f32 (float32x4_t)
30897      _Form of expected instruction(s):_ `vrintn.f32 Q0, Q0'
30898
30899 6.56.3.8 Round to integral (to nearest, ties away from zero)
30900 ............................................................
30901
30902    * float32x2_t vrnda_f32 (float32x2_t)
30903      _Form of expected instruction(s):_ `vrinta.f32 D0, D0'
30904
30905    * float32x4_t vrndqa_f32 (float32x4_t)
30906      _Form of expected instruction(s):_ `vrinta.f32 Q0, Q0'
30907
30908 6.56.3.9 Round to integral (towards +Inf)
30909 .........................................
30910
30911    * float32x2_t vrndp_f32 (float32x2_t)
30912      _Form of expected instruction(s):_ `vrintp.f32 D0, D0'
30913
30914    * float32x4_t vrndqp_f32 (float32x4_t)
30915      _Form of expected instruction(s):_ `vrintp.f32 Q0, Q0'
30916
30917 6.56.3.10 Round to integral (towards -Inf)
30918 ..........................................
30919
30920    * float32x2_t vrndm_f32 (float32x2_t)
30921      _Form of expected instruction(s):_ `vrintm.f32 D0, D0'
30922
30923    * float32x4_t vrndqm_f32 (float32x4_t)
30924      _Form of expected instruction(s):_ `vrintm.f32 Q0, Q0'
30925
30926 6.56.3.11 Round to integral (towards 0)
30927 .......................................
30928
30929    * float32x2_t vrnd_f32 (float32x2_t)
30930      _Form of expected instruction(s):_ `vrintz.f32 D0, D0'
30931
30932    * float32x4_t vrndq_f32 (float32x4_t)
30933      _Form of expected instruction(s):_ `vrintz.f32 Q0, Q0'
30934
30935 6.56.3.12 Subtraction
30936 .....................
30937
30938    * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t)
30939      _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0'
30940
30941    * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t)
30942      _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0'
30943
30944    * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t)
30945      _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0'
30946
30947    * int32x2_t vsub_s32 (int32x2_t, int32x2_t)
30948      _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0'
30949
30950    * int16x4_t vsub_s16 (int16x4_t, int16x4_t)
30951      _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0'
30952
30953    * int8x8_t vsub_s8 (int8x8_t, int8x8_t)
30954      _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0'
30955
30956    * float32x2_t vsub_f32 (float32x2_t, float32x2_t)
30957      _Form of expected instruction(s):_ `vsub.f32 D0, D0, D0'
30958
30959    * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t)
30960
30961    * int64x1_t vsub_s64 (int64x1_t, int64x1_t)
30962
30963    * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t)
30964      _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0'
30965
30966    * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t)
30967      _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0'
30968
30969    * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t)
30970      _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0'
30971
30972    * int32x4_t vsubq_s32 (int32x4_t, int32x4_t)
30973      _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0'
30974
30975    * int16x8_t vsubq_s16 (int16x8_t, int16x8_t)
30976      _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0'
30977
30978    * int8x16_t vsubq_s8 (int8x16_t, int8x16_t)
30979      _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0'
30980
30981    * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t)
30982      _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0'
30983
30984    * int64x2_t vsubq_s64 (int64x2_t, int64x2_t)
30985      _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0'
30986
30987    * float32x4_t vsubq_f32 (float32x4_t, float32x4_t)
30988      _Form of expected instruction(s):_ `vsub.f32 Q0, Q0, Q0'
30989
30990    * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t)
30991      _Form of expected instruction(s):_ `vsubl.u32 Q0, D0, D0'
30992
30993    * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t)
30994      _Form of expected instruction(s):_ `vsubl.u16 Q0, D0, D0'
30995
30996    * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t)
30997      _Form of expected instruction(s):_ `vsubl.u8 Q0, D0, D0'
30998
30999    * int64x2_t vsubl_s32 (int32x2_t, int32x2_t)
31000      _Form of expected instruction(s):_ `vsubl.s32 Q0, D0, D0'
31001
31002    * int32x4_t vsubl_s16 (int16x4_t, int16x4_t)
31003      _Form of expected instruction(s):_ `vsubl.s16 Q0, D0, D0'
31004
31005    * int16x8_t vsubl_s8 (int8x8_t, int8x8_t)
31006      _Form of expected instruction(s):_ `vsubl.s8 Q0, D0, D0'
31007
31008    * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t)
31009      _Form of expected instruction(s):_ `vsubw.u32 Q0, Q0, D0'
31010
31011    * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t)
31012      _Form of expected instruction(s):_ `vsubw.u16 Q0, Q0, D0'
31013
31014    * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t)
31015      _Form of expected instruction(s):_ `vsubw.u8 Q0, Q0, D0'
31016
31017    * int64x2_t vsubw_s32 (int64x2_t, int32x2_t)
31018      _Form of expected instruction(s):_ `vsubw.s32 Q0, Q0, D0'
31019
31020    * int32x4_t vsubw_s16 (int32x4_t, int16x4_t)
31021      _Form of expected instruction(s):_ `vsubw.s16 Q0, Q0, D0'
31022
31023    * int16x8_t vsubw_s8 (int16x8_t, int8x8_t)
31024      _Form of expected instruction(s):_ `vsubw.s8 Q0, Q0, D0'
31025
31026    * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t)
31027      _Form of expected instruction(s):_ `vhsub.u32 D0, D0, D0'
31028
31029    * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t)
31030      _Form of expected instruction(s):_ `vhsub.u16 D0, D0, D0'
31031
31032    * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t)
31033      _Form of expected instruction(s):_ `vhsub.u8 D0, D0, D0'
31034
31035    * int32x2_t vhsub_s32 (int32x2_t, int32x2_t)
31036      _Form of expected instruction(s):_ `vhsub.s32 D0, D0, D0'
31037
31038    * int16x4_t vhsub_s16 (int16x4_t, int16x4_t)
31039      _Form of expected instruction(s):_ `vhsub.s16 D0, D0, D0'
31040
31041    * int8x8_t vhsub_s8 (int8x8_t, int8x8_t)
31042      _Form of expected instruction(s):_ `vhsub.s8 D0, D0, D0'
31043
31044    * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t)
31045      _Form of expected instruction(s):_ `vhsub.u32 Q0, Q0, Q0'
31046
31047    * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t)
31048      _Form of expected instruction(s):_ `vhsub.u16 Q0, Q0, Q0'
31049
31050    * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t)
31051      _Form of expected instruction(s):_ `vhsub.u8 Q0, Q0, Q0'
31052
31053    * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t)
31054      _Form of expected instruction(s):_ `vhsub.s32 Q0, Q0, Q0'
31055
31056    * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t)
31057      _Form of expected instruction(s):_ `vhsub.s16 Q0, Q0, Q0'
31058
31059    * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t)
31060      _Form of expected instruction(s):_ `vhsub.s8 Q0, Q0, Q0'
31061
31062    * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t)
31063      _Form of expected instruction(s):_ `vqsub.u32 D0, D0, D0'
31064
31065    * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t)
31066      _Form of expected instruction(s):_ `vqsub.u16 D0, D0, D0'
31067
31068    * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t)
31069      _Form of expected instruction(s):_ `vqsub.u8 D0, D0, D0'
31070
31071    * int32x2_t vqsub_s32 (int32x2_t, int32x2_t)
31072      _Form of expected instruction(s):_ `vqsub.s32 D0, D0, D0'
31073
31074    * int16x4_t vqsub_s16 (int16x4_t, int16x4_t)
31075      _Form of expected instruction(s):_ `vqsub.s16 D0, D0, D0'
31076
31077    * int8x8_t vqsub_s8 (int8x8_t, int8x8_t)
31078      _Form of expected instruction(s):_ `vqsub.s8 D0, D0, D0'
31079
31080    * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t)
31081      _Form of expected instruction(s):_ `vqsub.u64 D0, D0, D0'
31082
31083    * int64x1_t vqsub_s64 (int64x1_t, int64x1_t)
31084      _Form of expected instruction(s):_ `vqsub.s64 D0, D0, D0'
31085
31086    * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t)
31087      _Form of expected instruction(s):_ `vqsub.u32 Q0, Q0, Q0'
31088
31089    * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t)
31090      _Form of expected instruction(s):_ `vqsub.u16 Q0, Q0, Q0'
31091
31092    * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t)
31093      _Form of expected instruction(s):_ `vqsub.u8 Q0, Q0, Q0'
31094
31095    * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t)
31096      _Form of expected instruction(s):_ `vqsub.s32 Q0, Q0, Q0'
31097
31098    * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t)
31099      _Form of expected instruction(s):_ `vqsub.s16 Q0, Q0, Q0'
31100
31101    * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t)
31102      _Form of expected instruction(s):_ `vqsub.s8 Q0, Q0, Q0'
31103
31104    * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t)
31105      _Form of expected instruction(s):_ `vqsub.u64 Q0, Q0, Q0'
31106
31107    * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t)
31108      _Form of expected instruction(s):_ `vqsub.s64 Q0, Q0, Q0'
31109
31110    * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t)
31111      _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0'
31112
31113    * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t)
31114      _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0'
31115
31116    * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t)
31117      _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0'
31118
31119    * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t)
31120      _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0'
31121
31122    * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t)
31123      _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0'
31124
31125    * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t)
31126      _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0'
31127
31128    * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t)
31129      _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0'
31130
31131    * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t)
31132      _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0'
31133
31134    * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t)
31135      _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0'
31136
31137    * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t)
31138      _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0'
31139
31140    * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t)
31141      _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0'
31142
31143    * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t)
31144      _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0'
31145
31146 6.56.3.13 Comparison (equal-to)
31147 ...............................
31148
31149    * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t)
31150      _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0'
31151
31152    * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t)
31153      _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0'
31154
31155    * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t)
31156      _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
31157
31158    * uint32x2_t vceq_s32 (int32x2_t, int32x2_t)
31159      _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0'
31160
31161    * uint16x4_t vceq_s16 (int16x4_t, int16x4_t)
31162      _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0'
31163
31164    * uint8x8_t vceq_s8 (int8x8_t, int8x8_t)
31165      _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
31166
31167    * uint32x2_t vceq_f32 (float32x2_t, float32x2_t)
31168      _Form of expected instruction(s):_ `vceq.f32 D0, D0, D0'
31169
31170    * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t)
31171      _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
31172
31173    * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t)
31174      _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0'
31175
31176    * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t)
31177      _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0'
31178
31179    * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t)
31180      _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
31181
31182    * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t)
31183      _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0'
31184
31185    * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t)
31186      _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0'
31187
31188    * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t)
31189      _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
31190
31191    * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t)
31192      _Form of expected instruction(s):_ `vceq.f32 Q0, Q0, Q0'
31193
31194    * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t)
31195      _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
31196
31197 6.56.3.14 Comparison (greater-than-or-equal-to)
31198 ...............................................
31199
31200    * uint32x2_t vcge_s32 (int32x2_t, int32x2_t)
31201      _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0'
31202
31203    * uint16x4_t vcge_s16 (int16x4_t, int16x4_t)
31204      _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0'
31205
31206    * uint8x8_t vcge_s8 (int8x8_t, int8x8_t)
31207      _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0'
31208
31209    * uint32x2_t vcge_f32 (float32x2_t, float32x2_t)
31210      _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0'
31211
31212    * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t)
31213      _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0'
31214
31215    * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t)
31216      _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0'
31217
31218    * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t)
31219      _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0'
31220
31221    * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t)
31222      _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0'
31223
31224    * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t)
31225      _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0'
31226
31227    * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t)
31228      _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0'
31229
31230    * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t)
31231      _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0'
31232
31233    * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t)
31234      _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0'
31235
31236    * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t)
31237      _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0'
31238
31239    * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t)
31240      _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0'
31241
31242 6.56.3.15 Comparison (less-than-or-equal-to)
31243 ............................................
31244
31245    * uint32x2_t vcle_s32 (int32x2_t, int32x2_t)
31246      _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0'
31247
31248    * uint16x4_t vcle_s16 (int16x4_t, int16x4_t)
31249      _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0'
31250
31251    * uint8x8_t vcle_s8 (int8x8_t, int8x8_t)
31252      _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0'
31253
31254    * uint32x2_t vcle_f32 (float32x2_t, float32x2_t)
31255      _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0'
31256
31257    * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t)
31258      _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0'
31259
31260    * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t)
31261      _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0'
31262
31263    * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t)
31264      _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0'
31265
31266    * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t)
31267      _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0'
31268
31269    * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t)
31270      _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0'
31271
31272    * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t)
31273      _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0'
31274
31275    * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t)
31276      _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0'
31277
31278    * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t)
31279      _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0'
31280
31281    * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t)
31282      _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0'
31283
31284    * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t)
31285      _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0'
31286
31287 6.56.3.16 Comparison (greater-than)
31288 ...................................
31289
31290    * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t)
31291      _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0'
31292
31293    * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t)
31294      _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0'
31295
31296    * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t)
31297      _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0'
31298
31299    * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t)
31300      _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0'
31301
31302    * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t)
31303      _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0'
31304
31305    * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t)
31306      _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0'
31307
31308    * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t)
31309      _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0'
31310
31311    * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t)
31312      _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0'
31313
31314    * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t)
31315      _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0'
31316
31317    * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t)
31318      _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0'
31319
31320    * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t)
31321      _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0'
31322
31323    * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t)
31324      _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0'
31325
31326    * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t)
31327      _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0'
31328
31329    * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t)
31330      _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0'
31331
31332 6.56.3.17 Comparison (less-than)
31333 ................................
31334
31335    * uint32x2_t vclt_s32 (int32x2_t, int32x2_t)
31336      _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0'
31337
31338    * uint16x4_t vclt_s16 (int16x4_t, int16x4_t)
31339      _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0'
31340
31341    * uint8x8_t vclt_s8 (int8x8_t, int8x8_t)
31342      _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0'
31343
31344    * uint32x2_t vclt_f32 (float32x2_t, float32x2_t)
31345      _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0'
31346
31347    * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t)
31348      _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0'
31349
31350    * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t)
31351      _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0'
31352
31353    * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t)
31354      _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0'
31355
31356    * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t)
31357      _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0'
31358
31359    * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t)
31360      _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0'
31361
31362    * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t)
31363      _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0'
31364
31365    * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t)
31366      _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0'
31367
31368    * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t)
31369      _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0'
31370
31371    * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t)
31372      _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0'
31373
31374    * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t)
31375      _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0'
31376
31377 6.56.3.18 Comparison (absolute greater-than-or-equal-to)
31378 ........................................................
31379
31380    * uint32x2_t vcage_f32 (float32x2_t, float32x2_t)
31381      _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0'
31382
31383    * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t)
31384      _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0'
31385
31386 6.56.3.19 Comparison (absolute less-than-or-equal-to)
31387 .....................................................
31388
31389    * uint32x2_t vcale_f32 (float32x2_t, float32x2_t)
31390      _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0'
31391
31392    * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t)
31393      _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0'
31394
31395 6.56.3.20 Comparison (absolute greater-than)
31396 ............................................
31397
31398    * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t)
31399      _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0'
31400
31401    * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t)
31402      _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0'
31403
31404 6.56.3.21 Comparison (absolute less-than)
31405 .........................................
31406
31407    * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t)
31408      _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0'
31409
31410    * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t)
31411      _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0'
31412
31413 6.56.3.22 Test bits
31414 ...................
31415
31416    * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t)
31417      _Form of expected instruction(s):_ `vtst.32 D0, D0, D0'
31418
31419    * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t)
31420      _Form of expected instruction(s):_ `vtst.16 D0, D0, D0'
31421
31422    * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t)
31423      _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
31424
31425    * uint32x2_t vtst_s32 (int32x2_t, int32x2_t)
31426      _Form of expected instruction(s):_ `vtst.32 D0, D0, D0'
31427
31428    * uint16x4_t vtst_s16 (int16x4_t, int16x4_t)
31429      _Form of expected instruction(s):_ `vtst.16 D0, D0, D0'
31430
31431    * uint8x8_t vtst_s8 (int8x8_t, int8x8_t)
31432      _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
31433
31434    * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t)
31435      _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
31436
31437    * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t)
31438      _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0'
31439
31440    * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t)
31441      _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0'
31442
31443    * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t)
31444      _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
31445
31446    * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t)
31447      _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0'
31448
31449    * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t)
31450      _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0'
31451
31452    * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t)
31453      _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
31454
31455    * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t)
31456      _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
31457
31458 6.56.3.23 Absolute difference
31459 .............................
31460
31461    * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t)
31462      _Form of expected instruction(s):_ `vabd.u32 D0, D0, D0'
31463
31464    * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t)
31465      _Form of expected instruction(s):_ `vabd.u16 D0, D0, D0'
31466
31467    * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t)
31468      _Form of expected instruction(s):_ `vabd.u8 D0, D0, D0'
31469
31470    * int32x2_t vabd_s32 (int32x2_t, int32x2_t)
31471      _Form of expected instruction(s):_ `vabd.s32 D0, D0, D0'
31472
31473    * int16x4_t vabd_s16 (int16x4_t, int16x4_t)
31474      _Form of expected instruction(s):_ `vabd.s16 D0, D0, D0'
31475
31476    * int8x8_t vabd_s8 (int8x8_t, int8x8_t)
31477      _Form of expected instruction(s):_ `vabd.s8 D0, D0, D0'
31478
31479    * float32x2_t vabd_f32 (float32x2_t, float32x2_t)
31480      _Form of expected instruction(s):_ `vabd.f32 D0, D0, D0'
31481
31482    * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t)
31483      _Form of expected instruction(s):_ `vabd.u32 Q0, Q0, Q0'
31484
31485    * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t)
31486      _Form of expected instruction(s):_ `vabd.u16 Q0, Q0, Q0'
31487
31488    * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t)
31489      _Form of expected instruction(s):_ `vabd.u8 Q0, Q0, Q0'
31490
31491    * int32x4_t vabdq_s32 (int32x4_t, int32x4_t)
31492      _Form of expected instruction(s):_ `vabd.s32 Q0, Q0, Q0'
31493
31494    * int16x8_t vabdq_s16 (int16x8_t, int16x8_t)
31495      _Form of expected instruction(s):_ `vabd.s16 Q0, Q0, Q0'
31496
31497    * int8x16_t vabdq_s8 (int8x16_t, int8x16_t)
31498      _Form of expected instruction(s):_ `vabd.s8 Q0, Q0, Q0'
31499
31500    * float32x4_t vabdq_f32 (float32x4_t, float32x4_t)
31501      _Form of expected instruction(s):_ `vabd.f32 Q0, Q0, Q0'
31502
31503    * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t)
31504      _Form of expected instruction(s):_ `vabdl.u32 Q0, D0, D0'
31505
31506    * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t)
31507      _Form of expected instruction(s):_ `vabdl.u16 Q0, D0, D0'
31508
31509    * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t)
31510      _Form of expected instruction(s):_ `vabdl.u8 Q0, D0, D0'
31511
31512    * int64x2_t vabdl_s32 (int32x2_t, int32x2_t)
31513      _Form of expected instruction(s):_ `vabdl.s32 Q0, D0, D0'
31514
31515    * int32x4_t vabdl_s16 (int16x4_t, int16x4_t)
31516      _Form of expected instruction(s):_ `vabdl.s16 Q0, D0, D0'
31517
31518    * int16x8_t vabdl_s8 (int8x8_t, int8x8_t)
31519      _Form of expected instruction(s):_ `vabdl.s8 Q0, D0, D0'
31520
31521 6.56.3.24 Absolute difference and accumulate
31522 ............................................
31523
31524    * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
31525      _Form of expected instruction(s):_ `vaba.u32 D0, D0, D0'
31526
31527    * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
31528      _Form of expected instruction(s):_ `vaba.u16 D0, D0, D0'
31529
31530    * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
31531      _Form of expected instruction(s):_ `vaba.u8 D0, D0, D0'
31532
31533    * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t)
31534      _Form of expected instruction(s):_ `vaba.s32 D0, D0, D0'
31535
31536    * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t)
31537      _Form of expected instruction(s):_ `vaba.s16 D0, D0, D0'
31538
31539    * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t)
31540      _Form of expected instruction(s):_ `vaba.s8 D0, D0, D0'
31541
31542    * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
31543      _Form of expected instruction(s):_ `vaba.u32 Q0, Q0, Q0'
31544
31545    * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
31546      _Form of expected instruction(s):_ `vaba.u16 Q0, Q0, Q0'
31547
31548    * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
31549      _Form of expected instruction(s):_ `vaba.u8 Q0, Q0, Q0'
31550
31551    * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t)
31552      _Form of expected instruction(s):_ `vaba.s32 Q0, Q0, Q0'
31553
31554    * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t)
31555      _Form of expected instruction(s):_ `vaba.s16 Q0, Q0, Q0'
31556
31557    * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t)
31558      _Form of expected instruction(s):_ `vaba.s8 Q0, Q0, Q0'
31559
31560    * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
31561      _Form of expected instruction(s):_ `vabal.u32 Q0, D0, D0'
31562
31563    * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
31564      _Form of expected instruction(s):_ `vabal.u16 Q0, D0, D0'
31565
31566    * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
31567      _Form of expected instruction(s):_ `vabal.u8 Q0, D0, D0'
31568
31569    * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t)
31570      _Form of expected instruction(s):_ `vabal.s32 Q0, D0, D0'
31571
31572    * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t)
31573      _Form of expected instruction(s):_ `vabal.s16 Q0, D0, D0'
31574
31575    * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t)
31576      _Form of expected instruction(s):_ `vabal.s8 Q0, D0, D0'
31577
31578 6.56.3.25 Maximum
31579 .................
31580
31581    * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t)
31582      _Form of expected instruction(s):_ `vmax.u32 D0, D0, D0'
31583
31584    * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t)
31585      _Form of expected instruction(s):_ `vmax.u16 D0, D0, D0'
31586
31587    * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t)
31588      _Form of expected instruction(s):_ `vmax.u8 D0, D0, D0'
31589
31590    * int32x2_t vmax_s32 (int32x2_t, int32x2_t)
31591      _Form of expected instruction(s):_ `vmax.s32 D0, D0, D0'
31592
31593    * int16x4_t vmax_s16 (int16x4_t, int16x4_t)
31594      _Form of expected instruction(s):_ `vmax.s16 D0, D0, D0'
31595
31596    * int8x8_t vmax_s8 (int8x8_t, int8x8_t)
31597      _Form of expected instruction(s):_ `vmax.s8 D0, D0, D0'
31598
31599    * float32x2_t vmax_f32 (float32x2_t, float32x2_t)
31600      _Form of expected instruction(s):_ `vmax.f32 D0, D0, D0'
31601
31602    * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t)
31603      _Form of expected instruction(s):_ `vmax.u32 Q0, Q0, Q0'
31604
31605    * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t)
31606      _Form of expected instruction(s):_ `vmax.u16 Q0, Q0, Q0'
31607
31608    * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t)
31609      _Form of expected instruction(s):_ `vmax.u8 Q0, Q0, Q0'
31610
31611    * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t)
31612      _Form of expected instruction(s):_ `vmax.s32 Q0, Q0, Q0'
31613
31614    * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t)
31615      _Form of expected instruction(s):_ `vmax.s16 Q0, Q0, Q0'
31616
31617    * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t)
31618      _Form of expected instruction(s):_ `vmax.s8 Q0, Q0, Q0'
31619
31620    * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t)
31621      _Form of expected instruction(s):_ `vmax.f32 Q0, Q0, Q0'
31622
31623 6.56.3.26 Minimum
31624 .................
31625
31626    * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t)
31627      _Form of expected instruction(s):_ `vmin.u32 D0, D0, D0'
31628
31629    * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t)
31630      _Form of expected instruction(s):_ `vmin.u16 D0, D0, D0'
31631
31632    * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t)
31633      _Form of expected instruction(s):_ `vmin.u8 D0, D0, D0'
31634
31635    * int32x2_t vmin_s32 (int32x2_t, int32x2_t)
31636      _Form of expected instruction(s):_ `vmin.s32 D0, D0, D0'
31637
31638    * int16x4_t vmin_s16 (int16x4_t, int16x4_t)
31639      _Form of expected instruction(s):_ `vmin.s16 D0, D0, D0'
31640
31641    * int8x8_t vmin_s8 (int8x8_t, int8x8_t)
31642      _Form of expected instruction(s):_ `vmin.s8 D0, D0, D0'
31643
31644    * float32x2_t vmin_f32 (float32x2_t, float32x2_t)
31645      _Form of expected instruction(s):_ `vmin.f32 D0, D0, D0'
31646
31647    * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t)
31648      _Form of expected instruction(s):_ `vmin.u32 Q0, Q0, Q0'
31649
31650    * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t)
31651      _Form of expected instruction(s):_ `vmin.u16 Q0, Q0, Q0'
31652
31653    * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t)
31654      _Form of expected instruction(s):_ `vmin.u8 Q0, Q0, Q0'
31655
31656    * int32x4_t vminq_s32 (int32x4_t, int32x4_t)
31657      _Form of expected instruction(s):_ `vmin.s32 Q0, Q0, Q0'
31658
31659    * int16x8_t vminq_s16 (int16x8_t, int16x8_t)
31660      _Form of expected instruction(s):_ `vmin.s16 Q0, Q0, Q0'
31661
31662    * int8x16_t vminq_s8 (int8x16_t, int8x16_t)
31663      _Form of expected instruction(s):_ `vmin.s8 Q0, Q0, Q0'
31664
31665    * float32x4_t vminq_f32 (float32x4_t, float32x4_t)
31666      _Form of expected instruction(s):_ `vmin.f32 Q0, Q0, Q0'
31667
31668 6.56.3.27 Pairwise add
31669 ......................
31670
31671    * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t)
31672      _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0'
31673
31674    * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t)
31675      _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0'
31676
31677    * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t)
31678      _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0'
31679
31680    * int32x2_t vpadd_s32 (int32x2_t, int32x2_t)
31681      _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0'
31682
31683    * int16x4_t vpadd_s16 (int16x4_t, int16x4_t)
31684      _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0'
31685
31686    * int8x8_t vpadd_s8 (int8x8_t, int8x8_t)
31687      _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0'
31688
31689    * float32x2_t vpadd_f32 (float32x2_t, float32x2_t)
31690      _Form of expected instruction(s):_ `vpadd.f32 D0, D0, D0'
31691
31692    * uint64x1_t vpaddl_u32 (uint32x2_t)
31693      _Form of expected instruction(s):_ `vpaddl.u32 D0, D0'
31694
31695    * uint32x2_t vpaddl_u16 (uint16x4_t)
31696      _Form of expected instruction(s):_ `vpaddl.u16 D0, D0'
31697
31698    * uint16x4_t vpaddl_u8 (uint8x8_t)
31699      _Form of expected instruction(s):_ `vpaddl.u8 D0, D0'
31700
31701    * int64x1_t vpaddl_s32 (int32x2_t)
31702      _Form of expected instruction(s):_ `vpaddl.s32 D0, D0'
31703
31704    * int32x2_t vpaddl_s16 (int16x4_t)
31705      _Form of expected instruction(s):_ `vpaddl.s16 D0, D0'
31706
31707    * int16x4_t vpaddl_s8 (int8x8_t)
31708      _Form of expected instruction(s):_ `vpaddl.s8 D0, D0'
31709
31710    * uint64x2_t vpaddlq_u32 (uint32x4_t)
31711      _Form of expected instruction(s):_ `vpaddl.u32 Q0, Q0'
31712
31713    * uint32x4_t vpaddlq_u16 (uint16x8_t)
31714      _Form of expected instruction(s):_ `vpaddl.u16 Q0, Q0'
31715
31716    * uint16x8_t vpaddlq_u8 (uint8x16_t)
31717      _Form of expected instruction(s):_ `vpaddl.u8 Q0, Q0'
31718
31719    * int64x2_t vpaddlq_s32 (int32x4_t)
31720      _Form of expected instruction(s):_ `vpaddl.s32 Q0, Q0'
31721
31722    * int32x4_t vpaddlq_s16 (int16x8_t)
31723      _Form of expected instruction(s):_ `vpaddl.s16 Q0, Q0'
31724
31725    * int16x8_t vpaddlq_s8 (int8x16_t)
31726      _Form of expected instruction(s):_ `vpaddl.s8 Q0, Q0'
31727
31728 6.56.3.28 Pairwise add, single_opcode widen and accumulate
31729 ..........................................................
31730
31731    * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t)
31732      _Form of expected instruction(s):_ `vpadal.u32 D0, D0'
31733
31734    * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t)
31735      _Form of expected instruction(s):_ `vpadal.u16 D0, D0'
31736
31737    * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t)
31738      _Form of expected instruction(s):_ `vpadal.u8 D0, D0'
31739
31740    * int64x1_t vpadal_s32 (int64x1_t, int32x2_t)
31741      _Form of expected instruction(s):_ `vpadal.s32 D0, D0'
31742
31743    * int32x2_t vpadal_s16 (int32x2_t, int16x4_t)
31744      _Form of expected instruction(s):_ `vpadal.s16 D0, D0'
31745
31746    * int16x4_t vpadal_s8 (int16x4_t, int8x8_t)
31747      _Form of expected instruction(s):_ `vpadal.s8 D0, D0'
31748
31749    * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t)
31750      _Form of expected instruction(s):_ `vpadal.u32 Q0, Q0'
31751
31752    * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t)
31753      _Form of expected instruction(s):_ `vpadal.u16 Q0, Q0'
31754
31755    * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t)
31756      _Form of expected instruction(s):_ `vpadal.u8 Q0, Q0'
31757
31758    * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t)
31759      _Form of expected instruction(s):_ `vpadal.s32 Q0, Q0'
31760
31761    * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t)
31762      _Form of expected instruction(s):_ `vpadal.s16 Q0, Q0'
31763
31764    * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t)
31765      _Form of expected instruction(s):_ `vpadal.s8 Q0, Q0'
31766
31767 6.56.3.29 Folding maximum
31768 .........................
31769
31770    * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t)
31771      _Form of expected instruction(s):_ `vpmax.u32 D0, D0, D0'
31772
31773    * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t)
31774      _Form of expected instruction(s):_ `vpmax.u16 D0, D0, D0'
31775
31776    * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t)
31777      _Form of expected instruction(s):_ `vpmax.u8 D0, D0, D0'
31778
31779    * int32x2_t vpmax_s32 (int32x2_t, int32x2_t)
31780      _Form of expected instruction(s):_ `vpmax.s32 D0, D0, D0'
31781
31782    * int16x4_t vpmax_s16 (int16x4_t, int16x4_t)
31783      _Form of expected instruction(s):_ `vpmax.s16 D0, D0, D0'
31784
31785    * int8x8_t vpmax_s8 (int8x8_t, int8x8_t)
31786      _Form of expected instruction(s):_ `vpmax.s8 D0, D0, D0'
31787
31788    * float32x2_t vpmax_f32 (float32x2_t, float32x2_t)
31789      _Form of expected instruction(s):_ `vpmax.f32 D0, D0, D0'
31790
31791 6.56.3.30 Folding minimum
31792 .........................
31793
31794    * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t)
31795      _Form of expected instruction(s):_ `vpmin.u32 D0, D0, D0'
31796
31797    * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t)
31798      _Form of expected instruction(s):_ `vpmin.u16 D0, D0, D0'
31799
31800    * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t)
31801      _Form of expected instruction(s):_ `vpmin.u8 D0, D0, D0'
31802
31803    * int32x2_t vpmin_s32 (int32x2_t, int32x2_t)
31804      _Form of expected instruction(s):_ `vpmin.s32 D0, D0, D0'
31805
31806    * int16x4_t vpmin_s16 (int16x4_t, int16x4_t)
31807      _Form of expected instruction(s):_ `vpmin.s16 D0, D0, D0'
31808
31809    * int8x8_t vpmin_s8 (int8x8_t, int8x8_t)
31810      _Form of expected instruction(s):_ `vpmin.s8 D0, D0, D0'
31811
31812    * float32x2_t vpmin_f32 (float32x2_t, float32x2_t)
31813      _Form of expected instruction(s):_ `vpmin.f32 D0, D0, D0'
31814
31815 6.56.3.31 Reciprocal step
31816 .........................
31817
31818    * float32x2_t vrecps_f32 (float32x2_t, float32x2_t)
31819      _Form of expected instruction(s):_ `vrecps.f32 D0, D0, D0'
31820
31821    * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t)
31822      _Form of expected instruction(s):_ `vrecps.f32 Q0, Q0, Q0'
31823
31824    * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t)
31825      _Form of expected instruction(s):_ `vrsqrts.f32 D0, D0, D0'
31826
31827    * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t)
31828      _Form of expected instruction(s):_ `vrsqrts.f32 Q0, Q0, Q0'
31829
31830 6.56.3.32 Vector shift left
31831 ...........................
31832
31833    * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t)
31834      _Form of expected instruction(s):_ `vshl.u32 D0, D0, D0'
31835
31836    * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t)
31837      _Form of expected instruction(s):_ `vshl.u16 D0, D0, D0'
31838
31839    * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t)
31840      _Form of expected instruction(s):_ `vshl.u8 D0, D0, D0'
31841
31842    * int32x2_t vshl_s32 (int32x2_t, int32x2_t)
31843      _Form of expected instruction(s):_ `vshl.s32 D0, D0, D0'
31844
31845    * int16x4_t vshl_s16 (int16x4_t, int16x4_t)
31846      _Form of expected instruction(s):_ `vshl.s16 D0, D0, D0'
31847
31848    * int8x8_t vshl_s8 (int8x8_t, int8x8_t)
31849      _Form of expected instruction(s):_ `vshl.s8 D0, D0, D0'
31850
31851    * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t)
31852      _Form of expected instruction(s):_ `vshl.u64 D0, D0, D0'
31853
31854    * int64x1_t vshl_s64 (int64x1_t, int64x1_t)
31855      _Form of expected instruction(s):_ `vshl.s64 D0, D0, D0'
31856
31857    * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t)
31858      _Form of expected instruction(s):_ `vshl.u32 Q0, Q0, Q0'
31859
31860    * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t)
31861      _Form of expected instruction(s):_ `vshl.u16 Q0, Q0, Q0'
31862
31863    * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t)
31864      _Form of expected instruction(s):_ `vshl.u8 Q0, Q0, Q0'
31865
31866    * int32x4_t vshlq_s32 (int32x4_t, int32x4_t)
31867      _Form of expected instruction(s):_ `vshl.s32 Q0, Q0, Q0'
31868
31869    * int16x8_t vshlq_s16 (int16x8_t, int16x8_t)
31870      _Form of expected instruction(s):_ `vshl.s16 Q0, Q0, Q0'
31871
31872    * int8x16_t vshlq_s8 (int8x16_t, int8x16_t)
31873      _Form of expected instruction(s):_ `vshl.s8 Q0, Q0, Q0'
31874
31875    * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t)
31876      _Form of expected instruction(s):_ `vshl.u64 Q0, Q0, Q0'
31877
31878    * int64x2_t vshlq_s64 (int64x2_t, int64x2_t)
31879      _Form of expected instruction(s):_ `vshl.s64 Q0, Q0, Q0'
31880
31881    * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t)
31882      _Form of expected instruction(s):_ `vrshl.u32 D0, D0, D0'
31883
31884    * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t)
31885      _Form of expected instruction(s):_ `vrshl.u16 D0, D0, D0'
31886
31887    * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t)
31888      _Form of expected instruction(s):_ `vrshl.u8 D0, D0, D0'
31889
31890    * int32x2_t vrshl_s32 (int32x2_t, int32x2_t)
31891      _Form of expected instruction(s):_ `vrshl.s32 D0, D0, D0'
31892
31893    * int16x4_t vrshl_s16 (int16x4_t, int16x4_t)
31894      _Form of expected instruction(s):_ `vrshl.s16 D0, D0, D0'
31895
31896    * int8x8_t vrshl_s8 (int8x8_t, int8x8_t)
31897      _Form of expected instruction(s):_ `vrshl.s8 D0, D0, D0'
31898
31899    * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t)
31900      _Form of expected instruction(s):_ `vrshl.u64 D0, D0, D0'
31901
31902    * int64x1_t vrshl_s64 (int64x1_t, int64x1_t)
31903      _Form of expected instruction(s):_ `vrshl.s64 D0, D0, D0'
31904
31905    * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t)
31906      _Form of expected instruction(s):_ `vrshl.u32 Q0, Q0, Q0'
31907
31908    * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t)
31909      _Form of expected instruction(s):_ `vrshl.u16 Q0, Q0, Q0'
31910
31911    * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t)
31912      _Form of expected instruction(s):_ `vrshl.u8 Q0, Q0, Q0'
31913
31914    * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t)
31915      _Form of expected instruction(s):_ `vrshl.s32 Q0, Q0, Q0'
31916
31917    * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t)
31918      _Form of expected instruction(s):_ `vrshl.s16 Q0, Q0, Q0'
31919
31920    * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t)
31921      _Form of expected instruction(s):_ `vrshl.s8 Q0, Q0, Q0'
31922
31923    * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t)
31924      _Form of expected instruction(s):_ `vrshl.u64 Q0, Q0, Q0'
31925
31926    * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t)
31927      _Form of expected instruction(s):_ `vrshl.s64 Q0, Q0, Q0'
31928
31929    * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t)
31930      _Form of expected instruction(s):_ `vqshl.u32 D0, D0, D0'
31931
31932    * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t)
31933      _Form of expected instruction(s):_ `vqshl.u16 D0, D0, D0'
31934
31935    * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t)
31936      _Form of expected instruction(s):_ `vqshl.u8 D0, D0, D0'
31937
31938    * int32x2_t vqshl_s32 (int32x2_t, int32x2_t)
31939      _Form of expected instruction(s):_ `vqshl.s32 D0, D0, D0'
31940
31941    * int16x4_t vqshl_s16 (int16x4_t, int16x4_t)
31942      _Form of expected instruction(s):_ `vqshl.s16 D0, D0, D0'
31943
31944    * int8x8_t vqshl_s8 (int8x8_t, int8x8_t)
31945      _Form of expected instruction(s):_ `vqshl.s8 D0, D0, D0'
31946
31947    * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t)
31948      _Form of expected instruction(s):_ `vqshl.u64 D0, D0, D0'
31949
31950    * int64x1_t vqshl_s64 (int64x1_t, int64x1_t)
31951      _Form of expected instruction(s):_ `vqshl.s64 D0, D0, D0'
31952
31953    * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t)
31954      _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, Q0'
31955
31956    * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t)
31957      _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, Q0'
31958
31959    * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t)
31960      _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, Q0'
31961
31962    * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t)
31963      _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, Q0'
31964
31965    * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t)
31966      _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, Q0'
31967
31968    * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t)
31969      _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, Q0'
31970
31971    * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t)
31972      _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, Q0'
31973
31974    * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t)
31975      _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, Q0'
31976
31977    * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t)
31978      _Form of expected instruction(s):_ `vqrshl.u32 D0, D0, D0'
31979
31980    * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t)
31981      _Form of expected instruction(s):_ `vqrshl.u16 D0, D0, D0'
31982
31983    * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t)
31984      _Form of expected instruction(s):_ `vqrshl.u8 D0, D0, D0'
31985
31986    * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t)
31987      _Form of expected instruction(s):_ `vqrshl.s32 D0, D0, D0'
31988
31989    * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t)
31990      _Form of expected instruction(s):_ `vqrshl.s16 D0, D0, D0'
31991
31992    * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t)
31993      _Form of expected instruction(s):_ `vqrshl.s8 D0, D0, D0'
31994
31995    * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t)
31996      _Form of expected instruction(s):_ `vqrshl.u64 D0, D0, D0'
31997
31998    * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t)
31999      _Form of expected instruction(s):_ `vqrshl.s64 D0, D0, D0'
32000
32001    * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t)
32002      _Form of expected instruction(s):_ `vqrshl.u32 Q0, Q0, Q0'
32003
32004    * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t)
32005      _Form of expected instruction(s):_ `vqrshl.u16 Q0, Q0, Q0'
32006
32007    * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t)
32008      _Form of expected instruction(s):_ `vqrshl.u8 Q0, Q0, Q0'
32009
32010    * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t)
32011      _Form of expected instruction(s):_ `vqrshl.s32 Q0, Q0, Q0'
32012
32013    * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t)
32014      _Form of expected instruction(s):_ `vqrshl.s16 Q0, Q0, Q0'
32015
32016    * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t)
32017      _Form of expected instruction(s):_ `vqrshl.s8 Q0, Q0, Q0'
32018
32019    * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t)
32020      _Form of expected instruction(s):_ `vqrshl.u64 Q0, Q0, Q0'
32021
32022    * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t)
32023      _Form of expected instruction(s):_ `vqrshl.s64 Q0, Q0, Q0'
32024
32025 6.56.3.33 Vector shift left by constant
32026 .......................................
32027
32028    * uint32x2_t vshl_n_u32 (uint32x2_t, const int)
32029      _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0'
32030
32031    * uint16x4_t vshl_n_u16 (uint16x4_t, const int)
32032      _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0'
32033
32034    * uint8x8_t vshl_n_u8 (uint8x8_t, const int)
32035      _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0'
32036
32037    * int32x2_t vshl_n_s32 (int32x2_t, const int)
32038      _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0'
32039
32040    * int16x4_t vshl_n_s16 (int16x4_t, const int)
32041      _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0'
32042
32043    * int8x8_t vshl_n_s8 (int8x8_t, const int)
32044      _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0'
32045
32046    * uint64x1_t vshl_n_u64 (uint64x1_t, const int)
32047      _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0'
32048
32049    * int64x1_t vshl_n_s64 (int64x1_t, const int)
32050      _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0'
32051
32052    * uint32x4_t vshlq_n_u32 (uint32x4_t, const int)
32053      _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0'
32054
32055    * uint16x8_t vshlq_n_u16 (uint16x8_t, const int)
32056      _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0'
32057
32058    * uint8x16_t vshlq_n_u8 (uint8x16_t, const int)
32059      _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0'
32060
32061    * int32x4_t vshlq_n_s32 (int32x4_t, const int)
32062      _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0'
32063
32064    * int16x8_t vshlq_n_s16 (int16x8_t, const int)
32065      _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0'
32066
32067    * int8x16_t vshlq_n_s8 (int8x16_t, const int)
32068      _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0'
32069
32070    * uint64x2_t vshlq_n_u64 (uint64x2_t, const int)
32071      _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0'
32072
32073    * int64x2_t vshlq_n_s64 (int64x2_t, const int)
32074      _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0'
32075
32076    * uint32x2_t vqshl_n_u32 (uint32x2_t, const int)
32077      _Form of expected instruction(s):_ `vqshl.u32 D0, D0, #0'
32078
32079    * uint16x4_t vqshl_n_u16 (uint16x4_t, const int)
32080      _Form of expected instruction(s):_ `vqshl.u16 D0, D0, #0'
32081
32082    * uint8x8_t vqshl_n_u8 (uint8x8_t, const int)
32083      _Form of expected instruction(s):_ `vqshl.u8 D0, D0, #0'
32084
32085    * int32x2_t vqshl_n_s32 (int32x2_t, const int)
32086      _Form of expected instruction(s):_ `vqshl.s32 D0, D0, #0'
32087
32088    * int16x4_t vqshl_n_s16 (int16x4_t, const int)
32089      _Form of expected instruction(s):_ `vqshl.s16 D0, D0, #0'
32090
32091    * int8x8_t vqshl_n_s8 (int8x8_t, const int)
32092      _Form of expected instruction(s):_ `vqshl.s8 D0, D0, #0'
32093
32094    * uint64x1_t vqshl_n_u64 (uint64x1_t, const int)
32095      _Form of expected instruction(s):_ `vqshl.u64 D0, D0, #0'
32096
32097    * int64x1_t vqshl_n_s64 (int64x1_t, const int)
32098      _Form of expected instruction(s):_ `vqshl.s64 D0, D0, #0'
32099
32100    * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int)
32101      _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, #0'
32102
32103    * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int)
32104      _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, #0'
32105
32106    * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int)
32107      _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, #0'
32108
32109    * int32x4_t vqshlq_n_s32 (int32x4_t, const int)
32110      _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, #0'
32111
32112    * int16x8_t vqshlq_n_s16 (int16x8_t, const int)
32113      _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, #0'
32114
32115    * int8x16_t vqshlq_n_s8 (int8x16_t, const int)
32116      _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, #0'
32117
32118    * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int)
32119      _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, #0'
32120
32121    * int64x2_t vqshlq_n_s64 (int64x2_t, const int)
32122      _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, #0'
32123
32124    * uint64x1_t vqshlu_n_s64 (int64x1_t, const int)
32125      _Form of expected instruction(s):_ `vqshlu.s64 D0, D0, #0'
32126
32127    * uint32x2_t vqshlu_n_s32 (int32x2_t, const int)
32128      _Form of expected instruction(s):_ `vqshlu.s32 D0, D0, #0'
32129
32130    * uint16x4_t vqshlu_n_s16 (int16x4_t, const int)
32131      _Form of expected instruction(s):_ `vqshlu.s16 D0, D0, #0'
32132
32133    * uint8x8_t vqshlu_n_s8 (int8x8_t, const int)
32134      _Form of expected instruction(s):_ `vqshlu.s8 D0, D0, #0'
32135
32136    * uint64x2_t vqshluq_n_s64 (int64x2_t, const int)
32137      _Form of expected instruction(s):_ `vqshlu.s64 Q0, Q0, #0'
32138
32139    * uint32x4_t vqshluq_n_s32 (int32x4_t, const int)
32140      _Form of expected instruction(s):_ `vqshlu.s32 Q0, Q0, #0'
32141
32142    * uint16x8_t vqshluq_n_s16 (int16x8_t, const int)
32143      _Form of expected instruction(s):_ `vqshlu.s16 Q0, Q0, #0'
32144
32145    * uint8x16_t vqshluq_n_s8 (int8x16_t, const int)
32146      _Form of expected instruction(s):_ `vqshlu.s8 Q0, Q0, #0'
32147
32148    * uint64x2_t vshll_n_u32 (uint32x2_t, const int)
32149      _Form of expected instruction(s):_ `vshll.u32 Q0, D0, #0'
32150
32151    * uint32x4_t vshll_n_u16 (uint16x4_t, const int)
32152      _Form of expected instruction(s):_ `vshll.u16 Q0, D0, #0'
32153
32154    * uint16x8_t vshll_n_u8 (uint8x8_t, const int)
32155      _Form of expected instruction(s):_ `vshll.u8 Q0, D0, #0'
32156
32157    * int64x2_t vshll_n_s32 (int32x2_t, const int)
32158      _Form of expected instruction(s):_ `vshll.s32 Q0, D0, #0'
32159
32160    * int32x4_t vshll_n_s16 (int16x4_t, const int)
32161      _Form of expected instruction(s):_ `vshll.s16 Q0, D0, #0'
32162
32163    * int16x8_t vshll_n_s8 (int8x8_t, const int)
32164      _Form of expected instruction(s):_ `vshll.s8 Q0, D0, #0'
32165
32166 6.56.3.34 Vector shift right by constant
32167 ........................................
32168
32169    * uint32x2_t vshr_n_u32 (uint32x2_t, const int)
32170      _Form of expected instruction(s):_ `vshr.u32 D0, D0, #0'
32171
32172    * uint16x4_t vshr_n_u16 (uint16x4_t, const int)
32173      _Form of expected instruction(s):_ `vshr.u16 D0, D0, #0'
32174
32175    * uint8x8_t vshr_n_u8 (uint8x8_t, const int)
32176      _Form of expected instruction(s):_ `vshr.u8 D0, D0, #0'
32177
32178    * int32x2_t vshr_n_s32 (int32x2_t, const int)
32179      _Form of expected instruction(s):_ `vshr.s32 D0, D0, #0'
32180
32181    * int16x4_t vshr_n_s16 (int16x4_t, const int)
32182      _Form of expected instruction(s):_ `vshr.s16 D0, D0, #0'
32183
32184    * int8x8_t vshr_n_s8 (int8x8_t, const int)
32185      _Form of expected instruction(s):_ `vshr.s8 D0, D0, #0'
32186
32187    * uint64x1_t vshr_n_u64 (uint64x1_t, const int)
32188      _Form of expected instruction(s):_ `vshr.u64 D0, D0, #0'
32189
32190    * int64x1_t vshr_n_s64 (int64x1_t, const int)
32191      _Form of expected instruction(s):_ `vshr.s64 D0, D0, #0'
32192
32193    * uint32x4_t vshrq_n_u32 (uint32x4_t, const int)
32194      _Form of expected instruction(s):_ `vshr.u32 Q0, Q0, #0'
32195
32196    * uint16x8_t vshrq_n_u16 (uint16x8_t, const int)
32197      _Form of expected instruction(s):_ `vshr.u16 Q0, Q0, #0'
32198
32199    * uint8x16_t vshrq_n_u8 (uint8x16_t, const int)
32200      _Form of expected instruction(s):_ `vshr.u8 Q0, Q0, #0'
32201
32202    * int32x4_t vshrq_n_s32 (int32x4_t, const int)
32203      _Form of expected instruction(s):_ `vshr.s32 Q0, Q0, #0'
32204
32205    * int16x8_t vshrq_n_s16 (int16x8_t, const int)
32206      _Form of expected instruction(s):_ `vshr.s16 Q0, Q0, #0'
32207
32208    * int8x16_t vshrq_n_s8 (int8x16_t, const int)
32209      _Form of expected instruction(s):_ `vshr.s8 Q0, Q0, #0'
32210
32211    * uint64x2_t vshrq_n_u64 (uint64x2_t, const int)
32212      _Form of expected instruction(s):_ `vshr.u64 Q0, Q0, #0'
32213
32214    * int64x2_t vshrq_n_s64 (int64x2_t, const int)
32215      _Form of expected instruction(s):_ `vshr.s64 Q0, Q0, #0'
32216
32217    * uint32x2_t vrshr_n_u32 (uint32x2_t, const int)
32218      _Form of expected instruction(s):_ `vrshr.u32 D0, D0, #0'
32219
32220    * uint16x4_t vrshr_n_u16 (uint16x4_t, const int)
32221      _Form of expected instruction(s):_ `vrshr.u16 D0, D0, #0'
32222
32223    * uint8x8_t vrshr_n_u8 (uint8x8_t, const int)
32224      _Form of expected instruction(s):_ `vrshr.u8 D0, D0, #0'
32225
32226    * int32x2_t vrshr_n_s32 (int32x2_t, const int)
32227      _Form of expected instruction(s):_ `vrshr.s32 D0, D0, #0'
32228
32229    * int16x4_t vrshr_n_s16 (int16x4_t, const int)
32230      _Form of expected instruction(s):_ `vrshr.s16 D0, D0, #0'
32231
32232    * int8x8_t vrshr_n_s8 (int8x8_t, const int)
32233      _Form of expected instruction(s):_ `vrshr.s8 D0, D0, #0'
32234
32235    * uint64x1_t vrshr_n_u64 (uint64x1_t, const int)
32236      _Form of expected instruction(s):_ `vrshr.u64 D0, D0, #0'
32237
32238    * int64x1_t vrshr_n_s64 (int64x1_t, const int)
32239      _Form of expected instruction(s):_ `vrshr.s64 D0, D0, #0'
32240
32241    * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int)
32242      _Form of expected instruction(s):_ `vrshr.u32 Q0, Q0, #0'
32243
32244    * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int)
32245      _Form of expected instruction(s):_ `vrshr.u16 Q0, Q0, #0'
32246
32247    * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int)
32248      _Form of expected instruction(s):_ `vrshr.u8 Q0, Q0, #0'
32249
32250    * int32x4_t vrshrq_n_s32 (int32x4_t, const int)
32251      _Form of expected instruction(s):_ `vrshr.s32 Q0, Q0, #0'
32252
32253    * int16x8_t vrshrq_n_s16 (int16x8_t, const int)
32254      _Form of expected instruction(s):_ `vrshr.s16 Q0, Q0, #0'
32255
32256    * int8x16_t vrshrq_n_s8 (int8x16_t, const int)
32257      _Form of expected instruction(s):_ `vrshr.s8 Q0, Q0, #0'
32258
32259    * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int)
32260      _Form of expected instruction(s):_ `vrshr.u64 Q0, Q0, #0'
32261
32262    * int64x2_t vrshrq_n_s64 (int64x2_t, const int)
32263      _Form of expected instruction(s):_ `vrshr.s64 Q0, Q0, #0'
32264
32265    * uint32x2_t vshrn_n_u64 (uint64x2_t, const int)
32266      _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0'
32267
32268    * uint16x4_t vshrn_n_u32 (uint32x4_t, const int)
32269      _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0'
32270
32271    * uint8x8_t vshrn_n_u16 (uint16x8_t, const int)
32272      _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0'
32273
32274    * int32x2_t vshrn_n_s64 (int64x2_t, const int)
32275      _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0'
32276
32277    * int16x4_t vshrn_n_s32 (int32x4_t, const int)
32278      _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0'
32279
32280    * int8x8_t vshrn_n_s16 (int16x8_t, const int)
32281      _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0'
32282
32283    * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int)
32284      _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0'
32285
32286    * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int)
32287      _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0'
32288
32289    * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int)
32290      _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0'
32291
32292    * int32x2_t vrshrn_n_s64 (int64x2_t, const int)
32293      _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0'
32294
32295    * int16x4_t vrshrn_n_s32 (int32x4_t, const int)
32296      _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0'
32297
32298    * int8x8_t vrshrn_n_s16 (int16x8_t, const int)
32299      _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0'
32300
32301    * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int)
32302      _Form of expected instruction(s):_ `vqshrn.u64 D0, Q0, #0'
32303
32304    * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int)
32305      _Form of expected instruction(s):_ `vqshrn.u32 D0, Q0, #0'
32306
32307    * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int)
32308      _Form of expected instruction(s):_ `vqshrn.u16 D0, Q0, #0'
32309
32310    * int32x2_t vqshrn_n_s64 (int64x2_t, const int)
32311      _Form of expected instruction(s):_ `vqshrn.s64 D0, Q0, #0'
32312
32313    * int16x4_t vqshrn_n_s32 (int32x4_t, const int)
32314      _Form of expected instruction(s):_ `vqshrn.s32 D0, Q0, #0'
32315
32316    * int8x8_t vqshrn_n_s16 (int16x8_t, const int)
32317      _Form of expected instruction(s):_ `vqshrn.s16 D0, Q0, #0'
32318
32319    * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int)
32320      _Form of expected instruction(s):_ `vqrshrn.u64 D0, Q0, #0'
32321
32322    * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int)
32323      _Form of expected instruction(s):_ `vqrshrn.u32 D0, Q0, #0'
32324
32325    * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int)
32326      _Form of expected instruction(s):_ `vqrshrn.u16 D0, Q0, #0'
32327
32328    * int32x2_t vqrshrn_n_s64 (int64x2_t, const int)
32329      _Form of expected instruction(s):_ `vqrshrn.s64 D0, Q0, #0'
32330
32331    * int16x4_t vqrshrn_n_s32 (int32x4_t, const int)
32332      _Form of expected instruction(s):_ `vqrshrn.s32 D0, Q0, #0'
32333
32334    * int8x8_t vqrshrn_n_s16 (int16x8_t, const int)
32335      _Form of expected instruction(s):_ `vqrshrn.s16 D0, Q0, #0'
32336
32337    * uint32x2_t vqshrun_n_s64 (int64x2_t, const int)
32338      _Form of expected instruction(s):_ `vqshrun.s64 D0, Q0, #0'
32339
32340    * uint16x4_t vqshrun_n_s32 (int32x4_t, const int)
32341      _Form of expected instruction(s):_ `vqshrun.s32 D0, Q0, #0'
32342
32343    * uint8x8_t vqshrun_n_s16 (int16x8_t, const int)
32344      _Form of expected instruction(s):_ `vqshrun.s16 D0, Q0, #0'
32345
32346    * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int)
32347      _Form of expected instruction(s):_ `vqrshrun.s64 D0, Q0, #0'
32348
32349    * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int)
32350      _Form of expected instruction(s):_ `vqrshrun.s32 D0, Q0, #0'
32351
32352    * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int)
32353      _Form of expected instruction(s):_ `vqrshrun.s16 D0, Q0, #0'
32354
32355 6.56.3.35 Vector shift right by constant and accumulate
32356 .......................................................
32357
32358    * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int)
32359      _Form of expected instruction(s):_ `vsra.u32 D0, D0, #0'
32360
32361    * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int)
32362      _Form of expected instruction(s):_ `vsra.u16 D0, D0, #0'
32363
32364    * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int)
32365      _Form of expected instruction(s):_ `vsra.u8 D0, D0, #0'
32366
32367    * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int)
32368      _Form of expected instruction(s):_ `vsra.s32 D0, D0, #0'
32369
32370    * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int)
32371      _Form of expected instruction(s):_ `vsra.s16 D0, D0, #0'
32372
32373    * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int)
32374      _Form of expected instruction(s):_ `vsra.s8 D0, D0, #0'
32375
32376    * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int)
32377      _Form of expected instruction(s):_ `vsra.u64 D0, D0, #0'
32378
32379    * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int)
32380      _Form of expected instruction(s):_ `vsra.s64 D0, D0, #0'
32381
32382    * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
32383      _Form of expected instruction(s):_ `vsra.u32 Q0, Q0, #0'
32384
32385    * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
32386      _Form of expected instruction(s):_ `vsra.u16 Q0, Q0, #0'
32387
32388    * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
32389      _Form of expected instruction(s):_ `vsra.u8 Q0, Q0, #0'
32390
32391    * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int)
32392      _Form of expected instruction(s):_ `vsra.s32 Q0, Q0, #0'
32393
32394    * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int)
32395      _Form of expected instruction(s):_ `vsra.s16 Q0, Q0, #0'
32396
32397    * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int)
32398      _Form of expected instruction(s):_ `vsra.s8 Q0, Q0, #0'
32399
32400    * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
32401      _Form of expected instruction(s):_ `vsra.u64 Q0, Q0, #0'
32402
32403    * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int)
32404      _Form of expected instruction(s):_ `vsra.s64 Q0, Q0, #0'
32405
32406    * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int)
32407      _Form of expected instruction(s):_ `vrsra.u32 D0, D0, #0'
32408
32409    * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int)
32410      _Form of expected instruction(s):_ `vrsra.u16 D0, D0, #0'
32411
32412    * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int)
32413      _Form of expected instruction(s):_ `vrsra.u8 D0, D0, #0'
32414
32415    * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int)
32416      _Form of expected instruction(s):_ `vrsra.s32 D0, D0, #0'
32417
32418    * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int)
32419      _Form of expected instruction(s):_ `vrsra.s16 D0, D0, #0'
32420
32421    * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int)
32422      _Form of expected instruction(s):_ `vrsra.s8 D0, D0, #0'
32423
32424    * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int)
32425      _Form of expected instruction(s):_ `vrsra.u64 D0, D0, #0'
32426
32427    * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int)
32428      _Form of expected instruction(s):_ `vrsra.s64 D0, D0, #0'
32429
32430    * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
32431      _Form of expected instruction(s):_ `vrsra.u32 Q0, Q0, #0'
32432
32433    * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
32434      _Form of expected instruction(s):_ `vrsra.u16 Q0, Q0, #0'
32435
32436    * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
32437      _Form of expected instruction(s):_ `vrsra.u8 Q0, Q0, #0'
32438
32439    * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int)
32440      _Form of expected instruction(s):_ `vrsra.s32 Q0, Q0, #0'
32441
32442    * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int)
32443      _Form of expected instruction(s):_ `vrsra.s16 Q0, Q0, #0'
32444
32445    * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int)
32446      _Form of expected instruction(s):_ `vrsra.s8 Q0, Q0, #0'
32447
32448    * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
32449      _Form of expected instruction(s):_ `vrsra.u64 Q0, Q0, #0'
32450
32451    * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int)
32452      _Form of expected instruction(s):_ `vrsra.s64 Q0, Q0, #0'
32453
32454 6.56.3.36 Vector shift right and insert
32455 .......................................
32456
32457    * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int)
32458      _Form of expected instruction(s):_ `vsri.32 D0, D0, #0'
32459
32460    * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int)
32461      _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
32462
32463    * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int)
32464      _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
32465
32466    * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int)
32467      _Form of expected instruction(s):_ `vsri.32 D0, D0, #0'
32468
32469    * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int)
32470      _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
32471
32472    * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int)
32473      _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
32474
32475    * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int)
32476      _Form of expected instruction(s):_ `vsri.64 D0, D0, #0'
32477
32478    * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int)
32479      _Form of expected instruction(s):_ `vsri.64 D0, D0, #0'
32480
32481    * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int)
32482      _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
32483
32484    * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int)
32485      _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
32486
32487    * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int)
32488      _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0'
32489
32490    * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int)
32491      _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
32492
32493    * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int)
32494      _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
32495
32496    * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int)
32497      _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0'
32498
32499    * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int)
32500      _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
32501
32502    * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int)
32503      _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
32504
32505    * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int)
32506      _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0'
32507
32508    * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int)
32509      _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0'
32510
32511    * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int)
32512      _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
32513
32514    * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int)
32515      _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
32516
32517 6.56.3.37 Vector shift left and insert
32518 ......................................
32519
32520    * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int)
32521      _Form of expected instruction(s):_ `vsli.32 D0, D0, #0'
32522
32523    * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int)
32524      _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
32525
32526    * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int)
32527      _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
32528
32529    * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int)
32530      _Form of expected instruction(s):_ `vsli.32 D0, D0, #0'
32531
32532    * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int)
32533      _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
32534
32535    * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int)
32536      _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
32537
32538    * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int)
32539      _Form of expected instruction(s):_ `vsli.64 D0, D0, #0'
32540
32541    * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int)
32542      _Form of expected instruction(s):_ `vsli.64 D0, D0, #0'
32543
32544    * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int)
32545      _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
32546
32547    * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int)
32548      _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
32549
32550    * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int)
32551      _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0'
32552
32553    * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int)
32554      _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
32555
32556    * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int)
32557      _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
32558
32559    * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int)
32560      _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0'
32561
32562    * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int)
32563      _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
32564
32565    * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int)
32566      _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
32567
32568    * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int)
32569      _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0'
32570
32571    * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int)
32572      _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0'
32573
32574    * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int)
32575      _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
32576
32577    * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int)
32578      _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
32579
32580 6.56.3.38 Absolute value
32581 ........................
32582
32583    * float32x2_t vabs_f32 (float32x2_t)
32584      _Form of expected instruction(s):_ `vabs.f32 D0, D0'
32585
32586    * int32x2_t vabs_s32 (int32x2_t)
32587      _Form of expected instruction(s):_ `vabs.s32 D0, D0'
32588
32589    * int16x4_t vabs_s16 (int16x4_t)
32590      _Form of expected instruction(s):_ `vabs.s16 D0, D0'
32591
32592    * int8x8_t vabs_s8 (int8x8_t)
32593      _Form of expected instruction(s):_ `vabs.s8 D0, D0'
32594
32595    * float32x4_t vabsq_f32 (float32x4_t)
32596      _Form of expected instruction(s):_ `vabs.f32 Q0, Q0'
32597
32598    * int32x4_t vabsq_s32 (int32x4_t)
32599      _Form of expected instruction(s):_ `vabs.s32 Q0, Q0'
32600
32601    * int16x8_t vabsq_s16 (int16x8_t)
32602      _Form of expected instruction(s):_ `vabs.s16 Q0, Q0'
32603
32604    * int8x16_t vabsq_s8 (int8x16_t)
32605      _Form of expected instruction(s):_ `vabs.s8 Q0, Q0'
32606
32607    * int32x2_t vqabs_s32 (int32x2_t)
32608      _Form of expected instruction(s):_ `vqabs.s32 D0, D0'
32609
32610    * int16x4_t vqabs_s16 (int16x4_t)
32611      _Form of expected instruction(s):_ `vqabs.s16 D0, D0'
32612
32613    * int8x8_t vqabs_s8 (int8x8_t)
32614      _Form of expected instruction(s):_ `vqabs.s8 D0, D0'
32615
32616    * int32x4_t vqabsq_s32 (int32x4_t)
32617      _Form of expected instruction(s):_ `vqabs.s32 Q0, Q0'
32618
32619    * int16x8_t vqabsq_s16 (int16x8_t)
32620      _Form of expected instruction(s):_ `vqabs.s16 Q0, Q0'
32621
32622    * int8x16_t vqabsq_s8 (int8x16_t)
32623      _Form of expected instruction(s):_ `vqabs.s8 Q0, Q0'
32624
32625 6.56.3.39 Negation
32626 ..................
32627
32628    * float32x2_t vneg_f32 (float32x2_t)
32629      _Form of expected instruction(s):_ `vneg.f32 D0, D0'
32630
32631    * int32x2_t vneg_s32 (int32x2_t)
32632      _Form of expected instruction(s):_ `vneg.s32 D0, D0'
32633
32634    * int16x4_t vneg_s16 (int16x4_t)
32635      _Form of expected instruction(s):_ `vneg.s16 D0, D0'
32636
32637    * int8x8_t vneg_s8 (int8x8_t)
32638      _Form of expected instruction(s):_ `vneg.s8 D0, D0'
32639
32640    * float32x4_t vnegq_f32 (float32x4_t)
32641      _Form of expected instruction(s):_ `vneg.f32 Q0, Q0'
32642
32643    * int32x4_t vnegq_s32 (int32x4_t)
32644      _Form of expected instruction(s):_ `vneg.s32 Q0, Q0'
32645
32646    * int16x8_t vnegq_s16 (int16x8_t)
32647      _Form of expected instruction(s):_ `vneg.s16 Q0, Q0'
32648
32649    * int8x16_t vnegq_s8 (int8x16_t)
32650      _Form of expected instruction(s):_ `vneg.s8 Q0, Q0'
32651
32652    * int32x2_t vqneg_s32 (int32x2_t)
32653      _Form of expected instruction(s):_ `vqneg.s32 D0, D0'
32654
32655    * int16x4_t vqneg_s16 (int16x4_t)
32656      _Form of expected instruction(s):_ `vqneg.s16 D0, D0'
32657
32658    * int8x8_t vqneg_s8 (int8x8_t)
32659      _Form of expected instruction(s):_ `vqneg.s8 D0, D0'
32660
32661    * int32x4_t vqnegq_s32 (int32x4_t)
32662      _Form of expected instruction(s):_ `vqneg.s32 Q0, Q0'
32663
32664    * int16x8_t vqnegq_s16 (int16x8_t)
32665      _Form of expected instruction(s):_ `vqneg.s16 Q0, Q0'
32666
32667    * int8x16_t vqnegq_s8 (int8x16_t)
32668      _Form of expected instruction(s):_ `vqneg.s8 Q0, Q0'
32669
32670 6.56.3.40 Bitwise not
32671 .....................
32672
32673    * uint32x2_t vmvn_u32 (uint32x2_t)
32674      _Form of expected instruction(s):_ `vmvn D0, D0'
32675
32676    * uint16x4_t vmvn_u16 (uint16x4_t)
32677      _Form of expected instruction(s):_ `vmvn D0, D0'
32678
32679    * uint8x8_t vmvn_u8 (uint8x8_t)
32680      _Form of expected instruction(s):_ `vmvn D0, D0'
32681
32682    * int32x2_t vmvn_s32 (int32x2_t)
32683      _Form of expected instruction(s):_ `vmvn D0, D0'
32684
32685    * int16x4_t vmvn_s16 (int16x4_t)
32686      _Form of expected instruction(s):_ `vmvn D0, D0'
32687
32688    * int8x8_t vmvn_s8 (int8x8_t)
32689      _Form of expected instruction(s):_ `vmvn D0, D0'
32690
32691    * poly8x8_t vmvn_p8 (poly8x8_t)
32692      _Form of expected instruction(s):_ `vmvn D0, D0'
32693
32694    * uint32x4_t vmvnq_u32 (uint32x4_t)
32695      _Form of expected instruction(s):_ `vmvn Q0, Q0'
32696
32697    * uint16x8_t vmvnq_u16 (uint16x8_t)
32698      _Form of expected instruction(s):_ `vmvn Q0, Q0'
32699
32700    * uint8x16_t vmvnq_u8 (uint8x16_t)
32701      _Form of expected instruction(s):_ `vmvn Q0, Q0'
32702
32703    * int32x4_t vmvnq_s32 (int32x4_t)
32704      _Form of expected instruction(s):_ `vmvn Q0, Q0'
32705
32706    * int16x8_t vmvnq_s16 (int16x8_t)
32707      _Form of expected instruction(s):_ `vmvn Q0, Q0'
32708
32709    * int8x16_t vmvnq_s8 (int8x16_t)
32710      _Form of expected instruction(s):_ `vmvn Q0, Q0'
32711
32712    * poly8x16_t vmvnq_p8 (poly8x16_t)
32713      _Form of expected instruction(s):_ `vmvn Q0, Q0'
32714
32715 6.56.3.41 Count leading sign bits
32716 .................................
32717
32718    * int32x2_t vcls_s32 (int32x2_t)
32719      _Form of expected instruction(s):_ `vcls.s32 D0, D0'
32720
32721    * int16x4_t vcls_s16 (int16x4_t)
32722      _Form of expected instruction(s):_ `vcls.s16 D0, D0'
32723
32724    * int8x8_t vcls_s8 (int8x8_t)
32725      _Form of expected instruction(s):_ `vcls.s8 D0, D0'
32726
32727    * int32x4_t vclsq_s32 (int32x4_t)
32728      _Form of expected instruction(s):_ `vcls.s32 Q0, Q0'
32729
32730    * int16x8_t vclsq_s16 (int16x8_t)
32731      _Form of expected instruction(s):_ `vcls.s16 Q0, Q0'
32732
32733    * int8x16_t vclsq_s8 (int8x16_t)
32734      _Form of expected instruction(s):_ `vcls.s8 Q0, Q0'
32735
32736 6.56.3.42 Count leading zeros
32737 .............................
32738
32739    * uint32x2_t vclz_u32 (uint32x2_t)
32740      _Form of expected instruction(s):_ `vclz.i32 D0, D0'
32741
32742    * uint16x4_t vclz_u16 (uint16x4_t)
32743      _Form of expected instruction(s):_ `vclz.i16 D0, D0'
32744
32745    * uint8x8_t vclz_u8 (uint8x8_t)
32746      _Form of expected instruction(s):_ `vclz.i8 D0, D0'
32747
32748    * int32x2_t vclz_s32 (int32x2_t)
32749      _Form of expected instruction(s):_ `vclz.i32 D0, D0'
32750
32751    * int16x4_t vclz_s16 (int16x4_t)
32752      _Form of expected instruction(s):_ `vclz.i16 D0, D0'
32753
32754    * int8x8_t vclz_s8 (int8x8_t)
32755      _Form of expected instruction(s):_ `vclz.i8 D0, D0'
32756
32757    * uint32x4_t vclzq_u32 (uint32x4_t)
32758      _Form of expected instruction(s):_ `vclz.i32 Q0, Q0'
32759
32760    * uint16x8_t vclzq_u16 (uint16x8_t)
32761      _Form of expected instruction(s):_ `vclz.i16 Q0, Q0'
32762
32763    * uint8x16_t vclzq_u8 (uint8x16_t)
32764      _Form of expected instruction(s):_ `vclz.i8 Q0, Q0'
32765
32766    * int32x4_t vclzq_s32 (int32x4_t)
32767      _Form of expected instruction(s):_ `vclz.i32 Q0, Q0'
32768
32769    * int16x8_t vclzq_s16 (int16x8_t)
32770      _Form of expected instruction(s):_ `vclz.i16 Q0, Q0'
32771
32772    * int8x16_t vclzq_s8 (int8x16_t)
32773      _Form of expected instruction(s):_ `vclz.i8 Q0, Q0'
32774
32775 6.56.3.43 Count number of set bits
32776 ..................................
32777
32778    * uint8x8_t vcnt_u8 (uint8x8_t)
32779      _Form of expected instruction(s):_ `vcnt.8 D0, D0'
32780
32781    * int8x8_t vcnt_s8 (int8x8_t)
32782      _Form of expected instruction(s):_ `vcnt.8 D0, D0'
32783
32784    * poly8x8_t vcnt_p8 (poly8x8_t)
32785      _Form of expected instruction(s):_ `vcnt.8 D0, D0'
32786
32787    * uint8x16_t vcntq_u8 (uint8x16_t)
32788      _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
32789
32790    * int8x16_t vcntq_s8 (int8x16_t)
32791      _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
32792
32793    * poly8x16_t vcntq_p8 (poly8x16_t)
32794      _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
32795
32796 6.56.3.44 Reciprocal estimate
32797 .............................
32798
32799    * float32x2_t vrecpe_f32 (float32x2_t)
32800      _Form of expected instruction(s):_ `vrecpe.f32 D0, D0'
32801
32802    * uint32x2_t vrecpe_u32 (uint32x2_t)
32803      _Form of expected instruction(s):_ `vrecpe.u32 D0, D0'
32804
32805    * float32x4_t vrecpeq_f32 (float32x4_t)
32806      _Form of expected instruction(s):_ `vrecpe.f32 Q0, Q0'
32807
32808    * uint32x4_t vrecpeq_u32 (uint32x4_t)
32809      _Form of expected instruction(s):_ `vrecpe.u32 Q0, Q0'
32810
32811 6.56.3.45 Reciprocal square-root estimate
32812 .........................................
32813
32814    * float32x2_t vrsqrte_f32 (float32x2_t)
32815      _Form of expected instruction(s):_ `vrsqrte.f32 D0, D0'
32816
32817    * uint32x2_t vrsqrte_u32 (uint32x2_t)
32818      _Form of expected instruction(s):_ `vrsqrte.u32 D0, D0'
32819
32820    * float32x4_t vrsqrteq_f32 (float32x4_t)
32821      _Form of expected instruction(s):_ `vrsqrte.f32 Q0, Q0'
32822
32823    * uint32x4_t vrsqrteq_u32 (uint32x4_t)
32824      _Form of expected instruction(s):_ `vrsqrte.u32 Q0, Q0'
32825
32826 6.56.3.46 Get lanes from a vector
32827 .................................
32828
32829    * uint32_t vget_lane_u32 (uint32x2_t, const int)
32830      _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
32831
32832    * uint16_t vget_lane_u16 (uint16x4_t, const int)
32833      _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
32834
32835    * uint8_t vget_lane_u8 (uint8x8_t, const int)
32836      _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
32837
32838    * int32_t vget_lane_s32 (int32x2_t, const int)
32839      _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
32840
32841    * int16_t vget_lane_s16 (int16x4_t, const int)
32842      _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]'
32843
32844    * int8_t vget_lane_s8 (int8x8_t, const int)
32845      _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]'
32846
32847    * float32_t vget_lane_f32 (float32x2_t, const int)
32848      _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
32849
32850    * poly16_t vget_lane_p16 (poly16x4_t, const int)
32851      _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
32852
32853    * poly8_t vget_lane_p8 (poly8x8_t, const int)
32854      _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
32855
32856    * uint64_t vget_lane_u64 (uint64x1_t, const int)
32857
32858    * int64_t vget_lane_s64 (int64x1_t, const int)
32859
32860    * uint32_t vgetq_lane_u32 (uint32x4_t, const int)
32861      _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
32862
32863    * uint16_t vgetq_lane_u16 (uint16x8_t, const int)
32864      _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
32865
32866    * uint8_t vgetq_lane_u8 (uint8x16_t, const int)
32867      _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
32868
32869    * int32_t vgetq_lane_s32 (int32x4_t, const int)
32870      _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
32871
32872    * int16_t vgetq_lane_s16 (int16x8_t, const int)
32873      _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]'
32874
32875    * int8_t vgetq_lane_s8 (int8x16_t, const int)
32876      _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]'
32877
32878    * float32_t vgetq_lane_f32 (float32x4_t, const int)
32879      _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
32880
32881    * poly16_t vgetq_lane_p16 (poly16x8_t, const int)
32882      _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
32883
32884    * poly8_t vgetq_lane_p8 (poly8x16_t, const int)
32885      _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
32886
32887    * uint64_t vgetq_lane_u64 (uint64x2_t, const int)
32888      _Form of expected instruction(s):_ `vmov R0, R0, D0' _or_ `fmrrd
32889      R0, R0, D0'
32890
32891    * int64_t vgetq_lane_s64 (int64x2_t, const int)
32892      _Form of expected instruction(s):_ `vmov R0, R0, D0' _or_ `fmrrd
32893      R0, R0, D0'
32894
32895 6.56.3.47 Set lanes in a vector
32896 ...............................
32897
32898    * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int)
32899      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
32900
32901    * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int)
32902      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
32903
32904    * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int)
32905      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
32906
32907    * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int)
32908      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
32909
32910    * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int)
32911      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
32912
32913    * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int)
32914      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
32915
32916    * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int)
32917      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
32918
32919    * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int)
32920      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
32921
32922    * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int)
32923      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
32924
32925    * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int)
32926
32927    * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int)
32928
32929    * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int)
32930      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
32931
32932    * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int)
32933      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
32934
32935    * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int)
32936      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
32937
32938    * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int)
32939      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
32940
32941    * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int)
32942      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
32943
32944    * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int)
32945      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
32946
32947    * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int)
32948      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
32949
32950    * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int)
32951      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
32952
32953    * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int)
32954      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
32955
32956    * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int)
32957      _Form of expected instruction(s):_ `vmov D0, R0, R0'
32958
32959    * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int)
32960      _Form of expected instruction(s):_ `vmov D0, R0, R0'
32961
32962 6.56.3.48 Create vector from literal bit pattern
32963 ................................................
32964
32965    * uint32x2_t vcreate_u32 (uint64_t)
32966
32967    * uint16x4_t vcreate_u16 (uint64_t)
32968
32969    * uint8x8_t vcreate_u8 (uint64_t)
32970
32971    * int32x2_t vcreate_s32 (uint64_t)
32972
32973    * int16x4_t vcreate_s16 (uint64_t)
32974
32975    * int8x8_t vcreate_s8 (uint64_t)
32976
32977    * uint64x1_t vcreate_u64 (uint64_t)
32978
32979    * int64x1_t vcreate_s64 (uint64_t)
32980
32981    * float32x2_t vcreate_f32 (uint64_t)
32982
32983    * poly16x4_t vcreate_p16 (uint64_t)
32984
32985    * poly8x8_t vcreate_p8 (uint64_t)
32986
32987 6.56.3.49 Set all lanes to the same value
32988 .........................................
32989
32990    * uint32x2_t vdup_n_u32 (uint32_t)
32991      _Form of expected instruction(s):_ `vdup.32 D0, R0'
32992
32993    * uint16x4_t vdup_n_u16 (uint16_t)
32994      _Form of expected instruction(s):_ `vdup.16 D0, R0'
32995
32996    * uint8x8_t vdup_n_u8 (uint8_t)
32997      _Form of expected instruction(s):_ `vdup.8 D0, R0'
32998
32999    * int32x2_t vdup_n_s32 (int32_t)
33000      _Form of expected instruction(s):_ `vdup.32 D0, R0'
33001
33002    * int16x4_t vdup_n_s16 (int16_t)
33003      _Form of expected instruction(s):_ `vdup.16 D0, R0'
33004
33005    * int8x8_t vdup_n_s8 (int8_t)
33006      _Form of expected instruction(s):_ `vdup.8 D0, R0'
33007
33008    * float32x2_t vdup_n_f32 (float32_t)
33009      _Form of expected instruction(s):_ `vdup.32 D0, R0'
33010
33011    * poly16x4_t vdup_n_p16 (poly16_t)
33012      _Form of expected instruction(s):_ `vdup.16 D0, R0'
33013
33014    * poly8x8_t vdup_n_p8 (poly8_t)
33015      _Form of expected instruction(s):_ `vdup.8 D0, R0'
33016
33017    * uint64x1_t vdup_n_u64 (uint64_t)
33018
33019    * int64x1_t vdup_n_s64 (int64_t)
33020
33021    * uint32x4_t vdupq_n_u32 (uint32_t)
33022      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
33023
33024    * uint16x8_t vdupq_n_u16 (uint16_t)
33025      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
33026
33027    * uint8x16_t vdupq_n_u8 (uint8_t)
33028      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
33029
33030    * int32x4_t vdupq_n_s32 (int32_t)
33031      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
33032
33033    * int16x8_t vdupq_n_s16 (int16_t)
33034      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
33035
33036    * int8x16_t vdupq_n_s8 (int8_t)
33037      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
33038
33039    * float32x4_t vdupq_n_f32 (float32_t)
33040      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
33041
33042    * poly16x8_t vdupq_n_p16 (poly16_t)
33043      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
33044
33045    * poly8x16_t vdupq_n_p8 (poly8_t)
33046      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
33047
33048    * uint64x2_t vdupq_n_u64 (uint64_t)
33049
33050    * int64x2_t vdupq_n_s64 (int64_t)
33051
33052    * uint32x2_t vmov_n_u32 (uint32_t)
33053      _Form of expected instruction(s):_ `vdup.32 D0, R0'
33054
33055    * uint16x4_t vmov_n_u16 (uint16_t)
33056      _Form of expected instruction(s):_ `vdup.16 D0, R0'
33057
33058    * uint8x8_t vmov_n_u8 (uint8_t)
33059      _Form of expected instruction(s):_ `vdup.8 D0, R0'
33060
33061    * int32x2_t vmov_n_s32 (int32_t)
33062      _Form of expected instruction(s):_ `vdup.32 D0, R0'
33063
33064    * int16x4_t vmov_n_s16 (int16_t)
33065      _Form of expected instruction(s):_ `vdup.16 D0, R0'
33066
33067    * int8x8_t vmov_n_s8 (int8_t)
33068      _Form of expected instruction(s):_ `vdup.8 D0, R0'
33069
33070    * float32x2_t vmov_n_f32 (float32_t)
33071      _Form of expected instruction(s):_ `vdup.32 D0, R0'
33072
33073    * poly16x4_t vmov_n_p16 (poly16_t)
33074      _Form of expected instruction(s):_ `vdup.16 D0, R0'
33075
33076    * poly8x8_t vmov_n_p8 (poly8_t)
33077      _Form of expected instruction(s):_ `vdup.8 D0, R0'
33078
33079    * uint64x1_t vmov_n_u64 (uint64_t)
33080
33081    * int64x1_t vmov_n_s64 (int64_t)
33082
33083    * uint32x4_t vmovq_n_u32 (uint32_t)
33084      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
33085
33086    * uint16x8_t vmovq_n_u16 (uint16_t)
33087      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
33088
33089    * uint8x16_t vmovq_n_u8 (uint8_t)
33090      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
33091
33092    * int32x4_t vmovq_n_s32 (int32_t)
33093      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
33094
33095    * int16x8_t vmovq_n_s16 (int16_t)
33096      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
33097
33098    * int8x16_t vmovq_n_s8 (int8_t)
33099      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
33100
33101    * float32x4_t vmovq_n_f32 (float32_t)
33102      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
33103
33104    * poly16x8_t vmovq_n_p16 (poly16_t)
33105      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
33106
33107    * poly8x16_t vmovq_n_p8 (poly8_t)
33108      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
33109
33110    * uint64x2_t vmovq_n_u64 (uint64_t)
33111
33112    * int64x2_t vmovq_n_s64 (int64_t)
33113
33114    * uint32x2_t vdup_lane_u32 (uint32x2_t, const int)
33115      _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
33116
33117    * uint16x4_t vdup_lane_u16 (uint16x4_t, const int)
33118      _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
33119
33120    * uint8x8_t vdup_lane_u8 (uint8x8_t, const int)
33121      _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
33122
33123    * int32x2_t vdup_lane_s32 (int32x2_t, const int)
33124      _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
33125
33126    * int16x4_t vdup_lane_s16 (int16x4_t, const int)
33127      _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
33128
33129    * int8x8_t vdup_lane_s8 (int8x8_t, const int)
33130      _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
33131
33132    * float32x2_t vdup_lane_f32 (float32x2_t, const int)
33133      _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
33134
33135    * poly16x4_t vdup_lane_p16 (poly16x4_t, const int)
33136      _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
33137
33138    * poly8x8_t vdup_lane_p8 (poly8x8_t, const int)
33139      _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
33140
33141    * uint64x1_t vdup_lane_u64 (uint64x1_t, const int)
33142
33143    * int64x1_t vdup_lane_s64 (int64x1_t, const int)
33144
33145    * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int)
33146      _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
33147
33148    * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int)
33149      _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
33150
33151    * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int)
33152      _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
33153
33154    * int32x4_t vdupq_lane_s32 (int32x2_t, const int)
33155      _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
33156
33157    * int16x8_t vdupq_lane_s16 (int16x4_t, const int)
33158      _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
33159
33160    * int8x16_t vdupq_lane_s8 (int8x8_t, const int)
33161      _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
33162
33163    * float32x4_t vdupq_lane_f32 (float32x2_t, const int)
33164      _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
33165
33166    * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int)
33167      _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
33168
33169    * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int)
33170      _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
33171
33172    * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int)
33173
33174    * int64x2_t vdupq_lane_s64 (int64x1_t, const int)
33175
33176 6.56.3.50 Combining vectors
33177 ...........................
33178
33179    * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t)
33180
33181    * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t)
33182
33183    * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t)
33184
33185    * int32x4_t vcombine_s32 (int32x2_t, int32x2_t)
33186
33187    * int16x8_t vcombine_s16 (int16x4_t, int16x4_t)
33188
33189    * int8x16_t vcombine_s8 (int8x8_t, int8x8_t)
33190
33191    * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t)
33192
33193    * int64x2_t vcombine_s64 (int64x1_t, int64x1_t)
33194
33195    * float32x4_t vcombine_f32 (float32x2_t, float32x2_t)
33196
33197    * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t)
33198
33199    * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t)
33200
33201 6.56.3.51 Splitting vectors
33202 ...........................
33203
33204    * uint32x2_t vget_high_u32 (uint32x4_t)
33205
33206    * uint16x4_t vget_high_u16 (uint16x8_t)
33207
33208    * uint8x8_t vget_high_u8 (uint8x16_t)
33209
33210    * int32x2_t vget_high_s32 (int32x4_t)
33211
33212    * int16x4_t vget_high_s16 (int16x8_t)
33213
33214    * int8x8_t vget_high_s8 (int8x16_t)
33215
33216    * uint64x1_t vget_high_u64 (uint64x2_t)
33217
33218    * int64x1_t vget_high_s64 (int64x2_t)
33219
33220    * float32x2_t vget_high_f32 (float32x4_t)
33221
33222    * poly16x4_t vget_high_p16 (poly16x8_t)
33223
33224    * poly8x8_t vget_high_p8 (poly8x16_t)
33225
33226    * uint32x2_t vget_low_u32 (uint32x4_t)
33227      _Form of expected instruction(s):_ `vmov D0, D0'
33228
33229    * uint16x4_t vget_low_u16 (uint16x8_t)
33230      _Form of expected instruction(s):_ `vmov D0, D0'
33231
33232    * uint8x8_t vget_low_u8 (uint8x16_t)
33233      _Form of expected instruction(s):_ `vmov D0, D0'
33234
33235    * int32x2_t vget_low_s32 (int32x4_t)
33236      _Form of expected instruction(s):_ `vmov D0, D0'
33237
33238    * int16x4_t vget_low_s16 (int16x8_t)
33239      _Form of expected instruction(s):_ `vmov D0, D0'
33240
33241    * int8x8_t vget_low_s8 (int8x16_t)
33242      _Form of expected instruction(s):_ `vmov D0, D0'
33243
33244    * float32x2_t vget_low_f32 (float32x4_t)
33245      _Form of expected instruction(s):_ `vmov D0, D0'
33246
33247    * poly16x4_t vget_low_p16 (poly16x8_t)
33248      _Form of expected instruction(s):_ `vmov D0, D0'
33249
33250    * poly8x8_t vget_low_p8 (poly8x16_t)
33251      _Form of expected instruction(s):_ `vmov D0, D0'
33252
33253    * uint64x1_t vget_low_u64 (uint64x2_t)
33254
33255    * int64x1_t vget_low_s64 (int64x2_t)
33256
33257 6.56.3.52 Conversions
33258 .....................
33259
33260    * float32x2_t vcvt_f32_u32 (uint32x2_t)
33261      _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0'
33262
33263    * float32x2_t vcvt_f32_s32 (int32x2_t)
33264      _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0'
33265
33266    * uint32x2_t vcvt_u32_f32 (float32x2_t)
33267      _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0'
33268
33269    * int32x2_t vcvt_s32_f32 (float32x2_t)
33270      _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0'
33271
33272    * float32x4_t vcvtq_f32_u32 (uint32x4_t)
33273      _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0'
33274
33275    * float32x4_t vcvtq_f32_s32 (int32x4_t)
33276      _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0'
33277
33278    * uint32x4_t vcvtq_u32_f32 (float32x4_t)
33279      _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0'
33280
33281    * int32x4_t vcvtq_s32_f32 (float32x4_t)
33282      _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0'
33283
33284    * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int)
33285      _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0, #0'
33286
33287    * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int)
33288      _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0, #0'
33289
33290    * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int)
33291      _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0, #0'
33292
33293    * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int)
33294      _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0, #0'
33295
33296    * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int)
33297      _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0, #0'
33298
33299    * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int)
33300      _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0, #0'
33301
33302    * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int)
33303      _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0, #0'
33304
33305    * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int)
33306      _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0, #0'
33307
33308 6.56.3.53 Move, single_opcode narrowing
33309 .......................................
33310
33311    * uint32x2_t vmovn_u64 (uint64x2_t)
33312      _Form of expected instruction(s):_ `vmovn.i64 D0, Q0'
33313
33314    * uint16x4_t vmovn_u32 (uint32x4_t)
33315      _Form of expected instruction(s):_ `vmovn.i32 D0, Q0'
33316
33317    * uint8x8_t vmovn_u16 (uint16x8_t)
33318      _Form of expected instruction(s):_ `vmovn.i16 D0, Q0'
33319
33320    * int32x2_t vmovn_s64 (int64x2_t)
33321      _Form of expected instruction(s):_ `vmovn.i64 D0, Q0'
33322
33323    * int16x4_t vmovn_s32 (int32x4_t)
33324      _Form of expected instruction(s):_ `vmovn.i32 D0, Q0'
33325
33326    * int8x8_t vmovn_s16 (int16x8_t)
33327      _Form of expected instruction(s):_ `vmovn.i16 D0, Q0'
33328
33329    * uint32x2_t vqmovn_u64 (uint64x2_t)
33330      _Form of expected instruction(s):_ `vqmovn.u64 D0, Q0'
33331
33332    * uint16x4_t vqmovn_u32 (uint32x4_t)
33333      _Form of expected instruction(s):_ `vqmovn.u32 D0, Q0'
33334
33335    * uint8x8_t vqmovn_u16 (uint16x8_t)
33336      _Form of expected instruction(s):_ `vqmovn.u16 D0, Q0'
33337
33338    * int32x2_t vqmovn_s64 (int64x2_t)
33339      _Form of expected instruction(s):_ `vqmovn.s64 D0, Q0'
33340
33341    * int16x4_t vqmovn_s32 (int32x4_t)
33342      _Form of expected instruction(s):_ `vqmovn.s32 D0, Q0'
33343
33344    * int8x8_t vqmovn_s16 (int16x8_t)
33345      _Form of expected instruction(s):_ `vqmovn.s16 D0, Q0'
33346
33347    * uint32x2_t vqmovun_s64 (int64x2_t)
33348      _Form of expected instruction(s):_ `vqmovun.s64 D0, Q0'
33349
33350    * uint16x4_t vqmovun_s32 (int32x4_t)
33351      _Form of expected instruction(s):_ `vqmovun.s32 D0, Q0'
33352
33353    * uint8x8_t vqmovun_s16 (int16x8_t)
33354      _Form of expected instruction(s):_ `vqmovun.s16 D0, Q0'
33355
33356 6.56.3.54 Move, single_opcode long
33357 ..................................
33358
33359    * uint64x2_t vmovl_u32 (uint32x2_t)
33360      _Form of expected instruction(s):_ `vmovl.u32 Q0, D0'
33361
33362    * uint32x4_t vmovl_u16 (uint16x4_t)
33363      _Form of expected instruction(s):_ `vmovl.u16 Q0, D0'
33364
33365    * uint16x8_t vmovl_u8 (uint8x8_t)
33366      _Form of expected instruction(s):_ `vmovl.u8 Q0, D0'
33367
33368    * int64x2_t vmovl_s32 (int32x2_t)
33369      _Form of expected instruction(s):_ `vmovl.s32 Q0, D0'
33370
33371    * int32x4_t vmovl_s16 (int16x4_t)
33372      _Form of expected instruction(s):_ `vmovl.s16 Q0, D0'
33373
33374    * int16x8_t vmovl_s8 (int8x8_t)
33375      _Form of expected instruction(s):_ `vmovl.s8 Q0, D0'
33376
33377 6.56.3.55 Table lookup
33378 ......................
33379
33380    * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t)
33381      _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
33382
33383    * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t)
33384      _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
33385
33386    * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t)
33387      _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
33388
33389    * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t)
33390      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
33391
33392    * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t)
33393      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
33394
33395    * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t)
33396      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
33397
33398    * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t)
33399      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
33400
33401    * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t)
33402      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
33403
33404    * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t)
33405      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
33406
33407    * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t)
33408      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
33409      D0'
33410
33411    * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t)
33412      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
33413      D0'
33414
33415    * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t)
33416      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
33417      D0'
33418
33419 6.56.3.56 Extended table lookup
33420 ...............................
33421
33422    * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t)
33423      _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
33424
33425    * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t)
33426      _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
33427
33428    * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
33429      _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
33430
33431    * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t)
33432      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
33433
33434    * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t)
33435      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
33436
33437    * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t)
33438      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
33439
33440    * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t)
33441      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
33442
33443    * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t)
33444      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
33445
33446    * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t)
33447      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
33448
33449    * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t)
33450      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
33451      D0'
33452
33453    * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t)
33454      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
33455      D0'
33456
33457    * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t)
33458      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
33459      D0'
33460
33461 6.56.3.57 Multiply, lane
33462 ........................
33463
33464    * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int)
33465      _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]'
33466
33467    * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int)
33468      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
33469
33470    * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int)
33471      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
33472
33473    * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int)
33474      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
33475
33476    * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int)
33477      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
33478
33479    * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int)
33480      _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]'
33481
33482    * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int)
33483      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
33484
33485    * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int)
33486      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
33487
33488    * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int)
33489      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
33490
33491    * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int)
33492      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
33493
33494 6.56.3.58 Long multiply, lane
33495 .............................
33496
33497    * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int)
33498      _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]'
33499
33500    * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int)
33501      _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]'
33502
33503    * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int)
33504      _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]'
33505
33506    * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int)
33507      _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]'
33508
33509 6.56.3.59 Saturating doubling long multiply, lane
33510 .................................................
33511
33512    * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int)
33513      _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]'
33514
33515    * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int)
33516      _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]'
33517
33518 6.56.3.60 Saturating doubling multiply high, lane
33519 .................................................
33520
33521    * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
33522      _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]'
33523
33524    * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
33525      _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]'
33526
33527    * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
33528      _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]'
33529
33530    * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
33531      _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]'
33532
33533    * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
33534      _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]'
33535
33536    * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
33537      _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]'
33538
33539    * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
33540      _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]'
33541
33542    * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
33543      _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]'
33544
33545 6.56.3.61 Multiply-accumulate, lane
33546 ...................................
33547
33548    * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
33549      const int)
33550      _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]'
33551
33552    * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t,
33553      const int)
33554      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
33555
33556    * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t,
33557      const int)
33558      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
33559
33560    * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
33561      int)
33562      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
33563
33564    * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
33565      int)
33566      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
33567
33568    * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
33569      const int)
33570      _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]'
33571
33572    * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
33573      const int)
33574      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
33575
33576    * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
33577      const int)
33578      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
33579
33580    * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
33581      int)
33582      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
33583
33584    * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
33585      int)
33586      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
33587
33588    * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
33589      const int)
33590      _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]'
33591
33592    * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
33593      const int)
33594      _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]'
33595
33596    * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
33597      int)
33598      _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]'
33599
33600    * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
33601      int)
33602      _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]'
33603
33604    * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
33605      int)
33606      _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]'
33607
33608    * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
33609      int)
33610      _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]'
33611
33612 6.56.3.62 Multiply-subtract, lane
33613 .................................
33614
33615    * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
33616      const int)
33617      _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]'
33618
33619    * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t,
33620      const int)
33621      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
33622
33623    * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t,
33624      const int)
33625      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
33626
33627    * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
33628      int)
33629      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
33630
33631    * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
33632      int)
33633      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
33634
33635    * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
33636      const int)
33637      _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]'
33638
33639    * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
33640      const int)
33641      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
33642
33643    * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
33644      const int)
33645      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
33646
33647    * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
33648      int)
33649      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
33650
33651    * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
33652      int)
33653      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
33654
33655    * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
33656      const int)
33657      _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]'
33658
33659    * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
33660      const int)
33661      _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]'
33662
33663    * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
33664      int)
33665      _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]'
33666
33667    * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
33668      int)
33669      _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]'
33670
33671    * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
33672      int)
33673      _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]'
33674
33675    * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
33676      int)
33677      _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]'
33678
33679 6.56.3.63 Vector multiply by scalar
33680 ...................................
33681
33682    * float32x2_t vmul_n_f32 (float32x2_t, float32_t)
33683      _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]'
33684
33685    * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t)
33686      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
33687
33688    * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t)
33689      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
33690
33691    * int32x2_t vmul_n_s32 (int32x2_t, int32_t)
33692      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
33693
33694    * int16x4_t vmul_n_s16 (int16x4_t, int16_t)
33695      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
33696
33697    * float32x4_t vmulq_n_f32 (float32x4_t, float32_t)
33698      _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]'
33699
33700    * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t)
33701      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
33702
33703    * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t)
33704      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
33705
33706    * int32x4_t vmulq_n_s32 (int32x4_t, int32_t)
33707      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
33708
33709    * int16x8_t vmulq_n_s16 (int16x8_t, int16_t)
33710      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
33711
33712 6.56.3.64 Vector long multiply by scalar
33713 ........................................
33714
33715    * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t)
33716      _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]'
33717
33718    * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t)
33719      _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]'
33720
33721    * int64x2_t vmull_n_s32 (int32x2_t, int32_t)
33722      _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]'
33723
33724    * int32x4_t vmull_n_s16 (int16x4_t, int16_t)
33725      _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]'
33726
33727 6.56.3.65 Vector saturating doubling long multiply by scalar
33728 ............................................................
33729
33730    * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t)
33731      _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]'
33732
33733    * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t)
33734      _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]'
33735
33736 6.56.3.66 Vector saturating doubling multiply high by scalar
33737 ............................................................
33738
33739    * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t)
33740      _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]'
33741
33742    * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t)
33743      _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]'
33744
33745    * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t)
33746      _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]'
33747
33748    * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t)
33749      _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]'
33750
33751    * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t)
33752      _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]'
33753
33754    * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t)
33755      _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]'
33756
33757    * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t)
33758      _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]'
33759
33760    * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t)
33761      _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]'
33762
33763 6.56.3.67 Vector multiply-accumulate by scalar
33764 ..............................................
33765
33766    * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t)
33767      _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]'
33768
33769    * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
33770      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
33771
33772    * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
33773      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
33774
33775    * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t)
33776      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
33777
33778    * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t)
33779      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
33780
33781    * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t)
33782      _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]'
33783
33784    * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
33785      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
33786
33787    * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
33788      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
33789
33790    * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t)
33791      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
33792
33793    * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t)
33794      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
33795
33796    * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
33797      _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]'
33798
33799    * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
33800      _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]'
33801
33802    * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
33803      _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]'
33804
33805    * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
33806      _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]'
33807
33808    * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
33809      _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]'
33810
33811    * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
33812      _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]'
33813
33814 6.56.3.68 Vector multiply-subtract by scalar
33815 ............................................
33816
33817    * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t)
33818      _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]'
33819
33820    * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
33821      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
33822
33823    * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
33824      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
33825
33826    * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t)
33827      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
33828
33829    * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t)
33830      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
33831
33832    * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t)
33833      _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]'
33834
33835    * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
33836      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
33837
33838    * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
33839      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
33840
33841    * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t)
33842      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
33843
33844    * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t)
33845      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
33846
33847    * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
33848      _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]'
33849
33850    * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
33851      _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]'
33852
33853    * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
33854      _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]'
33855
33856    * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
33857      _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]'
33858
33859    * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
33860      _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]'
33861
33862    * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
33863      _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]'
33864
33865 6.56.3.69 Vector extract
33866 ........................
33867
33868    * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int)
33869      _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
33870
33871    * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int)
33872      _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
33873
33874    * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int)
33875      _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
33876
33877    * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int)
33878      _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
33879
33880    * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int)
33881      _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
33882
33883    * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int)
33884      _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
33885
33886    * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int)
33887      _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0'
33888
33889    * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int)
33890      _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0'
33891
33892    * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int)
33893      _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
33894
33895    * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int)
33896      _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
33897
33898    * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int)
33899      _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
33900
33901    * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int)
33902      _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
33903
33904    * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int)
33905      _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
33906
33907    * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int)
33908      _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
33909
33910    * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int)
33911      _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
33912
33913    * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int)
33914      _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
33915
33916    * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int)
33917      _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
33918
33919    * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int)
33920      _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0'
33921
33922    * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int)
33923      _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0'
33924
33925    * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int)
33926      _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
33927
33928    * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int)
33929      _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
33930
33931    * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int)
33932      _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
33933
33934 6.56.3.70 Reverse elements
33935 ..........................
33936
33937    * uint32x2_t vrev64_u32 (uint32x2_t)
33938      _Form of expected instruction(s):_ `vrev64.32 D0, D0'
33939
33940    * uint16x4_t vrev64_u16 (uint16x4_t)
33941      _Form of expected instruction(s):_ `vrev64.16 D0, D0'
33942
33943    * uint8x8_t vrev64_u8 (uint8x8_t)
33944      _Form of expected instruction(s):_ `vrev64.8 D0, D0'
33945
33946    * int32x2_t vrev64_s32 (int32x2_t)
33947      _Form of expected instruction(s):_ `vrev64.32 D0, D0'
33948
33949    * int16x4_t vrev64_s16 (int16x4_t)
33950      _Form of expected instruction(s):_ `vrev64.16 D0, D0'
33951
33952    * int8x8_t vrev64_s8 (int8x8_t)
33953      _Form of expected instruction(s):_ `vrev64.8 D0, D0'
33954
33955    * float32x2_t vrev64_f32 (float32x2_t)
33956      _Form of expected instruction(s):_ `vrev64.32 D0, D0'
33957
33958    * poly16x4_t vrev64_p16 (poly16x4_t)
33959      _Form of expected instruction(s):_ `vrev64.16 D0, D0'
33960
33961    * poly8x8_t vrev64_p8 (poly8x8_t)
33962      _Form of expected instruction(s):_ `vrev64.8 D0, D0'
33963
33964    * uint32x4_t vrev64q_u32 (uint32x4_t)
33965      _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
33966
33967    * uint16x8_t vrev64q_u16 (uint16x8_t)
33968      _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
33969
33970    * uint8x16_t vrev64q_u8 (uint8x16_t)
33971      _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
33972
33973    * int32x4_t vrev64q_s32 (int32x4_t)
33974      _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
33975
33976    * int16x8_t vrev64q_s16 (int16x8_t)
33977      _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
33978
33979    * int8x16_t vrev64q_s8 (int8x16_t)
33980      _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
33981
33982    * float32x4_t vrev64q_f32 (float32x4_t)
33983      _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
33984
33985    * poly16x8_t vrev64q_p16 (poly16x8_t)
33986      _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
33987
33988    * poly8x16_t vrev64q_p8 (poly8x16_t)
33989      _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
33990
33991    * uint16x4_t vrev32_u16 (uint16x4_t)
33992      _Form of expected instruction(s):_ `vrev32.16 D0, D0'
33993
33994    * int16x4_t vrev32_s16 (int16x4_t)
33995      _Form of expected instruction(s):_ `vrev32.16 D0, D0'
33996
33997    * uint8x8_t vrev32_u8 (uint8x8_t)
33998      _Form of expected instruction(s):_ `vrev32.8 D0, D0'
33999
34000    * int8x8_t vrev32_s8 (int8x8_t)
34001      _Form of expected instruction(s):_ `vrev32.8 D0, D0'
34002
34003    * poly16x4_t vrev32_p16 (poly16x4_t)
34004      _Form of expected instruction(s):_ `vrev32.16 D0, D0'
34005
34006    * poly8x8_t vrev32_p8 (poly8x8_t)
34007      _Form of expected instruction(s):_ `vrev32.8 D0, D0'
34008
34009    * uint16x8_t vrev32q_u16 (uint16x8_t)
34010      _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
34011
34012    * int16x8_t vrev32q_s16 (int16x8_t)
34013      _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
34014
34015    * uint8x16_t vrev32q_u8 (uint8x16_t)
34016      _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
34017
34018    * int8x16_t vrev32q_s8 (int8x16_t)
34019      _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
34020
34021    * poly16x8_t vrev32q_p16 (poly16x8_t)
34022      _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
34023
34024    * poly8x16_t vrev32q_p8 (poly8x16_t)
34025      _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
34026
34027    * uint8x8_t vrev16_u8 (uint8x8_t)
34028      _Form of expected instruction(s):_ `vrev16.8 D0, D0'
34029
34030    * int8x8_t vrev16_s8 (int8x8_t)
34031      _Form of expected instruction(s):_ `vrev16.8 D0, D0'
34032
34033    * poly8x8_t vrev16_p8 (poly8x8_t)
34034      _Form of expected instruction(s):_ `vrev16.8 D0, D0'
34035
34036    * uint8x16_t vrev16q_u8 (uint8x16_t)
34037      _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
34038
34039    * int8x16_t vrev16q_s8 (int8x16_t)
34040      _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
34041
34042    * poly8x16_t vrev16q_p8 (poly8x16_t)
34043      _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
34044
34045 6.56.3.71 Bit selection
34046 .......................
34047
34048    * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
34049      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34050      D0, D0, D0' _or_ `vbif D0, D0, D0'
34051
34052    * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
34053      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34054      D0, D0, D0' _or_ `vbif D0, D0, D0'
34055
34056    * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
34057      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34058      D0, D0, D0' _or_ `vbif D0, D0, D0'
34059
34060    * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t)
34061      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34062      D0, D0, D0' _or_ `vbif D0, D0, D0'
34063
34064    * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t)
34065      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34066      D0, D0, D0' _or_ `vbif D0, D0, D0'
34067
34068    * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t)
34069      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34070      D0, D0, D0' _or_ `vbif D0, D0, D0'
34071
34072    * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t)
34073      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34074      D0, D0, D0' _or_ `vbif D0, D0, D0'
34075
34076    * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t)
34077      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34078      D0, D0, D0' _or_ `vbif D0, D0, D0'
34079
34080    * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t)
34081      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34082      D0, D0, D0' _or_ `vbif D0, D0, D0'
34083
34084    * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t)
34085      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34086      D0, D0, D0' _or_ `vbif D0, D0, D0'
34087
34088    * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t)
34089      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34090      D0, D0, D0' _or_ `vbif D0, D0, D0'
34091
34092    * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
34093      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34094      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34095
34096    * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
34097      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34098      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34099
34100    * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
34101      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34102      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34103
34104    * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t)
34105      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34106      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34107
34108    * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t)
34109      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34110      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34111
34112    * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t)
34113      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34114      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34115
34116    * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t)
34117      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34118      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34119
34120    * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t)
34121      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34122      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34123
34124    * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t)
34125      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34126      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34127
34128    * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t)
34129      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34130      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34131
34132    * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t)
34133      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34134      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34135
34136 6.56.3.72 Transpose elements
34137 ............................
34138
34139    * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t)
34140      _Form of expected instruction(s):_ `vtrn.16 D0, D1'
34141
34142    * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t)
34143      _Form of expected instruction(s):_ `vtrn.8 D0, D1'
34144
34145    * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t)
34146      _Form of expected instruction(s):_ `vtrn.16 D0, D1'
34147
34148    * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t)
34149      _Form of expected instruction(s):_ `vtrn.8 D0, D1'
34150
34151    * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t)
34152      _Form of expected instruction(s):_ `vtrn.16 D0, D1'
34153
34154    * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t)
34155      _Form of expected instruction(s):_ `vtrn.8 D0, D1'
34156
34157    * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t)
34158      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34159
34160    * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t)
34161      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34162
34163    * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t)
34164      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34165
34166    * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t)
34167      _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
34168
34169    * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t)
34170      _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
34171
34172    * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t)
34173      _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
34174
34175    * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t)
34176      _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
34177
34178    * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t)
34179      _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
34180
34181    * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t)
34182      _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
34183
34184    * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t)
34185      _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
34186
34187    * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t)
34188      _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
34189
34190    * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t)
34191      _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
34192
34193 6.56.3.73 Zip elements
34194 ......................
34195
34196    * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t)
34197      _Form of expected instruction(s):_ `vzip.16 D0, D1'
34198
34199    * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t)
34200      _Form of expected instruction(s):_ `vzip.8 D0, D1'
34201
34202    * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t)
34203      _Form of expected instruction(s):_ `vzip.16 D0, D1'
34204
34205    * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t)
34206      _Form of expected instruction(s):_ `vzip.8 D0, D1'
34207
34208    * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t)
34209      _Form of expected instruction(s):_ `vzip.16 D0, D1'
34210
34211    * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t)
34212      _Form of expected instruction(s):_ `vzip.8 D0, D1'
34213
34214    * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t)
34215      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34216
34217    * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t)
34218      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34219
34220    * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t)
34221      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34222
34223    * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t)
34224      _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
34225
34226    * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t)
34227      _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
34228
34229    * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t)
34230      _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
34231
34232    * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t)
34233      _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
34234
34235    * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t)
34236      _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
34237
34238    * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t)
34239      _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
34240
34241    * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t)
34242      _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
34243
34244    * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t)
34245      _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
34246
34247    * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t)
34248      _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
34249
34250 6.56.3.74 Unzip elements
34251 ........................
34252
34253    * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t)
34254      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34255
34256    * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t)
34257      _Form of expected instruction(s):_ `vuzp.16 D0, D1'
34258
34259    * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t)
34260      _Form of expected instruction(s):_ `vuzp.8 D0, D1'
34261
34262    * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t)
34263      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34264
34265    * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t)
34266      _Form of expected instruction(s):_ `vuzp.16 D0, D1'
34267
34268    * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t)
34269      _Form of expected instruction(s):_ `vuzp.8 D0, D1'
34270
34271    * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t)
34272      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34273
34274    * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t)
34275      _Form of expected instruction(s):_ `vuzp.16 D0, D1'
34276
34277    * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t)
34278      _Form of expected instruction(s):_ `vuzp.8 D0, D1'
34279
34280    * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t)
34281      _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
34282
34283    * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t)
34284      _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
34285
34286    * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t)
34287      _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
34288
34289    * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t)
34290      _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
34291
34292    * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t)
34293      _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
34294
34295    * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t)
34296      _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
34297
34298    * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t)
34299      _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
34300
34301    * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t)
34302      _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
34303
34304    * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t)
34305      _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
34306
34307 6.56.3.75 Element/structure loads, VLD1 variants
34308 ................................................
34309
34310    * uint32x2_t vld1_u32 (const uint32_t *)
34311      _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
34312
34313    * uint16x4_t vld1_u16 (const uint16_t *)
34314      _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
34315
34316    * uint8x8_t vld1_u8 (const uint8_t *)
34317      _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
34318
34319    * int32x2_t vld1_s32 (const int32_t *)
34320      _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
34321
34322    * int16x4_t vld1_s16 (const int16_t *)
34323      _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
34324
34325    * int8x8_t vld1_s8 (const int8_t *)
34326      _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
34327
34328    * uint64x1_t vld1_u64 (const uint64_t *)
34329      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34330
34331    * int64x1_t vld1_s64 (const int64_t *)
34332      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34333
34334    * float32x2_t vld1_f32 (const float32_t *)
34335      _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
34336
34337    * poly16x4_t vld1_p16 (const poly16_t *)
34338      _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
34339
34340    * poly8x8_t vld1_p8 (const poly8_t *)
34341      _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
34342
34343    * uint32x4_t vld1q_u32 (const uint32_t *)
34344      _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
34345
34346    * uint16x8_t vld1q_u16 (const uint16_t *)
34347      _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
34348
34349    * uint8x16_t vld1q_u8 (const uint8_t *)
34350      _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
34351
34352    * int32x4_t vld1q_s32 (const int32_t *)
34353      _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
34354
34355    * int16x8_t vld1q_s16 (const int16_t *)
34356      _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
34357
34358    * int8x16_t vld1q_s8 (const int8_t *)
34359      _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
34360
34361    * uint64x2_t vld1q_u64 (const uint64_t *)
34362      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
34363
34364    * int64x2_t vld1q_s64 (const int64_t *)
34365      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
34366
34367    * float32x4_t vld1q_f32 (const float32_t *)
34368      _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
34369
34370    * poly16x8_t vld1q_p16 (const poly16_t *)
34371      _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
34372
34373    * poly8x16_t vld1q_p8 (const poly8_t *)
34374      _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
34375
34376    * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int)
34377      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
34378
34379    * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int)
34380      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
34381
34382    * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int)
34383      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
34384
34385    * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int)
34386      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
34387
34388    * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int)
34389      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
34390
34391    * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int)
34392      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
34393
34394    * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const
34395      int)
34396      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
34397
34398    * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int)
34399      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
34400
34401    * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int)
34402      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
34403
34404    * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int)
34405      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34406
34407    * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int)
34408      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34409
34410    * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int)
34411      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
34412
34413    * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int)
34414      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
34415
34416    * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int)
34417      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
34418
34419    * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int)
34420      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
34421
34422    * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int)
34423      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
34424
34425    * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int)
34426      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
34427
34428    * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const
34429      int)
34430      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
34431
34432    * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int)
34433      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
34434
34435    * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int)
34436      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
34437
34438    * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int)
34439      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34440
34441    * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int)
34442      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34443
34444    * uint32x2_t vld1_dup_u32 (const uint32_t *)
34445      _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
34446
34447    * uint16x4_t vld1_dup_u16 (const uint16_t *)
34448      _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
34449
34450    * uint8x8_t vld1_dup_u8 (const uint8_t *)
34451      _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
34452
34453    * int32x2_t vld1_dup_s32 (const int32_t *)
34454      _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
34455
34456    * int16x4_t vld1_dup_s16 (const int16_t *)
34457      _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
34458
34459    * int8x8_t vld1_dup_s8 (const int8_t *)
34460      _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
34461
34462    * float32x2_t vld1_dup_f32 (const float32_t *)
34463      _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
34464
34465    * poly16x4_t vld1_dup_p16 (const poly16_t *)
34466      _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
34467
34468    * poly8x8_t vld1_dup_p8 (const poly8_t *)
34469      _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
34470
34471    * uint64x1_t vld1_dup_u64 (const uint64_t *)
34472      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34473
34474    * int64x1_t vld1_dup_s64 (const int64_t *)
34475      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34476
34477    * uint32x4_t vld1q_dup_u32 (const uint32_t *)
34478      _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
34479
34480    * uint16x8_t vld1q_dup_u16 (const uint16_t *)
34481      _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
34482
34483    * uint8x16_t vld1q_dup_u8 (const uint8_t *)
34484      _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
34485
34486    * int32x4_t vld1q_dup_s32 (const int32_t *)
34487      _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
34488
34489    * int16x8_t vld1q_dup_s16 (const int16_t *)
34490      _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
34491
34492    * int8x16_t vld1q_dup_s8 (const int8_t *)
34493      _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
34494
34495    * float32x4_t vld1q_dup_f32 (const float32_t *)
34496      _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
34497
34498    * poly16x8_t vld1q_dup_p16 (const poly16_t *)
34499      _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
34500
34501    * poly8x16_t vld1q_dup_p8 (const poly8_t *)
34502      _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
34503
34504    * uint64x2_t vld1q_dup_u64 (const uint64_t *)
34505      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34506
34507    * int64x2_t vld1q_dup_s64 (const int64_t *)
34508      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34509
34510 6.56.3.76 Element/structure stores, VST1 variants
34511 .................................................
34512
34513    * void vst1_u32 (uint32_t *, uint32x2_t)
34514      _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
34515
34516    * void vst1_u16 (uint16_t *, uint16x4_t)
34517      _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
34518
34519    * void vst1_u8 (uint8_t *, uint8x8_t)
34520      _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
34521
34522    * void vst1_s32 (int32_t *, int32x2_t)
34523      _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
34524
34525    * void vst1_s16 (int16_t *, int16x4_t)
34526      _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
34527
34528    * void vst1_s8 (int8_t *, int8x8_t)
34529      _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
34530
34531    * void vst1_u64 (uint64_t *, uint64x1_t)
34532      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
34533
34534    * void vst1_s64 (int64_t *, int64x1_t)
34535      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
34536
34537    * void vst1_f32 (float32_t *, float32x2_t)
34538      _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
34539
34540    * void vst1_p16 (poly16_t *, poly16x4_t)
34541      _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
34542
34543    * void vst1_p8 (poly8_t *, poly8x8_t)
34544      _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
34545
34546    * void vst1q_u32 (uint32_t *, uint32x4_t)
34547      _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
34548
34549    * void vst1q_u16 (uint16_t *, uint16x8_t)
34550      _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
34551
34552    * void vst1q_u8 (uint8_t *, uint8x16_t)
34553      _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
34554
34555    * void vst1q_s32 (int32_t *, int32x4_t)
34556      _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
34557
34558    * void vst1q_s16 (int16_t *, int16x8_t)
34559      _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
34560
34561    * void vst1q_s8 (int8_t *, int8x16_t)
34562      _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
34563
34564    * void vst1q_u64 (uint64_t *, uint64x2_t)
34565      _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
34566
34567    * void vst1q_s64 (int64_t *, int64x2_t)
34568      _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
34569
34570    * void vst1q_f32 (float32_t *, float32x4_t)
34571      _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
34572
34573    * void vst1q_p16 (poly16_t *, poly16x8_t)
34574      _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
34575
34576    * void vst1q_p8 (poly8_t *, poly8x16_t)
34577      _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
34578
34579    * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int)
34580      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
34581
34582    * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int)
34583      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
34584
34585    * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int)
34586      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
34587
34588    * void vst1_lane_s32 (int32_t *, int32x2_t, const int)
34589      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
34590
34591    * void vst1_lane_s16 (int16_t *, int16x4_t, const int)
34592      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
34593
34594    * void vst1_lane_s8 (int8_t *, int8x8_t, const int)
34595      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
34596
34597    * void vst1_lane_f32 (float32_t *, float32x2_t, const int)
34598      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
34599
34600    * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int)
34601      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
34602
34603    * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int)
34604      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
34605
34606    * void vst1_lane_s64 (int64_t *, int64x1_t, const int)
34607      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
34608
34609    * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int)
34610      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
34611
34612    * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int)
34613      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
34614
34615    * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int)
34616      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
34617
34618    * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int)
34619      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
34620
34621    * void vst1q_lane_s32 (int32_t *, int32x4_t, const int)
34622      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
34623
34624    * void vst1q_lane_s16 (int16_t *, int16x8_t, const int)
34625      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
34626
34627    * void vst1q_lane_s8 (int8_t *, int8x16_t, const int)
34628      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
34629
34630    * void vst1q_lane_f32 (float32_t *, float32x4_t, const int)
34631      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
34632
34633    * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int)
34634      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
34635
34636    * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int)
34637      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
34638
34639    * void vst1q_lane_s64 (int64_t *, int64x2_t, const int)
34640      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
34641
34642    * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int)
34643      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
34644
34645 6.56.3.77 Element/structure loads, VLD2 variants
34646 ................................................
34647
34648    * uint32x2x2_t vld2_u32 (const uint32_t *)
34649      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
34650
34651    * uint16x4x2_t vld2_u16 (const uint16_t *)
34652      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
34653
34654    * uint8x8x2_t vld2_u8 (const uint8_t *)
34655      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
34656
34657    * int32x2x2_t vld2_s32 (const int32_t *)
34658      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
34659
34660    * int16x4x2_t vld2_s16 (const int16_t *)
34661      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
34662
34663    * int8x8x2_t vld2_s8 (const int8_t *)
34664      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
34665
34666    * float32x2x2_t vld2_f32 (const float32_t *)
34667      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
34668
34669    * poly16x4x2_t vld2_p16 (const poly16_t *)
34670      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
34671
34672    * poly8x8x2_t vld2_p8 (const poly8_t *)
34673      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
34674
34675    * uint64x1x2_t vld2_u64 (const uint64_t *)
34676      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
34677
34678    * int64x1x2_t vld2_s64 (const int64_t *)
34679      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
34680
34681    * uint32x4x2_t vld2q_u32 (const uint32_t *)
34682      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
34683
34684    * uint16x8x2_t vld2q_u16 (const uint16_t *)
34685      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
34686
34687    * uint8x16x2_t vld2q_u8 (const uint8_t *)
34688      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
34689
34690    * int32x4x2_t vld2q_s32 (const int32_t *)
34691      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
34692
34693    * int16x8x2_t vld2q_s16 (const int16_t *)
34694      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
34695
34696    * int8x16x2_t vld2q_s8 (const int8_t *)
34697      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
34698
34699    * float32x4x2_t vld2q_f32 (const float32_t *)
34700      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
34701
34702    * poly16x8x2_t vld2q_p16 (const poly16_t *)
34703      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
34704
34705    * poly8x16x2_t vld2q_p8 (const poly8_t *)
34706      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
34707
34708    * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const
34709      int)
34710      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
34711
34712    * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const
34713      int)
34714      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
34715
34716    * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int)
34717      _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
34718
34719    * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int)
34720      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
34721
34722    * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int)
34723      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
34724
34725    * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int)
34726      _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
34727
34728    * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t,
34729      const int)
34730      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
34731
34732    * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const
34733      int)
34734      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
34735
34736    * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int)
34737      _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
34738
34739    * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const
34740      int)
34741      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
34742
34743    * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const
34744      int)
34745      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
34746
34747    * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const
34748      int)
34749      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
34750
34751    * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const
34752      int)
34753      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
34754
34755    * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t,
34756      const int)
34757      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
34758
34759    * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const
34760      int)
34761      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
34762
34763    * uint32x2x2_t vld2_dup_u32 (const uint32_t *)
34764      _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
34765
34766    * uint16x4x2_t vld2_dup_u16 (const uint16_t *)
34767      _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
34768
34769    * uint8x8x2_t vld2_dup_u8 (const uint8_t *)
34770      _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
34771
34772    * int32x2x2_t vld2_dup_s32 (const int32_t *)
34773      _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
34774
34775    * int16x4x2_t vld2_dup_s16 (const int16_t *)
34776      _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
34777
34778    * int8x8x2_t vld2_dup_s8 (const int8_t *)
34779      _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
34780
34781    * float32x2x2_t vld2_dup_f32 (const float32_t *)
34782      _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
34783
34784    * poly16x4x2_t vld2_dup_p16 (const poly16_t *)
34785      _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
34786
34787    * poly8x8x2_t vld2_dup_p8 (const poly8_t *)
34788      _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
34789
34790    * uint64x1x2_t vld2_dup_u64 (const uint64_t *)
34791      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
34792
34793    * int64x1x2_t vld2_dup_s64 (const int64_t *)
34794      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
34795
34796 6.56.3.78 Element/structure stores, VST2 variants
34797 .................................................
34798
34799    * void vst2_u32 (uint32_t *, uint32x2x2_t)
34800      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
34801
34802    * void vst2_u16 (uint16_t *, uint16x4x2_t)
34803      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
34804
34805    * void vst2_u8 (uint8_t *, uint8x8x2_t)
34806      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
34807
34808    * void vst2_s32 (int32_t *, int32x2x2_t)
34809      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
34810
34811    * void vst2_s16 (int16_t *, int16x4x2_t)
34812      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
34813
34814    * void vst2_s8 (int8_t *, int8x8x2_t)
34815      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
34816
34817    * void vst2_f32 (float32_t *, float32x2x2_t)
34818      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
34819
34820    * void vst2_p16 (poly16_t *, poly16x4x2_t)
34821      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
34822
34823    * void vst2_p8 (poly8_t *, poly8x8x2_t)
34824      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
34825
34826    * void vst2_u64 (uint64_t *, uint64x1x2_t)
34827      _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
34828
34829    * void vst2_s64 (int64_t *, int64x1x2_t)
34830      _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
34831
34832    * void vst2q_u32 (uint32_t *, uint32x4x2_t)
34833      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
34834
34835    * void vst2q_u16 (uint16_t *, uint16x8x2_t)
34836      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
34837
34838    * void vst2q_u8 (uint8_t *, uint8x16x2_t)
34839      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
34840
34841    * void vst2q_s32 (int32_t *, int32x4x2_t)
34842      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
34843
34844    * void vst2q_s16 (int16_t *, int16x8x2_t)
34845      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
34846
34847    * void vst2q_s8 (int8_t *, int8x16x2_t)
34848      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
34849
34850    * void vst2q_f32 (float32_t *, float32x4x2_t)
34851      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
34852
34853    * void vst2q_p16 (poly16_t *, poly16x8x2_t)
34854      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
34855
34856    * void vst2q_p8 (poly8_t *, poly8x16x2_t)
34857      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
34858
34859    * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int)
34860      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
34861
34862    * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int)
34863      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
34864
34865    * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int)
34866      _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
34867
34868    * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int)
34869      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
34870
34871    * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int)
34872      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
34873
34874    * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int)
34875      _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
34876
34877    * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int)
34878      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
34879
34880    * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int)
34881      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
34882
34883    * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int)
34884      _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
34885
34886    * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int)
34887      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
34888
34889    * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int)
34890      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
34891
34892    * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int)
34893      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
34894
34895    * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int)
34896      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
34897
34898    * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int)
34899      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
34900
34901    * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int)
34902      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
34903
34904 6.56.3.79 Element/structure loads, VLD3 variants
34905 ................................................
34906
34907    * uint32x2x3_t vld3_u32 (const uint32_t *)
34908      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
34909
34910    * uint16x4x3_t vld3_u16 (const uint16_t *)
34911      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
34912
34913    * uint8x8x3_t vld3_u8 (const uint8_t *)
34914      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
34915
34916    * int32x2x3_t vld3_s32 (const int32_t *)
34917      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
34918
34919    * int16x4x3_t vld3_s16 (const int16_t *)
34920      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
34921
34922    * int8x8x3_t vld3_s8 (const int8_t *)
34923      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
34924
34925    * float32x2x3_t vld3_f32 (const float32_t *)
34926      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
34927
34928    * poly16x4x3_t vld3_p16 (const poly16_t *)
34929      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
34930
34931    * poly8x8x3_t vld3_p8 (const poly8_t *)
34932      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
34933
34934    * uint64x1x3_t vld3_u64 (const uint64_t *)
34935      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
34936
34937    * int64x1x3_t vld3_s64 (const int64_t *)
34938      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
34939
34940    * uint32x4x3_t vld3q_u32 (const uint32_t *)
34941      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
34942
34943    * uint16x8x3_t vld3q_u16 (const uint16_t *)
34944      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
34945
34946    * uint8x16x3_t vld3q_u8 (const uint8_t *)
34947      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
34948
34949    * int32x4x3_t vld3q_s32 (const int32_t *)
34950      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
34951
34952    * int16x8x3_t vld3q_s16 (const int16_t *)
34953      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
34954
34955    * int8x16x3_t vld3q_s8 (const int8_t *)
34956      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
34957
34958    * float32x4x3_t vld3q_f32 (const float32_t *)
34959      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
34960
34961    * poly16x8x3_t vld3q_p16 (const poly16_t *)
34962      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
34963
34964    * poly8x16x3_t vld3q_p8 (const poly8_t *)
34965      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
34966
34967    * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const
34968      int)
34969      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
34970      [R0]'
34971
34972    * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const
34973      int)
34974      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
34975      [R0]'
34976
34977    * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int)
34978      _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
34979      [R0]'
34980
34981    * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int)
34982      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
34983      [R0]'
34984
34985    * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int)
34986      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
34987      [R0]'
34988
34989    * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int)
34990      _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
34991      [R0]'
34992
34993    * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t,
34994      const int)
34995      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
34996      [R0]'
34997
34998    * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const
34999      int)
35000      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
35001      [R0]'
35002
35003    * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int)
35004      _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
35005      [R0]'
35006
35007    * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const
35008      int)
35009      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
35010      [R0]'
35011
35012    * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const
35013      int)
35014      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
35015      [R0]'
35016
35017    * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const
35018      int)
35019      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
35020      [R0]'
35021
35022    * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const
35023      int)
35024      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
35025      [R0]'
35026
35027    * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t,
35028      const int)
35029      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
35030      [R0]'
35031
35032    * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const
35033      int)
35034      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
35035      [R0]'
35036
35037    * uint32x2x3_t vld3_dup_u32 (const uint32_t *)
35038      _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
35039      [R0]'
35040
35041    * uint16x4x3_t vld3_dup_u16 (const uint16_t *)
35042      _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
35043      [R0]'
35044
35045    * uint8x8x3_t vld3_dup_u8 (const uint8_t *)
35046      _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
35047      [R0]'
35048
35049    * int32x2x3_t vld3_dup_s32 (const int32_t *)
35050      _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
35051      [R0]'
35052
35053    * int16x4x3_t vld3_dup_s16 (const int16_t *)
35054      _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
35055      [R0]'
35056
35057    * int8x8x3_t vld3_dup_s8 (const int8_t *)
35058      _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
35059      [R0]'
35060
35061    * float32x2x3_t vld3_dup_f32 (const float32_t *)
35062      _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
35063      [R0]'
35064
35065    * poly16x4x3_t vld3_dup_p16 (const poly16_t *)
35066      _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
35067      [R0]'
35068
35069    * poly8x8x3_t vld3_dup_p8 (const poly8_t *)
35070      _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
35071      [R0]'
35072
35073    * uint64x1x3_t vld3_dup_u64 (const uint64_t *)
35074      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
35075
35076    * int64x1x3_t vld3_dup_s64 (const int64_t *)
35077      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
35078
35079 6.56.3.80 Element/structure stores, VST3 variants
35080 .................................................
35081
35082    * void vst3_u32 (uint32_t *, uint32x2x3_t)
35083      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
35084
35085    * void vst3_u16 (uint16_t *, uint16x4x3_t)
35086      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
35087
35088    * void vst3_u8 (uint8_t *, uint8x8x3_t)
35089      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
35090
35091    * void vst3_s32 (int32_t *, int32x2x3_t)
35092      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
35093
35094    * void vst3_s16 (int16_t *, int16x4x3_t)
35095      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
35096
35097    * void vst3_s8 (int8_t *, int8x8x3_t)
35098      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
35099
35100    * void vst3_f32 (float32_t *, float32x2x3_t)
35101      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
35102
35103    * void vst3_p16 (poly16_t *, poly16x4x3_t)
35104      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
35105
35106    * void vst3_p8 (poly8_t *, poly8x8x3_t)
35107      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
35108
35109    * void vst3_u64 (uint64_t *, uint64x1x3_t)
35110      _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
35111
35112    * void vst3_s64 (int64_t *, int64x1x3_t)
35113      _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
35114
35115    * void vst3q_u32 (uint32_t *, uint32x4x3_t)
35116      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
35117
35118    * void vst3q_u16 (uint16_t *, uint16x8x3_t)
35119      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
35120
35121    * void vst3q_u8 (uint8_t *, uint8x16x3_t)
35122      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
35123
35124    * void vst3q_s32 (int32_t *, int32x4x3_t)
35125      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
35126
35127    * void vst3q_s16 (int16_t *, int16x8x3_t)
35128      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
35129
35130    * void vst3q_s8 (int8_t *, int8x16x3_t)
35131      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
35132
35133    * void vst3q_f32 (float32_t *, float32x4x3_t)
35134      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
35135
35136    * void vst3q_p16 (poly16_t *, poly16x8x3_t)
35137      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
35138
35139    * void vst3q_p8 (poly8_t *, poly8x16x3_t)
35140      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
35141
35142    * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int)
35143      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
35144      [R0]'
35145
35146    * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int)
35147      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
35148      [R0]'
35149
35150    * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int)
35151      _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
35152      [R0]'
35153
35154    * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int)
35155      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
35156      [R0]'
35157
35158    * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int)
35159      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
35160      [R0]'
35161
35162    * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int)
35163      _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
35164      [R0]'
35165
35166    * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int)
35167      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
35168      [R0]'
35169
35170    * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int)
35171      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
35172      [R0]'
35173
35174    * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int)
35175      _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
35176      [R0]'
35177
35178    * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int)
35179      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
35180      [R0]'
35181
35182    * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int)
35183      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
35184      [R0]'
35185
35186    * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int)
35187      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
35188      [R0]'
35189
35190    * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int)
35191      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
35192      [R0]'
35193
35194    * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int)
35195      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
35196      [R0]'
35197
35198    * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int)
35199      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
35200      [R0]'
35201
35202 6.56.3.81 Element/structure loads, VLD4 variants
35203 ................................................
35204
35205    * uint32x2x4_t vld4_u32 (const uint32_t *)
35206      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
35207
35208    * uint16x4x4_t vld4_u16 (const uint16_t *)
35209      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
35210
35211    * uint8x8x4_t vld4_u8 (const uint8_t *)
35212      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
35213
35214    * int32x2x4_t vld4_s32 (const int32_t *)
35215      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
35216
35217    * int16x4x4_t vld4_s16 (const int16_t *)
35218      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
35219
35220    * int8x8x4_t vld4_s8 (const int8_t *)
35221      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
35222
35223    * float32x2x4_t vld4_f32 (const float32_t *)
35224      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
35225
35226    * poly16x4x4_t vld4_p16 (const poly16_t *)
35227      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
35228
35229    * poly8x8x4_t vld4_p8 (const poly8_t *)
35230      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
35231
35232    * uint64x1x4_t vld4_u64 (const uint64_t *)
35233      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
35234
35235    * int64x1x4_t vld4_s64 (const int64_t *)
35236      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
35237
35238    * uint32x4x4_t vld4q_u32 (const uint32_t *)
35239      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
35240
35241    * uint16x8x4_t vld4q_u16 (const uint16_t *)
35242      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
35243
35244    * uint8x16x4_t vld4q_u8 (const uint8_t *)
35245      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
35246
35247    * int32x4x4_t vld4q_s32 (const int32_t *)
35248      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
35249
35250    * int16x8x4_t vld4q_s16 (const int16_t *)
35251      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
35252
35253    * int8x16x4_t vld4q_s8 (const int8_t *)
35254      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
35255
35256    * float32x4x4_t vld4q_f32 (const float32_t *)
35257      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
35258
35259    * poly16x8x4_t vld4q_p16 (const poly16_t *)
35260      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
35261
35262    * poly8x16x4_t vld4q_p8 (const poly8_t *)
35263      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
35264
35265    * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const
35266      int)
35267      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
35268      D3[0]}, [R0]'
35269
35270    * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const
35271      int)
35272      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
35273      D3[0]}, [R0]'
35274
35275    * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int)
35276      _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
35277      D3[0]}, [R0]'
35278
35279    * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int)
35280      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
35281      D3[0]}, [R0]'
35282
35283    * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int)
35284      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
35285      D3[0]}, [R0]'
35286
35287    * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int)
35288      _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
35289      D3[0]}, [R0]'
35290
35291    * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t,
35292      const int)
35293      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
35294      D3[0]}, [R0]'
35295
35296    * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const
35297      int)
35298      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
35299      D3[0]}, [R0]'
35300
35301    * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int)
35302      _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
35303      D3[0]}, [R0]'
35304
35305    * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const
35306      int)
35307      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
35308      D3[0]}, [R0]'
35309
35310    * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const
35311      int)
35312      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
35313      D3[0]}, [R0]'
35314
35315    * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const
35316      int)
35317      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
35318      D3[0]}, [R0]'
35319
35320    * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const
35321      int)
35322      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
35323      D3[0]}, [R0]'
35324
35325    * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t,
35326      const int)
35327      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
35328      D3[0]}, [R0]'
35329
35330    * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const
35331      int)
35332      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
35333      D3[0]}, [R0]'
35334
35335    * uint32x2x4_t vld4_dup_u32 (const uint32_t *)
35336      _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
35337      D3[]}, [R0]'
35338
35339    * uint16x4x4_t vld4_dup_u16 (const uint16_t *)
35340      _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
35341      D3[]}, [R0]'
35342
35343    * uint8x8x4_t vld4_dup_u8 (const uint8_t *)
35344      _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
35345      D3[]}, [R0]'
35346
35347    * int32x2x4_t vld4_dup_s32 (const int32_t *)
35348      _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
35349      D3[]}, [R0]'
35350
35351    * int16x4x4_t vld4_dup_s16 (const int16_t *)
35352      _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
35353      D3[]}, [R0]'
35354
35355    * int8x8x4_t vld4_dup_s8 (const int8_t *)
35356      _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
35357      D3[]}, [R0]'
35358
35359    * float32x2x4_t vld4_dup_f32 (const float32_t *)
35360      _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
35361      D3[]}, [R0]'
35362
35363    * poly16x4x4_t vld4_dup_p16 (const poly16_t *)
35364      _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
35365      D3[]}, [R0]'
35366
35367    * poly8x8x4_t vld4_dup_p8 (const poly8_t *)
35368      _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
35369      D3[]}, [R0]'
35370
35371    * uint64x1x4_t vld4_dup_u64 (const uint64_t *)
35372      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
35373
35374    * int64x1x4_t vld4_dup_s64 (const int64_t *)
35375      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
35376
35377 6.56.3.82 Element/structure stores, VST4 variants
35378 .................................................
35379
35380    * void vst4_u32 (uint32_t *, uint32x2x4_t)
35381      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
35382
35383    * void vst4_u16 (uint16_t *, uint16x4x4_t)
35384      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
35385
35386    * void vst4_u8 (uint8_t *, uint8x8x4_t)
35387      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
35388
35389    * void vst4_s32 (int32_t *, int32x2x4_t)
35390      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
35391
35392    * void vst4_s16 (int16_t *, int16x4x4_t)
35393      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
35394
35395    * void vst4_s8 (int8_t *, int8x8x4_t)
35396      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
35397
35398    * void vst4_f32 (float32_t *, float32x2x4_t)
35399      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
35400
35401    * void vst4_p16 (poly16_t *, poly16x4x4_t)
35402      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
35403
35404    * void vst4_p8 (poly8_t *, poly8x8x4_t)
35405      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
35406
35407    * void vst4_u64 (uint64_t *, uint64x1x4_t)
35408      _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
35409
35410    * void vst4_s64 (int64_t *, int64x1x4_t)
35411      _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
35412
35413    * void vst4q_u32 (uint32_t *, uint32x4x4_t)
35414      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
35415
35416    * void vst4q_u16 (uint16_t *, uint16x8x4_t)
35417      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
35418
35419    * void vst4q_u8 (uint8_t *, uint8x16x4_t)
35420      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
35421
35422    * void vst4q_s32 (int32_t *, int32x4x4_t)
35423      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
35424
35425    * void vst4q_s16 (int16_t *, int16x8x4_t)
35426      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
35427
35428    * void vst4q_s8 (int8_t *, int8x16x4_t)
35429      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
35430
35431    * void vst4q_f32 (float32_t *, float32x4x4_t)
35432      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
35433
35434    * void vst4q_p16 (poly16_t *, poly16x8x4_t)
35435      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
35436
35437    * void vst4q_p8 (poly8_t *, poly8x16x4_t)
35438      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
35439
35440    * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int)
35441      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
35442      D3[0]}, [R0]'
35443
35444    * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int)
35445      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
35446      D3[0]}, [R0]'
35447
35448    * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int)
35449      _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
35450      D3[0]}, [R0]'
35451
35452    * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int)
35453      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
35454      D3[0]}, [R0]'
35455
35456    * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int)
35457      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
35458      D3[0]}, [R0]'
35459
35460    * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int)
35461      _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
35462      D3[0]}, [R0]'
35463
35464    * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int)
35465      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
35466      D3[0]}, [R0]'
35467
35468    * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int)
35469      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
35470      D3[0]}, [R0]'
35471
35472    * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int)
35473      _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
35474      D3[0]}, [R0]'
35475
35476    * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int)
35477      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
35478      D3[0]}, [R0]'
35479
35480    * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int)
35481      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
35482      D3[0]}, [R0]'
35483
35484    * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int)
35485      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
35486      D3[0]}, [R0]'
35487
35488    * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int)
35489      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
35490      D3[0]}, [R0]'
35491
35492    * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int)
35493      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
35494      D3[0]}, [R0]'
35495
35496    * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int)
35497      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
35498      D3[0]}, [R0]'
35499
35500 6.56.3.83 Logical operations (AND)
35501 ..................................
35502
35503    * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t)
35504      _Form of expected instruction(s):_ `vand D0, D0, D0'
35505
35506    * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t)
35507      _Form of expected instruction(s):_ `vand D0, D0, D0'
35508
35509    * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t)
35510      _Form of expected instruction(s):_ `vand D0, D0, D0'
35511
35512    * int32x2_t vand_s32 (int32x2_t, int32x2_t)
35513      _Form of expected instruction(s):_ `vand D0, D0, D0'
35514
35515    * int16x4_t vand_s16 (int16x4_t, int16x4_t)
35516      _Form of expected instruction(s):_ `vand D0, D0, D0'
35517
35518    * int8x8_t vand_s8 (int8x8_t, int8x8_t)
35519      _Form of expected instruction(s):_ `vand D0, D0, D0'
35520
35521    * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t)
35522
35523    * int64x1_t vand_s64 (int64x1_t, int64x1_t)
35524
35525    * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t)
35526      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35527
35528    * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t)
35529      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35530
35531    * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t)
35532      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35533
35534    * int32x4_t vandq_s32 (int32x4_t, int32x4_t)
35535      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35536
35537    * int16x8_t vandq_s16 (int16x8_t, int16x8_t)
35538      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35539
35540    * int8x16_t vandq_s8 (int8x16_t, int8x16_t)
35541      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35542
35543    * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t)
35544      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35545
35546    * int64x2_t vandq_s64 (int64x2_t, int64x2_t)
35547      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35548
35549 6.56.3.84 Logical operations (OR)
35550 .................................
35551
35552    * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t)
35553      _Form of expected instruction(s):_ `vorr D0, D0, D0'
35554
35555    * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t)
35556      _Form of expected instruction(s):_ `vorr D0, D0, D0'
35557
35558    * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t)
35559      _Form of expected instruction(s):_ `vorr D0, D0, D0'
35560
35561    * int32x2_t vorr_s32 (int32x2_t, int32x2_t)
35562      _Form of expected instruction(s):_ `vorr D0, D0, D0'
35563
35564    * int16x4_t vorr_s16 (int16x4_t, int16x4_t)
35565      _Form of expected instruction(s):_ `vorr D0, D0, D0'
35566
35567    * int8x8_t vorr_s8 (int8x8_t, int8x8_t)
35568      _Form of expected instruction(s):_ `vorr D0, D0, D0'
35569
35570    * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t)
35571
35572    * int64x1_t vorr_s64 (int64x1_t, int64x1_t)
35573
35574    * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t)
35575      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35576
35577    * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t)
35578      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35579
35580    * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t)
35581      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35582
35583    * int32x4_t vorrq_s32 (int32x4_t, int32x4_t)
35584      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35585
35586    * int16x8_t vorrq_s16 (int16x8_t, int16x8_t)
35587      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35588
35589    * int8x16_t vorrq_s8 (int8x16_t, int8x16_t)
35590      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35591
35592    * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t)
35593      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35594
35595    * int64x2_t vorrq_s64 (int64x2_t, int64x2_t)
35596      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35597
35598 6.56.3.85 Logical operations (exclusive OR)
35599 ...........................................
35600
35601    * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t)
35602      _Form of expected instruction(s):_ `veor D0, D0, D0'
35603
35604    * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t)
35605      _Form of expected instruction(s):_ `veor D0, D0, D0'
35606
35607    * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t)
35608      _Form of expected instruction(s):_ `veor D0, D0, D0'
35609
35610    * int32x2_t veor_s32 (int32x2_t, int32x2_t)
35611      _Form of expected instruction(s):_ `veor D0, D0, D0'
35612
35613    * int16x4_t veor_s16 (int16x4_t, int16x4_t)
35614      _Form of expected instruction(s):_ `veor D0, D0, D0'
35615
35616    * int8x8_t veor_s8 (int8x8_t, int8x8_t)
35617      _Form of expected instruction(s):_ `veor D0, D0, D0'
35618
35619    * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t)
35620
35621    * int64x1_t veor_s64 (int64x1_t, int64x1_t)
35622
35623    * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t)
35624      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35625
35626    * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t)
35627      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35628
35629    * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t)
35630      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35631
35632    * int32x4_t veorq_s32 (int32x4_t, int32x4_t)
35633      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35634
35635    * int16x8_t veorq_s16 (int16x8_t, int16x8_t)
35636      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35637
35638    * int8x16_t veorq_s8 (int8x16_t, int8x16_t)
35639      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35640
35641    * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t)
35642      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35643
35644    * int64x2_t veorq_s64 (int64x2_t, int64x2_t)
35645      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35646
35647 6.56.3.86 Logical operations (AND-NOT)
35648 ......................................
35649
35650    * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t)
35651      _Form of expected instruction(s):_ `vbic D0, D0, D0'
35652
35653    * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t)
35654      _Form of expected instruction(s):_ `vbic D0, D0, D0'
35655
35656    * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t)
35657      _Form of expected instruction(s):_ `vbic D0, D0, D0'
35658
35659    * int32x2_t vbic_s32 (int32x2_t, int32x2_t)
35660      _Form of expected instruction(s):_ `vbic D0, D0, D0'
35661
35662    * int16x4_t vbic_s16 (int16x4_t, int16x4_t)
35663      _Form of expected instruction(s):_ `vbic D0, D0, D0'
35664
35665    * int8x8_t vbic_s8 (int8x8_t, int8x8_t)
35666      _Form of expected instruction(s):_ `vbic D0, D0, D0'
35667
35668    * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t)
35669
35670    * int64x1_t vbic_s64 (int64x1_t, int64x1_t)
35671
35672    * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t)
35673      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
35674
35675    * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t)
35676      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
35677
35678    * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t)
35679      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
35680
35681    * int32x4_t vbicq_s32 (int32x4_t, int32x4_t)
35682      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
35683
35684    * int16x8_t vbicq_s16 (int16x8_t, int16x8_t)
35685      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
35686
35687    * int8x16_t vbicq_s8 (int8x16_t, int8x16_t)
35688      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
35689
35690    * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t)
35691      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
35692
35693    * int64x2_t vbicq_s64 (int64x2_t, int64x2_t)
35694      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
35695
35696 6.56.3.87 Logical operations (OR-NOT)
35697 .....................................
35698
35699    * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t)
35700      _Form of expected instruction(s):_ `vorn D0, D0, D0'
35701
35702    * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t)
35703      _Form of expected instruction(s):_ `vorn D0, D0, D0'
35704
35705    * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t)
35706      _Form of expected instruction(s):_ `vorn D0, D0, D0'
35707
35708    * int32x2_t vorn_s32 (int32x2_t, int32x2_t)
35709      _Form of expected instruction(s):_ `vorn D0, D0, D0'
35710
35711    * int16x4_t vorn_s16 (int16x4_t, int16x4_t)
35712      _Form of expected instruction(s):_ `vorn D0, D0, D0'
35713
35714    * int8x8_t vorn_s8 (int8x8_t, int8x8_t)
35715      _Form of expected instruction(s):_ `vorn D0, D0, D0'
35716
35717    * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t)
35718
35719    * int64x1_t vorn_s64 (int64x1_t, int64x1_t)
35720
35721    * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t)
35722      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
35723
35724    * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t)
35725      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
35726
35727    * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t)
35728      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
35729
35730    * int32x4_t vornq_s32 (int32x4_t, int32x4_t)
35731      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
35732
35733    * int16x8_t vornq_s16 (int16x8_t, int16x8_t)
35734      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
35735
35736    * int8x16_t vornq_s8 (int8x16_t, int8x16_t)
35737      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
35738
35739    * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t)
35740      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
35741
35742    * int64x2_t vornq_s64 (int64x2_t, int64x2_t)
35743      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
35744
35745 6.56.3.88 Reinterpret casts
35746 ...........................
35747
35748    * poly8x8_t vreinterpret_p8_u32 (uint32x2_t)
35749
35750    * poly8x8_t vreinterpret_p8_u16 (uint16x4_t)
35751
35752    * poly8x8_t vreinterpret_p8_u8 (uint8x8_t)
35753
35754    * poly8x8_t vreinterpret_p8_s32 (int32x2_t)
35755
35756    * poly8x8_t vreinterpret_p8_s16 (int16x4_t)
35757
35758    * poly8x8_t vreinterpret_p8_s8 (int8x8_t)
35759
35760    * poly8x8_t vreinterpret_p8_u64 (uint64x1_t)
35761
35762    * poly8x8_t vreinterpret_p8_s64 (int64x1_t)
35763
35764    * poly8x8_t vreinterpret_p8_f32 (float32x2_t)
35765
35766    * poly8x8_t vreinterpret_p8_p16 (poly16x4_t)
35767
35768    * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t)
35769
35770    * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t)
35771
35772    * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t)
35773
35774    * poly8x16_t vreinterpretq_p8_s32 (int32x4_t)
35775
35776    * poly8x16_t vreinterpretq_p8_s16 (int16x8_t)
35777
35778    * poly8x16_t vreinterpretq_p8_s8 (int8x16_t)
35779
35780    * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t)
35781
35782    * poly8x16_t vreinterpretq_p8_s64 (int64x2_t)
35783
35784    * poly8x16_t vreinterpretq_p8_f32 (float32x4_t)
35785
35786    * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t)
35787
35788    * poly16x4_t vreinterpret_p16_u32 (uint32x2_t)
35789
35790    * poly16x4_t vreinterpret_p16_u16 (uint16x4_t)
35791
35792    * poly16x4_t vreinterpret_p16_u8 (uint8x8_t)
35793
35794    * poly16x4_t vreinterpret_p16_s32 (int32x2_t)
35795
35796    * poly16x4_t vreinterpret_p16_s16 (int16x4_t)
35797
35798    * poly16x4_t vreinterpret_p16_s8 (int8x8_t)
35799
35800    * poly16x4_t vreinterpret_p16_u64 (uint64x1_t)
35801
35802    * poly16x4_t vreinterpret_p16_s64 (int64x1_t)
35803
35804    * poly16x4_t vreinterpret_p16_f32 (float32x2_t)
35805
35806    * poly16x4_t vreinterpret_p16_p8 (poly8x8_t)
35807
35808    * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t)
35809
35810    * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t)
35811
35812    * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t)
35813
35814    * poly16x8_t vreinterpretq_p16_s32 (int32x4_t)
35815
35816    * poly16x8_t vreinterpretq_p16_s16 (int16x8_t)
35817
35818    * poly16x8_t vreinterpretq_p16_s8 (int8x16_t)
35819
35820    * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t)
35821
35822    * poly16x8_t vreinterpretq_p16_s64 (int64x2_t)
35823
35824    * poly16x8_t vreinterpretq_p16_f32 (float32x4_t)
35825
35826    * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t)
35827
35828    * float32x2_t vreinterpret_f32_u32 (uint32x2_t)
35829
35830    * float32x2_t vreinterpret_f32_u16 (uint16x4_t)
35831
35832    * float32x2_t vreinterpret_f32_u8 (uint8x8_t)
35833
35834    * float32x2_t vreinterpret_f32_s32 (int32x2_t)
35835
35836    * float32x2_t vreinterpret_f32_s16 (int16x4_t)
35837
35838    * float32x2_t vreinterpret_f32_s8 (int8x8_t)
35839
35840    * float32x2_t vreinterpret_f32_u64 (uint64x1_t)
35841
35842    * float32x2_t vreinterpret_f32_s64 (int64x1_t)
35843
35844    * float32x2_t vreinterpret_f32_p16 (poly16x4_t)
35845
35846    * float32x2_t vreinterpret_f32_p8 (poly8x8_t)
35847
35848    * float32x4_t vreinterpretq_f32_u32 (uint32x4_t)
35849
35850    * float32x4_t vreinterpretq_f32_u16 (uint16x8_t)
35851
35852    * float32x4_t vreinterpretq_f32_u8 (uint8x16_t)
35853
35854    * float32x4_t vreinterpretq_f32_s32 (int32x4_t)
35855
35856    * float32x4_t vreinterpretq_f32_s16 (int16x8_t)
35857
35858    * float32x4_t vreinterpretq_f32_s8 (int8x16_t)
35859
35860    * float32x4_t vreinterpretq_f32_u64 (uint64x2_t)
35861
35862    * float32x4_t vreinterpretq_f32_s64 (int64x2_t)
35863
35864    * float32x4_t vreinterpretq_f32_p16 (poly16x8_t)
35865
35866    * float32x4_t vreinterpretq_f32_p8 (poly8x16_t)
35867
35868    * int64x1_t vreinterpret_s64_u32 (uint32x2_t)
35869
35870    * int64x1_t vreinterpret_s64_u16 (uint16x4_t)
35871
35872    * int64x1_t vreinterpret_s64_u8 (uint8x8_t)
35873
35874    * int64x1_t vreinterpret_s64_s32 (int32x2_t)
35875
35876    * int64x1_t vreinterpret_s64_s16 (int16x4_t)
35877
35878    * int64x1_t vreinterpret_s64_s8 (int8x8_t)
35879
35880    * int64x1_t vreinterpret_s64_u64 (uint64x1_t)
35881
35882    * int64x1_t vreinterpret_s64_f32 (float32x2_t)
35883
35884    * int64x1_t vreinterpret_s64_p16 (poly16x4_t)
35885
35886    * int64x1_t vreinterpret_s64_p8 (poly8x8_t)
35887
35888    * int64x2_t vreinterpretq_s64_u32 (uint32x4_t)
35889
35890    * int64x2_t vreinterpretq_s64_u16 (uint16x8_t)
35891
35892    * int64x2_t vreinterpretq_s64_u8 (uint8x16_t)
35893
35894    * int64x2_t vreinterpretq_s64_s32 (int32x4_t)
35895
35896    * int64x2_t vreinterpretq_s64_s16 (int16x8_t)
35897
35898    * int64x2_t vreinterpretq_s64_s8 (int8x16_t)
35899
35900    * int64x2_t vreinterpretq_s64_u64 (uint64x2_t)
35901
35902    * int64x2_t vreinterpretq_s64_f32 (float32x4_t)
35903
35904    * int64x2_t vreinterpretq_s64_p16 (poly16x8_t)
35905
35906    * int64x2_t vreinterpretq_s64_p8 (poly8x16_t)
35907
35908    * uint64x1_t vreinterpret_u64_u32 (uint32x2_t)
35909
35910    * uint64x1_t vreinterpret_u64_u16 (uint16x4_t)
35911
35912    * uint64x1_t vreinterpret_u64_u8 (uint8x8_t)
35913
35914    * uint64x1_t vreinterpret_u64_s32 (int32x2_t)
35915
35916    * uint64x1_t vreinterpret_u64_s16 (int16x4_t)
35917
35918    * uint64x1_t vreinterpret_u64_s8 (int8x8_t)
35919
35920    * uint64x1_t vreinterpret_u64_s64 (int64x1_t)
35921
35922    * uint64x1_t vreinterpret_u64_f32 (float32x2_t)
35923
35924    * uint64x1_t vreinterpret_u64_p16 (poly16x4_t)
35925
35926    * uint64x1_t vreinterpret_u64_p8 (poly8x8_t)
35927
35928    * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t)
35929
35930    * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t)
35931
35932    * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t)
35933
35934    * uint64x2_t vreinterpretq_u64_s32 (int32x4_t)
35935
35936    * uint64x2_t vreinterpretq_u64_s16 (int16x8_t)
35937
35938    * uint64x2_t vreinterpretq_u64_s8 (int8x16_t)
35939
35940    * uint64x2_t vreinterpretq_u64_s64 (int64x2_t)
35941
35942    * uint64x2_t vreinterpretq_u64_f32 (float32x4_t)
35943
35944    * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t)
35945
35946    * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t)
35947
35948    * int8x8_t vreinterpret_s8_u32 (uint32x2_t)
35949
35950    * int8x8_t vreinterpret_s8_u16 (uint16x4_t)
35951
35952    * int8x8_t vreinterpret_s8_u8 (uint8x8_t)
35953
35954    * int8x8_t vreinterpret_s8_s32 (int32x2_t)
35955
35956    * int8x8_t vreinterpret_s8_s16 (int16x4_t)
35957
35958    * int8x8_t vreinterpret_s8_u64 (uint64x1_t)
35959
35960    * int8x8_t vreinterpret_s8_s64 (int64x1_t)
35961
35962    * int8x8_t vreinterpret_s8_f32 (float32x2_t)
35963
35964    * int8x8_t vreinterpret_s8_p16 (poly16x4_t)
35965
35966    * int8x8_t vreinterpret_s8_p8 (poly8x8_t)
35967
35968    * int8x16_t vreinterpretq_s8_u32 (uint32x4_t)
35969
35970    * int8x16_t vreinterpretq_s8_u16 (uint16x8_t)
35971
35972    * int8x16_t vreinterpretq_s8_u8 (uint8x16_t)
35973
35974    * int8x16_t vreinterpretq_s8_s32 (int32x4_t)
35975
35976    * int8x16_t vreinterpretq_s8_s16 (int16x8_t)
35977
35978    * int8x16_t vreinterpretq_s8_u64 (uint64x2_t)
35979
35980    * int8x16_t vreinterpretq_s8_s64 (int64x2_t)
35981
35982    * int8x16_t vreinterpretq_s8_f32 (float32x4_t)
35983
35984    * int8x16_t vreinterpretq_s8_p16 (poly16x8_t)
35985
35986    * int8x16_t vreinterpretq_s8_p8 (poly8x16_t)
35987
35988    * int16x4_t vreinterpret_s16_u32 (uint32x2_t)
35989
35990    * int16x4_t vreinterpret_s16_u16 (uint16x4_t)
35991
35992    * int16x4_t vreinterpret_s16_u8 (uint8x8_t)
35993
35994    * int16x4_t vreinterpret_s16_s32 (int32x2_t)
35995
35996    * int16x4_t vreinterpret_s16_s8 (int8x8_t)
35997
35998    * int16x4_t vreinterpret_s16_u64 (uint64x1_t)
35999
36000    * int16x4_t vreinterpret_s16_s64 (int64x1_t)
36001
36002    * int16x4_t vreinterpret_s16_f32 (float32x2_t)
36003
36004    * int16x4_t vreinterpret_s16_p16 (poly16x4_t)
36005
36006    * int16x4_t vreinterpret_s16_p8 (poly8x8_t)
36007
36008    * int16x8_t vreinterpretq_s16_u32 (uint32x4_t)
36009
36010    * int16x8_t vreinterpretq_s16_u16 (uint16x8_t)
36011
36012    * int16x8_t vreinterpretq_s16_u8 (uint8x16_t)
36013
36014    * int16x8_t vreinterpretq_s16_s32 (int32x4_t)
36015
36016    * int16x8_t vreinterpretq_s16_s8 (int8x16_t)
36017
36018    * int16x8_t vreinterpretq_s16_u64 (uint64x2_t)
36019
36020    * int16x8_t vreinterpretq_s16_s64 (int64x2_t)
36021
36022    * int16x8_t vreinterpretq_s16_f32 (float32x4_t)
36023
36024    * int16x8_t vreinterpretq_s16_p16 (poly16x8_t)
36025
36026    * int16x8_t vreinterpretq_s16_p8 (poly8x16_t)
36027
36028    * int32x2_t vreinterpret_s32_u32 (uint32x2_t)
36029
36030    * int32x2_t vreinterpret_s32_u16 (uint16x4_t)
36031
36032    * int32x2_t vreinterpret_s32_u8 (uint8x8_t)
36033
36034    * int32x2_t vreinterpret_s32_s16 (int16x4_t)
36035
36036    * int32x2_t vreinterpret_s32_s8 (int8x8_t)
36037
36038    * int32x2_t vreinterpret_s32_u64 (uint64x1_t)
36039
36040    * int32x2_t vreinterpret_s32_s64 (int64x1_t)
36041
36042    * int32x2_t vreinterpret_s32_f32 (float32x2_t)
36043
36044    * int32x2_t vreinterpret_s32_p16 (poly16x4_t)
36045
36046    * int32x2_t vreinterpret_s32_p8 (poly8x8_t)
36047
36048    * int32x4_t vreinterpretq_s32_u32 (uint32x4_t)
36049
36050    * int32x4_t vreinterpretq_s32_u16 (uint16x8_t)
36051
36052    * int32x4_t vreinterpretq_s32_u8 (uint8x16_t)
36053
36054    * int32x4_t vreinterpretq_s32_s16 (int16x8_t)
36055
36056    * int32x4_t vreinterpretq_s32_s8 (int8x16_t)
36057
36058    * int32x4_t vreinterpretq_s32_u64 (uint64x2_t)
36059
36060    * int32x4_t vreinterpretq_s32_s64 (int64x2_t)
36061
36062    * int32x4_t vreinterpretq_s32_f32 (float32x4_t)
36063
36064    * int32x4_t vreinterpretq_s32_p16 (poly16x8_t)
36065
36066    * int32x4_t vreinterpretq_s32_p8 (poly8x16_t)
36067
36068    * uint8x8_t vreinterpret_u8_u32 (uint32x2_t)
36069
36070    * uint8x8_t vreinterpret_u8_u16 (uint16x4_t)
36071
36072    * uint8x8_t vreinterpret_u8_s32 (int32x2_t)
36073
36074    * uint8x8_t vreinterpret_u8_s16 (int16x4_t)
36075
36076    * uint8x8_t vreinterpret_u8_s8 (int8x8_t)
36077
36078    * uint8x8_t vreinterpret_u8_u64 (uint64x1_t)
36079
36080    * uint8x8_t vreinterpret_u8_s64 (int64x1_t)
36081
36082    * uint8x8_t vreinterpret_u8_f32 (float32x2_t)
36083
36084    * uint8x8_t vreinterpret_u8_p16 (poly16x4_t)
36085
36086    * uint8x8_t vreinterpret_u8_p8 (poly8x8_t)
36087
36088    * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t)
36089
36090    * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t)
36091
36092    * uint8x16_t vreinterpretq_u8_s32 (int32x4_t)
36093
36094    * uint8x16_t vreinterpretq_u8_s16 (int16x8_t)
36095
36096    * uint8x16_t vreinterpretq_u8_s8 (int8x16_t)
36097
36098    * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t)
36099
36100    * uint8x16_t vreinterpretq_u8_s64 (int64x2_t)
36101
36102    * uint8x16_t vreinterpretq_u8_f32 (float32x4_t)
36103
36104    * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t)
36105
36106    * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t)
36107
36108    * uint16x4_t vreinterpret_u16_u32 (uint32x2_t)
36109
36110    * uint16x4_t vreinterpret_u16_u8 (uint8x8_t)
36111
36112    * uint16x4_t vreinterpret_u16_s32 (int32x2_t)
36113
36114    * uint16x4_t vreinterpret_u16_s16 (int16x4_t)
36115
36116    * uint16x4_t vreinterpret_u16_s8 (int8x8_t)
36117
36118    * uint16x4_t vreinterpret_u16_u64 (uint64x1_t)
36119
36120    * uint16x4_t vreinterpret_u16_s64 (int64x1_t)
36121
36122    * uint16x4_t vreinterpret_u16_f32 (float32x2_t)
36123
36124    * uint16x4_t vreinterpret_u16_p16 (poly16x4_t)
36125
36126    * uint16x4_t vreinterpret_u16_p8 (poly8x8_t)
36127
36128    * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t)
36129
36130    * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t)
36131
36132    * uint16x8_t vreinterpretq_u16_s32 (int32x4_t)
36133
36134    * uint16x8_t vreinterpretq_u16_s16 (int16x8_t)
36135
36136    * uint16x8_t vreinterpretq_u16_s8 (int8x16_t)
36137
36138    * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t)
36139
36140    * uint16x8_t vreinterpretq_u16_s64 (int64x2_t)
36141
36142    * uint16x8_t vreinterpretq_u16_f32 (float32x4_t)
36143
36144    * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t)
36145
36146    * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t)
36147
36148    * uint32x2_t vreinterpret_u32_u16 (uint16x4_t)
36149
36150    * uint32x2_t vreinterpret_u32_u8 (uint8x8_t)
36151
36152    * uint32x2_t vreinterpret_u32_s32 (int32x2_t)
36153
36154    * uint32x2_t vreinterpret_u32_s16 (int16x4_t)
36155
36156    * uint32x2_t vreinterpret_u32_s8 (int8x8_t)
36157
36158    * uint32x2_t vreinterpret_u32_u64 (uint64x1_t)
36159
36160    * uint32x2_t vreinterpret_u32_s64 (int64x1_t)
36161
36162    * uint32x2_t vreinterpret_u32_f32 (float32x2_t)
36163
36164    * uint32x2_t vreinterpret_u32_p16 (poly16x4_t)
36165
36166    * uint32x2_t vreinterpret_u32_p8 (poly8x8_t)
36167
36168    * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t)
36169
36170    * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t)
36171
36172    * uint32x4_t vreinterpretq_u32_s32 (int32x4_t)
36173
36174    * uint32x4_t vreinterpretq_u32_s16 (int16x8_t)
36175
36176    * uint32x4_t vreinterpretq_u32_s8 (int8x16_t)
36177
36178    * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t)
36179
36180    * uint32x4_t vreinterpretq_u32_s64 (int64x2_t)
36181
36182    * uint32x4_t vreinterpretq_u32_f32 (float32x4_t)
36183
36184    * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t)
36185
36186    * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t)
36187
36188 \1f
36189 File: gcc.info,  Node: AVR Built-in Functions,  Next: Blackfin Built-in Functions,  Prev: ARM NEON Intrinsics,  Up: Target Builtins
36190
36191 6.56.4 AVR Built-in Functions
36192 -----------------------------
36193
36194 For each built-in function for AVR, there is an equally named,
36195 uppercase built-in macro defined. That way users can easily query if or
36196 if not a specific built-in is implemented or not. For example, if
36197 `__builtin_avr_nop' is available the macro `__BUILTIN_AVR_NOP' is
36198 defined to `1' and undefined otherwise.
36199
36200  The following built-in functions map to the respective machine
36201 instruction, i.e. `nop', `sei', `cli', `sleep', `wdr', `swap', `fmul',
36202 `fmuls' resp. `fmulsu'. The three `fmul*' built-ins are implemented as
36203 library call if no hardware multiplier is available.
36204
36205      void __builtin_avr_nop (void)
36206      void __builtin_avr_sei (void)
36207      void __builtin_avr_cli (void)
36208      void __builtin_avr_sleep (void)
36209      void __builtin_avr_wdr (void)
36210      unsigned char __builtin_avr_swap (unsigned char)
36211      unsigned int __builtin_avr_fmul (unsigned char, unsigned char)
36212      int __builtin_avr_fmuls (char, char)
36213      int __builtin_avr_fmulsu (char, unsigned char)
36214
36215  In order to delay execution for a specific number of cycles, GCC
36216 implements
36217      void __builtin_avr_delay_cycles (unsigned long ticks)
36218
36219 `ticks' is the number of ticks to delay execution. Note that this
36220 built-in does not take into account the effect of interrupts that might
36221 increase delay time. `ticks' must be a compile-time integer constant;
36222 delays with a variable number of cycles are not supported.
36223
36224      char __builtin_avr_flash_segment (const __memx void*)
36225
36226 This built-in takes a byte address to the 24-bit *note address space:
36227 AVR Named Address Spaces. `__memx' and returns the number of the flash
36228 segment (the 64 KiB chunk) where the address points to.  Counting
36229 starts at `0'.  If the address does not point to flash memory, return
36230 `-1'.
36231
36232      unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val)
36233
36234 Insert bits from BITS into VAL and return the resulting value. The
36235 nibbles of MAP determine how the insertion is performed: Let X be the
36236 N-th nibble of MAP
36237   1. If X is `0xf', then the N-th bit of VAL is returned unaltered.
36238
36239   2. If X is in the range 0...7, then the N-th result bit is set to the
36240      X-th bit of BITS
36241
36242   3. If X is in the range 8...`0xe', then the N-th result bit is
36243      undefined.
36244
36245 One typical use case for this built-in is adjusting input and output
36246 values to non-contiguous port layouts. Some examples:
36247
36248      // same as val, bits is unused
36249      __builtin_avr_insert_bits (0xffffffff, bits, val)
36250
36251      // same as bits, val is unused
36252      __builtin_avr_insert_bits (0x76543210, bits, val)
36253
36254      // same as rotating bits by 4
36255      __builtin_avr_insert_bits (0x32107654, bits, 0)
36256
36257      // high nibble of result is the high nibble of val
36258      // low nibble of result is the low nibble of bits
36259      __builtin_avr_insert_bits (0xffff3210, bits, val)
36260
36261      // reverse the bit order of bits
36262      __builtin_avr_insert_bits (0x01234567, bits, 0)
36263
36264 \1f
36265 File: gcc.info,  Node: Blackfin Built-in Functions,  Next: FR-V Built-in Functions,  Prev: AVR Built-in Functions,  Up: Target Builtins
36266
36267 6.56.5 Blackfin Built-in Functions
36268 ----------------------------------
36269
36270 Currently, there are two Blackfin-specific built-in functions.  These
36271 are used for generating `CSYNC' and `SSYNC' machine insns without using
36272 inline assembly; by using these built-in functions the compiler can
36273 automatically add workarounds for hardware errata involving these
36274 instructions.  These functions are named as follows:
36275
36276      void __builtin_bfin_csync (void)
36277      void __builtin_bfin_ssync (void)
36278
36279 \1f
36280 File: gcc.info,  Node: FR-V Built-in Functions,  Next: X86 Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins
36281
36282 6.56.6 FR-V Built-in Functions
36283 ------------------------------
36284
36285 GCC provides many FR-V-specific built-in functions.  In general, these
36286 functions are intended to be compatible with those described by `FR-V
36287 Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.
36288 The two exceptions are `__MDUNPACKH' and `__MBTOHE', the GCC forms of
36289 which pass 128-bit values by pointer rather than by value.
36290
36291  Most of the functions are named after specific FR-V instructions.
36292 Such functions are said to be "directly mapped" and are summarized here
36293 in tabular form.
36294
36295 * Menu:
36296
36297 * Argument Types::
36298 * Directly-mapped Integer Functions::
36299 * Directly-mapped Media Functions::
36300 * Raw read/write Functions::
36301 * Other Built-in Functions::
36302
36303 \1f
36304 File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
36305
36306 6.56.6.1 Argument Types
36307 .......................
36308
36309 The arguments to the built-in functions can be divided into three
36310 groups: register numbers, compile-time constants and run-time values.
36311 In order to make this classification clear at a glance, the arguments
36312 and return values are given the following pseudo types:
36313
36314 Pseudo type    Real C type            Constant?   Description
36315 `uh'           `unsigned short'       No          an unsigned halfword
36316 `uw1'          `unsigned int'         No          an unsigned word
36317 `sw1'          `int'                  No          a signed word
36318 `uw2'          `unsigned long long'   No          an unsigned doubleword
36319 `sw2'          `long long'            No          a signed doubleword
36320 `const'        `int'                  Yes         an integer constant
36321 `acc'          `int'                  Yes         an ACC register number
36322 `iacc'         `int'                  Yes         an IACC register number
36323
36324  These pseudo types are not defined by GCC, they are simply a notational
36325 convenience used in this manual.
36326
36327  Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at
36328 run time.  They correspond to register operands in the underlying FR-V
36329 instructions.
36330
36331  `const' arguments represent immediate operands in the underlying FR-V
36332 instructions.  They must be compile-time constants.
36333
36334  `acc' arguments are evaluated at compile time and specify the number
36335 of an accumulator register.  For example, an `acc' argument of 2
36336 selects the ACC2 register.
36337
36338  `iacc' arguments are similar to `acc' arguments but specify the number
36339 of an IACC register.  See *note Other Built-in Functions:: for more
36340 details.
36341
36342 \1f
36343 File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions
36344
36345 6.56.6.2 Directly-mapped Integer Functions
36346 ..........................................
36347
36348 The functions listed below map directly to FR-V I-type instructions.
36349
36350 Function prototype               Example usage           Assembly output
36351 `sw1 __ADDSS (sw1, sw1)'         `C = __ADDSS (A, B)'    `ADDSS A,B,C'
36352 `sw1 __SCAN (sw1, sw1)'          `C = __SCAN (A, B)'     `SCAN A,B,C'
36353 `sw1 __SCUTSS (sw1)'             `B = __SCUTSS (A)'      `SCUTSS A,B'
36354 `sw1 __SLASS (sw1, sw1)'         `C = __SLASS (A, B)'    `SLASS A,B,C'
36355 `void __SMASS (sw1, sw1)'        `__SMASS (A, B)'        `SMASS A,B'
36356 `void __SMSSS (sw1, sw1)'        `__SMSSS (A, B)'        `SMSSS A,B'
36357 `void __SMU (sw1, sw1)'          `__SMU (A, B)'          `SMU A,B'
36358 `sw2 __SMUL (sw1, sw1)'          `C = __SMUL (A, B)'     `SMUL A,B,C'
36359 `sw1 __SUBSS (sw1, sw1)'         `C = __SUBSS (A, B)'    `SUBSS A,B,C'
36360 `uw2 __UMUL (uw1, uw1)'          `C = __UMUL (A, B)'     `UMUL A,B,C'
36361
36362 \1f
36363 File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
36364
36365 6.56.6.3 Directly-mapped Media Functions
36366 ........................................
36367
36368 The functions listed below map directly to FR-V M-type instructions.
36369
36370 Function prototype               Example usage           Assembly output
36371 `uw1 __MABSHS (sw1)'             `B = __MABSHS (A)'      `MABSHS A,B'
36372 `void __MADDACCS (acc, acc)'     `__MADDACCS (B, A)'     `MADDACCS A,B'
36373 `sw1 __MADDHSS (sw1, sw1)'       `C = __MADDHSS (A, B)'  `MADDHSS A,B,C'
36374 `uw1 __MADDHUS (uw1, uw1)'       `C = __MADDHUS (A, B)'  `MADDHUS A,B,C'
36375 `uw1 __MAND (uw1, uw1)'          `C = __MAND (A, B)'     `MAND A,B,C'
36376 `void __MASACCS (acc, acc)'      `__MASACCS (B, A)'      `MASACCS A,B'
36377 `uw1 __MAVEH (uw1, uw1)'         `C = __MAVEH (A, B)'    `MAVEH A,B,C'
36378 `uw2 __MBTOH (uw1)'              `B = __MBTOH (A)'       `MBTOH A,B'
36379 `void __MBTOHE (uw1 *, uw1)'     `__MBTOHE (&B, A)'      `MBTOHE A,B'
36380 `void __MCLRACC (acc)'           `__MCLRACC (A)'         `MCLRACC A'
36381 `void __MCLRACCA (void)'         `__MCLRACCA ()'         `MCLRACCA'
36382 `uw1 __Mcop1 (uw1, uw1)'         `C = __Mcop1 (A, B)'    `Mcop1 A,B,C'
36383 `uw1 __Mcop2 (uw1, uw1)'         `C = __Mcop2 (A, B)'    `Mcop2 A,B,C'
36384 `uw1 __MCPLHI (uw2, const)'      `C = __MCPLHI (A, B)'   `MCPLHI A,#B,C'
36385 `uw1 __MCPLI (uw2, const)'       `C = __MCPLI (A, B)'    `MCPLI A,#B,C'
36386 `void __MCPXIS (acc, sw1, sw1)'  `__MCPXIS (C, A, B)'    `MCPXIS A,B,C'
36387 `void __MCPXIU (acc, uw1, uw1)'  `__MCPXIU (C, A, B)'    `MCPXIU A,B,C'
36388 `void __MCPXRS (acc, sw1, sw1)'  `__MCPXRS (C, A, B)'    `MCPXRS A,B,C'
36389 `void __MCPXRU (acc, uw1, uw1)'  `__MCPXRU (C, A, B)'    `MCPXRU A,B,C'
36390 `uw1 __MCUT (acc, uw1)'          `C = __MCUT (A, B)'     `MCUT A,B,C'
36391 `uw1 __MCUTSS (acc, sw1)'        `C = __MCUTSS (A, B)'   `MCUTSS A,B,C'
36392 `void __MDADDACCS (acc, acc)'    `__MDADDACCS (B, A)'    `MDADDACCS A,B'
36393 `void __MDASACCS (acc, acc)'     `__MDASACCS (B, A)'     `MDASACCS A,B'
36394 `uw2 __MDCUTSSI (acc, const)'    `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C'
36395 `uw2 __MDPACKH (uw2, uw2)'       `C = __MDPACKH (A, B)'  `MDPACKH A,B,C'
36396 `uw2 __MDROTLI (uw2, const)'     `C = __MDROTLI (A, B)'  `MDROTLI A,#B,C'
36397 `void __MDSUBACCS (acc, acc)'    `__MDSUBACCS (B, A)'    `MDSUBACCS A,B'
36398 `void __MDUNPACKH (uw1 *, uw2)'  `__MDUNPACKH (&B, A)'   `MDUNPACKH A,B'
36399 `uw2 __MEXPDHD (uw1, const)'     `C = __MEXPDHD (A, B)'  `MEXPDHD A,#B,C'
36400 `uw1 __MEXPDHW (uw1, const)'     `C = __MEXPDHW (A, B)'  `MEXPDHW A,#B,C'
36401 `uw1 __MHDSETH (uw1, const)'     `C = __MHDSETH (A, B)'  `MHDSETH A,#B,C'
36402 `sw1 __MHDSETS (const)'          `B = __MHDSETS (A)'     `MHDSETS #A,B'
36403 `uw1 __MHSETHIH (uw1, const)'    `B = __MHSETHIH (B, A)' `MHSETHIH #A,B'
36404 `sw1 __MHSETHIS (sw1, const)'    `B = __MHSETHIS (B, A)' `MHSETHIS #A,B'
36405 `uw1 __MHSETLOH (uw1, const)'    `B = __MHSETLOH (B, A)' `MHSETLOH #A,B'
36406 `sw1 __MHSETLOS (sw1, const)'    `B = __MHSETLOS (B, A)' `MHSETLOS #A,B'
36407 `uw1 __MHTOB (uw2)'              `B = __MHTOB (A)'       `MHTOB A,B'
36408 `void __MMACHS (acc, sw1, sw1)'  `__MMACHS (C, A, B)'    `MMACHS A,B,C'
36409 `void __MMACHU (acc, uw1, uw1)'  `__MMACHU (C, A, B)'    `MMACHU A,B,C'
36410 `void __MMRDHS (acc, sw1, sw1)'  `__MMRDHS (C, A, B)'    `MMRDHS A,B,C'
36411 `void __MMRDHU (acc, uw1, uw1)'  `__MMRDHU (C, A, B)'    `MMRDHU A,B,C'
36412 `void __MMULHS (acc, sw1, sw1)'  `__MMULHS (C, A, B)'    `MMULHS A,B,C'
36413 `void __MMULHU (acc, uw1, uw1)'  `__MMULHU (C, A, B)'    `MMULHU A,B,C'
36414 `void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)'   `MMULXHS A,B,C'
36415 `void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)'   `MMULXHU A,B,C'
36416 `uw1 __MNOT (uw1)'               `B = __MNOT (A)'        `MNOT A,B'
36417 `uw1 __MOR (uw1, uw1)'           `C = __MOR (A, B)'      `MOR A,B,C'
36418 `uw1 __MPACKH (uh, uh)'          `C = __MPACKH (A, B)'   `MPACKH A,B,C'
36419 `sw2 __MQADDHSS (sw2, sw2)'      `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C'
36420 `uw2 __MQADDHUS (uw2, uw2)'      `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C'
36421 `void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)'   `MQCPXIS A,B,C'
36422 `void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)'   `MQCPXIU A,B,C'
36423 `void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)'   `MQCPXRS A,B,C'
36424 `void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)'   `MQCPXRU A,B,C'
36425 `sw2 __MQLCLRHS (sw2, sw2)'      `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C'
36426 `sw2 __MQLMTHS (sw2, sw2)'       `C = __MQLMTHS (A, B)'  `MQLMTHS A,B,C'
36427 `void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)'   `MQMACHS A,B,C'
36428 `void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)'   `MQMACHU A,B,C'
36429 `void __MQMACXHS (acc, sw2,      `__MQMACXHS (C, A, B)'  `MQMACXHS A,B,C'
36430 sw2)'                                                    
36431 `void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)'   `MQMULHS A,B,C'
36432 `void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)'   `MQMULHU A,B,C'
36433 `void __MQMULXHS (acc, sw2,      `__MQMULXHS (C, A, B)'  `MQMULXHS A,B,C'
36434 sw2)'                                                    
36435 `void __MQMULXHU (acc, uw2,      `__MQMULXHU (C, A, B)'  `MQMULXHU A,B,C'
36436 uw2)'                                                    
36437 `sw2 __MQSATHS (sw2, sw2)'       `C = __MQSATHS (A, B)'  `MQSATHS A,B,C'
36438 `uw2 __MQSLLHI (uw2, int)'       `C = __MQSLLHI (A, B)'  `MQSLLHI A,B,C'
36439 `sw2 __MQSRAHI (sw2, int)'       `C = __MQSRAHI (A, B)'  `MQSRAHI A,B,C'
36440 `sw2 __MQSUBHSS (sw2, sw2)'      `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C'
36441 `uw2 __MQSUBHUS (uw2, uw2)'      `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C'
36442 `void __MQXMACHS (acc, sw2,      `__MQXMACHS (C, A, B)'  `MQXMACHS A,B,C'
36443 sw2)'                                                    
36444 `void __MQXMACXHS (acc, sw2,     `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C'
36445 sw2)'                                                    
36446 `uw1 __MRDACC (acc)'             `B = __MRDACC (A)'      `MRDACC A,B'
36447 `uw1 __MRDACCG (acc)'            `B = __MRDACCG (A)'     `MRDACCG A,B'
36448 `uw1 __MROTLI (uw1, const)'      `C = __MROTLI (A, B)'   `MROTLI A,#B,C'
36449 `uw1 __MROTRI (uw1, const)'      `C = __MROTRI (A, B)'   `MROTRI A,#B,C'
36450 `sw1 __MSATHS (sw1, sw1)'        `C = __MSATHS (A, B)'   `MSATHS A,B,C'
36451 `uw1 __MSATHU (uw1, uw1)'        `C = __MSATHU (A, B)'   `MSATHU A,B,C'
36452 `uw1 __MSLLHI (uw1, const)'      `C = __MSLLHI (A, B)'   `MSLLHI A,#B,C'
36453 `sw1 __MSRAHI (sw1, const)'      `C = __MSRAHI (A, B)'   `MSRAHI A,#B,C'
36454 `uw1 __MSRLHI (uw1, const)'      `C = __MSRLHI (A, B)'   `MSRLHI A,#B,C'
36455 `void __MSUBACCS (acc, acc)'     `__MSUBACCS (B, A)'     `MSUBACCS A,B'
36456 `sw1 __MSUBHSS (sw1, sw1)'       `C = __MSUBHSS (A, B)'  `MSUBHSS A,B,C'
36457 `uw1 __MSUBHUS (uw1, uw1)'       `C = __MSUBHUS (A, B)'  `MSUBHUS A,B,C'
36458 `void __MTRAP (void)'            `__MTRAP ()'            `MTRAP'
36459 `uw2 __MUNPACKH (uw1)'           `B = __MUNPACKH (A)'    `MUNPACKH A,B'
36460 `uw1 __MWCUT (uw2, uw1)'         `C = __MWCUT (A, B)'    `MWCUT A,B,C'
36461 `void __MWTACC (acc, uw1)'       `__MWTACC (B, A)'       `MWTACC A,B'
36462 `void __MWTACCG (acc, uw1)'      `__MWTACCG (B, A)'      `MWTACCG A,B'
36463 `uw1 __MXOR (uw1, uw1)'          `C = __MXOR (A, B)'     `MXOR A,B,C'
36464
36465 \1f
36466 File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
36467
36468 6.56.6.4 Raw read/write Functions
36469 .................................
36470
36471 This sections describes built-in functions related to read and write
36472 instructions to access memory.  These functions generate `membar'
36473 instructions to flush the I/O load and stores where appropriate, as
36474 described in Fujitsu's manual described above.
36475
36476 `unsigned char __builtin_read8 (void *DATA)'
36477
36478 `unsigned short __builtin_read16 (void *DATA)'
36479
36480 `unsigned long __builtin_read32 (void *DATA)'
36481
36482 `unsigned long long __builtin_read64 (void *DATA)'
36483
36484 `void __builtin_write8 (void *DATA, unsigned char DATUM)'
36485
36486 `void __builtin_write16 (void *DATA, unsigned short DATUM)'
36487
36488 `void __builtin_write32 (void *DATA, unsigned long DATUM)'
36489
36490 `void __builtin_write64 (void *DATA, unsigned long long DATUM)'
36491
36492 \1f
36493 File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
36494
36495 6.56.6.5 Other Built-in Functions
36496 .................................
36497
36498 This section describes built-in functions that are not named after a
36499 specific FR-V instruction.
36500
36501 `sw2 __IACCreadll (iacc REG)'
36502      Return the full 64-bit value of IACC0.  The REG argument is
36503      reserved for future expansion and must be 0.
36504
36505 `sw1 __IACCreadl (iacc REG)'
36506      Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
36507      Other values of REG are rejected as invalid.
36508
36509 `void __IACCsetll (iacc REG, sw2 X)'
36510      Set the full 64-bit value of IACC0 to X.  The REG argument is
36511      reserved for future expansion and must be 0.
36512
36513 `void __IACCsetl (iacc REG, sw1 X)'
36514      Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
36515      values of REG are rejected as invalid.
36516
36517 `void __data_prefetch0 (const void *X)'
36518      Use the `dcpl' instruction to load the contents of address X into
36519      the data cache.
36520
36521 `void __data_prefetch (const void *X)'
36522      Use the `nldub' instruction to load the contents of address X into
36523      the data cache.  The instruction is issued in slot I1.
36524
36525 \1f
36526 File: gcc.info,  Node: X86 Built-in Functions,  Next: X86 transactional memory intrinsics,  Prev: FR-V Built-in Functions,  Up: Target Builtins
36527
36528 6.56.7 X86 Built-in Functions
36529 -----------------------------
36530
36531 These built-in functions are available for the i386 and x86-64 family
36532 of computers, depending on the command-line switches used.
36533
36534  If you specify command-line switches such as `-msse', the compiler
36535 could use the extended instruction sets even if the built-ins are not
36536 used explicitly in the program.  For this reason, applications that
36537 perform run-time CPU detection must compile separate files for each
36538 supported architecture, using the appropriate flags.  In particular,
36539 the file containing the CPU detection code should be compiled without
36540 these options.
36541
36542  The following machine modes are available for use with MMX built-in
36543 functions (*note Vector Extensions::): `V2SI' for a vector of two
36544 32-bit integers, `V4HI' for a vector of four 16-bit integers, and
36545 `V8QI' for a vector of eight 8-bit integers.  Some of the built-in
36546 functions operate on MMX registers as a whole 64-bit entity, these use
36547 `V1DI' as their mode.
36548
36549  If 3DNow! extensions are enabled, `V2SF' is used as a mode for a vector
36550 of two 32-bit floating-point values.
36551
36552  If SSE extensions are enabled, `V4SF' is used for a vector of four
36553 32-bit floating-point values.  Some instructions use a vector of four
36554 32-bit integers, these use `V4SI'.  Finally, some instructions operate
36555 on an entire vector register, interpreting it as a 128-bit integer,
36556 these use mode `TI'.
36557
36558  In 64-bit mode, the x86-64 family of processors uses additional
36559 built-in functions for efficient use of `TF' (`__float128') 128-bit
36560 floating point and `TC' 128-bit complex floating-point values.
36561
36562  The following floating-point built-in functions are available in 64-bit
36563 mode.  All of them implement the function that is part of the name.
36564
36565      __float128 __builtin_fabsq (__float128)
36566      __float128 __builtin_copysignq (__float128, __float128)
36567
36568  The following built-in function is always available.
36569
36570 `void __builtin_ia32_pause (void)'
36571      Generates the `pause' machine instruction with a compiler memory
36572      barrier.
36573
36574  The following floating-point built-in functions are made available in
36575 the 64-bit mode.
36576
36577 `__float128 __builtin_infq (void)'
36578      Similar to `__builtin_inf', except the return type is `__float128'.  
36579
36580 `__float128 __builtin_huge_valq (void)'
36581      Similar to `__builtin_huge_val', except the return type is
36582      `__float128'.  
36583
36584  The following built-in functions are always available and can be used
36585 to check the target platform type.
36586
36587  -- Built-in Function: void __builtin_cpu_init (void)
36588      This function runs the CPU detection code to check the type of CPU
36589      and the features supported.  This built-in function needs to be
36590      invoked along with the built-in functions to check CPU type and
36591      features, `__builtin_cpu_is' and `__builtin_cpu_supports', only
36592      when used in a function that is executed before any constructors
36593      are called.  The CPU detection code is automatically executed in a
36594      very high priority constructor.
36595
36596      For example, this function has to be used in `ifunc' resolvers that
36597      check for CPU type using the built-in functions `__builtin_cpu_is'
36598      and `__builtin_cpu_supports', or in constructors on targets that
36599      don't support constructor priority.
36600
36601           static void (*resolve_memcpy (void)) (void)
36602           {
36603             // ifunc resolvers fire before constructors, explicitly call the init
36604             // function.
36605             __builtin_cpu_init ();
36606             if (__builtin_cpu_supports ("ssse3"))
36607               return ssse3_memcpy; // super fast memcpy with ssse3 instructions.
36608             else
36609               return default_memcpy;
36610           }
36611
36612           void *memcpy (void *, const void *, size_t)
36613                __attribute__ ((ifunc ("resolve_memcpy")));
36614
36615
36616  -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
36617      This function returns a positive integer if the run-time CPU is of
36618      type CPUNAME and returns `0' otherwise. The following CPU names
36619      can be detected:
36620
36621     `intel'
36622           Intel CPU.
36623
36624     `atom'
36625           Intel Atom CPU.
36626
36627     `core2'
36628           Intel Core 2 CPU.
36629
36630     `corei7'
36631           Intel Core i7 CPU.
36632
36633     `nehalem'
36634           Intel Core i7 Nehalem CPU.
36635
36636     `westmere'
36637           Intel Core i7 Westmere CPU.
36638
36639     `sandybridge'
36640           Intel Core i7 Sandy Bridge CPU.
36641
36642     `amd'
36643           AMD CPU.
36644
36645     `amdfam10h'
36646           AMD Family 10h CPU.
36647
36648     `barcelona'
36649           AMD Family 10h Barcelona CPU.
36650
36651     `shanghai'
36652           AMD Family 10h Shanghai CPU.
36653
36654     `istanbul'
36655           AMD Family 10h Istanbul CPU.
36656
36657     `btver1'
36658           AMD Family 14h CPU.
36659
36660     `amdfam15h'
36661           AMD Family 15h CPU.
36662
36663     `bdver1'
36664           AMD Family 15h Bulldozer version 1.
36665
36666     `bdver2'
36667           AMD Family 15h Bulldozer version 2.
36668
36669     `bdver3'
36670           AMD Family 15h Bulldozer version 3.
36671
36672     `btver2'
36673           AMD Family 16h CPU.
36674
36675      Here is an example:
36676           if (__builtin_cpu_is ("corei7"))
36677             {
36678                do_corei7 (); // Core i7 specific implementation.
36679             }
36680           else
36681             {
36682                do_generic (); // Generic implementation.
36683             }
36684
36685  -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
36686      This function returns a positive integer if the run-time CPU
36687      supports FEATURE and returns `0' otherwise. The following features
36688      can be detected:
36689
36690     `cmov'
36691           CMOV instruction.
36692
36693     `mmx'
36694           MMX instructions.
36695
36696     `popcnt'
36697           POPCNT instruction.
36698
36699     `sse'
36700           SSE instructions.
36701
36702     `sse2'
36703           SSE2 instructions.
36704
36705     `sse3'
36706           SSE3 instructions.
36707
36708     `ssse3'
36709           SSSE3 instructions.
36710
36711     `sse4.1'
36712           SSE4.1 instructions.
36713
36714     `sse4.2'
36715           SSE4.2 instructions.
36716
36717     `avx'
36718           AVX instructions.
36719
36720     `avx2'
36721           AVX2 instructions.
36722
36723      Here is an example:
36724           if (__builtin_cpu_supports ("popcnt"))
36725             {
36726                asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc");
36727             }
36728           else
36729             {
36730                count = generic_countbits (n); //generic implementation.
36731             }
36732
36733  The following built-in functions are made available by `-mmmx'.  All
36734 of them generate the machine instruction that is part of the name.
36735
36736      v8qi __builtin_ia32_paddb (v8qi, v8qi)
36737      v4hi __builtin_ia32_paddw (v4hi, v4hi)
36738      v2si __builtin_ia32_paddd (v2si, v2si)
36739      v8qi __builtin_ia32_psubb (v8qi, v8qi)
36740      v4hi __builtin_ia32_psubw (v4hi, v4hi)
36741      v2si __builtin_ia32_psubd (v2si, v2si)
36742      v8qi __builtin_ia32_paddsb (v8qi, v8qi)
36743      v4hi __builtin_ia32_paddsw (v4hi, v4hi)
36744      v8qi __builtin_ia32_psubsb (v8qi, v8qi)
36745      v4hi __builtin_ia32_psubsw (v4hi, v4hi)
36746      v8qi __builtin_ia32_paddusb (v8qi, v8qi)
36747      v4hi __builtin_ia32_paddusw (v4hi, v4hi)
36748      v8qi __builtin_ia32_psubusb (v8qi, v8qi)
36749      v4hi __builtin_ia32_psubusw (v4hi, v4hi)
36750      v4hi __builtin_ia32_pmullw (v4hi, v4hi)
36751      v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
36752      di __builtin_ia32_pand (di, di)
36753      di __builtin_ia32_pandn (di,di)
36754      di __builtin_ia32_por (di, di)
36755      di __builtin_ia32_pxor (di, di)
36756      v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
36757      v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
36758      v2si __builtin_ia32_pcmpeqd (v2si, v2si)
36759      v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
36760      v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
36761      v2si __builtin_ia32_pcmpgtd (v2si, v2si)
36762      v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
36763      v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
36764      v2si __builtin_ia32_punpckhdq (v2si, v2si)
36765      v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
36766      v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
36767      v2si __builtin_ia32_punpckldq (v2si, v2si)
36768      v8qi __builtin_ia32_packsswb (v4hi, v4hi)
36769      v4hi __builtin_ia32_packssdw (v2si, v2si)
36770      v8qi __builtin_ia32_packuswb (v4hi, v4hi)
36771
36772      v4hi __builtin_ia32_psllw (v4hi, v4hi)
36773      v2si __builtin_ia32_pslld (v2si, v2si)
36774      v1di __builtin_ia32_psllq (v1di, v1di)
36775      v4hi __builtin_ia32_psrlw (v4hi, v4hi)
36776      v2si __builtin_ia32_psrld (v2si, v2si)
36777      v1di __builtin_ia32_psrlq (v1di, v1di)
36778      v4hi __builtin_ia32_psraw (v4hi, v4hi)
36779      v2si __builtin_ia32_psrad (v2si, v2si)
36780      v4hi __builtin_ia32_psllwi (v4hi, int)
36781      v2si __builtin_ia32_pslldi (v2si, int)
36782      v1di __builtin_ia32_psllqi (v1di, int)
36783      v4hi __builtin_ia32_psrlwi (v4hi, int)
36784      v2si __builtin_ia32_psrldi (v2si, int)
36785      v1di __builtin_ia32_psrlqi (v1di, int)
36786      v4hi __builtin_ia32_psrawi (v4hi, int)
36787      v2si __builtin_ia32_psradi (v2si, int)
36788
36789  The following built-in functions are made available either with
36790 `-msse', or with a combination of `-m3dnow' and `-march=athlon'.  All
36791 of them generate the machine instruction that is part of the name.
36792
36793      v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
36794      v8qi __builtin_ia32_pavgb (v8qi, v8qi)
36795      v4hi __builtin_ia32_pavgw (v4hi, v4hi)
36796      v1di __builtin_ia32_psadbw (v8qi, v8qi)
36797      v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
36798      v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
36799      v8qi __builtin_ia32_pminub (v8qi, v8qi)
36800      v4hi __builtin_ia32_pminsw (v4hi, v4hi)
36801      int __builtin_ia32_pextrw (v4hi, int)
36802      v4hi __builtin_ia32_pinsrw (v4hi, int, int)
36803      int __builtin_ia32_pmovmskb (v8qi)
36804      void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
36805      void __builtin_ia32_movntq (di *, di)
36806      void __builtin_ia32_sfence (void)
36807
36808  The following built-in functions are available when `-msse' is used.
36809 All of them generate the machine instruction that is part of the name.
36810
36811      int __builtin_ia32_comieq (v4sf, v4sf)
36812      int __builtin_ia32_comineq (v4sf, v4sf)
36813      int __builtin_ia32_comilt (v4sf, v4sf)
36814      int __builtin_ia32_comile (v4sf, v4sf)
36815      int __builtin_ia32_comigt (v4sf, v4sf)
36816      int __builtin_ia32_comige (v4sf, v4sf)
36817      int __builtin_ia32_ucomieq (v4sf, v4sf)
36818      int __builtin_ia32_ucomineq (v4sf, v4sf)
36819      int __builtin_ia32_ucomilt (v4sf, v4sf)
36820      int __builtin_ia32_ucomile (v4sf, v4sf)
36821      int __builtin_ia32_ucomigt (v4sf, v4sf)
36822      int __builtin_ia32_ucomige (v4sf, v4sf)
36823      v4sf __builtin_ia32_addps (v4sf, v4sf)
36824      v4sf __builtin_ia32_subps (v4sf, v4sf)
36825      v4sf __builtin_ia32_mulps (v4sf, v4sf)
36826      v4sf __builtin_ia32_divps (v4sf, v4sf)
36827      v4sf __builtin_ia32_addss (v4sf, v4sf)
36828      v4sf __builtin_ia32_subss (v4sf, v4sf)
36829      v4sf __builtin_ia32_mulss (v4sf, v4sf)
36830      v4sf __builtin_ia32_divss (v4sf, v4sf)
36831      v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
36832      v4si __builtin_ia32_cmpltps (v4sf, v4sf)
36833      v4si __builtin_ia32_cmpleps (v4sf, v4sf)
36834      v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
36835      v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
36836      v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
36837      v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
36838      v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
36839      v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
36840      v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
36841      v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
36842      v4si __builtin_ia32_cmpordps (v4sf, v4sf)
36843      v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
36844      v4si __builtin_ia32_cmpltss (v4sf, v4sf)
36845      v4si __builtin_ia32_cmpless (v4sf, v4sf)
36846      v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
36847      v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
36848      v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
36849      v4si __builtin_ia32_cmpnless (v4sf, v4sf)
36850      v4si __builtin_ia32_cmpordss (v4sf, v4sf)
36851      v4sf __builtin_ia32_maxps (v4sf, v4sf)
36852      v4sf __builtin_ia32_maxss (v4sf, v4sf)
36853      v4sf __builtin_ia32_minps (v4sf, v4sf)
36854      v4sf __builtin_ia32_minss (v4sf, v4sf)
36855      v4sf __builtin_ia32_andps (v4sf, v4sf)
36856      v4sf __builtin_ia32_andnps (v4sf, v4sf)
36857      v4sf __builtin_ia32_orps (v4sf, v4sf)
36858      v4sf __builtin_ia32_xorps (v4sf, v4sf)
36859      v4sf __builtin_ia32_movss (v4sf, v4sf)
36860      v4sf __builtin_ia32_movhlps (v4sf, v4sf)
36861      v4sf __builtin_ia32_movlhps (v4sf, v4sf)
36862      v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
36863      v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
36864      v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
36865      v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
36866      v2si __builtin_ia32_cvtps2pi (v4sf)
36867      int __builtin_ia32_cvtss2si (v4sf)
36868      v2si __builtin_ia32_cvttps2pi (v4sf)
36869      int __builtin_ia32_cvttss2si (v4sf)
36870      v4sf __builtin_ia32_rcpps (v4sf)
36871      v4sf __builtin_ia32_rsqrtps (v4sf)
36872      v4sf __builtin_ia32_sqrtps (v4sf)
36873      v4sf __builtin_ia32_rcpss (v4sf)
36874      v4sf __builtin_ia32_rsqrtss (v4sf)
36875      v4sf __builtin_ia32_sqrtss (v4sf)
36876      v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
36877      void __builtin_ia32_movntps (float *, v4sf)
36878      int __builtin_ia32_movmskps (v4sf)
36879
36880  The following built-in functions are available when `-msse' is used.
36881
36882 `v4sf __builtin_ia32_loadaps (float *)'
36883      Generates the `movaps' machine instruction as a load from memory.
36884
36885 `void __builtin_ia32_storeaps (float *, v4sf)'
36886      Generates the `movaps' machine instruction as a store to memory.
36887
36888 `v4sf __builtin_ia32_loadups (float *)'
36889      Generates the `movups' machine instruction as a load from memory.
36890
36891 `void __builtin_ia32_storeups (float *, v4sf)'
36892      Generates the `movups' machine instruction as a store to memory.
36893
36894 `v4sf __builtin_ia32_loadsss (float *)'
36895      Generates the `movss' machine instruction as a load from memory.
36896
36897 `void __builtin_ia32_storess (float *, v4sf)'
36898      Generates the `movss' machine instruction as a store to memory.
36899
36900 `v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)'
36901      Generates the `movhps' machine instruction as a load from memory.
36902
36903 `v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)'
36904      Generates the `movlps' machine instruction as a load from memory
36905
36906 `void __builtin_ia32_storehps (v2sf *, v4sf)'
36907      Generates the `movhps' machine instruction as a store to memory.
36908
36909 `void __builtin_ia32_storelps (v2sf *, v4sf)'
36910      Generates the `movlps' machine instruction as a store to memory.
36911
36912  The following built-in functions are available when `-msse2' is used.
36913 All of them generate the machine instruction that is part of the name.
36914
36915      int __builtin_ia32_comisdeq (v2df, v2df)
36916      int __builtin_ia32_comisdlt (v2df, v2df)
36917      int __builtin_ia32_comisdle (v2df, v2df)
36918      int __builtin_ia32_comisdgt (v2df, v2df)
36919      int __builtin_ia32_comisdge (v2df, v2df)
36920      int __builtin_ia32_comisdneq (v2df, v2df)
36921      int __builtin_ia32_ucomisdeq (v2df, v2df)
36922      int __builtin_ia32_ucomisdlt (v2df, v2df)
36923      int __builtin_ia32_ucomisdle (v2df, v2df)
36924      int __builtin_ia32_ucomisdgt (v2df, v2df)
36925      int __builtin_ia32_ucomisdge (v2df, v2df)
36926      int __builtin_ia32_ucomisdneq (v2df, v2df)
36927      v2df __builtin_ia32_cmpeqpd (v2df, v2df)
36928      v2df __builtin_ia32_cmpltpd (v2df, v2df)
36929      v2df __builtin_ia32_cmplepd (v2df, v2df)
36930      v2df __builtin_ia32_cmpgtpd (v2df, v2df)
36931      v2df __builtin_ia32_cmpgepd (v2df, v2df)
36932      v2df __builtin_ia32_cmpunordpd (v2df, v2df)
36933      v2df __builtin_ia32_cmpneqpd (v2df, v2df)
36934      v2df __builtin_ia32_cmpnltpd (v2df, v2df)
36935      v2df __builtin_ia32_cmpnlepd (v2df, v2df)
36936      v2df __builtin_ia32_cmpngtpd (v2df, v2df)
36937      v2df __builtin_ia32_cmpngepd (v2df, v2df)
36938      v2df __builtin_ia32_cmpordpd (v2df, v2df)
36939      v2df __builtin_ia32_cmpeqsd (v2df, v2df)
36940      v2df __builtin_ia32_cmpltsd (v2df, v2df)
36941      v2df __builtin_ia32_cmplesd (v2df, v2df)
36942      v2df __builtin_ia32_cmpunordsd (v2df, v2df)
36943      v2df __builtin_ia32_cmpneqsd (v2df, v2df)
36944      v2df __builtin_ia32_cmpnltsd (v2df, v2df)
36945      v2df __builtin_ia32_cmpnlesd (v2df, v2df)
36946      v2df __builtin_ia32_cmpordsd (v2df, v2df)
36947      v2di __builtin_ia32_paddq (v2di, v2di)
36948      v2di __builtin_ia32_psubq (v2di, v2di)
36949      v2df __builtin_ia32_addpd (v2df, v2df)
36950      v2df __builtin_ia32_subpd (v2df, v2df)
36951      v2df __builtin_ia32_mulpd (v2df, v2df)
36952      v2df __builtin_ia32_divpd (v2df, v2df)
36953      v2df __builtin_ia32_addsd (v2df, v2df)
36954      v2df __builtin_ia32_subsd (v2df, v2df)
36955      v2df __builtin_ia32_mulsd (v2df, v2df)
36956      v2df __builtin_ia32_divsd (v2df, v2df)
36957      v2df __builtin_ia32_minpd (v2df, v2df)
36958      v2df __builtin_ia32_maxpd (v2df, v2df)
36959      v2df __builtin_ia32_minsd (v2df, v2df)
36960      v2df __builtin_ia32_maxsd (v2df, v2df)
36961      v2df __builtin_ia32_andpd (v2df, v2df)
36962      v2df __builtin_ia32_andnpd (v2df, v2df)
36963      v2df __builtin_ia32_orpd (v2df, v2df)
36964      v2df __builtin_ia32_xorpd (v2df, v2df)
36965      v2df __builtin_ia32_movsd (v2df, v2df)
36966      v2df __builtin_ia32_unpckhpd (v2df, v2df)
36967      v2df __builtin_ia32_unpcklpd (v2df, v2df)
36968      v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
36969      v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
36970      v4si __builtin_ia32_paddd128 (v4si, v4si)
36971      v2di __builtin_ia32_paddq128 (v2di, v2di)
36972      v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
36973      v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
36974      v4si __builtin_ia32_psubd128 (v4si, v4si)
36975      v2di __builtin_ia32_psubq128 (v2di, v2di)
36976      v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
36977      v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
36978      v2di __builtin_ia32_pand128 (v2di, v2di)
36979      v2di __builtin_ia32_pandn128 (v2di, v2di)
36980      v2di __builtin_ia32_por128 (v2di, v2di)
36981      v2di __builtin_ia32_pxor128 (v2di, v2di)
36982      v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
36983      v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
36984      v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
36985      v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
36986      v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
36987      v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
36988      v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
36989      v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
36990      v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
36991      v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
36992      v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
36993      v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
36994      v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
36995      v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
36996      v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
36997      v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
36998      v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
36999      v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
37000      v4si __builtin_ia32_punpckldq128 (v4si, v4si)
37001      v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
37002      v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
37003      v8hi __builtin_ia32_packssdw128 (v4si, v4si)
37004      v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
37005      v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
37006      void __builtin_ia32_maskmovdqu (v16qi, v16qi)
37007      v2df __builtin_ia32_loadupd (double *)
37008      void __builtin_ia32_storeupd (double *, v2df)
37009      v2df __builtin_ia32_loadhpd (v2df, double const *)
37010      v2df __builtin_ia32_loadlpd (v2df, double const *)
37011      int __builtin_ia32_movmskpd (v2df)
37012      int __builtin_ia32_pmovmskb128 (v16qi)
37013      void __builtin_ia32_movnti (int *, int)
37014      void __builtin_ia32_movnti64 (long long int *, long long int)
37015      void __builtin_ia32_movntpd (double *, v2df)
37016      void __builtin_ia32_movntdq (v2df *, v2df)
37017      v4si __builtin_ia32_pshufd (v4si, int)
37018      v8hi __builtin_ia32_pshuflw (v8hi, int)
37019      v8hi __builtin_ia32_pshufhw (v8hi, int)
37020      v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
37021      v2df __builtin_ia32_sqrtpd (v2df)
37022      v2df __builtin_ia32_sqrtsd (v2df)
37023      v2df __builtin_ia32_shufpd (v2df, v2df, int)
37024      v2df __builtin_ia32_cvtdq2pd (v4si)
37025      v4sf __builtin_ia32_cvtdq2ps (v4si)
37026      v4si __builtin_ia32_cvtpd2dq (v2df)
37027      v2si __builtin_ia32_cvtpd2pi (v2df)
37028      v4sf __builtin_ia32_cvtpd2ps (v2df)
37029      v4si __builtin_ia32_cvttpd2dq (v2df)
37030      v2si __builtin_ia32_cvttpd2pi (v2df)
37031      v2df __builtin_ia32_cvtpi2pd (v2si)
37032      int __builtin_ia32_cvtsd2si (v2df)
37033      int __builtin_ia32_cvttsd2si (v2df)
37034      long long __builtin_ia32_cvtsd2si64 (v2df)
37035      long long __builtin_ia32_cvttsd2si64 (v2df)
37036      v4si __builtin_ia32_cvtps2dq (v4sf)
37037      v2df __builtin_ia32_cvtps2pd (v4sf)
37038      v4si __builtin_ia32_cvttps2dq (v4sf)
37039      v2df __builtin_ia32_cvtsi2sd (v2df, int)
37040      v2df __builtin_ia32_cvtsi642sd (v2df, long long)
37041      v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
37042      v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
37043      void __builtin_ia32_clflush (const void *)
37044      void __builtin_ia32_lfence (void)
37045      void __builtin_ia32_mfence (void)
37046      v16qi __builtin_ia32_loaddqu (const char *)
37047      void __builtin_ia32_storedqu (char *, v16qi)
37048      v1di __builtin_ia32_pmuludq (v2si, v2si)
37049      v2di __builtin_ia32_pmuludq128 (v4si, v4si)
37050      v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
37051      v4si __builtin_ia32_pslld128 (v4si, v4si)
37052      v2di __builtin_ia32_psllq128 (v2di, v2di)
37053      v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
37054      v4si __builtin_ia32_psrld128 (v4si, v4si)
37055      v2di __builtin_ia32_psrlq128 (v2di, v2di)
37056      v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
37057      v4si __builtin_ia32_psrad128 (v4si, v4si)
37058      v2di __builtin_ia32_pslldqi128 (v2di, int)
37059      v8hi __builtin_ia32_psllwi128 (v8hi, int)
37060      v4si __builtin_ia32_pslldi128 (v4si, int)
37061      v2di __builtin_ia32_psllqi128 (v2di, int)
37062      v2di __builtin_ia32_psrldqi128 (v2di, int)
37063      v8hi __builtin_ia32_psrlwi128 (v8hi, int)
37064      v4si __builtin_ia32_psrldi128 (v4si, int)
37065      v2di __builtin_ia32_psrlqi128 (v2di, int)
37066      v8hi __builtin_ia32_psrawi128 (v8hi, int)
37067      v4si __builtin_ia32_psradi128 (v4si, int)
37068      v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
37069      v2di __builtin_ia32_movq128 (v2di)
37070
37071  The following built-in functions are available when `-msse3' is used.
37072 All of them generate the machine instruction that is part of the name.
37073
37074      v2df __builtin_ia32_addsubpd (v2df, v2df)
37075      v4sf __builtin_ia32_addsubps (v4sf, v4sf)
37076      v2df __builtin_ia32_haddpd (v2df, v2df)
37077      v4sf __builtin_ia32_haddps (v4sf, v4sf)
37078      v2df __builtin_ia32_hsubpd (v2df, v2df)
37079      v4sf __builtin_ia32_hsubps (v4sf, v4sf)
37080      v16qi __builtin_ia32_lddqu (char const *)
37081      void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
37082      v2df __builtin_ia32_movddup (v2df)
37083      v4sf __builtin_ia32_movshdup (v4sf)
37084      v4sf __builtin_ia32_movsldup (v4sf)
37085      void __builtin_ia32_mwait (unsigned int, unsigned int)
37086
37087  The following built-in functions are available when `-msse3' is used.
37088
37089 `v2df __builtin_ia32_loadddup (double const *)'
37090      Generates the `movddup' machine instruction as a load from memory.
37091
37092  The following built-in functions are available when `-mssse3' is used.
37093 All of them generate the machine instruction that is part of the name
37094 with MMX registers.
37095
37096      v2si __builtin_ia32_phaddd (v2si, v2si)
37097      v4hi __builtin_ia32_phaddw (v4hi, v4hi)
37098      v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
37099      v2si __builtin_ia32_phsubd (v2si, v2si)
37100      v4hi __builtin_ia32_phsubw (v4hi, v4hi)
37101      v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
37102      v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
37103      v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
37104      v8qi __builtin_ia32_pshufb (v8qi, v8qi)
37105      v8qi __builtin_ia32_psignb (v8qi, v8qi)
37106      v2si __builtin_ia32_psignd (v2si, v2si)
37107      v4hi __builtin_ia32_psignw (v4hi, v4hi)
37108      v1di __builtin_ia32_palignr (v1di, v1di, int)
37109      v8qi __builtin_ia32_pabsb (v8qi)
37110      v2si __builtin_ia32_pabsd (v2si)
37111      v4hi __builtin_ia32_pabsw (v4hi)
37112
37113  The following built-in functions are available when `-mssse3' is used.
37114 All of them generate the machine instruction that is part of the name
37115 with SSE registers.
37116
37117      v4si __builtin_ia32_phaddd128 (v4si, v4si)
37118      v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
37119      v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
37120      v4si __builtin_ia32_phsubd128 (v4si, v4si)
37121      v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
37122      v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
37123      v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
37124      v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
37125      v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
37126      v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
37127      v4si __builtin_ia32_psignd128 (v4si, v4si)
37128      v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
37129      v2di __builtin_ia32_palignr128 (v2di, v2di, int)
37130      v16qi __builtin_ia32_pabsb128 (v16qi)
37131      v4si __builtin_ia32_pabsd128 (v4si)
37132      v8hi __builtin_ia32_pabsw128 (v8hi)
37133
37134  The following built-in functions are available when `-msse4.1' is
37135 used.  All of them generate the machine instruction that is part of the
37136 name.
37137
37138      v2df __builtin_ia32_blendpd (v2df, v2df, const int)
37139      v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
37140      v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
37141      v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
37142      v2df __builtin_ia32_dppd (v2df, v2df, const int)
37143      v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
37144      v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
37145      v2di __builtin_ia32_movntdqa (v2di *);
37146      v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
37147      v8hi __builtin_ia32_packusdw128 (v4si, v4si)
37148      v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
37149      v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
37150      v2di __builtin_ia32_pcmpeqq (v2di, v2di)
37151      v8hi __builtin_ia32_phminposuw128 (v8hi)
37152      v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
37153      v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
37154      v4si __builtin_ia32_pmaxud128 (v4si, v4si)
37155      v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
37156      v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
37157      v4si __builtin_ia32_pminsd128 (v4si, v4si)
37158      v4si __builtin_ia32_pminud128 (v4si, v4si)
37159      v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
37160      v4si __builtin_ia32_pmovsxbd128 (v16qi)
37161      v2di __builtin_ia32_pmovsxbq128 (v16qi)
37162      v8hi __builtin_ia32_pmovsxbw128 (v16qi)
37163      v2di __builtin_ia32_pmovsxdq128 (v4si)
37164      v4si __builtin_ia32_pmovsxwd128 (v8hi)
37165      v2di __builtin_ia32_pmovsxwq128 (v8hi)
37166      v4si __builtin_ia32_pmovzxbd128 (v16qi)
37167      v2di __builtin_ia32_pmovzxbq128 (v16qi)
37168      v8hi __builtin_ia32_pmovzxbw128 (v16qi)
37169      v2di __builtin_ia32_pmovzxdq128 (v4si)
37170      v4si __builtin_ia32_pmovzxwd128 (v8hi)
37171      v2di __builtin_ia32_pmovzxwq128 (v8hi)
37172      v2di __builtin_ia32_pmuldq128 (v4si, v4si)
37173      v4si __builtin_ia32_pmulld128 (v4si, v4si)
37174      int __builtin_ia32_ptestc128 (v2di, v2di)
37175      int __builtin_ia32_ptestnzc128 (v2di, v2di)
37176      int __builtin_ia32_ptestz128 (v2di, v2di)
37177      v2df __builtin_ia32_roundpd (v2df, const int)
37178      v4sf __builtin_ia32_roundps (v4sf, const int)
37179      v2df __builtin_ia32_roundsd (v2df, v2df, const int)
37180      v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
37181
37182  The following built-in functions are available when `-msse4.1' is used.
37183
37184 `v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)'
37185      Generates the `insertps' machine instruction.
37186
37187 `int __builtin_ia32_vec_ext_v16qi (v16qi, const int)'
37188      Generates the `pextrb' machine instruction.
37189
37190 `v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)'
37191      Generates the `pinsrb' machine instruction.
37192
37193 `v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)'
37194      Generates the `pinsrd' machine instruction.
37195
37196 `v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)'
37197      Generates the `pinsrq' machine instruction in 64bit mode.
37198
37199  The following built-in functions are changed to generate new SSE4.1
37200 instructions when `-msse4.1' is used.
37201
37202 `float __builtin_ia32_vec_ext_v4sf (v4sf, const int)'
37203      Generates the `extractps' machine instruction.
37204
37205 `int __builtin_ia32_vec_ext_v4si (v4si, const int)'
37206      Generates the `pextrd' machine instruction.
37207
37208 `long long __builtin_ia32_vec_ext_v2di (v2di, const int)'
37209      Generates the `pextrq' machine instruction in 64bit mode.
37210
37211  The following built-in functions are available when `-msse4.2' is
37212 used.  All of them generate the machine instruction that is part of the
37213 name.
37214
37215      v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
37216      int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
37217      int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
37218      int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
37219      int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
37220      int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
37221      int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
37222      v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
37223      int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
37224      int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
37225      int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
37226      int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
37227      int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
37228      int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
37229      v2di __builtin_ia32_pcmpgtq (v2di, v2di)
37230
37231  The following built-in functions are available when `-msse4.2' is used.
37232
37233 `unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)'
37234      Generates the `crc32b' machine instruction.
37235
37236 `unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)'
37237      Generates the `crc32w' machine instruction.
37238
37239 `unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)'
37240      Generates the `crc32l' machine instruction.
37241
37242 `unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)'
37243      Generates the `crc32q' machine instruction.
37244
37245  The following built-in functions are changed to generate new SSE4.2
37246 instructions when `-msse4.2' is used.
37247
37248 `int __builtin_popcount (unsigned int)'
37249      Generates the `popcntl' machine instruction.
37250
37251 `int __builtin_popcountl (unsigned long)'
37252      Generates the `popcntl' or `popcntq' machine instruction,
37253      depending on the size of `unsigned long'.
37254
37255 `int __builtin_popcountll (unsigned long long)'
37256      Generates the `popcntq' machine instruction.
37257
37258  The following built-in functions are available when `-mavx' is used.
37259 All of them generate the machine instruction that is part of the name.
37260
37261      v4df __builtin_ia32_addpd256 (v4df,v4df)
37262      v8sf __builtin_ia32_addps256 (v8sf,v8sf)
37263      v4df __builtin_ia32_addsubpd256 (v4df,v4df)
37264      v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
37265      v4df __builtin_ia32_andnpd256 (v4df,v4df)
37266      v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
37267      v4df __builtin_ia32_andpd256 (v4df,v4df)
37268      v8sf __builtin_ia32_andps256 (v8sf,v8sf)
37269      v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
37270      v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
37271      v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
37272      v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
37273      v2df __builtin_ia32_cmppd (v2df,v2df,int)
37274      v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
37275      v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
37276      v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
37277      v2df __builtin_ia32_cmpsd (v2df,v2df,int)
37278      v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
37279      v4df __builtin_ia32_cvtdq2pd256 (v4si)
37280      v8sf __builtin_ia32_cvtdq2ps256 (v8si)
37281      v4si __builtin_ia32_cvtpd2dq256 (v4df)
37282      v4sf __builtin_ia32_cvtpd2ps256 (v4df)
37283      v8si __builtin_ia32_cvtps2dq256 (v8sf)
37284      v4df __builtin_ia32_cvtps2pd256 (v4sf)
37285      v4si __builtin_ia32_cvttpd2dq256 (v4df)
37286      v8si __builtin_ia32_cvttps2dq256 (v8sf)
37287      v4df __builtin_ia32_divpd256 (v4df,v4df)
37288      v8sf __builtin_ia32_divps256 (v8sf,v8sf)
37289      v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
37290      v4df __builtin_ia32_haddpd256 (v4df,v4df)
37291      v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
37292      v4df __builtin_ia32_hsubpd256 (v4df,v4df)
37293      v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
37294      v32qi __builtin_ia32_lddqu256 (pcchar)
37295      v32qi __builtin_ia32_loaddqu256 (pcchar)
37296      v4df __builtin_ia32_loadupd256 (pcdouble)
37297      v8sf __builtin_ia32_loadups256 (pcfloat)
37298      v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
37299      v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
37300      v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
37301      v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
37302      void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
37303      void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
37304      void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
37305      void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
37306      v4df __builtin_ia32_maxpd256 (v4df,v4df)
37307      v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
37308      v4df __builtin_ia32_minpd256 (v4df,v4df)
37309      v8sf __builtin_ia32_minps256 (v8sf,v8sf)
37310      v4df __builtin_ia32_movddup256 (v4df)
37311      int __builtin_ia32_movmskpd256 (v4df)
37312      int __builtin_ia32_movmskps256 (v8sf)
37313      v8sf __builtin_ia32_movshdup256 (v8sf)
37314      v8sf __builtin_ia32_movsldup256 (v8sf)
37315      v4df __builtin_ia32_mulpd256 (v4df,v4df)
37316      v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
37317      v4df __builtin_ia32_orpd256 (v4df,v4df)
37318      v8sf __builtin_ia32_orps256 (v8sf,v8sf)
37319      v2df __builtin_ia32_pd_pd256 (v4df)
37320      v4df __builtin_ia32_pd256_pd (v2df)
37321      v4sf __builtin_ia32_ps_ps256 (v8sf)
37322      v8sf __builtin_ia32_ps256_ps (v4sf)
37323      int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
37324      int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
37325      int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
37326      v8sf __builtin_ia32_rcpps256 (v8sf)
37327      v4df __builtin_ia32_roundpd256 (v4df,int)
37328      v8sf __builtin_ia32_roundps256 (v8sf,int)
37329      v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
37330      v8sf __builtin_ia32_rsqrtps256 (v8sf)
37331      v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
37332      v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
37333      v4si __builtin_ia32_si_si256 (v8si)
37334      v8si __builtin_ia32_si256_si (v4si)
37335      v4df __builtin_ia32_sqrtpd256 (v4df)
37336      v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
37337      v8sf __builtin_ia32_sqrtps256 (v8sf)
37338      void __builtin_ia32_storedqu256 (pchar,v32qi)
37339      void __builtin_ia32_storeupd256 (pdouble,v4df)
37340      void __builtin_ia32_storeups256 (pfloat,v8sf)
37341      v4df __builtin_ia32_subpd256 (v4df,v4df)
37342      v8sf __builtin_ia32_subps256 (v8sf,v8sf)
37343      v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
37344      v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
37345      v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
37346      v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
37347      v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
37348      v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
37349      v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
37350      v4sf __builtin_ia32_vbroadcastss (pcfloat)
37351      v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
37352      v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
37353      v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
37354      v4si __builtin_ia32_vextractf128_si256 (v8si,int)
37355      v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
37356      v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
37357      v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
37358      v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
37359      v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
37360      v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
37361      v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
37362      v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
37363      v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
37364      v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
37365      v2df __builtin_ia32_vpermilpd (v2df,int)
37366      v4df __builtin_ia32_vpermilpd256 (v4df,int)
37367      v4sf __builtin_ia32_vpermilps (v4sf,int)
37368      v8sf __builtin_ia32_vpermilps256 (v8sf,int)
37369      v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
37370      v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
37371      v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
37372      v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
37373      int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
37374      int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
37375      int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
37376      int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
37377      int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
37378      int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
37379      int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
37380      int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
37381      int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
37382      int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
37383      int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
37384      int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
37385      void __builtin_ia32_vzeroall (void)
37386      void __builtin_ia32_vzeroupper (void)
37387      v4df __builtin_ia32_xorpd256 (v4df,v4df)
37388      v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
37389
37390  The following built-in functions are available when `-mavx2' is used.
37391 All of them generate the machine instruction that is part of the name.
37392
37393      v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,v32qi,int)
37394      v32qi __builtin_ia32_pabsb256 (v32qi)
37395      v16hi __builtin_ia32_pabsw256 (v16hi)
37396      v8si __builtin_ia32_pabsd256 (v8si)
37397      v16hi __builtin_ia32_packssdw256 (v8si,v8si)
37398      v32qi __builtin_ia32_packsswb256 (v16hi,v16hi)
37399      v16hi __builtin_ia32_packusdw256 (v8si,v8si)
37400      v32qi __builtin_ia32_packuswb256 (v16hi,v16hi)
37401      v32qi __builtin_ia32_paddb256 (v32qi,v32qi)
37402      v16hi __builtin_ia32_paddw256 (v16hi,v16hi)
37403      v8si __builtin_ia32_paddd256 (v8si,v8si)
37404      v4di __builtin_ia32_paddq256 (v4di,v4di)
37405      v32qi __builtin_ia32_paddsb256 (v32qi,v32qi)
37406      v16hi __builtin_ia32_paddsw256 (v16hi,v16hi)
37407      v32qi __builtin_ia32_paddusb256 (v32qi,v32qi)
37408      v16hi __builtin_ia32_paddusw256 (v16hi,v16hi)
37409      v4di __builtin_ia32_palignr256 (v4di,v4di,int)
37410      v4di __builtin_ia32_andsi256 (v4di,v4di)
37411      v4di __builtin_ia32_andnotsi256 (v4di,v4di)
37412      v32qi __builtin_ia32_pavgb256 (v32qi,v32qi)
37413      v16hi __builtin_ia32_pavgw256 (v16hi,v16hi)
37414      v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi)
37415      v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int)
37416      v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi)
37417      v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi)
37418      v8si __builtin_ia32_pcmpeqd256 (c8si,v8si)
37419      v4di __builtin_ia32_pcmpeqq256 (v4di,v4di)
37420      v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi)
37421      v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi)
37422      v8si __builtin_ia32_pcmpgtd256 (v8si,v8si)
37423      v4di __builtin_ia32_pcmpgtq256 (v4di,v4di)
37424      v16hi __builtin_ia32_phaddw256 (v16hi,v16hi)
37425      v8si __builtin_ia32_phaddd256 (v8si,v8si)
37426      v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi)
37427      v16hi __builtin_ia32_phsubw256 (v16hi,v16hi)
37428      v8si __builtin_ia32_phsubd256 (v8si,v8si)
37429      v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi)
37430      v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi)
37431      v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi)
37432      v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi)
37433      v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi)
37434      v8si __builtin_ia32_pmaxsd256 (v8si,v8si)
37435      v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi)
37436      v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi)
37437      v8si __builtin_ia32_pmaxud256 (v8si,v8si)
37438      v32qi __builtin_ia32_pminsb256 (v32qi,v32qi)
37439      v16hi __builtin_ia32_pminsw256 (v16hi,v16hi)
37440      v8si __builtin_ia32_pminsd256 (v8si,v8si)
37441      v32qi __builtin_ia32_pminub256 (v32qi,v32qi)
37442      v16hi __builtin_ia32_pminuw256 (v16hi,v16hi)
37443      v8si __builtin_ia32_pminud256 (v8si,v8si)
37444      int __builtin_ia32_pmovmskb256 (v32qi)
37445      v16hi __builtin_ia32_pmovsxbw256 (v16qi)
37446      v8si __builtin_ia32_pmovsxbd256 (v16qi)
37447      v4di __builtin_ia32_pmovsxbq256 (v16qi)
37448      v8si __builtin_ia32_pmovsxwd256 (v8hi)
37449      v4di __builtin_ia32_pmovsxwq256 (v8hi)
37450      v4di __builtin_ia32_pmovsxdq256 (v4si)
37451      v16hi __builtin_ia32_pmovzxbw256 (v16qi)
37452      v8si __builtin_ia32_pmovzxbd256 (v16qi)
37453      v4di __builtin_ia32_pmovzxbq256 (v16qi)
37454      v8si __builtin_ia32_pmovzxwd256 (v8hi)
37455      v4di __builtin_ia32_pmovzxwq256 (v8hi)
37456      v4di __builtin_ia32_pmovzxdq256 (v4si)
37457      v4di __builtin_ia32_pmuldq256 (v8si,v8si)
37458      v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi)
37459      v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi)
37460      v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi)
37461      v16hi __builtin_ia32_pmullw256 (v16hi,v16hi)
37462      v8si __builtin_ia32_pmulld256 (v8si,v8si)
37463      v4di __builtin_ia32_pmuludq256 (v8si,v8si)
37464      v4di __builtin_ia32_por256 (v4di,v4di)
37465      v16hi __builtin_ia32_psadbw256 (v32qi,v32qi)
37466      v32qi __builtin_ia32_pshufb256 (v32qi,v32qi)
37467      v8si __builtin_ia32_pshufd256 (v8si,int)
37468      v16hi __builtin_ia32_pshufhw256 (v16hi,int)
37469      v16hi __builtin_ia32_pshuflw256 (v16hi,int)
37470      v32qi __builtin_ia32_psignb256 (v32qi,v32qi)
37471      v16hi __builtin_ia32_psignw256 (v16hi,v16hi)
37472      v8si __builtin_ia32_psignd256 (v8si,v8si)
37473      v4di __builtin_ia32_pslldqi256 (v4di,int)
37474      v16hi __builtin_ia32_psllwi256 (16hi,int)
37475      v16hi __builtin_ia32_psllw256(v16hi,v8hi)
37476      v8si __builtin_ia32_pslldi256 (v8si,int)
37477      v8si __builtin_ia32_pslld256(v8si,v4si)
37478      v4di __builtin_ia32_psllqi256 (v4di,int)
37479      v4di __builtin_ia32_psllq256(v4di,v2di)
37480      v16hi __builtin_ia32_psrawi256 (v16hi,int)
37481      v16hi __builtin_ia32_psraw256 (v16hi,v8hi)
37482      v8si __builtin_ia32_psradi256 (v8si,int)
37483      v8si __builtin_ia32_psrad256 (v8si,v4si)
37484      v4di __builtin_ia32_psrldqi256 (v4di, int)
37485      v16hi __builtin_ia32_psrlwi256 (v16hi,int)
37486      v16hi __builtin_ia32_psrlw256 (v16hi,v8hi)
37487      v8si __builtin_ia32_psrldi256 (v8si,int)
37488      v8si __builtin_ia32_psrld256 (v8si,v4si)
37489      v4di __builtin_ia32_psrlqi256 (v4di,int)
37490      v4di __builtin_ia32_psrlq256(v4di,v2di)
37491      v32qi __builtin_ia32_psubb256 (v32qi,v32qi)
37492      v32hi __builtin_ia32_psubw256 (v16hi,v16hi)
37493      v8si __builtin_ia32_psubd256 (v8si,v8si)
37494      v4di __builtin_ia32_psubq256 (v4di,v4di)
37495      v32qi __builtin_ia32_psubsb256 (v32qi,v32qi)
37496      v16hi __builtin_ia32_psubsw256 (v16hi,v16hi)
37497      v32qi __builtin_ia32_psubusb256 (v32qi,v32qi)
37498      v16hi __builtin_ia32_psubusw256 (v16hi,v16hi)
37499      v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi)
37500      v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi)
37501      v8si __builtin_ia32_punpckhdq256 (v8si,v8si)
37502      v4di __builtin_ia32_punpckhqdq256 (v4di,v4di)
37503      v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi)
37504      v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi)
37505      v8si __builtin_ia32_punpckldq256 (v8si,v8si)
37506      v4di __builtin_ia32_punpcklqdq256 (v4di,v4di)
37507      v4di __builtin_ia32_pxor256 (v4di,v4di)
37508      v4di __builtin_ia32_movntdqa256 (pv4di)
37509      v4sf __builtin_ia32_vbroadcastss_ps (v4sf)
37510      v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf)
37511      v4df __builtin_ia32_vbroadcastsd_pd256 (v2df)
37512      v4di __builtin_ia32_vbroadcastsi256 (v2di)
37513      v4si __builtin_ia32_pblendd128 (v4si,v4si)
37514      v8si __builtin_ia32_pblendd256 (v8si,v8si)
37515      v32qi __builtin_ia32_pbroadcastb256 (v16qi)
37516      v16hi __builtin_ia32_pbroadcastw256 (v8hi)
37517      v8si __builtin_ia32_pbroadcastd256 (v4si)
37518      v4di __builtin_ia32_pbroadcastq256 (v2di)
37519      v16qi __builtin_ia32_pbroadcastb128 (v16qi)
37520      v8hi __builtin_ia32_pbroadcastw128 (v8hi)
37521      v4si __builtin_ia32_pbroadcastd128 (v4si)
37522      v2di __builtin_ia32_pbroadcastq128 (v2di)
37523      v8si __builtin_ia32_permvarsi256 (v8si,v8si)
37524      v4df __builtin_ia32_permdf256 (v4df,int)
37525      v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf)
37526      v4di __builtin_ia32_permdi256 (v4di,int)
37527      v4di __builtin_ia32_permti256 (v4di,v4di,int)
37528      v4di __builtin_ia32_extract128i256 (v4di,int)
37529      v4di __builtin_ia32_insert128i256 (v4di,v2di,int)
37530      v8si __builtin_ia32_maskloadd256 (pcv8si,v8si)
37531      v4di __builtin_ia32_maskloadq256 (pcv4di,v4di)
37532      v4si __builtin_ia32_maskloadd (pcv4si,v4si)
37533      v2di __builtin_ia32_maskloadq (pcv2di,v2di)
37534      void __builtin_ia32_maskstored256 (pv8si,v8si,v8si)
37535      void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di)
37536      void __builtin_ia32_maskstored (pv4si,v4si,v4si)
37537      void __builtin_ia32_maskstoreq (pv2di,v2di,v2di)
37538      v8si __builtin_ia32_psllv8si (v8si,v8si)
37539      v4si __builtin_ia32_psllv4si (v4si,v4si)
37540      v4di __builtin_ia32_psllv4di (v4di,v4di)
37541      v2di __builtin_ia32_psllv2di (v2di,v2di)
37542      v8si __builtin_ia32_psrav8si (v8si,v8si)
37543      v4si __builtin_ia32_psrav4si (v4si,v4si)
37544      v8si __builtin_ia32_psrlv8si (v8si,v8si)
37545      v4si __builtin_ia32_psrlv4si (v4si,v4si)
37546      v4di __builtin_ia32_psrlv4di (v4di,v4di)
37547      v2di __builtin_ia32_psrlv2di (v2di,v2di)
37548      v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int)
37549      v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int)
37550      v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int)
37551      v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int)
37552      v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int)
37553      v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int)
37554      v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int)
37555      v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int)
37556      v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int)
37557      v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int)
37558      v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int)
37559      v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int)
37560      v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int)
37561      v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int)
37562      v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int)
37563      v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int)
37564
37565  The following built-in functions are available when `-maes' is used.
37566 All of them generate the machine instruction that is part of the name.
37567
37568      v2di __builtin_ia32_aesenc128 (v2di, v2di)
37569      v2di __builtin_ia32_aesenclast128 (v2di, v2di)
37570      v2di __builtin_ia32_aesdec128 (v2di, v2di)
37571      v2di __builtin_ia32_aesdeclast128 (v2di, v2di)
37572      v2di __builtin_ia32_aeskeygenassist128 (v2di, const int)
37573      v2di __builtin_ia32_aesimc128 (v2di)
37574
37575  The following built-in function is available when `-mpclmul' is used.
37576
37577 `v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)'
37578      Generates the `pclmulqdq' machine instruction.
37579
37580  The following built-in function is available when `-mfsgsbase' is
37581 used.  All of them generate the machine instruction that is part of the
37582 name.
37583
37584      unsigned int __builtin_ia32_rdfsbase32 (void)
37585      unsigned long long __builtin_ia32_rdfsbase64 (void)
37586      unsigned int __builtin_ia32_rdgsbase32 (void)
37587      unsigned long long __builtin_ia32_rdgsbase64 (void)
37588      void _writefsbase_u32 (unsigned int)
37589      void _writefsbase_u64 (unsigned long long)
37590      void _writegsbase_u32 (unsigned int)
37591      void _writegsbase_u64 (unsigned long long)
37592
37593  The following built-in function is available when `-mrdrnd' is used.
37594 All of them generate the machine instruction that is part of the name.
37595
37596      unsigned int __builtin_ia32_rdrand16_step (unsigned short *)
37597      unsigned int __builtin_ia32_rdrand32_step (unsigned int *)
37598      unsigned int __builtin_ia32_rdrand64_step (unsigned long long *)
37599
37600  The following built-in functions are available when `-msse4a' is used.
37601 All of them generate the machine instruction that is part of the name.
37602
37603      void __builtin_ia32_movntsd (double *, v2df)
37604      void __builtin_ia32_movntss (float *, v4sf)
37605      v2di __builtin_ia32_extrq  (v2di, v16qi)
37606      v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int)
37607      v2di __builtin_ia32_insertq (v2di, v2di)
37608      v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int)
37609
37610  The following built-in functions are available when `-mxop' is used.
37611      v2df __builtin_ia32_vfrczpd (v2df)
37612      v4sf __builtin_ia32_vfrczps (v4sf)
37613      v2df __builtin_ia32_vfrczsd (v2df, v2df)
37614      v4sf __builtin_ia32_vfrczss (v4sf, v4sf)
37615      v4df __builtin_ia32_vfrczpd256 (v4df)
37616      v8sf __builtin_ia32_vfrczps256 (v8sf)
37617      v2di __builtin_ia32_vpcmov (v2di, v2di, v2di)
37618      v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di)
37619      v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si)
37620      v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi)
37621      v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi)
37622      v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df)
37623      v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf)
37624      v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di)
37625      v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si)
37626      v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi)
37627      v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi)
37628      v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df)
37629      v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf)
37630      v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi)
37631      v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
37632      v4si __builtin_ia32_vpcomeqd (v4si, v4si)
37633      v2di __builtin_ia32_vpcomeqq (v2di, v2di)
37634      v16qi __builtin_ia32_vpcomequb (v16qi, v16qi)
37635      v4si __builtin_ia32_vpcomequd (v4si, v4si)
37636      v2di __builtin_ia32_vpcomequq (v2di, v2di)
37637      v8hi __builtin_ia32_vpcomequw (v8hi, v8hi)
37638      v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
37639      v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi)
37640      v4si __builtin_ia32_vpcomfalsed (v4si, v4si)
37641      v2di __builtin_ia32_vpcomfalseq (v2di, v2di)
37642      v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi)
37643      v4si __builtin_ia32_vpcomfalseud (v4si, v4si)
37644      v2di __builtin_ia32_vpcomfalseuq (v2di, v2di)
37645      v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi)
37646      v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi)
37647      v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi)
37648      v4si __builtin_ia32_vpcomged (v4si, v4si)
37649      v2di __builtin_ia32_vpcomgeq (v2di, v2di)
37650      v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi)
37651      v4si __builtin_ia32_vpcomgeud (v4si, v4si)
37652      v2di __builtin_ia32_vpcomgeuq (v2di, v2di)
37653      v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi)
37654      v8hi __builtin_ia32_vpcomgew (v8hi, v8hi)
37655      v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi)
37656      v4si __builtin_ia32_vpcomgtd (v4si, v4si)
37657      v2di __builtin_ia32_vpcomgtq (v2di, v2di)
37658      v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi)
37659      v4si __builtin_ia32_vpcomgtud (v4si, v4si)
37660      v2di __builtin_ia32_vpcomgtuq (v2di, v2di)
37661      v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi)
37662      v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi)
37663      v16qi __builtin_ia32_vpcomleb (v16qi, v16qi)
37664      v4si __builtin_ia32_vpcomled (v4si, v4si)
37665      v2di __builtin_ia32_vpcomleq (v2di, v2di)
37666      v16qi __builtin_ia32_vpcomleub (v16qi, v16qi)
37667      v4si __builtin_ia32_vpcomleud (v4si, v4si)
37668      v2di __builtin_ia32_vpcomleuq (v2di, v2di)
37669      v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi)
37670      v8hi __builtin_ia32_vpcomlew (v8hi, v8hi)
37671      v16qi __builtin_ia32_vpcomltb (v16qi, v16qi)
37672      v4si __builtin_ia32_vpcomltd (v4si, v4si)
37673      v2di __builtin_ia32_vpcomltq (v2di, v2di)
37674      v16qi __builtin_ia32_vpcomltub (v16qi, v16qi)
37675      v4si __builtin_ia32_vpcomltud (v4si, v4si)
37676      v2di __builtin_ia32_vpcomltuq (v2di, v2di)
37677      v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi)
37678      v8hi __builtin_ia32_vpcomltw (v8hi, v8hi)
37679      v16qi __builtin_ia32_vpcomneb (v16qi, v16qi)
37680      v4si __builtin_ia32_vpcomned (v4si, v4si)
37681      v2di __builtin_ia32_vpcomneq (v2di, v2di)
37682      v16qi __builtin_ia32_vpcomneub (v16qi, v16qi)
37683      v4si __builtin_ia32_vpcomneud (v4si, v4si)
37684      v2di __builtin_ia32_vpcomneuq (v2di, v2di)
37685      v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi)
37686      v8hi __builtin_ia32_vpcomnew (v8hi, v8hi)
37687      v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi)
37688      v4si __builtin_ia32_vpcomtrued (v4si, v4si)
37689      v2di __builtin_ia32_vpcomtrueq (v2di, v2di)
37690      v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi)
37691      v4si __builtin_ia32_vpcomtrueud (v4si, v4si)
37692      v2di __builtin_ia32_vpcomtrueuq (v2di, v2di)
37693      v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi)
37694      v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi)
37695      v4si __builtin_ia32_vphaddbd (v16qi)
37696      v2di __builtin_ia32_vphaddbq (v16qi)
37697      v8hi __builtin_ia32_vphaddbw (v16qi)
37698      v2di __builtin_ia32_vphadddq (v4si)
37699      v4si __builtin_ia32_vphaddubd (v16qi)
37700      v2di __builtin_ia32_vphaddubq (v16qi)
37701      v8hi __builtin_ia32_vphaddubw (v16qi)
37702      v2di __builtin_ia32_vphaddudq (v4si)
37703      v4si __builtin_ia32_vphadduwd (v8hi)
37704      v2di __builtin_ia32_vphadduwq (v8hi)
37705      v4si __builtin_ia32_vphaddwd (v8hi)
37706      v2di __builtin_ia32_vphaddwq (v8hi)
37707      v8hi __builtin_ia32_vphsubbw (v16qi)
37708      v2di __builtin_ia32_vphsubdq (v4si)
37709      v4si __builtin_ia32_vphsubwd (v8hi)
37710      v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si)
37711      v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di)
37712      v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di)
37713      v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si)
37714      v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di)
37715      v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di)
37716      v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si)
37717      v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi)
37718      v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si)
37719      v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi)
37720      v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si)
37721      v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si)
37722      v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi)
37723      v16qi __builtin_ia32_vprotb (v16qi, v16qi)
37724      v4si __builtin_ia32_vprotd (v4si, v4si)
37725      v2di __builtin_ia32_vprotq (v2di, v2di)
37726      v8hi __builtin_ia32_vprotw (v8hi, v8hi)
37727      v16qi __builtin_ia32_vpshab (v16qi, v16qi)
37728      v4si __builtin_ia32_vpshad (v4si, v4si)
37729      v2di __builtin_ia32_vpshaq (v2di, v2di)
37730      v8hi __builtin_ia32_vpshaw (v8hi, v8hi)
37731      v16qi __builtin_ia32_vpshlb (v16qi, v16qi)
37732      v4si __builtin_ia32_vpshld (v4si, v4si)
37733      v2di __builtin_ia32_vpshlq (v2di, v2di)
37734      v8hi __builtin_ia32_vpshlw (v8hi, v8hi)
37735
37736  The following built-in functions are available when `-mfma4' is used.
37737 All of them generate the machine instruction that is part of the name
37738 with MMX registers.
37739
37740      v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df)
37741      v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf)
37742      v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df)
37743      v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf)
37744      v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df)
37745      v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf)
37746      v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df)
37747      v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf)
37748      v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df)
37749      v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf)
37750      v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df)
37751      v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf)
37752      v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df)
37753      v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf)
37754      v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df)
37755      v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf)
37756      v2df __builtin_ia32_fmaddsubpd  (v2df, v2df, v2df)
37757      v4sf __builtin_ia32_fmaddsubps  (v4sf, v4sf, v4sf)
37758      v2df __builtin_ia32_fmsubaddpd  (v2df, v2df, v2df)
37759      v4sf __builtin_ia32_fmsubaddps  (v4sf, v4sf, v4sf)
37760      v4df __builtin_ia32_fmaddpd256 (v4df, v4df, v4df)
37761      v8sf __builtin_ia32_fmaddps256 (v8sf, v8sf, v8sf)
37762      v4df __builtin_ia32_fmsubpd256 (v4df, v4df, v4df)
37763      v8sf __builtin_ia32_fmsubps256 (v8sf, v8sf, v8sf)
37764      v4df __builtin_ia32_fnmaddpd256 (v4df, v4df, v4df)
37765      v8sf __builtin_ia32_fnmaddps256 (v8sf, v8sf, v8sf)
37766      v4df __builtin_ia32_fnmsubpd256 (v4df, v4df, v4df)
37767      v8sf __builtin_ia32_fnmsubps256 (v8sf, v8sf, v8sf)
37768      v4df __builtin_ia32_fmaddsubpd256 (v4df, v4df, v4df)
37769      v8sf __builtin_ia32_fmaddsubps256 (v8sf, v8sf, v8sf)
37770      v4df __builtin_ia32_fmsubaddpd256 (v4df, v4df, v4df)
37771      v8sf __builtin_ia32_fmsubaddps256 (v8sf, v8sf, v8sf)
37772
37773  The following built-in functions are available when `-mlwp' is used.
37774
37775      void __builtin_ia32_llwpcb16 (void *);
37776      void __builtin_ia32_llwpcb32 (void *);
37777      void __builtin_ia32_llwpcb64 (void *);
37778      void * __builtin_ia32_llwpcb16 (void);
37779      void * __builtin_ia32_llwpcb32 (void);
37780      void * __builtin_ia32_llwpcb64 (void);
37781      void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short)
37782      void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int)
37783      void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int)
37784      unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short)
37785      unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int)
37786      unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int)
37787
37788  The following built-in functions are available when `-mbmi' is used.
37789 All of them generate the machine instruction that is part of the name.
37790      unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int);
37791      unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long);
37792
37793  The following built-in functions are available when `-mbmi2' is used.
37794 All of them generate the machine instruction that is part of the name.
37795      unsigned int _bzhi_u32 (unsigned int, unsigned int)
37796      unsigned int _pdep_u32 (unsigned int, unsigned int)
37797      unsigned int _pext_u32 (unsigned int, unsigned int)
37798      unsigned long long _bzhi_u64 (unsigned long long, unsigned long long)
37799      unsigned long long _pdep_u64 (unsigned long long, unsigned long long)
37800      unsigned long long _pext_u64 (unsigned long long, unsigned long long)
37801
37802  The following built-in functions are available when `-mlzcnt' is used.
37803 All of them generate the machine instruction that is part of the name.
37804      unsigned short __builtin_ia32_lzcnt_16(unsigned short);
37805      unsigned int __builtin_ia32_lzcnt_u32(unsigned int);
37806      unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long);
37807
37808  The following built-in functions are available when `-mtbm' is used.
37809 Both of them generate the immediate form of the bextr machine
37810 instruction.
37811      unsigned int __builtin_ia32_bextri_u32 (unsigned int, const unsigned int);
37812      unsigned long long __builtin_ia32_bextri_u64 (unsigned long long, const unsigned long long);
37813
37814  The following built-in functions are available when `-m3dnow' is used.
37815 All of them generate the machine instruction that is part of the name.
37816
37817      void __builtin_ia32_femms (void)
37818      v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
37819      v2si __builtin_ia32_pf2id (v2sf)
37820      v2sf __builtin_ia32_pfacc (v2sf, v2sf)
37821      v2sf __builtin_ia32_pfadd (v2sf, v2sf)
37822      v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
37823      v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
37824      v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
37825      v2sf __builtin_ia32_pfmax (v2sf, v2sf)
37826      v2sf __builtin_ia32_pfmin (v2sf, v2sf)
37827      v2sf __builtin_ia32_pfmul (v2sf, v2sf)
37828      v2sf __builtin_ia32_pfrcp (v2sf)
37829      v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
37830      v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
37831      v2sf __builtin_ia32_pfrsqrt (v2sf)
37832      v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf)
37833      v2sf __builtin_ia32_pfsub (v2sf, v2sf)
37834      v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
37835      v2sf __builtin_ia32_pi2fd (v2si)
37836      v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
37837
37838  The following built-in functions are available when both `-m3dnow' and
37839 `-march=athlon' are used.  All of them generate the machine instruction
37840 that is part of the name.
37841
37842      v2si __builtin_ia32_pf2iw (v2sf)
37843      v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
37844      v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
37845      v2sf __builtin_ia32_pi2fw (v2si)
37846      v2sf __builtin_ia32_pswapdsf (v2sf)
37847      v2si __builtin_ia32_pswapdsi (v2si)
37848
37849  The following built-in functions are available when `-mrtm' is used
37850 They are used for restricted transactional memory. These are the
37851 internal low level functions. Normally the functions in *note X86
37852 transactional memory intrinsics:: should be used instead.
37853
37854      int __builtin_ia32_xbegin ()
37855      void __builtin_ia32_xend ()
37856      void __builtin_ia32_xabort (status)
37857      int __builtin_ia32_xtest ()
37858
37859 \1f
37860 File: gcc.info,  Node: X86 transactional memory intrinsics,  Next: MIPS DSP Built-in Functions,  Prev: X86 Built-in Functions,  Up: Target Builtins
37861
37862 6.56.8 X86 transaction memory intrinsics
37863 ----------------------------------------
37864
37865 Hardware transactional memory intrinsics for i386. These allow to use
37866 memory transactions with RTM (Restricted Transactional Memory).  For
37867 using HLE (Hardware Lock Elision) see *note x86 specific memory model
37868 extensions for transactional memory:: instead.  This support is enabled
37869 with the `-mrtm' option.
37870
37871  A memory transaction commits all changes to memory in an atomic way,
37872 as visible to other threads. If the transaction fails it is rolled back
37873 and all side effects discarded.
37874
37875  Generally there is no guarantee that a memory transaction ever suceeds
37876 and suitable fallback code always needs to be supplied.
37877
37878  -- RTM Function: unsigned _xbegin ()
37879      Start a RTM (Restricted Transactional Memory) transaction.
37880      Returns _XBEGIN_STARTED when the transaction started successfully
37881      (note this is not 0, so the constant has to be explicitely
37882      tested). When the transaction aborts all side effects are undone
37883      and an abort code is returned. There is no guarantee any
37884      transaction ever succeeds, so there always needs to be a valid
37885      tested fallback path.
37886
37887      #include <immintrin.h>
37888
37889      if ((status = _xbegin ()) == _XBEGIN_STARTED) {
37890          ... transaction code...
37891          _xend ();
37892      } else {
37893          ... non transactional fallback path...
37894      }
37895
37896  Valid abort status bits (when the value is not `_XBEGIN_STARTED') are:
37897
37898 `_XABORT_EXPLICIT'
37899      Transaction explicitely aborted with `_xabort'. The parameter
37900      passed to `_xabort' is available with `_XABORT_CODE(status)'
37901
37902 `_XABORT_RETRY'
37903      Transaction retry is possible.
37904
37905 `_XABORT_CONFLICT'
37906      Transaction abort due to a memory conflict with another thread
37907
37908 `_XABORT_CAPACITY'
37909      Transaction abort due to the transaction using too much memory
37910
37911 `_XABORT_DEBUG'
37912      Transaction abort due to a debug trap
37913
37914 `_XABORT_NESTED'
37915      Transaction abort in a inner nested transaction
37916
37917  -- RTM Function: void _xend ()
37918      Commit the current transaction. When no transaction is active this
37919      will fault. All memory side effects of the transactions will
37920      become visible to other threads in an atomic matter.
37921
37922  -- RTM Function: int _xtest ()
37923      Return a value not zero when a transaction is currently active,
37924      otherwise 0.
37925
37926  -- RTM Function: void _xabort (status)
37927      Abort the current transaction. When no transaction is active this
37928      is a no-op.  status must be a 8bit constant, that is included in
37929      the status code returned by `_xbegin'
37930
37931 \1f
37932 File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: X86 transactional memory intrinsics,  Up: Target Builtins
37933
37934 6.56.9 MIPS DSP Built-in Functions
37935 ----------------------------------
37936
37937 The MIPS DSP Application-Specific Extension (ASE) includes new
37938 instructions that are designed to improve the performance of DSP and
37939 media applications.  It provides instructions that operate on packed
37940 8-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.
37941
37942  GCC supports MIPS DSP operations using both the generic vector
37943 extensions (*note Vector Extensions::) and a collection of
37944 MIPS-specific built-in functions.  Both kinds of support are enabled by
37945 the `-mdsp' command-line option.
37946
37947  Revision 2 of the ASE was introduced in the second half of 2006.  This
37948 revision adds extra instructions to the original ASE, but is otherwise
37949 backwards-compatible with it.  You can select revision 2 using the
37950 command-line option `-mdspr2'; this option implies `-mdsp'.
37951
37952  The SCOUNT and POS bits of the DSP control register are global.  The
37953 WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and
37954 POS bits.  During optimization, the compiler does not delete these
37955 instructions and it does not delete calls to functions containing these
37956 instructions.
37957
37958  At present, GCC only provides support for operations on 32-bit
37959 vectors.  The vector type associated with 8-bit integer data is usually
37960 called `v4i8', the vector type associated with Q7 is usually called
37961 `v4q7', the vector type associated with 16-bit integer data is usually
37962 called `v2i16', and the vector type associated with Q15 is usually
37963 called `v2q15'.  They can be defined in C as follows:
37964
37965      typedef signed char v4i8 __attribute__ ((vector_size(4)));
37966      typedef signed char v4q7 __attribute__ ((vector_size(4)));
37967      typedef short v2i16 __attribute__ ((vector_size(4)));
37968      typedef short v2q15 __attribute__ ((vector_size(4)));
37969
37970  `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same
37971 way as aggregates.  For example:
37972
37973      v4i8 a = {1, 2, 3, 4};
37974      v4i8 b;
37975      b = (v4i8) {5, 6, 7, 8};
37976
37977      v2q15 c = {0x0fcb, 0x3a75};
37978      v2q15 d;
37979      d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
37980
37981  _Note:_ The CPU's endianness determines the order in which values are
37982 packed.  On little-endian targets, the first value is the least
37983 significant and the last value is the most significant.  The opposite
37984 order applies to big-endian targets.  For example, the code above sets
37985 the lowest byte of `a' to `1' on little-endian targets and `4' on
37986 big-endian targets.
37987
37988  _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
37989 representation.  As shown in this example, the integer representation
37990 of a Q7 value can be obtained by multiplying the fractional value by
37991 `0x1.0p7'.  The equivalent for Q15 values is to multiply by `0x1.0p15'.
37992 The equivalent for Q31 values is to multiply by `0x1.0p31'.
37993
37994  The table below lists the `v4i8' and `v2q15' operations for which
37995 hardware support exists.  `a' and `b' are `v4i8' values, and `c' and
37996 `d' are `v2q15' values.
37997
37998 C code                               MIPS instruction
37999 `a + b'                              `addu.qb'
38000 `c + d'                              `addq.ph'
38001 `a - b'                              `subu.qb'
38002 `c - d'                              `subq.ph'
38003
38004  The table below lists the `v2i16' operation for which hardware support
38005 exists for the DSP ASE REV 2.  `e' and `f' are `v2i16' values.
38006
38007 C code                               MIPS instruction
38008 `e * f'                              `mul.ph'
38009
38010  It is easier to describe the DSP built-in functions if we first define
38011 the following types:
38012
38013      typedef int q31;
38014      typedef int i32;
38015      typedef unsigned int ui32;
38016      typedef long long a64;
38017
38018  `q31' and `i32' are actually the same as `int', but we use `q31' to
38019 indicate a Q31 fractional value and `i32' to indicate a 32-bit integer
38020 value.  Similarly, `a64' is the same as `long long', but we use `a64'
38021 to indicate values that are placed in one of the four DSP accumulators
38022 (`$ac0', `$ac1', `$ac2' or `$ac3').
38023
38024  Also, some built-in functions prefer or require immediate numbers as
38025 parameters, because the corresponding DSP instructions accept both
38026 immediate numbers and register operands, or accept immediate numbers
38027 only.  The immediate parameters are listed as follows.
38028
38029      imm0_3: 0 to 3.
38030      imm0_7: 0 to 7.
38031      imm0_15: 0 to 15.
38032      imm0_31: 0 to 31.
38033      imm0_63: 0 to 63.
38034      imm0_255: 0 to 255.
38035      imm_n32_31: -32 to 31.
38036      imm_n512_511: -512 to 511.
38037
38038  The following built-in functions map directly to a particular MIPS DSP
38039 instruction.  Please refer to the architecture specification for
38040 details on what each instruction does.
38041
38042      v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
38043      v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
38044      q31 __builtin_mips_addq_s_w (q31, q31)
38045      v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
38046      v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
38047      v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
38048      v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
38049      q31 __builtin_mips_subq_s_w (q31, q31)
38050      v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
38051      v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
38052      i32 __builtin_mips_addsc (i32, i32)
38053      i32 __builtin_mips_addwc (i32, i32)
38054      i32 __builtin_mips_modsub (i32, i32)
38055      i32 __builtin_mips_raddu_w_qb (v4i8)
38056      v2q15 __builtin_mips_absq_s_ph (v2q15)
38057      q31 __builtin_mips_absq_s_w (q31)
38058      v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
38059      v2q15 __builtin_mips_precrq_ph_w (q31, q31)
38060      v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
38061      v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
38062      q31 __builtin_mips_preceq_w_phl (v2q15)
38063      q31 __builtin_mips_preceq_w_phr (v2q15)
38064      v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
38065      v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
38066      v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
38067      v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
38068      v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
38069      v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
38070      v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
38071      v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
38072      v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
38073      v4i8 __builtin_mips_shll_qb (v4i8, i32)
38074      v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
38075      v2q15 __builtin_mips_shll_ph (v2q15, i32)
38076      v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
38077      v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
38078      q31 __builtin_mips_shll_s_w (q31, imm0_31)
38079      q31 __builtin_mips_shll_s_w (q31, i32)
38080      v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
38081      v4i8 __builtin_mips_shrl_qb (v4i8, i32)
38082      v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
38083      v2q15 __builtin_mips_shra_ph (v2q15, i32)
38084      v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
38085      v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
38086      q31 __builtin_mips_shra_r_w (q31, imm0_31)
38087      q31 __builtin_mips_shra_r_w (q31, i32)
38088      v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
38089      v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
38090      v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
38091      q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
38092      q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
38093      a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
38094      a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
38095      a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
38096      a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
38097      a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
38098      a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
38099      a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
38100      a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
38101      a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
38102      a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
38103      a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
38104      a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
38105      a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
38106      i32 __builtin_mips_bitrev (i32)
38107      i32 __builtin_mips_insv (i32, i32)
38108      v4i8 __builtin_mips_repl_qb (imm0_255)
38109      v4i8 __builtin_mips_repl_qb (i32)
38110      v2q15 __builtin_mips_repl_ph (imm_n512_511)
38111      v2q15 __builtin_mips_repl_ph (i32)
38112      void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
38113      void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
38114      void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
38115      i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
38116      i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
38117      i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
38118      void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
38119      void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
38120      void __builtin_mips_cmp_le_ph (v2q15, v2q15)
38121      v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
38122      v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
38123      v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
38124      i32 __builtin_mips_extr_w (a64, imm0_31)
38125      i32 __builtin_mips_extr_w (a64, i32)
38126      i32 __builtin_mips_extr_r_w (a64, imm0_31)
38127      i32 __builtin_mips_extr_s_h (a64, i32)
38128      i32 __builtin_mips_extr_rs_w (a64, imm0_31)
38129      i32 __builtin_mips_extr_rs_w (a64, i32)
38130      i32 __builtin_mips_extr_s_h (a64, imm0_31)
38131      i32 __builtin_mips_extr_r_w (a64, i32)
38132      i32 __builtin_mips_extp (a64, imm0_31)
38133      i32 __builtin_mips_extp (a64, i32)
38134      i32 __builtin_mips_extpdp (a64, imm0_31)
38135      i32 __builtin_mips_extpdp (a64, i32)
38136      a64 __builtin_mips_shilo (a64, imm_n32_31)
38137      a64 __builtin_mips_shilo (a64, i32)
38138      a64 __builtin_mips_mthlip (a64, i32)
38139      void __builtin_mips_wrdsp (i32, imm0_63)
38140      i32 __builtin_mips_rddsp (imm0_63)
38141      i32 __builtin_mips_lbux (void *, i32)
38142      i32 __builtin_mips_lhx (void *, i32)
38143      i32 __builtin_mips_lwx (void *, i32)
38144      a64 __builtin_mips_ldx (void *, i32) [MIPS64 only]
38145      i32 __builtin_mips_bposge32 (void)
38146      a64 __builtin_mips_madd (a64, i32, i32);
38147      a64 __builtin_mips_maddu (a64, ui32, ui32);
38148      a64 __builtin_mips_msub (a64, i32, i32);
38149      a64 __builtin_mips_msubu (a64, ui32, ui32);
38150      a64 __builtin_mips_mult (i32, i32);
38151      a64 __builtin_mips_multu (ui32, ui32);
38152
38153  The following built-in functions map directly to a particular MIPS DSP
38154 REV 2 instruction.  Please refer to the architecture specification for
38155 details on what each instruction does.
38156
38157      v4q7 __builtin_mips_absq_s_qb (v4q7);
38158      v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
38159      v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
38160      v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
38161      v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
38162      i32 __builtin_mips_append (i32, i32, imm0_31);
38163      i32 __builtin_mips_balign (i32, i32, imm0_3);
38164      i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
38165      i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
38166      i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
38167      a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
38168      a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
38169      v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
38170      v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
38171      q31 __builtin_mips_mulq_rs_w (q31, q31);
38172      v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
38173      q31 __builtin_mips_mulq_s_w (q31, q31);
38174      a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
38175      v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
38176      v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
38177      v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
38178      i32 __builtin_mips_prepend (i32, i32, imm0_31);
38179      v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
38180      v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
38181      v4i8 __builtin_mips_shra_qb (v4i8, i32);
38182      v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
38183      v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
38184      v2i16 __builtin_mips_shrl_ph (v2i16, i32);
38185      v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
38186      v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
38187      v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
38188      v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
38189      v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
38190      v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
38191      q31 __builtin_mips_addqh_w (q31, q31);
38192      q31 __builtin_mips_addqh_r_w (q31, q31);
38193      v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
38194      v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
38195      q31 __builtin_mips_subqh_w (q31, q31);
38196      q31 __builtin_mips_subqh_r_w (q31, q31);
38197      a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
38198      a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
38199      a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
38200      a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
38201      a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
38202      a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);
38203
38204 \1f
38205 File: gcc.info,  Node: MIPS Paired-Single Support,  Next: MIPS Loongson Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins
38206
38207 6.56.10 MIPS Paired-Single Support
38208 ----------------------------------
38209
38210 The MIPS64 architecture includes a number of instructions that operate
38211 on pairs of single-precision floating-point values.  Each pair is
38212 packed into a 64-bit floating-point register, with one element being
38213 designated the "upper half" and the other being designated the "lower
38214 half".
38215
38216  GCC supports paired-single operations using both the generic vector
38217 extensions (*note Vector Extensions::) and a collection of
38218 MIPS-specific built-in functions.  Both kinds of support are enabled by
38219 the `-mpaired-single' command-line option.
38220
38221  The vector type associated with paired-single values is usually called
38222 `v2sf'.  It can be defined in C as follows:
38223
38224      typedef float v2sf __attribute__ ((vector_size (8)));
38225
38226  `v2sf' values are initialized in the same way as aggregates.  For
38227 example:
38228
38229      v2sf a = {1.5, 9.1};
38230      v2sf b;
38231      float e, f;
38232      b = (v2sf) {e, f};
38233
38234  _Note:_ The CPU's endianness determines which value is stored in the
38235 upper half of a register and which value is stored in the lower half.
38236 On little-endian targets, the first value is the lower one and the
38237 second value is the upper one.  The opposite order applies to
38238 big-endian targets.  For example, the code above sets the lower half of
38239 `a' to `1.5' on little-endian targets and `9.1' on big-endian targets.
38240
38241 \1f
38242 File: gcc.info,  Node: MIPS Loongson Built-in Functions,  Next: Other MIPS Built-in Functions,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
38243
38244 6.56.11 MIPS Loongson Built-in Functions
38245 ----------------------------------------
38246
38247 GCC provides intrinsics to access the SIMD instructions provided by the
38248 ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
38249 available after inclusion of the `loongson.h' header file, operate on
38250 the following 64-bit vector types:
38251
38252    * `uint8x8_t', a vector of eight unsigned 8-bit integers;
38253
38254    * `uint16x4_t', a vector of four unsigned 16-bit integers;
38255
38256    * `uint32x2_t', a vector of two unsigned 32-bit integers;
38257
38258    * `int8x8_t', a vector of eight signed 8-bit integers;
38259
38260    * `int16x4_t', a vector of four signed 16-bit integers;
38261
38262    * `int32x2_t', a vector of two signed 32-bit integers.
38263
38264  The intrinsics provided are listed below; each is named after the
38265 machine instruction to which it corresponds, with suffixes added as
38266 appropriate to distinguish intrinsics that expand to the same machine
38267 instruction yet have different argument types.  Refer to the
38268 architecture documentation for a description of the functionality of
38269 each instruction.
38270
38271      int16x4_t packsswh (int32x2_t s, int32x2_t t);
38272      int8x8_t packsshb (int16x4_t s, int16x4_t t);
38273      uint8x8_t packushb (uint16x4_t s, uint16x4_t t);
38274      uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t);
38275      uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t);
38276      uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t);
38277      int32x2_t paddw_s (int32x2_t s, int32x2_t t);
38278      int16x4_t paddh_s (int16x4_t s, int16x4_t t);
38279      int8x8_t paddb_s (int8x8_t s, int8x8_t t);
38280      uint64_t paddd_u (uint64_t s, uint64_t t);
38281      int64_t paddd_s (int64_t s, int64_t t);
38282      int16x4_t paddsh (int16x4_t s, int16x4_t t);
38283      int8x8_t paddsb (int8x8_t s, int8x8_t t);
38284      uint16x4_t paddush (uint16x4_t s, uint16x4_t t);
38285      uint8x8_t paddusb (uint8x8_t s, uint8x8_t t);
38286      uint64_t pandn_ud (uint64_t s, uint64_t t);
38287      uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t);
38288      uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t);
38289      uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t);
38290      int64_t pandn_sd (int64_t s, int64_t t);
38291      int32x2_t pandn_sw (int32x2_t s, int32x2_t t);
38292      int16x4_t pandn_sh (int16x4_t s, int16x4_t t);
38293      int8x8_t pandn_sb (int8x8_t s, int8x8_t t);
38294      uint16x4_t pavgh (uint16x4_t s, uint16x4_t t);
38295      uint8x8_t pavgb (uint8x8_t s, uint8x8_t t);
38296      uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t);
38297      uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t);
38298      uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t);
38299      int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t);
38300      int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t);
38301      int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t);
38302      uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t);
38303      uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t);
38304      uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t);
38305      int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t);
38306      int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t);
38307      int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t);
38308      uint16x4_t pextrh_u (uint16x4_t s, int field);
38309      int16x4_t pextrh_s (int16x4_t s, int field);
38310      uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t);
38311      uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t);
38312      uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t);
38313      uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t);
38314      int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t);
38315      int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t);
38316      int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t);
38317      int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t);
38318      int32x2_t pmaddhw (int16x4_t s, int16x4_t t);
38319      int16x4_t pmaxsh (int16x4_t s, int16x4_t t);
38320      uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t);
38321      int16x4_t pminsh (int16x4_t s, int16x4_t t);
38322      uint8x8_t pminub (uint8x8_t s, uint8x8_t t);
38323      uint8x8_t pmovmskb_u (uint8x8_t s);
38324      int8x8_t pmovmskb_s (int8x8_t s);
38325      uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t);
38326      int16x4_t pmulhh (int16x4_t s, int16x4_t t);
38327      int16x4_t pmullh (int16x4_t s, int16x4_t t);
38328      int64_t pmuluw (uint32x2_t s, uint32x2_t t);
38329      uint8x8_t pasubub (uint8x8_t s, uint8x8_t t);
38330      uint16x4_t biadd (uint8x8_t s);
38331      uint16x4_t psadbh (uint8x8_t s, uint8x8_t t);
38332      uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order);
38333      int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order);
38334      uint16x4_t psllh_u (uint16x4_t s, uint8_t amount);
38335      int16x4_t psllh_s (int16x4_t s, uint8_t amount);
38336      uint32x2_t psllw_u (uint32x2_t s, uint8_t amount);
38337      int32x2_t psllw_s (int32x2_t s, uint8_t amount);
38338      uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount);
38339      int16x4_t psrlh_s (int16x4_t s, uint8_t amount);
38340      uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount);
38341      int32x2_t psrlw_s (int32x2_t s, uint8_t amount);
38342      uint16x4_t psrah_u (uint16x4_t s, uint8_t amount);
38343      int16x4_t psrah_s (int16x4_t s, uint8_t amount);
38344      uint32x2_t psraw_u (uint32x2_t s, uint8_t amount);
38345      int32x2_t psraw_s (int32x2_t s, uint8_t amount);
38346      uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t);
38347      uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t);
38348      uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t);
38349      int32x2_t psubw_s (int32x2_t s, int32x2_t t);
38350      int16x4_t psubh_s (int16x4_t s, int16x4_t t);
38351      int8x8_t psubb_s (int8x8_t s, int8x8_t t);
38352      uint64_t psubd_u (uint64_t s, uint64_t t);
38353      int64_t psubd_s (int64_t s, int64_t t);
38354      int16x4_t psubsh (int16x4_t s, int16x4_t t);
38355      int8x8_t psubsb (int8x8_t s, int8x8_t t);
38356      uint16x4_t psubush (uint16x4_t s, uint16x4_t t);
38357      uint8x8_t psubusb (uint8x8_t s, uint8x8_t t);
38358      uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t);
38359      uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t);
38360      uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t);
38361      int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t);
38362      int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t);
38363      int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t);
38364      uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t);
38365      uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t);
38366      uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t);
38367      int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t);
38368      int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t);
38369      int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t);
38370
38371 * Menu:
38372
38373 * Paired-Single Arithmetic::
38374 * Paired-Single Built-in Functions::
38375 * MIPS-3D Built-in Functions::
38376
38377 \1f
38378 File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
38379
38380 6.56.11.1 Paired-Single Arithmetic
38381 ..................................
38382
38383 The table below lists the `v2sf' operations for which hardware support
38384 exists.  `a', `b' and `c' are `v2sf' values and `x' is an integral
38385 value.
38386
38387 C code                               MIPS instruction
38388 `a + b'                              `add.ps'
38389 `a - b'                              `sub.ps'
38390 `-a'                                 `neg.ps'
38391 `a * b'                              `mul.ps'
38392 `a * b + c'                          `madd.ps'
38393 `a * b - c'                          `msub.ps'
38394 `-(a * b + c)'                       `nmadd.ps'
38395 `-(a * b - c)'                       `nmsub.ps'
38396 `x ? a : b'                          `movn.ps'/`movz.ps'
38397
38398  Note that the multiply-accumulate instructions can be disabled using
38399 the command-line option `-mno-fused-madd'.
38400
38401 \1f
38402 File: gcc.info,  Node: Paired-Single Built-in Functions,  Next: MIPS-3D Built-in Functions,  Prev: Paired-Single Arithmetic,  Up: MIPS Loongson Built-in Functions
38403
38404 6.56.11.2 Paired-Single Built-in Functions
38405 ..........................................
38406
38407 The following paired-single functions map directly to a particular MIPS
38408 instruction.  Please refer to the architecture specification for
38409 details on what each instruction does.
38410
38411 `v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
38412      Pair lower lower (`pll.ps').
38413
38414 `v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
38415      Pair upper lower (`pul.ps').
38416
38417 `v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
38418      Pair lower upper (`plu.ps').
38419
38420 `v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
38421      Pair upper upper (`puu.ps').
38422
38423 `v2sf __builtin_mips_cvt_ps_s (float, float)'
38424      Convert pair to paired single (`cvt.ps.s').
38425
38426 `float __builtin_mips_cvt_s_pl (v2sf)'
38427      Convert pair lower to single (`cvt.s.pl').
38428
38429 `float __builtin_mips_cvt_s_pu (v2sf)'
38430      Convert pair upper to single (`cvt.s.pu').
38431
38432 `v2sf __builtin_mips_abs_ps (v2sf)'
38433      Absolute value (`abs.ps').
38434
38435 `v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
38436      Align variable (`alnv.ps').
38437
38438      _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
38439      otherwise the result is unpredictable.  Please read the
38440      instruction description for details.
38441
38442  The following multi-instruction functions are also available.  In each
38443 case, COND can be any of the 16 floating-point conditions: `f', `un',
38444 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
38445 `lt', `nge', `le' or `ngt'.
38446
38447 `v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
38448 `v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
38449      Conditional move based on floating-point comparison (`c.COND.ps',
38450      `movt.ps'/`movf.ps').
38451
38452      The `movt' functions return the value X computed by:
38453
38454           c.COND.ps CC,A,B
38455           mov.ps X,C
38456           movt.ps X,D,CC
38457
38458      The `movf' functions are similar but use `movf.ps' instead of
38459      `movt.ps'.
38460
38461 `int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
38462 `int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
38463      Comparison of two paired-single values (`c.COND.ps',
38464      `bc1t'/`bc1f').
38465
38466      These functions compare A and B using `c.COND.ps' and return
38467      either the upper or lower half of the result.  For example:
38468
38469           v2sf a, b;
38470           if (__builtin_mips_upper_c_eq_ps (a, b))
38471             upper_halves_are_equal ();
38472           else
38473             upper_halves_are_unequal ();
38474
38475           if (__builtin_mips_lower_c_eq_ps (a, b))
38476             lower_halves_are_equal ();
38477           else
38478             lower_halves_are_unequal ();
38479
38480 \1f
38481 File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
38482
38483 6.56.11.3 MIPS-3D Built-in Functions
38484 ....................................
38485
38486 The MIPS-3D Application-Specific Extension (ASE) includes additional
38487 paired-single instructions that are designed to improve the performance
38488 of 3D graphics operations.  Support for these instructions is controlled
38489 by the `-mips3d' command-line option.
38490
38491  The functions listed below map directly to a particular MIPS-3D
38492 instruction.  Please refer to the architecture specification for more
38493 details on what each instruction does.
38494
38495 `v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
38496      Reduction add (`addr.ps').
38497
38498 `v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
38499      Reduction multiply (`mulr.ps').
38500
38501 `v2sf __builtin_mips_cvt_pw_ps (v2sf)'
38502      Convert paired single to paired word (`cvt.pw.ps').
38503
38504 `v2sf __builtin_mips_cvt_ps_pw (v2sf)'
38505      Convert paired word to paired single (`cvt.ps.pw').
38506
38507 `float __builtin_mips_recip1_s (float)'
38508 `double __builtin_mips_recip1_d (double)'
38509 `v2sf __builtin_mips_recip1_ps (v2sf)'
38510      Reduced-precision reciprocal (sequence step 1) (`recip1.FMT').
38511
38512 `float __builtin_mips_recip2_s (float, float)'
38513 `double __builtin_mips_recip2_d (double, double)'
38514 `v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
38515      Reduced-precision reciprocal (sequence step 2) (`recip2.FMT').
38516
38517 `float __builtin_mips_rsqrt1_s (float)'
38518 `double __builtin_mips_rsqrt1_d (double)'
38519 `v2sf __builtin_mips_rsqrt1_ps (v2sf)'
38520      Reduced-precision reciprocal square root (sequence step 1)
38521      (`rsqrt1.FMT').
38522
38523 `float __builtin_mips_rsqrt2_s (float, float)'
38524 `double __builtin_mips_rsqrt2_d (double, double)'
38525 `v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
38526      Reduced-precision reciprocal square root (sequence step 2)
38527      (`rsqrt2.FMT').
38528
38529  The following multi-instruction functions are also available.  In each
38530 case, COND can be any of the 16 floating-point conditions: `f', `un',
38531 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
38532 `lt', `nge', `le' or `ngt'.
38533
38534 `int __builtin_mips_cabs_COND_s (float A, float B)'
38535 `int __builtin_mips_cabs_COND_d (double A, double B)'
38536      Absolute comparison of two scalar values (`cabs.COND.FMT',
38537      `bc1t'/`bc1f').
38538
38539      These functions compare A and B using `cabs.COND.s' or
38540      `cabs.COND.d' and return the result as a boolean value.  For
38541      example:
38542
38543           float a, b;
38544           if (__builtin_mips_cabs_eq_s (a, b))
38545             true ();
38546           else
38547             false ();
38548
38549 `int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
38550 `int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
38551      Absolute comparison of two paired-single values (`cabs.COND.ps',
38552      `bc1t'/`bc1f').
38553
38554      These functions compare A and B using `cabs.COND.ps' and return
38555      either the upper or lower half of the result.  For example:
38556
38557           v2sf a, b;
38558           if (__builtin_mips_upper_cabs_eq_ps (a, b))
38559             upper_halves_are_equal ();
38560           else
38561             upper_halves_are_unequal ();
38562
38563           if (__builtin_mips_lower_cabs_eq_ps (a, b))
38564             lower_halves_are_equal ();
38565           else
38566             lower_halves_are_unequal ();
38567
38568 `v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
38569 `v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
38570      Conditional move based on absolute comparison (`cabs.COND.ps',
38571      `movt.ps'/`movf.ps').
38572
38573      The `movt' functions return the value X computed by:
38574
38575           cabs.COND.ps CC,A,B
38576           mov.ps X,C
38577           movt.ps X,D,CC
38578
38579      The `movf' functions are similar but use `movf.ps' instead of
38580      `movt.ps'.
38581
38582 `int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
38583 `int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
38584 `int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
38585 `int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
38586      Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps',
38587      `bc1any2t'/`bc1any2f').
38588
38589      These functions compare A and B using `c.COND.ps' or
38590      `cabs.COND.ps'.  The `any' forms return true if either result is
38591      true and the `all' forms return true if both results are true.
38592      For example:
38593
38594           v2sf a, b;
38595           if (__builtin_mips_any_c_eq_ps (a, b))
38596             one_is_true ();
38597           else
38598             both_are_false ();
38599
38600           if (__builtin_mips_all_c_eq_ps (a, b))
38601             both_are_true ();
38602           else
38603             one_is_false ();
38604
38605 `int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
38606 `int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
38607 `int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
38608 `int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
38609      Comparison of four paired-single values
38610      (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f').
38611
38612      These functions use `c.COND.ps' or `cabs.COND.ps' to compare A
38613      with B and to compare C with D.  The `any' forms return true if
38614      any of the four results are true and the `all' forms return true
38615      if all four results are true.  For example:
38616
38617           v2sf a, b, c, d;
38618           if (__builtin_mips_any_c_eq_4s (a, b, c, d))
38619             some_are_true ();
38620           else
38621             all_are_false ();
38622
38623           if (__builtin_mips_all_c_eq_4s (a, b, c, d))
38624             all_are_true ();
38625           else
38626             some_are_false ();
38627
38628 \1f
38629 File: gcc.info,  Node: Other MIPS Built-in Functions,  Next: picoChip Built-in Functions,  Prev: MIPS Loongson Built-in Functions,  Up: Target Builtins
38630
38631 6.56.12 Other MIPS Built-in Functions
38632 -------------------------------------
38633
38634 GCC provides other MIPS-specific built-in functions:
38635
38636 `void __builtin_mips_cache (int OP, const volatile void *ADDR)'
38637      Insert a `cache' instruction with operands OP and ADDR.  GCC
38638      defines the preprocessor macro `___GCC_HAVE_BUILTIN_MIPS_CACHE'
38639      when this function is available.
38640
38641 \1f
38642 File: gcc.info,  Node: picoChip Built-in Functions,  Next: PowerPC Built-in Functions,  Prev: Other MIPS Built-in Functions,  Up: Target Builtins
38643
38644 6.56.13 picoChip Built-in Functions
38645 -----------------------------------
38646
38647 GCC provides an interface to selected machine instructions from the
38648 picoChip instruction set.
38649
38650 `int __builtin_sbc (int VALUE)'
38651      Sign bit count.  Return the number of consecutive bits in VALUE
38652      that have the same value as the sign bit.  The result is the
38653      number of leading sign bits minus one, giving the number of
38654      redundant sign bits in VALUE.
38655
38656 `int __builtin_byteswap (int VALUE)'
38657      Byte swap.  Return the result of swapping the upper and lower
38658      bytes of VALUE.
38659
38660 `int __builtin_brev (int VALUE)'
38661      Bit reversal.  Return the result of reversing the bits in VALUE.
38662      Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so
38663      on.
38664
38665 `int __builtin_adds (int X, int Y)'
38666      Saturating addition.  Return the result of adding X and Y, storing
38667      the value 32767 if the result overflows.
38668
38669 `int __builtin_subs (int X, int Y)'
38670      Saturating subtraction.  Return the result of subtracting Y from
38671      X, storing the value -32768 if the result overflows.
38672
38673 `void __builtin_halt (void)'
38674      Halt.  The processor stops execution.  This built-in is useful for
38675      implementing assertions.
38676
38677
38678 \1f
38679 File: gcc.info,  Node: PowerPC Built-in Functions,  Next: PowerPC AltiVec/VSX Built-in Functions,  Prev: picoChip Built-in Functions,  Up: Target Builtins
38680
38681 6.56.14 PowerPC Built-in Functions
38682 ----------------------------------
38683
38684 These built-in functions are available for the PowerPC family of
38685 processors:
38686      float __builtin_recipdivf (float, float);
38687      float __builtin_rsqrtf (float);
38688      double __builtin_recipdiv (double, double);
38689      double __builtin_rsqrt (double);
38690      long __builtin_bpermd (long, long);
38691      uint64_t __builtin_ppc_get_timebase ();
38692      unsigned long __builtin_ppc_mftb ();
38693
38694  The `vec_rsqrt', `__builtin_rsqrt', and `__builtin_rsqrtf' functions
38695 generate multiple instructions to implement the reciprocal sqrt
38696 functionality using reciprocal sqrt estimate instructions.
38697
38698  The `__builtin_recipdiv', and `__builtin_recipdivf' functions generate
38699 multiple instructions to implement division using the reciprocal
38700 estimate instructions.
38701
38702  The `__builtin_ppc_get_timebase' and `__builtin_ppc_mftb' functions
38703 generate instructions to read the Time Base Register.  The
38704 `__builtin_ppc_get_timebase' function may generate multiple
38705 instructions and always returns the 64 bits of the Time Base Register.
38706 The `__builtin_ppc_mftb' function always generates one instruction and
38707 returns the Time Base Register value as an unsigned long, throwing away
38708 the most significant word on 32-bit environments.
38709
38710 \1f
38711 File: gcc.info,  Node: PowerPC AltiVec/VSX Built-in Functions,  Next: RX Built-in Functions,  Prev: PowerPC Built-in Functions,  Up: Target Builtins
38712
38713 6.56.15 PowerPC AltiVec Built-in Functions
38714 ------------------------------------------
38715
38716 GCC provides an interface for the PowerPC family of processors to access
38717 the AltiVec operations described in Motorola's AltiVec Programming
38718 Interface Manual.  The interface is made available by including
38719 `<altivec.h>' and using `-maltivec' and `-mabi=altivec'.  The interface
38720 supports the following vector types.
38721
38722      vector unsigned char
38723      vector signed char
38724      vector bool char
38725
38726      vector unsigned short
38727      vector signed short
38728      vector bool short
38729      vector pixel
38730
38731      vector unsigned int
38732      vector signed int
38733      vector bool int
38734      vector float
38735
38736  If `-mvsx' is used the following additional vector types are
38737 implemented.
38738
38739      vector unsigned long
38740      vector signed long
38741      vector double
38742
38743  The long types are only implemented for 64-bit code generation, and
38744 the long type is only used in the floating point/integer conversion
38745 instructions.
38746
38747  GCC's implementation of the high-level language interface available
38748 from C and C++ code differs from Motorola's documentation in several
38749 ways.
38750
38751    * A vector constant is a list of constant expressions within curly
38752      braces.
38753
38754    * A vector initializer requires no cast if the vector constant is of
38755      the same type as the variable it is initializing.
38756
38757    * If `signed' or `unsigned' is omitted, the signedness of the vector
38758      type is the default signedness of the base type.  The default
38759      varies depending on the operating system, so a portable program
38760      should always specify the signedness.
38761
38762    * Compiling with `-maltivec' adds keywords `__vector', `vector',
38763      `__pixel', `pixel', `__bool' and `bool'.  When compiling ISO C,
38764      the context-sensitive substitution of the keywords `vector',
38765      `pixel' and `bool' is disabled.  To use them, you must include
38766      `<altivec.h>' instead.
38767
38768    * GCC allows using a `typedef' name as the type specifier for a
38769      vector type.
38770
38771    * For C, overloaded functions are implemented with macros so the
38772      following does not work:
38773
38774             vec_add ((vector signed int){1, 2, 3, 4}, foo);
38775
38776      Since `vec_add' is a macro, the vector constant in the example is
38777      treated as four separate arguments.  Wrap the entire argument in
38778      parentheses for this to work.
38779
38780  _Note:_ Only the `<altivec.h>' interface is supported.  Internally,
38781 GCC uses built-in functions to achieve the functionality in the
38782 aforementioned header file, but they are not supported and are subject
38783 to change without notice.
38784
38785  The following interfaces are supported for the generic and specific
38786 AltiVec operations and the AltiVec predicates.  In cases where there is
38787 a direct mapping between generic and specific operations, only the
38788 generic names are shown here, although the specific operations can also
38789 be used.
38790
38791  Arguments that are documented as `const int' require literal integral
38792 values within the range required for that operation.
38793
38794      vector signed char vec_abs (vector signed char);
38795      vector signed short vec_abs (vector signed short);
38796      vector signed int vec_abs (vector signed int);
38797      vector float vec_abs (vector float);
38798
38799      vector signed char vec_abss (vector signed char);
38800      vector signed short vec_abss (vector signed short);
38801      vector signed int vec_abss (vector signed int);
38802
38803      vector signed char vec_add (vector bool char, vector signed char);
38804      vector signed char vec_add (vector signed char, vector bool char);
38805      vector signed char vec_add (vector signed char, vector signed char);
38806      vector unsigned char vec_add (vector bool char, vector unsigned char);
38807      vector unsigned char vec_add (vector unsigned char, vector bool char);
38808      vector unsigned char vec_add (vector unsigned char,
38809                                    vector unsigned char);
38810      vector signed short vec_add (vector bool short, vector signed short);
38811      vector signed short vec_add (vector signed short, vector bool short);
38812      vector signed short vec_add (vector signed short, vector signed short);
38813      vector unsigned short vec_add (vector bool short,
38814                                     vector unsigned short);
38815      vector unsigned short vec_add (vector unsigned short,
38816                                     vector bool short);
38817      vector unsigned short vec_add (vector unsigned short,
38818                                     vector unsigned short);
38819      vector signed int vec_add (vector bool int, vector signed int);
38820      vector signed int vec_add (vector signed int, vector bool int);
38821      vector signed int vec_add (vector signed int, vector signed int);
38822      vector unsigned int vec_add (vector bool int, vector unsigned int);
38823      vector unsigned int vec_add (vector unsigned int, vector bool int);
38824      vector unsigned int vec_add (vector unsigned int, vector unsigned int);
38825      vector float vec_add (vector float, vector float);
38826
38827      vector float vec_vaddfp (vector float, vector float);
38828
38829      vector signed int vec_vadduwm (vector bool int, vector signed int);
38830      vector signed int vec_vadduwm (vector signed int, vector bool int);
38831      vector signed int vec_vadduwm (vector signed int, vector signed int);
38832      vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
38833      vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
38834      vector unsigned int vec_vadduwm (vector unsigned int,
38835                                       vector unsigned int);
38836
38837      vector signed short vec_vadduhm (vector bool short,
38838                                       vector signed short);
38839      vector signed short vec_vadduhm (vector signed short,
38840                                       vector bool short);
38841      vector signed short vec_vadduhm (vector signed short,
38842                                       vector signed short);
38843      vector unsigned short vec_vadduhm (vector bool short,
38844                                         vector unsigned short);
38845      vector unsigned short vec_vadduhm (vector unsigned short,
38846                                         vector bool short);
38847      vector unsigned short vec_vadduhm (vector unsigned short,
38848                                         vector unsigned short);
38849
38850      vector signed char vec_vaddubm (vector bool char, vector signed char);
38851      vector signed char vec_vaddubm (vector signed char, vector bool char);
38852      vector signed char vec_vaddubm (vector signed char, vector signed char);
38853      vector unsigned char vec_vaddubm (vector bool char,
38854                                        vector unsigned char);
38855      vector unsigned char vec_vaddubm (vector unsigned char,
38856                                        vector bool char);
38857      vector unsigned char vec_vaddubm (vector unsigned char,
38858                                        vector unsigned char);
38859
38860      vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
38861
38862      vector unsigned char vec_adds (vector bool char, vector unsigned char);
38863      vector unsigned char vec_adds (vector unsigned char, vector bool char);
38864      vector unsigned char vec_adds (vector unsigned char,
38865                                     vector unsigned char);
38866      vector signed char vec_adds (vector bool char, vector signed char);
38867      vector signed char vec_adds (vector signed char, vector bool char);
38868      vector signed char vec_adds (vector signed char, vector signed char);
38869      vector unsigned short vec_adds (vector bool short,
38870                                      vector unsigned short);
38871      vector unsigned short vec_adds (vector unsigned short,
38872                                      vector bool short);
38873      vector unsigned short vec_adds (vector unsigned short,
38874                                      vector unsigned short);
38875      vector signed short vec_adds (vector bool short, vector signed short);
38876      vector signed short vec_adds (vector signed short, vector bool short);
38877      vector signed short vec_adds (vector signed short, vector signed short);
38878      vector unsigned int vec_adds (vector bool int, vector unsigned int);
38879      vector unsigned int vec_adds (vector unsigned int, vector bool int);
38880      vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
38881      vector signed int vec_adds (vector bool int, vector signed int);
38882      vector signed int vec_adds (vector signed int, vector bool int);
38883      vector signed int vec_adds (vector signed int, vector signed int);
38884
38885      vector signed int vec_vaddsws (vector bool int, vector signed int);
38886      vector signed int vec_vaddsws (vector signed int, vector bool int);
38887      vector signed int vec_vaddsws (vector signed int, vector signed int);
38888
38889      vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
38890      vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
38891      vector unsigned int vec_vadduws (vector unsigned int,
38892                                       vector unsigned int);
38893
38894      vector signed short vec_vaddshs (vector bool short,
38895                                       vector signed short);
38896      vector signed short vec_vaddshs (vector signed short,
38897                                       vector bool short);
38898      vector signed short vec_vaddshs (vector signed short,
38899                                       vector signed short);
38900
38901      vector unsigned short vec_vadduhs (vector bool short,
38902                                         vector unsigned short);
38903      vector unsigned short vec_vadduhs (vector unsigned short,
38904                                         vector bool short);
38905      vector unsigned short vec_vadduhs (vector unsigned short,
38906                                         vector unsigned short);
38907
38908      vector signed char vec_vaddsbs (vector bool char, vector signed char);
38909      vector signed char vec_vaddsbs (vector signed char, vector bool char);
38910      vector signed char vec_vaddsbs (vector signed char, vector signed char);
38911
38912      vector unsigned char vec_vaddubs (vector bool char,
38913                                        vector unsigned char);
38914      vector unsigned char vec_vaddubs (vector unsigned char,
38915                                        vector bool char);
38916      vector unsigned char vec_vaddubs (vector unsigned char,
38917                                        vector unsigned char);
38918
38919      vector float vec_and (vector float, vector float);
38920      vector float vec_and (vector float, vector bool int);
38921      vector float vec_and (vector bool int, vector float);
38922      vector bool int vec_and (vector bool int, vector bool int);
38923      vector signed int vec_and (vector bool int, vector signed int);
38924      vector signed int vec_and (vector signed int, vector bool int);
38925      vector signed int vec_and (vector signed int, vector signed int);
38926      vector unsigned int vec_and (vector bool int, vector unsigned int);
38927      vector unsigned int vec_and (vector unsigned int, vector bool int);
38928      vector unsigned int vec_and (vector unsigned int, vector unsigned int);
38929      vector bool short vec_and (vector bool short, vector bool short);
38930      vector signed short vec_and (vector bool short, vector signed short);
38931      vector signed short vec_and (vector signed short, vector bool short);
38932      vector signed short vec_and (vector signed short, vector signed short);
38933      vector unsigned short vec_and (vector bool short,
38934                                     vector unsigned short);
38935      vector unsigned short vec_and (vector unsigned short,
38936                                     vector bool short);
38937      vector unsigned short vec_and (vector unsigned short,
38938                                     vector unsigned short);
38939      vector signed char vec_and (vector bool char, vector signed char);
38940      vector bool char vec_and (vector bool char, vector bool char);
38941      vector signed char vec_and (vector signed char, vector bool char);
38942      vector signed char vec_and (vector signed char, vector signed char);
38943      vector unsigned char vec_and (vector bool char, vector unsigned char);
38944      vector unsigned char vec_and (vector unsigned char, vector bool char);
38945      vector unsigned char vec_and (vector unsigned char,
38946                                    vector unsigned char);
38947
38948      vector float vec_andc (vector float, vector float);
38949      vector float vec_andc (vector float, vector bool int);
38950      vector float vec_andc (vector bool int, vector float);
38951      vector bool int vec_andc (vector bool int, vector bool int);
38952      vector signed int vec_andc (vector bool int, vector signed int);
38953      vector signed int vec_andc (vector signed int, vector bool int);
38954      vector signed int vec_andc (vector signed int, vector signed int);
38955      vector unsigned int vec_andc (vector bool int, vector unsigned int);
38956      vector unsigned int vec_andc (vector unsigned int, vector bool int);
38957      vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
38958      vector bool short vec_andc (vector bool short, vector bool short);
38959      vector signed short vec_andc (vector bool short, vector signed short);
38960      vector signed short vec_andc (vector signed short, vector bool short);
38961      vector signed short vec_andc (vector signed short, vector signed short);
38962      vector unsigned short vec_andc (vector bool short,
38963                                      vector unsigned short);
38964      vector unsigned short vec_andc (vector unsigned short,
38965                                      vector bool short);
38966      vector unsigned short vec_andc (vector unsigned short,
38967                                      vector unsigned short);
38968      vector signed char vec_andc (vector bool char, vector signed char);
38969      vector bool char vec_andc (vector bool char, vector bool char);
38970      vector signed char vec_andc (vector signed char, vector bool char);
38971      vector signed char vec_andc (vector signed char, vector signed char);
38972      vector unsigned char vec_andc (vector bool char, vector unsigned char);
38973      vector unsigned char vec_andc (vector unsigned char, vector bool char);
38974      vector unsigned char vec_andc (vector unsigned char,
38975                                     vector unsigned char);
38976
38977      vector unsigned char vec_avg (vector unsigned char,
38978                                    vector unsigned char);
38979      vector signed char vec_avg (vector signed char, vector signed char);
38980      vector unsigned short vec_avg (vector unsigned short,
38981                                     vector unsigned short);
38982      vector signed short vec_avg (vector signed short, vector signed short);
38983      vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
38984      vector signed int vec_avg (vector signed int, vector signed int);
38985
38986      vector signed int vec_vavgsw (vector signed int, vector signed int);
38987
38988      vector unsigned int vec_vavguw (vector unsigned int,
38989                                      vector unsigned int);
38990
38991      vector signed short vec_vavgsh (vector signed short,
38992                                      vector signed short);
38993
38994      vector unsigned short vec_vavguh (vector unsigned short,
38995                                        vector unsigned short);
38996
38997      vector signed char vec_vavgsb (vector signed char, vector signed char);
38998
38999      vector unsigned char vec_vavgub (vector unsigned char,
39000                                       vector unsigned char);
39001
39002      vector float vec_copysign (vector float);
39003
39004      vector float vec_ceil (vector float);
39005
39006      vector signed int vec_cmpb (vector float, vector float);
39007
39008      vector bool char vec_cmpeq (vector signed char, vector signed char);
39009      vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
39010      vector bool short vec_cmpeq (vector signed short, vector signed short);
39011      vector bool short vec_cmpeq (vector unsigned short,
39012                                   vector unsigned short);
39013      vector bool int vec_cmpeq (vector signed int, vector signed int);
39014      vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
39015      vector bool int vec_cmpeq (vector float, vector float);
39016
39017      vector bool int vec_vcmpeqfp (vector float, vector float);
39018
39019      vector bool int vec_vcmpequw (vector signed int, vector signed int);
39020      vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
39021
39022      vector bool short vec_vcmpequh (vector signed short,
39023                                      vector signed short);
39024      vector bool short vec_vcmpequh (vector unsigned short,
39025                                      vector unsigned short);
39026
39027      vector bool char vec_vcmpequb (vector signed char, vector signed char);
39028      vector bool char vec_vcmpequb (vector unsigned char,
39029                                     vector unsigned char);
39030
39031      vector bool int vec_cmpge (vector float, vector float);
39032
39033      vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
39034      vector bool char vec_cmpgt (vector signed char, vector signed char);
39035      vector bool short vec_cmpgt (vector unsigned short,
39036                                   vector unsigned short);
39037      vector bool short vec_cmpgt (vector signed short, vector signed short);
39038      vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
39039      vector bool int vec_cmpgt (vector signed int, vector signed int);
39040      vector bool int vec_cmpgt (vector float, vector float);
39041
39042      vector bool int vec_vcmpgtfp (vector float, vector float);
39043
39044      vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
39045
39046      vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
39047
39048      vector bool short vec_vcmpgtsh (vector signed short,
39049                                      vector signed short);
39050
39051      vector bool short vec_vcmpgtuh (vector unsigned short,
39052                                      vector unsigned short);
39053
39054      vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
39055
39056      vector bool char vec_vcmpgtub (vector unsigned char,
39057                                     vector unsigned char);
39058
39059      vector bool int vec_cmple (vector float, vector float);
39060
39061      vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
39062      vector bool char vec_cmplt (vector signed char, vector signed char);
39063      vector bool short vec_cmplt (vector unsigned short,
39064                                   vector unsigned short);
39065      vector bool short vec_cmplt (vector signed short, vector signed short);
39066      vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
39067      vector bool int vec_cmplt (vector signed int, vector signed int);
39068      vector bool int vec_cmplt (vector float, vector float);
39069
39070      vector float vec_ctf (vector unsigned int, const int);
39071      vector float vec_ctf (vector signed int, const int);
39072
39073      vector float vec_vcfsx (vector signed int, const int);
39074
39075      vector float vec_vcfux (vector unsigned int, const int);
39076
39077      vector signed int vec_cts (vector float, const int);
39078
39079      vector unsigned int vec_ctu (vector float, const int);
39080
39081      void vec_dss (const int);
39082
39083      void vec_dssall (void);
39084
39085      void vec_dst (const vector unsigned char *, int, const int);
39086      void vec_dst (const vector signed char *, int, const int);
39087      void vec_dst (const vector bool char *, int, const int);
39088      void vec_dst (const vector unsigned short *, int, const int);
39089      void vec_dst (const vector signed short *, int, const int);
39090      void vec_dst (const vector bool short *, int, const int);
39091      void vec_dst (const vector pixel *, int, const int);
39092      void vec_dst (const vector unsigned int *, int, const int);
39093      void vec_dst (const vector signed int *, int, const int);
39094      void vec_dst (const vector bool int *, int, const int);
39095      void vec_dst (const vector float *, int, const int);
39096      void vec_dst (const unsigned char *, int, const int);
39097      void vec_dst (const signed char *, int, const int);
39098      void vec_dst (const unsigned short *, int, const int);
39099      void vec_dst (const short *, int, const int);
39100      void vec_dst (const unsigned int *, int, const int);
39101      void vec_dst (const int *, int, const int);
39102      void vec_dst (const unsigned long *, int, const int);
39103      void vec_dst (const long *, int, const int);
39104      void vec_dst (const float *, int, const int);
39105
39106      void vec_dstst (const vector unsigned char *, int, const int);
39107      void vec_dstst (const vector signed char *, int, const int);
39108      void vec_dstst (const vector bool char *, int, const int);
39109      void vec_dstst (const vector unsigned short *, int, const int);
39110      void vec_dstst (const vector signed short *, int, const int);
39111      void vec_dstst (const vector bool short *, int, const int);
39112      void vec_dstst (const vector pixel *, int, const int);
39113      void vec_dstst (const vector unsigned int *, int, const int);
39114      void vec_dstst (const vector signed int *, int, const int);
39115      void vec_dstst (const vector bool int *, int, const int);
39116      void vec_dstst (const vector float *, int, const int);
39117      void vec_dstst (const unsigned char *, int, const int);
39118      void vec_dstst (const signed char *, int, const int);
39119      void vec_dstst (const unsigned short *, int, const int);
39120      void vec_dstst (const short *, int, const int);
39121      void vec_dstst (const unsigned int *, int, const int);
39122      void vec_dstst (const int *, int, const int);
39123      void vec_dstst (const unsigned long *, int, const int);
39124      void vec_dstst (const long *, int, const int);
39125      void vec_dstst (const float *, int, const int);
39126
39127      void vec_dststt (const vector unsigned char *, int, const int);
39128      void vec_dststt (const vector signed char *, int, const int);
39129      void vec_dststt (const vector bool char *, int, const int);
39130      void vec_dststt (const vector unsigned short *, int, const int);
39131      void vec_dststt (const vector signed short *, int, const int);
39132      void vec_dststt (const vector bool short *, int, const int);
39133      void vec_dststt (const vector pixel *, int, const int);
39134      void vec_dststt (const vector unsigned int *, int, const int);
39135      void vec_dststt (const vector signed int *, int, const int);
39136      void vec_dststt (const vector bool int *, int, const int);
39137      void vec_dststt (const vector float *, int, const int);
39138      void vec_dststt (const unsigned char *, int, const int);
39139      void vec_dststt (const signed char *, int, const int);
39140      void vec_dststt (const unsigned short *, int, const int);
39141      void vec_dststt (const short *, int, const int);
39142      void vec_dststt (const unsigned int *, int, const int);
39143      void vec_dststt (const int *, int, const int);
39144      void vec_dststt (const unsigned long *, int, const int);
39145      void vec_dststt (const long *, int, const int);
39146      void vec_dststt (const float *, int, const int);
39147
39148      void vec_dstt (const vector unsigned char *, int, const int);
39149      void vec_dstt (const vector signed char *, int, const int);
39150      void vec_dstt (const vector bool char *, int, const int);
39151      void vec_dstt (const vector unsigned short *, int, const int);
39152      void vec_dstt (const vector signed short *, int, const int);
39153      void vec_dstt (const vector bool short *, int, const int);
39154      void vec_dstt (const vector pixel *, int, const int);
39155      void vec_dstt (const vector unsigned int *, int, const int);
39156      void vec_dstt (const vector signed int *, int, const int);
39157      void vec_dstt (const vector bool int *, int, const int);
39158      void vec_dstt (const vector float *, int, const int);
39159      void vec_dstt (const unsigned char *, int, const int);
39160      void vec_dstt (const signed char *, int, const int);
39161      void vec_dstt (const unsigned short *, int, const int);
39162      void vec_dstt (const short *, int, const int);
39163      void vec_dstt (const unsigned int *, int, const int);
39164      void vec_dstt (const int *, int, const int);
39165      void vec_dstt (const unsigned long *, int, const int);
39166      void vec_dstt (const long *, int, const int);
39167      void vec_dstt (const float *, int, const int);
39168
39169      vector float vec_expte (vector float);
39170
39171      vector float vec_floor (vector float);
39172
39173      vector float vec_ld (int, const vector float *);
39174      vector float vec_ld (int, const float *);
39175      vector bool int vec_ld (int, const vector bool int *);
39176      vector signed int vec_ld (int, const vector signed int *);
39177      vector signed int vec_ld (int, const int *);
39178      vector signed int vec_ld (int, const long *);
39179      vector unsigned int vec_ld (int, const vector unsigned int *);
39180      vector unsigned int vec_ld (int, const unsigned int *);
39181      vector unsigned int vec_ld (int, const unsigned long *);
39182      vector bool short vec_ld (int, const vector bool short *);
39183      vector pixel vec_ld (int, const vector pixel *);
39184      vector signed short vec_ld (int, const vector signed short *);
39185      vector signed short vec_ld (int, const short *);
39186      vector unsigned short vec_ld (int, const vector unsigned short *);
39187      vector unsigned short vec_ld (int, const unsigned short *);
39188      vector bool char vec_ld (int, const vector bool char *);
39189      vector signed char vec_ld (int, const vector signed char *);
39190      vector signed char vec_ld (int, const signed char *);
39191      vector unsigned char vec_ld (int, const vector unsigned char *);
39192      vector unsigned char vec_ld (int, const unsigned char *);
39193
39194      vector signed char vec_lde (int, const signed char *);
39195      vector unsigned char vec_lde (int, const unsigned char *);
39196      vector signed short vec_lde (int, const short *);
39197      vector unsigned short vec_lde (int, const unsigned short *);
39198      vector float vec_lde (int, const float *);
39199      vector signed int vec_lde (int, const int *);
39200      vector unsigned int vec_lde (int, const unsigned int *);
39201      vector signed int vec_lde (int, const long *);
39202      vector unsigned int vec_lde (int, const unsigned long *);
39203
39204      vector float vec_lvewx (int, float *);
39205      vector signed int vec_lvewx (int, int *);
39206      vector unsigned int vec_lvewx (int, unsigned int *);
39207      vector signed int vec_lvewx (int, long *);
39208      vector unsigned int vec_lvewx (int, unsigned long *);
39209
39210      vector signed short vec_lvehx (int, short *);
39211      vector unsigned short vec_lvehx (int, unsigned short *);
39212
39213      vector signed char vec_lvebx (int, char *);
39214      vector unsigned char vec_lvebx (int, unsigned char *);
39215
39216      vector float vec_ldl (int, const vector float *);
39217      vector float vec_ldl (int, const float *);
39218      vector bool int vec_ldl (int, const vector bool int *);
39219      vector signed int vec_ldl (int, const vector signed int *);
39220      vector signed int vec_ldl (int, const int *);
39221      vector signed int vec_ldl (int, const long *);
39222      vector unsigned int vec_ldl (int, const vector unsigned int *);
39223      vector unsigned int vec_ldl (int, const unsigned int *);
39224      vector unsigned int vec_ldl (int, const unsigned long *);
39225      vector bool short vec_ldl (int, const vector bool short *);
39226      vector pixel vec_ldl (int, const vector pixel *);
39227      vector signed short vec_ldl (int, const vector signed short *);
39228      vector signed short vec_ldl (int, const short *);
39229      vector unsigned short vec_ldl (int, const vector unsigned short *);
39230      vector unsigned short vec_ldl (int, const unsigned short *);
39231      vector bool char vec_ldl (int, const vector bool char *);
39232      vector signed char vec_ldl (int, const vector signed char *);
39233      vector signed char vec_ldl (int, const signed char *);
39234      vector unsigned char vec_ldl (int, const vector unsigned char *);
39235      vector unsigned char vec_ldl (int, const unsigned char *);
39236
39237      vector float vec_loge (vector float);
39238
39239      vector unsigned char vec_lvsl (int, const volatile unsigned char *);
39240      vector unsigned char vec_lvsl (int, const volatile signed char *);
39241      vector unsigned char vec_lvsl (int, const volatile unsigned short *);
39242      vector unsigned char vec_lvsl (int, const volatile short *);
39243      vector unsigned char vec_lvsl (int, const volatile unsigned int *);
39244      vector unsigned char vec_lvsl (int, const volatile int *);
39245      vector unsigned char vec_lvsl (int, const volatile unsigned long *);
39246      vector unsigned char vec_lvsl (int, const volatile long *);
39247      vector unsigned char vec_lvsl (int, const volatile float *);
39248
39249      vector unsigned char vec_lvsr (int, const volatile unsigned char *);
39250      vector unsigned char vec_lvsr (int, const volatile signed char *);
39251      vector unsigned char vec_lvsr (int, const volatile unsigned short *);
39252      vector unsigned char vec_lvsr (int, const volatile short *);
39253      vector unsigned char vec_lvsr (int, const volatile unsigned int *);
39254      vector unsigned char vec_lvsr (int, const volatile int *);
39255      vector unsigned char vec_lvsr (int, const volatile unsigned long *);
39256      vector unsigned char vec_lvsr (int, const volatile long *);
39257      vector unsigned char vec_lvsr (int, const volatile float *);
39258
39259      vector float vec_madd (vector float, vector float, vector float);
39260
39261      vector signed short vec_madds (vector signed short,
39262                                     vector signed short,
39263                                     vector signed short);
39264
39265      vector unsigned char vec_max (vector bool char, vector unsigned char);
39266      vector unsigned char vec_max (vector unsigned char, vector bool char);
39267      vector unsigned char vec_max (vector unsigned char,
39268                                    vector unsigned char);
39269      vector signed char vec_max (vector bool char, vector signed char);
39270      vector signed char vec_max (vector signed char, vector bool char);
39271      vector signed char vec_max (vector signed char, vector signed char);
39272      vector unsigned short vec_max (vector bool short,
39273                                     vector unsigned short);
39274      vector unsigned short vec_max (vector unsigned short,
39275                                     vector bool short);
39276      vector unsigned short vec_max (vector unsigned short,
39277                                     vector unsigned short);
39278      vector signed short vec_max (vector bool short, vector signed short);
39279      vector signed short vec_max (vector signed short, vector bool short);
39280      vector signed short vec_max (vector signed short, vector signed short);
39281      vector unsigned int vec_max (vector bool int, vector unsigned int);
39282      vector unsigned int vec_max (vector unsigned int, vector bool int);
39283      vector unsigned int vec_max (vector unsigned int, vector unsigned int);
39284      vector signed int vec_max (vector bool int, vector signed int);
39285      vector signed int vec_max (vector signed int, vector bool int);
39286      vector signed int vec_max (vector signed int, vector signed int);
39287      vector float vec_max (vector float, vector float);
39288
39289      vector float vec_vmaxfp (vector float, vector float);
39290
39291      vector signed int vec_vmaxsw (vector bool int, vector signed int);
39292      vector signed int vec_vmaxsw (vector signed int, vector bool int);
39293      vector signed int vec_vmaxsw (vector signed int, vector signed int);
39294
39295      vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
39296      vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
39297      vector unsigned int vec_vmaxuw (vector unsigned int,
39298                                      vector unsigned int);
39299
39300      vector signed short vec_vmaxsh (vector bool short, vector signed short);
39301      vector signed short vec_vmaxsh (vector signed short, vector bool short);
39302      vector signed short vec_vmaxsh (vector signed short,
39303                                      vector signed short);
39304
39305      vector unsigned short vec_vmaxuh (vector bool short,
39306                                        vector unsigned short);
39307      vector unsigned short vec_vmaxuh (vector unsigned short,
39308                                        vector bool short);
39309      vector unsigned short vec_vmaxuh (vector unsigned short,
39310                                        vector unsigned short);
39311
39312      vector signed char vec_vmaxsb (vector bool char, vector signed char);
39313      vector signed char vec_vmaxsb (vector signed char, vector bool char);
39314      vector signed char vec_vmaxsb (vector signed char, vector signed char);
39315
39316      vector unsigned char vec_vmaxub (vector bool char,
39317                                       vector unsigned char);
39318      vector unsigned char vec_vmaxub (vector unsigned char,
39319                                       vector bool char);
39320      vector unsigned char vec_vmaxub (vector unsigned char,
39321                                       vector unsigned char);
39322
39323      vector bool char vec_mergeh (vector bool char, vector bool char);
39324      vector signed char vec_mergeh (vector signed char, vector signed char);
39325      vector unsigned char vec_mergeh (vector unsigned char,
39326                                       vector unsigned char);
39327      vector bool short vec_mergeh (vector bool short, vector bool short);
39328      vector pixel vec_mergeh (vector pixel, vector pixel);
39329      vector signed short vec_mergeh (vector signed short,
39330                                      vector signed short);
39331      vector unsigned short vec_mergeh (vector unsigned short,
39332                                        vector unsigned short);
39333      vector float vec_mergeh (vector float, vector float);
39334      vector bool int vec_mergeh (vector bool int, vector bool int);
39335      vector signed int vec_mergeh (vector signed int, vector signed int);
39336      vector unsigned int vec_mergeh (vector unsigned int,
39337                                      vector unsigned int);
39338
39339      vector float vec_vmrghw (vector float, vector float);
39340      vector bool int vec_vmrghw (vector bool int, vector bool int);
39341      vector signed int vec_vmrghw (vector signed int, vector signed int);
39342      vector unsigned int vec_vmrghw (vector unsigned int,
39343                                      vector unsigned int);
39344
39345      vector bool short vec_vmrghh (vector bool short, vector bool short);
39346      vector signed short vec_vmrghh (vector signed short,
39347                                      vector signed short);
39348      vector unsigned short vec_vmrghh (vector unsigned short,
39349                                        vector unsigned short);
39350      vector pixel vec_vmrghh (vector pixel, vector pixel);
39351
39352      vector bool char vec_vmrghb (vector bool char, vector bool char);
39353      vector signed char vec_vmrghb (vector signed char, vector signed char);
39354      vector unsigned char vec_vmrghb (vector unsigned char,
39355                                       vector unsigned char);
39356
39357      vector bool char vec_mergel (vector bool char, vector bool char);
39358      vector signed char vec_mergel (vector signed char, vector signed char);
39359      vector unsigned char vec_mergel (vector unsigned char,
39360                                       vector unsigned char);
39361      vector bool short vec_mergel (vector bool short, vector bool short);
39362      vector pixel vec_mergel (vector pixel, vector pixel);
39363      vector signed short vec_mergel (vector signed short,
39364                                      vector signed short);
39365      vector unsigned short vec_mergel (vector unsigned short,
39366                                        vector unsigned short);
39367      vector float vec_mergel (vector float, vector float);
39368      vector bool int vec_mergel (vector bool int, vector bool int);
39369      vector signed int vec_mergel (vector signed int, vector signed int);
39370      vector unsigned int vec_mergel (vector unsigned int,
39371                                      vector unsigned int);
39372
39373      vector float vec_vmrglw (vector float, vector float);
39374      vector signed int vec_vmrglw (vector signed int, vector signed int);
39375      vector unsigned int vec_vmrglw (vector unsigned int,
39376                                      vector unsigned int);
39377      vector bool int vec_vmrglw (vector bool int, vector bool int);
39378
39379      vector bool short vec_vmrglh (vector bool short, vector bool short);
39380      vector signed short vec_vmrglh (vector signed short,
39381                                      vector signed short);
39382      vector unsigned short vec_vmrglh (vector unsigned short,
39383                                        vector unsigned short);
39384      vector pixel vec_vmrglh (vector pixel, vector pixel);
39385
39386      vector bool char vec_vmrglb (vector bool char, vector bool char);
39387      vector signed char vec_vmrglb (vector signed char, vector signed char);
39388      vector unsigned char vec_vmrglb (vector unsigned char,
39389                                       vector unsigned char);
39390
39391      vector unsigned short vec_mfvscr (void);
39392
39393      vector unsigned char vec_min (vector bool char, vector unsigned char);
39394      vector unsigned char vec_min (vector unsigned char, vector bool char);
39395      vector unsigned char vec_min (vector unsigned char,
39396                                    vector unsigned char);
39397      vector signed char vec_min (vector bool char, vector signed char);
39398      vector signed char vec_min (vector signed char, vector bool char);
39399      vector signed char vec_min (vector signed char, vector signed char);
39400      vector unsigned short vec_min (vector bool short,
39401                                     vector unsigned short);
39402      vector unsigned short vec_min (vector unsigned short,
39403                                     vector bool short);
39404      vector unsigned short vec_min (vector unsigned short,
39405                                     vector unsigned short);
39406      vector signed short vec_min (vector bool short, vector signed short);
39407      vector signed short vec_min (vector signed short, vector bool short);
39408      vector signed short vec_min (vector signed short, vector signed short);
39409      vector unsigned int vec_min (vector bool int, vector unsigned int);
39410      vector unsigned int vec_min (vector unsigned int, vector bool int);
39411      vector unsigned int vec_min (vector unsigned int, vector unsigned int);
39412      vector signed int vec_min (vector bool int, vector signed int);
39413      vector signed int vec_min (vector signed int, vector bool int);
39414      vector signed int vec_min (vector signed int, vector signed int);
39415      vector float vec_min (vector float, vector float);
39416
39417      vector float vec_vminfp (vector float, vector float);
39418
39419      vector signed int vec_vminsw (vector bool int, vector signed int);
39420      vector signed int vec_vminsw (vector signed int, vector bool int);
39421      vector signed int vec_vminsw (vector signed int, vector signed int);
39422
39423      vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
39424      vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
39425      vector unsigned int vec_vminuw (vector unsigned int,
39426                                      vector unsigned int);
39427
39428      vector signed short vec_vminsh (vector bool short, vector signed short);
39429      vector signed short vec_vminsh (vector signed short, vector bool short);
39430      vector signed short vec_vminsh (vector signed short,
39431                                      vector signed short);
39432
39433      vector unsigned short vec_vminuh (vector bool short,
39434                                        vector unsigned short);
39435      vector unsigned short vec_vminuh (vector unsigned short,
39436                                        vector bool short);
39437      vector unsigned short vec_vminuh (vector unsigned short,
39438                                        vector unsigned short);
39439
39440      vector signed char vec_vminsb (vector bool char, vector signed char);
39441      vector signed char vec_vminsb (vector signed char, vector bool char);
39442      vector signed char vec_vminsb (vector signed char, vector signed char);
39443
39444      vector unsigned char vec_vminub (vector bool char,
39445                                       vector unsigned char);
39446      vector unsigned char vec_vminub (vector unsigned char,
39447                                       vector bool char);
39448      vector unsigned char vec_vminub (vector unsigned char,
39449                                       vector unsigned char);
39450
39451      vector signed short vec_mladd (vector signed short,
39452                                     vector signed short,
39453                                     vector signed short);
39454      vector signed short vec_mladd (vector signed short,
39455                                     vector unsigned short,
39456                                     vector unsigned short);
39457      vector signed short vec_mladd (vector unsigned short,
39458                                     vector signed short,
39459                                     vector signed short);
39460      vector unsigned short vec_mladd (vector unsigned short,
39461                                       vector unsigned short,
39462                                       vector unsigned short);
39463
39464      vector signed short vec_mradds (vector signed short,
39465                                      vector signed short,
39466                                      vector signed short);
39467
39468      vector unsigned int vec_msum (vector unsigned char,
39469                                    vector unsigned char,
39470                                    vector unsigned int);
39471      vector signed int vec_msum (vector signed char,
39472                                  vector unsigned char,
39473                                  vector signed int);
39474      vector unsigned int vec_msum (vector unsigned short,
39475                                    vector unsigned short,
39476                                    vector unsigned int);
39477      vector signed int vec_msum (vector signed short,
39478                                  vector signed short,
39479                                  vector signed int);
39480
39481      vector signed int vec_vmsumshm (vector signed short,
39482                                      vector signed short,
39483                                      vector signed int);
39484
39485      vector unsigned int vec_vmsumuhm (vector unsigned short,
39486                                        vector unsigned short,
39487                                        vector unsigned int);
39488
39489      vector signed int vec_vmsummbm (vector signed char,
39490                                      vector unsigned char,
39491                                      vector signed int);
39492
39493      vector unsigned int vec_vmsumubm (vector unsigned char,
39494                                        vector unsigned char,
39495                                        vector unsigned int);
39496
39497      vector unsigned int vec_msums (vector unsigned short,
39498                                     vector unsigned short,
39499                                     vector unsigned int);
39500      vector signed int vec_msums (vector signed short,
39501                                   vector signed short,
39502                                   vector signed int);
39503
39504      vector signed int vec_vmsumshs (vector signed short,
39505                                      vector signed short,
39506                                      vector signed int);
39507
39508      vector unsigned int vec_vmsumuhs (vector unsigned short,
39509                                        vector unsigned short,
39510                                        vector unsigned int);
39511
39512      void vec_mtvscr (vector signed int);
39513      void vec_mtvscr (vector unsigned int);
39514      void vec_mtvscr (vector bool int);
39515      void vec_mtvscr (vector signed short);
39516      void vec_mtvscr (vector unsigned short);
39517      void vec_mtvscr (vector bool short);
39518      void vec_mtvscr (vector pixel);
39519      void vec_mtvscr (vector signed char);
39520      void vec_mtvscr (vector unsigned char);
39521      void vec_mtvscr (vector bool char);
39522
39523      vector unsigned short vec_mule (vector unsigned char,
39524                                      vector unsigned char);
39525      vector signed short vec_mule (vector signed char,
39526                                    vector signed char);
39527      vector unsigned int vec_mule (vector unsigned short,
39528                                    vector unsigned short);
39529      vector signed int vec_mule (vector signed short, vector signed short);
39530
39531      vector signed int vec_vmulesh (vector signed short,
39532                                     vector signed short);
39533
39534      vector unsigned int vec_vmuleuh (vector unsigned short,
39535                                       vector unsigned short);
39536
39537      vector signed short vec_vmulesb (vector signed char,
39538                                       vector signed char);
39539
39540      vector unsigned short vec_vmuleub (vector unsigned char,
39541                                        vector unsigned char);
39542
39543      vector unsigned short vec_mulo (vector unsigned char,
39544                                      vector unsigned char);
39545      vector signed short vec_mulo (vector signed char, vector signed char);
39546      vector unsigned int vec_mulo (vector unsigned short,
39547                                    vector unsigned short);
39548      vector signed int vec_mulo (vector signed short, vector signed short);
39549
39550      vector signed int vec_vmulosh (vector signed short,
39551                                     vector signed short);
39552
39553      vector unsigned int vec_vmulouh (vector unsigned short,
39554                                       vector unsigned short);
39555
39556      vector signed short vec_vmulosb (vector signed char,
39557                                       vector signed char);
39558
39559      vector unsigned short vec_vmuloub (vector unsigned char,
39560                                         vector unsigned char);
39561
39562      vector float vec_nmsub (vector float, vector float, vector float);
39563
39564      vector float vec_nor (vector float, vector float);
39565      vector signed int vec_nor (vector signed int, vector signed int);
39566      vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
39567      vector bool int vec_nor (vector bool int, vector bool int);
39568      vector signed short vec_nor (vector signed short, vector signed short);
39569      vector unsigned short vec_nor (vector unsigned short,
39570                                     vector unsigned short);
39571      vector bool short vec_nor (vector bool short, vector bool short);
39572      vector signed char vec_nor (vector signed char, vector signed char);
39573      vector unsigned char vec_nor (vector unsigned char,
39574                                    vector unsigned char);
39575      vector bool char vec_nor (vector bool char, vector bool char);
39576
39577      vector float vec_or (vector float, vector float);
39578      vector float vec_or (vector float, vector bool int);
39579      vector float vec_or (vector bool int, vector float);
39580      vector bool int vec_or (vector bool int, vector bool int);
39581      vector signed int vec_or (vector bool int, vector signed int);
39582      vector signed int vec_or (vector signed int, vector bool int);
39583      vector signed int vec_or (vector signed int, vector signed int);
39584      vector unsigned int vec_or (vector bool int, vector unsigned int);
39585      vector unsigned int vec_or (vector unsigned int, vector bool int);
39586      vector unsigned int vec_or (vector unsigned int, vector unsigned int);
39587      vector bool short vec_or (vector bool short, vector bool short);
39588      vector signed short vec_or (vector bool short, vector signed short);
39589      vector signed short vec_or (vector signed short, vector bool short);
39590      vector signed short vec_or (vector signed short, vector signed short);
39591      vector unsigned short vec_or (vector bool short, vector unsigned short);
39592      vector unsigned short vec_or (vector unsigned short, vector bool short);
39593      vector unsigned short vec_or (vector unsigned short,
39594                                    vector unsigned short);
39595      vector signed char vec_or (vector bool char, vector signed char);
39596      vector bool char vec_or (vector bool char, vector bool char);
39597      vector signed char vec_or (vector signed char, vector bool char);
39598      vector signed char vec_or (vector signed char, vector signed char);
39599      vector unsigned char vec_or (vector bool char, vector unsigned char);
39600      vector unsigned char vec_or (vector unsigned char, vector bool char);
39601      vector unsigned char vec_or (vector unsigned char,
39602                                   vector unsigned char);
39603
39604      vector signed char vec_pack (vector signed short, vector signed short);
39605      vector unsigned char vec_pack (vector unsigned short,
39606                                     vector unsigned short);
39607      vector bool char vec_pack (vector bool short, vector bool short);
39608      vector signed short vec_pack (vector signed int, vector signed int);
39609      vector unsigned short vec_pack (vector unsigned int,
39610                                      vector unsigned int);
39611      vector bool short vec_pack (vector bool int, vector bool int);
39612
39613      vector bool short vec_vpkuwum (vector bool int, vector bool int);
39614      vector signed short vec_vpkuwum (vector signed int, vector signed int);
39615      vector unsigned short vec_vpkuwum (vector unsigned int,
39616                                         vector unsigned int);
39617
39618      vector bool char vec_vpkuhum (vector bool short, vector bool short);
39619      vector signed char vec_vpkuhum (vector signed short,
39620                                      vector signed short);
39621      vector unsigned char vec_vpkuhum (vector unsigned short,
39622                                        vector unsigned short);
39623
39624      vector pixel vec_packpx (vector unsigned int, vector unsigned int);
39625
39626      vector unsigned char vec_packs (vector unsigned short,
39627                                      vector unsigned short);
39628      vector signed char vec_packs (vector signed short, vector signed short);
39629      vector unsigned short vec_packs (vector unsigned int,
39630                                       vector unsigned int);
39631      vector signed short vec_packs (vector signed int, vector signed int);
39632
39633      vector signed short vec_vpkswss (vector signed int, vector signed int);
39634
39635      vector unsigned short vec_vpkuwus (vector unsigned int,
39636                                         vector unsigned int);
39637
39638      vector signed char vec_vpkshss (vector signed short,
39639                                      vector signed short);
39640
39641      vector unsigned char vec_vpkuhus (vector unsigned short,
39642                                        vector unsigned short);
39643
39644      vector unsigned char vec_packsu (vector unsigned short,
39645                                       vector unsigned short);
39646      vector unsigned char vec_packsu (vector signed short,
39647                                       vector signed short);
39648      vector unsigned short vec_packsu (vector unsigned int,
39649                                        vector unsigned int);
39650      vector unsigned short vec_packsu (vector signed int, vector signed int);
39651
39652      vector unsigned short vec_vpkswus (vector signed int,
39653                                         vector signed int);
39654
39655      vector unsigned char vec_vpkshus (vector signed short,
39656                                        vector signed short);
39657
39658      vector float vec_perm (vector float,
39659                             vector float,
39660                             vector unsigned char);
39661      vector signed int vec_perm (vector signed int,
39662                                  vector signed int,
39663                                  vector unsigned char);
39664      vector unsigned int vec_perm (vector unsigned int,
39665                                    vector unsigned int,
39666                                    vector unsigned char);
39667      vector bool int vec_perm (vector bool int,
39668                                vector bool int,
39669                                vector unsigned char);
39670      vector signed short vec_perm (vector signed short,
39671                                    vector signed short,
39672                                    vector unsigned char);
39673      vector unsigned short vec_perm (vector unsigned short,
39674                                      vector unsigned short,
39675                                      vector unsigned char);
39676      vector bool short vec_perm (vector bool short,
39677                                  vector bool short,
39678                                  vector unsigned char);
39679      vector pixel vec_perm (vector pixel,
39680                             vector pixel,
39681                             vector unsigned char);
39682      vector signed char vec_perm (vector signed char,
39683                                   vector signed char,
39684                                   vector unsigned char);
39685      vector unsigned char vec_perm (vector unsigned char,
39686                                     vector unsigned char,
39687                                     vector unsigned char);
39688      vector bool char vec_perm (vector bool char,
39689                                 vector bool char,
39690                                 vector unsigned char);
39691
39692      vector float vec_re (vector float);
39693
39694      vector signed char vec_rl (vector signed char,
39695                                 vector unsigned char);
39696      vector unsigned char vec_rl (vector unsigned char,
39697                                   vector unsigned char);
39698      vector signed short vec_rl (vector signed short, vector unsigned short);
39699      vector unsigned short vec_rl (vector unsigned short,
39700                                    vector unsigned short);
39701      vector signed int vec_rl (vector signed int, vector unsigned int);
39702      vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
39703
39704      vector signed int vec_vrlw (vector signed int, vector unsigned int);
39705      vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
39706
39707      vector signed short vec_vrlh (vector signed short,
39708                                    vector unsigned short);
39709      vector unsigned short vec_vrlh (vector unsigned short,
39710                                      vector unsigned short);
39711
39712      vector signed char vec_vrlb (vector signed char, vector unsigned char);
39713      vector unsigned char vec_vrlb (vector unsigned char,
39714                                     vector unsigned char);
39715
39716      vector float vec_round (vector float);
39717
39718      vector float vec_recip (vector float, vector float);
39719
39720      vector float vec_rsqrt (vector float);
39721
39722      vector float vec_rsqrte (vector float);
39723
39724      vector float vec_sel (vector float, vector float, vector bool int);
39725      vector float vec_sel (vector float, vector float, vector unsigned int);
39726      vector signed int vec_sel (vector signed int,
39727                                 vector signed int,
39728                                 vector bool int);
39729      vector signed int vec_sel (vector signed int,
39730                                 vector signed int,
39731                                 vector unsigned int);
39732      vector unsigned int vec_sel (vector unsigned int,
39733                                   vector unsigned int,
39734                                   vector bool int);
39735      vector unsigned int vec_sel (vector unsigned int,
39736                                   vector unsigned int,
39737                                   vector unsigned int);
39738      vector bool int vec_sel (vector bool int,
39739                               vector bool int,
39740                               vector bool int);
39741      vector bool int vec_sel (vector bool int,
39742                               vector bool int,
39743                               vector unsigned int);
39744      vector signed short vec_sel (vector signed short,
39745                                   vector signed short,
39746                                   vector bool short);
39747      vector signed short vec_sel (vector signed short,
39748                                   vector signed short,
39749                                   vector unsigned short);
39750      vector unsigned short vec_sel (vector unsigned short,
39751                                     vector unsigned short,
39752                                     vector bool short);
39753      vector unsigned short vec_sel (vector unsigned short,
39754                                     vector unsigned short,
39755                                     vector unsigned short);
39756      vector bool short vec_sel (vector bool short,
39757                                 vector bool short,
39758                                 vector bool short);
39759      vector bool short vec_sel (vector bool short,
39760                                 vector bool short,
39761                                 vector unsigned short);
39762      vector signed char vec_sel (vector signed char,
39763                                  vector signed char,
39764                                  vector bool char);
39765      vector signed char vec_sel (vector signed char,
39766                                  vector signed char,
39767                                  vector unsigned char);
39768      vector unsigned char vec_sel (vector unsigned char,
39769                                    vector unsigned char,
39770                                    vector bool char);
39771      vector unsigned char vec_sel (vector unsigned char,
39772                                    vector unsigned char,
39773                                    vector unsigned char);
39774      vector bool char vec_sel (vector bool char,
39775                                vector bool char,
39776                                vector bool char);
39777      vector bool char vec_sel (vector bool char,
39778                                vector bool char,
39779                                vector unsigned char);
39780
39781      vector signed char vec_sl (vector signed char,
39782                                 vector unsigned char);
39783      vector unsigned char vec_sl (vector unsigned char,
39784                                   vector unsigned char);
39785      vector signed short vec_sl (vector signed short, vector unsigned short);
39786      vector unsigned short vec_sl (vector unsigned short,
39787                                    vector unsigned short);
39788      vector signed int vec_sl (vector signed int, vector unsigned int);
39789      vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
39790
39791      vector signed int vec_vslw (vector signed int, vector unsigned int);
39792      vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
39793
39794      vector signed short vec_vslh (vector signed short,
39795                                    vector unsigned short);
39796      vector unsigned short vec_vslh (vector unsigned short,
39797                                      vector unsigned short);
39798
39799      vector signed char vec_vslb (vector signed char, vector unsigned char);
39800      vector unsigned char vec_vslb (vector unsigned char,
39801                                     vector unsigned char);
39802
39803      vector float vec_sld (vector float, vector float, const int);
39804      vector signed int vec_sld (vector signed int,
39805                                 vector signed int,
39806                                 const int);
39807      vector unsigned int vec_sld (vector unsigned int,
39808                                   vector unsigned int,
39809                                   const int);
39810      vector bool int vec_sld (vector bool int,
39811                               vector bool int,
39812                               const int);
39813      vector signed short vec_sld (vector signed short,
39814                                   vector signed short,
39815                                   const int);
39816      vector unsigned short vec_sld (vector unsigned short,
39817                                     vector unsigned short,
39818                                     const int);
39819      vector bool short vec_sld (vector bool short,
39820                                 vector bool short,
39821                                 const int);
39822      vector pixel vec_sld (vector pixel,
39823                            vector pixel,
39824                            const int);
39825      vector signed char vec_sld (vector signed char,
39826                                  vector signed char,
39827                                  const int);
39828      vector unsigned char vec_sld (vector unsigned char,
39829                                    vector unsigned char,
39830                                    const int);
39831      vector bool char vec_sld (vector bool char,
39832                                vector bool char,
39833                                const int);
39834
39835      vector signed int vec_sll (vector signed int,
39836                                 vector unsigned int);
39837      vector signed int vec_sll (vector signed int,
39838                                 vector unsigned short);
39839      vector signed int vec_sll (vector signed int,
39840                                 vector unsigned char);
39841      vector unsigned int vec_sll (vector unsigned int,
39842                                   vector unsigned int);
39843      vector unsigned int vec_sll (vector unsigned int,
39844                                   vector unsigned short);
39845      vector unsigned int vec_sll (vector unsigned int,
39846                                   vector unsigned char);
39847      vector bool int vec_sll (vector bool int,
39848                               vector unsigned int);
39849      vector bool int vec_sll (vector bool int,
39850                               vector unsigned short);
39851      vector bool int vec_sll (vector bool int,
39852                               vector unsigned char);
39853      vector signed short vec_sll (vector signed short,
39854                                   vector unsigned int);
39855      vector signed short vec_sll (vector signed short,
39856                                   vector unsigned short);
39857      vector signed short vec_sll (vector signed short,
39858                                   vector unsigned char);
39859      vector unsigned short vec_sll (vector unsigned short,
39860                                     vector unsigned int);
39861      vector unsigned short vec_sll (vector unsigned short,
39862                                     vector unsigned short);
39863      vector unsigned short vec_sll (vector unsigned short,
39864                                     vector unsigned char);
39865      vector bool short vec_sll (vector bool short, vector unsigned int);
39866      vector bool short vec_sll (vector bool short, vector unsigned short);
39867      vector bool short vec_sll (vector bool short, vector unsigned char);
39868      vector pixel vec_sll (vector pixel, vector unsigned int);
39869      vector pixel vec_sll (vector pixel, vector unsigned short);
39870      vector pixel vec_sll (vector pixel, vector unsigned char);
39871      vector signed char vec_sll (vector signed char, vector unsigned int);
39872      vector signed char vec_sll (vector signed char, vector unsigned short);
39873      vector signed char vec_sll (vector signed char, vector unsigned char);
39874      vector unsigned char vec_sll (vector unsigned char,
39875                                    vector unsigned int);
39876      vector unsigned char vec_sll (vector unsigned char,
39877                                    vector unsigned short);
39878      vector unsigned char vec_sll (vector unsigned char,
39879                                    vector unsigned char);
39880      vector bool char vec_sll (vector bool char, vector unsigned int);
39881      vector bool char vec_sll (vector bool char, vector unsigned short);
39882      vector bool char vec_sll (vector bool char, vector unsigned char);
39883
39884      vector float vec_slo (vector float, vector signed char);
39885      vector float vec_slo (vector float, vector unsigned char);
39886      vector signed int vec_slo (vector signed int, vector signed char);
39887      vector signed int vec_slo (vector signed int, vector unsigned char);
39888      vector unsigned int vec_slo (vector unsigned int, vector signed char);
39889      vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
39890      vector signed short vec_slo (vector signed short, vector signed char);
39891      vector signed short vec_slo (vector signed short, vector unsigned char);
39892      vector unsigned short vec_slo (vector unsigned short,
39893                                     vector signed char);
39894      vector unsigned short vec_slo (vector unsigned short,
39895                                     vector unsigned char);
39896      vector pixel vec_slo (vector pixel, vector signed char);
39897      vector pixel vec_slo (vector pixel, vector unsigned char);
39898      vector signed char vec_slo (vector signed char, vector signed char);
39899      vector signed char vec_slo (vector signed char, vector unsigned char);
39900      vector unsigned char vec_slo (vector unsigned char, vector signed char);
39901      vector unsigned char vec_slo (vector unsigned char,
39902                                    vector unsigned char);
39903
39904      vector signed char vec_splat (vector signed char, const int);
39905      vector unsigned char vec_splat (vector unsigned char, const int);
39906      vector bool char vec_splat (vector bool char, const int);
39907      vector signed short vec_splat (vector signed short, const int);
39908      vector unsigned short vec_splat (vector unsigned short, const int);
39909      vector bool short vec_splat (vector bool short, const int);
39910      vector pixel vec_splat (vector pixel, const int);
39911      vector float vec_splat (vector float, const int);
39912      vector signed int vec_splat (vector signed int, const int);
39913      vector unsigned int vec_splat (vector unsigned int, const int);
39914      vector bool int vec_splat (vector bool int, const int);
39915
39916      vector float vec_vspltw (vector float, const int);
39917      vector signed int vec_vspltw (vector signed int, const int);
39918      vector unsigned int vec_vspltw (vector unsigned int, const int);
39919      vector bool int vec_vspltw (vector bool int, const int);
39920
39921      vector bool short vec_vsplth (vector bool short, const int);
39922      vector signed short vec_vsplth (vector signed short, const int);
39923      vector unsigned short vec_vsplth (vector unsigned short, const int);
39924      vector pixel vec_vsplth (vector pixel, const int);
39925
39926      vector signed char vec_vspltb (vector signed char, const int);
39927      vector unsigned char vec_vspltb (vector unsigned char, const int);
39928      vector bool char vec_vspltb (vector bool char, const int);
39929
39930      vector signed char vec_splat_s8 (const int);
39931
39932      vector signed short vec_splat_s16 (const int);
39933
39934      vector signed int vec_splat_s32 (const int);
39935
39936      vector unsigned char vec_splat_u8 (const int);
39937
39938      vector unsigned short vec_splat_u16 (const int);
39939
39940      vector unsigned int vec_splat_u32 (const int);
39941
39942      vector signed char vec_sr (vector signed char, vector unsigned char);
39943      vector unsigned char vec_sr (vector unsigned char,
39944                                   vector unsigned char);
39945      vector signed short vec_sr (vector signed short,
39946                                  vector unsigned short);
39947      vector unsigned short vec_sr (vector unsigned short,
39948                                    vector unsigned short);
39949      vector signed int vec_sr (vector signed int, vector unsigned int);
39950      vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
39951
39952      vector signed int vec_vsrw (vector signed int, vector unsigned int);
39953      vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
39954
39955      vector signed short vec_vsrh (vector signed short,
39956                                    vector unsigned short);
39957      vector unsigned short vec_vsrh (vector unsigned short,
39958                                      vector unsigned short);
39959
39960      vector signed char vec_vsrb (vector signed char, vector unsigned char);
39961      vector unsigned char vec_vsrb (vector unsigned char,
39962                                     vector unsigned char);
39963
39964      vector signed char vec_sra (vector signed char, vector unsigned char);
39965      vector unsigned char vec_sra (vector unsigned char,
39966                                    vector unsigned char);
39967      vector signed short vec_sra (vector signed short,
39968                                   vector unsigned short);
39969      vector unsigned short vec_sra (vector unsigned short,
39970                                     vector unsigned short);
39971      vector signed int vec_sra (vector signed int, vector unsigned int);
39972      vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
39973
39974      vector signed int vec_vsraw (vector signed int, vector unsigned int);
39975      vector unsigned int vec_vsraw (vector unsigned int,
39976                                     vector unsigned int);
39977
39978      vector signed short vec_vsrah (vector signed short,
39979                                     vector unsigned short);
39980      vector unsigned short vec_vsrah (vector unsigned short,
39981                                       vector unsigned short);
39982
39983      vector signed char vec_vsrab (vector signed char, vector unsigned char);
39984      vector unsigned char vec_vsrab (vector unsigned char,
39985                                      vector unsigned char);
39986
39987      vector signed int vec_srl (vector signed int, vector unsigned int);
39988      vector signed int vec_srl (vector signed int, vector unsigned short);
39989      vector signed int vec_srl (vector signed int, vector unsigned char);
39990      vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
39991      vector unsigned int vec_srl (vector unsigned int,
39992                                   vector unsigned short);
39993      vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
39994      vector bool int vec_srl (vector bool int, vector unsigned int);
39995      vector bool int vec_srl (vector bool int, vector unsigned short);
39996      vector bool int vec_srl (vector bool int, vector unsigned char);
39997      vector signed short vec_srl (vector signed short, vector unsigned int);
39998      vector signed short vec_srl (vector signed short,
39999                                   vector unsigned short);
40000      vector signed short vec_srl (vector signed short, vector unsigned char);
40001      vector unsigned short vec_srl (vector unsigned short,
40002                                     vector unsigned int);
40003      vector unsigned short vec_srl (vector unsigned short,
40004                                     vector unsigned short);
40005      vector unsigned short vec_srl (vector unsigned short,
40006                                     vector unsigned char);
40007      vector bool short vec_srl (vector bool short, vector unsigned int);
40008      vector bool short vec_srl (vector bool short, vector unsigned short);
40009      vector bool short vec_srl (vector bool short, vector unsigned char);
40010      vector pixel vec_srl (vector pixel, vector unsigned int);
40011      vector pixel vec_srl (vector pixel, vector unsigned short);
40012      vector pixel vec_srl (vector pixel, vector unsigned char);
40013      vector signed char vec_srl (vector signed char, vector unsigned int);
40014      vector signed char vec_srl (vector signed char, vector unsigned short);
40015      vector signed char vec_srl (vector signed char, vector unsigned char);
40016      vector unsigned char vec_srl (vector unsigned char,
40017                                    vector unsigned int);
40018      vector unsigned char vec_srl (vector unsigned char,
40019                                    vector unsigned short);
40020      vector unsigned char vec_srl (vector unsigned char,
40021                                    vector unsigned char);
40022      vector bool char vec_srl (vector bool char, vector unsigned int);
40023      vector bool char vec_srl (vector bool char, vector unsigned short);
40024      vector bool char vec_srl (vector bool char, vector unsigned char);
40025
40026      vector float vec_sro (vector float, vector signed char);
40027      vector float vec_sro (vector float, vector unsigned char);
40028      vector signed int vec_sro (vector signed int, vector signed char);
40029      vector signed int vec_sro (vector signed int, vector unsigned char);
40030      vector unsigned int vec_sro (vector unsigned int, vector signed char);
40031      vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
40032      vector signed short vec_sro (vector signed short, vector signed char);
40033      vector signed short vec_sro (vector signed short, vector unsigned char);
40034      vector unsigned short vec_sro (vector unsigned short,
40035                                     vector signed char);
40036      vector unsigned short vec_sro (vector unsigned short,
40037                                     vector unsigned char);
40038      vector pixel vec_sro (vector pixel, vector signed char);
40039      vector pixel vec_sro (vector pixel, vector unsigned char);
40040      vector signed char vec_sro (vector signed char, vector signed char);
40041      vector signed char vec_sro (vector signed char, vector unsigned char);
40042      vector unsigned char vec_sro (vector unsigned char, vector signed char);
40043      vector unsigned char vec_sro (vector unsigned char,
40044                                    vector unsigned char);
40045
40046      void vec_st (vector float, int, vector float *);
40047      void vec_st (vector float, int, float *);
40048      void vec_st (vector signed int, int, vector signed int *);
40049      void vec_st (vector signed int, int, int *);
40050      void vec_st (vector unsigned int, int, vector unsigned int *);
40051      void vec_st (vector unsigned int, int, unsigned int *);
40052      void vec_st (vector bool int, int, vector bool int *);
40053      void vec_st (vector bool int, int, unsigned int *);
40054      void vec_st (vector bool int, int, int *);
40055      void vec_st (vector signed short, int, vector signed short *);
40056      void vec_st (vector signed short, int, short *);
40057      void vec_st (vector unsigned short, int, vector unsigned short *);
40058      void vec_st (vector unsigned short, int, unsigned short *);
40059      void vec_st (vector bool short, int, vector bool short *);
40060      void vec_st (vector bool short, int, unsigned short *);
40061      void vec_st (vector pixel, int, vector pixel *);
40062      void vec_st (vector pixel, int, unsigned short *);
40063      void vec_st (vector pixel, int, short *);
40064      void vec_st (vector bool short, int, short *);
40065      void vec_st (vector signed char, int, vector signed char *);
40066      void vec_st (vector signed char, int, signed char *);
40067      void vec_st (vector unsigned char, int, vector unsigned char *);
40068      void vec_st (vector unsigned char, int, unsigned char *);
40069      void vec_st (vector bool char, int, vector bool char *);
40070      void vec_st (vector bool char, int, unsigned char *);
40071      void vec_st (vector bool char, int, signed char *);
40072
40073      void vec_ste (vector signed char, int, signed char *);
40074      void vec_ste (vector unsigned char, int, unsigned char *);
40075      void vec_ste (vector bool char, int, signed char *);
40076      void vec_ste (vector bool char, int, unsigned char *);
40077      void vec_ste (vector signed short, int, short *);
40078      void vec_ste (vector unsigned short, int, unsigned short *);
40079      void vec_ste (vector bool short, int, short *);
40080      void vec_ste (vector bool short, int, unsigned short *);
40081      void vec_ste (vector pixel, int, short *);
40082      void vec_ste (vector pixel, int, unsigned short *);
40083      void vec_ste (vector float, int, float *);
40084      void vec_ste (vector signed int, int, int *);
40085      void vec_ste (vector unsigned int, int, unsigned int *);
40086      void vec_ste (vector bool int, int, int *);
40087      void vec_ste (vector bool int, int, unsigned int *);
40088
40089      void vec_stvewx (vector float, int, float *);
40090      void vec_stvewx (vector signed int, int, int *);
40091      void vec_stvewx (vector unsigned int, int, unsigned int *);
40092      void vec_stvewx (vector bool int, int, int *);
40093      void vec_stvewx (vector bool int, int, unsigned int *);
40094
40095      void vec_stvehx (vector signed short, int, short *);
40096      void vec_stvehx (vector unsigned short, int, unsigned short *);
40097      void vec_stvehx (vector bool short, int, short *);
40098      void vec_stvehx (vector bool short, int, unsigned short *);
40099      void vec_stvehx (vector pixel, int, short *);
40100      void vec_stvehx (vector pixel, int, unsigned short *);
40101
40102      void vec_stvebx (vector signed char, int, signed char *);
40103      void vec_stvebx (vector unsigned char, int, unsigned char *);
40104      void vec_stvebx (vector bool char, int, signed char *);
40105      void vec_stvebx (vector bool char, int, unsigned char *);
40106
40107      void vec_stl (vector float, int, vector float *);
40108      void vec_stl (vector float, int, float *);
40109      void vec_stl (vector signed int, int, vector signed int *);
40110      void vec_stl (vector signed int, int, int *);
40111      void vec_stl (vector unsigned int, int, vector unsigned int *);
40112      void vec_stl (vector unsigned int, int, unsigned int *);
40113      void vec_stl (vector bool int, int, vector bool int *);
40114      void vec_stl (vector bool int, int, unsigned int *);
40115      void vec_stl (vector bool int, int, int *);
40116      void vec_stl (vector signed short, int, vector signed short *);
40117      void vec_stl (vector signed short, int, short *);
40118      void vec_stl (vector unsigned short, int, vector unsigned short *);
40119      void vec_stl (vector unsigned short, int, unsigned short *);
40120      void vec_stl (vector bool short, int, vector bool short *);
40121      void vec_stl (vector bool short, int, unsigned short *);
40122      void vec_stl (vector bool short, int, short *);
40123      void vec_stl (vector pixel, int, vector pixel *);
40124      void vec_stl (vector pixel, int, unsigned short *);
40125      void vec_stl (vector pixel, int, short *);
40126      void vec_stl (vector signed char, int, vector signed char *);
40127      void vec_stl (vector signed char, int, signed char *);
40128      void vec_stl (vector unsigned char, int, vector unsigned char *);
40129      void vec_stl (vector unsigned char, int, unsigned char *);
40130      void vec_stl (vector bool char, int, vector bool char *);
40131      void vec_stl (vector bool char, int, unsigned char *);
40132      void vec_stl (vector bool char, int, signed char *);
40133
40134      vector signed char vec_sub (vector bool char, vector signed char);
40135      vector signed char vec_sub (vector signed char, vector bool char);
40136      vector signed char vec_sub (vector signed char, vector signed char);
40137      vector unsigned char vec_sub (vector bool char, vector unsigned char);
40138      vector unsigned char vec_sub (vector unsigned char, vector bool char);
40139      vector unsigned char vec_sub (vector unsigned char,
40140                                    vector unsigned char);
40141      vector signed short vec_sub (vector bool short, vector signed short);
40142      vector signed short vec_sub (vector signed short, vector bool short);
40143      vector signed short vec_sub (vector signed short, vector signed short);
40144      vector unsigned short vec_sub (vector bool short,
40145                                     vector unsigned short);
40146      vector unsigned short vec_sub (vector unsigned short,
40147                                     vector bool short);
40148      vector unsigned short vec_sub (vector unsigned short,
40149                                     vector unsigned short);
40150      vector signed int vec_sub (vector bool int, vector signed int);
40151      vector signed int vec_sub (vector signed int, vector bool int);
40152      vector signed int vec_sub (vector signed int, vector signed int);
40153      vector unsigned int vec_sub (vector bool int, vector unsigned int);
40154      vector unsigned int vec_sub (vector unsigned int, vector bool int);
40155      vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
40156      vector float vec_sub (vector float, vector float);
40157
40158      vector float vec_vsubfp (vector float, vector float);
40159
40160      vector signed int vec_vsubuwm (vector bool int, vector signed int);
40161      vector signed int vec_vsubuwm (vector signed int, vector bool int);
40162      vector signed int vec_vsubuwm (vector signed int, vector signed int);
40163      vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
40164      vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
40165      vector unsigned int vec_vsubuwm (vector unsigned int,
40166                                       vector unsigned int);
40167
40168      vector signed short vec_vsubuhm (vector bool short,
40169                                       vector signed short);
40170      vector signed short vec_vsubuhm (vector signed short,
40171                                       vector bool short);
40172      vector signed short vec_vsubuhm (vector signed short,
40173                                       vector signed short);
40174      vector unsigned short vec_vsubuhm (vector bool short,
40175                                         vector unsigned short);
40176      vector unsigned short vec_vsubuhm (vector unsigned short,
40177                                         vector bool short);
40178      vector unsigned short vec_vsubuhm (vector unsigned short,
40179                                         vector unsigned short);
40180
40181      vector signed char vec_vsububm (vector bool char, vector signed char);
40182      vector signed char vec_vsububm (vector signed char, vector bool char);
40183      vector signed char vec_vsububm (vector signed char, vector signed char);
40184      vector unsigned char vec_vsububm (vector bool char,
40185                                        vector unsigned char);
40186      vector unsigned char vec_vsububm (vector unsigned char,
40187                                        vector bool char);
40188      vector unsigned char vec_vsububm (vector unsigned char,
40189                                        vector unsigned char);
40190
40191      vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
40192
40193      vector unsigned char vec_subs (vector bool char, vector unsigned char);
40194      vector unsigned char vec_subs (vector unsigned char, vector bool char);
40195      vector unsigned char vec_subs (vector unsigned char,
40196                                     vector unsigned char);
40197      vector signed char vec_subs (vector bool char, vector signed char);
40198      vector signed char vec_subs (vector signed char, vector bool char);
40199      vector signed char vec_subs (vector signed char, vector signed char);
40200      vector unsigned short vec_subs (vector bool short,
40201                                      vector unsigned short);
40202      vector unsigned short vec_subs (vector unsigned short,
40203                                      vector bool short);
40204      vector unsigned short vec_subs (vector unsigned short,
40205                                      vector unsigned short);
40206      vector signed short vec_subs (vector bool short, vector signed short);
40207      vector signed short vec_subs (vector signed short, vector bool short);
40208      vector signed short vec_subs (vector signed short, vector signed short);
40209      vector unsigned int vec_subs (vector bool int, vector unsigned int);
40210      vector unsigned int vec_subs (vector unsigned int, vector bool int);
40211      vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
40212      vector signed int vec_subs (vector bool int, vector signed int);
40213      vector signed int vec_subs (vector signed int, vector bool int);
40214      vector signed int vec_subs (vector signed int, vector signed int);
40215
40216      vector signed int vec_vsubsws (vector bool int, vector signed int);
40217      vector signed int vec_vsubsws (vector signed int, vector bool int);
40218      vector signed int vec_vsubsws (vector signed int, vector signed int);
40219
40220      vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
40221      vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
40222      vector unsigned int vec_vsubuws (vector unsigned int,
40223                                       vector unsigned int);
40224
40225      vector signed short vec_vsubshs (vector bool short,
40226                                       vector signed short);
40227      vector signed short vec_vsubshs (vector signed short,
40228                                       vector bool short);
40229      vector signed short vec_vsubshs (vector signed short,
40230                                       vector signed short);
40231
40232      vector unsigned short vec_vsubuhs (vector bool short,
40233                                         vector unsigned short);
40234      vector unsigned short vec_vsubuhs (vector unsigned short,
40235                                         vector bool short);
40236      vector unsigned short vec_vsubuhs (vector unsigned short,
40237                                         vector unsigned short);
40238
40239      vector signed char vec_vsubsbs (vector bool char, vector signed char);
40240      vector signed char vec_vsubsbs (vector signed char, vector bool char);
40241      vector signed char vec_vsubsbs (vector signed char, vector signed char);
40242
40243      vector unsigned char vec_vsububs (vector bool char,
40244                                        vector unsigned char);
40245      vector unsigned char vec_vsububs (vector unsigned char,
40246                                        vector bool char);
40247      vector unsigned char vec_vsububs (vector unsigned char,
40248                                        vector unsigned char);
40249
40250      vector unsigned int vec_sum4s (vector unsigned char,
40251                                     vector unsigned int);
40252      vector signed int vec_sum4s (vector signed char, vector signed int);
40253      vector signed int vec_sum4s (vector signed short, vector signed int);
40254
40255      vector signed int vec_vsum4shs (vector signed short, vector signed int);
40256
40257      vector signed int vec_vsum4sbs (vector signed char, vector signed int);
40258
40259      vector unsigned int vec_vsum4ubs (vector unsigned char,
40260                                        vector unsigned int);
40261
40262      vector signed int vec_sum2s (vector signed int, vector signed int);
40263
40264      vector signed int vec_sums (vector signed int, vector signed int);
40265
40266      vector float vec_trunc (vector float);
40267
40268      vector signed short vec_unpackh (vector signed char);
40269      vector bool short vec_unpackh (vector bool char);
40270      vector signed int vec_unpackh (vector signed short);
40271      vector bool int vec_unpackh (vector bool short);
40272      vector unsigned int vec_unpackh (vector pixel);
40273
40274      vector bool int vec_vupkhsh (vector bool short);
40275      vector signed int vec_vupkhsh (vector signed short);
40276
40277      vector unsigned int vec_vupkhpx (vector pixel);
40278
40279      vector bool short vec_vupkhsb (vector bool char);
40280      vector signed short vec_vupkhsb (vector signed char);
40281
40282      vector signed short vec_unpackl (vector signed char);
40283      vector bool short vec_unpackl (vector bool char);
40284      vector unsigned int vec_unpackl (vector pixel);
40285      vector signed int vec_unpackl (vector signed short);
40286      vector bool int vec_unpackl (vector bool short);
40287
40288      vector unsigned int vec_vupklpx (vector pixel);
40289
40290      vector bool int vec_vupklsh (vector bool short);
40291      vector signed int vec_vupklsh (vector signed short);
40292
40293      vector bool short vec_vupklsb (vector bool char);
40294      vector signed short vec_vupklsb (vector signed char);
40295
40296      vector float vec_xor (vector float, vector float);
40297      vector float vec_xor (vector float, vector bool int);
40298      vector float vec_xor (vector bool int, vector float);
40299      vector bool int vec_xor (vector bool int, vector bool int);
40300      vector signed int vec_xor (vector bool int, vector signed int);
40301      vector signed int vec_xor (vector signed int, vector bool int);
40302      vector signed int vec_xor (vector signed int, vector signed int);
40303      vector unsigned int vec_xor (vector bool int, vector unsigned int);
40304      vector unsigned int vec_xor (vector unsigned int, vector bool int);
40305      vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
40306      vector bool short vec_xor (vector bool short, vector bool short);
40307      vector signed short vec_xor (vector bool short, vector signed short);
40308      vector signed short vec_xor (vector signed short, vector bool short);
40309      vector signed short vec_xor (vector signed short, vector signed short);
40310      vector unsigned short vec_xor (vector bool short,
40311                                     vector unsigned short);
40312      vector unsigned short vec_xor (vector unsigned short,
40313                                     vector bool short);
40314      vector unsigned short vec_xor (vector unsigned short,
40315                                     vector unsigned short);
40316      vector signed char vec_xor (vector bool char, vector signed char);
40317      vector bool char vec_xor (vector bool char, vector bool char);
40318      vector signed char vec_xor (vector signed char, vector bool char);
40319      vector signed char vec_xor (vector signed char, vector signed char);
40320      vector unsigned char vec_xor (vector bool char, vector unsigned char);
40321      vector unsigned char vec_xor (vector unsigned char, vector bool char);
40322      vector unsigned char vec_xor (vector unsigned char,
40323                                    vector unsigned char);
40324
40325      int vec_all_eq (vector signed char, vector bool char);
40326      int vec_all_eq (vector signed char, vector signed char);
40327      int vec_all_eq (vector unsigned char, vector bool char);
40328      int vec_all_eq (vector unsigned char, vector unsigned char);
40329      int vec_all_eq (vector bool char, vector bool char);
40330      int vec_all_eq (vector bool char, vector unsigned char);
40331      int vec_all_eq (vector bool char, vector signed char);
40332      int vec_all_eq (vector signed short, vector bool short);
40333      int vec_all_eq (vector signed short, vector signed short);
40334      int vec_all_eq (vector unsigned short, vector bool short);
40335      int vec_all_eq (vector unsigned short, vector unsigned short);
40336      int vec_all_eq (vector bool short, vector bool short);
40337      int vec_all_eq (vector bool short, vector unsigned short);
40338      int vec_all_eq (vector bool short, vector signed short);
40339      int vec_all_eq (vector pixel, vector pixel);
40340      int vec_all_eq (vector signed int, vector bool int);
40341      int vec_all_eq (vector signed int, vector signed int);
40342      int vec_all_eq (vector unsigned int, vector bool int);
40343      int vec_all_eq (vector unsigned int, vector unsigned int);
40344      int vec_all_eq (vector bool int, vector bool int);
40345      int vec_all_eq (vector bool int, vector unsigned int);
40346      int vec_all_eq (vector bool int, vector signed int);
40347      int vec_all_eq (vector float, vector float);
40348
40349      int vec_all_ge (vector bool char, vector unsigned char);
40350      int vec_all_ge (vector unsigned char, vector bool char);
40351      int vec_all_ge (vector unsigned char, vector unsigned char);
40352      int vec_all_ge (vector bool char, vector signed char);
40353      int vec_all_ge (vector signed char, vector bool char);
40354      int vec_all_ge (vector signed char, vector signed char);
40355      int vec_all_ge (vector bool short, vector unsigned short);
40356      int vec_all_ge (vector unsigned short, vector bool short);
40357      int vec_all_ge (vector unsigned short, vector unsigned short);
40358      int vec_all_ge (vector signed short, vector signed short);
40359      int vec_all_ge (vector bool short, vector signed short);
40360      int vec_all_ge (vector signed short, vector bool short);
40361      int vec_all_ge (vector bool int, vector unsigned int);
40362      int vec_all_ge (vector unsigned int, vector bool int);
40363      int vec_all_ge (vector unsigned int, vector unsigned int);
40364      int vec_all_ge (vector bool int, vector signed int);
40365      int vec_all_ge (vector signed int, vector bool int);
40366      int vec_all_ge (vector signed int, vector signed int);
40367      int vec_all_ge (vector float, vector float);
40368
40369      int vec_all_gt (vector bool char, vector unsigned char);
40370      int vec_all_gt (vector unsigned char, vector bool char);
40371      int vec_all_gt (vector unsigned char, vector unsigned char);
40372      int vec_all_gt (vector bool char, vector signed char);
40373      int vec_all_gt (vector signed char, vector bool char);
40374      int vec_all_gt (vector signed char, vector signed char);
40375      int vec_all_gt (vector bool short, vector unsigned short);
40376      int vec_all_gt (vector unsigned short, vector bool short);
40377      int vec_all_gt (vector unsigned short, vector unsigned short);
40378      int vec_all_gt (vector bool short, vector signed short);
40379      int vec_all_gt (vector signed short, vector bool short);
40380      int vec_all_gt (vector signed short, vector signed short);
40381      int vec_all_gt (vector bool int, vector unsigned int);
40382      int vec_all_gt (vector unsigned int, vector bool int);
40383      int vec_all_gt (vector unsigned int, vector unsigned int);
40384      int vec_all_gt (vector bool int, vector signed int);
40385      int vec_all_gt (vector signed int, vector bool int);
40386      int vec_all_gt (vector signed int, vector signed int);
40387      int vec_all_gt (vector float, vector float);
40388
40389      int vec_all_in (vector float, vector float);
40390
40391      int vec_all_le (vector bool char, vector unsigned char);
40392      int vec_all_le (vector unsigned char, vector bool char);
40393      int vec_all_le (vector unsigned char, vector unsigned char);
40394      int vec_all_le (vector bool char, vector signed char);
40395      int vec_all_le (vector signed char, vector bool char);
40396      int vec_all_le (vector signed char, vector signed char);
40397      int vec_all_le (vector bool short, vector unsigned short);
40398      int vec_all_le (vector unsigned short, vector bool short);
40399      int vec_all_le (vector unsigned short, vector unsigned short);
40400      int vec_all_le (vector bool short, vector signed short);
40401      int vec_all_le (vector signed short, vector bool short);
40402      int vec_all_le (vector signed short, vector signed short);
40403      int vec_all_le (vector bool int, vector unsigned int);
40404      int vec_all_le (vector unsigned int, vector bool int);
40405      int vec_all_le (vector unsigned int, vector unsigned int);
40406      int vec_all_le (vector bool int, vector signed int);
40407      int vec_all_le (vector signed int, vector bool int);
40408      int vec_all_le (vector signed int, vector signed int);
40409      int vec_all_le (vector float, vector float);
40410
40411      int vec_all_lt (vector bool char, vector unsigned char);
40412      int vec_all_lt (vector unsigned char, vector bool char);
40413      int vec_all_lt (vector unsigned char, vector unsigned char);
40414      int vec_all_lt (vector bool char, vector signed char);
40415      int vec_all_lt (vector signed char, vector bool char);
40416      int vec_all_lt (vector signed char, vector signed char);
40417      int vec_all_lt (vector bool short, vector unsigned short);
40418      int vec_all_lt (vector unsigned short, vector bool short);
40419      int vec_all_lt (vector unsigned short, vector unsigned short);
40420      int vec_all_lt (vector bool short, vector signed short);
40421      int vec_all_lt (vector signed short, vector bool short);
40422      int vec_all_lt (vector signed short, vector signed short);
40423      int vec_all_lt (vector bool int, vector unsigned int);
40424      int vec_all_lt (vector unsigned int, vector bool int);
40425      int vec_all_lt (vector unsigned int, vector unsigned int);
40426      int vec_all_lt (vector bool int, vector signed int);
40427      int vec_all_lt (vector signed int, vector bool int);
40428      int vec_all_lt (vector signed int, vector signed int);
40429      int vec_all_lt (vector float, vector float);
40430
40431      int vec_all_nan (vector float);
40432
40433      int vec_all_ne (vector signed char, vector bool char);
40434      int vec_all_ne (vector signed char, vector signed char);
40435      int vec_all_ne (vector unsigned char, vector bool char);
40436      int vec_all_ne (vector unsigned char, vector unsigned char);
40437      int vec_all_ne (vector bool char, vector bool char);
40438      int vec_all_ne (vector bool char, vector unsigned char);
40439      int vec_all_ne (vector bool char, vector signed char);
40440      int vec_all_ne (vector signed short, vector bool short);
40441      int vec_all_ne (vector signed short, vector signed short);
40442      int vec_all_ne (vector unsigned short, vector bool short);
40443      int vec_all_ne (vector unsigned short, vector unsigned short);
40444      int vec_all_ne (vector bool short, vector bool short);
40445      int vec_all_ne (vector bool short, vector unsigned short);
40446      int vec_all_ne (vector bool short, vector signed short);
40447      int vec_all_ne (vector pixel, vector pixel);
40448      int vec_all_ne (vector signed int, vector bool int);
40449      int vec_all_ne (vector signed int, vector signed int);
40450      int vec_all_ne (vector unsigned int, vector bool int);
40451      int vec_all_ne (vector unsigned int, vector unsigned int);
40452      int vec_all_ne (vector bool int, vector bool int);
40453      int vec_all_ne (vector bool int, vector unsigned int);
40454      int vec_all_ne (vector bool int, vector signed int);
40455      int vec_all_ne (vector float, vector float);
40456
40457      int vec_all_nge (vector float, vector float);
40458
40459      int vec_all_ngt (vector float, vector float);
40460
40461      int vec_all_nle (vector float, vector float);
40462
40463      int vec_all_nlt (vector float, vector float);
40464
40465      int vec_all_numeric (vector float);
40466
40467      int vec_any_eq (vector signed char, vector bool char);
40468      int vec_any_eq (vector signed char, vector signed char);
40469      int vec_any_eq (vector unsigned char, vector bool char);
40470      int vec_any_eq (vector unsigned char, vector unsigned char);
40471      int vec_any_eq (vector bool char, vector bool char);
40472      int vec_any_eq (vector bool char, vector unsigned char);
40473      int vec_any_eq (vector bool char, vector signed char);
40474      int vec_any_eq (vector signed short, vector bool short);
40475      int vec_any_eq (vector signed short, vector signed short);
40476      int vec_any_eq (vector unsigned short, vector bool short);
40477      int vec_any_eq (vector unsigned short, vector unsigned short);
40478      int vec_any_eq (vector bool short, vector bool short);
40479      int vec_any_eq (vector bool short, vector unsigned short);
40480      int vec_any_eq (vector bool short, vector signed short);
40481      int vec_any_eq (vector pixel, vector pixel);
40482      int vec_any_eq (vector signed int, vector bool int);
40483      int vec_any_eq (vector signed int, vector signed int);
40484      int vec_any_eq (vector unsigned int, vector bool int);
40485      int vec_any_eq (vector unsigned int, vector unsigned int);
40486      int vec_any_eq (vector bool int, vector bool int);
40487      int vec_any_eq (vector bool int, vector unsigned int);
40488      int vec_any_eq (vector bool int, vector signed int);
40489      int vec_any_eq (vector float, vector float);
40490
40491      int vec_any_ge (vector signed char, vector bool char);
40492      int vec_any_ge (vector unsigned char, vector bool char);
40493      int vec_any_ge (vector unsigned char, vector unsigned char);
40494      int vec_any_ge (vector signed char, vector signed char);
40495      int vec_any_ge (vector bool char, vector unsigned char);
40496      int vec_any_ge (vector bool char, vector signed char);
40497      int vec_any_ge (vector unsigned short, vector bool short);
40498      int vec_any_ge (vector unsigned short, vector unsigned short);
40499      int vec_any_ge (vector signed short, vector signed short);
40500      int vec_any_ge (vector signed short, vector bool short);
40501      int vec_any_ge (vector bool short, vector unsigned short);
40502      int vec_any_ge (vector bool short, vector signed short);
40503      int vec_any_ge (vector signed int, vector bool int);
40504      int vec_any_ge (vector unsigned int, vector bool int);
40505      int vec_any_ge (vector unsigned int, vector unsigned int);
40506      int vec_any_ge (vector signed int, vector signed int);
40507      int vec_any_ge (vector bool int, vector unsigned int);
40508      int vec_any_ge (vector bool int, vector signed int);
40509      int vec_any_ge (vector float, vector float);
40510
40511      int vec_any_gt (vector bool char, vector unsigned char);
40512      int vec_any_gt (vector unsigned char, vector bool char);
40513      int vec_any_gt (vector unsigned char, vector unsigned char);
40514      int vec_any_gt (vector bool char, vector signed char);
40515      int vec_any_gt (vector signed char, vector bool char);
40516      int vec_any_gt (vector signed char, vector signed char);
40517      int vec_any_gt (vector bool short, vector unsigned short);
40518      int vec_any_gt (vector unsigned short, vector bool short);
40519      int vec_any_gt (vector unsigned short, vector unsigned short);
40520      int vec_any_gt (vector bool short, vector signed short);
40521      int vec_any_gt (vector signed short, vector bool short);
40522      int vec_any_gt (vector signed short, vector signed short);
40523      int vec_any_gt (vector bool int, vector unsigned int);
40524      int vec_any_gt (vector unsigned int, vector bool int);
40525      int vec_any_gt (vector unsigned int, vector unsigned int);
40526      int vec_any_gt (vector bool int, vector signed int);
40527      int vec_any_gt (vector signed int, vector bool int);
40528      int vec_any_gt (vector signed int, vector signed int);
40529      int vec_any_gt (vector float, vector float);
40530
40531      int vec_any_le (vector bool char, vector unsigned char);
40532      int vec_any_le (vector unsigned char, vector bool char);
40533      int vec_any_le (vector unsigned char, vector unsigned char);
40534      int vec_any_le (vector bool char, vector signed char);
40535      int vec_any_le (vector signed char, vector bool char);
40536      int vec_any_le (vector signed char, vector signed char);
40537      int vec_any_le (vector bool short, vector unsigned short);
40538      int vec_any_le (vector unsigned short, vector bool short);
40539      int vec_any_le (vector unsigned short, vector unsigned short);
40540      int vec_any_le (vector bool short, vector signed short);
40541      int vec_any_le (vector signed short, vector bool short);
40542      int vec_any_le (vector signed short, vector signed short);
40543      int vec_any_le (vector bool int, vector unsigned int);
40544      int vec_any_le (vector unsigned int, vector bool int);
40545      int vec_any_le (vector unsigned int, vector unsigned int);
40546      int vec_any_le (vector bool int, vector signed int);
40547      int vec_any_le (vector signed int, vector bool int);
40548      int vec_any_le (vector signed int, vector signed int);
40549      int vec_any_le (vector float, vector float);
40550
40551      int vec_any_lt (vector bool char, vector unsigned char);
40552      int vec_any_lt (vector unsigned char, vector bool char);
40553      int vec_any_lt (vector unsigned char, vector unsigned char);
40554      int vec_any_lt (vector bool char, vector signed char);
40555      int vec_any_lt (vector signed char, vector bool char);
40556      int vec_any_lt (vector signed char, vector signed char);
40557      int vec_any_lt (vector bool short, vector unsigned short);
40558      int vec_any_lt (vector unsigned short, vector bool short);
40559      int vec_any_lt (vector unsigned short, vector unsigned short);
40560      int vec_any_lt (vector bool short, vector signed short);
40561      int vec_any_lt (vector signed short, vector bool short);
40562      int vec_any_lt (vector signed short, vector signed short);
40563      int vec_any_lt (vector bool int, vector unsigned int);
40564      int vec_any_lt (vector unsigned int, vector bool int);
40565      int vec_any_lt (vector unsigned int, vector unsigned int);
40566      int vec_any_lt (vector bool int, vector signed int);
40567      int vec_any_lt (vector signed int, vector bool int);
40568      int vec_any_lt (vector signed int, vector signed int);
40569      int vec_any_lt (vector float, vector float);
40570
40571      int vec_any_nan (vector float);
40572
40573      int vec_any_ne (vector signed char, vector bool char);
40574      int vec_any_ne (vector signed char, vector signed char);
40575      int vec_any_ne (vector unsigned char, vector bool char);
40576      int vec_any_ne (vector unsigned char, vector unsigned char);
40577      int vec_any_ne (vector bool char, vector bool char);
40578      int vec_any_ne (vector bool char, vector unsigned char);
40579      int vec_any_ne (vector bool char, vector signed char);
40580      int vec_any_ne (vector signed short, vector bool short);
40581      int vec_any_ne (vector signed short, vector signed short);
40582      int vec_any_ne (vector unsigned short, vector bool short);
40583      int vec_any_ne (vector unsigned short, vector unsigned short);
40584      int vec_any_ne (vector bool short, vector bool short);
40585      int vec_any_ne (vector bool short, vector unsigned short);
40586      int vec_any_ne (vector bool short, vector signed short);
40587      int vec_any_ne (vector pixel, vector pixel);
40588      int vec_any_ne (vector signed int, vector bool int);
40589      int vec_any_ne (vector signed int, vector signed int);
40590      int vec_any_ne (vector unsigned int, vector bool int);
40591      int vec_any_ne (vector unsigned int, vector unsigned int);
40592      int vec_any_ne (vector bool int, vector bool int);
40593      int vec_any_ne (vector bool int, vector unsigned int);
40594      int vec_any_ne (vector bool int, vector signed int);
40595      int vec_any_ne (vector float, vector float);
40596
40597      int vec_any_nge (vector float, vector float);
40598
40599      int vec_any_ngt (vector float, vector float);
40600
40601      int vec_any_nle (vector float, vector float);
40602
40603      int vec_any_nlt (vector float, vector float);
40604
40605      int vec_any_numeric (vector float);
40606
40607      int vec_any_out (vector float, vector float);
40608
40609  If the vector/scalar (VSX) instruction set is available, the following
40610 additional functions are available:
40611
40612      vector double vec_abs (vector double);
40613      vector double vec_add (vector double, vector double);
40614      vector double vec_and (vector double, vector double);
40615      vector double vec_and (vector double, vector bool long);
40616      vector double vec_and (vector bool long, vector double);
40617      vector double vec_andc (vector double, vector double);
40618      vector double vec_andc (vector double, vector bool long);
40619      vector double vec_andc (vector bool long, vector double);
40620      vector double vec_ceil (vector double);
40621      vector bool long vec_cmpeq (vector double, vector double);
40622      vector bool long vec_cmpge (vector double, vector double);
40623      vector bool long vec_cmpgt (vector double, vector double);
40624      vector bool long vec_cmple (vector double, vector double);
40625      vector bool long vec_cmplt (vector double, vector double);
40626      vector float vec_div (vector float, vector float);
40627      vector double vec_div (vector double, vector double);
40628      vector double vec_floor (vector double);
40629      vector double vec_ld (int, const vector double *);
40630      vector double vec_ld (int, const double *);
40631      vector double vec_ldl (int, const vector double *);
40632      vector double vec_ldl (int, const double *);
40633      vector unsigned char vec_lvsl (int, const volatile double *);
40634      vector unsigned char vec_lvsr (int, const volatile double *);
40635      vector double vec_madd (vector double, vector double, vector double);
40636      vector double vec_max (vector double, vector double);
40637      vector double vec_min (vector double, vector double);
40638      vector float vec_msub (vector float, vector float, vector float);
40639      vector double vec_msub (vector double, vector double, vector double);
40640      vector float vec_mul (vector float, vector float);
40641      vector double vec_mul (vector double, vector double);
40642      vector float vec_nearbyint (vector float);
40643      vector double vec_nearbyint (vector double);
40644      vector float vec_nmadd (vector float, vector float, vector float);
40645      vector double vec_nmadd (vector double, vector double, vector double);
40646      vector double vec_nmsub (vector double, vector double, vector double);
40647      vector double vec_nor (vector double, vector double);
40648      vector double vec_or (vector double, vector double);
40649      vector double vec_or (vector double, vector bool long);
40650      vector double vec_or (vector bool long, vector double);
40651      vector double vec_perm (vector double,
40652                              vector double,
40653                              vector unsigned char);
40654      vector double vec_rint (vector double);
40655      vector double vec_recip (vector double, vector double);
40656      vector double vec_rsqrt (vector double);
40657      vector double vec_rsqrte (vector double);
40658      vector double vec_sel (vector double, vector double, vector bool long);
40659      vector double vec_sel (vector double, vector double, vector unsigned long);
40660      vector double vec_sub (vector double, vector double);
40661      vector float vec_sqrt (vector float);
40662      vector double vec_sqrt (vector double);
40663      void vec_st (vector double, int, vector double *);
40664      void vec_st (vector double, int, double *);
40665      vector double vec_trunc (vector double);
40666      vector double vec_xor (vector double, vector double);
40667      vector double vec_xor (vector double, vector bool long);
40668      vector double vec_xor (vector bool long, vector double);
40669      int vec_all_eq (vector double, vector double);
40670      int vec_all_ge (vector double, vector double);
40671      int vec_all_gt (vector double, vector double);
40672      int vec_all_le (vector double, vector double);
40673      int vec_all_lt (vector double, vector double);
40674      int vec_all_nan (vector double);
40675      int vec_all_ne (vector double, vector double);
40676      int vec_all_nge (vector double, vector double);
40677      int vec_all_ngt (vector double, vector double);
40678      int vec_all_nle (vector double, vector double);
40679      int vec_all_nlt (vector double, vector double);
40680      int vec_all_numeric (vector double);
40681      int vec_any_eq (vector double, vector double);
40682      int vec_any_ge (vector double, vector double);
40683      int vec_any_gt (vector double, vector double);
40684      int vec_any_le (vector double, vector double);
40685      int vec_any_lt (vector double, vector double);
40686      int vec_any_nan (vector double);
40687      int vec_any_ne (vector double, vector double);
40688      int vec_any_nge (vector double, vector double);
40689      int vec_any_ngt (vector double, vector double);
40690      int vec_any_nle (vector double, vector double);
40691      int vec_any_nlt (vector double, vector double);
40692      int vec_any_numeric (vector double);
40693
40694      vector double vec_vsx_ld (int, const vector double *);
40695      vector double vec_vsx_ld (int, const double *);
40696      vector float vec_vsx_ld (int, const vector float *);
40697      vector float vec_vsx_ld (int, const float *);
40698      vector bool int vec_vsx_ld (int, const vector bool int *);
40699      vector signed int vec_vsx_ld (int, const vector signed int *);
40700      vector signed int vec_vsx_ld (int, const int *);
40701      vector signed int vec_vsx_ld (int, const long *);
40702      vector unsigned int vec_vsx_ld (int, const vector unsigned int *);
40703      vector unsigned int vec_vsx_ld (int, const unsigned int *);
40704      vector unsigned int vec_vsx_ld (int, const unsigned long *);
40705      vector bool short vec_vsx_ld (int, const vector bool short *);
40706      vector pixel vec_vsx_ld (int, const vector pixel *);
40707      vector signed short vec_vsx_ld (int, const vector signed short *);
40708      vector signed short vec_vsx_ld (int, const short *);
40709      vector unsigned short vec_vsx_ld (int, const vector unsigned short *);
40710      vector unsigned short vec_vsx_ld (int, const unsigned short *);
40711      vector bool char vec_vsx_ld (int, const vector bool char *);
40712      vector signed char vec_vsx_ld (int, const vector signed char *);
40713      vector signed char vec_vsx_ld (int, const signed char *);
40714      vector unsigned char vec_vsx_ld (int, const vector unsigned char *);
40715      vector unsigned char vec_vsx_ld (int, const unsigned char *);
40716
40717      void vec_vsx_st (vector double, int, vector double *);
40718      void vec_vsx_st (vector double, int, double *);
40719      void vec_vsx_st (vector float, int, vector float *);
40720      void vec_vsx_st (vector float, int, float *);
40721      void vec_vsx_st (vector signed int, int, vector signed int *);
40722      void vec_vsx_st (vector signed int, int, int *);
40723      void vec_vsx_st (vector unsigned int, int, vector unsigned int *);
40724      void vec_vsx_st (vector unsigned int, int, unsigned int *);
40725      void vec_vsx_st (vector bool int, int, vector bool int *);
40726      void vec_vsx_st (vector bool int, int, unsigned int *);
40727      void vec_vsx_st (vector bool int, int, int *);
40728      void vec_vsx_st (vector signed short, int, vector signed short *);
40729      void vec_vsx_st (vector signed short, int, short *);
40730      void vec_vsx_st (vector unsigned short, int, vector unsigned short *);
40731      void vec_vsx_st (vector unsigned short, int, unsigned short *);
40732      void vec_vsx_st (vector bool short, int, vector bool short *);
40733      void vec_vsx_st (vector bool short, int, unsigned short *);
40734      void vec_vsx_st (vector pixel, int, vector pixel *);
40735      void vec_vsx_st (vector pixel, int, unsigned short *);
40736      void vec_vsx_st (vector pixel, int, short *);
40737      void vec_vsx_st (vector bool short, int, short *);
40738      void vec_vsx_st (vector signed char, int, vector signed char *);
40739      void vec_vsx_st (vector signed char, int, signed char *);
40740      void vec_vsx_st (vector unsigned char, int, vector unsigned char *);
40741      void vec_vsx_st (vector unsigned char, int, unsigned char *);
40742      void vec_vsx_st (vector bool char, int, vector bool char *);
40743      void vec_vsx_st (vector bool char, int, unsigned char *);
40744      void vec_vsx_st (vector bool char, int, signed char *);
40745
40746  Note that the `vec_ld' and `vec_st' built-in functions always generate
40747 the AltiVec `LVX' and `STVX' instructions even if the VSX instruction
40748 set is available.  The `vec_vsx_ld' and `vec_vsx_st' built-in functions
40749 always generate the VSX `LXVD2X', `LXVW4X', `STXVD2X', and `STXVW4X'
40750 instructions.
40751
40752 \1f
40753 File: gcc.info,  Node: RX Built-in Functions,  Next: SH Built-in Functions,  Prev: PowerPC AltiVec/VSX Built-in Functions,  Up: Target Builtins
40754
40755 6.56.16 RX Built-in Functions
40756 -----------------------------
40757
40758 GCC supports some of the RX instructions which cannot be expressed in
40759 the C programming language via the use of built-in functions.  The
40760 following functions are supported:
40761
40762  -- Built-in Function: void __builtin_rx_brk (void)
40763      Generates the `brk' machine instruction.
40764
40765  -- Built-in Function: void __builtin_rx_clrpsw (int)
40766      Generates the `clrpsw' machine instruction to clear the specified
40767      bit in the processor status word.
40768
40769  -- Built-in Function: void __builtin_rx_int (int)
40770      Generates the `int' machine instruction to generate an interrupt
40771      with the specified value.
40772
40773  -- Built-in Function: void __builtin_rx_machi (int, int)
40774      Generates the `machi' machine instruction to add the result of
40775      multiplying the top 16 bits of the two arguments into the
40776      accumulator.
40777
40778  -- Built-in Function: void __builtin_rx_maclo (int, int)
40779      Generates the `maclo' machine instruction to add the result of
40780      multiplying the bottom 16 bits of the two arguments into the
40781      accumulator.
40782
40783  -- Built-in Function: void __builtin_rx_mulhi (int, int)
40784      Generates the `mulhi' machine instruction to place the result of
40785      multiplying the top 16 bits of the two arguments into the
40786      accumulator.
40787
40788  -- Built-in Function: void __builtin_rx_mullo (int, int)
40789      Generates the `mullo' machine instruction to place the result of
40790      multiplying the bottom 16 bits of the two arguments into the
40791      accumulator.
40792
40793  -- Built-in Function: int __builtin_rx_mvfachi (void)
40794      Generates the `mvfachi' machine instruction to read the top 32
40795      bits of the accumulator.
40796
40797  -- Built-in Function: int __builtin_rx_mvfacmi (void)
40798      Generates the `mvfacmi' machine instruction to read the middle 32
40799      bits of the accumulator.
40800
40801  -- Built-in Function: int __builtin_rx_mvfc (int)
40802      Generates the `mvfc' machine instruction which reads the control
40803      register specified in its argument and returns its value.
40804
40805  -- Built-in Function: void __builtin_rx_mvtachi (int)
40806      Generates the `mvtachi' machine instruction to set the top 32 bits
40807      of the accumulator.
40808
40809  -- Built-in Function: void __builtin_rx_mvtaclo (int)
40810      Generates the `mvtaclo' machine instruction to set the bottom 32
40811      bits of the accumulator.
40812
40813  -- Built-in Function: void __builtin_rx_mvtc (int reg, int val)
40814      Generates the `mvtc' machine instruction which sets control
40815      register number `reg' to `val'.
40816
40817  -- Built-in Function: void __builtin_rx_mvtipl (int)
40818      Generates the `mvtipl' machine instruction set the interrupt
40819      priority level.
40820
40821  -- Built-in Function: void __builtin_rx_racw (int)
40822      Generates the `racw' machine instruction to round the accumulator
40823      according to the specified mode.
40824
40825  -- Built-in Function: int __builtin_rx_revw (int)
40826      Generates the `revw' machine instruction which swaps the bytes in
40827      the argument so that bits 0-7 now occupy bits 8-15 and vice versa,
40828      and also bits 16-23 occupy bits 24-31 and vice versa.
40829
40830  -- Built-in Function: void __builtin_rx_rmpa (void)
40831      Generates the `rmpa' machine instruction which initiates a
40832      repeated multiply and accumulate sequence.
40833
40834  -- Built-in Function: void __builtin_rx_round (float)
40835      Generates the `round' machine instruction which returns the
40836      floating-point argument rounded according to the current rounding
40837      mode set in the floating-point status word register.
40838
40839  -- Built-in Function: int __builtin_rx_sat (int)
40840      Generates the `sat' machine instruction which returns the
40841      saturated value of the argument.
40842
40843  -- Built-in Function: void __builtin_rx_setpsw (int)
40844      Generates the `setpsw' machine instruction to set the specified
40845      bit in the processor status word.
40846
40847  -- Built-in Function: void __builtin_rx_wait (void)
40848      Generates the `wait' machine instruction.
40849
40850 \1f
40851 File: gcc.info,  Node: SH Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: RX Built-in Functions,  Up: Target Builtins
40852
40853 6.56.17 SH Built-in Functions
40854 -----------------------------
40855
40856 The following built-in functions are supported on the SH1, SH2, SH3 and
40857 SH4 families of processors:
40858
40859  -- Built-in Function: void __builtin_set_thread_pointer (void *PTR)
40860      Sets the `GBR' register to the specified value PTR.  This is
40861      usually used by system code that manages threads and execution
40862      contexts.  The compiler normally does not generate code that
40863      modifies the contents of `GBR' and thus the value is preserved
40864      across function calls.  Changing the `GBR' value in user code must
40865      be done with caution, since the compiler might use `GBR' in order
40866      to access thread local variables.
40867
40868
40869  -- Built-in Function: void * __builtin_thread_pointer (void)
40870      Returns the value that is currently set in the `GBR' register.
40871      Memory loads and stores that use the thread pointer as a base
40872      address are turned into `GBR' based displacement loads and stores,
40873      if possible.  For example:
40874           struct my_tcb
40875           {
40876              int a, b, c, d, e;
40877           };
40878
40879           int get_tcb_value (void)
40880           {
40881             // Generate `mov.l @(8,gbr),r0' instruction
40882             return ((my_tcb*)__builtin_thread_pointer ())->c;
40883           }
40884
40885 \1f
40886 File: gcc.info,  Node: SPARC VIS Built-in Functions,  Next: SPU Built-in Functions,  Prev: SH Built-in Functions,  Up: Target Builtins
40887
40888 6.56.18 SPARC VIS Built-in Functions
40889 ------------------------------------
40890
40891 GCC supports SIMD operations on the SPARC using both the generic vector
40892 extensions (*note Vector Extensions::) as well as built-in functions for
40893 the SPARC Visual Instruction Set (VIS).  When you use the `-mvis'
40894 switch, the VIS extension is exposed as the following built-in
40895 functions:
40896
40897      typedef int v1si __attribute__ ((vector_size (4)));
40898      typedef int v2si __attribute__ ((vector_size (8)));
40899      typedef short v4hi __attribute__ ((vector_size (8)));
40900      typedef short v2hi __attribute__ ((vector_size (4)));
40901      typedef unsigned char v8qi __attribute__ ((vector_size (8)));
40902      typedef unsigned char v4qi __attribute__ ((vector_size (4)));
40903
40904      void __builtin_vis_write_gsr (int64_t);
40905      int64_t __builtin_vis_read_gsr (void);
40906
40907      void * __builtin_vis_alignaddr (void *, long);
40908      void * __builtin_vis_alignaddrl (void *, long);
40909      int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
40910      v2si __builtin_vis_faligndatav2si (v2si, v2si);
40911      v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
40912      v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
40913
40914      v4hi __builtin_vis_fexpand (v4qi);
40915
40916      v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
40917      v4hi __builtin_vis_fmul8x16au (v4qi, v2hi);
40918      v4hi __builtin_vis_fmul8x16al (v4qi, v2hi);
40919      v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
40920      v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
40921      v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
40922      v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
40923
40924      v4qi __builtin_vis_fpack16 (v4hi);
40925      v8qi __builtin_vis_fpack32 (v2si, v8qi);
40926      v2hi __builtin_vis_fpackfix (v2si);
40927      v8qi __builtin_vis_fpmerge (v4qi, v4qi);
40928
40929      int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
40930
40931      long __builtin_vis_edge8 (void *, void *);
40932      long __builtin_vis_edge8l (void *, void *);
40933      long __builtin_vis_edge16 (void *, void *);
40934      long __builtin_vis_edge16l (void *, void *);
40935      long __builtin_vis_edge32 (void *, void *);
40936      long __builtin_vis_edge32l (void *, void *);
40937
40938      long __builtin_vis_fcmple16 (v4hi, v4hi);
40939      long __builtin_vis_fcmple32 (v2si, v2si);
40940      long __builtin_vis_fcmpne16 (v4hi, v4hi);
40941      long __builtin_vis_fcmpne32 (v2si, v2si);
40942      long __builtin_vis_fcmpgt16 (v4hi, v4hi);
40943      long __builtin_vis_fcmpgt32 (v2si, v2si);
40944      long __builtin_vis_fcmpeq16 (v4hi, v4hi);
40945      long __builtin_vis_fcmpeq32 (v2si, v2si);
40946
40947      v4hi __builtin_vis_fpadd16 (v4hi, v4hi);
40948      v2hi __builtin_vis_fpadd16s (v2hi, v2hi);
40949      v2si __builtin_vis_fpadd32 (v2si, v2si);
40950      v1si __builtin_vis_fpadd32s (v1si, v1si);
40951      v4hi __builtin_vis_fpsub16 (v4hi, v4hi);
40952      v2hi __builtin_vis_fpsub16s (v2hi, v2hi);
40953      v2si __builtin_vis_fpsub32 (v2si, v2si);
40954      v1si __builtin_vis_fpsub32s (v1si, v1si);
40955
40956      long __builtin_vis_array8 (long, long);
40957      long __builtin_vis_array16 (long, long);
40958      long __builtin_vis_array32 (long, long);
40959
40960  When you use the `-mvis2' switch, the VIS version 2.0 built-in
40961 functions also become available:
40962
40963      long __builtin_vis_bmask (long, long);
40964      int64_t __builtin_vis_bshuffledi (int64_t, int64_t);
40965      v2si __builtin_vis_bshufflev2si (v2si, v2si);
40966      v4hi __builtin_vis_bshufflev2si (v4hi, v4hi);
40967      v8qi __builtin_vis_bshufflev2si (v8qi, v8qi);
40968
40969      long __builtin_vis_edge8n (void *, void *);
40970      long __builtin_vis_edge8ln (void *, void *);
40971      long __builtin_vis_edge16n (void *, void *);
40972      long __builtin_vis_edge16ln (void *, void *);
40973      long __builtin_vis_edge32n (void *, void *);
40974      long __builtin_vis_edge32ln (void *, void *);
40975
40976  When you use the `-mvis3' switch, the VIS version 3.0 built-in
40977 functions also become available:
40978
40979      void __builtin_vis_cmask8 (long);
40980      void __builtin_vis_cmask16 (long);
40981      void __builtin_vis_cmask32 (long);
40982
40983      v4hi __builtin_vis_fchksm16 (v4hi, v4hi);
40984
40985      v4hi __builtin_vis_fsll16 (v4hi, v4hi);
40986      v4hi __builtin_vis_fslas16 (v4hi, v4hi);
40987      v4hi __builtin_vis_fsrl16 (v4hi, v4hi);
40988      v4hi __builtin_vis_fsra16 (v4hi, v4hi);
40989      v2si __builtin_vis_fsll16 (v2si, v2si);
40990      v2si __builtin_vis_fslas16 (v2si, v2si);
40991      v2si __builtin_vis_fsrl16 (v2si, v2si);
40992      v2si __builtin_vis_fsra16 (v2si, v2si);
40993
40994      long __builtin_vis_pdistn (v8qi, v8qi);
40995
40996      v4hi __builtin_vis_fmean16 (v4hi, v4hi);
40997
40998      int64_t __builtin_vis_fpadd64 (int64_t, int64_t);
40999      int64_t __builtin_vis_fpsub64 (int64_t, int64_t);
41000
41001      v4hi __builtin_vis_fpadds16 (v4hi, v4hi);
41002      v2hi __builtin_vis_fpadds16s (v2hi, v2hi);
41003      v4hi __builtin_vis_fpsubs16 (v4hi, v4hi);
41004      v2hi __builtin_vis_fpsubs16s (v2hi, v2hi);
41005      v2si __builtin_vis_fpadds32 (v2si, v2si);
41006      v1si __builtin_vis_fpadds32s (v1si, v1si);
41007      v2si __builtin_vis_fpsubs32 (v2si, v2si);
41008      v1si __builtin_vis_fpsubs32s (v1si, v1si);
41009
41010      long __builtin_vis_fucmple8 (v8qi, v8qi);
41011      long __builtin_vis_fucmpne8 (v8qi, v8qi);
41012      long __builtin_vis_fucmpgt8 (v8qi, v8qi);
41013      long __builtin_vis_fucmpeq8 (v8qi, v8qi);
41014
41015      float __builtin_vis_fhadds (float, float);
41016      double __builtin_vis_fhaddd (double, double);
41017      float __builtin_vis_fhsubs (float, float);
41018      double __builtin_vis_fhsubd (double, double);
41019      float __builtin_vis_fnhadds (float, float);
41020      double __builtin_vis_fnhaddd (double, double);
41021
41022      int64_t __builtin_vis_umulxhi (int64_t, int64_t);
41023      int64_t __builtin_vis_xmulx (int64_t, int64_t);
41024      int64_t __builtin_vis_xmulxhi (int64_t, int64_t);
41025
41026 \1f
41027 File: gcc.info,  Node: SPU Built-in Functions,  Next: TI C6X Built-in Functions,  Prev: SPARC VIS Built-in Functions,  Up: Target Builtins
41028
41029 6.56.19 SPU Built-in Functions
41030 ------------------------------
41031
41032 GCC provides extensions for the SPU processor as described in the
41033 Sony/Toshiba/IBM SPU Language Extensions Specification, which can be
41034 found at `http://cell.scei.co.jp/' or
41035 `http://www.ibm.com/developerworks/power/cell/'.  GCC's implementation
41036 differs in several ways.
41037
41038    * The optional extension of specifying vector constants in
41039      parentheses is not supported.
41040
41041    * A vector initializer requires no cast if the vector constant is of
41042      the same type as the variable it is initializing.
41043
41044    * If `signed' or `unsigned' is omitted, the signedness of the vector
41045      type is the default signedness of the base type.  The default
41046      varies depending on the operating system, so a portable program
41047      should always specify the signedness.
41048
41049    * By default, the keyword `__vector' is added. The macro `vector' is
41050      defined in `<spu_intrinsics.h>' and can be undefined.
41051
41052    * GCC allows using a `typedef' name as the type specifier for a
41053      vector type.
41054
41055    * For C, overloaded functions are implemented with macros so the
41056      following does not work:
41057
41058             spu_add ((vector signed int){1, 2, 3, 4}, foo);
41059
41060      Since `spu_add' is a macro, the vector constant in the example is
41061      treated as four separate arguments.  Wrap the entire argument in
41062      parentheses for this to work.
41063
41064    * The extended version of `__builtin_expect' is not supported.
41065
41066
41067  _Note:_ Only the interface described in the aforementioned
41068 specification is supported. Internally, GCC uses built-in functions to
41069 implement the required functionality, but these are not supported and
41070 are subject to change without notice.
41071
41072 \1f
41073 File: gcc.info,  Node: TI C6X Built-in Functions,  Next: TILE-Gx Built-in Functions,  Prev: SPU Built-in Functions,  Up: Target Builtins
41074
41075 6.56.20 TI C6X Built-in Functions
41076 ---------------------------------
41077
41078 GCC provides intrinsics to access certain instructions of the TI C6X
41079 processors.  These intrinsics, listed below, are available after
41080 inclusion of the `c6x_intrinsics.h' header file.  They map directly to
41081 C6X instructions.
41082
41083
41084      int _sadd (int, int)
41085      int _ssub (int, int)
41086      int _sadd2 (int, int)
41087      int _ssub2 (int, int)
41088      long long _mpy2 (int, int)
41089      long long _smpy2 (int, int)
41090      int _add4 (int, int)
41091      int _sub4 (int, int)
41092      int _saddu4 (int, int)
41093
41094      int _smpy (int, int)
41095      int _smpyh (int, int)
41096      int _smpyhl (int, int)
41097      int _smpylh (int, int)
41098
41099      int _sshl (int, int)
41100      int _subc (int, int)
41101
41102      int _avg2 (int, int)
41103      int _avgu4 (int, int)
41104
41105      int _clrr (int, int)
41106      int _extr (int, int)
41107      int _extru (int, int)
41108      int _abs (int)
41109      int _abs2 (int)
41110
41111 \1f
41112 File: gcc.info,  Node: TILE-Gx Built-in Functions,  Next: TILEPro Built-in Functions,  Prev: TI C6X Built-in Functions,  Up: Target Builtins
41113
41114 6.56.21 TILE-Gx Built-in Functions
41115 ----------------------------------
41116
41117 GCC provides intrinsics to access every instruction of the TILE-Gx
41118 processor.  The intrinsics are of the form:
41119
41120
41121      unsigned long long __insn_OP (...)
41122
41123  Where OP is the name of the instruction.  Refer to the ISA manual for
41124 the complete list of instructions.
41125
41126  GCC also provides intrinsics to directly access the network registers.
41127 The intrinsics are:
41128
41129
41130      unsigned long long __tile_idn0_receive (void)
41131      unsigned long long __tile_idn1_receive (void)
41132      unsigned long long __tile_udn0_receive (void)
41133      unsigned long long __tile_udn1_receive (void)
41134      unsigned long long __tile_udn2_receive (void)
41135      unsigned long long __tile_udn3_receive (void)
41136      void __tile_idn_send (unsigned long long)
41137      void __tile_udn_send (unsigned long long)
41138
41139  The intrinsic `void __tile_network_barrier (void)' is used to
41140 guarantee that no network operations before it are reordered with those
41141 after it.
41142
41143 \1f
41144 File: gcc.info,  Node: TILEPro Built-in Functions,  Prev: TILE-Gx Built-in Functions,  Up: Target Builtins
41145
41146 6.56.22 TILEPro Built-in Functions
41147 ----------------------------------
41148
41149 GCC provides intrinsics to access every instruction of the TILEPro
41150 processor.  The intrinsics are of the form:
41151
41152
41153      unsigned __insn_OP (...)
41154
41155 where OP is the name of the instruction.  Refer to the ISA manual for
41156 the complete list of instructions.
41157
41158  GCC also provides intrinsics to directly access the network registers.
41159 The intrinsics are:
41160
41161
41162      unsigned __tile_idn0_receive (void)
41163      unsigned __tile_idn1_receive (void)
41164      unsigned __tile_sn_receive (void)
41165      unsigned __tile_udn0_receive (void)
41166      unsigned __tile_udn1_receive (void)
41167      unsigned __tile_udn2_receive (void)
41168      unsigned __tile_udn3_receive (void)
41169      void __tile_idn_send (unsigned)
41170      void __tile_sn_send (unsigned)
41171      void __tile_udn_send (unsigned)
41172
41173  The intrinsic `void __tile_network_barrier (void)' is used to
41174 guarantee that no network operations before it are reordered with those
41175 after it.
41176
41177 \1f
41178 File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions
41179
41180 6.57 Format Checks Specific to Particular Target Machines
41181 =========================================================
41182
41183 For some target machines, GCC supports additional options to the format
41184 attribute (*note Declaring Attributes of Functions: Function
41185 Attributes.).
41186
41187 * Menu:
41188
41189 * Solaris Format Checks::
41190 * Darwin Format Checks::
41191
41192 \1f
41193 File: gcc.info,  Node: Solaris Format Checks,  Next: Darwin Format Checks,  Up: Target Format Checks
41194
41195 6.57.1 Solaris Format Checks
41196 ----------------------------
41197
41198 Solaris targets support the `cmn_err' (or `__cmn_err__') format check.
41199 `cmn_err' accepts a subset of the standard `printf' conversions, and
41200 the two-argument `%b' conversion for displaying bit-fields.  See the
41201 Solaris man page for `cmn_err' for more information.
41202
41203 \1f
41204 File: gcc.info,  Node: Darwin Format Checks,  Prev: Solaris Format Checks,  Up: Target Format Checks
41205
41206 6.57.2 Darwin Format Checks
41207 ---------------------------
41208
41209 Darwin targets support the `CFString' (or `__CFString__') in the format
41210 attribute context.  Declarations made with such attribution are parsed
41211 for correct syntax and format argument types.  However, parsing of the
41212 format string itself is currently undefined and is not carried out by
41213 this version of the compiler.
41214
41215  Additionally, `CFStringRefs' (defined by the `CoreFoundation' headers)
41216 may also be used as format arguments.  Note that the relevant headers
41217 are only likely to be available on Darwin (OSX) installations.  On such
41218 installations, the XCode and system documentation provide descriptions
41219 of `CFString', `CFStringRefs' and associated functions.
41220
41221 \1f
41222 File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
41223
41224 6.58 Pragmas Accepted by GCC
41225 ============================
41226
41227 GCC supports several types of pragmas, primarily in order to compile
41228 code originally written for other compilers.  Note that in general we
41229 do not recommend the use of pragmas; *Note Function Attributes::, for
41230 further explanation.
41231
41232 * Menu:
41233
41234 * ARM Pragmas::
41235 * M32C Pragmas::
41236 * MeP Pragmas::
41237 * RS/6000 and PowerPC Pragmas::
41238 * Darwin Pragmas::
41239 * Solaris Pragmas::
41240 * Symbol-Renaming Pragmas::
41241 * Structure-Packing Pragmas::
41242 * Weak Pragmas::
41243 * Diagnostic Pragmas::
41244 * Visibility Pragmas::
41245 * Push/Pop Macro Pragmas::
41246 * Function Specific Option Pragmas::
41247
41248 \1f
41249 File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Up: Pragmas
41250
41251 6.58.1 ARM Pragmas
41252 ------------------
41253
41254 The ARM target defines pragmas for controlling the default addition of
41255 `long_call' and `short_call' attributes to functions.  *Note Function
41256 Attributes::, for information about the effects of these attributes.
41257
41258 `long_calls'
41259      Set all subsequent functions to have the `long_call' attribute.
41260
41261 `no_long_calls'
41262      Set all subsequent functions to have the `short_call' attribute.
41263
41264 `long_calls_off'
41265      Do not affect the `long_call' or `short_call' attributes of
41266      subsequent functions.
41267
41268 \1f
41269 File: gcc.info,  Node: M32C Pragmas,  Next: MeP Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
41270
41271 6.58.2 M32C Pragmas
41272 -------------------
41273
41274 `GCC memregs NUMBER'
41275      Overrides the command-line option `-memregs=' for the current
41276      file.  Use with care!  This pragma must be before any function in
41277      the file, and mixing different memregs values in different objects
41278      may make them incompatible.  This pragma is useful when a
41279      performance-critical function uses a memreg for temporary values,
41280      as it may allow you to reduce the number of memregs used.
41281
41282 `ADDRESS NAME ADDRESS'
41283      For any declared symbols matching NAME, this does three things to
41284      that symbol: it forces the symbol to be located at the given
41285      address (a number), it forces the symbol to be volatile, and it
41286      changes the symbol's scope to be static.  This pragma exists for
41287      compatibility with other compilers, but note that the common
41288      `1234H' numeric syntax is not supported (use `0x1234' instead).
41289      Example:
41290
41291           #pragma ADDRESS port3 0x103
41292           char port3;
41293
41294
41295 \1f
41296 File: gcc.info,  Node: MeP Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: M32C Pragmas,  Up: Pragmas
41297
41298 6.58.3 MeP Pragmas
41299 ------------------
41300
41301 `custom io_volatile (on|off)'
41302      Overrides the command-line option `-mio-volatile' for the current
41303      file.  Note that for compatibility with future GCC releases, this
41304      option should only be used once before any `io' variables in each
41305      file.
41306
41307 `GCC coprocessor available REGISTERS'
41308      Specifies which coprocessor registers are available to the register
41309      allocator.  REGISTERS may be a single register, register range
41310      separated by ellipses, or comma-separated list of those.  Example:
41311
41312           #pragma GCC coprocessor available $c0...$c10, $c28
41313
41314 `GCC coprocessor call_saved REGISTERS'
41315      Specifies which coprocessor registers are to be saved and restored
41316      by any function using them.  REGISTERS may be a single register,
41317      register range separated by ellipses, or comma-separated list of
41318      those.  Example:
41319
41320           #pragma GCC coprocessor call_saved $c4...$c6, $c31
41321
41322 `GCC coprocessor subclass '(A|B|C|D)' = REGISTERS'
41323      Creates and defines a register class.  These register classes can
41324      be used by inline `asm' constructs.  REGISTERS may be a single
41325      register, register range separated by ellipses, or comma-separated
41326      list of those.  Example:
41327
41328           #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6
41329
41330           asm ("cpfoo %0" : "=B" (x));
41331
41332 `GCC disinterrupt NAME , NAME ...'
41333      For the named functions, the compiler adds code to disable
41334      interrupts for the duration of those functions.  If any functions
41335      so named are not encountered in the source, a warning is emitted
41336      that the pragma is not used.  Examples:
41337
41338           #pragma disinterrupt foo
41339           #pragma disinterrupt bar, grill
41340           int foo () { ... }
41341
41342 `GCC call NAME , NAME ...'
41343      For the named functions, the compiler always uses a
41344      register-indirect call model when calling the named functions.
41345      Examples:
41346
41347           extern int foo ();
41348           #pragma call foo
41349
41350
41351 \1f
41352 File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: Darwin Pragmas,  Prev: MeP Pragmas,  Up: Pragmas
41353
41354 6.58.4 RS/6000 and PowerPC Pragmas
41355 ----------------------------------
41356
41357 The RS/6000 and PowerPC targets define one pragma for controlling
41358 whether or not the `longcall' attribute is added to function
41359 declarations by default.  This pragma overrides the `-mlongcall'
41360 option, but not the `longcall' and `shortcall' attributes.  *Note
41361 RS/6000 and PowerPC Options::, for more information about when long
41362 calls are and are not necessary.
41363
41364 `longcall (1)'
41365      Apply the `longcall' attribute to all subsequent function
41366      declarations.
41367
41368 `longcall (0)'
41369      Do not apply the `longcall' attribute to subsequent function
41370      declarations.
41371
41372 \1f
41373 File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
41374
41375 6.58.5 Darwin Pragmas
41376 ---------------------
41377
41378 The following pragmas are available for all architectures running the
41379 Darwin operating system.  These are useful for compatibility with other
41380 Mac OS compilers.
41381
41382 `mark TOKENS...'
41383      This pragma is accepted, but has no effect.
41384
41385 `options align=ALIGNMENT'
41386      This pragma sets the alignment of fields in structures.  The
41387      values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or
41388      `power', to emulate PowerPC alignment.  Uses of this pragma nest
41389      properly; to restore the previous setting, use `reset' for the
41390      ALIGNMENT.
41391
41392 `segment TOKENS...'
41393      This pragma is accepted, but has no effect.
41394
41395 `unused (VAR [, VAR]...)'
41396      This pragma declares variables to be possibly unused.  GCC does not
41397      produce warnings for the listed variables.  The effect is similar
41398      to that of the `unused' attribute, except that this pragma may
41399      appear anywhere within the variables' scopes.
41400
41401 \1f
41402 File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
41403
41404 6.58.6 Solaris Pragmas
41405 ----------------------
41406
41407 The Solaris target supports `#pragma redefine_extname' (*note
41408 Symbol-Renaming Pragmas::).  It also supports additional `#pragma'
41409 directives for compatibility with the system compiler.
41410
41411 `align ALIGNMENT (VARIABLE [, VARIABLE]...)'
41412      Increase the minimum alignment of each VARIABLE to ALIGNMENT.
41413      This is the same as GCC's `aligned' attribute *note Variable
41414      Attributes::).  Macro expansion occurs on the arguments to this
41415      pragma when compiling C and Objective-C.  It does not currently
41416      occur when compiling C++, but this is a bug which may be fixed in
41417      a future release.
41418
41419 `fini (FUNCTION [, FUNCTION]...)'
41420      This pragma causes each listed FUNCTION to be called after main,
41421      or during shared module unloading, by adding a call to the `.fini'
41422      section.
41423
41424 `init (FUNCTION [, FUNCTION]...)'
41425      This pragma causes each listed FUNCTION to be called during
41426      initialization (before `main') or during shared module loading, by
41427      adding a call to the `.init' section.
41428
41429
41430 \1f
41431 File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Packing Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
41432
41433 6.58.7 Symbol-Renaming Pragmas
41434 ------------------------------
41435
41436 For compatibility with the Solaris system headers, GCC supports two
41437 `#pragma' directives that change the name used in assembly for a given
41438 declaration. To get this effect on all platforms supported by GCC, use
41439 the asm labels extension (*note Asm Labels::).
41440
41441 `redefine_extname OLDNAME NEWNAME'
41442      This pragma gives the C function OLDNAME the assembly symbol
41443      NEWNAME.  The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' is
41444      defined if this pragma is available (currently on all platforms).
41445
41446  This pragma and the asm labels extension interact in a complicated
41447 manner.  Here are some corner cases you may want to be aware of.
41448
41449   1. Both pragmas silently apply only to declarations with external
41450      linkage.  Asm labels do not have this restriction.
41451
41452   2. In C++, both pragmas silently apply only to declarations with "C"
41453      linkage.  Again, asm labels do not have this restriction.
41454
41455   3. If any of the three ways of changing the assembly name of a
41456      declaration is applied to a declaration whose assembly name has
41457      already been determined (either by a previous use of one of these
41458      features, or because the compiler needed the assembly name in
41459      order to generate code), and the new name is different, a warning
41460      issues and the name does not change.
41461
41462   4. The OLDNAME used by `#pragma redefine_extname' is always the
41463      C-language name.
41464
41465 \1f
41466 File: gcc.info,  Node: Structure-Packing Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas
41467
41468 6.58.8 Structure-Packing Pragmas
41469 --------------------------------
41470
41471 For compatibility with Microsoft Windows compilers, GCC supports a set
41472 of `#pragma' directives that change the maximum alignment of members of
41473 structures (other than zero-width bit-fields), unions, and classes
41474 subsequently defined. The N value below always is required to be a
41475 small power of two and specifies the new alignment in bytes.
41476
41477   1. `#pragma pack(N)' simply sets the new alignment.
41478
41479   2. `#pragma pack()' sets the alignment to the one that was in effect
41480      when compilation started (see also command-line option
41481      `-fpack-struct[=N]' *note Code Gen Options::).
41482
41483   3. `#pragma pack(push[,N])' pushes the current alignment setting on
41484      an internal stack and then optionally sets the new alignment.
41485
41486   4. `#pragma pack(pop)' restores the alignment setting to the one
41487      saved at the top of the internal stack (and removes that stack
41488      entry).  Note that `#pragma pack([N])' does not influence this
41489      internal stack; thus it is possible to have `#pragma pack(push)'
41490      followed by multiple `#pragma pack(N)' instances and finalized by
41491      a single `#pragma pack(pop)'.
41492
41493  Some targets, e.g. i386 and PowerPC, support the `ms_struct' `#pragma'
41494 which lays out a structure as the documented `__attribute__
41495 ((ms_struct))'.
41496   1. `#pragma ms_struct on' turns on the layout for structures declared.
41497
41498   2. `#pragma ms_struct off' turns off the layout for structures
41499      declared.
41500
41501   3. `#pragma ms_struct reset' goes back to the default layout.
41502
41503 \1f
41504 File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Packing Pragmas,  Up: Pragmas
41505
41506 6.58.9 Weak Pragmas
41507 -------------------
41508
41509 For compatibility with SVR4, GCC supports a set of `#pragma' directives
41510 for declaring symbols to be weak, and defining weak aliases.
41511
41512 `#pragma weak SYMBOL'
41513      This pragma declares SYMBOL to be weak, as if the declaration had
41514      the attribute of the same name.  The pragma may appear before or
41515      after the declaration of SYMBOL.  It is not an error for SYMBOL to
41516      never be defined at all.
41517
41518 `#pragma weak SYMBOL1 = SYMBOL2'
41519      This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
41520      an error if SYMBOL2 is not defined in the current translation unit.
41521
41522 \1f
41523 File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas
41524
41525 6.58.10 Diagnostic Pragmas
41526 --------------------------
41527
41528 GCC allows the user to selectively enable or disable certain types of
41529 diagnostics, and change the kind of the diagnostic.  For example, a
41530 project's policy might require that all sources compile with `-Werror'
41531 but certain files might have exceptions allowing specific types of
41532 warnings.  Or, a project might selectively enable diagnostics and treat
41533 them as errors depending on which preprocessor macros are defined.
41534
41535 `#pragma GCC diagnostic KIND OPTION'
41536      Modifies the disposition of a diagnostic.  Note that not all
41537      diagnostics are modifiable; at the moment only warnings (normally
41538      controlled by `-W...') can be controlled, and not all of them.
41539      Use `-fdiagnostics-show-option' to determine which diagnostics are
41540      controllable and which option controls them.
41541
41542      KIND is `error' to treat this diagnostic as an error, `warning' to
41543      treat it like a warning (even if `-Werror' is in effect), or
41544      `ignored' if the diagnostic is to be ignored.  OPTION is a double
41545      quoted string that matches the command-line option.
41546
41547           #pragma GCC diagnostic warning "-Wformat"
41548           #pragma GCC diagnostic error "-Wformat"
41549           #pragma GCC diagnostic ignored "-Wformat"
41550
41551      Note that these pragmas override any command-line options.  GCC
41552      keeps track of the location of each pragma, and issues diagnostics
41553      according to the state as of that point in the source file.  Thus,
41554      pragmas occurring after a line do not affect diagnostics caused by
41555      that line.
41556
41557 `#pragma GCC diagnostic push'
41558 `#pragma GCC diagnostic pop'
41559      Causes GCC to remember the state of the diagnostics as of each
41560      `push', and restore to that point at each `pop'.  If a `pop' has
41561      no matching `push', the command-line options are restored.
41562
41563           #pragma GCC diagnostic error "-Wuninitialized"
41564             foo(a);                       /* error is given for this one */
41565           #pragma GCC diagnostic push
41566           #pragma GCC diagnostic ignored "-Wuninitialized"
41567             foo(b);                       /* no diagnostic for this one */
41568           #pragma GCC diagnostic pop
41569             foo(c);                       /* error is given for this one */
41570           #pragma GCC diagnostic pop
41571             foo(d);                       /* depends on command-line options */
41572
41573
41574  GCC also offers a simple mechanism for printing messages during
41575 compilation.
41576
41577 `#pragma message STRING'
41578      Prints STRING as a compiler message on compilation.  The message
41579      is informational only, and is neither a compilation warning nor an
41580      error.
41581
41582           #pragma message "Compiling " __FILE__ "..."
41583
41584      STRING may be parenthesized, and is printed with location
41585      information.  For example,
41586
41587           #define DO_PRAGMA(x) _Pragma (#x)
41588           #define TODO(x) DO_PRAGMA(message ("TODO - " #x))
41589
41590           TODO(Remember to fix this)
41591
41592      prints `/tmp/file.c:4: note: #pragma message: TODO - Remember to
41593      fix this'.
41594
41595
41596 \1f
41597 File: gcc.info,  Node: Visibility Pragmas,  Next: Push/Pop Macro Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas
41598
41599 6.58.11 Visibility Pragmas
41600 --------------------------
41601
41602 `#pragma GCC visibility push(VISIBILITY)'
41603 `#pragma GCC visibility pop'
41604      This pragma allows the user to set the visibility for multiple
41605      declarations without having to give each a visibility attribute
41606      *Note Function Attributes::, for more information about visibility
41607      and the attribute syntax.
41608
41609      In C++, `#pragma GCC visibility' affects only namespace-scope
41610      declarations.  Class members and template specializations are not
41611      affected; if you want to override the visibility for a particular
41612      member or instantiation, you must use an attribute.
41613
41614
41615 \1f
41616 File: gcc.info,  Node: Push/Pop Macro Pragmas,  Next: Function Specific Option Pragmas,  Prev: Visibility Pragmas,  Up: Pragmas
41617
41618 6.58.12 Push/Pop Macro Pragmas
41619 ------------------------------
41620
41621 For compatibility with Microsoft Windows compilers, GCC supports
41622 `#pragma push_macro("MACRO_NAME")' and `#pragma
41623 pop_macro("MACRO_NAME")'.
41624
41625 `#pragma push_macro("MACRO_NAME")'
41626      This pragma saves the value of the macro named as MACRO_NAME to
41627      the top of the stack for this macro.
41628
41629 `#pragma pop_macro("MACRO_NAME")'
41630      This pragma sets the value of the macro named as MACRO_NAME to the
41631      value on top of the stack for this macro. If the stack for
41632      MACRO_NAME is empty, the value of the macro remains unchanged.
41633
41634  For example:
41635
41636      #define X  1
41637      #pragma push_macro("X")
41638      #undef X
41639      #define X -1
41640      #pragma pop_macro("X")
41641      int x [X];
41642
41643 In this example, the definition of X as 1 is saved by `#pragma
41644 push_macro' and restored by `#pragma pop_macro'.
41645
41646 \1f
41647 File: gcc.info,  Node: Function Specific Option Pragmas,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas
41648
41649 6.58.13 Function Specific Option Pragmas
41650 ----------------------------------------
41651
41652 `#pragma GCC target ("STRING"...)'
41653      This pragma allows you to set target specific options for functions
41654      defined later in the source file.  One or more strings can be
41655      specified.  Each function that is defined after this point is as
41656      if `attribute((target("STRING")))' was specified for that
41657      function.  The parenthesis around the options is optional.  *Note
41658      Function Attributes::, for more information about the `target'
41659      attribute and the attribute syntax.
41660
41661      The `#pragma GCC target' attribute is not implemented in GCC
41662      versions earlier than 4.4 for the i386/x86_64 and 4.6 for the
41663      PowerPC back ends.  At present, it is not implemented for other
41664      back ends.
41665
41666 `#pragma GCC optimize ("STRING"...)'
41667      This pragma allows you to set global optimization options for
41668      functions defined later in the source file.  One or more strings
41669      can be specified.  Each function that is defined after this point
41670      is as if `attribute((optimize("STRING")))' was specified for that
41671      function.  The parenthesis around the options is optional.  *Note
41672      Function Attributes::, for more information about the `optimize'
41673      attribute and the attribute syntax.
41674
41675      The `#pragma GCC optimize' pragma is not implemented in GCC
41676      versions earlier than 4.4.
41677
41678 `#pragma GCC push_options'
41679 `#pragma GCC pop_options'
41680      These pragmas maintain a stack of the current target and
41681      optimization options.  It is intended for include files where you
41682      temporarily want to switch to using a different `#pragma GCC
41683      target' or `#pragma GCC optimize' and then to pop back to the
41684      previous options.
41685
41686      The `#pragma GCC push_options' and `#pragma GCC pop_options'
41687      pragmas are not implemented in GCC versions earlier than 4.4.
41688
41689 `#pragma GCC reset_options'
41690      This pragma clears the current `#pragma GCC target' and `#pragma
41691      GCC optimize' to use the default switches as specified on the
41692      command line.
41693
41694      The `#pragma GCC reset_options' pragma is not implemented in GCC
41695      versions earlier than 4.4.
41696
41697 \1f
41698 File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
41699
41700 6.59 Unnamed struct/union fields within structs/unions
41701 ======================================================
41702
41703 As permitted by ISO C11 and for compatibility with other compilers, GCC
41704 allows you to define a structure or union that contains, as fields,
41705 structures and unions without names.  For example:
41706
41707      struct {
41708        int a;
41709        union {
41710          int b;
41711          float c;
41712        };
41713        int d;
41714      } foo;
41715
41716 In this example, you are able to access members of the unnamed union
41717 with code like `foo.b'.  Note that only unnamed structs and unions are
41718 allowed, you may not have, for example, an unnamed `int'.
41719
41720  You must never create such structures that cause ambiguous field
41721 definitions.  For example, in this structure:
41722
41723      struct {
41724        int a;
41725        struct {
41726          int a;
41727        };
41728      } foo;
41729
41730 it is ambiguous which `a' is being referred to with `foo.a'.  The
41731 compiler gives errors for such constructs.
41732
41733  Unless `-fms-extensions' is used, the unnamed field must be a
41734 structure or union definition without a tag (for example, `struct { int
41735 a; };').  If `-fms-extensions' is used, the field may also be a
41736 definition with a tag such as `struct foo { int a; };', a reference to
41737 a previously defined structure or union such as `struct foo;', or a
41738 reference to a `typedef' name for a previously defined structure or
41739 union type.
41740
41741  The option `-fplan9-extensions' enables `-fms-extensions' as well as
41742 two other extensions.  First, a pointer to a structure is automatically
41743 converted to a pointer to an anonymous field for assignments and
41744 function calls.  For example:
41745
41746      struct s1 { int a; };
41747      struct s2 { struct s1; };
41748      extern void f1 (struct s1 *);
41749      void f2 (struct s2 *p) { f1 (p); }
41750
41751 In the call to `f1' inside `f2', the pointer `p' is converted into a
41752 pointer to the anonymous field.
41753
41754  Second, when the type of an anonymous field is a `typedef' for a
41755 `struct' or `union', code may refer to the field using the name of the
41756 `typedef'.
41757
41758      typedef struct { int a; } s1;
41759      struct s2 { s1; };
41760      s1 f1 (struct s2 *p) { return p->s1; }
41761
41762  These usages are only permitted when they are not ambiguous.
41763
41764 \1f
41765 File: gcc.info,  Node: Thread-Local,  Next: Binary constants,  Prev: Unnamed Fields,  Up: C Extensions
41766
41767 6.60 Thread-Local Storage
41768 =========================
41769
41770 Thread-local storage (TLS) is a mechanism by which variables are
41771 allocated such that there is one instance of the variable per extant
41772 thread.  The runtime model GCC uses to implement this originates in the
41773 IA-64 processor-specific ABI, but has since been migrated to other
41774 processors as well.  It requires significant support from the linker
41775 (`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and
41776 `libpthread.so'), so it is not available everywhere.
41777
41778  At the user level, the extension is visible with a new storage class
41779 keyword: `__thread'.  For example:
41780
41781      __thread int i;
41782      extern __thread struct state s;
41783      static __thread char *p;
41784
41785  The `__thread' specifier may be used alone, with the `extern' or
41786 `static' specifiers, but with no other storage class specifier.  When
41787 used with `extern' or `static', `__thread' must appear immediately
41788 after the other storage class specifier.
41789
41790  The `__thread' specifier may be applied to any global, file-scoped
41791 static, function-scoped static, or static data member of a class.  It
41792 may not be applied to block-scoped automatic or non-static data member.
41793
41794  When the address-of operator is applied to a thread-local variable, it
41795 is evaluated at run time and returns the address of the current thread's
41796 instance of that variable.  An address so obtained may be used by any
41797 thread.  When a thread terminates, any pointers to thread-local
41798 variables in that thread become invalid.
41799
41800  No static initialization may refer to the address of a thread-local
41801 variable.
41802
41803  In C++, if an initializer is present for a thread-local variable, it
41804 must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
41805 standard.
41806
41807  See ELF Handling For Thread-Local Storage
41808 (http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of
41809 the four thread-local storage addressing models, and how the runtime is
41810 expected to function.
41811
41812 * Menu:
41813
41814 * C99 Thread-Local Edits::
41815 * C++98 Thread-Local Edits::
41816
41817 \1f
41818 File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
41819
41820 6.60.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
41821 -------------------------------------------------------
41822
41823 The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
41824 document the exact semantics of the language extension.
41825
41826    * `5.1.2  Execution environments'
41827
41828      Add new text after paragraph 1
41829
41830           Within either execution environment, a "thread" is a flow of
41831           control within a program.  It is implementation defined
41832           whether or not there may be more than one thread associated
41833           with a program.  It is implementation defined how threads
41834           beyond the first are created, the name and type of the
41835           function called at thread startup, and how threads may be
41836           terminated.  However, objects with thread storage duration
41837           shall be initialized before thread startup.
41838
41839    * `6.2.4  Storage durations of objects'
41840
41841      Add new text before paragraph 3
41842
41843           An object whose identifier is declared with the storage-class
41844           specifier `__thread' has "thread storage duration".  Its
41845           lifetime is the entire execution of the thread, and its
41846           stored value is initialized only once, prior to thread
41847           startup.
41848
41849    * `6.4.1  Keywords'
41850
41851      Add `__thread'.
41852
41853    * `6.7.1  Storage-class specifiers'
41854
41855      Add `__thread' to the list of storage class specifiers in
41856      paragraph 1.
41857
41858      Change paragraph 2 to
41859
41860           With the exception of `__thread', at most one storage-class
41861           specifier may be given [...].  The `__thread' specifier may
41862           be used alone, or immediately following `extern' or `static'.
41863
41864      Add new text after paragraph 6
41865
41866           The declaration of an identifier for a variable that has
41867           block scope that specifies `__thread' shall also specify
41868           either `extern' or `static'.
41869
41870           The `__thread' specifier shall be used only with variables.
41871
41872 \1f
41873 File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
41874
41875 6.60.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
41876 --------------------------------------------------------
41877
41878 The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
41879 that document the exact semantics of the language extension.
41880
41881    * [intro.execution]
41882
41883      New text after paragraph 4
41884
41885           A "thread" is a flow of control within the abstract machine.
41886           It is implementation defined whether or not there may be more
41887           than one thread.
41888
41889      New text after paragraph 7
41890
41891           It is unspecified whether additional action must be taken to
41892           ensure when and whether side effects are visible to other
41893           threads.
41894
41895    * [lex.key]
41896
41897      Add `__thread'.
41898
41899    * [basic.start.main]
41900
41901      Add after paragraph 5
41902
41903           The thread that begins execution at the `main' function is
41904           called the "main thread".  It is implementation defined how
41905           functions beginning threads other than the main thread are
41906           designated or typed.  A function so designated, as well as
41907           the `main' function, is called a "thread startup function".
41908           It is implementation defined what happens if a thread startup
41909           function returns.  It is implementation defined what happens
41910           to other threads when any thread calls `exit'.
41911
41912    * [basic.start.init]
41913
41914      Add after paragraph 4
41915
41916           The storage for an object of thread storage duration shall be
41917           statically initialized before the first statement of the
41918           thread startup function.  An object of thread storage
41919           duration shall not require dynamic initialization.
41920
41921    * [basic.start.term]
41922
41923      Add after paragraph 3
41924
41925           The type of an object with thread storage duration shall not
41926           have a non-trivial destructor, nor shall it be an array type
41927           whose elements (directly or indirectly) have non-trivial
41928           destructors.
41929
41930    * [basic.stc]
41931
41932      Add "thread storage duration" to the list in paragraph 1.
41933
41934      Change paragraph 2
41935
41936           Thread, static, and automatic storage durations are
41937           associated with objects introduced by declarations [...].
41938
41939      Add `__thread' to the list of specifiers in paragraph 3.
41940
41941    * [basic.stc.thread]
41942
41943      New section before [basic.stc.static]
41944
41945           The keyword `__thread' applied to a non-local object gives the
41946           object thread storage duration.
41947
41948           A local variable or class data member declared both `static'
41949           and `__thread' gives the variable or member thread storage
41950           duration.
41951
41952    * [basic.stc.static]
41953
41954      Change paragraph 1
41955
41956           All objects that have neither thread storage duration, dynamic
41957           storage duration nor are local [...].
41958
41959    * [dcl.stc]
41960
41961      Add `__thread' to the list in paragraph 1.
41962
41963      Change paragraph 1
41964
41965           With the exception of `__thread', at most one
41966           STORAGE-CLASS-SPECIFIER shall appear in a given
41967           DECL-SPECIFIER-SEQ.  The `__thread' specifier may be used
41968           alone, or immediately following the `extern' or `static'
41969           specifiers.  [...]
41970
41971      Add after paragraph 5
41972
41973           The `__thread' specifier can be applied only to the names of
41974           objects and to anonymous unions.
41975
41976    * [class.mem]
41977
41978      Add after paragraph 6
41979
41980           Non-`static' members shall not be `__thread'.
41981
41982 \1f
41983 File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions
41984
41985 6.61 Binary constants using the `0b' prefix
41986 ===========================================
41987
41988 Integer constants can be written as binary constants, consisting of a
41989 sequence of `0' and `1' digits, prefixed by `0b' or `0B'.  This is
41990 particularly useful in environments that operate a lot on the bit level
41991 (like microcontrollers).
41992
41993  The following statements are identical:
41994
41995      i =       42;
41996      i =     0x2a;
41997      i =      052;
41998      i = 0b101010;
41999
42000  The type of these constants follows the same rules as for octal or
42001 hexadecimal integer constants, so suffixes like `L' or `UL' can be
42002 applied.
42003
42004 \1f
42005 File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C Extensions,  Up: Top
42006
42007 7 Extensions to the C++ Language
42008 ********************************
42009
42010 The GNU compiler provides these extensions to the C++ language (and you
42011 can also use most of the C language extensions in your C++ programs).
42012 If you want to write code that checks whether these features are
42013 available, you can test for the GNU compiler the same way as for C
42014 programs: check for a predefined macro `__GNUC__'.  You can also use
42015 `__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
42016 (cpp)Common Predefined Macros.).
42017
42018 * Menu:
42019
42020 * C++ Volatiles::       What constitutes an access to a volatile object.
42021 * Restricted Pointers:: C99 restricted pointers and references.
42022 * Vague Linkage::       Where G++ puts inlines, vtables and such.
42023 * C++ Interface::       You can use a single C++ header file for both
42024                         declarations and definitions.
42025 * Template Instantiation:: Methods for ensuring that exactly one copy of
42026                         each needed template instantiation is emitted.
42027 * Bound member functions:: You can extract a function pointer to the
42028                         method denoted by a `->*' or `.*' expression.
42029 * C++ Attributes::      Variable, function, and type attributes for C++ only.
42030 * Function Multiversioning::   Declaring multiple function versions.
42031 * Namespace Association:: Strong using-directives for namespace association.
42032 * Type Traits::         Compiler support for type traits
42033 * Java Exceptions::     Tweaking exception handling to work with Java.
42034 * Deprecated Features:: Things will disappear from G++.
42035 * Backwards Compatibility:: Compatibilities with earlier definitions of C++.
42036
42037 \1f
42038 File: gcc.info,  Node: C++ Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions
42039
42040 7.1 When is a Volatile C++ Object Accessed?
42041 ===========================================
42042
42043 The C++ standard differs from the C standard in its treatment of
42044 volatile objects.  It fails to specify what constitutes a volatile
42045 access, except to say that C++ should behave in a similar manner to C
42046 with respect to volatiles, where possible.  However, the different
42047 lvalueness of expressions between C and C++ complicate the behavior.
42048 G++ behaves the same as GCC for volatile access, *Note Volatiles: C
42049 Extensions, for a description of GCC's behavior.
42050
42051  The C and C++ language specifications differ when an object is
42052 accessed in a void context:
42053
42054      volatile int *src = SOMEVALUE;
42055      *src;
42056
42057  The C++ standard specifies that such expressions do not undergo lvalue
42058 to rvalue conversion, and that the type of the dereferenced object may
42059 be incomplete.  The C++ standard does not specify explicitly that it is
42060 lvalue to rvalue conversion that is responsible for causing an access.
42061 There is reason to believe that it is, because otherwise certain simple
42062 expressions become undefined.  However, because it would surprise most
42063 programmers, G++ treats dereferencing a pointer to volatile object of
42064 complete type as GCC would do for an equivalent type in C.  When the
42065 object has incomplete type, G++ issues a warning; if you wish to force
42066 an error, you must force a conversion to rvalue with, for instance, a
42067 static cast.
42068
42069  When using a reference to volatile, G++ does not treat equivalent
42070 expressions as accesses to volatiles, but instead issues a warning that
42071 no volatile is accessed.  The rationale for this is that otherwise it
42072 becomes difficult to determine where volatile access occur, and not
42073 possible to ignore the return value from functions returning volatile
42074 references.  Again, if you wish to force a read, cast the reference to
42075 an rvalue.
42076
42077  G++ implements the same behavior as GCC does when assigning to a
42078 volatile object--there is no reread of the assigned-to object, the
42079 assigned rvalue is reused.  Note that in C++ assignment expressions are
42080 lvalues, and if used as an lvalue, the volatile object is referred to.
42081 For instance, VREF refers to VOBJ, as expected, in the following
42082 example:
42083
42084      volatile int vobj;
42085      volatile int &vref = vobj = SOMETHING;
42086
42087 \1f
42088 File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: C++ Volatiles,  Up: C++ Extensions
42089
42090 7.2 Restricting Pointer Aliasing
42091 ================================
42092
42093 As with the C front end, G++ understands the C99 feature of restricted
42094 pointers, specified with the `__restrict__', or `__restrict' type
42095 qualifier.  Because you cannot compile C++ by specifying the `-std=c99'
42096 language flag, `restrict' is not a keyword in C++.
42097
42098  In addition to allowing restricted pointers, you can specify restricted
42099 references, which indicate that the reference is not aliased in the
42100 local context.
42101
42102      void fn (int *__restrict__ rptr, int &__restrict__ rref)
42103      {
42104        /* ... */
42105      }
42106
42107 In the body of `fn', RPTR points to an unaliased integer and RREF
42108 refers to a (different) unaliased integer.
42109
42110  You may also specify whether a member function's THIS pointer is
42111 unaliased by using `__restrict__' as a member function qualifier.
42112
42113      void T::fn () __restrict__
42114      {
42115        /* ... */
42116      }
42117
42118 Within the body of `T::fn', THIS has the effective definition `T
42119 *__restrict__ const this'.  Notice that the interpretation of a
42120 `__restrict__' member function qualifier is different to that of
42121 `const' or `volatile' qualifier, in that it is applied to the pointer
42122 rather than the object.  This is consistent with other compilers that
42123 implement restricted pointers.
42124
42125  As with all outermost parameter qualifiers, `__restrict__' is ignored
42126 in function definition matching.  This means you only need to specify
42127 `__restrict__' in a function definition, rather than in a function
42128 prototype as well.
42129
42130 \1f
42131 File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
42132
42133 7.3 Vague Linkage
42134 =================
42135
42136 There are several constructs in C++ that require space in the object
42137 file but are not clearly tied to a single translation unit.  We say that
42138 these constructs have "vague linkage".  Typically such constructs are
42139 emitted wherever they are needed, though sometimes we can be more
42140 clever.
42141
42142 Inline Functions
42143      Inline functions are typically defined in a header file which can
42144      be included in many different compilations.  Hopefully they can
42145      usually be inlined, but sometimes an out-of-line copy is
42146      necessary, if the address of the function is taken or if inlining
42147      fails.  In general, we emit an out-of-line copy in all translation
42148      units where one is needed.  As an exception, we only emit inline
42149      virtual functions with the vtable, since it always requires a copy.
42150
42151      Local static variables and string constants used in an inline
42152      function are also considered to have vague linkage, since they
42153      must be shared between all inlined and out-of-line instances of
42154      the function.
42155
42156 VTables
42157      C++ virtual functions are implemented in most compilers using a
42158      lookup table, known as a vtable.  The vtable contains pointers to
42159      the virtual functions provided by a class, and each object of the
42160      class contains a pointer to its vtable (or vtables, in some
42161      multiple-inheritance situations).  If the class declares any
42162      non-inline, non-pure virtual functions, the first one is chosen as
42163      the "key method" for the class, and the vtable is only emitted in
42164      the translation unit where the key method is defined.
42165
42166      _Note:_ If the chosen key method is later defined as inline, the
42167      vtable is still emitted in every translation unit that defines it.
42168      Make sure that any inline virtuals are declared inline in the class
42169      body, even if they are not defined there.
42170
42171 `type_info' objects
42172      C++ requires information about types to be written out in order to
42173      implement `dynamic_cast', `typeid' and exception handling.  For
42174      polymorphic classes (classes with virtual functions), the
42175      `type_info' object is written out along with the vtable so that
42176      `dynamic_cast' can determine the dynamic type of a class object at
42177      run time.  For all other types, we write out the `type_info'
42178      object when it is used: when applying `typeid' to an expression,
42179      throwing an object, or referring to a type in a catch clause or
42180      exception specification.
42181
42182 Template Instantiations
42183      Most everything in this section also applies to template
42184      instantiations, but there are other options as well.  *Note
42185      Where's the Template?: Template Instantiation.
42186
42187
42188  When used with GNU ld version 2.8 or later on an ELF system such as
42189 GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
42190 these constructs will be discarded at link time.  This is known as
42191 COMDAT support.
42192
42193  On targets that don't support COMDAT, but do support weak symbols, GCC
42194 uses them.  This way one copy overrides all the others, but the unused
42195 copies still take up space in the executable.
42196
42197  For targets that do not support either COMDAT or weak symbols, most
42198 entities with vague linkage are emitted as local symbols to avoid
42199 duplicate definition errors from the linker.  This does not happen for
42200 local statics in inlines, however, as having multiple copies almost
42201 certainly breaks things.
42202
42203  *Note Declarations and Definitions in One Header: C++ Interface, for
42204 another way to control placement of these constructs.
42205
42206 \1f
42207 File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
42208
42209 7.4 #pragma interface and implementation
42210 ========================================
42211
42212 `#pragma interface' and `#pragma implementation' provide the user with
42213 a way of explicitly directing the compiler to emit entities with vague
42214 linkage (and debugging information) in a particular translation unit.
42215
42216  _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most
42217 cases, because of COMDAT support and the "key method" heuristic
42218 mentioned in *note Vague Linkage::.  Using them can actually cause your
42219 program to grow due to unnecessary out-of-line copies of inline
42220 functions.  Currently (3.4) the only benefit of these `#pragma's is
42221 reduced duplication of debugging information, and that should be
42222 addressed soon on DWARF 2 targets with the use of COMDAT groups.
42223
42224 `#pragma interface'
42225 `#pragma interface "SUBDIR/OBJECTS.h"'
42226      Use this directive in _header files_ that define object classes,
42227      to save space in most of the object files that use those classes.
42228      Normally, local copies of certain information (backup copies of
42229      inline member functions, debugging information, and the internal
42230      tables that implement virtual functions) must be kept in each
42231      object file that includes class definitions.  You can use this
42232      pragma to avoid such duplication.  When a header file containing
42233      `#pragma interface' is included in a compilation, this auxiliary
42234      information is not generated (unless the main input source file
42235      itself uses `#pragma implementation').  Instead, the object files
42236      contain references to be resolved at link time.
42237
42238      The second form of this directive is useful for the case where you
42239      have multiple headers with the same name in different directories.
42240      If you use this form, you must specify the same string to `#pragma
42241      implementation'.
42242
42243 `#pragma implementation'
42244 `#pragma implementation "OBJECTS.h"'
42245      Use this pragma in a _main input file_, when you want full output
42246      from included header files to be generated (and made globally
42247      visible).  The included header file, in turn, should use `#pragma
42248      interface'.  Backup copies of inline member functions, debugging
42249      information, and the internal tables used to implement virtual
42250      functions are all generated in implementation files.
42251
42252      If you use `#pragma implementation' with no argument, it applies to
42253      an include file with the same basename(1) as your source file.
42254      For example, in `allclass.cc', giving just `#pragma implementation'
42255      by itself is equivalent to `#pragma implementation "allclass.h"'.
42256
42257      In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as
42258      an implementation file whenever you would include it from
42259      `allclass.cc' even if you never specified `#pragma
42260      implementation'.  This was deemed to be more trouble than it was
42261      worth, however, and disabled.
42262
42263      Use the string argument if you want a single implementation file to
42264      include code from multiple header files.  (You must also use
42265      `#include' to include the header file; `#pragma implementation'
42266      only specifies how to use the file--it doesn't actually include
42267      it.)
42268
42269      There is no way to split up the contents of a single header file
42270      into multiple implementation files.
42271
42272  `#pragma implementation' and `#pragma interface' also have an effect
42273 on function inlining.
42274
42275  If you define a class in a header file marked with `#pragma
42276 interface', the effect on an inline function defined in that class is
42277 similar to an explicit `extern' declaration--the compiler emits no code
42278 at all to define an independent version of the function.  Its
42279 definition is used only for inlining with its callers.
42280
42281  Conversely, when you include the same header file in a main source file
42282 that declares it as `#pragma implementation', the compiler emits code
42283 for the function itself; this defines a version of the function that
42284 can be found via pointers (or by callers compiled without inlining).
42285 If all calls to the function can be inlined, you can avoid emitting the
42286 function by compiling with `-fno-implement-inlines'.  If any calls are
42287 not inlined, you will get linker errors.
42288
42289  ---------- Footnotes ----------
42290
42291  (1) A file's "basename" is the name stripped of all leading path
42292 information and of trailing suffixes, such as `.h' or `.C' or `.cc'.
42293
42294 \1f
42295 File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
42296
42297 7.5 Where's the Template?
42298 =========================
42299
42300 C++ templates are the first language feature to require more
42301 intelligence from the environment than one usually finds on a UNIX
42302 system.  Somehow the compiler and linker have to make sure that each
42303 template instance occurs exactly once in the executable if it is needed,
42304 and not at all otherwise.  There are two basic approaches to this
42305 problem, which are referred to as the Borland model and the Cfront
42306 model.
42307
42308 Borland model
42309      Borland C++ solved the template instantiation problem by adding
42310      the code equivalent of common blocks to their linker; the compiler
42311      emits template instances in each translation unit that uses them,
42312      and the linker collapses them together.  The advantage of this
42313      model is that the linker only has to consider the object files
42314      themselves; there is no external complexity to worry about.  This
42315      disadvantage is that compilation time is increased because the
42316      template code is being compiled repeatedly.  Code written for this
42317      model tends to include definitions of all templates in the header
42318      file, since they must be seen to be instantiated.
42319
42320 Cfront model
42321      The AT&T C++ translator, Cfront, solved the template instantiation
42322      problem by creating the notion of a template repository, an
42323      automatically maintained place where template instances are
42324      stored.  A more modern version of the repository works as follows:
42325      As individual object files are built, the compiler places any
42326      template definitions and instantiations encountered in the
42327      repository.  At link time, the link wrapper adds in the objects in
42328      the repository and compiles any needed instances that were not
42329      previously emitted.  The advantages of this model are more optimal
42330      compilation speed and the ability to use the system linker; to
42331      implement the Borland model a compiler vendor also needs to
42332      replace the linker.  The disadvantages are vastly increased
42333      complexity, and thus potential for error; for some code this can be
42334      just as transparent, but in practice it can been very difficult to
42335      build multiple programs in one directory and one program in
42336      multiple directories.  Code written for this model tends to
42337      separate definitions of non-inline member templates into a
42338      separate file, which should be compiled separately.
42339
42340  When used with GNU ld version 2.8 or later on an ELF system such as
42341 GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the
42342 Borland model.  On other systems, G++ implements neither automatic
42343 model.
42344
42345  You have the following options for dealing with template
42346 instantiations:
42347
42348   1. Compile your template-using code with `-frepo'.  The compiler
42349      generates files with the extension `.rpo' listing all of the
42350      template instantiations used in the corresponding object files that
42351      could be instantiated there; the link wrapper, `collect2', then
42352      updates the `.rpo' files to tell the compiler where to place those
42353      instantiations and rebuild any affected object files.  The
42354      link-time overhead is negligible after the first pass, as the
42355      compiler continues to place the instantiations in the same files.
42356
42357      This is your best option for application code written for the
42358      Borland model, as it just works.  Code written for the Cfront model
42359      needs to be modified so that the template definitions are
42360      available at one or more points of instantiation; usually this is
42361      as simple as adding `#include <tmethods.cc>' to the end of each
42362      template header.
42363
42364      For library code, if you want the library to provide all of the
42365      template instantiations it needs, just try to link all of its
42366      object files together; the link will fail, but cause the
42367      instantiations to be generated as a side effect.  Be warned,
42368      however, that this may cause conflicts if multiple libraries try
42369      to provide the same instantiations.  For greater control, use
42370      explicit instantiation as described in the next option.
42371
42372   2. Compile your code with `-fno-implicit-templates' to disable the
42373      implicit generation of template instances, and explicitly
42374      instantiate all the ones you use.  This approach requires more
42375      knowledge of exactly which instances you need than do the others,
42376      but it's less mysterious and allows greater control.  You can
42377      scatter the explicit instantiations throughout your program,
42378      perhaps putting them in the translation units where the instances
42379      are used or the translation units that define the templates
42380      themselves; you can put all of the explicit instantiations you
42381      need into one big file; or you can create small files like
42382
42383           #include "Foo.h"
42384           #include "Foo.cc"
42385
42386           template class Foo<int>;
42387           template ostream& operator <<
42388                           (ostream&, const Foo<int>&);
42389
42390      for each of the instances you need, and create a template
42391      instantiation library from those.
42392
42393      If you are using Cfront-model code, you can probably get away with
42394      not using `-fno-implicit-templates' when compiling files that don't
42395      `#include' the member template definitions.
42396
42397      If you use one big file to do the instantiations, you may want to
42398      compile it without `-fno-implicit-templates' so you get all of the
42399      instances required by your explicit instantiations (but not by any
42400      other files) without having to specify them as well.
42401
42402      The ISO C++ 2011 standard allows forward declaration of explicit
42403      instantiations (with `extern'). G++ supports explicit instantiation
42404      declarations in C++98 mode and has extended the template
42405      instantiation syntax to support instantiation of the compiler
42406      support data for a template class (i.e. the vtable) without
42407      instantiating any of its members (with `inline'), and
42408      instantiation of only the static data members of a template class,
42409      without the support data or member functions (with (`static'):
42410
42411           extern template int max (int, int);
42412           inline template class Foo<int>;
42413           static template class Foo<int>;
42414
42415   3. Do nothing.  Pretend G++ does implement automatic instantiation
42416      management.  Code written for the Borland model works fine, but
42417      each translation unit contains instances of each of the templates
42418      it uses.  In a large program, this can lead to an unacceptable
42419      amount of code duplication.
42420
42421 \1f
42422 File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
42423
42424 7.6 Extracting the function pointer from a bound pointer to member function
42425 ===========================================================================
42426
42427 In C++, pointer to member functions (PMFs) are implemented using a wide
42428 pointer of sorts to handle all the possible call mechanisms; the PMF
42429 needs to store information about how to adjust the `this' pointer, and
42430 if the function pointed to is virtual, where to find the vtable, and
42431 where in the vtable to look for the member function.  If you are using
42432 PMFs in an inner loop, you should really reconsider that decision.  If
42433 that is not an option, you can extract the pointer to the function that
42434 would be called for a given object/PMF pair and call it directly inside
42435 the inner loop, to save a bit of time.
42436
42437  Note that you still pay the penalty for the call through a function
42438 pointer; on most modern architectures, such a call defeats the branch
42439 prediction features of the CPU.  This is also true of normal virtual
42440 function calls.
42441
42442  The syntax for this extension is
42443
42444      extern A a;
42445      extern int (A::*fp)();
42446      typedef int (*fptr)(A *);
42447
42448      fptr p = (fptr)(a.*fp);
42449
42450  For PMF constants (i.e. expressions of the form `&Klasse::Member'), no
42451 object is needed to obtain the address of the function.  They can be
42452 converted to function pointers directly:
42453
42454      fptr p1 = (fptr)(&A::foo);
42455
42456  You must specify `-Wno-pmf-conversions' to use this extension.
42457
42458 \1f
42459 File: gcc.info,  Node: C++ Attributes,  Next: Function Multiversioning,  Prev: Bound member functions,  Up: C++ Extensions
42460
42461 7.7 C++-Specific Variable, Function, and Type Attributes
42462 ========================================================
42463
42464 Some attributes only make sense for C++ programs.
42465
42466 `abi_tag ("TAG", ...)'
42467      The `abi_tag' attribute can be applied to a function or class
42468      declaration.  It modifies the mangled name of the function or
42469      class to incorporate the tag name, in order to distinguish the
42470      function or class from an earlier version with a different ABI;
42471      perhaps the class has changed size, or the function has a
42472      different return type that is not encoded in the mangled name.
42473
42474      The argument can be a list of strings of arbitrary length.  The
42475      strings are sorted on output, so the order of the list is
42476      unimportant.
42477
42478      A redeclaration of a function or class must not add new ABI tags,
42479      since doing so would change the mangled name.
42480
42481      The `-Wabi-tag' flag enables a warning about a class which does
42482      not have all the ABI tags used by its subobjects and virtual
42483      functions; for users with code that needs to coexist with an
42484      earlier ABI, using this option can help to find all affected types
42485      that need to be tagged.
42486
42487 `init_priority (PRIORITY)'
42488      In Standard C++, objects defined at namespace scope are guaranteed
42489      to be initialized in an order in strict accordance with that of
42490      their definitions _in a given translation unit_.  No guarantee is
42491      made for initializations across translation units.  However, GNU
42492      C++ allows users to control the order of initialization of objects
42493      defined at namespace scope with the `init_priority' attribute by
42494      specifying a relative PRIORITY, a constant integral expression
42495      currently bounded between 101 and 65535 inclusive.  Lower numbers
42496      indicate a higher priority.
42497
42498      In the following example, `A' would normally be created before
42499      `B', but the `init_priority' attribute reverses that order:
42500
42501           Some_Class  A  __attribute__ ((init_priority (2000)));
42502           Some_Class  B  __attribute__ ((init_priority (543)));
42503
42504      Note that the particular values of PRIORITY do not matter; only
42505      their relative ordering.
42506
42507 `java_interface'
42508      This type attribute informs C++ that the class is a Java
42509      interface.  It may only be applied to classes declared within an
42510      `extern "Java"' block.  Calls to methods declared in this
42511      interface are dispatched using GCJ's interface table mechanism,
42512      instead of regular virtual table dispatch.
42513
42514
42515  See also *note Namespace Association::.
42516
42517 \1f
42518 File: gcc.info,  Node: Function Multiversioning,  Next: Namespace Association,  Prev: C++ Attributes,  Up: C++ Extensions
42519
42520 7.8 Function Multiversioning
42521 ============================
42522
42523 With the GNU C++ front end, for target i386, you may specify multiple
42524 versions of a function, where each function is specialized for a
42525 specific target feature.  At runtime, the appropriate version of the
42526 function is automatically executed depending on the characteristics of
42527 the execution platform.  Here is an example.
42528
42529      __attribute__ ((target ("default")))
42530      int foo ()
42531      {
42532        // The default version of foo.
42533        return 0;
42534      }
42535
42536      __attribute__ ((target ("sse4.2")))
42537      int foo ()
42538      {
42539        // foo version for SSE4.2
42540        return 1;
42541      }
42542
42543      __attribute__ ((target ("arch=atom")))
42544      int foo ()
42545      {
42546        // foo version for the Intel ATOM processor
42547        return 2;
42548      }
42549
42550      __attribute__ ((target ("arch=amdfam10")))
42551      int foo ()
42552      {
42553        // foo version for the AMD Family 0x10 processors.
42554        return 3;
42555      }
42556
42557      int main ()
42558      {
42559        int (*p)() = &foo;
42560        assert ((*p) () == foo ());
42561        return 0;
42562      }
42563
42564  In the above example, four versions of function foo are created. The
42565 first version of foo with the target attribute "default" is the default
42566 version.  This version gets executed when no other target specific
42567 version qualifies for execution on a particular platform. A new version
42568 of foo is created by using the same function signature but with a
42569 different target string.  Function foo is called or a pointer to it is
42570 taken just like a regular function.  GCC takes care of doing the
42571 dispatching to call the right version at runtime.  Refer to the GCC
42572 wiki on Function Multiversioning
42573 (http://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details.
42574
42575 \1f
42576 File: gcc.info,  Node: Namespace Association,  Next: Type Traits,  Prev: Function Multiversioning,  Up: C++ Extensions
42577
42578 7.9 Namespace Association
42579 =========================
42580
42581 *Caution:* The semantics of this extension are equivalent to C++ 2011
42582 inline namespaces.  Users should use inline namespaces instead as this
42583 extension will be removed in future versions of G++.
42584
42585  A using-directive with `__attribute ((strong))' is stronger than a
42586 normal using-directive in two ways:
42587
42588    * Templates from the used namespace can be specialized and explicitly
42589      instantiated as though they were members of the using namespace.
42590
42591    * The using namespace is considered an associated namespace of all
42592      templates in the used namespace for purposes of argument-dependent
42593      name lookup.
42594
42595  The used namespace must be nested within the using namespace so that
42596 normal unqualified lookup works properly.
42597
42598  This is useful for composing a namespace transparently from
42599 implementation namespaces.  For example:
42600
42601      namespace std {
42602        namespace debug {
42603          template <class T> struct A { };
42604        }
42605        using namespace debug __attribute ((__strong__));
42606        template <> struct A<int> { };   // ok to specialize
42607
42608        template <class T> void f (A<T>);
42609      }
42610
42611      int main()
42612      {
42613        f (std::A<float>());             // lookup finds std::f
42614        f (std::A<int>());
42615      }
42616
42617 \1f
42618 File: gcc.info,  Node: Type Traits,  Next: Java Exceptions,  Prev: Namespace Association,  Up: C++ Extensions
42619
42620 7.10 Type Traits
42621 ================
42622
42623 The C++ front end implements syntactic extensions that allow
42624 compile-time determination of various characteristics of a type (or of a
42625 pair of types).
42626
42627 `__has_nothrow_assign (type)'
42628      If `type' is const qualified or is a reference type then the trait
42629      is false.  Otherwise if `__has_trivial_assign (type)' is true then
42630      the trait is true, else if `type' is a cv class or union type with
42631      copy assignment operators that are known not to throw an exception
42632      then the trait is true, else it is false.  Requires: `type' shall
42633      be a complete type, (possibly cv-qualified) `void', or an array of
42634      unknown bound.
42635
42636 `__has_nothrow_copy (type)'
42637      If `__has_trivial_copy (type)' is true then the trait is true,
42638      else if `type' is a cv class or union type with copy constructors
42639      that are known not to throw an exception then the trait is true,
42640      else it is false.  Requires: `type' shall be a complete type,
42641      (possibly cv-qualified) `void', or an array of unknown bound.
42642
42643 `__has_nothrow_constructor (type)'
42644      If `__has_trivial_constructor (type)' is true then the trait is
42645      true, else if `type' is a cv class or union type (or array
42646      thereof) with a default constructor that is known not to throw an
42647      exception then the trait is true, else it is false.  Requires:
42648      `type' shall be a complete type, (possibly cv-qualified) `void',
42649      or an array of unknown bound.
42650
42651 `__has_trivial_assign (type)'
42652      If `type' is const qualified or is a reference type then the trait
42653      is false.  Otherwise if `__is_pod (type)' is true then the trait is
42654      true, else if `type' is a cv class or union type with a trivial
42655      copy assignment ([class.copy]) then the trait is true, else it is
42656      false.  Requires: `type' shall be a complete type, (possibly
42657      cv-qualified) `void', or an array of unknown bound.
42658
42659 `__has_trivial_copy (type)'
42660      If `__is_pod (type)' is true or `type' is a reference type then
42661      the trait is true, else if `type' is a cv class or union type with
42662      a trivial copy constructor ([class.copy]) then the trait is true,
42663      else it is false.  Requires: `type' shall be a complete type,
42664      (possibly cv-qualified) `void', or an array of unknown bound.
42665
42666 `__has_trivial_constructor (type)'
42667      If `__is_pod (type)' is true then the trait is true, else if
42668      `type' is a cv class or union type (or array thereof) with a
42669      trivial default constructor ([class.ctor]) then the trait is true,
42670      else it is false.  Requires: `type' shall be a complete type,
42671      (possibly cv-qualified) `void', or an array of unknown bound.
42672
42673 `__has_trivial_destructor (type)'
42674      If `__is_pod (type)' is true or `type' is a reference type then
42675      the trait is true, else if `type' is a cv class or union type (or
42676      array thereof) with a trivial destructor ([class.dtor]) then the
42677      trait is true, else it is false.  Requires: `type' shall be a
42678      complete type, (possibly cv-qualified) `void', or an array of
42679      unknown bound.
42680
42681 `__has_virtual_destructor (type)'
42682      If `type' is a class type with a virtual destructor ([class.dtor])
42683      then the trait is true, else it is false.  Requires: `type' shall
42684      be a complete type, (possibly cv-qualified) `void', or an array of
42685      unknown bound.
42686
42687 `__is_abstract (type)'
42688      If `type' is an abstract class ([class.abstract]) then the trait
42689      is true, else it is false.  Requires: `type' shall be a complete
42690      type, (possibly cv-qualified) `void', or an array of unknown bound.
42691
42692 `__is_base_of (base_type, derived_type)'
42693      If `base_type' is a base class of `derived_type' ([class.derived])
42694      then the trait is true, otherwise it is false.  Top-level cv
42695      qualifications of `base_type' and `derived_type' are ignored.  For
42696      the purposes of this trait, a class type is considered is own
42697      base.  Requires: if `__is_class (base_type)' and `__is_class
42698      (derived_type)' are true and `base_type' and `derived_type' are
42699      not the same type (disregarding cv-qualifiers), `derived_type'
42700      shall be a complete type.  Diagnostic is produced if this
42701      requirement is not met.
42702
42703 `__is_class (type)'
42704      If `type' is a cv class type, and not a union type
42705      ([basic.compound]) the trait is true, else it is false.
42706
42707 `__is_empty (type)'
42708      If `__is_class (type)' is false then the trait is false.
42709      Otherwise `type' is considered empty if and only if: `type' has no
42710      non-static data members, or all non-static data members, if any,
42711      are bit-fields of length 0, and `type' has no virtual members, and
42712      `type' has no virtual base classes, and `type' has no base classes
42713      `base_type' for which `__is_empty (base_type)' is false.
42714      Requires: `type' shall be a complete type, (possibly cv-qualified)
42715      `void', or an array of unknown bound.
42716
42717 `__is_enum (type)'
42718      If `type' is a cv enumeration type ([basic.compound]) the trait is
42719      true, else it is false.
42720
42721 `__is_literal_type (type)'
42722      If `type' is a literal type ([basic.types]) the trait is true,
42723      else it is false.  Requires: `type' shall be a complete type,
42724      (possibly cv-qualified) `void', or an array of unknown bound.
42725
42726 `__is_pod (type)'
42727      If `type' is a cv POD type ([basic.types]) then the trait is true,
42728      else it is false.  Requires: `type' shall be a complete type,
42729      (possibly cv-qualified) `void', or an array of unknown bound.
42730
42731 `__is_polymorphic (type)'
42732      If `type' is a polymorphic class ([class.virtual]) then the trait
42733      is true, else it is false.  Requires: `type' shall be a complete
42734      type, (possibly cv-qualified) `void', or an array of unknown bound.
42735
42736 `__is_standard_layout (type)'
42737      If `type' is a standard-layout type ([basic.types]) the trait is
42738      true, else it is false.  Requires: `type' shall be a complete
42739      type, (possibly cv-qualified) `void', or an array of unknown bound.
42740
42741 `__is_trivial (type)'
42742      If `type' is a trivial type ([basic.types]) the trait is true,
42743      else it is false.  Requires: `type' shall be a complete type,
42744      (possibly cv-qualified) `void', or an array of unknown bound.
42745
42746 `__is_union (type)'
42747      If `type' is a cv union type ([basic.compound]) the trait is true,
42748      else it is false.
42749
42750 `__underlying_type (type)'
42751      The underlying type of `type'.  Requires: `type' shall be an
42752      enumeration type ([dcl.enum]).
42753
42754
42755 \1f
42756 File: gcc.info,  Node: Java Exceptions,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions
42757
42758 7.11 Java Exceptions
42759 ====================
42760
42761 The Java language uses a slightly different exception handling model
42762 from C++.  Normally, GNU C++ automatically detects when you are writing
42763 C++ code that uses Java exceptions, and handle them appropriately.
42764 However, if C++ code only needs to execute destructors when Java
42765 exceptions are thrown through it, GCC guesses incorrectly.  Sample
42766 problematic code is:
42767
42768        struct S { ~S(); };
42769        extern void bar();    // is written in Java, and may throw exceptions
42770        void foo()
42771        {
42772          S s;
42773          bar();
42774        }
42775
42776 The usual effect of an incorrect guess is a link failure, complaining of
42777 a missing routine called `__gxx_personality_v0'.
42778
42779  You can inform the compiler that Java exceptions are to be used in a
42780 translation unit, irrespective of what it might think, by writing
42781 `#pragma GCC java_exceptions' at the head of the file.  This `#pragma'
42782 must appear before any functions that throw or catch exceptions, or run
42783 destructors when exceptions are thrown through them.
42784
42785  You cannot mix Java and C++ exceptions in the same translation unit.
42786 It is believed to be safe to throw a C++ exception from one file through
42787 another file compiled for the Java exception model, or vice versa, but
42788 there may be bugs in this area.
42789
42790 \1f
42791 File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: Java Exceptions,  Up: C++ Extensions
42792
42793 7.12 Deprecated Features
42794 ========================
42795
42796 In the past, the GNU C++ compiler was extended to experiment with new
42797 features, at a time when the C++ language was still evolving.  Now that
42798 the C++ standard is complete, some of those features are superseded by
42799 superior alternatives.  Using the old features might cause a warning in
42800 some cases that the feature will be dropped in the future.  In other
42801 cases, the feature might be gone already.
42802
42803  While the list below is not exhaustive, it documents some of the
42804 options that are now deprecated:
42805
42806 `-fexternal-templates'
42807 `-falt-external-templates'
42808      These are two of the many ways for G++ to implement template
42809      instantiation.  *Note Template Instantiation::.  The C++ standard
42810      clearly defines how template definitions have to be organized
42811      across implementation units.  G++ has an implicit instantiation
42812      mechanism that should work just fine for standard-conforming code.
42813
42814 `-fstrict-prototype'
42815 `-fno-strict-prototype'
42816      Previously it was possible to use an empty prototype parameter
42817      list to indicate an unspecified number of parameters (like C),
42818      rather than no parameters, as C++ demands.  This feature has been
42819      removed, except where it is required for backwards compatibility.
42820      *Note Backwards Compatibility::.
42821
42822  G++ allows a virtual function returning `void *' to be overridden by
42823 one returning a different pointer type.  This extension to the
42824 covariant return type rules is now deprecated and will be removed from a
42825 future version.
42826
42827  The G++ minimum and maximum operators (`<?' and `>?') and their
42828 compound forms (`<?=') and `>?=') have been deprecated and are now
42829 removed from G++.  Code using these operators should be modified to use
42830 `std::min' and `std::max' instead.
42831
42832  The named return value extension has been deprecated, and is now
42833 removed from G++.
42834
42835  The use of initializer lists with new expressions has been deprecated,
42836 and is now removed from G++.
42837
42838  Floating and complex non-type template parameters have been deprecated,
42839 and are now removed from G++.
42840
42841  The implicit typename extension has been deprecated and is now removed
42842 from G++.
42843
42844  The use of default arguments in function pointers, function typedefs
42845 and other places where they are not permitted by the standard is
42846 deprecated and will be removed from a future version of G++.
42847
42848  G++ allows floating-point literals to appear in integral constant
42849 expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is
42850 deprecated and will be removed from a future version.
42851
42852  G++ allows static data members of const floating-point type to be
42853 declared with an initializer in a class definition. The standard only
42854 allows initializers for static members of const integral types and const
42855 enumeration types so this extension has been deprecated and will be
42856 removed from a future version.
42857
42858 \1f
42859 File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
42860
42861 7.13 Backwards Compatibility
42862 ============================
42863
42864 Now that there is a definitive ISO standard C++, G++ has a specification
42865 to adhere to.  The C++ language evolved over time, and features that
42866 used to be acceptable in previous drafts of the standard, such as the
42867 ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
42868 to allow compilation of C++ written to such drafts, G++ contains some
42869 backwards compatibilities.  _All such backwards compatibility features
42870 are liable to disappear in future versions of G++._ They should be
42871 considered deprecated.   *Note Deprecated Features::.
42872
42873 `For scope'
42874      If a variable is declared at for scope, it used to remain in scope
42875      until the end of the scope that contained the for statement
42876      (rather than just within the for scope).  G++ retains this, but
42877      issues a warning, if such a variable is accessed outside the for
42878      scope.
42879
42880 `Implicit C language'
42881      Old C system header files did not contain an `extern "C" {...}'
42882      scope to set the language.  On such systems, all header files are
42883      implicitly scoped inside a C language scope.  Also, an empty
42884      prototype `()' is treated as an unspecified number of arguments,
42885      rather than no arguments, as C++ demands.
42886
42887 \1f
42888 File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
42889
42890 8 GNU Objective-C features
42891 **************************
42892
42893 This document is meant to describe some of the GNU Objective-C
42894 features.  It is not intended to teach you Objective-C.  There are
42895 several resources on the Internet that present the language.
42896
42897 * Menu:
42898
42899 * GNU Objective-C runtime API::
42900 * Executing code before main::
42901 * Type encoding::
42902 * Garbage Collection::
42903 * Constant string objects::
42904 * compatibility_alias::
42905 * Exceptions::
42906 * Synchronization::
42907 * Fast enumeration::
42908 * Messaging with the GNU Objective-C runtime::
42909
42910 \1f
42911 File: gcc.info,  Node: GNU Objective-C runtime API,  Next: Executing code before main,  Up: Objective-C
42912
42913 8.1 GNU Objective-C runtime API
42914 ===============================
42915
42916 This section is specific for the GNU Objective-C runtime.  If you are
42917 using a different runtime, you can skip it.
42918
42919  The GNU Objective-C runtime provides an API that allows you to
42920 interact with the Objective-C runtime system, querying the live runtime
42921 structures and even manipulating them.  This allows you for example to
42922 inspect and navigate classes, methods and protocols; to define new
42923 classes or new methods, and even to modify existing classes or
42924 protocols.
42925
42926  If you are using a "Foundation" library such as GNUstep-Base, this
42927 library will provide you with a rich set of functionality to do most of
42928 the inspection tasks, and you probably will only need direct access to
42929 the GNU Objective-C runtime API to define new classes or methods.
42930
42931 * Menu:
42932
42933 * Modern GNU Objective-C runtime API::
42934 * Traditional GNU Objective-C runtime API::
42935
42936 \1f
42937 File: gcc.info,  Node: Modern GNU Objective-C runtime API,  Next: Traditional GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
42938
42939 8.1.1 Modern GNU Objective-C runtime API
42940 ----------------------------------------
42941
42942 The GNU Objective-C runtime provides an API which is similar to the one
42943 provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime.  The
42944 API is documented in the public header files of the GNU Objective-C
42945 runtime:
42946
42947    * `objc/objc.h': this is the basic Objective-C header file, defining
42948      the basic Objective-C types such as `id', `Class' and `BOOL'.  You
42949      have to include this header to do almost anything with Objective-C.
42950
42951    * `objc/runtime.h': this header declares most of the public runtime
42952      API functions allowing you to inspect and manipulate the
42953      Objective-C runtime data structures.  These functions are fairly
42954      standardized across Objective-C runtimes and are almost identical
42955      to the Apple/NeXT Objective-C runtime ones.  It does not declare
42956      functions in some specialized areas (constructing and forwarding
42957      message invocations, threading) which are in the other headers
42958      below.  You have to include `objc/objc.h' and `objc/runtime.h' to
42959      use any of the functions, such as `class_getName()', declared in
42960      `objc/runtime.h'.
42961
42962    * `objc/message.h': this header declares public functions used to
42963      construct, deconstruct and forward message invocations.  Because
42964      messaging is done in quite a different way on different runtimes,
42965      functions in this header are specific to the GNU Objective-C
42966      runtime implementation.
42967
42968    * `objc/objc-exception.h': this header declares some public
42969      functions related to Objective-C exceptions.  For example
42970      functions in this header allow you to throw an Objective-C
42971      exception from plain C/C++ code.
42972
42973    * `objc/objc-sync.h': this header declares some public functions
42974      related to the Objective-C `@synchronized()' syntax, allowing you
42975      to emulate an Objective-C `@synchronized()' block in plain C/C++
42976      code.
42977
42978    * `objc/thr.h': this header declares a public runtime API threading
42979      layer that is only provided by the GNU Objective-C runtime.  It
42980      declares functions such as `objc_mutex_lock()', which provide a
42981      platform-independent set of threading functions.
42982
42983
42984  The header files contain detailed documentation for each function in
42985 the GNU Objective-C runtime API.
42986
42987 \1f
42988 File: gcc.info,  Node: Traditional GNU Objective-C runtime API,  Prev: Modern GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
42989
42990 8.1.2 Traditional GNU Objective-C runtime API
42991 ---------------------------------------------
42992
42993 The GNU Objective-C runtime used to provide a different API, which we
42994 call the "traditional" GNU Objective-C runtime API.  Functions
42995 belonging to this API are easy to recognize because they use a
42996 different naming convention, such as `class_get_super_class()'
42997 (traditional API) instead of `class_getSuperclass()' (modern API).
42998 Software using this API includes the file `objc/objc-api.h' where it is
42999 declared.
43000
43001  Starting with GCC 4.7.0, the traditional GNU runtime API is no longer
43002 available.
43003
43004 \1f
43005 File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: GNU Objective-C runtime API,  Up: Objective-C
43006
43007 8.2 `+load': Executing code before main
43008 =======================================
43009
43010 This section is specific for the GNU Objective-C runtime.  If you are
43011 using a different runtime, you can skip it.
43012
43013  The GNU Objective-C runtime provides a way that allows you to execute
43014 code before the execution of the program enters the `main' function.
43015 The code is executed on a per-class and a per-category basis, through a
43016 special class method `+load'.
43017
43018  This facility is very useful if you want to initialize global variables
43019 which can be accessed by the program directly, without sending a message
43020 to the class first.  The usual way to initialize global variables, in
43021 the `+initialize' method, might not be useful because `+initialize' is
43022 only called when the first message is sent to a class object, which in
43023 some cases could be too late.
43024
43025  Suppose for example you have a `FileStream' class that declares
43026 `Stdin', `Stdout' and `Stderr' as global variables, like below:
43027
43028
43029      FileStream *Stdin = nil;
43030      FileStream *Stdout = nil;
43031      FileStream *Stderr = nil;
43032
43033      @implementation FileStream
43034
43035      + (void)initialize
43036      {
43037          Stdin = [[FileStream new] initWithFd:0];
43038          Stdout = [[FileStream new] initWithFd:1];
43039          Stderr = [[FileStream new] initWithFd:2];
43040      }
43041
43042      /* Other methods here */
43043      @end
43044
43045  In this example, the initialization of `Stdin', `Stdout' and `Stderr'
43046 in `+initialize' occurs too late.  The programmer can send a message to
43047 one of these objects before the variables are actually initialized,
43048 thus sending messages to the `nil' object.  The `+initialize' method
43049 which actually initializes the global variables is not invoked until
43050 the first message is sent to the class object.  The solution would
43051 require these variables to be initialized just before entering `main'.
43052
43053  The correct solution of the above problem is to use the `+load' method
43054 instead of `+initialize':
43055
43056
43057      @implementation FileStream
43058
43059      + (void)load
43060      {
43061          Stdin = [[FileStream new] initWithFd:0];
43062          Stdout = [[FileStream new] initWithFd:1];
43063          Stderr = [[FileStream new] initWithFd:2];
43064      }
43065
43066      /* Other methods here */
43067      @end
43068
43069  The `+load' is a method that is not overridden by categories.  If a
43070 class and a category of it both implement `+load', both methods are
43071 invoked.  This allows some additional initializations to be performed in
43072 a category.
43073
43074  This mechanism is not intended to be a replacement for `+initialize'.
43075 You should be aware of its limitations when you decide to use it
43076 instead of `+initialize'.
43077
43078 * Menu:
43079
43080 * What you can and what you cannot do in +load::
43081
43082 \1f
43083 File: gcc.info,  Node: What you can and what you cannot do in +load,  Up: Executing code before main
43084
43085 8.2.1 What you can and what you cannot do in `+load'
43086 ----------------------------------------------------
43087
43088 `+load' is to be used only as a last resort.  Because it is executed
43089 very early, most of the Objective-C runtime machinery will not be ready
43090 when `+load' is executed; hence `+load' works best for executing C code
43091 that is independent on the Objective-C runtime.
43092
43093  The `+load' implementation in the GNU runtime guarantees you the
43094 following things:
43095
43096    * you can write whatever C code you like;
43097
43098    * you can allocate and send messages to objects whose class is
43099      implemented in the same file;
43100
43101    * the `+load' implementation of all super classes of a class are
43102      executed before the `+load' of that class is executed;
43103
43104    * the `+load' implementation of a class is executed before the
43105      `+load' implementation of any category.
43106
43107
43108  In particular, the following things, even if they can work in a
43109 particular case, are not guaranteed:
43110
43111    * allocation of or sending messages to arbitrary objects;
43112
43113    * allocation of or sending messages to objects whose classes have a
43114      category implemented in the same file;
43115
43116    * sending messages to Objective-C constant strings (`@"this is a
43117      constant string"');
43118
43119
43120  You should make no assumptions about receiving `+load' in sibling
43121 classes when you write `+load' of a class.  The order in which sibling
43122 classes receive `+load' is not guaranteed.
43123
43124  The order in which `+load' and `+initialize' are called could be
43125 problematic if this matters.  If you don't allocate objects inside
43126 `+load', it is guaranteed that `+load' is called before `+initialize'.
43127 If you create an object inside `+load' the `+initialize' method of
43128 object's class is invoked even if `+load' was not invoked.  Note if you
43129 explicitly call `+load' on a class, `+initialize' will be called first.
43130 To avoid possible problems try to implement only one of these methods.
43131
43132  The `+load' method is also invoked when a bundle is dynamically loaded
43133 into your running program.  This happens automatically without any
43134 intervening operation from you.  When you write bundles and you need to
43135 write `+load' you can safely create and send messages to objects whose
43136 classes already exist in the running program.  The same restrictions as
43137 above apply to classes defined in bundle.
43138
43139 \1f
43140 File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
43141
43142 8.3 Type encoding
43143 =================
43144
43145 This is an advanced section.  Type encodings are used extensively by
43146 the compiler and by the runtime, but you generally do not need to know
43147 about them to use Objective-C.
43148
43149  The Objective-C compiler generates type encodings for all the types.
43150 These type encodings are used at runtime to find out information about
43151 selectors and methods and about objects and classes.
43152
43153  The types are encoded in the following way:
43154
43155 `_Bool'            `B'
43156 `char'             `c'
43157 `unsigned char'    `C'
43158 `short'            `s'
43159 `unsigned short'   `S'
43160 `int'              `i'
43161 `unsigned int'     `I'
43162 `long'             `l'
43163 `unsigned long'    `L'
43164 `long long'        `q'
43165 `unsigned long     `Q'
43166 long'              
43167 `float'            `f'
43168 `double'           `d'
43169 `long double'      `D'
43170 `void'             `v'
43171 `id'               `@'
43172 `Class'            `#'
43173 `SEL'              `:'
43174 `char*'            `*'
43175 `enum'             an `enum' is encoded exactly as the integer type that
43176                    the compiler uses for it, which depends on the
43177                    enumeration values.  Often the compiler users
43178                    `unsigned int', which is then encoded as `I'.
43179 unknown type       `?'
43180 Complex types      `j' followed by the inner type.  For example
43181                    `_Complex double' is encoded as "jd".
43182 bit-fields         `b' followed by the starting position of the
43183                    bit-field, the type of the bit-field and the size of
43184                    the bit-field (the bit-fields encoding was changed
43185                    from the NeXT's compiler encoding, see below)
43186
43187  The encoding of bit-fields has changed to allow bit-fields to be
43188 properly handled by the runtime functions that compute sizes and
43189 alignments of types that contain bit-fields.  The previous encoding
43190 contained only the size of the bit-field.  Using only this information
43191 it is not possible to reliably compute the size occupied by the
43192 bit-field.  This is very important in the presence of the Boehm's
43193 garbage collector because the objects are allocated using the typed
43194 memory facility available in this collector.  The typed memory
43195 allocation requires information about where the pointers are located
43196 inside the object.
43197
43198  The position in the bit-field is the position, counting in bits, of the
43199 bit closest to the beginning of the structure.
43200
43201  The non-atomic types are encoded as follows:
43202
43203 pointers       `^' followed by the pointed type.
43204 arrays         `[' followed by the number of elements in the array
43205                followed by the type of the elements followed by `]'
43206 structures     `{' followed by the name of the structure (or `?' if the
43207                structure is unnamed), the `=' sign, the type of the
43208                members and by `}'
43209 unions         `(' followed by the name of the structure (or `?' if the
43210                union is unnamed), the `=' sign, the type of the members
43211                followed by `)'
43212 vectors        `![' followed by the vector_size (the number of bytes
43213                composing the vector) followed by a comma, followed by
43214                the alignment (in bytes) of the vector, followed by the
43215                type of the elements followed by `]'
43216
43217  Here are some types and their encodings, as they are generated by the
43218 compiler on an i386 machine:
43219
43220
43221 Objective-C type   Compiler encoding
43222      int a[10];    `[10i]'
43223      struct {      `{?=i[3f]b128i3b131i2c}'
43224        int i;      
43225        float f[3]; 
43226        int a:3;    
43227        int b:2;    
43228        char c;     
43229      }             
43230      int a __attribute__ ((vector_size (16)));`![16,16i]' (alignment would depend on the machine)
43231
43232
43233  In addition to the types the compiler also encodes the type
43234 specifiers.  The table below describes the encoding of the current
43235 Objective-C type specifiers:
43236
43237
43238 Specifier          Encoding
43239 `const'            `r'
43240 `in'               `n'
43241 `inout'            `N'
43242 `out'              `o'
43243 `bycopy'           `O'
43244 `byref'            `R'
43245 `oneway'           `V'
43246
43247
43248  The type specifiers are encoded just before the type.  Unlike types
43249 however, the type specifiers are only encoded when they appear in method
43250 argument types.
43251
43252  Note how `const' interacts with pointers:
43253
43254
43255 Objective-C type   Compiler encoding
43256      const int     `ri'
43257      const int*    `^ri'
43258      int *const    `r^i'
43259
43260
43261  `const int*' is a pointer to a `const int', and so is encoded as
43262 `^ri'.  `int* const', instead, is a `const' pointer to an `int', and so
43263 is encoded as `r^i'.
43264
43265  Finally, there is a complication when encoding `const char *' versus
43266 `char * const'.  Because `char *' is encoded as `*' and not as `^c',
43267 there is no way to express the fact that `r' applies to the pointer or
43268 to the pointee.
43269
43270  Hence, it is assumed as a convention that `r*' means `const char *'
43271 (since it is what is most often meant), and there is no way to encode
43272 `char *const'.  `char *const' would simply be encoded as `*', and the
43273 `const' is lost.
43274
43275 * Menu:
43276
43277 * Legacy type encoding::
43278 * @encode::
43279 * Method signatures::
43280
43281 \1f
43282 File: gcc.info,  Node: Legacy type encoding,  Next: @encode,  Up: Type encoding
43283
43284 8.3.1 Legacy type encoding
43285 --------------------------
43286
43287 Unfortunately, historically GCC used to have a number of bugs in its
43288 encoding code.  The NeXT runtime expects GCC to emit type encodings in
43289 this historical format (compatible with GCC-3.3), so when using the
43290 NeXT runtime, GCC will introduce on purpose a number of incorrect
43291 encodings:
43292
43293    * the read-only qualifier of the pointee gets emitted before the '^'.
43294      The read-only qualifier of the pointer itself gets ignored, unless
43295      it is a typedef.  Also, the 'r' is only emitted for the outermost
43296      type.
43297
43298    * 32-bit longs are encoded as 'l' or 'L', but not always.  For
43299      typedefs, the compiler uses 'i' or 'I' instead if encoding a
43300      struct field or a pointer.
43301
43302    * `enum's are always encoded as 'i' (int) even if they are actually
43303      unsigned or long.
43304
43305
43306  In addition to that, the NeXT runtime uses a different encoding for
43307 bitfields.  It encodes them as `b' followed by the size, without a bit
43308 offset or the underlying field type.
43309
43310 \1f
43311 File: gcc.info,  Node: @encode,  Next: Method signatures,  Prev: Legacy type encoding,  Up: Type encoding
43312
43313 8.3.2 @encode
43314 -------------
43315
43316 GNU Objective-C supports the `@encode' syntax that allows you to create
43317 a type encoding from a C/Objective-C type.  For example, `@encode(int)'
43318 is compiled by the compiler into `"i"'.
43319
43320  `@encode' does not support type qualifiers other than `const'.  For
43321 example, `@encode(const char*)' is valid and is compiled into `"r*"',
43322 while `@encode(bycopy char *)' is invalid and will cause a compilation
43323 error.
43324
43325 \1f
43326 File: gcc.info,  Node: Method signatures,  Prev: @encode,  Up: Type encoding
43327
43328 8.3.3 Method signatures
43329 -----------------------
43330
43331 This section documents the encoding of method types, which is rarely
43332 needed to use Objective-C.  You should skip it at a first reading; the
43333 runtime provides functions that will work on methods and can walk
43334 through the list of parameters and interpret them for you.  These
43335 functions are part of the public "API" and are the preferred way to
43336 interact with method signatures from user code.
43337
43338  But if you need to debug a problem with method signatures and need to
43339 know how they are implemented (i.e., the "ABI"), read on.
43340
43341  Methods have their "signature" encoded and made available to the
43342 runtime.  The "signature" encodes all the information required to
43343 dynamically build invocations of the method at runtime: return type and
43344 arguments.
43345
43346  The "signature" is a null-terminated string, composed of the following:
43347
43348    * The return type, including type qualifiers.  For example, a method
43349      returning `int' would have `i' here.
43350
43351    * The total size (in bytes) required to pass all the parameters.
43352      This includes the two hidden parameters (the object `self' and the
43353      method selector `_cmd').
43354
43355    * Each argument, with the type encoding, followed by the offset (in
43356      bytes) of the argument in the list of parameters.
43357
43358
43359  For example, a method with no arguments and returning `int' would have
43360 the signature `i8@0:4' if the size of a pointer is 4.  The signature is
43361 interpreted as follows: the `i' is the return type (an `int'), the `8'
43362 is the total size of the parameters in bytes (two pointers each of size
43363 4), the `@0' is the first parameter (an object at byte offset `0') and
43364 `:4' is the second parameter (a `SEL' at byte offset `4').
43365
43366  You can easily find more examples by running the "strings" program on
43367 an Objective-C object file compiled by GCC.  You'll see a lot of
43368 strings that look very much like `i8@0:4'.  They are signatures of
43369 Objective-C methods.
43370
43371 \1f
43372 File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
43373
43374 8.4 Garbage Collection
43375 ======================
43376
43377 This section is specific for the GNU Objective-C runtime.  If you are
43378 using a different runtime, you can skip it.
43379
43380  Support for garbage collection with the GNU runtime has been added by
43381 using a powerful conservative garbage collector, known as the
43382 Boehm-Demers-Weiser conservative garbage collector.
43383
43384  To enable the support for it you have to configure the compiler using
43385 an additional argument, `--enable-objc-gc'.  This will build the
43386 boehm-gc library, and build an additional runtime library which has
43387 several enhancements to support the garbage collector.  The new library
43388 has a new name, `libobjc_gc.a' to not conflict with the
43389 non-garbage-collected library.
43390
43391  When the garbage collector is used, the objects are allocated using the
43392 so-called typed memory allocation mechanism available in the
43393 Boehm-Demers-Weiser collector.  This mode requires precise information
43394 on where pointers are located inside objects.  This information is
43395 computed once per class, immediately after the class has been
43396 initialized.
43397
43398  There is a new runtime function `class_ivar_set_gcinvisible()' which
43399 can be used to declare a so-called "weak pointer" reference.  Such a
43400 pointer is basically hidden for the garbage collector; this can be
43401 useful in certain situations, especially when you want to keep track of
43402 the allocated objects, yet allow them to be collected.  This kind of
43403 pointers can only be members of objects, you cannot declare a global
43404 pointer as a weak reference.  Every type which is a pointer type can be
43405 declared a weak pointer, including `id', `Class' and `SEL'.
43406
43407  Here is an example of how to use this feature.  Suppose you want to
43408 implement a class whose instances hold a weak pointer reference; the
43409 following class does this:
43410
43411
43412      @interface WeakPointer : Object
43413      {
43414          const void* weakPointer;
43415      }
43416
43417      - initWithPointer:(const void*)p;
43418      - (const void*)weakPointer;
43419      @end
43420
43421
43422      @implementation WeakPointer
43423
43424      + (void)initialize
43425      {
43426        if (self == objc_lookUpClass ("WeakPointer"))
43427          class_ivar_set_gcinvisible (self, "weakPointer", YES);
43428      }
43429
43430      - initWithPointer:(const void*)p
43431      {
43432        weakPointer = p;
43433        return self;
43434      }
43435
43436      - (const void*)weakPointer
43437      {
43438        return weakPointer;
43439      }
43440
43441      @end
43442
43443  Weak pointers are supported through a new type character specifier
43444 represented by the `!' character.  The `class_ivar_set_gcinvisible()'
43445 function adds or removes this specifier to the string type description
43446 of the instance variable named as argument.
43447
43448 \1f
43449 File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
43450
43451 8.5 Constant string objects
43452 ===========================
43453
43454 GNU Objective-C provides constant string objects that are generated
43455 directly by the compiler.  You declare a constant string object by
43456 prefixing a C constant string with the character `@':
43457
43458        id myString = @"this is a constant string object";
43459
43460  The constant string objects are by default instances of the
43461 `NXConstantString' class which is provided by the GNU Objective-C
43462 runtime.  To get the definition of this class you must include the
43463 `objc/NXConstStr.h' header file.
43464
43465  User defined libraries may want to implement their own constant string
43466 class.  To be able to support them, the GNU Objective-C compiler
43467 provides a new command line options
43468 `-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
43469 to a strict structure, the same as `NXConstantString''s structure:
43470
43471
43472      @interface MyConstantStringClass
43473      {
43474        Class isa;
43475        char *c_string;
43476        unsigned int len;
43477      }
43478      @end
43479
43480  `NXConstantString' inherits from `Object'; user class libraries may
43481 choose to inherit the customized constant string class from a different
43482 class than `Object'.  There is no requirement in the methods the
43483 constant string class has to implement, but the final ivar layout of
43484 the class must be the compatible with the given structure.
43485
43486  When the compiler creates the statically allocated constant string
43487 object, the `c_string' field will be filled by the compiler with the
43488 string; the `length' field will be filled by the compiler with the
43489 string length; the `isa' pointer will be filled with `NULL' by the
43490 compiler, and it will later be fixed up automatically at runtime by the
43491 GNU Objective-C runtime library to point to the class which was set by
43492 the `-fconstant-string-class' option when the object file is loaded (if
43493 you wonder how it works behind the scenes, the name of the class to
43494 use, and the list of static objects to fixup, are stored by the
43495 compiler in the object file in a place where the GNU runtime library
43496 will find them at runtime).
43497
43498  As a result, when a file is compiled with the
43499 `-fconstant-string-class' option, all the constant string objects will
43500 be instances of the class specified as argument to this option.  It is
43501 possible to have multiple compilation units referring to different
43502 constant string classes, neither the compiler nor the linker impose any
43503 restrictions in doing this.
43504
43505 \1f
43506 File: gcc.info,  Node: compatibility_alias,  Next: Exceptions,  Prev: Constant string objects,  Up: Objective-C
43507
43508 8.6 compatibility_alias
43509 =======================
43510
43511 The keyword `@compatibility_alias' allows you to define a class name as
43512 equivalent to another class name.  For example:
43513
43514      @compatibility_alias WOApplication GSWApplication;
43515
43516  tells the compiler that each time it encounters `WOApplication' as a
43517 class name, it should replace it with `GSWApplication' (that is,
43518 `WOApplication' is just an alias for `GSWApplication').
43519
43520  There are some constraints on how this can be used--
43521
43522    * `WOApplication' (the alias) must not be an existing class;
43523
43524    * `GSWApplication' (the real class) must be an existing class.
43525
43526
43527 \1f
43528 File: gcc.info,  Node: Exceptions,  Next: Synchronization,  Prev: compatibility_alias,  Up: Objective-C
43529
43530 8.7 Exceptions
43531 ==============
43532
43533 GNU Objective-C provides exception support built into the language, as
43534 in the following example:
43535
43536        @try {
43537          ...
43538             @throw expr;
43539          ...
43540        }
43541        @catch (AnObjCClass *exc) {
43542          ...
43543            @throw expr;
43544          ...
43545            @throw;
43546          ...
43547        }
43548        @catch (AnotherClass *exc) {
43549          ...
43550        }
43551        @catch (id allOthers) {
43552          ...
43553        }
43554        @finally {
43555          ...
43556            @throw expr;
43557          ...
43558        }
43559
43560  The `@throw' statement may appear anywhere in an Objective-C or
43561 Objective-C++ program; when used inside of a `@catch' block, the
43562 `@throw' may appear without an argument (as shown above), in which case
43563 the object caught by the `@catch' will be rethrown.
43564
43565  Note that only (pointers to) Objective-C objects may be thrown and
43566 caught using this scheme.  When an object is thrown, it will be caught
43567 by the nearest `@catch' clause capable of handling objects of that
43568 type, analogously to how `catch' blocks work in C++ and Java.  A
43569 `@catch(id ...)' clause (as shown above) may also be provided to catch
43570 any and all Objective-C exceptions not caught by previous `@catch'
43571 clauses (if any).
43572
43573  The `@finally' clause, if present, will be executed upon exit from the
43574 immediately preceding `@try ... @catch' section.  This will happen
43575 regardless of whether any exceptions are thrown, caught or rethrown
43576 inside the `@try ... @catch' section, analogously to the behavior of
43577 the `finally' clause in Java.
43578
43579  There are several caveats to using the new exception mechanism:
43580
43581    * The `-fobjc-exceptions' command line option must be used when
43582      compiling Objective-C files that use exceptions.
43583
43584    * With the GNU runtime, exceptions are always implemented as "native"
43585      exceptions and it is recommended that the `-fexceptions' and
43586      `-shared-libgcc' options are used when linking.
43587
43588    * With the NeXT runtime, although currently designed to be binary
43589      compatible with `NS_HANDLER'-style idioms provided by the
43590      `NSException' class, the new exceptions can only be used on Mac OS
43591      X 10.3 (Panther) and later systems, due to additional functionality
43592      needed in the NeXT Objective-C runtime.
43593
43594    * As mentioned above, the new exceptions do not support handling
43595      types other than Objective-C objects.   Furthermore, when used from
43596      Objective-C++, the Objective-C exception model does not
43597      interoperate with C++ exceptions at this time.  This means you
43598      cannot `@throw' an exception from Objective-C and `catch' it in
43599      C++, or vice versa (i.e., `throw ... @catch').
43600
43601 \1f
43602 File: gcc.info,  Node: Synchronization,  Next: Fast enumeration,  Prev: Exceptions,  Up: Objective-C
43603
43604 8.8 Synchronization
43605 ===================
43606
43607 GNU Objective-C provides support for synchronized blocks:
43608
43609        @synchronized (ObjCClass *guard) {
43610          ...
43611        }
43612
43613  Upon entering the `@synchronized' block, a thread of execution shall
43614 first check whether a lock has been placed on the corresponding `guard'
43615 object by another thread.  If it has, the current thread shall wait
43616 until the other thread relinquishes its lock.  Once `guard' becomes
43617 available, the current thread will place its own lock on it, execute
43618 the code contained in the `@synchronized' block, and finally relinquish
43619 the lock (thereby making `guard' available to other threads).
43620
43621  Unlike Java, Objective-C does not allow for entire methods to be
43622 marked `@synchronized'.  Note that throwing exceptions out of
43623 `@synchronized' blocks is allowed, and will cause the guarding object
43624 to be unlocked properly.
43625
43626  Because of the interactions between synchronization and exception
43627 handling, you can only use `@synchronized' when compiling with
43628 exceptions enabled, that is with the command line option
43629 `-fobjc-exceptions'.
43630
43631 \1f
43632 File: gcc.info,  Node: Fast enumeration,  Next: Messaging with the GNU Objective-C runtime,  Prev: Synchronization,  Up: Objective-C
43633
43634 8.9 Fast enumeration
43635 ====================
43636
43637 * Menu:
43638
43639 * Using fast enumeration::
43640 * c99-like fast enumeration syntax::
43641 * Fast enumeration details::
43642 * Fast enumeration protocol::
43643
43644 \1f
43645 File: gcc.info,  Node: Using fast enumeration,  Next: c99-like fast enumeration syntax,  Up: Fast enumeration
43646
43647 8.9.1 Using fast enumeration
43648 ----------------------------
43649
43650 GNU Objective-C provides support for the fast enumeration syntax:
43651
43652        id array = ...;
43653        id object;
43654
43655        for (object in array)
43656        {
43657          /* Do something with 'object' */
43658        }
43659
43660  `array' needs to be an Objective-C object (usually a collection
43661 object, for example an array, a dictionary or a set) which implements
43662 the "Fast Enumeration Protocol" (see below).  If you are using a
43663 Foundation library such as GNUstep Base or Apple Cocoa Foundation, all
43664 collection objects in the library implement this protocol and can be
43665 used in this way.
43666
43667  The code above would iterate over all objects in `array'.  For each of
43668 them, it assigns it to `object', then executes the `Do something with
43669 'object'' statements.
43670
43671  Here is a fully worked-out example using a Foundation library (which
43672 provides the implementation of `NSArray', `NSString' and `NSLog'):
43673
43674        NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
43675        NSString *object;
43676
43677        for (object in array)
43678          NSLog (@"Iterating over %@", object);
43679
43680 \1f
43681 File: gcc.info,  Node: c99-like fast enumeration syntax,  Next: Fast enumeration details,  Prev: Using fast enumeration,  Up: Fast enumeration
43682
43683 8.9.2 c99-like fast enumeration syntax
43684 --------------------------------------
43685
43686 A c99-like declaration syntax is also allowed:
43687
43688        id array = ...;
43689
43690        for (id object in array)
43691        {
43692          /* Do something with 'object'  */
43693        }
43694
43695  this is completely equivalent to:
43696
43697        id array = ...;
43698
43699        {
43700          id object;
43701          for (object in array)
43702          {
43703            /* Do something with 'object'  */
43704          }
43705        }
43706
43707  but can save some typing.
43708
43709  Note that the option `-std=c99' is not required to allow this syntax
43710 in Objective-C.
43711
43712 \1f
43713 File: gcc.info,  Node: Fast enumeration details,  Next: Fast enumeration protocol,  Prev: c99-like fast enumeration syntax,  Up: Fast enumeration
43714
43715 8.9.3 Fast enumeration details
43716 ------------------------------
43717
43718 Here is a more technical description with the gory details.  Consider
43719 the code
43720
43721        for (OBJECT EXPRESSION in COLLECTION EXPRESSION)
43722        {
43723          STATEMENTS
43724        }
43725
43726  here is what happens when you run it:
43727
43728    * `COLLECTION EXPRESSION' is evaluated exactly once and the result
43729      is used as the collection object to iterate over.  This means it
43730      is safe to write code such as `for (object in [NSDictionary
43731      keyEnumerator]) ...'.
43732
43733    * the iteration is implemented by the compiler by repeatedly getting
43734      batches of objects from the collection object using the fast
43735      enumeration protocol (see below), then iterating over all objects
43736      in the batch.  This is faster than a normal enumeration where
43737      objects are retrieved one by one (hence the name "fast
43738      enumeration").
43739
43740    * if there are no objects in the collection, then `OBJECT
43741      EXPRESSION' is set to `nil' and the loop immediately terminates.
43742
43743    * if there are objects in the collection, then for each object in the
43744      collection (in the order they are returned) `OBJECT EXPRESSION' is
43745      set to the object, then `STATEMENTS' are executed.
43746
43747    * `STATEMENTS' can contain `break' and `continue' commands, which
43748      will abort the iteration or skip to the next loop iteration as
43749      expected.
43750
43751    * when the iteration ends because there are no more objects to
43752      iterate over, `OBJECT EXPRESSION' is set to `nil'.  This allows
43753      you to determine whether the iteration finished because a `break'
43754      command was used (in which case `OBJECT EXPRESSION' will remain
43755      set to the last object that was iterated over) or because it
43756      iterated over all the objects (in which case `OBJECT EXPRESSION'
43757      will be set to `nil').
43758
43759    * `STATEMENTS' must not make any changes to the collection object;
43760      if they do, it is a hard error and the fast enumeration terminates
43761      by invoking `objc_enumerationMutation', a runtime function that
43762      normally aborts the program but which can be customized by
43763      Foundation libraries via `objc_set_mutation_handler' to do
43764      something different, such as raising an exception.
43765
43766
43767 \1f
43768 File: gcc.info,  Node: Fast enumeration protocol,  Prev: Fast enumeration details,  Up: Fast enumeration
43769
43770 8.9.4 Fast enumeration protocol
43771 -------------------------------
43772
43773 If you want your own collection object to be usable with fast
43774 enumeration, you need to have it implement the method
43775
43776      - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state
43777                                            objects: (id *)objects
43778                                              count: (unsigned long)len;
43779
43780  where `NSFastEnumerationState' must be defined in your code as follows:
43781
43782      typedef struct
43783      {
43784        unsigned long state;
43785        id            *itemsPtr;
43786        unsigned long *mutationsPtr;
43787        unsigned long extra[5];
43788      } NSFastEnumerationState;
43789
43790  If no `NSFastEnumerationState' is defined in your code, the compiler
43791 will automatically replace `NSFastEnumerationState *' with `struct
43792 __objcFastEnumerationState *', where that type is silently defined by
43793 the compiler in an identical way.  This can be confusing and we
43794 recommend that you define `NSFastEnumerationState' (as shown above)
43795 instead.
43796
43797  The method is called repeatedly during a fast enumeration to retrieve
43798 batches of objects.  Each invocation of the method should retrieve the
43799 next batch of objects.
43800
43801  The return value of the method is the number of objects in the current
43802 batch; this should not exceed `len', which is the maximum size of a
43803 batch as requested by the caller.  The batch itself is returned in the
43804 `itemsPtr' field of the `NSFastEnumerationState' struct.
43805
43806  To help with returning the objects, the `objects' array is a C array
43807 preallocated by the caller (on the stack) of size `len'.  In many cases
43808 you can put the objects you want to return in that `objects' array,
43809 then do `itemsPtr = objects'.  But you don't have to; if your
43810 collection already has the objects to return in some form of C array,
43811 it could return them from there instead.
43812
43813  The `state' and `extra' fields of the `NSFastEnumerationState'
43814 structure allows your collection object to keep track of the state of
43815 the enumeration.  In a simple array implementation, `state' may keep
43816 track of the index of the last object that was returned, and `extra'
43817 may be unused.
43818
43819  The `mutationsPtr' field of the `NSFastEnumerationState' is used to
43820 keep track of mutations.  It should point to a number; before working
43821 on each object, the fast enumeration loop will check that this number
43822 has not changed.  If it has, a mutation has happened and the fast
43823 enumeration will abort.  So, `mutationsPtr' could be set to point to
43824 some sort of version number of your collection, which is increased by
43825 one every time there is a change (for example when an object is added
43826 or removed).  Or, if you are content with less strict mutation checks,
43827 it could point to the number of objects in your collection or some
43828 other value that can be checked to perform an approximate check that
43829 the collection has not been mutated.
43830
43831  Finally, note how we declared the `len' argument and the return value
43832 to be of type `unsigned long'.  They could also be declared to be of
43833 type `unsigned int' and everything would still work.
43834
43835 \1f
43836 File: gcc.info,  Node: Messaging with the GNU Objective-C runtime,  Prev: Fast enumeration,  Up: Objective-C
43837
43838 8.10 Messaging with the GNU Objective-C runtime
43839 ===============================================
43840
43841 This section is specific for the GNU Objective-C runtime.  If you are
43842 using a different runtime, you can skip it.
43843
43844  The implementation of messaging in the GNU Objective-C runtime is
43845 designed to be portable, and so is based on standard C.
43846
43847  Sending a message in the GNU Objective-C runtime is composed of two
43848 separate steps.  First, there is a call to the lookup function,
43849 `objc_msg_lookup ()' (or, in the case of messages to super,
43850 `objc_msg_lookup_super ()').  This runtime function takes as argument
43851 the receiver and the selector of the method to be called; it returns
43852 the `IMP', that is a pointer to the function implementing the method.
43853 The second step of method invocation consists of casting this pointer
43854 function to the appropriate function pointer type, and calling the
43855 function pointed to it with the right arguments.
43856
43857  For example, when the compiler encounters a method invocation such as
43858 `[object init]', it compiles it into a call to `objc_msg_lookup
43859 (object, @selector(init))' followed by a cast of the returned value to
43860 the appropriate function pointer type, and then it calls it.
43861
43862 * Menu:
43863
43864 * Dynamically registering methods::
43865 * Forwarding hook::
43866
43867 \1f
43868 File: gcc.info,  Node: Dynamically registering methods,  Next: Forwarding hook,  Up: Messaging with the GNU Objective-C runtime
43869
43870 8.10.1 Dynamically registering methods
43871 --------------------------------------
43872
43873 If `objc_msg_lookup()' does not find a suitable method implementation,
43874 because the receiver does not implement the required method, it tries
43875 to see if the class can dynamically register the method.
43876
43877  To do so, the runtime checks if the class of the receiver implements
43878 the method
43879
43880      + (BOOL) resolveInstanceMethod: (SEL)selector;
43881
43882  in the case of an instance method, or
43883
43884      + (BOOL) resolveClassMethod: (SEL)selector;
43885
43886  in the case of a class method.  If the class implements it, the
43887 runtime invokes it, passing as argument the selector of the original
43888 method, and if it returns `YES', the runtime tries the lookup again,
43889 which could now succeed if a matching method was added dynamically by
43890 `+resolveInstanceMethod:' or `+resolveClassMethod:'.
43891
43892  This allows classes to dynamically register methods (by adding them to
43893 the class using `class_addMethod') when they are first called.  To do
43894 so, a class should implement `+resolveInstanceMethod:' (or, depending
43895 on the case, `+resolveClassMethod:') and have it recognize the
43896 selectors of methods that can be registered dynamically at runtime,
43897 register them, and return `YES'.  It should return `NO' for methods
43898 that it does not dynamically registered at runtime.
43899
43900  If `+resolveInstanceMethod:' (or `+resolveClassMethod:') is not
43901 implemented or returns `NO', the runtime then tries the forwarding hook.
43902
43903  Support for `+resolveInstanceMethod:' and `resolveClassMethod:' was
43904 added to the GNU Objective-C runtime in GCC version 4.6.
43905
43906 \1f
43907 File: gcc.info,  Node: Forwarding hook,  Prev: Dynamically registering methods,  Up: Messaging with the GNU Objective-C runtime
43908
43909 8.10.2 Forwarding hook
43910 ----------------------
43911
43912 The GNU Objective-C runtime provides a hook, called
43913 `__objc_msg_forward2', which is called by `objc_msg_lookup()' when it
43914 can't find a method implementation in the runtime tables and after
43915 calling `+resolveInstanceMethod:' and `+resolveClassMethod:' has been
43916 attempted and did not succeed in dynamically registering the method.
43917
43918  To configure the hook, you set the global variable
43919 `__objc_msg_forward2' to a function with the same argument and return
43920 types of `objc_msg_lookup()'.  When `objc_msg_lookup()' can not find a
43921 method implementation, it invokes the hook function you provided to get
43922 a method implementation to return.  So, in practice
43923 `__objc_msg_forward2' allows you to extend `objc_msg_lookup()' by
43924 adding some custom code that is called to do a further lookup when no
43925 standard method implementation can be found using the normal lookup.
43926
43927  This hook is generally reserved for "Foundation" libraries such as
43928 GNUstep Base, which use it to implement their high-level method
43929 forwarding API, typically based around the `forwardInvocation:' method.
43930 So, unless you are implementing your own "Foundation" library, you
43931 should not set this hook.
43932
43933  In a typical forwarding implementation, the `__objc_msg_forward2' hook
43934 function determines the argument and return type of the method that is
43935 being looked up, and then creates a function that takes these arguments
43936 and has that return type, and returns it to the caller.  Creating this
43937 function is non-trivial and is typically performed using a dedicated
43938 library such as `libffi'.
43939
43940  The forwarding method implementation thus created is returned by
43941 `objc_msg_lookup()' and is executed as if it was a normal method
43942 implementation.  When the forwarding method implementation is called,
43943 it is usually expected to pack all arguments into some sort of object
43944 (typically, an `NSInvocation' in a "Foundation" library), and hand it
43945 over to the programmer (`forwardInvocation:') who is then allowed to
43946 manipulate the method invocation using a high-level API provided by the
43947 "Foundation" library.  For example, the programmer may want to examine
43948 the method invocation arguments and name and potentially change them
43949 before forwarding the method invocation to one or more local objects
43950 (`performInvocation:') or even to remote objects (by using Distributed
43951 Objects or some other mechanism).  When all this completes, the return
43952 value is passed back and must be returned correctly to the original
43953 caller.
43954
43955  Note that the GNU Objective-C runtime currently provides no support
43956 for method forwarding or method invocations other than the
43957 `__objc_msg_forward2' hook.
43958
43959  If the forwarding hook does not exist or returns `NULL', the runtime
43960 currently attempts forwarding using an older, deprecated API, and if
43961 that fails, it aborts the program.  In future versions of the GNU
43962 Objective-C runtime, the runtime will immediately abort.
43963
43964 \1f
43965 File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
43966
43967 9 Binary Compatibility
43968 **********************
43969
43970 Binary compatibility encompasses several related concepts:
43971
43972 "application binary interface (ABI)"
43973      The set of runtime conventions followed by all of the tools that
43974      deal with binary representations of a program, including
43975      compilers, assemblers, linkers, and language runtime support.
43976      Some ABIs are formal with a written specification, possibly
43977      designed by multiple interested parties.  Others are simply the
43978      way things are actually done by a particular set of tools.
43979
43980 "ABI conformance"
43981      A compiler conforms to an ABI if it generates code that follows
43982      all of the specifications enumerated by that ABI.  A library
43983      conforms to an ABI if it is implemented according to that ABI.  An
43984      application conforms to an ABI if it is built using tools that
43985      conform to that ABI and does not contain source code that
43986      specifically changes behavior specified by the ABI.
43987
43988 "calling conventions"
43989      Calling conventions are a subset of an ABI that specify of how
43990      arguments are passed and function results are returned.
43991
43992 "interoperability"
43993      Different sets of tools are interoperable if they generate files
43994      that can be used in the same program.  The set of tools includes
43995      compilers, assemblers, linkers, libraries, header files, startup
43996      files, and debuggers.  Binaries produced by different sets of
43997      tools are not interoperable unless they implement the same ABI.
43998      This applies to different versions of the same tools as well as
43999      tools from different vendors.
44000
44001 "intercallability"
44002      Whether a function in a binary built by one set of tools can call a
44003      function in a binary built by a different set of tools is a subset
44004      of interoperability.
44005
44006 "implementation-defined features"
44007      Language standards include lists of implementation-defined
44008      features whose behavior can vary from one implementation to
44009      another.  Some of these features are normally covered by a
44010      platform's ABI and others are not.  The features that are not
44011      covered by an ABI generally affect how a program behaves, but not
44012      intercallability.
44013
44014 "compatibility"
44015      Conformance to the same ABI and the same behavior of
44016      implementation-defined features are both relevant for
44017      compatibility.
44018
44019  The application binary interface implemented by a C or C++ compiler
44020 affects code generation and runtime support for:
44021
44022    * size and alignment of data types
44023
44024    * layout of structured types
44025
44026    * calling conventions
44027
44028    * register usage conventions
44029
44030    * interfaces for runtime arithmetic support
44031
44032    * object file formats
44033
44034  In addition, the application binary interface implemented by a C++
44035 compiler affects code generation and runtime support for:
44036    * name mangling
44037
44038    * exception handling
44039
44040    * invoking constructors and destructors
44041
44042    * layout, alignment, and padding of classes
44043
44044    * layout and alignment of virtual tables
44045
44046  Some GCC compilation options cause the compiler to generate code that
44047 does not conform to the platform's default ABI.  Other options cause
44048 different program behavior for implementation-defined features that are
44049 not covered by an ABI.  These options are provided for consistency with
44050 other compilers that do not follow the platform's default ABI or the
44051 usual behavior of implementation-defined features for the platform.  Be
44052 very careful about using such options.
44053
44054  Most platforms have a well-defined ABI that covers C code, but ABIs
44055 that cover C++ functionality are not yet common.
44056
44057  Starting with GCC 3.2, GCC binary conventions for C++ are based on a
44058 written, vendor-neutral C++ ABI that was designed to be specific to
44059 64-bit Itanium but also includes generic specifications that apply to
44060 any platform.  This C++ ABI is also implemented by other compiler
44061 vendors on some platforms, notably GNU/Linux and BSD systems.  We have
44062 tried hard to provide a stable ABI that will be compatible with future
44063 GCC releases, but it is possible that we will encounter problems that
44064 make this difficult.  Such problems could include different
44065 interpretations of the C++ ABI by different vendors, bugs in the ABI, or
44066 bugs in the implementation of the ABI in different compilers.  GCC's
44067 `-Wabi' switch warns when G++ generates code that is probably not
44068 compatible with the C++ ABI.
44069
44070  The C++ library used with a C++ compiler includes the Standard C++
44071 Library, with functionality defined in the C++ Standard, plus language
44072 runtime support.  The runtime support is included in a C++ ABI, but
44073 there is no formal ABI for the Standard C++ Library.  Two
44074 implementations of that library are interoperable if one follows the
44075 de-facto ABI of the other and if they are both built with the same
44076 compiler, or with compilers that conform to the same ABI for C++
44077 compiler and runtime support.
44078
44079  When G++ and another C++ compiler conform to the same C++ ABI, but the
44080 implementations of the Standard C++ Library that they normally use do
44081 not follow the same ABI for the Standard C++ Library, object files
44082 built with those compilers can be used in the same program only if they
44083 use the same C++ library.  This requires specifying the location of the
44084 C++ library header files when invoking the compiler whose usual library
44085 is not being used.  The location of GCC's C++ header files depends on
44086 how the GCC build was configured, but can be seen by using the G++ `-v'
44087 option.  With default configuration options for G++ 3.3 the compile
44088 line for a different C++ compiler needs to include
44089
44090          -IGCC_INSTALL_DIRECTORY/include/c++/3.3
44091
44092  Similarly, compiling code with G++ that must use a C++ library other
44093 than the GNU C++ library requires specifying the location of the header
44094 files for that other library.
44095
44096  The most straightforward way to link a program to use a particular C++
44097 library is to use a C++ driver that specifies that C++ library by
44098 default.  The `g++' driver, for example, tells the linker where to find
44099 GCC's C++ library (`libstdc++') plus the other libraries and startup
44100 files it needs, in the proper order.
44101
44102  If a program must use a different C++ library and it's not possible to
44103 do the final link using a C++ driver that uses that library by default,
44104 it is necessary to tell `g++' the location and name of that library.
44105 It might also be necessary to specify different startup files and other
44106 runtime support libraries, and to suppress the use of GCC's support
44107 libraries with one or more of the options `-nostdlib', `-nostartfiles',
44108 and `-nodefaultlibs'.
44109
44110 \1f
44111 File: gcc.info,  Node: Gcov,  Next: Trouble,  Prev: Compatibility,  Up: Top
44112
44113 10 `gcov'--a Test Coverage Program
44114 **********************************
44115
44116 `gcov' is a tool you can use in conjunction with GCC to test code
44117 coverage in your programs.
44118
44119 * Menu:
44120
44121 * Gcov Intro::                  Introduction to gcov.
44122 * Invoking Gcov::               How to use gcov.
44123 * Gcov and Optimization::       Using gcov with GCC optimization.
44124 * Gcov Data Files::             The files used by gcov.
44125 * Cross-profiling::             Data file relocation.
44126
44127 \1f
44128 File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
44129
44130 10.1 Introduction to `gcov'
44131 ===========================
44132
44133 `gcov' is a test coverage program.  Use it in concert with GCC to
44134 analyze your programs to help create more efficient, faster running
44135 code and to discover untested parts of your program.  You can use
44136 `gcov' as a profiling tool to help discover where your optimization
44137 efforts will best affect your code.  You can also use `gcov' along with
44138 the other profiling tool, `gprof', to assess which parts of your code
44139 use the greatest amount of computing time.
44140
44141  Profiling tools help you analyze your code's performance.  Using a
44142 profiler such as `gcov' or `gprof', you can find out some basic
44143 performance statistics, such as:
44144
44145    * how often each line of code executes
44146
44147    * what lines of code are actually executed
44148
44149    * how much computing time each section of code uses
44150
44151  Once you know these things about how your code works when compiled, you
44152 can look at each module to see which modules should be optimized.
44153 `gcov' helps you determine where to work on optimization.
44154
44155  Software developers also use coverage testing in concert with
44156 testsuites, to make sure software is actually good enough for a release.
44157 Testsuites can verify that a program works as expected; a coverage
44158 program tests to see how much of the program is exercised by the
44159 testsuite.  Developers can then determine what kinds of test cases need
44160 to be added to the testsuites to create both better testing and a better
44161 final product.
44162
44163  You should compile your code without optimization if you plan to use
44164 `gcov' because the optimization, by combining some lines of code into
44165 one function, may not give you as much information as you need to look
44166 for `hot spots' where the code is using a great deal of computer time.
44167 Likewise, because `gcov' accumulates statistics by line (at the lowest
44168 resolution), it works best with a programming style that places only
44169 one statement on each line.  If you use complicated macros that expand
44170 to loops or to other control structures, the statistics are less
44171 helpful--they only report on the line where the macro call appears.  If
44172 your complex macros behave like functions, you can replace them with
44173 inline functions to solve this problem.
44174
44175  `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how
44176 many times each line of a source file `SOURCEFILE.c' has executed.  You
44177 can use these logfiles along with `gprof' to aid in fine-tuning the
44178 performance of your programs.  `gprof' gives timing information you can
44179 use along with the information you get from `gcov'.
44180
44181  `gcov' works only on code compiled with GCC.  It is not compatible
44182 with any other profiling or test coverage mechanism.
44183
44184 \1f
44185 File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
44186
44187 10.2 Invoking `gcov'
44188 ====================
44189
44190      gcov [OPTIONS] FILES
44191
44192  `gcov' accepts the following options:
44193
44194 `-h'
44195 `--help'
44196      Display help about using `gcov' (on the standard output), and exit
44197      without doing any further processing.
44198
44199 `-v'
44200 `--version'
44201      Display the `gcov' version number (on the standard output), and
44202      exit without doing any further processing.
44203
44204 `-a'
44205 `--all-blocks'
44206      Write individual execution counts for every basic block.  Normally
44207      gcov outputs execution counts only for the main blocks of a line.
44208      With this option you can determine if blocks within a single line
44209      are not being executed.
44210
44211 `-b'
44212 `--branch-probabilities'
44213      Write branch frequencies to the output file, and write branch
44214      summary info to the standard output.  This option allows you to
44215      see how often each branch in your program was taken.
44216      Unconditional branches will not be shown, unless the `-u' option
44217      is given.
44218
44219 `-c'
44220 `--branch-counts'
44221      Write branch frequencies as the number of branches taken, rather
44222      than the percentage of branches taken.
44223
44224 `-n'
44225 `--no-output'
44226      Do not create the `gcov' output file.
44227
44228 `-l'
44229 `--long-file-names'
44230      Create long file names for included source files.  For example, if
44231      the header file `x.h' contains code, and was included in the file
44232      `a.c', then running `gcov' on the file `a.c' will produce an
44233      output file called `a.c##x.h.gcov' instead of `x.h.gcov'.  This
44234      can be useful if `x.h' is included in multiple source files and
44235      you want to see the individual contributions.  If you use the `-p'
44236      option, both the including and included file names will be
44237      complete path names.
44238
44239 `-p'
44240 `--preserve-paths'
44241      Preserve complete path information in the names of generated
44242      `.gcov' files.  Without this option, just the filename component is
44243      used.  With this option, all directories are used, with `/'
44244      characters translated to `#' characters, `.' directory components
44245      removed and unremoveable `..' components renamed to `^'.  This is
44246      useful if sourcefiles are in several different directories.
44247
44248 `-r'
44249 `--relative-only'
44250      Only output information about source files with a relative pathname
44251      (after source prefix elision).  Absolute paths are usually system
44252      header files and coverage of any inline functions therein is
44253      normally uninteresting.
44254
44255 `-f'
44256 `--function-summaries'
44257      Output summaries for each function in addition to the file level
44258      summary.
44259
44260 `-o DIRECTORY|FILE'
44261 `--object-directory DIRECTORY'
44262 `--object-file FILE'
44263      Specify either the directory containing the gcov data files, or the
44264      object path name.  The `.gcno', and `.gcda' data files are
44265      searched for using this option.  If a directory is specified, the
44266      data files are in that directory and named after the input file
44267      name, without its extension.  If a file is specified here, the
44268      data files are named after that file, without its extension.
44269
44270 `-s DIRECTORY'
44271 `--source-prefix DIRECTORY'
44272      A prefix for source file names to remove when generating the output
44273      coverage files.  This option is useful when building in a separate
44274      directory, and the pathname to the source directory is not wanted
44275      when determining the output file names.  Note that this prefix
44276      detection is applied before determining whether the source file is
44277      absolute.
44278
44279 `-u'
44280 `--unconditional-branches'
44281      When branch probabilities are given, include those of
44282      unconditional branches.  Unconditional branches are normally not
44283      interesting.
44284
44285 `-d'
44286 `--display-progress'
44287      Display the progress on the standard output.
44288
44289
44290  `gcov' should be run with the current directory the same as that when
44291 you invoked the compiler.  Otherwise it will not be able to locate the
44292 source files.  `gcov' produces files called `MANGLEDNAME.gcov' in the
44293 current directory.  These contain the coverage information of the
44294 source file they correspond to.  One `.gcov' file is produced for each
44295 source (or header) file containing code, which was compiled to produce
44296 the data files.  The MANGLEDNAME part of the output file name is
44297 usually simply the source file name, but can be something more
44298 complicated if the `-l' or `-p' options are given.  Refer to those
44299 options for details.
44300
44301  If you invoke `gcov' with multiple input files, the contributions from
44302 each input file are summed.  Typically you would invoke it with the
44303 same list of files as the final link of your executable.
44304
44305  The `.gcov' files contain the `:' separated fields along with program
44306 source code.  The format is
44307
44308      EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
44309
44310  Additional block information may succeed each line, when requested by
44311 command line option.  The EXECUTION_COUNT is `-' for lines containing
44312 no code.  Unexecuted lines are marked `#####' or `====', depending on
44313 whether they are reachable by non-exceptional paths or only exceptional
44314 paths such as C++ exception handlers, respectively.
44315
44316  Some lines of information at the start have LINE_NUMBER of zero.
44317 These preamble lines are of the form
44318
44319      -:0:TAG:VALUE
44320
44321  The ordering and number of these preamble lines will be augmented as
44322 `gcov' development progresses -- do not rely on them remaining
44323 unchanged.  Use TAG to locate a particular preamble line.
44324
44325  The additional block information is of the form
44326
44327      TAG INFORMATION
44328
44329  The INFORMATION is human readable, but designed to be simple enough
44330 for machine parsing too.
44331
44332  When printing percentages, 0% and 100% are only printed when the values
44333 are _exactly_ 0% and 100% respectively.  Other values which would
44334 conventionally be rounded to 0% or 100% are instead printed as the
44335 nearest non-boundary value.
44336
44337  When using `gcov', you must first compile your program with two
44338 special GCC options: `-fprofile-arcs -ftest-coverage'.  This tells the
44339 compiler to generate additional information needed by gcov (basically a
44340 flow graph of the program) and also includes additional code in the
44341 object files for generating the extra profiling information needed by
44342 gcov.  These additional files are placed in the directory where the
44343 object file is located.
44344
44345  Running the program will cause profile output to be generated.  For
44346 each source file compiled with `-fprofile-arcs', an accompanying
44347 `.gcda' file will be placed in the object file directory.
44348
44349  Running `gcov' with your program's source file names as arguments will
44350 now produce a listing of the code along with frequency of execution for
44351 each line.  For example, if your program is called `tmp.c', this is
44352 what you see when you use the basic `gcov' facility:
44353
44354      $ gcc -fprofile-arcs -ftest-coverage tmp.c
44355      $ a.out
44356      $ gcov tmp.c
44357      90.00% of 10 source lines executed in file tmp.c
44358      Creating tmp.c.gcov.
44359
44360  The file `tmp.c.gcov' contains output from `gcov'.  Here is a sample:
44361
44362              -:    0:Source:tmp.c
44363              -:    0:Graph:tmp.gcno
44364              -:    0:Data:tmp.gcda
44365              -:    0:Runs:1
44366              -:    0:Programs:1
44367              -:    1:#include <stdio.h>
44368              -:    2:
44369              -:    3:int main (void)
44370              1:    4:{
44371              1:    5:  int i, total;
44372              -:    6:
44373              1:    7:  total = 0;
44374              -:    8:
44375             11:    9:  for (i = 0; i < 10; i++)
44376             10:   10:    total += i;
44377              -:   11:
44378              1:   12:  if (total != 45)
44379          #####:   13:    printf ("Failure\n");
44380              -:   14:  else
44381              1:   15:    printf ("Success\n");
44382              1:   16:  return 0;
44383              -:   17:}
44384
44385  When you use the `-a' option, you will get individual block counts,
44386 and the output looks like this:
44387
44388              -:    0:Source:tmp.c
44389              -:    0:Graph:tmp.gcno
44390              -:    0:Data:tmp.gcda
44391              -:    0:Runs:1
44392              -:    0:Programs:1
44393              -:    1:#include <stdio.h>
44394              -:    2:
44395              -:    3:int main (void)
44396              1:    4:{
44397              1:    4-block  0
44398              1:    5:  int i, total;
44399              -:    6:
44400              1:    7:  total = 0;
44401              -:    8:
44402             11:    9:  for (i = 0; i < 10; i++)
44403             11:    9-block  0
44404             10:   10:    total += i;
44405             10:   10-block  0
44406              -:   11:
44407              1:   12:  if (total != 45)
44408              1:   12-block  0
44409          #####:   13:    printf ("Failure\n");
44410          $$$$$:   13-block  0
44411              -:   14:  else
44412              1:   15:    printf ("Success\n");
44413              1:   15-block  0
44414              1:   16:  return 0;
44415              1:   16-block  0
44416              -:   17:}
44417
44418  In this mode, each basic block is only shown on one line - the last
44419 line of the block.  A multi-line block will only contribute to the
44420 execution count of that last line, and other lines will not be shown to
44421 contain code, unless previous blocks end on those lines.  The total
44422 execution count of a line is shown and subsequent lines show the
44423 execution counts for individual blocks that end on that line.  After
44424 each block, the branch and call counts of the block will be shown, if
44425 the `-b' option is given.
44426
44427  Because of the way GCC instruments calls, a call count can be shown
44428 after a line with no individual blocks.  As you can see, line 13
44429 contains a basic block that was not executed.
44430
44431  When you use the `-b' option, your output looks like this:
44432
44433      $ gcov -b tmp.c
44434      90.00% of 10 source lines executed in file tmp.c
44435      80.00% of 5 branches executed in file tmp.c
44436      80.00% of 5 branches taken at least once in file tmp.c
44437      50.00% of 2 calls executed in file tmp.c
44438      Creating tmp.c.gcov.
44439
44440  Here is a sample of a resulting `tmp.c.gcov' file:
44441
44442              -:    0:Source:tmp.c
44443              -:    0:Graph:tmp.gcno
44444              -:    0:Data:tmp.gcda
44445              -:    0:Runs:1
44446              -:    0:Programs:1
44447              -:    1:#include <stdio.h>
44448              -:    2:
44449              -:    3:int main (void)
44450      function main called 1 returned 1 blocks executed 75%
44451              1:    4:{
44452              1:    5:  int i, total;
44453              -:    6:
44454              1:    7:  total = 0;
44455              -:    8:
44456             11:    9:  for (i = 0; i < 10; i++)
44457      branch  0 taken 91% (fallthrough)
44458      branch  1 taken 9%
44459             10:   10:    total += i;
44460              -:   11:
44461              1:   12:  if (total != 45)
44462      branch  0 taken 0% (fallthrough)
44463      branch  1 taken 100%
44464          #####:   13:    printf ("Failure\n");
44465      call    0 never executed
44466              -:   14:  else
44467              1:   15:    printf ("Success\n");
44468      call    0 called 1 returned 100%
44469              1:   16:  return 0;
44470              -:   17:}
44471
44472  For each function, a line is printed showing how many times the
44473 function is called, how many times it returns and what percentage of the
44474 function's blocks were executed.
44475
44476  For each basic block, a line is printed after the last line of the
44477 basic block describing the branch or call that ends the basic block.
44478 There can be multiple branches and calls listed for a single source
44479 line if there are multiple basic blocks that end on that line.  In this
44480 case, the branches and calls are each given a number.  There is no
44481 simple way to map these branches and calls back to source constructs.
44482 In general, though, the lowest numbered branch or call will correspond
44483 to the leftmost construct on the source line.
44484
44485  For a branch, if it was executed at least once, then a percentage
44486 indicating the number of times the branch was taken divided by the
44487 number of times the branch was executed will be printed.  Otherwise, the
44488 message "never executed" is printed.
44489
44490  For a call, if it was executed at least once, then a percentage
44491 indicating the number of times the call returned divided by the number
44492 of times the call was executed will be printed.  This will usually be
44493 100%, but may be less for functions that call `exit' or `longjmp', and
44494 thus may not return every time they are called.
44495
44496  The execution counts are cumulative.  If the example program were
44497 executed again without removing the `.gcda' file, the count for the
44498 number of times each line in the source was executed would be added to
44499 the results of the previous run(s).  This is potentially useful in
44500 several ways.  For example, it could be used to accumulate data over a
44501 number of program runs as part of a test verification suite, or to
44502 provide more accurate long-term information over a large number of
44503 program runs.
44504
44505  The data in the `.gcda' files is saved immediately before the program
44506 exits.  For each source file compiled with `-fprofile-arcs', the
44507 profiling code first attempts to read in an existing `.gcda' file; if
44508 the file doesn't match the executable (differing number of basic block
44509 counts) it will ignore the contents of the file.  It then adds in the
44510 new execution counts and finally writes the data to the file.
44511
44512 \1f
44513 File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
44514
44515 10.3 Using `gcov' with GCC Optimization
44516 =======================================
44517
44518 If you plan to use `gcov' to help optimize your code, you must first
44519 compile your program with two special GCC options: `-fprofile-arcs
44520 -ftest-coverage'.  Aside from that, you can use any other GCC options;
44521 but if you want to prove that every single line in your program was
44522 executed, you should not compile with optimization at the same time.
44523 On some machines the optimizer can eliminate some simple code lines by
44524 combining them with other lines.  For example, code like this:
44525
44526      if (a != b)
44527        c = 1;
44528      else
44529        c = 0;
44530
44531 can be compiled into one instruction on some machines.  In this case,
44532 there is no way for `gcov' to calculate separate execution counts for
44533 each line because there isn't separate code for each line.  Hence the
44534 `gcov' output looks like this if you compiled the program with
44535 optimization:
44536
44537            100:   12:if (a != b)
44538            100:   13:  c = 1;
44539            100:   14:else
44540            100:   15:  c = 0;
44541
44542  The output shows that this block of code, combined by optimization,
44543 executed 100 times.  In one sense this result is correct, because there
44544 was only one instruction representing all four of these lines.  However,
44545 the output does not indicate how many times the result was 0 and how
44546 many times the result was 1.
44547
44548  Inlineable functions can create unexpected line counts.  Line counts
44549 are shown for the source code of the inlineable function, but what is
44550 shown depends on where the function is inlined, or if it is not inlined
44551 at all.
44552
44553  If the function is not inlined, the compiler must emit an out of line
44554 copy of the function, in any object file that needs it.  If `fileA.o'
44555 and `fileB.o' both contain out of line bodies of a particular
44556 inlineable function, they will also both contain coverage counts for
44557 that function.  When `fileA.o' and `fileB.o' are linked together, the
44558 linker will, on many systems, select one of those out of line bodies
44559 for all calls to that function, and remove or ignore the other.
44560 Unfortunately, it will not remove the coverage counters for the unused
44561 function body.  Hence when instrumented, all but one use of that
44562 function will show zero counts.
44563
44564  If the function is inlined in several places, the block structure in
44565 each location might not be the same.  For instance, a condition might
44566 now be calculable at compile time in some instances.  Because the
44567 coverage of all the uses of the inline function will be shown for the
44568 same source lines, the line counts themselves might seem inconsistent.
44569
44570  Long-running applications can use the `_gcov_reset' and `_gcov_dump'
44571 facilities to restrict profile collection to the program region of
44572 interest. Calling `_gcov_reset(void)' will clear all profile counters
44573 to zero, and calling `_gcov_dump(void)' will cause the profile
44574 information collected at that point to be dumped to `.gcda' output
44575 files.
44576
44577 \1f
44578 File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
44579
44580 10.4 Brief description of `gcov' data files
44581 ===========================================
44582
44583 `gcov' uses two files for profiling.  The names of these files are
44584 derived from the original _object_ file by substituting the file suffix
44585 with either `.gcno', or `.gcda'.  The files contain coverage and
44586 profile data stored in a platform-independent format.  The `.gcno'
44587 files are placed in the same directory as the object file.  By default,
44588 the `.gcda' files are also stored in the same directory as the object
44589 file, but the GCC `-fprofile-dir' option may be used to store the
44590 `.gcda' files in a separate directory.
44591
44592  The `.gcno' notes file is generated when the source file is compiled
44593 with the GCC `-ftest-coverage' option.  It contains information to
44594 reconstruct the basic block graphs and assign source line numbers to
44595 blocks.
44596
44597  The `.gcda' count data file is generated when a program containing
44598 object files built with the GCC `-fprofile-arcs' option is executed.  A
44599 separate `.gcda' file is created for each object file compiled with
44600 this option.  It contains arc transition counts, value profile counts,
44601 and some summary information.
44602
44603  The full details of the file format is specified in `gcov-io.h', and
44604 functions provided in that header file should be used to access the
44605 coverage files.
44606
44607 \1f
44608 File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov
44609
44610 10.5 Data file relocation to support cross-profiling
44611 ====================================================
44612
44613 Running the program will cause profile output to be generated.  For each
44614 source file compiled with `-fprofile-arcs', an accompanying `.gcda'
44615 file will be placed in the object file directory. That implicitly
44616 requires running the program on the same system as it was built or
44617 having the same absolute directory structure on the target system. The
44618 program will try to create the needed directory structure, if it is not
44619 already present.
44620
44621  To support cross-profiling, a program compiled with `-fprofile-arcs'
44622 can relocate the data files based on two environment variables:
44623
44624    * GCOV_PREFIX contains the prefix to add to the absolute paths in
44625      the object file. Prefix can be absolute, or relative.  The default
44626      is no prefix.
44627
44628    * GCOV_PREFIX_STRIP indicates the how many initial directory names
44629      to strip off the hardwired absolute paths. Default value is 0.
44630
44631      _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is
44632      undefined,  then a relative path is made out of the hardwired
44633      absolute paths.
44634
44635  For example, if the object file `/user/build/foo.o' was built with
44636 `-fprofile-arcs', the final executable will try to create the data file
44637 `/user/build/foo.gcda' when running on the target system.  This will
44638 fail if the corresponding directory does not exist and it is unable to
44639 create it.  This can be overcome by, for example, setting the
44640 environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'.
44641 Such a setting will name the data file `/target/run/build/foo.gcda'.
44642
44643  You must move the data files to the expected directory tree in order to
44644 use them for profile directed optimizations (`--use-profile'), or to
44645 use the `gcov' tool.
44646
44647 \1f
44648 File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Gcov,  Up: Top
44649
44650 11 Known Causes of Trouble with GCC
44651 ***********************************
44652
44653 This section describes known problems that affect users of GCC.  Most
44654 of these are not GCC bugs per se--if they were, we would fix them.  But
44655 the result for a user may be like the result of a bug.
44656
44657  Some of these problems are due to bugs in other software, some are
44658 missing features that are too much work to add, and some are places
44659 where people's opinions differ as to what is best.
44660
44661 * Menu:
44662
44663 * Actual Bugs::         Bugs we will fix later.
44664 * Interoperation::      Problems using GCC with other compilers,
44665                         and with certain linkers, assemblers and debuggers.
44666 * Incompatibilities::   GCC is incompatible with traditional C.
44667 * Fixed Headers::       GCC uses corrected versions of system header files.
44668                         This is necessary, but doesn't always work smoothly.
44669 * Standard Libraries::  GCC uses the system C library, which might not be
44670                         compliant with the ISO C standard.
44671 * Disappointments::     Regrettable things we can't change, but not quite bugs.
44672 * C++ Misunderstandings:: Common misunderstandings with GNU C++.
44673 * Non-bugs::            Things we think are right, but some others disagree.
44674 * Warnings and Errors:: Which problems in your code get warnings,
44675                         and which get errors.
44676
44677 \1f
44678 File: gcc.info,  Node: Actual Bugs,  Next: Interoperation,  Up: Trouble
44679
44680 11.1 Actual Bugs We Haven't Fixed Yet
44681 =====================================
44682
44683    * The `fixincludes' script interacts badly with automounters; if the
44684      directory of system header files is automounted, it tends to be
44685      unmounted while `fixincludes' is running.  This would seem to be a
44686      bug in the automounter.  We don't know any good way to work around
44687      it.
44688
44689 \1f
44690 File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Actual Bugs,  Up: Trouble
44691
44692 11.2 Interoperation
44693 ===================
44694
44695 This section lists various difficulties encountered in using GCC
44696 together with other compilers or with the assemblers, linkers,
44697 libraries and debuggers on certain systems.
44698
44699    * On many platforms, GCC supports a different ABI for C++ than do
44700      other compilers, so the object files compiled by GCC cannot be
44701      used with object files generated by another C++ compiler.
44702
44703      An area where the difference is most apparent is name mangling.
44704      The use of different name mangling is intentional, to protect you
44705      from more subtle problems.  Compilers differ as to many internal
44706      details of C++ implementation, including: how class instances are
44707      laid out, how multiple inheritance is implemented, and how virtual
44708      function calls are handled.  If the name encoding were made the
44709      same, your programs would link against libraries provided from
44710      other compilers--but the programs would then crash when run.
44711      Incompatible libraries are then detected at link time, rather than
44712      at run time.
44713
44714    * On some BSD systems, including some versions of Ultrix, use of
44715      profiling causes static variable destructors (currently used only
44716      in C++) not to be run.
44717
44718    * On a SPARC, GCC aligns all values of type `double' on an 8-byte
44719      boundary, and it expects every `double' to be so aligned.  The Sun
44720      compiler usually gives `double' values 8-byte alignment, with one
44721      exception: function arguments of type `double' may not be aligned.
44722
44723      As a result, if a function compiled with Sun CC takes the address
44724      of an argument of type `double' and passes this pointer of type
44725      `double *' to a function compiled with GCC, dereferencing the
44726      pointer may cause a fatal signal.
44727
44728      One way to solve this problem is to compile your entire program
44729      with GCC.  Another solution is to modify the function that is
44730      compiled with Sun CC to copy the argument into a local variable;
44731      local variables are always properly aligned.  A third solution is
44732      to modify the function that uses the pointer to dereference it via
44733      the following function `access_double' instead of directly with
44734      `*':
44735
44736           inline double
44737           access_double (double *unaligned_ptr)
44738           {
44739             union d2i { double d; int i[2]; };
44740
44741             union d2i *p = (union d2i *) unaligned_ptr;
44742             union d2i u;
44743
44744             u.i[0] = p->i[0];
44745             u.i[1] = p->i[1];
44746
44747             return u.d;
44748           }
44749
44750      Storing into the pointer can be done likewise with the same union.
44751
44752    * On Solaris, the `malloc' function in the `libmalloc.a' library may
44753      allocate memory that is only 4 byte aligned.  Since GCC on the
44754      SPARC assumes that doubles are 8 byte aligned, this may result in a
44755      fatal signal if doubles are stored in memory allocated by the
44756      `libmalloc.a' library.
44757
44758      The solution is to not use the `libmalloc.a' library.  Use instead
44759      `malloc' and related functions from `libc.a'; they do not have
44760      this problem.
44761
44762    * On the HP PA machine, ADB sometimes fails to work on functions
44763      compiled with GCC.  Specifically, it fails to work on functions
44764      that use `alloca' or variable-size arrays.  This is because GCC
44765      doesn't generate HP-UX unwind descriptors for such functions.  It
44766      may even be impossible to generate them.
44767
44768    * Debugging (`-g') is not supported on the HP PA machine, unless you
44769      use the preliminary GNU tools.
44770
44771    * Taking the address of a label may generate errors from the HP-UX
44772      PA assembler.  GAS for the PA does not have this problem.
44773
44774    * Using floating point parameters for indirect calls to static
44775      functions will not work when using the HP assembler.  There simply
44776      is no way for GCC to specify what registers hold arguments for
44777      static functions when using the HP assembler.  GAS for the PA does
44778      not have this problem.
44779
44780    * In extremely rare cases involving some very large functions you may
44781      receive errors from the HP linker complaining about an out of
44782      bounds unconditional branch offset.  This used to occur more often
44783      in previous versions of GCC, but is now exceptionally rare.  If
44784      you should run into it, you can work around by making your
44785      function smaller.
44786
44787    * GCC compiled code sometimes emits warnings from the HP-UX
44788      assembler of the form:
44789
44790           (warning) Use of GR3 when
44791             frame >= 8192 may cause conflict.
44792
44793      These warnings are harmless and can be safely ignored.
44794
44795    * In extremely rare cases involving some very large functions you may
44796      receive errors from the AIX Assembler complaining about a
44797      displacement that is too large.  If you should run into it, you
44798      can work around by making your function smaller.
44799
44800    * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker
44801      semantics which merges global symbols between libraries and
44802      applications, especially necessary for C++ streams functionality.
44803      This is not the default behavior of AIX shared libraries and
44804      dynamic linking.  `libstdc++.a' is built on AIX with
44805      "runtime-linking" enabled so that symbol merging can occur.  To
44806      utilize this feature, the application linked with `libstdc++.a'
44807      must include the `-Wl,-brtl' flag on the link line.  G++ cannot
44808      impose this because this option may interfere with the semantics
44809      of the user program and users may not always use `g++' to link his
44810      or her application.  Applications are not required to use the
44811      `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a'
44812      library which is not dependent on the symbol merging semantics
44813      will continue to function correctly.
44814
44815    * An application can interpose its own definition of functions for
44816      functions invoked by `libstdc++.a' with "runtime-linking" enabled
44817      on AIX.  To accomplish this the application must be linked with
44818      "runtime-linking" option and the functions explicitly must be
44819      exported by the application (`-Wl,-brtl,-bE:exportfile').
44820
44821    * AIX on the RS/6000 provides support (NLS) for environments outside
44822      of the United States.  Compilers and assemblers use NLS to support
44823      locale-specific representations of various objects including
44824      floating-point numbers (`.' vs `,' for separating decimal
44825      fractions).  There have been problems reported where the library
44826      linked with GCC does not produce the same floating-point formats
44827      that the assembler accepts.  If you have this problem, set the
44828      `LANG' environment variable to `C' or `En_US'.
44829
44830    * Even if you specify `-fdollars-in-identifiers', you cannot
44831      successfully use `$' in identifiers on the RS/6000 due to a
44832      restriction in the IBM assembler.  GAS supports these identifiers.
44833
44834
44835 \1f
44836 File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble
44837
44838 11.3 Incompatibilities of GCC
44839 =============================
44840
44841 There are several noteworthy incompatibilities between GNU C and K&R
44842 (non-ISO) versions of C.
44843
44844    * GCC normally makes string constants read-only.  If several
44845      identical-looking string constants are used, GCC stores only one
44846      copy of the string.
44847
44848      One consequence is that you cannot call `mktemp' with a string
44849      constant argument.  The function `mktemp' always alters the string
44850      its argument points to.
44851
44852      Another consequence is that `sscanf' does not work on some very
44853      old systems when passed a string constant as its format control
44854      string or input.  This is because `sscanf' incorrectly tries to
44855      write into the string constant.  Likewise `fscanf' and `scanf'.
44856
44857      The solution to these problems is to change the program to use
44858      `char'-array variables with initialization strings for these
44859      purposes instead of string constants.
44860
44861    * `-2147483648' is positive.
44862
44863      This is because 2147483648 cannot fit in the type `int', so
44864      (following the ISO C rules) its data type is `unsigned long int'.
44865      Negating this value yields 2147483648 again.
44866
44867    * GCC does not substitute macro arguments when they appear inside of
44868      string constants.  For example, the following macro in GCC
44869
44870           #define foo(a) "a"
44871
44872      will produce output `"a"' regardless of what the argument A is.
44873
44874    * When you use `setjmp' and `longjmp', the only automatic variables
44875      guaranteed to remain valid are those declared `volatile'.  This is
44876      a consequence of automatic register allocation.  Consider this
44877      function:
44878
44879           jmp_buf j;
44880
44881           foo ()
44882           {
44883             int a, b;
44884
44885             a = fun1 ();
44886             if (setjmp (j))
44887               return a;
44888
44889             a = fun2 ();
44890             /* `longjmp (j)' may occur in `fun3'. */
44891             return a + fun3 ();
44892           }
44893
44894      Here `a' may or may not be restored to its first value when the
44895      `longjmp' occurs.  If `a' is allocated in a register, then its
44896      first value is restored; otherwise, it keeps the last value stored
44897      in it.
44898
44899      If you use the `-W' option with the `-O' option, you will get a
44900      warning when GCC thinks such a problem might be possible.
44901
44902    * Programs that use preprocessing directives in the middle of macro
44903      arguments do not work with GCC.  For example, a program like this
44904      will not work:
44905
44906           foobar (
44907           #define luser
44908                   hack)
44909
44910      ISO C does not permit such a construct.
44911
44912    * K&R compilers allow comments to cross over an inclusion boundary
44913      (i.e. started in an include file and ended in the including file).
44914
44915    * Declarations of external variables and functions within a block
44916      apply only to the block containing the declaration.  In other
44917      words, they have the same scope as any other declaration in the
44918      same place.
44919
44920      In some other C compilers, an `extern' declaration affects all the
44921      rest of the file even if it happens within a block.
44922
44923    * In traditional C, you can combine `long', etc., with a typedef
44924      name, as shown here:
44925
44926           typedef int foo;
44927           typedef long foo bar;
44928
44929      In ISO C, this is not allowed: `long' and other type modifiers
44930      require an explicit `int'.
44931
44932    * PCC allows typedef names to be used as function parameters.
44933
44934    * Traditional C allows the following erroneous pair of declarations
44935      to appear together in a given scope:
44936
44937           typedef int foo;
44938           typedef foo foo;
44939
44940    * GCC treats all characters of identifiers as significant.
44941      According to K&R-1 (2.2), "No more than the first eight characters
44942      are significant, although more may be used.".  Also according to
44943      K&R-1 (2.2), "An identifier is a sequence of letters and digits;
44944      the first character must be a letter.  The underscore _ counts as
44945      a letter.", but GCC also allows dollar signs in identifiers.
44946
44947    * PCC allows whitespace in the middle of compound assignment
44948      operators such as `+='.  GCC, following the ISO standard, does not
44949      allow this.
44950
44951    * GCC complains about unterminated character constants inside of
44952      preprocessing conditionals that fail.  Some programs have English
44953      comments enclosed in conditionals that are guaranteed to fail; if
44954      these comments contain apostrophes, GCC will probably report an
44955      error.  For example, this code would produce an error:
44956
44957           #if 0
44958           You can't expect this to work.
44959           #endif
44960
44961      The best solution to such a problem is to put the text into an
44962      actual C comment delimited by `/*...*/'.
44963
44964    * Many user programs contain the declaration `long time ();'.  In the
44965      past, the system header files on many systems did not actually
44966      declare `time', so it did not matter what type your program
44967      declared it to return.  But in systems with ISO C headers, `time'
44968      is declared to return `time_t', and if that is not the same as
44969      `long', then `long time ();' is erroneous.
44970
44971      The solution is to change your program to use appropriate system
44972      headers (`<time.h>' on systems with ISO C headers) and not to
44973      declare `time' if the system header files declare it, or failing
44974      that to use `time_t' as the return type of `time'.
44975
44976    * When compiling functions that return `float', PCC converts it to a
44977      double.  GCC actually returns a `float'.  If you are concerned
44978      with PCC compatibility, you should declare your functions to return
44979      `double'; you might as well say what you mean.
44980
44981    * When compiling functions that return structures or unions, GCC
44982      output code normally uses a method different from that used on most
44983      versions of Unix.  As a result, code compiled with GCC cannot call
44984      a structure-returning function compiled with PCC, and vice versa.
44985
44986      The method used by GCC is as follows: a structure or union which is
44987      1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
44988      union with any other size is stored into an address supplied by
44989      the caller (usually in a special, fixed register, but on some
44990      machines it is passed on the stack).  The target hook
44991      `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
44992
44993      By contrast, PCC on most target machines returns structures and
44994      unions of any size by copying the data into an area of static
44995      storage, and then returning the address of that storage as if it
44996      were a pointer value.  The caller must copy the data from that
44997      memory area to the place where the value is wanted.  GCC does not
44998      use this method because it is slower and nonreentrant.
44999
45000      On some newer machines, PCC uses a reentrant convention for all
45001      structure and union returning.  GCC on most of these machines uses
45002      a compatible convention when returning structures and unions in
45003      memory, but still returns small structures and unions in registers.
45004
45005      You can tell GCC to use a compatible convention for all structure
45006      and union returning with the option `-fpcc-struct-return'.
45007
45008    * GCC complains about program fragments such as `0x74ae-0x4000'
45009      which appear to be two hexadecimal constants separated by the minus
45010      operator.  Actually, this string is a single "preprocessing token".
45011      Each such token must correspond to one token in C.  Since this
45012      does not, GCC prints an error message.  Although it may appear
45013      obvious that what is meant is an operator and two values, the ISO
45014      C standard specifically requires that this be treated as erroneous.
45015
45016      A "preprocessing token" is a "preprocessing number" if it begins
45017      with a digit and is followed by letters, underscores, digits,
45018      periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-'
45019      character sequences.  (In strict C90 mode, the sequences `p+',
45020      `p-', `P+' and `P-' cannot appear in preprocessing numbers.)
45021
45022      To make the above program fragment valid, place whitespace in
45023      front of the minus sign.  This whitespace will end the
45024      preprocessing number.
45025
45026 \1f
45027 File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
45028
45029 11.4 Fixed Header Files
45030 =======================
45031
45032 GCC needs to install corrected versions of some system header files.
45033 This is because most target systems have some header files that won't
45034 work with GCC unless they are changed.  Some have bugs, some are
45035 incompatible with ISO C, and some depend on special features of other
45036 compilers.
45037
45038  Installing GCC automatically creates and installs the fixed header
45039 files, by running a program called `fixincludes'.  Normally, you don't
45040 need to pay attention to this.  But there are cases where it doesn't do
45041 the right thing automatically.
45042
45043    * If you update the system's header files, such as by installing a
45044      new system version, the fixed header files of GCC are not
45045      automatically updated.  They can be updated using the `mkheaders'
45046      script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
45047
45048    * On some systems, header file directories contain machine-specific
45049      symbolic links in certain places.  This makes it possible to share
45050      most of the header files among hosts running the same version of
45051      the system on different machine models.
45052
45053      The programs that fix the header files do not understand this
45054      special way of using symbolic links; therefore, the directory of
45055      fixed header files is good only for the machine model used to
45056      build it.
45057
45058      It is possible to make separate sets of fixed header files for the
45059      different machine models, and arrange a structure of symbolic
45060      links so as to use the proper set, but you'll have to do this by
45061      hand.
45062
45063 \1f
45064 File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
45065
45066 11.5 Standard Libraries
45067 =======================
45068
45069 GCC by itself attempts to be a conforming freestanding implementation.
45070 *Note Language Standards Supported by GCC: Standards, for details of
45071 what this means.  Beyond the library facilities required of such an
45072 implementation, the rest of the C library is supplied by the vendor of
45073 the operating system.  If that C library doesn't conform to the C
45074 standards, then your programs might get warnings (especially when using
45075 `-Wall') that you don't expect.
45076
45077  For example, the `sprintf' function on SunOS 4.1.3 returns `char *'
45078 while the C standard says that `sprintf' returns an `int'.  The
45079 `fixincludes' program could make the prototype for this function match
45080 the Standard, but that would be wrong, since the function will still
45081 return `char *'.
45082
45083  If you need a Standard compliant library, then you need to find one, as
45084 GCC does not provide one.  The GNU C library (called `glibc') provides
45085 ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
45086 HURD-based GNU systems; no recent version of it supports other systems,
45087 though some very old versions did.  Version 2.2 of the GNU C library
45088 includes nearly complete C99 support.  You could also ask your
45089 operating system vendor if newer libraries are available.
45090
45091 \1f
45092 File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
45093
45094 11.6 Disappointments and Misunderstandings
45095 ==========================================
45096
45097 These problems are perhaps regrettable, but we don't know any practical
45098 way around them.
45099
45100    * Certain local variables aren't recognized by debuggers when you
45101      compile with optimization.
45102
45103      This occurs because sometimes GCC optimizes the variable out of
45104      existence.  There is no way to tell the debugger how to compute the
45105      value such a variable "would have had", and it is not clear that
45106      would be desirable anyway.  So GCC simply does not mention the
45107      eliminated variable when it writes debugging information.
45108
45109      You have to expect a certain amount of disagreement between the
45110      executable and your source code, when you use optimization.
45111
45112    * Users often think it is a bug when GCC reports an error for code
45113      like this:
45114
45115           int foo (struct mumble *);
45116
45117           struct mumble { ... };
45118
45119           int foo (struct mumble *x)
45120           { ... }
45121
45122      This code really is erroneous, because the scope of `struct
45123      mumble' in the prototype is limited to the argument list
45124      containing it.  It does not refer to the `struct mumble' defined
45125      with file scope immediately below--they are two unrelated types
45126      with similar names in different scopes.
45127
45128      But in the definition of `foo', the file-scope type is used
45129      because that is available to be inherited.  Thus, the definition
45130      and the prototype do not match, and you get an error.
45131
45132      This behavior may seem silly, but it's what the ISO standard
45133      specifies.  It is easy enough for you to make your code work by
45134      moving the definition of `struct mumble' above the prototype.
45135      It's not worth being incompatible with ISO C just to avoid an
45136      error for the example shown above.
45137
45138    * Accesses to bit-fields even in volatile objects works by accessing
45139      larger objects, such as a byte or a word.  You cannot rely on what
45140      size of object is accessed in order to read or write the
45141      bit-field; it may even vary for a given bit-field according to the
45142      precise usage.
45143
45144      If you care about controlling the amount of memory that is
45145      accessed, use volatile but do not use bit-fields.
45146
45147    * GCC comes with shell scripts to fix certain known problems in
45148      system header files.  They install corrected copies of various
45149      header files in a special directory where only GCC will normally
45150      look for them.  The scripts adapt to various systems by searching
45151      all the system header files for the problem cases that we know
45152      about.
45153
45154      If new system header files are installed, nothing automatically
45155      arranges to update the corrected header files.  They can be
45156      updated using the `mkheaders' script installed in
45157      `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
45158
45159    * On 68000 and x86 systems, for instance, you can get paradoxical
45160      results if you test the precise values of floating point numbers.
45161      For example, you can find that a floating point value which is not
45162      a NaN is not equal to itself.  This results from the fact that the
45163      floating point registers hold a few more bits of precision than
45164      fit in a `double' in memory.  Compiled code moves values between
45165      memory and floating point registers at its convenience, and moving
45166      them into memory truncates them.
45167
45168      You can partially avoid this problem by using the `-ffloat-store'
45169      option (*note Optimize Options::).
45170
45171    * On AIX and other platforms without weak symbol support, templates
45172      need to be instantiated explicitly and symbols for static members
45173      of templates will not be generated.
45174
45175    * On AIX, GCC scans object files and library archives for static
45176      constructors and destructors when linking an application before the
45177      linker prunes unreferenced symbols.  This is necessary to prevent
45178      the AIX linker from mistakenly assuming that static constructor or
45179      destructor are unused and removing them before the scanning can
45180      occur.  All static constructors and destructors found will be
45181      referenced even though the modules in which they occur may not be
45182      used by the program.  This may lead to both increased executable
45183      size and unexpected symbol references.
45184
45185 \1f
45186 File: gcc.info,  Node: C++ Misunderstandings,  Next: Non-bugs,  Prev: Disappointments,  Up: Trouble
45187
45188 11.7 Common Misunderstandings with GNU C++
45189 ==========================================
45190
45191 C++ is a complex language and an evolving one, and its standard
45192 definition (the ISO C++ standard) was only recently completed.  As a
45193 result, your C++ compiler may occasionally surprise you, even when its
45194 behavior is correct.  This section discusses some areas that frequently
45195 give rise to questions of this sort.
45196
45197 * Menu:
45198
45199 * Static Definitions::  Static member declarations are not definitions
45200 * Name lookup::         Name lookup, templates, and accessing members of base classes
45201 * Temporaries::         Temporaries may vanish before you expect
45202 * Copy Assignment::     Copy Assignment operators copy virtual bases twice
45203
45204 \1f
45205 File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
45206
45207 11.7.1 Declare _and_ Define Static Members
45208 ------------------------------------------
45209
45210 When a class has static data members, it is not enough to _declare_ the
45211 static member; you must also _define_ it.  For example:
45212
45213      class Foo
45214      {
45215        ...
45216        void method();
45217        static int bar;
45218      };
45219
45220  This declaration only establishes that the class `Foo' has an `int'
45221 named `Foo::bar', and a member function named `Foo::method'.  But you
45222 still need to define _both_ `method' and `bar' elsewhere.  According to
45223 the ISO standard, you must supply an initializer in one (and only one)
45224 source file, such as:
45225
45226      int Foo::bar = 0;
45227
45228  Other C++ compilers may not correctly implement the standard behavior.
45229 As a result, when you switch to `g++' from one of these compilers, you
45230 may discover that a program that appeared to work correctly in fact
45231 does not conform to the standard: `g++' reports as undefined symbols
45232 any static data members that lack definitions.
45233
45234 \1f
45235 File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
45236
45237 11.7.2 Name lookup, templates, and accessing members of base classes
45238 --------------------------------------------------------------------
45239
45240 The C++ standard prescribes that all names that are not dependent on
45241 template parameters are bound to their present definitions when parsing
45242 a template function or class.(1)  Only names that are dependent are
45243 looked up at the point of instantiation.  For example, consider
45244
45245        void foo(double);
45246
45247        struct A {
45248          template <typename T>
45249          void f () {
45250            foo (1);        // 1
45251            int i = N;      // 2
45252            T t;
45253            t.bar();        // 3
45254            foo (t);        // 4
45255          }
45256
45257          static const int N;
45258        };
45259
45260  Here, the names `foo' and `N' appear in a context that does not depend
45261 on the type of `T'.  The compiler will thus require that they are
45262 defined in the context of use in the template, not only before the
45263 point of instantiation, and will here use `::foo(double)' and `A::N',
45264 respectively.  In particular, it will convert the integer value to a
45265 `double' when passing it to `::foo(double)'.
45266
45267  Conversely, `bar' and the call to `foo' in the fourth marked line are
45268 used in contexts that do depend on the type of `T', so they are only
45269 looked up at the point of instantiation, and you can provide
45270 declarations for them after declaring the template, but before
45271 instantiating it.  In particular, if you instantiate `A::f<int>', the
45272 last line will call an overloaded `::foo(int)' if one was provided,
45273 even if after the declaration of `struct A'.
45274
45275  This distinction between lookup of dependent and non-dependent names is
45276 called two-stage (or dependent) name lookup.  G++ implements it since
45277 version 3.4.
45278
45279  Two-stage name lookup sometimes leads to situations with behavior
45280 different from non-template codes.  The most common is probably this:
45281
45282        template <typename T> struct Base {
45283          int i;
45284        };
45285
45286        template <typename T> struct Derived : public Base<T> {
45287          int get_i() { return i; }
45288        };
45289
45290  In `get_i()', `i' is not used in a dependent context, so the compiler
45291 will look for a name declared at the enclosing namespace scope (which
45292 is the global scope here).  It will not look into the base class, since
45293 that is dependent and you may declare specializations of `Base' even
45294 after declaring `Derived', so the compiler can't really know what `i'
45295 would refer to.  If there is no global variable `i', then you will get
45296 an error message.
45297
45298  In order to make it clear that you want the member of the base class,
45299 you need to defer lookup until instantiation time, at which the base
45300 class is known.  For this, you need to access `i' in a dependent
45301 context, by either using `this->i' (remember that `this' is of type
45302 `Derived<T>*', so is obviously dependent), or using `Base<T>::i'.
45303 Alternatively, `Base<T>::i' might be brought into scope by a
45304 `using'-declaration.
45305
45306  Another, similar example involves calling member functions of a base
45307 class:
45308
45309        template <typename T> struct Base {
45310            int f();
45311        };
45312
45313        template <typename T> struct Derived : Base<T> {
45314            int g() { return f(); };
45315        };
45316
45317  Again, the call to `f()' is not dependent on template arguments (there
45318 are no arguments that depend on the type `T', and it is also not
45319 otherwise specified that the call should be in a dependent context).
45320 Thus a global declaration of such a function must be available, since
45321 the one in the base class is not visible until instantiation time.  The
45322 compiler will consequently produce the following error message:
45323
45324        x.cc: In member function `int Derived<T>::g()':
45325        x.cc:6: error: there are no arguments to `f' that depend on a template
45326           parameter, so a declaration of `f' must be available
45327        x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
45328           allowing the use of an undeclared name is deprecated)
45329
45330  To make the code valid either use `this->f()', or `Base<T>::f()'.
45331 Using the `-fpermissive' flag will also let the compiler accept the
45332 code, by marking all function calls for which no declaration is visible
45333 at the time of definition of the template for later lookup at
45334 instantiation time, as if it were a dependent call.  We do not
45335 recommend using `-fpermissive' to work around invalid code, and it will
45336 also only catch cases where functions in base classes are called, not
45337 where variables in base classes are used (as in the example above).
45338
45339  Note that some compilers (including G++ versions prior to 3.4) get
45340 these examples wrong and accept above code without an error.  Those
45341 compilers do not implement two-stage name lookup correctly.
45342
45343  ---------- Footnotes ----------
45344
45345  (1) The C++ standard just uses the term "dependent" for names that
45346 depend on the type or value of template parameters.  This shorter term
45347 will also be used in the rest of this section.
45348
45349 \1f
45350 File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
45351
45352 11.7.3 Temporaries May Vanish Before You Expect
45353 -----------------------------------------------
45354
45355 It is dangerous to use pointers or references to _portions_ of a
45356 temporary object.  The compiler may very well delete the object before
45357 you expect it to, leaving a pointer to garbage.  The most common place
45358 where this problem crops up is in classes like string classes,
45359 especially ones that define a conversion function to type `char *' or
45360 `const char *'--which is one reason why the standard `string' class
45361 requires you to call the `c_str' member function.  However, any class
45362 that returns a pointer to some internal structure is potentially
45363 subject to this problem.
45364
45365  For example, a program may use a function `strfunc' that returns
45366 `string' objects, and another function `charfunc' that operates on
45367 pointers to `char':
45368
45369      string strfunc ();
45370      void charfunc (const char *);
45371
45372      void
45373      f ()
45374      {
45375        const char *p = strfunc().c_str();
45376        ...
45377        charfunc (p);
45378        ...
45379        charfunc (p);
45380      }
45381
45382 In this situation, it may seem reasonable to save a pointer to the C
45383 string returned by the `c_str' member function and use that rather than
45384 call `c_str' repeatedly.  However, the temporary string created by the
45385 call to `strfunc' is destroyed after `p' is initialized, at which point
45386 `p' is left pointing to freed memory.
45387
45388  Code like this may run successfully under some other compilers,
45389 particularly obsolete cfront-based compilers that delete temporaries
45390 along with normal local variables.  However, the GNU C++ behavior is
45391 standard-conforming, so if your program depends on late destruction of
45392 temporaries it is not portable.
45393
45394  The safe way to write such code is to give the temporary a name, which
45395 forces it to remain until the end of the scope of the name.  For
45396 example:
45397
45398      const string& tmp = strfunc ();
45399      charfunc (tmp.c_str ());
45400
45401 \1f
45402 File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
45403
45404 11.7.4 Implicit Copy-Assignment for Virtual Bases
45405 -------------------------------------------------
45406
45407 When a base class is virtual, only one subobject of the base class
45408 belongs to each full object.  Also, the constructors and destructors are
45409 invoked only once, and called from the most-derived class.  However,
45410 such objects behave unspecified when being assigned.  For example:
45411
45412      struct Base{
45413        char *name;
45414        Base(char *n) : name(strdup(n)){}
45415        Base& operator= (const Base& other){
45416         free (name);
45417         name = strdup (other.name);
45418        }
45419      };
45420
45421      struct A:virtual Base{
45422        int val;
45423        A():Base("A"){}
45424      };
45425
45426      struct B:virtual Base{
45427        int bval;
45428        B():Base("B"){}
45429      };
45430
45431      struct Derived:public A, public B{
45432        Derived():Base("Derived"){}
45433      };
45434
45435      void func(Derived &d1, Derived &d2)
45436      {
45437        d1 = d2;
45438      }
45439
45440  The C++ standard specifies that `Base::Base' is only called once when
45441 constructing or copy-constructing a Derived object.  It is unspecified
45442 whether `Base::operator=' is called more than once when the implicit
45443 copy-assignment for Derived objects is invoked (as it is inside `func'
45444 in the example).
45445
45446  G++ implements the "intuitive" algorithm for copy-assignment: assign
45447 all direct bases, then assign all members.  In that algorithm, the
45448 virtual base subobject can be encountered more than once.  In the
45449 example, copying proceeds in the following order: `val', `name' (via
45450 `strdup'), `bval', and `name' again.
45451
45452  If application code relies on copy-assignment, a user-defined
45453 copy-assignment operator removes any uncertainties.  With such an
45454 operator, the application can define whether and how the virtual base
45455 subobject is assigned.
45456
45457 \1f
45458 File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: C++ Misunderstandings,  Up: Trouble
45459
45460 11.8 Certain Changes We Don't Want to Make
45461 ==========================================
45462
45463 This section lists changes that people frequently request, but which we
45464 do not make because we think GCC is better without them.
45465
45466    * Checking the number and type of arguments to a function which has
45467      an old-fashioned definition and no prototype.
45468
45469      Such a feature would work only occasionally--only for calls that
45470      appear in the same file as the called function, following the
45471      definition.  The only way to check all calls reliably is to add a
45472      prototype for the function.  But adding a prototype eliminates the
45473      motivation for this feature.  So the feature is not worthwhile.
45474
45475    * Warning about using an expression whose type is signed as a shift
45476      count.
45477
45478      Shift count operands are probably signed more often than unsigned.
45479      Warning about this would cause far more annoyance than good.
45480
45481    * Warning about assigning a signed value to an unsigned variable.
45482
45483      Such assignments must be very common; warning about them would
45484      cause more annoyance than good.
45485
45486    * Warning when a non-void function value is ignored.
45487
45488      C contains many standard functions that return a value that most
45489      programs choose to ignore.  One obvious example is `printf'.
45490      Warning about this practice only leads the defensive programmer to
45491      clutter programs with dozens of casts to `void'.  Such casts are
45492      required so frequently that they become visual noise.  Writing
45493      those casts becomes so automatic that they no longer convey useful
45494      information about the intentions of the programmer.  For functions
45495      where the return value should never be ignored, use the
45496      `warn_unused_result' function attribute (*note Function
45497      Attributes::).
45498
45499    * Making `-fshort-enums' the default.
45500
45501      This would cause storage layout to be incompatible with most other
45502      C compilers.  And it doesn't seem very important, given that you
45503      can get the same result in other ways.  The case where it matters
45504      most is when the enumeration-valued object is inside a structure,
45505      and in that case you can specify a field width explicitly.
45506
45507    * Making bit-fields unsigned by default on particular machines where
45508      "the ABI standard" says to do so.
45509
45510      The ISO C standard leaves it up to the implementation whether a
45511      bit-field declared plain `int' is signed or not.  This in effect
45512      creates two alternative dialects of C.
45513
45514      The GNU C compiler supports both dialects; you can specify the
45515      signed dialect with `-fsigned-bitfields' and the unsigned dialect
45516      with `-funsigned-bitfields'.  However, this leaves open the
45517      question of which dialect to use by default.
45518
45519      Currently, the preferred dialect makes plain bit-fields signed,
45520      because this is simplest.  Since `int' is the same as `signed int'
45521      in every other context, it is cleanest for them to be the same in
45522      bit-fields as well.
45523
45524      Some computer manufacturers have published Application Binary
45525      Interface standards which specify that plain bit-fields should be
45526      unsigned.  It is a mistake, however, to say anything about this
45527      issue in an ABI.  This is because the handling of plain bit-fields
45528      distinguishes two dialects of C.  Both dialects are meaningful on
45529      every type of machine.  Whether a particular object file was
45530      compiled using signed bit-fields or unsigned is of no concern to
45531      other object files, even if they access the same bit-fields in the
45532      same data structures.
45533
45534      A given program is written in one or the other of these two
45535      dialects.  The program stands a chance to work on most any machine
45536      if it is compiled with the proper dialect.  It is unlikely to work
45537      at all if compiled with the wrong dialect.
45538
45539      Many users appreciate the GNU C compiler because it provides an
45540      environment that is uniform across machines.  These users would be
45541      inconvenienced if the compiler treated plain bit-fields
45542      differently on certain machines.
45543
45544      Occasionally users write programs intended only for a particular
45545      machine type.  On these occasions, the users would benefit if the
45546      GNU C compiler were to support by default the same dialect as the
45547      other compilers on that machine.  But such applications are rare.
45548      And users writing a program to run on more than one type of
45549      machine cannot possibly benefit from this kind of compatibility.
45550
45551      This is why GCC does and will treat plain bit-fields in the same
45552      fashion on all types of machines (by default).
45553
45554      There are some arguments for making bit-fields unsigned by default
45555      on all machines.  If, for example, this becomes a universal de
45556      facto standard, it would make sense for GCC to go along with it.
45557      This is something to be considered in the future.
45558
45559      (Of course, users strongly concerned about portability should
45560      indicate explicitly in each bit-field whether it is signed or not.
45561      In this way, they write programs which have the same meaning in
45562      both C dialects.)
45563
45564    * Undefining `__STDC__' when `-ansi' is not used.
45565
45566      Currently, GCC defines `__STDC__' unconditionally.  This provides
45567      good results in practice.
45568
45569      Programmers normally use conditionals on `__STDC__' to ask whether
45570      it is safe to use certain features of ISO C, such as function
45571      prototypes or ISO token concatenation.  Since plain `gcc' supports
45572      all the features of ISO C, the correct answer to these questions is
45573      "yes".
45574
45575      Some users try to use `__STDC__' to check for the availability of
45576      certain library facilities.  This is actually incorrect usage in
45577      an ISO C program, because the ISO C standard says that a conforming
45578      freestanding implementation should define `__STDC__' even though it
45579      does not have the library facilities.  `gcc -ansi -pedantic' is a
45580      conforming freestanding implementation, and it is therefore
45581      required to define `__STDC__', even though it does not come with
45582      an ISO C library.
45583
45584      Sometimes people say that defining `__STDC__' in a compiler that
45585      does not completely conform to the ISO C standard somehow violates
45586      the standard.  This is illogical.  The standard is a standard for
45587      compilers that claim to support ISO C, such as `gcc -ansi'--not
45588      for other compilers such as plain `gcc'.  Whatever the ISO C
45589      standard says is relevant to the design of plain `gcc' without
45590      `-ansi' only for pragmatic reasons, not as a requirement.
45591
45592      GCC normally defines `__STDC__' to be 1, and in addition defines
45593      `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std'
45594      option for strict conformance to some version of ISO C.  On some
45595      hosts, system include files use a different convention, where
45596      `__STDC__' is normally 0, but is 1 if the user specifies strict
45597      conformance to the C Standard.  GCC follows the host convention
45598      when processing system include files, but when processing user
45599      files it follows the usual GNU C convention.
45600
45601    * Undefining `__STDC__' in C++.
45602
45603      Programs written to compile with C++-to-C translators get the
45604      value of `__STDC__' that goes with the C compiler that is
45605      subsequently used.  These programs must test `__STDC__' to
45606      determine what kind of C preprocessor that compiler uses: whether
45607      they should concatenate tokens in the ISO C fashion or in the
45608      traditional fashion.
45609
45610      These programs work properly with GNU C++ if `__STDC__' is defined.
45611      They would not work otherwise.
45612
45613      In addition, many header files are written to provide prototypes
45614      in ISO C but not in traditional C.  Many of these header files can
45615      work without change in C++ provided `__STDC__' is defined.  If
45616      `__STDC__' is not defined, they will all fail, and will all need
45617      to be changed to test explicitly for C++ as well.
45618
45619    * Deleting "empty" loops.
45620
45621      Historically, GCC has not deleted "empty" loops under the
45622      assumption that the most likely reason you would put one in a
45623      program is to have a delay, so deleting them will not make real
45624      programs run any faster.
45625
45626      However, the rationale here is that optimization of a nonempty loop
45627      cannot produce an empty one. This held for carefully written C
45628      compiled with less powerful optimizers but is not always the case
45629      for carefully written C++ or with more powerful optimizers.  Thus
45630      GCC will remove operations from loops whenever it can determine
45631      those operations are not externally visible (apart from the time
45632      taken to execute them, of course).  In case the loop can be proved
45633      to be finite, GCC will also remove the loop itself.
45634
45635      Be aware of this when performing timing tests, for instance the
45636      following loop can be completely removed, provided
45637      `some_expression' can provably not change any global state.
45638
45639           {
45640              int sum = 0;
45641              int ix;
45642
45643              for (ix = 0; ix != 10000; ix++)
45644                 sum += some_expression;
45645           }
45646
45647      Even though `sum' is accumulated in the loop, no use is made of
45648      that summation, so the accumulation can be removed.
45649
45650    * Making side effects happen in the same order as in some other
45651      compiler.
45652
45653      It is never safe to depend on the order of evaluation of side
45654      effects.  For example, a function call like this may very well
45655      behave differently from one compiler to another:
45656
45657           void func (int, int);
45658
45659           int i = 2;
45660           func (i++, i++);
45661
45662      There is no guarantee (in either the C or the C++ standard language
45663      definitions) that the increments will be evaluated in any
45664      particular order.  Either increment might happen first.  `func'
45665      might get the arguments `2, 3', or it might get `3, 2', or even
45666      `2, 2'.
45667
45668    * Making certain warnings into errors by default.
45669
45670      Some ISO C testsuites report failure when the compiler does not
45671      produce an error message for a certain program.
45672
45673      ISO C requires a "diagnostic" message for certain kinds of invalid
45674      programs, but a warning is defined by GCC to count as a
45675      diagnostic.  If GCC produces a warning but not an error, that is
45676      correct ISO C support.  If testsuites call this "failure", they
45677      should be run with the GCC option `-pedantic-errors', which will
45678      turn these warnings into errors.
45679
45680
45681 \1f
45682 File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
45683
45684 11.9 Warning Messages and Error Messages
45685 ========================================
45686
45687 The GNU compiler can produce two kinds of diagnostics: errors and
45688 warnings.  Each kind has a different purpose:
45689
45690      "Errors" report problems that make it impossible to compile your
45691      program.  GCC reports errors with the source file name and line
45692      number where the problem is apparent.
45693
45694      "Warnings" report other unusual conditions in your code that _may_
45695      indicate a problem, although compilation can (and does) proceed.
45696      Warning messages also report the source file name and line number,
45697      but include the text `warning:' to distinguish them from error
45698      messages.
45699
45700  Warnings may indicate danger points where you should check to make sure
45701 that your program really does what you intend; or the use of obsolete
45702 features; or the use of nonstandard features of GNU C or C++.  Many
45703 warnings are issued only if you ask for them, with one of the `-W'
45704 options (for instance, `-Wall' requests a variety of useful warnings).
45705
45706  GCC always tries to compile your program if possible; it never
45707 gratuitously rejects a program whose meaning is clear merely because
45708 (for instance) it fails to conform to a standard.  In some cases,
45709 however, the C and C++ standards specify that certain extensions are
45710 forbidden, and a diagnostic _must_ be issued by a conforming compiler.
45711 The `-pedantic' option tells GCC to issue warnings in such cases;
45712 `-pedantic-errors' says to make them errors instead.  This does not
45713 mean that _all_ non-ISO constructs get warnings or errors.
45714
45715  *Note Options to Request or Suppress Warnings: Warning Options, for
45716 more detail on these and related command-line options.
45717
45718 \1f
45719 File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
45720
45721 12 Reporting Bugs
45722 *****************
45723
45724 Your bug reports play an essential role in making GCC reliable.
45725
45726  When you encounter a problem, the first thing to do is to see if it is
45727 already known.  *Note Trouble::.  If it isn't known, then you should
45728 report the problem.
45729
45730 * Menu:
45731
45732 * Criteria:  Bug Criteria.   Have you really found a bug?
45733 * Reporting: Bug Reporting.  How to report a bug effectively.
45734 * Known: Trouble.            Known problems.
45735 * Help: Service.             Where to ask for help.
45736
45737 \1f
45738 File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
45739
45740 12.1 Have You Found a Bug?
45741 ==========================
45742
45743 If you are not sure whether you have found a bug, here are some
45744 guidelines:
45745
45746    * If the compiler gets a fatal signal, for any input whatever, that
45747      is a compiler bug.  Reliable compilers never crash.
45748
45749    * If the compiler produces invalid assembly code, for any input
45750      whatever (except an `asm' statement), that is a compiler bug,
45751      unless the compiler reports errors (not just warnings) which would
45752      ordinarily prevent the assembler from being run.
45753
45754    * If the compiler produces valid assembly code that does not
45755      correctly execute the input source code, that is a compiler bug.
45756
45757      However, you must double-check to make sure, because you may have a
45758      program whose behavior is undefined, which happened by chance to
45759      give the desired results with another C or C++ compiler.
45760
45761      For example, in many nonoptimizing compilers, you can write `x;'
45762      at the end of a function instead of `return x;', with the same
45763      results.  But the value of the function is undefined if `return'
45764      is omitted; it is not a bug when GCC produces different results.
45765
45766      Problems often result from expressions with two increment
45767      operators, as in `f (*p++, *p++)'.  Your previous compiler might
45768      have interpreted that expression the way you intended; GCC might
45769      interpret it another way.  Neither compiler is wrong.  The bug is
45770      in your code.
45771
45772      After you have localized the error to a single source line, it
45773      should be easy to check for these things.  If your program is
45774      correct and well defined, you have found a compiler bug.
45775
45776    * If the compiler produces an error message for valid input, that is
45777      a compiler bug.
45778
45779    * If the compiler does not produce an error message for invalid
45780      input, that is a compiler bug.  However, you should note that your
45781      idea of "invalid input" might be someone else's idea of "an
45782      extension" or "support for traditional practice".
45783
45784    * If you are an experienced user of one of the languages GCC
45785      supports, your suggestions for improvement of GCC are welcome in
45786      any case.
45787
45788 \1f
45789 File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
45790
45791 12.2 How and where to Report Bugs
45792 =================================
45793
45794 Bugs should be reported to the bug database at
45795 `http://gcc.gnu.org/bugs.html'.
45796
45797 \1f
45798 File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
45799
45800 13 How To Get Help with GCC
45801 ***************************
45802
45803 If you need help installing, using or changing GCC, there are two ways
45804 to find it:
45805
45806    * Send a message to a suitable network mailing list.  First try
45807      <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
45808      that brings no response, try <gcc@gcc.gnu.org>.  For help changing
45809      GCC, ask <gcc@gcc.gnu.org>.  If you think you have found a bug in
45810      GCC, please report it following the instructions at *note Bug
45811      Reporting::.
45812
45813    * Look in the service directory for someone who might help you for a
45814      fee.  The service directory is found at
45815      `http://www.fsf.org/resources/service'.
45816
45817  For further information, see `http://gcc.gnu.org/faq.html#support'.
45818
45819 \1f
45820 File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
45821
45822 14 Contributing to GCC Development
45823 **********************************
45824
45825 If you would like to help pretest GCC releases to assure they work well,
45826 current development sources are available by SVN (see
45827 `http://gcc.gnu.org/svn.html').  Source and binary snapshots are also
45828 available for FTP; see `http://gcc.gnu.org/snapshots.html'.
45829
45830  If you would like to work on improvements to GCC, please read the
45831 advice at these URLs:
45832
45833      `http://gcc.gnu.org/contribute.html'
45834      `http://gcc.gnu.org/contributewhy.html'
45835
45836 for information on how to make useful contributions and avoid
45837 duplication of effort.  Suggested projects are listed at
45838 `http://gcc.gnu.org/projects/'.
45839
45840 \1f
45841 File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
45842
45843 Funding Free Software
45844 *********************
45845
45846 If you want to have more free software a few years from now, it makes
45847 sense for you to help encourage people to contribute funds for its
45848 development.  The most effective approach known is to encourage
45849 commercial redistributors to donate.
45850
45851  Users of free software systems can boost the pace of development by
45852 encouraging for-a-fee distributors to donate part of their selling price
45853 to free software developers--the Free Software Foundation, and others.
45854
45855  The way to convince distributors to do this is to demand it and expect
45856 it from them.  So when you compare distributors, judge them partly by
45857 how much they give to free software development.  Show distributors
45858 they must compete to be the one who gives the most.
45859
45860  To make this approach work, you must insist on numbers that you can
45861 compare, such as, "We will donate ten dollars to the Frobnitz project
45862 for each disk sold."  Don't be satisfied with a vague promise, such as
45863 "A portion of the profits are donated," since it doesn't give a basis
45864 for comparison.
45865
45866  Even a precise fraction "of the profits from this disk" is not very
45867 meaningful, since creative accounting and unrelated business decisions
45868 can greatly alter what fraction of the sales price counts as profit.
45869 If the price you pay is $50, ten percent of the profit is probably less
45870 than a dollar; it might be a few cents, or nothing at all.
45871
45872  Some redistributors do development work themselves.  This is useful
45873 too; but to keep everyone honest, you need to inquire how much they do,
45874 and what kind.  Some kinds of development make much more long-term
45875 difference than others.  For example, maintaining a separate version of
45876 a program contributes very little; maintaining the standard version of a
45877 program for the whole community contributes much.  Easy new ports
45878 contribute little, since someone else would surely do them; difficult
45879 ports such as adding a new CPU to the GNU Compiler Collection
45880 contribute more; major new features or packages contribute the most.
45881
45882  By establishing the idea that supporting further development is "the
45883 proper thing to do" when distributing free software for a fee, we can
45884 assure a steady flow of resources into making more free software.
45885
45886      Copyright (C) 1994 Free Software Foundation, Inc.
45887      Verbatim copying and redistribution of this section is permitted
45888      without royalty; alteration is not permitted.
45889
45890 \1f
45891 File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
45892
45893 The GNU Project and GNU/Linux
45894 *****************************
45895
45896 The GNU Project was launched in 1984 to develop a complete Unix-like
45897 operating system which is free software: the GNU system.  (GNU is a
45898 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
45899 Variants of the GNU operating system, which use the kernel Linux, are
45900 now widely used; though these systems are often referred to as "Linux",
45901 they are more accurately called GNU/Linux systems.
45902
45903  For more information, see:
45904      `http://www.gnu.org/'
45905      `http://www.gnu.org/gnu/linux-and-gnu.html'
45906
45907 \1f
45908 File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
45909
45910 GNU General Public License
45911 **************************
45912
45913                         Version 3, 29 June 2007
45914
45915      Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
45916
45917      Everyone is permitted to copy and distribute verbatim copies of this
45918      license document, but changing it is not allowed.
45919
45920 Preamble
45921 ========
45922
45923 The GNU General Public License is a free, copyleft license for software
45924 and other kinds of works.
45925
45926  The licenses for most software and other practical works are designed
45927 to take away your freedom to share and change the works.  By contrast,
45928 the GNU General Public License is intended to guarantee your freedom to
45929 share and change all versions of a program-to make sure it remains free
45930 software for all its users.  We, the Free Software Foundation, use the
45931 GNU General Public License for most of our software; it applies also to
45932 any other work released this way by its authors.  You can apply it to
45933 your programs, too.
45934
45935  When we speak of free software, we are referring to freedom, not
45936 price.  Our General Public Licenses are designed to make sure that you
45937 have the freedom to distribute copies of free software (and charge for
45938 them if you wish), that you receive source code or can get it if you
45939 want it, that you can change the software or use pieces of it in new
45940 free programs, and that you know you can do these things.
45941
45942  To protect your rights, we need to prevent others from denying you
45943 these rights or asking you to surrender the rights.  Therefore, you
45944 have certain responsibilities if you distribute copies of the software,
45945 or if you modify it: responsibilities to respect the freedom of others.
45946
45947  For example, if you distribute copies of such a program, whether
45948 gratis or for a fee, you must pass on to the recipients the same
45949 freedoms that you received.  You must make sure that they, too, receive
45950 or can get the source code.  And you must show them these terms so they
45951 know their rights.
45952
45953  Developers that use the GNU GPL protect your rights with two steps:
45954 (1) assert copyright on the software, and (2) offer you this License
45955 giving you legal permission to copy, distribute and/or modify it.
45956
45957  For the developers' and authors' protection, the GPL clearly explains
45958 that there is no warranty for this free software.  For both users' and
45959 authors' sake, the GPL requires that modified versions be marked as
45960 changed, so that their problems will not be attributed erroneously to
45961 authors of previous versions.
45962
45963  Some devices are designed to deny users access to install or run
45964 modified versions of the software inside them, although the
45965 manufacturer can do so.  This is fundamentally incompatible with the
45966 aim of protecting users' freedom to change the software.  The
45967 systematic pattern of such abuse occurs in the area of products for
45968 individuals to use, which is precisely where it is most unacceptable.
45969 Therefore, we have designed this version of the GPL to prohibit the
45970 practice for those products.  If such problems arise substantially in
45971 other domains, we stand ready to extend this provision to those domains
45972 in future versions of the GPL, as needed to protect the freedom of
45973 users.
45974
45975  Finally, every program is threatened constantly by software patents.
45976 States should not allow patents to restrict development and use of
45977 software on general-purpose computers, but in those that do, we wish to
45978 avoid the special danger that patents applied to a free program could
45979 make it effectively proprietary.  To prevent this, the GPL assures that
45980 patents cannot be used to render the program non-free.
45981
45982  The precise terms and conditions for copying, distribution and
45983 modification follow.
45984
45985 TERMS AND CONDITIONS
45986 ====================
45987
45988   0. Definitions.
45989
45990      "This License" refers to version 3 of the GNU General Public
45991      License.
45992
45993      "Copyright" also means copyright-like laws that apply to other
45994      kinds of works, such as semiconductor masks.
45995
45996      "The Program" refers to any copyrightable work licensed under this
45997      License.  Each licensee is addressed as "you".  "Licensees" and
45998      "recipients" may be individuals or organizations.
45999
46000      To "modify" a work means to copy from or adapt all or part of the
46001      work in a fashion requiring copyright permission, other than the
46002      making of an exact copy.  The resulting work is called a "modified
46003      version" of the earlier work or a work "based on" the earlier work.
46004
46005      A "covered work" means either the unmodified Program or a work
46006      based on the Program.
46007
46008      To "propagate" a work means to do anything with it that, without
46009      permission, would make you directly or secondarily liable for
46010      infringement under applicable copyright law, except executing it
46011      on a computer or modifying a private copy.  Propagation includes
46012      copying, distribution (with or without modification), making
46013      available to the public, and in some countries other activities as
46014      well.
46015
46016      To "convey" a work means any kind of propagation that enables other
46017      parties to make or receive copies.  Mere interaction with a user
46018      through a computer network, with no transfer of a copy, is not
46019      conveying.
46020
46021      An interactive user interface displays "Appropriate Legal Notices"
46022      to the extent that it includes a convenient and prominently visible
46023      feature that (1) displays an appropriate copyright notice, and (2)
46024      tells the user that there is no warranty for the work (except to
46025      the extent that warranties are provided), that licensees may
46026      convey the work under this License, and how to view a copy of this
46027      License.  If the interface presents a list of user commands or
46028      options, such as a menu, a prominent item in the list meets this
46029      criterion.
46030
46031   1. Source Code.
46032
46033      The "source code" for a work means the preferred form of the work
46034      for making modifications to it.  "Object code" means any
46035      non-source form of a work.
46036
46037      A "Standard Interface" means an interface that either is an
46038      official standard defined by a recognized standards body, or, in
46039      the case of interfaces specified for a particular programming
46040      language, one that is widely used among developers working in that
46041      language.
46042
46043      The "System Libraries" of an executable work include anything,
46044      other than the work as a whole, that (a) is included in the normal
46045      form of packaging a Major Component, but which is not part of that
46046      Major Component, and (b) serves only to enable use of the work
46047      with that Major Component, or to implement a Standard Interface
46048      for which an implementation is available to the public in source
46049      code form.  A "Major Component", in this context, means a major
46050      essential component (kernel, window system, and so on) of the
46051      specific operating system (if any) on which the executable work
46052      runs, or a compiler used to produce the work, or an object code
46053      interpreter used to run it.
46054
46055      The "Corresponding Source" for a work in object code form means all
46056      the source code needed to generate, install, and (for an executable
46057      work) run the object code and to modify the work, including
46058      scripts to control those activities.  However, it does not include
46059      the work's System Libraries, or general-purpose tools or generally
46060      available free programs which are used unmodified in performing
46061      those activities but which are not part of the work.  For example,
46062      Corresponding Source includes interface definition files
46063      associated with source files for the work, and the source code for
46064      shared libraries and dynamically linked subprograms that the work
46065      is specifically designed to require, such as by intimate data
46066      communication or control flow between those subprograms and other
46067      parts of the work.
46068
46069      The Corresponding Source need not include anything that users can
46070      regenerate automatically from other parts of the Corresponding
46071      Source.
46072
46073      The Corresponding Source for a work in source code form is that
46074      same work.
46075
46076   2. Basic Permissions.
46077
46078      All rights granted under this License are granted for the term of
46079      copyright on the Program, and are irrevocable provided the stated
46080      conditions are met.  This License explicitly affirms your unlimited
46081      permission to run the unmodified Program.  The output from running
46082      a covered work is covered by this License only if the output,
46083      given its content, constitutes a covered work.  This License
46084      acknowledges your rights of fair use or other equivalent, as
46085      provided by copyright law.
46086
46087      You may make, run and propagate covered works that you do not
46088      convey, without conditions so long as your license otherwise
46089      remains in force.  You may convey covered works to others for the
46090      sole purpose of having them make modifications exclusively for
46091      you, or provide you with facilities for running those works,
46092      provided that you comply with the terms of this License in
46093      conveying all material for which you do not control copyright.
46094      Those thus making or running the covered works for you must do so
46095      exclusively on your behalf, under your direction and control, on
46096      terms that prohibit them from making any copies of your
46097      copyrighted material outside their relationship with you.
46098
46099      Conveying under any other circumstances is permitted solely under
46100      the conditions stated below.  Sublicensing is not allowed; section
46101      10 makes it unnecessary.
46102
46103   3. Protecting Users' Legal Rights From Anti-Circumvention Law.
46104
46105      No covered work shall be deemed part of an effective technological
46106      measure under any applicable law fulfilling obligations under
46107      article 11 of the WIPO copyright treaty adopted on 20 December
46108      1996, or similar laws prohibiting or restricting circumvention of
46109      such measures.
46110
46111      When you convey a covered work, you waive any legal power to forbid
46112      circumvention of technological measures to the extent such
46113      circumvention is effected by exercising rights under this License
46114      with respect to the covered work, and you disclaim any intention
46115      to limit operation or modification of the work as a means of
46116      enforcing, against the work's users, your or third parties' legal
46117      rights to forbid circumvention of technological measures.
46118
46119   4. Conveying Verbatim Copies.
46120
46121      You may convey verbatim copies of the Program's source code as you
46122      receive it, in any medium, provided that you conspicuously and
46123      appropriately publish on each copy an appropriate copyright notice;
46124      keep intact all notices stating that this License and any
46125      non-permissive terms added in accord with section 7 apply to the
46126      code; keep intact all notices of the absence of any warranty; and
46127      give all recipients a copy of this License along with the Program.
46128
46129      You may charge any price or no price for each copy that you convey,
46130      and you may offer support or warranty protection for a fee.
46131
46132   5. Conveying Modified Source Versions.
46133
46134      You may convey a work based on the Program, or the modifications to
46135      produce it from the Program, in the form of source code under the
46136      terms of section 4, provided that you also meet all of these
46137      conditions:
46138
46139        a. The work must carry prominent notices stating that you
46140           modified it, and giving a relevant date.
46141
46142        b. The work must carry prominent notices stating that it is
46143           released under this License and any conditions added under
46144           section 7.  This requirement modifies the requirement in
46145           section 4 to "keep intact all notices".
46146
46147        c. You must license the entire work, as a whole, under this
46148           License to anyone who comes into possession of a copy.  This
46149           License will therefore apply, along with any applicable
46150           section 7 additional terms, to the whole of the work, and all
46151           its parts, regardless of how they are packaged.  This License
46152           gives no permission to license the work in any other way, but
46153           it does not invalidate such permission if you have separately
46154           received it.
46155
46156        d. If the work has interactive user interfaces, each must display
46157           Appropriate Legal Notices; however, if the Program has
46158           interactive interfaces that do not display Appropriate Legal
46159           Notices, your work need not make them do so.
46160
46161      A compilation of a covered work with other separate and independent
46162      works, which are not by their nature extensions of the covered
46163      work, and which are not combined with it such as to form a larger
46164      program, in or on a volume of a storage or distribution medium, is
46165      called an "aggregate" if the compilation and its resulting
46166      copyright are not used to limit the access or legal rights of the
46167      compilation's users beyond what the individual works permit.
46168      Inclusion of a covered work in an aggregate does not cause this
46169      License to apply to the other parts of the aggregate.
46170
46171   6. Conveying Non-Source Forms.
46172
46173      You may convey a covered work in object code form under the terms
46174      of sections 4 and 5, provided that you also convey the
46175      machine-readable Corresponding Source under the terms of this
46176      License, in one of these ways:
46177
46178        a. Convey the object code in, or embodied in, a physical product
46179           (including a physical distribution medium), accompanied by the
46180           Corresponding Source fixed on a durable physical medium
46181           customarily used for software interchange.
46182
46183        b. Convey the object code in, or embodied in, a physical product
46184           (including a physical distribution medium), accompanied by a
46185           written offer, valid for at least three years and valid for
46186           as long as you offer spare parts or customer support for that
46187           product model, to give anyone who possesses the object code
46188           either (1) a copy of the Corresponding Source for all the
46189           software in the product that is covered by this License, on a
46190           durable physical medium customarily used for software
46191           interchange, for a price no more than your reasonable cost of
46192           physically performing this conveying of source, or (2) access
46193           to copy the Corresponding Source from a network server at no
46194           charge.
46195
46196        c. Convey individual copies of the object code with a copy of
46197           the written offer to provide the Corresponding Source.  This
46198           alternative is allowed only occasionally and noncommercially,
46199           and only if you received the object code with such an offer,
46200           in accord with subsection 6b.
46201
46202        d. Convey the object code by offering access from a designated
46203           place (gratis or for a charge), and offer equivalent access
46204           to the Corresponding Source in the same way through the same
46205           place at no further charge.  You need not require recipients
46206           to copy the Corresponding Source along with the object code.
46207           If the place to copy the object code is a network server, the
46208           Corresponding Source may be on a different server (operated
46209           by you or a third party) that supports equivalent copying
46210           facilities, provided you maintain clear directions next to
46211           the object code saying where to find the Corresponding Source.
46212           Regardless of what server hosts the Corresponding Source, you
46213           remain obligated to ensure that it is available for as long
46214           as needed to satisfy these requirements.
46215
46216        e. Convey the object code using peer-to-peer transmission,
46217           provided you inform other peers where the object code and
46218           Corresponding Source of the work are being offered to the
46219           general public at no charge under subsection 6d.
46220
46221
46222      A separable portion of the object code, whose source code is
46223      excluded from the Corresponding Source as a System Library, need
46224      not be included in conveying the object code work.
46225
46226      A "User Product" is either (1) a "consumer product", which means
46227      any tangible personal property which is normally used for personal,
46228      family, or household purposes, or (2) anything designed or sold for
46229      incorporation into a dwelling.  In determining whether a product
46230      is a consumer product, doubtful cases shall be resolved in favor of
46231      coverage.  For a particular product received by a particular user,
46232      "normally used" refers to a typical or common use of that class of
46233      product, regardless of the status of the particular user or of the
46234      way in which the particular user actually uses, or expects or is
46235      expected to use, the product.  A product is a consumer product
46236      regardless of whether the product has substantial commercial,
46237      industrial or non-consumer uses, unless such uses represent the
46238      only significant mode of use of the product.
46239
46240      "Installation Information" for a User Product means any methods,
46241      procedures, authorization keys, or other information required to
46242      install and execute modified versions of a covered work in that
46243      User Product from a modified version of its Corresponding Source.
46244      The information must suffice to ensure that the continued
46245      functioning of the modified object code is in no case prevented or
46246      interfered with solely because modification has been made.
46247
46248      If you convey an object code work under this section in, or with,
46249      or specifically for use in, a User Product, and the conveying
46250      occurs as part of a transaction in which the right of possession
46251      and use of the User Product is transferred to the recipient in
46252      perpetuity or for a fixed term (regardless of how the transaction
46253      is characterized), the Corresponding Source conveyed under this
46254      section must be accompanied by the Installation Information.  But
46255      this requirement does not apply if neither you nor any third party
46256      retains the ability to install modified object code on the User
46257      Product (for example, the work has been installed in ROM).
46258
46259      The requirement to provide Installation Information does not
46260      include a requirement to continue to provide support service,
46261      warranty, or updates for a work that has been modified or
46262      installed by the recipient, or for the User Product in which it
46263      has been modified or installed.  Access to a network may be denied
46264      when the modification itself materially and adversely affects the
46265      operation of the network or violates the rules and protocols for
46266      communication across the network.
46267
46268      Corresponding Source conveyed, and Installation Information
46269      provided, in accord with this section must be in a format that is
46270      publicly documented (and with an implementation available to the
46271      public in source code form), and must require no special password
46272      or key for unpacking, reading or copying.
46273
46274   7. Additional Terms.
46275
46276      "Additional permissions" are terms that supplement the terms of
46277      this License by making exceptions from one or more of its
46278      conditions.  Additional permissions that are applicable to the
46279      entire Program shall be treated as though they were included in
46280      this License, to the extent that they are valid under applicable
46281      law.  If additional permissions apply only to part of the Program,
46282      that part may be used separately under those permissions, but the
46283      entire Program remains governed by this License without regard to
46284      the additional permissions.
46285
46286      When you convey a copy of a covered work, you may at your option
46287      remove any additional permissions from that copy, or from any part
46288      of it.  (Additional permissions may be written to require their own
46289      removal in certain cases when you modify the work.)  You may place
46290      additional permissions on material, added by you to a covered work,
46291      for which you have or can give appropriate copyright permission.
46292
46293      Notwithstanding any other provision of this License, for material
46294      you add to a covered work, you may (if authorized by the copyright
46295      holders of that material) supplement the terms of this License
46296      with terms:
46297
46298        a. Disclaiming warranty or limiting liability differently from
46299           the terms of sections 15 and 16 of this License; or
46300
46301        b. Requiring preservation of specified reasonable legal notices
46302           or author attributions in that material or in the Appropriate
46303           Legal Notices displayed by works containing it; or
46304
46305        c. Prohibiting misrepresentation of the origin of that material,
46306           or requiring that modified versions of such material be
46307           marked in reasonable ways as different from the original
46308           version; or
46309
46310        d. Limiting the use for publicity purposes of names of licensors
46311           or authors of the material; or
46312
46313        e. Declining to grant rights under trademark law for use of some
46314           trade names, trademarks, or service marks; or
46315
46316        f. Requiring indemnification of licensors and authors of that
46317           material by anyone who conveys the material (or modified
46318           versions of it) with contractual assumptions of liability to
46319           the recipient, for any liability that these contractual
46320           assumptions directly impose on those licensors and authors.
46321
46322      All other non-permissive additional terms are considered "further
46323      restrictions" within the meaning of section 10.  If the Program as
46324      you received it, or any part of it, contains a notice stating that
46325      it is governed by this License along with a term that is a further
46326      restriction, you may remove that term.  If a license document
46327      contains a further restriction but permits relicensing or
46328      conveying under this License, you may add to a covered work
46329      material governed by the terms of that license document, provided
46330      that the further restriction does not survive such relicensing or
46331      conveying.
46332
46333      If you add terms to a covered work in accord with this section, you
46334      must place, in the relevant source files, a statement of the
46335      additional terms that apply to those files, or a notice indicating
46336      where to find the applicable terms.
46337
46338      Additional terms, permissive or non-permissive, may be stated in
46339      the form of a separately written license, or stated as exceptions;
46340      the above requirements apply either way.
46341
46342   8. Termination.
46343
46344      You may not propagate or modify a covered work except as expressly
46345      provided under this License.  Any attempt otherwise to propagate or
46346      modify it is void, and will automatically terminate your rights
46347      under this License (including any patent licenses granted under
46348      the third paragraph of section 11).
46349
46350      However, if you cease all violation of this License, then your
46351      license from a particular copyright holder is reinstated (a)
46352      provisionally, unless and until the copyright holder explicitly
46353      and finally terminates your license, and (b) permanently, if the
46354      copyright holder fails to notify you of the violation by some
46355      reasonable means prior to 60 days after the cessation.
46356
46357      Moreover, your license from a particular copyright holder is
46358      reinstated permanently if the copyright holder notifies you of the
46359      violation by some reasonable means, this is the first time you have
46360      received notice of violation of this License (for any work) from
46361      that copyright holder, and you cure the violation prior to 30 days
46362      after your receipt of the notice.
46363
46364      Termination of your rights under this section does not terminate
46365      the licenses of parties who have received copies or rights from
46366      you under this License.  If your rights have been terminated and
46367      not permanently reinstated, you do not qualify to receive new
46368      licenses for the same material under section 10.
46369
46370   9. Acceptance Not Required for Having Copies.
46371
46372      You are not required to accept this License in order to receive or
46373      run a copy of the Program.  Ancillary propagation of a covered work
46374      occurring solely as a consequence of using peer-to-peer
46375      transmission to receive a copy likewise does not require
46376      acceptance.  However, nothing other than this License grants you
46377      permission to propagate or modify any covered work.  These actions
46378      infringe copyright if you do not accept this License.  Therefore,
46379      by modifying or propagating a covered work, you indicate your
46380      acceptance of this License to do so.
46381
46382  10. Automatic Licensing of Downstream Recipients.
46383
46384      Each time you convey a covered work, the recipient automatically
46385      receives a license from the original licensors, to run, modify and
46386      propagate that work, subject to this License.  You are not
46387      responsible for enforcing compliance by third parties with this
46388      License.
46389
46390      An "entity transaction" is a transaction transferring control of an
46391      organization, or substantially all assets of one, or subdividing an
46392      organization, or merging organizations.  If propagation of a
46393      covered work results from an entity transaction, each party to that
46394      transaction who receives a copy of the work also receives whatever
46395      licenses to the work the party's predecessor in interest had or
46396      could give under the previous paragraph, plus a right to
46397      possession of the Corresponding Source of the work from the
46398      predecessor in interest, if the predecessor has it or can get it
46399      with reasonable efforts.
46400
46401      You may not impose any further restrictions on the exercise of the
46402      rights granted or affirmed under this License.  For example, you
46403      may not impose a license fee, royalty, or other charge for
46404      exercise of rights granted under this License, and you may not
46405      initiate litigation (including a cross-claim or counterclaim in a
46406      lawsuit) alleging that any patent claim is infringed by making,
46407      using, selling, offering for sale, or importing the Program or any
46408      portion of it.
46409
46410  11. Patents.
46411
46412      A "contributor" is a copyright holder who authorizes use under this
46413      License of the Program or a work on which the Program is based.
46414      The work thus licensed is called the contributor's "contributor
46415      version".
46416
46417      A contributor's "essential patent claims" are all patent claims
46418      owned or controlled by the contributor, whether already acquired or
46419      hereafter acquired, that would be infringed by some manner,
46420      permitted by this License, of making, using, or selling its
46421      contributor version, but do not include claims that would be
46422      infringed only as a consequence of further modification of the
46423      contributor version.  For purposes of this definition, "control"
46424      includes the right to grant patent sublicenses in a manner
46425      consistent with the requirements of this License.
46426
46427      Each contributor grants you a non-exclusive, worldwide,
46428      royalty-free patent license under the contributor's essential
46429      patent claims, to make, use, sell, offer for sale, import and
46430      otherwise run, modify and propagate the contents of its
46431      contributor version.
46432
46433      In the following three paragraphs, a "patent license" is any
46434      express agreement or commitment, however denominated, not to
46435      enforce a patent (such as an express permission to practice a
46436      patent or covenant not to sue for patent infringement).  To
46437      "grant" such a patent license to a party means to make such an
46438      agreement or commitment not to enforce a patent against the party.
46439
46440      If you convey a covered work, knowingly relying on a patent
46441      license, and the Corresponding Source of the work is not available
46442      for anyone to copy, free of charge and under the terms of this
46443      License, through a publicly available network server or other
46444      readily accessible means, then you must either (1) cause the
46445      Corresponding Source to be so available, or (2) arrange to deprive
46446      yourself of the benefit of the patent license for this particular
46447      work, or (3) arrange, in a manner consistent with the requirements
46448      of this License, to extend the patent license to downstream
46449      recipients.  "Knowingly relying" means you have actual knowledge
46450      that, but for the patent license, your conveying the covered work
46451      in a country, or your recipient's use of the covered work in a
46452      country, would infringe one or more identifiable patents in that
46453      country that you have reason to believe are valid.
46454
46455      If, pursuant to or in connection with a single transaction or
46456      arrangement, you convey, or propagate by procuring conveyance of, a
46457      covered work, and grant a patent license to some of the parties
46458      receiving the covered work authorizing them to use, propagate,
46459      modify or convey a specific copy of the covered work, then the
46460      patent license you grant is automatically extended to all
46461      recipients of the covered work and works based on it.
46462
46463      A patent license is "discriminatory" if it does not include within
46464      the scope of its coverage, prohibits the exercise of, or is
46465      conditioned on the non-exercise of one or more of the rights that
46466      are specifically granted under this License.  You may not convey a
46467      covered work if you are a party to an arrangement with a third
46468      party that is in the business of distributing software, under
46469      which you make payment to the third party based on the extent of
46470      your activity of conveying the work, and under which the third
46471      party grants, to any of the parties who would receive the covered
46472      work from you, a discriminatory patent license (a) in connection
46473      with copies of the covered work conveyed by you (or copies made
46474      from those copies), or (b) primarily for and in connection with
46475      specific products or compilations that contain the covered work,
46476      unless you entered into that arrangement, or that patent license
46477      was granted, prior to 28 March 2007.
46478
46479      Nothing in this License shall be construed as excluding or limiting
46480      any implied license or other defenses to infringement that may
46481      otherwise be available to you under applicable patent law.
46482
46483  12. No Surrender of Others' Freedom.
46484
46485      If conditions are imposed on you (whether by court order,
46486      agreement or otherwise) that contradict the conditions of this
46487      License, they do not excuse you from the conditions of this
46488      License.  If you cannot convey a covered work so as to satisfy
46489      simultaneously your obligations under this License and any other
46490      pertinent obligations, then as a consequence you may not convey it
46491      at all.  For example, if you agree to terms that obligate you to
46492      collect a royalty for further conveying from those to whom you
46493      convey the Program, the only way you could satisfy both those
46494      terms and this License would be to refrain entirely from conveying
46495      the Program.
46496
46497  13. Use with the GNU Affero General Public License.
46498
46499      Notwithstanding any other provision of this License, you have
46500      permission to link or combine any covered work with a work licensed
46501      under version 3 of the GNU Affero General Public License into a
46502      single combined work, and to convey the resulting work.  The terms
46503      of this License will continue to apply to the part which is the
46504      covered work, but the special requirements of the GNU Affero
46505      General Public License, section 13, concerning interaction through
46506      a network will apply to the combination as such.
46507
46508  14. Revised Versions of this License.
46509
46510      The Free Software Foundation may publish revised and/or new
46511      versions of the GNU General Public License from time to time.
46512      Such new versions will be similar in spirit to the present
46513      version, but may differ in detail to address new problems or
46514      concerns.
46515
46516      Each version is given a distinguishing version number.  If the
46517      Program specifies that a certain numbered version of the GNU
46518      General Public License "or any later version" applies to it, you
46519      have the option of following the terms and conditions either of
46520      that numbered version or of any later version published by the
46521      Free Software Foundation.  If the Program does not specify a
46522      version number of the GNU General Public License, you may choose
46523      any version ever published by the Free Software Foundation.
46524
46525      If the Program specifies that a proxy can decide which future
46526      versions of the GNU General Public License can be used, that
46527      proxy's public statement of acceptance of a version permanently
46528      authorizes you to choose that version for the Program.
46529
46530      Later license versions may give you additional or different
46531      permissions.  However, no additional obligations are imposed on any
46532      author or copyright holder as a result of your choosing to follow a
46533      later version.
46534
46535  15. Disclaimer of Warranty.
46536
46537      THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
46538      APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
46539      COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
46540      WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
46541      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
46542      MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE
46543      RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
46544      SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
46545      NECESSARY SERVICING, REPAIR OR CORRECTION.
46546
46547  16. Limitation of Liability.
46548
46549      IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
46550      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
46551      AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
46552      FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
46553      CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
46554      THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
46555      BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
46556      PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
46557      PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
46558      THE POSSIBILITY OF SUCH DAMAGES.
46559
46560  17. Interpretation of Sections 15 and 16.
46561
46562      If the disclaimer of warranty and limitation of liability provided
46563      above cannot be given local legal effect according to their terms,
46564      reviewing courts shall apply local law that most closely
46565      approximates an absolute waiver of all civil liability in
46566      connection with the Program, unless a warranty or assumption of
46567      liability accompanies a copy of the Program in return for a fee.
46568
46569
46570 END OF TERMS AND CONDITIONS
46571 ===========================
46572
46573 How to Apply These Terms to Your New Programs
46574 =============================================
46575
46576 If you develop a new program, and you want it to be of the greatest
46577 possible use to the public, the best way to achieve this is to make it
46578 free software which everyone can redistribute and change under these
46579 terms.
46580
46581  To do so, attach the following notices to the program.  It is safest
46582 to attach them to the start of each source file to most effectively
46583 state the exclusion of warranty; and each file should have at least the
46584 "copyright" line and a pointer to where the full notice is found.
46585
46586      ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
46587      Copyright (C) YEAR NAME OF AUTHOR
46588
46589      This program is free software: you can redistribute it and/or modify
46590      it under the terms of the GNU General Public License as published by
46591      the Free Software Foundation, either version 3 of the License, or (at
46592      your option) any later version.
46593
46594      This program is distributed in the hope that it will be useful, but
46595      WITHOUT ANY WARRANTY; without even the implied warranty of
46596      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
46597      General Public License for more details.
46598
46599      You should have received a copy of the GNU General Public License
46600      along with this program.  If not, see `http://www.gnu.org/licenses/'.
46601
46602  Also add information on how to contact you by electronic and paper
46603 mail.
46604
46605  If the program does terminal interaction, make it output a short
46606 notice like this when it starts in an interactive mode:
46607
46608      PROGRAM Copyright (C) YEAR NAME OF AUTHOR
46609      This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
46610      This is free software, and you are welcome to redistribute it
46611      under certain conditions; type `show c' for details.
46612
46613  The hypothetical commands `show w' and `show c' should show the
46614 appropriate parts of the General Public License.  Of course, your
46615 program's commands might be different; for a GUI interface, you would
46616 use an "about box".
46617
46618  You should also get your employer (if you work as a programmer) or
46619 school, if any, to sign a "copyright disclaimer" for the program, if
46620 necessary.  For more information on this, and how to apply and follow
46621 the GNU GPL, see `http://www.gnu.org/licenses/'.
46622
46623  The GNU General Public License does not permit incorporating your
46624 program into proprietary programs.  If your program is a subroutine
46625 library, you may consider it more useful to permit linking proprietary
46626 applications with the library.  If this is what you want to do, use the
46627 GNU Lesser General Public License instead of this License.  But first,
46628 please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.
46629
46630 \1f
46631 File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
46632
46633 GNU Free Documentation License
46634 ******************************
46635
46636                      Version 1.3, 3 November 2008
46637
46638      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
46639      `http://fsf.org/'
46640
46641      Everyone is permitted to copy and distribute verbatim copies
46642      of this license document, but changing it is not allowed.
46643
46644   0. PREAMBLE
46645
46646      The purpose of this License is to make a manual, textbook, or other
46647      functional and useful document "free" in the sense of freedom: to
46648      assure everyone the effective freedom to copy and redistribute it,
46649      with or without modifying it, either commercially or
46650      noncommercially.  Secondarily, this License preserves for the
46651      author and publisher a way to get credit for their work, while not
46652      being considered responsible for modifications made by others.
46653
46654      This License is a kind of "copyleft", which means that derivative
46655      works of the document must themselves be free in the same sense.
46656      It complements the GNU General Public License, which is a copyleft
46657      license designed for free software.
46658
46659      We have designed this License in order to use it for manuals for
46660      free software, because free software needs free documentation: a
46661      free program should come with manuals providing the same freedoms
46662      that the software does.  But this License is not limited to
46663      software manuals; it can be used for any textual work, regardless
46664      of subject matter or whether it is published as a printed book.
46665      We recommend this License principally for works whose purpose is
46666      instruction or reference.
46667
46668   1. APPLICABILITY AND DEFINITIONS
46669
46670      This License applies to any manual or other work, in any medium,
46671      that contains a notice placed by the copyright holder saying it
46672      can be distributed under the terms of this License.  Such a notice
46673      grants a world-wide, royalty-free license, unlimited in duration,
46674      to use that work under the conditions stated herein.  The
46675      "Document", below, refers to any such manual or work.  Any member
46676      of the public is a licensee, and is addressed as "you".  You
46677      accept the license if you copy, modify or distribute the work in a
46678      way requiring permission under copyright law.
46679
46680      A "Modified Version" of the Document means any work containing the
46681      Document or a portion of it, either copied verbatim, or with
46682      modifications and/or translated into another language.
46683
46684      A "Secondary Section" is a named appendix or a front-matter section
46685      of the Document that deals exclusively with the relationship of the
46686      publishers or authors of the Document to the Document's overall
46687      subject (or to related matters) and contains nothing that could
46688      fall directly within that overall subject.  (Thus, if the Document
46689      is in part a textbook of mathematics, a Secondary Section may not
46690      explain any mathematics.)  The relationship could be a matter of
46691      historical connection with the subject or with related matters, or
46692      of legal, commercial, philosophical, ethical or political position
46693      regarding them.
46694
46695      The "Invariant Sections" are certain Secondary Sections whose
46696      titles are designated, as being those of Invariant Sections, in
46697      the notice that says that the Document is released under this
46698      License.  If a section does not fit the above definition of
46699      Secondary then it is not allowed to be designated as Invariant.
46700      The Document may contain zero Invariant Sections.  If the Document
46701      does not identify any Invariant Sections then there are none.
46702
46703      The "Cover Texts" are certain short passages of text that are
46704      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
46705      that says that the Document is released under this License.  A
46706      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
46707      be at most 25 words.
46708
46709      A "Transparent" copy of the Document means a machine-readable copy,
46710      represented in a format whose specification is available to the
46711      general public, that is suitable for revising the document
46712      straightforwardly with generic text editors or (for images
46713      composed of pixels) generic paint programs or (for drawings) some
46714      widely available drawing editor, and that is suitable for input to
46715      text formatters or for automatic translation to a variety of
46716      formats suitable for input to text formatters.  A copy made in an
46717      otherwise Transparent file format whose markup, or absence of
46718      markup, has been arranged to thwart or discourage subsequent
46719      modification by readers is not Transparent.  An image format is
46720      not Transparent if used for any substantial amount of text.  A
46721      copy that is not "Transparent" is called "Opaque".
46722
46723      Examples of suitable formats for Transparent copies include plain
46724      ASCII without markup, Texinfo input format, LaTeX input format,
46725      SGML or XML using a publicly available DTD, and
46726      standard-conforming simple HTML, PostScript or PDF designed for
46727      human modification.  Examples of transparent image formats include
46728      PNG, XCF and JPG.  Opaque formats include proprietary formats that
46729      can be read and edited only by proprietary word processors, SGML or
46730      XML for which the DTD and/or processing tools are not generally
46731      available, and the machine-generated HTML, PostScript or PDF
46732      produced by some word processors for output purposes only.
46733
46734      The "Title Page" means, for a printed book, the title page itself,
46735      plus such following pages as are needed to hold, legibly, the
46736      material this License requires to appear in the title page.  For
46737      works in formats which do not have any title page as such, "Title
46738      Page" means the text near the most prominent appearance of the
46739      work's title, preceding the beginning of the body of the text.
46740
46741      The "publisher" means any person or entity that distributes copies
46742      of the Document to the public.
46743
46744      A section "Entitled XYZ" means a named subunit of the Document
46745      whose title either is precisely XYZ or contains XYZ in parentheses
46746      following text that translates XYZ in another language.  (Here XYZ
46747      stands for a specific section name mentioned below, such as
46748      "Acknowledgements", "Dedications", "Endorsements", or "History".)
46749      To "Preserve the Title" of such a section when you modify the
46750      Document means that it remains a section "Entitled XYZ" according
46751      to this definition.
46752
46753      The Document may include Warranty Disclaimers next to the notice
46754      which states that this License applies to the Document.  These
46755      Warranty Disclaimers are considered to be included by reference in
46756      this License, but only as regards disclaiming warranties: any other
46757      implication that these Warranty Disclaimers may have is void and
46758      has no effect on the meaning of this License.
46759
46760   2. VERBATIM COPYING
46761
46762      You may copy and distribute the Document in any medium, either
46763      commercially or noncommercially, provided that this License, the
46764      copyright notices, and the license notice saying this License
46765      applies to the Document are reproduced in all copies, and that you
46766      add no other conditions whatsoever to those of this License.  You
46767      may not use technical measures to obstruct or control the reading
46768      or further copying of the copies you make or distribute.  However,
46769      you may accept compensation in exchange for copies.  If you
46770      distribute a large enough number of copies you must also follow
46771      the conditions in section 3.
46772
46773      You may also lend copies, under the same conditions stated above,
46774      and you may publicly display copies.
46775
46776   3. COPYING IN QUANTITY
46777
46778      If you publish printed copies (or copies in media that commonly
46779      have printed covers) of the Document, numbering more than 100, and
46780      the Document's license notice requires Cover Texts, you must
46781      enclose the copies in covers that carry, clearly and legibly, all
46782      these Cover Texts: Front-Cover Texts on the front cover, and
46783      Back-Cover Texts on the back cover.  Both covers must also clearly
46784      and legibly identify you as the publisher of these copies.  The
46785      front cover must present the full title with all words of the
46786      title equally prominent and visible.  You may add other material
46787      on the covers in addition.  Copying with changes limited to the
46788      covers, as long as they preserve the title of the Document and
46789      satisfy these conditions, can be treated as verbatim copying in
46790      other respects.
46791
46792      If the required texts for either cover are too voluminous to fit
46793      legibly, you should put the first ones listed (as many as fit
46794      reasonably) on the actual cover, and continue the rest onto
46795      adjacent pages.
46796
46797      If you publish or distribute Opaque copies of the Document
46798      numbering more than 100, you must either include a
46799      machine-readable Transparent copy along with each Opaque copy, or
46800      state in or with each Opaque copy a computer-network location from
46801      which the general network-using public has access to download
46802      using public-standard network protocols a complete Transparent
46803      copy of the Document, free of added material.  If you use the
46804      latter option, you must take reasonably prudent steps, when you
46805      begin distribution of Opaque copies in quantity, to ensure that
46806      this Transparent copy will remain thus accessible at the stated
46807      location until at least one year after the last time you
46808      distribute an Opaque copy (directly or through your agents or
46809      retailers) of that edition to the public.
46810
46811      It is requested, but not required, that you contact the authors of
46812      the Document well before redistributing any large number of
46813      copies, to give them a chance to provide you with an updated
46814      version of the Document.
46815
46816   4. MODIFICATIONS
46817
46818      You may copy and distribute a Modified Version of the Document
46819      under the conditions of sections 2 and 3 above, provided that you
46820      release the Modified Version under precisely this License, with
46821      the Modified Version filling the role of the Document, thus
46822      licensing distribution and modification of the Modified Version to
46823      whoever possesses a copy of it.  In addition, you must do these
46824      things in the Modified Version:
46825
46826        A. Use in the Title Page (and on the covers, if any) a title
46827           distinct from that of the Document, and from those of
46828           previous versions (which should, if there were any, be listed
46829           in the History section of the Document).  You may use the
46830           same title as a previous version if the original publisher of
46831           that version gives permission.
46832
46833        B. List on the Title Page, as authors, one or more persons or
46834           entities responsible for authorship of the modifications in
46835           the Modified Version, together with at least five of the
46836           principal authors of the Document (all of its principal
46837           authors, if it has fewer than five), unless they release you
46838           from this requirement.
46839
46840        C. State on the Title page the name of the publisher of the
46841           Modified Version, as the publisher.
46842
46843        D. Preserve all the copyright notices of the Document.
46844
46845        E. Add an appropriate copyright notice for your modifications
46846           adjacent to the other copyright notices.
46847
46848        F. Include, immediately after the copyright notices, a license
46849           notice giving the public permission to use the Modified
46850           Version under the terms of this License, in the form shown in
46851           the Addendum below.
46852
46853        G. Preserve in that license notice the full lists of Invariant
46854           Sections and required Cover Texts given in the Document's
46855           license notice.
46856
46857        H. Include an unaltered copy of this License.
46858
46859        I. Preserve the section Entitled "History", Preserve its Title,
46860           and add to it an item stating at least the title, year, new
46861           authors, and publisher of the Modified Version as given on
46862           the Title Page.  If there is no section Entitled "History" in
46863           the Document, create one stating the title, year, authors,
46864           and publisher of the Document as given on its Title Page,
46865           then add an item describing the Modified Version as stated in
46866           the previous sentence.
46867
46868        J. Preserve the network location, if any, given in the Document
46869           for public access to a Transparent copy of the Document, and
46870           likewise the network locations given in the Document for
46871           previous versions it was based on.  These may be placed in
46872           the "History" section.  You may omit a network location for a
46873           work that was published at least four years before the
46874           Document itself, or if the original publisher of the version
46875           it refers to gives permission.
46876
46877        K. For any section Entitled "Acknowledgements" or "Dedications",
46878           Preserve the Title of the section, and preserve in the
46879           section all the substance and tone of each of the contributor
46880           acknowledgements and/or dedications given therein.
46881
46882        L. Preserve all the Invariant Sections of the Document,
46883           unaltered in their text and in their titles.  Section numbers
46884           or the equivalent are not considered part of the section
46885           titles.
46886
46887        M. Delete any section Entitled "Endorsements".  Such a section
46888           may not be included in the Modified Version.
46889
46890        N. Do not retitle any existing section to be Entitled
46891           "Endorsements" or to conflict in title with any Invariant
46892           Section.
46893
46894        O. Preserve any Warranty Disclaimers.
46895
46896      If the Modified Version includes new front-matter sections or
46897      appendices that qualify as Secondary Sections and contain no
46898      material copied from the Document, you may at your option
46899      designate some or all of these sections as invariant.  To do this,
46900      add their titles to the list of Invariant Sections in the Modified
46901      Version's license notice.  These titles must be distinct from any
46902      other section titles.
46903
46904      You may add a section Entitled "Endorsements", provided it contains
46905      nothing but endorsements of your Modified Version by various
46906      parties--for example, statements of peer review or that the text
46907      has been approved by an organization as the authoritative
46908      definition of a standard.
46909
46910      You may add a passage of up to five words as a Front-Cover Text,
46911      and a passage of up to 25 words as a Back-Cover Text, to the end
46912      of the list of Cover Texts in the Modified Version.  Only one
46913      passage of Front-Cover Text and one of Back-Cover Text may be
46914      added by (or through arrangements made by) any one entity.  If the
46915      Document already includes a cover text for the same cover,
46916      previously added by you or by arrangement made by the same entity
46917      you are acting on behalf of, you may not add another; but you may
46918      replace the old one, on explicit permission from the previous
46919      publisher that added the old one.
46920
46921      The author(s) and publisher(s) of the Document do not by this
46922      License give permission to use their names for publicity for or to
46923      assert or imply endorsement of any Modified Version.
46924
46925   5. COMBINING DOCUMENTS
46926
46927      You may combine the Document with other documents released under
46928      this License, under the terms defined in section 4 above for
46929      modified versions, provided that you include in the combination
46930      all of the Invariant Sections of all of the original documents,
46931      unmodified, and list them all as Invariant Sections of your
46932      combined work in its license notice, and that you preserve all
46933      their Warranty Disclaimers.
46934
46935      The combined work need only contain one copy of this License, and
46936      multiple identical Invariant Sections may be replaced with a single
46937      copy.  If there are multiple Invariant Sections with the same name
46938      but different contents, make the title of each such section unique
46939      by adding at the end of it, in parentheses, the name of the
46940      original author or publisher of that section if known, or else a
46941      unique number.  Make the same adjustment to the section titles in
46942      the list of Invariant Sections in the license notice of the
46943      combined work.
46944
46945      In the combination, you must combine any sections Entitled
46946      "History" in the various original documents, forming one section
46947      Entitled "History"; likewise combine any sections Entitled
46948      "Acknowledgements", and any sections Entitled "Dedications".  You
46949      must delete all sections Entitled "Endorsements."
46950
46951   6. COLLECTIONS OF DOCUMENTS
46952
46953      You may make a collection consisting of the Document and other
46954      documents released under this License, and replace the individual
46955      copies of this License in the various documents with a single copy
46956      that is included in the collection, provided that you follow the
46957      rules of this License for verbatim copying of each of the
46958      documents in all other respects.
46959
46960      You may extract a single document from such a collection, and
46961      distribute it individually under this License, provided you insert
46962      a copy of this License into the extracted document, and follow
46963      this License in all other respects regarding verbatim copying of
46964      that document.
46965
46966   7. AGGREGATION WITH INDEPENDENT WORKS
46967
46968      A compilation of the Document or its derivatives with other
46969      separate and independent documents or works, in or on a volume of
46970      a storage or distribution medium, is called an "aggregate" if the
46971      copyright resulting from the compilation is not used to limit the
46972      legal rights of the compilation's users beyond what the individual
46973      works permit.  When the Document is included in an aggregate, this
46974      License does not apply to the other works in the aggregate which
46975      are not themselves derivative works of the Document.
46976
46977      If the Cover Text requirement of section 3 is applicable to these
46978      copies of the Document, then if the Document is less than one half
46979      of the entire aggregate, the Document's Cover Texts may be placed
46980      on covers that bracket the Document within the aggregate, or the
46981      electronic equivalent of covers if the Document is in electronic
46982      form.  Otherwise they must appear on printed covers that bracket
46983      the whole aggregate.
46984
46985   8. TRANSLATION
46986
46987      Translation is considered a kind of modification, so you may
46988      distribute translations of the Document under the terms of section
46989      4.  Replacing Invariant Sections with translations requires special
46990      permission from their copyright holders, but you may include
46991      translations of some or all Invariant Sections in addition to the
46992      original versions of these Invariant Sections.  You may include a
46993      translation of this License, and all the license notices in the
46994      Document, and any Warranty Disclaimers, provided that you also
46995      include the original English version of this License and the
46996      original versions of those notices and disclaimers.  In case of a
46997      disagreement between the translation and the original version of
46998      this License or a notice or disclaimer, the original version will
46999      prevail.
47000
47001      If a section in the Document is Entitled "Acknowledgements",
47002      "Dedications", or "History", the requirement (section 4) to
47003      Preserve its Title (section 1) will typically require changing the
47004      actual title.
47005
47006   9. TERMINATION
47007
47008      You may not copy, modify, sublicense, or distribute the Document
47009      except as expressly provided under this License.  Any attempt
47010      otherwise to copy, modify, sublicense, or distribute it is void,
47011      and will automatically terminate your rights under this License.
47012
47013      However, if you cease all violation of this License, then your
47014      license from a particular copyright holder is reinstated (a)
47015      provisionally, unless and until the copyright holder explicitly
47016      and finally terminates your license, and (b) permanently, if the
47017      copyright holder fails to notify you of the violation by some
47018      reasonable means prior to 60 days after the cessation.
47019
47020      Moreover, your license from a particular copyright holder is
47021      reinstated permanently if the copyright holder notifies you of the
47022      violation by some reasonable means, this is the first time you have
47023      received notice of violation of this License (for any work) from
47024      that copyright holder, and you cure the violation prior to 30 days
47025      after your receipt of the notice.
47026
47027      Termination of your rights under this section does not terminate
47028      the licenses of parties who have received copies or rights from
47029      you under this License.  If your rights have been terminated and
47030      not permanently reinstated, receipt of a copy of some or all of
47031      the same material does not give you any rights to use it.
47032
47033  10. FUTURE REVISIONS OF THIS LICENSE
47034
47035      The Free Software Foundation may publish new, revised versions of
47036      the GNU Free Documentation License from time to time.  Such new
47037      versions will be similar in spirit to the present version, but may
47038      differ in detail to address new problems or concerns.  See
47039      `http://www.gnu.org/copyleft/'.
47040
47041      Each version of the License is given a distinguishing version
47042      number.  If the Document specifies that a particular numbered
47043      version of this License "or any later version" applies to it, you
47044      have the option of following the terms and conditions either of
47045      that specified version or of any later version that has been
47046      published (not as a draft) by the Free Software Foundation.  If
47047      the Document does not specify a version number of this License,
47048      you may choose any version ever published (not as a draft) by the
47049      Free Software Foundation.  If the Document specifies that a proxy
47050      can decide which future versions of this License can be used, that
47051      proxy's public statement of acceptance of a version permanently
47052      authorizes you to choose that version for the Document.
47053
47054  11. RELICENSING
47055
47056      "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
47057      World Wide Web server that publishes copyrightable works and also
47058      provides prominent facilities for anybody to edit those works.  A
47059      public wiki that anybody can edit is an example of such a server.
47060      A "Massive Multiauthor Collaboration" (or "MMC") contained in the
47061      site means any set of copyrightable works thus published on the MMC
47062      site.
47063
47064      "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
47065      license published by Creative Commons Corporation, a not-for-profit
47066      corporation with a principal place of business in San Francisco,
47067      California, as well as future copyleft versions of that license
47068      published by that same organization.
47069
47070      "Incorporate" means to publish or republish a Document, in whole or
47071      in part, as part of another Document.
47072
47073      An MMC is "eligible for relicensing" if it is licensed under this
47074      License, and if all works that were first published under this
47075      License somewhere other than this MMC, and subsequently
47076      incorporated in whole or in part into the MMC, (1) had no cover
47077      texts or invariant sections, and (2) were thus incorporated prior
47078      to November 1, 2008.
47079
47080      The operator of an MMC Site may republish an MMC contained in the
47081      site under CC-BY-SA on the same site at any time before August 1,
47082      2009, provided the MMC is eligible for relicensing.
47083
47084
47085 ADDENDUM: How to use this License for your documents
47086 ====================================================
47087
47088 To use this License in a document you have written, include a copy of
47089 the License in the document and put the following copyright and license
47090 notices just after the title page:
47091
47092        Copyright (C)  YEAR  YOUR NAME.
47093        Permission is granted to copy, distribute and/or modify this document
47094        under the terms of the GNU Free Documentation License, Version 1.3
47095        or any later version published by the Free Software Foundation;
47096        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
47097        Texts.  A copy of the license is included in the section entitled ``GNU
47098        Free Documentation License''.
47099
47100  If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
47101 replace the "with...Texts." line with this:
47102
47103          with the Invariant Sections being LIST THEIR TITLES, with
47104          the Front-Cover Texts being LIST, and with the Back-Cover Texts
47105          being LIST.
47106
47107  If you have Invariant Sections without Cover Texts, or some other
47108 combination of the three, merge those two alternatives to suit the
47109 situation.
47110
47111  If your document contains nontrivial examples of program code, we
47112 recommend releasing these examples in parallel under your choice of
47113 free software license, such as the GNU General Public License, to
47114 permit their use in free software.
47115
47116 \1f
47117 File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
47118
47119 Contributors to GCC
47120 *******************
47121
47122 The GCC project would like to thank its many contributors.  Without
47123 them the project would not have been nearly as successful as it has
47124 been.  Any omissions in this list are accidental.  Feel free to contact
47125 <law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
47126 some of your contributions are not listed.  Please keep this list in
47127 alphabetical order.
47128
47129    * Analog Devices helped implement the support for complex data types
47130      and iterators.
47131
47132    * John David Anglin for threading-related fixes and improvements to
47133      libstdc++-v3, and the HP-UX port.
47134
47135    * James van Artsdalen wrote the code that makes efficient use of the
47136      Intel 80387 register stack.
47137
47138    * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
47139      Series port.
47140
47141    * Alasdair Baird for various bug fixes.
47142
47143    * Giovanni Bajo for analyzing lots of complicated C++ problem
47144      reports.
47145
47146    * Peter Barada for his work to improve code generation for new
47147      ColdFire cores.
47148
47149    * Gerald Baumgartner added the signature extension to the C++ front
47150      end.
47151
47152    * Godmar Back for his Java improvements and encouragement.
47153
47154    * Scott Bambrough for help porting the Java compiler.
47155
47156    * Wolfgang Bangerth for processing tons of bug reports.
47157
47158    * Jon Beniston for his Microsoft Windows port of Java and port to
47159      Lattice Mico32.
47160
47161    * Daniel Berlin for better DWARF2 support, faster/better
47162      optimizations, improved alias analysis, plus migrating GCC to
47163      Bugzilla.
47164
47165    * Geoff Berry for his Java object serialization work and various
47166      patches.
47167
47168    * David Binderman tests weekly snapshots of GCC trunk against Fedora
47169      Rawhide for several architectures.
47170
47171    * Uros Bizjak for the implementation of x87 math built-in functions
47172      and for various middle end and i386 back end improvements and bug
47173      fixes.
47174
47175    * Eric Blake for helping to make GCJ and libgcj conform to the
47176      specifications.
47177
47178    * Janne Blomqvist for contributions to GNU Fortran.
47179
47180    * Segher Boessenkool for various fixes.
47181
47182    * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
47183      other Java work.
47184
47185    * Neil Booth for work on cpplib, lang hooks, debug hooks and other
47186      miscellaneous clean-ups.
47187
47188    * Steven Bosscher for integrating the GNU Fortran front end into GCC
47189      and for contributing to the tree-ssa branch.
47190
47191    * Eric Botcazou for fixing middle- and backend bugs left and right.
47192
47193    * Per Bothner for his direction via the steering committee and
47194      various improvements to the infrastructure for supporting new
47195      languages.  Chill front end implementation.  Initial
47196      implementations of cpplib, fix-header, config.guess, libio, and
47197      past C++ library (libg++) maintainer.  Dreaming up, designing and
47198      implementing much of GCJ.
47199
47200    * Devon Bowen helped port GCC to the Tahoe.
47201
47202    * Don Bowman for mips-vxworks contributions.
47203
47204    * Dave Brolley for work on cpplib and Chill.
47205
47206    * Paul Brook for work on the ARM architecture and maintaining GNU
47207      Fortran.
47208
47209    * Robert Brown implemented the support for Encore 32000 systems.
47210
47211    * Christian Bruel for improvements to local store elimination.
47212
47213    * Herman A.J. ten Brugge for various fixes.
47214
47215    * Joerg Brunsmann for Java compiler hacking and help with the GCJ
47216      FAQ.
47217
47218    * Joe Buck for his direction via the steering committee.
47219
47220    * Craig Burley for leadership of the G77 Fortran effort.
47221
47222    * Stephan Buys for contributing Doxygen notes for libstdc++.
47223
47224    * Paolo Carlini for libstdc++ work: lots of efficiency improvements
47225      to the C++ strings, streambufs and formatted I/O, hard detective
47226      work on the frustrating localization issues, and keeping up with
47227      the problem reports.
47228
47229    * John Carr for his alias work, SPARC hacking, infrastructure
47230      improvements, previous contributions to the steering committee,
47231      loop optimizations, etc.
47232
47233    * Stephane Carrez for 68HC11 and 68HC12 ports.
47234
47235    * Steve Chamberlain for support for the Renesas SH and H8 processors
47236      and the PicoJava processor, and for GCJ config fixes.
47237
47238    * Glenn Chambers for help with the GCJ FAQ.
47239
47240    * John-Marc Chandonia for various libgcj patches.
47241
47242    * Denis Chertykov for contributing and maintaining the AVR port, the
47243      first GCC port for an 8-bit architecture.
47244
47245    * Scott Christley for his Objective-C contributions.
47246
47247    * Eric Christopher for his Java porting help and clean-ups.
47248
47249    * Branko Cibej for more warning contributions.
47250
47251    * The GNU Classpath project for all of their merged runtime code.
47252
47253    * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, `--help',
47254      and other random hacking.
47255
47256    * Michael Cook for libstdc++ cleanup patches to reduce warnings.
47257
47258    * R. Kelley Cook for making GCC buildable from a read-only directory
47259      as well as other miscellaneous build process and documentation
47260      clean-ups.
47261
47262    * Ralf Corsepius for SH testing and minor bug fixing.
47263
47264    * Stan Cox for care and feeding of the x86 port and lots of behind
47265      the scenes hacking.
47266
47267    * Alex Crain provided changes for the 3b1.
47268
47269    * Ian Dall for major improvements to the NS32k port.
47270
47271    * Paul Dale for his work to add uClinux platform support to the m68k
47272      backend.
47273
47274    * Dario Dariol contributed the four varieties of sample programs
47275      that print a copy of their source.
47276
47277    * Russell Davidson for fstream and stringstream fixes in libstdc++.
47278
47279    * Bud Davis for work on the G77 and GNU Fortran compilers.
47280
47281    * Mo DeJong for GCJ and libgcj bug fixes.
47282
47283    * DJ Delorie for the DJGPP port, build and libiberty maintenance,
47284      various bug fixes, and the M32C, MeP, and RL78 ports.
47285
47286    * Arnaud Desitter for helping to debug GNU Fortran.
47287
47288    * Gabriel Dos Reis for contributions to G++, contributions and
47289      maintenance of GCC diagnostics infrastructure, libstdc++-v3,
47290      including `valarray<>', `complex<>', maintaining the numerics
47291      library (including that pesky `<limits>' :-) and keeping
47292      up-to-date anything to do with numbers.
47293
47294    * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
47295      ISO C99 support, CFG dumping support, etc., plus support of the
47296      C++ runtime libraries including for all kinds of C interface
47297      issues, contributing and maintaining `complex<>', sanity checking
47298      and disbursement, configuration architecture, libio maintenance,
47299      and early math work.
47300
47301    * Zdenek Dvorak for a new loop unroller and various fixes.
47302
47303    * Michael Eager for his work on the Xilinx MicroBlaze port.
47304
47305    * Richard Earnshaw for his ongoing work with the ARM.
47306
47307    * David Edelsohn for his direction via the steering committee,
47308      ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
47309      loop changes, doing the entire AIX port of libstdc++ with his bare
47310      hands, and for ensuring GCC properly keeps working on AIX.
47311
47312    * Kevin Ediger for the floating point formatting of num_put::do_put
47313      in libstdc++.
47314
47315    * Phil Edwards for libstdc++ work including configuration hackery,
47316      documentation maintainer, chief breaker of the web pages, the
47317      occasional iostream bug fix, and work on shared library symbol
47318      versioning.
47319
47320    * Paul Eggert for random hacking all over GCC.
47321
47322    * Mark Elbrecht for various DJGPP improvements, and for libstdc++
47323      configuration support for locales and fstream-related fixes.
47324
47325    * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
47326      iostreams.
47327
47328    * Christian Ehrhardt for dealing with bug reports.
47329
47330    * Ben Elliston for his work to move the Objective-C runtime into its
47331      own subdirectory and for his work on autoconf.
47332
47333    * Revital Eres for work on the PowerPC 750CL port.
47334
47335    * Marc Espie for OpenBSD support.
47336
47337    * Doug Evans for much of the global optimization framework, arc,
47338      m32r, and SPARC work.
47339
47340    * Christopher Faylor for his work on the Cygwin port and for caring
47341      and feeding the gcc.gnu.org box and saving its users tons of spam.
47342
47343    * Fred Fish for BeOS support and Ada fixes.
47344
47345    * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
47346
47347    * Peter Gerwinski for various bug fixes and the Pascal front end.
47348
47349    * Kaveh R. Ghazi for his direction via the steering committee,
47350      amazing work to make `-W -Wall -W* -Werror' useful, and testing
47351      GCC on a plethora of platforms.  Kaveh extends his gratitude to
47352      the CAIP Center at Rutgers University for providing him with
47353      computing resources to work on Free Software from the late 1980s
47354      to 2010.
47355
47356    * John Gilmore for a donation to the FSF earmarked improving GNU
47357      Java.
47358
47359    * Judy Goldberg for c++ contributions.
47360
47361    * Torbjorn Granlund for various fixes and the c-torture testsuite,
47362      multiply- and divide-by-constant optimization, improved long long
47363      support, improved leaf function register allocation, and his
47364      direction via the steering committee.
47365
47366    * Anthony Green for his `-Os' contributions, the moxie port, and
47367      Java front end work.
47368
47369    * Stu Grossman for gdb hacking, allowing GCJ developers to debug
47370      Java code.
47371
47372    * Michael K. Gschwind contributed the port to the PDP-11.
47373
47374    * Richard Guenther for his ongoing middle-end contributions and bug
47375      fixes and for release management.
47376
47377    * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
47378      the support for Dwarf symbolic debugging information, and much of
47379      the support for System V Release 4.  He has also worked heavily on
47380      the Intel 386 and 860 support.
47381
47382    * Sumanth Gundapaneni for contributing the CR16 port.
47383
47384    * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
47385      GCSE.
47386
47387    * Bruno Haible for improvements in the runtime overhead for EH, new
47388      warnings and assorted bug fixes.
47389
47390    * Andrew Haley for his amazing Java compiler and library efforts.
47391
47392    * Chris Hanson assisted in making GCC work on HP-UX for the 9000
47393      series 300.
47394
47395    * Michael Hayes for various thankless work he's done trying to get
47396      the c30/c40 ports functional.  Lots of loop and unroll
47397      improvements and fixes.
47398
47399    * Dara Hazeghi for wading through myriads of target-specific bug
47400      reports.
47401
47402    * Kate Hedstrom for staking the G77 folks with an initial testsuite.
47403
47404    * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
47405      work, loop opts, and generally fixing lots of old problems we've
47406      ignored for years, flow rewrite and lots of further stuff,
47407      including reviewing tons of patches.
47408
47409    * Aldy Hernandez for working on the PowerPC port, SIMD support, and
47410      various fixes.
47411
47412    * Nobuyuki Hikichi of Software Research Associates, Tokyo,
47413      contributed the support for the Sony NEWS machine.
47414
47415    * Kazu Hirata for caring and feeding the Renesas H8/300 port and
47416      various fixes.
47417
47418    * Katherine Holcomb for work on GNU Fortran.
47419
47420    * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
47421      of testing and bug fixing, particularly of GCC configury code.
47422
47423    * Steve Holmgren for MachTen patches.
47424
47425    * Mat Hostetter for work on the TILE-Gx and TILEPro ports.
47426
47427    * Jan Hubicka for his x86 port improvements.
47428
47429    * Falk Hueffner for working on C and optimization bug reports.
47430
47431    * Bernardo Innocenti for his m68k work, including merging of
47432      ColdFire improvements and uClinux support.
47433
47434    * Christian Iseli for various bug fixes.
47435
47436    * Kamil Iskra for general m68k hacking.
47437
47438    * Lee Iverson for random fixes and MIPS testing.
47439
47440    * Andreas Jaeger for testing and benchmarking of GCC and various bug
47441      fixes.
47442
47443    * Jakub Jelinek for his SPARC work and sibling call optimizations as
47444      well as lots of bug fixes and test cases, and for improving the
47445      Java build system.
47446
47447    * Janis Johnson for ia64 testing and fixes, her quality improvement
47448      sidetracks, and web page maintenance.
47449
47450    * Kean Johnston for SCO OpenServer support and various fixes.
47451
47452    * Tim Josling for the sample language treelang based originally on
47453      Richard Kenner's "toy" language.
47454
47455    * Nicolai Josuttis for additional libstdc++ documentation.
47456
47457    * Klaus Kaempf for his ongoing work to make alpha-vms a viable
47458      target.
47459
47460    * Steven G. Kargl for work on GNU Fortran.
47461
47462    * David Kashtan of SRI adapted GCC to VMS.
47463
47464    * Ryszard Kabatek for many, many libstdc++ bug fixes and
47465      optimizations of strings, especially member functions, and for
47466      auto_ptr fixes.
47467
47468    * Geoffrey Keating for his ongoing work to make the PPC work for
47469      GNU/Linux and his automatic regression tester.
47470
47471    * Brendan Kehoe for his ongoing work with G++ and for a lot of early
47472      work in just about every part of libstdc++.
47473
47474    * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
47475      MIL-STD-1750A.
47476
47477    * Richard Kenner of the New York University Ultracomputer Research
47478      Laboratory wrote the machine descriptions for the AMD 29000, the
47479      DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
47480      support for instruction attributes.  He also made changes to
47481      better support RISC processors including changes to common
47482      subexpression elimination, strength reduction, function calling
47483      sequence handling, and condition code support, in addition to
47484      generalizing the code for frame pointer elimination and delay slot
47485      scheduling.  Richard Kenner was also the head maintainer of GCC
47486      for several years.
47487
47488    * Mumit Khan for various contributions to the Cygwin and Mingw32
47489      ports and maintaining binary releases for Microsoft Windows hosts,
47490      and for massive libstdc++ porting work to Cygwin/Mingw32.
47491
47492    * Robin Kirkham for cpu32 support.
47493
47494    * Mark Klein for PA improvements.
47495
47496    * Thomas Koenig for various bug fixes.
47497
47498    * Bruce Korb for the new and improved fixincludes code.
47499
47500    * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
47501      effort.
47502
47503    * Charles LaBrec contributed the support for the Integrated Solutions
47504      68020 system.
47505
47506    * Asher Langton and Mike Kumbera for contributing Cray pointer
47507      support to GNU Fortran, and for other GNU Fortran improvements.
47508
47509    * Jeff Law for his direction via the steering committee,
47510      coordinating the entire egcs project and GCC 2.95, rolling out
47511      snapshots and releases, handling merges from GCC2, reviewing tons
47512      of patches that might have fallen through the cracks else, and
47513      random but extensive hacking.
47514
47515    * Walter Lee for work on the TILE-Gx and TILEPro ports.
47516
47517    * Marc Lehmann for his direction via the steering committee and
47518      helping with analysis and improvements of x86 performance.
47519
47520    * Victor Leikehman for work on GNU Fortran.
47521
47522    * Ted Lemon wrote parts of the RTL reader and printer.
47523
47524    * Kriang Lerdsuwanakij for C++ improvements including template as
47525      template parameter support, and many C++ fixes.
47526
47527    * Warren Levy for tremendous work on libgcj (Java Runtime Library)
47528      and random work on the Java front end.
47529
47530    * Alain Lichnewsky ported GCC to the MIPS CPU.
47531
47532    * Oskar Liljeblad for hacking on AWT and his many Java bug reports
47533      and patches.
47534
47535    * Robert Lipe for OpenServer support, new testsuites, testing, etc.
47536
47537    * Chen Liqin for various S+core related fixes/improvement, and for
47538      maintaining the S+core port.
47539
47540    * Weiwen Liu for testing and various bug fixes.
47541
47542    * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other
47543      diagnostics fixes and improvements.
47544
47545    * Dave Love for his ongoing work with the Fortran front end and
47546      runtime libraries.
47547
47548    * Martin von Lo"wis for internal consistency checking infrastructure,
47549      various C++ improvements including namespace support, and tons of
47550      assistance with libstdc++/compiler merges.
47551
47552    * H.J. Lu for his previous contributions to the steering committee,
47553      many x86 bug reports, prototype patches, and keeping the GNU/Linux
47554      ports working.
47555
47556    * Greg McGary for random fixes and (someday) bounded pointers.
47557
47558    * Andrew MacLeod for his ongoing work in building a real EH system,
47559      various code generation improvements, work on the global
47560      optimizer, etc.
47561
47562    * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
47563      hacking improvements to compile-time performance, overall
47564      knowledge and direction in the area of instruction scheduling, and
47565      design and implementation of the automaton based instruction
47566      scheduler.
47567
47568    * Bob Manson for his behind the scenes work on dejagnu.
47569
47570    * Philip Martin for lots of libstdc++ string and vector iterator
47571      fixes and improvements, and string clean up and testsuites.
47572
47573    * All of the Mauve project contributors, for Java test code.
47574
47575    * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
47576
47577    * Adam Megacz for his work on the Microsoft Windows port of GCJ.
47578
47579    * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
47580      powerpc, haifa, ECOFF debug support, and other assorted hacking.
47581
47582    * Jason Merrill for his direction via the steering committee and
47583      leading the G++ effort.
47584
47585    * Martin Michlmayr for testing GCC on several architectures using the
47586      entire Debian archive.
47587
47588    * David Miller for his direction via the steering committee, lots of
47589      SPARC work, improvements in jump.c and interfacing with the Linux
47590      kernel developers.
47591
47592    * Gary Miller ported GCC to Charles River Data Systems machines.
47593
47594    * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
47595      the entire libstdc++ testsuite namespace-compatible.
47596
47597    * Mark Mitchell for his direction via the steering committee,
47598      mountains of C++ work, load/store hoisting out of loops, alias
47599      analysis improvements, ISO C `restrict' support, and serving as
47600      release manager from 2000 to 2011.
47601
47602    * Alan Modra for various GNU/Linux bits and testing.
47603
47604    * Toon Moene for his direction via the steering committee, Fortran
47605      maintenance, and his ongoing work to make us make Fortran run fast.
47606
47607    * Jason Molenda for major help in the care and feeding of all the
47608      services on the gcc.gnu.org (formerly egcs.cygnus.com)
47609      machine--mail, web services, ftp services, etc etc.  Doing all
47610      this work on scrap paper and the backs of envelopes would have
47611      been... difficult.
47612
47613    * Catherine Moore for fixing various ugly problems we have sent her
47614      way, including the haifa bug which was killing the Alpha & PowerPC
47615      Linux kernels.
47616
47617    * Mike Moreton for his various Java patches.
47618
47619    * David Mosberger-Tang for various Alpha improvements, and for the
47620      initial IA-64 port.
47621
47622    * Stephen Moshier contributed the floating point emulator that
47623      assists in cross-compilation and permits support for floating
47624      point numbers wider than 64 bits and for ISO C99 support.
47625
47626    * Bill Moyer for his behind the scenes work on various issues.
47627
47628    * Philippe De Muyter for his work on the m68k port.
47629
47630    * Joseph S. Myers for his work on the PDP-11 port, format checking
47631      and ISO C99 support, and continuous emphasis on (and contributions
47632      to) documentation.
47633
47634    * Nathan Myers for his work on libstdc++-v3: architecture and
47635      authorship through the first three snapshots, including
47636      implementation of locale infrastructure, string, shadow C headers,
47637      and the initial project documentation (DESIGN, CHECKLIST, and so
47638      forth).  Later, more work on MT-safe string and shadow headers.
47639
47640    * Felix Natter for documentation on porting libstdc++.
47641
47642    * Nathanael Nerode for cleaning up the configuration/build process.
47643
47644    * NeXT, Inc. donated the front end that supports the Objective-C
47645      language.
47646
47647    * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
47648      the search engine setup, various documentation fixes and other
47649      small fixes.
47650
47651    * Geoff Noer for his work on getting cygwin native builds working.
47652
47653    * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
47654      tracking web pages, GIMPLE tuples, and assorted fixes.
47655
47656    * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
47657      FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
47658      related infrastructure improvements.
47659
47660    * Alexandre Oliva for various build infrastructure improvements,
47661      scripts and amazing testing work, including keeping libtool issues
47662      sane and happy.
47663
47664    * Stefan Olsson for work on mt_alloc.
47665
47666    * Melissa O'Neill for various NeXT fixes.
47667
47668    * Rainer Orth for random MIPS work, including improvements to GCC's
47669      o32 ABI support, improvements to dejagnu's MIPS support, Java
47670      configuration clean-ups and porting work, and maintaining the
47671      IRIX, Solaris 2, and Tru64 UNIX ports.
47672
47673    * Hartmut Penner for work on the s390 port.
47674
47675    * Paul Petersen wrote the machine description for the Alliant FX/8.
47676
47677    * Alexandre Petit-Bianco for implementing much of the Java compiler
47678      and continued Java maintainership.
47679
47680    * Matthias Pfaller for major improvements to the NS32k port.
47681
47682    * Gerald Pfeifer for his direction via the steering committee,
47683      pointing out lots of problems we need to solve, maintenance of the
47684      web pages, and taking care of documentation maintenance in general.
47685
47686    * Andrew Pinski for processing bug reports by the dozen.
47687
47688    * Ovidiu Predescu for his work on the Objective-C front end and
47689      runtime libraries.
47690
47691    * Jerry Quinn for major performance improvements in C++ formatted
47692      I/O.
47693
47694    * Ken Raeburn for various improvements to checker, MIPS ports and
47695      various cleanups in the compiler.
47696
47697    * Rolf W. Rasmussen for hacking on AWT.
47698
47699    * David Reese of Sun Microsystems contributed to the Solaris on
47700      PowerPC port.
47701
47702    * Volker Reichelt for keeping up with the problem reports.
47703
47704    * Joern Rennecke for maintaining the sh port, loop, regmove & reload
47705      hacking and developing and maintaining the Epiphany port.
47706
47707    * Loren J. Rittle for improvements to libstdc++-v3 including the
47708      FreeBSD port, threading fixes, thread-related configury changes,
47709      critical threading documentation, and solutions to really tricky
47710      I/O problems, as well as keeping GCC properly working on FreeBSD
47711      and continuous testing.
47712
47713    * Craig Rodrigues for processing tons of bug reports.
47714
47715    * Ola Ro"nnerup for work on mt_alloc.
47716
47717    * Gavin Romig-Koch for lots of behind the scenes MIPS work.
47718
47719    * David Ronis inspired and encouraged Craig to rewrite the G77
47720      documentation in texinfo format by contributing a first pass at a
47721      translation of the old `g77-0.5.16/f/DOC' file.
47722
47723    * Ken Rose for fixes to GCC's delay slot filling code.
47724
47725    * Paul Rubin wrote most of the preprocessor.
47726
47727    * Pe'tur Runo'lfsson for major performance improvements in C++
47728      formatted I/O and large file support in C++ filebuf.
47729
47730    * Chip Salzenberg for libstdc++ patches and improvements to locales,
47731      traits, Makefiles, libio, libtool hackery, and "long long" support.
47732
47733    * Juha Sarlin for improvements to the H8 code generator.
47734
47735    * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
47736      300.
47737
47738    * Roger Sayle for improvements to constant folding and GCC's RTL
47739      optimizers as well as for fixing numerous bugs.
47740
47741    * Bradley Schatz for his work on the GCJ FAQ.
47742
47743    * Peter Schauer wrote the code to allow debugging to work on the
47744      Alpha.
47745
47746    * William Schelter did most of the work on the Intel 80386 support.
47747
47748    * Tobias Schlu"ter for work on GNU Fortran.
47749
47750    * Bernd Schmidt for various code generation improvements and major
47751      work in the reload pass, serving as release manager for GCC
47752      2.95.3, and work on the Blackfin and C6X ports.
47753
47754    * Peter Schmid for constant testing of libstdc++--especially
47755      application testing, going above and beyond what was requested for
47756      the release criteria--and libstdc++ header file tweaks.
47757
47758    * Jason Schroeder for jcf-dump patches.
47759
47760    * Andreas Schwab for his work on the m68k port.
47761
47762    * Lars Segerlund for work on GNU Fortran.
47763
47764    * Dodji Seketeli for numerous C++ bug fixes and debug info
47765      improvements.
47766
47767    * Joel Sherrill for his direction via the steering committee, RTEMS
47768      contributions and RTEMS testing.
47769
47770    * Nathan Sidwell for many C++ fixes/improvements.
47771
47772    * Jeffrey Siegal for helping RMS with the original design of GCC,
47773      some code which handles the parse tree and RTL data structures,
47774      constant folding and help with the original VAX & m68k ports.
47775
47776    * Kenny Simpson for prompting libstdc++ fixes due to defect reports
47777      from the LWG (thereby keeping GCC in line with updates from the
47778      ISO).
47779
47780    * Franz Sirl for his ongoing work with making the PPC port stable
47781      for GNU/Linux.
47782
47783    * Andrey Slepuhin for assorted AIX hacking.
47784
47785    * Trevor Smigiel for contributing the SPU port.
47786
47787    * Christopher Smith did the port for Convex machines.
47788
47789    * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
47790
47791    * Randy Smith finished the Sun FPA support.
47792
47793    * Scott Snyder for queue, iterator, istream, and string fixes and
47794      libstdc++ testsuite entries.  Also for providing the patch to G77
47795      to add rudimentary support for `INTEGER*1', `INTEGER*2', and
47796      `LOGICAL*1'.
47797
47798    * Zdenek Sojka for running automated regression testing of GCC and
47799      reporting numerous bugs.
47800
47801    * Jayant Sonar for contributing the CR16 port.
47802
47803    * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
47804
47805    * Richard Stallman, for writing the original GCC and launching the
47806      GNU project.
47807
47808    * Jan Stein of the Chalmers Computer Society provided support for
47809      Genix, as well as part of the 32000 machine description.
47810
47811    * Nigel Stephens for various mips16 related fixes/improvements.
47812
47813    * Jonathan Stone wrote the machine description for the Pyramid
47814      computer.
47815
47816    * Graham Stott for various infrastructure improvements.
47817
47818    * John Stracke for his Java HTTP protocol fixes.
47819
47820    * Mike Stump for his Elxsi port, G++ contributions over the years
47821      and more recently his vxworks contributions
47822
47823    * Jeff Sturm for Java porting help, bug fixes, and encouragement.
47824
47825    * Shigeya Suzuki for this fixes for the bsdi platforms.
47826
47827    * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
47828      support, general configury hacking, fixincludes, etc.
47829
47830    * Holger Teutsch provided the support for the Clipper CPU.
47831
47832    * Gary Thomas for his ongoing work to make the PPC work for
47833      GNU/Linux.
47834
47835    * Philipp Thomas for random bug fixes throughout the compiler
47836
47837    * Jason Thorpe for thread support in libstdc++ on NetBSD.
47838
47839    * Kresten Krab Thorup wrote the run time support for the Objective-C
47840      language and the fantastic Java bytecode interpreter.
47841
47842    * Michael Tiemann for random bug fixes, the first instruction
47843      scheduler, initial C++ support, function integration, NS32k, SPARC
47844      and M88k machine description work, delay slot scheduling.
47845
47846    * Andreas Tobler for his work porting libgcj to Darwin.
47847
47848    * Teemu Torma for thread safe exception handling support.
47849
47850    * Leonard Tower wrote parts of the parser, RTL generator, and RTL
47851      definitions, and of the VAX machine description.
47852
47853    * Daniel Towner and Hariharan Sandanagobalane contributed and
47854      maintain the picoChip port.
47855
47856    * Tom Tromey for internationalization support and for his many Java
47857      contributions and libgcj maintainership.
47858
47859    * Lassi Tuura for improvements to config.guess to determine HP
47860      processor types.
47861
47862    * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
47863
47864    * Andy Vaught for the design and initial implementation of the GNU
47865      Fortran front end.
47866
47867    * Brent Verner for work with the libstdc++ cshadow files and their
47868      associated configure steps.
47869
47870    * Todd Vierling for contributions for NetBSD ports.
47871
47872    * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
47873      guidance.
47874
47875    * Dean Wakerley for converting the install documentation from HTML
47876      to texinfo in time for GCC 3.0.
47877
47878    * Krister Walfridsson for random bug fixes.
47879
47880    * Feng Wang for contributions to GNU Fortran.
47881
47882    * Stephen M. Webb for time and effort on making libstdc++ shadow
47883      files work with the tricky Solaris 8+ headers, and for pushing the
47884      build-time header tree.
47885
47886    * John Wehle for various improvements for the x86 code generator,
47887      related infrastructure improvements to help x86 code generation,
47888      value range propagation and other work, WE32k port.
47889
47890    * Ulrich Weigand for work on the s390 port.
47891
47892    * Zack Weinberg for major work on cpplib and various other bug fixes.
47893
47894    * Matt Welsh for help with Linux Threads support in GCJ.
47895
47896    * Urban Widmark for help fixing java.io.
47897
47898    * Mark Wielaard for new Java library code and his work integrating
47899      with Classpath.
47900
47901    * Dale Wiles helped port GCC to the Tahoe.
47902
47903    * Bob Wilson from Tensilica, Inc. for the Xtensa port.
47904
47905    * Jim Wilson for his direction via the steering committee, tackling
47906      hard problems in various places that nobody else wanted to work
47907      on, strength reduction and other loop optimizations.
47908
47909    * Paul Woegerer and Tal Agmon for the CRX port.
47910
47911    * Carlo Wood for various fixes.
47912
47913    * Tom Wood for work on the m88k port.
47914
47915    * Canqun Yang for work on GNU Fortran.
47916
47917    * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
47918      description for the Tron architecture (specifically, the Gmicro).
47919
47920    * Kevin Zachmann helped port GCC to the Tahoe.
47921
47922    * Ayal Zaks for Swing Modulo Scheduling (SMS).
47923
47924    * Xiaoqiang Zhang for work on GNU Fortran.
47925
47926    * Gilles Zunino for help porting Java to Irix.
47927
47928
47929  The following people are recognized for their contributions to GNAT,
47930 the Ada front end of GCC:
47931    * Bernard Banner
47932
47933    * Romain Berrendonner
47934
47935    * Geert Bosch
47936
47937    * Emmanuel Briot
47938
47939    * Joel Brobecker
47940
47941    * Ben Brosgol
47942
47943    * Vincent Celier
47944
47945    * Arnaud Charlet
47946
47947    * Chien Chieng
47948
47949    * Cyrille Comar
47950
47951    * Cyrille Crozes
47952
47953    * Robert Dewar
47954
47955    * Gary Dismukes
47956
47957    * Robert Duff
47958
47959    * Ed Falis
47960
47961    * Ramon Fernandez
47962
47963    * Sam Figueroa
47964
47965    * Vasiliy Fofanov
47966
47967    * Michael Friess
47968
47969    * Franco Gasperoni
47970
47971    * Ted Giering
47972
47973    * Matthew Gingell
47974
47975    * Laurent Guerby
47976
47977    * Jerome Guitton
47978
47979    * Olivier Hainque
47980
47981    * Jerome Hugues
47982
47983    * Hristian Kirtchev
47984
47985    * Jerome Lambourg
47986
47987    * Bruno Leclerc
47988
47989    * Albert Lee
47990
47991    * Sean McNeil
47992
47993    * Javier Miranda
47994
47995    * Laurent Nana
47996
47997    * Pascal Obry
47998
47999    * Dong-Ik Oh
48000
48001    * Laurent Pautet
48002
48003    * Brett Porter
48004
48005    * Thomas Quinot
48006
48007    * Nicolas Roche
48008
48009    * Pat Rogers
48010
48011    * Jose Ruiz
48012
48013    * Douglas Rupp
48014
48015    * Sergey Rybin
48016
48017    * Gail Schenker
48018
48019    * Ed Schonberg
48020
48021    * Nicolas Setton
48022
48023    * Samuel Tardieu
48024
48025
48026  The following people are recognized for their contributions of new
48027 features, bug reports, testing and integration of classpath/libgcj for
48028 GCC version 4.1:
48029    * Lillian Angel for `JTree' implementation and lots Free Swing
48030      additions and bug fixes.
48031
48032    * Wolfgang Baer for `GapContent' bug fixes.
48033
48034    * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse
48035      event fixes, lots of Free Swing work including `JTable' editing.
48036
48037    * Stuart Ballard for RMI constant fixes.
48038
48039    * Goffredo Baroncelli for `HTTPURLConnection' fixes.
48040
48041    * Gary Benson for `MessageFormat' fixes.
48042
48043    * Daniel Bonniot for `Serialization' fixes.
48044
48045    * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX'
48046      and `DOM xml:id' support.
48047
48048    * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes.
48049
48050    * Archie Cobbs for build fixes, VM interface updates,
48051      `URLClassLoader' updates.
48052
48053    * Kelley Cook for build fixes.
48054
48055    * Martin Cordova for Suggestions for better `SocketTimeoutException'.
48056
48057    * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite
48058      and improvements.
48059
48060    * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
48061      2D support. Lots of imageio framework additions, lots of AWT and
48062      Free Swing bug fixes.
48063
48064    * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
48065      fixes, better `Proxy' support, bug fixes and IKVM integration.
48066
48067    * Santiago Gala for `AccessControlContext' fixes.
48068
48069    * Nicolas Geoffray for `VMClassLoader' and `AccessController'
48070      improvements.
48071
48072    * David Gilbert for `basic' and `metal' icon and plaf support and
48073      lots of documenting, Lots of Free Swing and metal theme additions.
48074      `MetalIconFactory' implementation.
48075
48076    * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers.
48077
48078    * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj
48079      build speedups.
48080
48081    * Kim Ho for `JFileChooser' implementation.
48082
48083    * Andrew John Hughes for `Locale' and net fixes, URI RFC2986
48084      updates, `Serialization' fixes, `Properties' XML support and
48085      generic branch work, VMIntegration guide update.
48086
48087    * Bastiaan Huisman for `TimeZone' bug fixing.
48088
48089    * Andreas Jaeger for mprec updates.
48090
48091    * Paul Jenner for better `-Werror' support.
48092
48093    * Ito Kazumitsu for `NetworkInterface' implementation and updates.
48094
48095    * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
48096      bug fixes all over. Lots of Free Swing work including styled text.
48097
48098    * Simon Kitching for `String' cleanups and optimization suggestions.
48099
48100    * Michael Koch for configuration fixes, `Locale' updates, bug and
48101      build fixes.
48102
48103    * Guilhem Lavaux for configuration, thread and channel fixes and
48104      Kaffe integration. JCL native `Pointer' updates. Logger bug fixes.
48105
48106    * David Lichteblau for JCL support library global/local reference
48107      cleanups.
48108
48109    * Aaron Luchko for JDWP updates and documentation fixes.
48110
48111    * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex
48112      features.
48113
48114    * Sven de Marothy for BMP imageio support, CSS and `TextLayout'
48115      fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes
48116      and implementing the Qt4 peers.
48117
48118    * Casey Marshall for crypto algorithm fixes, `FileChannel' lock,
48119      `SystemLogger' and `FileHandler' rotate implementations, NIO
48120      `FileChannel.map' support, security and policy updates.
48121
48122    * Bryce McKinlay for RMI work.
48123
48124    * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
48125      testing and documenting.
48126
48127    * Kalle Olavi Niemitalo for build fixes.
48128
48129    * Rainer Orth for build fixes.
48130
48131    * Andrew Overholt for `File' locking fixes.
48132
48133    * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates.
48134
48135    * Olga Rodimina for `MenuSelectionManager' implementation.
48136
48137    * Jan Roehrich for `BasicTreeUI' and `JTree' fixes.
48138
48139    * Julian Scheid for documentation updates and gjdoc support.
48140
48141    * Christian Schlichtherle for zip fixes and cleanups.
48142
48143    * Robert Schuster for documentation updates and beans fixes,
48144      `TreeNode' enumerations and `ActionCommand' and various fixes, XML
48145      and URL, AWT and Free Swing bug fixes.
48146
48147    * Keith Seitz for lots of JDWP work.
48148
48149    * Christian Thalinger for 64-bit cleanups, Configuration and VM
48150      interface fixes and `CACAO' integration, `fdlibm' updates.
48151
48152    * Gael Thomas for `VMClassLoader' boot packages support suggestions.
48153
48154    * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4'
48155      support for Darwin/OS X, `Graphics2D' support, `gtk+' updates.
48156
48157    * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe
48158      integration. `Qt4' build infrastructure, `SHA1PRNG' and
48159      `GdkPixbugDecoder' updates.
48160
48161    * Tom Tromey for Eclipse integration, generics work, lots of bug
48162      fixes and gcj integration including coordinating The Big Merge.
48163
48164    * Mark Wielaard for bug fixes, packaging and release management,
48165      `Clipboard' implementation, system call interrupts and network
48166      timeouts and `GdkPixpufDecoder' fixes.
48167
48168
48169  In addition to the above, all of which also contributed time and
48170 energy in testing GCC, we would like to thank the following for their
48171 contributions to testing:
48172
48173    * Michael Abd-El-Malek
48174
48175    * Thomas Arend
48176
48177    * Bonzo Armstrong
48178
48179    * Steven Ashe
48180
48181    * Chris Baldwin
48182
48183    * David Billinghurst
48184
48185    * Jim Blandy
48186
48187    * Stephane Bortzmeyer
48188
48189    * Horst von Brand
48190
48191    * Frank Braun
48192
48193    * Rodney Brown
48194
48195    * Sidney Cadot
48196
48197    * Bradford Castalia
48198
48199    * Robert Clark
48200
48201    * Jonathan Corbet
48202
48203    * Ralph Doncaster
48204
48205    * Richard Emberson
48206
48207    * Levente Farkas
48208
48209    * Graham Fawcett
48210
48211    * Mark Fernyhough
48212
48213    * Robert A. French
48214
48215    * Jo"rgen Freyh
48216
48217    * Mark K. Gardner
48218
48219    * Charles-Antoine Gauthier
48220
48221    * Yung Shing Gene
48222
48223    * David Gilbert
48224
48225    * Simon Gornall
48226
48227    * Fred Gray
48228
48229    * John Griffin
48230
48231    * Patrik Hagglund
48232
48233    * Phil Hargett
48234
48235    * Amancio Hasty
48236
48237    * Takafumi Hayashi
48238
48239    * Bryan W. Headley
48240
48241    * Kevin B. Hendricks
48242
48243    * Joep Jansen
48244
48245    * Christian Joensson
48246
48247    * Michel Kern
48248
48249    * David Kidd
48250
48251    * Tobias Kuipers
48252
48253    * Anand Krishnaswamy
48254
48255    * A. O. V. Le Blanc
48256
48257    * llewelly
48258
48259    * Damon Love
48260
48261    * Brad Lucier
48262
48263    * Matthias Klose
48264
48265    * Martin Knoblauch
48266
48267    * Rick Lutowski
48268
48269    * Jesse Macnish
48270
48271    * Stefan Morrell
48272
48273    * Anon A. Mous
48274
48275    * Matthias Mueller
48276
48277    * Pekka Nikander
48278
48279    * Rick Niles
48280
48281    * Jon Olson
48282
48283    * Magnus Persson
48284
48285    * Chris Pollard
48286
48287    * Richard Polton
48288
48289    * Derk Reefman
48290
48291    * David Rees
48292
48293    * Paul Reilly
48294
48295    * Tom Reilly
48296
48297    * Torsten Rueger
48298
48299    * Danny Sadinoff
48300
48301    * Marc Schifer
48302
48303    * Erik Schnetter
48304
48305    * Wayne K. Schroll
48306
48307    * David Schuler
48308
48309    * Vin Shelton
48310
48311    * Tim Souder
48312
48313    * Adam Sulmicki
48314
48315    * Bill Thorson
48316
48317    * George Talbot
48318
48319    * Pedro A. M. Vazquez
48320
48321    * Gregory Warnes
48322
48323    * Ian Watson
48324
48325    * David E. Young
48326
48327    * And many others
48328
48329  And finally we'd like to thank everyone who uses the compiler, provides
48330 feedback and generally reminds us why we're doing this work in the first
48331 place.
48332
48333 \1f
48334 File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
48335
48336 Option Index
48337 ************
48338
48339 GCC's command line options are indexed here without any initial `-' or
48340 `--'.  Where an option has both positive and negative forms (such as
48341 `-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
48342 indexed under the most appropriate form; it may sometimes be useful to
48343 look up both forms.
48344
48345 \0\b[index\0\b]
48346 * Menu:
48347
48348 * ###:                                   Overall Options.    (line  209)
48349 * -fno-keep-inline-dllexport:            Optimize Options.   (line  319)
48350 * -mcpu:                                 RX Options.         (line   30)
48351 * -mpointer-size=SIZE:                   VMS Options.        (line   20)
48352 * 8bit-idiv:                             i386 and x86-64 Options.
48353                                                              (line  818)
48354 * A:                                     Preprocessor Options.
48355                                                              (line  597)
48356 * all_load:                              Darwin Options.     (line  110)
48357 * allowable_client:                      Darwin Options.     (line  196)
48358 * ansi <1>:                              Non-bugs.           (line  107)
48359 * ansi <2>:                              Other Builtins.     (line   22)
48360 * ansi <3>:                              Preprocessor Options.
48361                                                              (line  338)
48362 * ansi <4>:                              C Dialect Options.  (line   11)
48363 * ansi:                                  Standards.          (line   16)
48364 * arch_errors_fatal:                     Darwin Options.     (line  114)
48365 * aux-info:                              C Dialect Options.  (line  168)
48366 * avx256-split-unaligned-load:           i386 and x86-64 Options.
48367                                                              (line  826)
48368 * avx256-split-unaligned-store:          i386 and x86-64 Options.
48369                                                              (line  826)
48370 * B:                                     Directory Options.  (line   46)
48371 * Bdynamic:                              VxWorks Options.    (line   22)
48372 * bind_at_load:                          Darwin Options.     (line  118)
48373 * Bstatic:                               VxWorks Options.    (line   22)
48374 * bundle:                                Darwin Options.     (line  123)
48375 * bundle_loader:                         Darwin Options.     (line  127)
48376 * c:                                     Link Options.       (line   20)
48377 * C:                                     Preprocessor Options.
48378                                                              (line  655)
48379 * c:                                     Overall Options.    (line  164)
48380 * client_name:                           Darwin Options.     (line  196)
48381 * compatibility_version:                 Darwin Options.     (line  196)
48382 * coverage:                              Debugging Options.  (line  412)
48383 * current_version:                       Darwin Options.     (line  196)
48384 * D:                                     Preprocessor Options.
48385                                                              (line   46)
48386 * d:                                     Debugging Options.  (line  544)
48387 * dA:                                    Debugging Options.  (line  754)
48388 * da:                                    Debugging Options.  (line  751)
48389 * dD <1>:                                Preprocessor Options.
48390                                                              (line  629)
48391 * dD:                                    Debugging Options.  (line  758)
48392 * dead_strip:                            Darwin Options.     (line  196)
48393 * dependency-file:                       Darwin Options.     (line  196)
48394 * dH:                                    Debugging Options.  (line  762)
48395 * dI:                                    Preprocessor Options.
48396                                                              (line  638)
48397 * dM:                                    Preprocessor Options.
48398                                                              (line  613)
48399 * dN:                                    Preprocessor Options.
48400                                                              (line  635)
48401 * dP:                                    Debugging Options.  (line  770)
48402 * dp:                                    Debugging Options.  (line  765)
48403 * dU:                                    Preprocessor Options.
48404                                                              (line  642)
48405 * dumpmachine:                           Debugging Options.  (line 1380)
48406 * dumpspecs:                             Debugging Options.  (line 1388)
48407 * dumpversion:                           Debugging Options.  (line 1384)
48408 * dx:                                    Debugging Options.  (line  774)
48409 * dylib_file:                            Darwin Options.     (line  196)
48410 * dylinker_install_name:                 Darwin Options.     (line  196)
48411 * dynamic:                               Darwin Options.     (line  196)
48412 * dynamiclib:                            Darwin Options.     (line  131)
48413 * E <1>:                                 Link Options.       (line   20)
48414 * E:                                     Overall Options.    (line  185)
48415 * EB:                                    MIPS Options.       (line    7)
48416 * EL:                                    MIPS Options.       (line   10)
48417 * exported_symbols_list:                 Darwin Options.     (line  196)
48418 * F:                                     Darwin Options.     (line   31)
48419 * fabi-version:                          C++ Dialect Options.
48420                                                              (line   20)
48421 * faggressive-loop-optimizations:        Optimize Options.   (line  509)
48422 * falign-functions:                      Optimize Options.   (line 1462)
48423 * falign-jumps:                          Optimize Options.   (line 1511)
48424 * falign-labels:                         Optimize Options.   (line 1480)
48425 * falign-loops:                          Optimize Options.   (line 1498)
48426 * fassociative-math:                     Optimize Options.   (line 1955)
48427 * fasynchronous-unwind-tables:           Code Gen Options.   (line  146)
48428 * fauto-inc-dec:                         Optimize Options.   (line  533)
48429 * fbounds-check:                         Code Gen Options.   (line   15)
48430 * fbranch-probabilities:                 Optimize Options.   (line 2082)
48431 * fbranch-target-load-optimize:          Optimize Options.   (line 2190)
48432 * fbranch-target-load-optimize2:         Optimize Options.   (line 2196)
48433 * fbtr-bb-exclusive:                     Optimize Options.   (line 2200)
48434 * fcall-saved:                           Code Gen Options.   (line  345)
48435 * fcall-used:                            Code Gen Options.   (line  331)
48436 * fcaller-saves:                         Optimize Options.   (line  829)
48437 * fcheck-data-deps:                      Optimize Options.   (line 1094)
48438 * fcheck-new:                            C++ Dialect Options.
48439                                                              (line   55)
48440 * fcombine-stack-adjustments:            Optimize Options.   (line  841)
48441 * fcommon:                               Variable Attributes.
48442                                                              (line  105)
48443 * fcompare-debug:                        Debugging Options.  (line  200)
48444 * fcompare-debug-second:                 Debugging Options.  (line  226)
48445 * fcompare-elim:                         Optimize Options.   (line 1794)
48446 * fcond-mismatch:                        C Dialect Options.  (line  315)
48447 * fconserve-stack:                       Optimize Options.   (line  847)
48448 * fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
48449                                                              (line   30)
48450 * fconstexpr-depth:                      C++ Dialect Options.
48451                                                              (line   65)
48452 * fcprop-registers:                      Optimize Options.   (line 1812)
48453 * fcrossjumping:                         Optimize Options.   (line  526)
48454 * fcse-follow-jumps:                     Optimize Options.   (line  445)
48455 * fcse-skip-blocks:                      Optimize Options.   (line  454)
48456 * fcx-fortran-rules:                     Optimize Options.   (line 2068)
48457 * fcx-limited-range:                     Optimize Options.   (line 2056)
48458 * fdata-sections:                        Optimize Options.   (line 2171)
48459 * fdbg-cnt:                              Debugging Options.  (line  465)
48460 * fdbg-cnt-list:                         Debugging Options.  (line  462)
48461 * fdce:                                  Optimize Options.   (line  539)
48462 * fdebug-cpp:                            Preprocessor Options.
48463                                                              (line  526)
48464 * fdebug-prefix-map:                     Debugging Options.  (line  320)
48465 * fdebug-types-section:                  Debugging Options.  (line   74)
48466 * fdeduce-init-list:                     C++ Dialect Options.
48467                                                              (line   71)
48468 * fdelayed-branch:                       Optimize Options.   (line  676)
48469 * fdelete-dead-exceptions:               Code Gen Options.   (line  131)
48470 * fdelete-null-pointer-checks:           Optimize Options.   (line  562)
48471 * fdevirtualize:                         Optimize Options.   (line  580)
48472 * fdiagnostics-show-caret:               Language Independent Options.
48473                                                              (line   40)
48474 * fdiagnostics-show-location:            Language Independent Options.
48475                                                              (line   20)
48476 * fdiagnostics-show-option:              Language Independent Options.
48477                                                              (line   34)
48478 * fdirectives-only:                      Preprocessor Options.
48479                                                              (line  473)
48480 * fdisable-:                             Debugging Options.  (line  475)
48481 * fdollars-in-identifiers <1>:           Interoperation.     (line  141)
48482 * fdollars-in-identifiers:               Preprocessor Options.
48483                                                              (line  495)
48484 * fdse:                                  Optimize Options.   (line  543)
48485 * fdump-class-hierarchy:                 Debugging Options.  (line  805)
48486 * fdump-final-insns:                     Debugging Options.  (line  194)
48487 * fdump-ipa:                             Debugging Options.  (line  813)
48488 * fdump-noaddr:                          Debugging Options.  (line  778)
48489 * fdump-passes:                          Debugging Options.  (line  831)
48490 * fdump-rtl-alignments:                  Debugging Options.  (line  565)
48491 * fdump-rtl-all:                         Debugging Options.  (line  751)
48492 * fdump-rtl-asmcons:                     Debugging Options.  (line  568)
48493 * fdump-rtl-auto_inc_dec:                Debugging Options.  (line  572)
48494 * fdump-rtl-barriers:                    Debugging Options.  (line  576)
48495 * fdump-rtl-bbpart:                      Debugging Options.  (line  579)
48496 * fdump-rtl-bbro:                        Debugging Options.  (line  582)
48497 * fdump-rtl-btl2:                        Debugging Options.  (line  586)
48498 * fdump-rtl-bypass:                      Debugging Options.  (line  590)
48499 * fdump-rtl-ce1:                         Debugging Options.  (line  601)
48500 * fdump-rtl-ce2:                         Debugging Options.  (line  601)
48501 * fdump-rtl-ce3:                         Debugging Options.  (line  601)
48502 * fdump-rtl-combine:                     Debugging Options.  (line  593)
48503 * fdump-rtl-compgotos:                   Debugging Options.  (line  596)
48504 * fdump-rtl-cprop_hardreg:               Debugging Options.  (line  605)
48505 * fdump-rtl-csa:                         Debugging Options.  (line  608)
48506 * fdump-rtl-cse1:                        Debugging Options.  (line  612)
48507 * fdump-rtl-cse2:                        Debugging Options.  (line  612)
48508 * fdump-rtl-dbr:                         Debugging Options.  (line  619)
48509 * fdump-rtl-dce:                         Debugging Options.  (line  616)
48510 * fdump-rtl-dce1:                        Debugging Options.  (line  623)
48511 * fdump-rtl-dce2:                        Debugging Options.  (line  623)
48512 * fdump-rtl-dfinish:                     Debugging Options.  (line  747)
48513 * fdump-rtl-dfinit:                      Debugging Options.  (line  747)
48514 * fdump-rtl-eh:                          Debugging Options.  (line  627)
48515 * fdump-rtl-eh_ranges:                   Debugging Options.  (line  630)
48516 * fdump-rtl-expand:                      Debugging Options.  (line  633)
48517 * fdump-rtl-fwprop1:                     Debugging Options.  (line  637)
48518 * fdump-rtl-fwprop2:                     Debugging Options.  (line  637)
48519 * fdump-rtl-gcse1:                       Debugging Options.  (line  642)
48520 * fdump-rtl-gcse2:                       Debugging Options.  (line  642)
48521 * fdump-rtl-init-regs:                   Debugging Options.  (line  646)
48522 * fdump-rtl-initvals:                    Debugging Options.  (line  649)
48523 * fdump-rtl-into_cfglayout:              Debugging Options.  (line  652)
48524 * fdump-rtl-ira:                         Debugging Options.  (line  655)
48525 * fdump-rtl-jump:                        Debugging Options.  (line  658)
48526 * fdump-rtl-loop2:                       Debugging Options.  (line  661)
48527 * fdump-rtl-mach:                        Debugging Options.  (line  665)
48528 * fdump-rtl-mode_sw:                     Debugging Options.  (line  669)
48529 * fdump-rtl-outof_cfglayout:             Debugging Options.  (line  675)
48530 * fdump-rtl-peephole2:                   Debugging Options.  (line  678)
48531 * fdump-rtl-postreload:                  Debugging Options.  (line  681)
48532 * fdump-rtl-pro_and_epilogue:            Debugging Options.  (line  684)
48533 * fdump-rtl-regclass:                    Debugging Options.  (line  747)
48534 * fdump-rtl-regmove:                     Debugging Options.  (line  687)
48535 * fdump-rtl-rnreg:                       Debugging Options.  (line  672)
48536 * fdump-rtl-sched1:                      Debugging Options.  (line  691)
48537 * fdump-rtl-sched2:                      Debugging Options.  (line  691)
48538 * fdump-rtl-see:                         Debugging Options.  (line  695)
48539 * fdump-rtl-seqabstr:                    Debugging Options.  (line  698)
48540 * fdump-rtl-shorten:                     Debugging Options.  (line  701)
48541 * fdump-rtl-sibling:                     Debugging Options.  (line  704)
48542 * fdump-rtl-sms:                         Debugging Options.  (line  717)
48543 * fdump-rtl-split1:                      Debugging Options.  (line  711)
48544 * fdump-rtl-split2:                      Debugging Options.  (line  711)
48545 * fdump-rtl-split3:                      Debugging Options.  (line  711)
48546 * fdump-rtl-split4:                      Debugging Options.  (line  711)
48547 * fdump-rtl-split5:                      Debugging Options.  (line  711)
48548 * fdump-rtl-stack:                       Debugging Options.  (line  721)
48549 * fdump-rtl-subreg1:                     Debugging Options.  (line  727)
48550 * fdump-rtl-subreg2:                     Debugging Options.  (line  727)
48551 * fdump-rtl-subregs_of_mode_finish:      Debugging Options.  (line  747)
48552 * fdump-rtl-subregs_of_mode_init:        Debugging Options.  (line  747)
48553 * fdump-rtl-unshare:                     Debugging Options.  (line  731)
48554 * fdump-rtl-vartrack:                    Debugging Options.  (line  734)
48555 * fdump-rtl-vregs:                       Debugging Options.  (line  737)
48556 * fdump-rtl-web:                         Debugging Options.  (line  740)
48557 * fdump-statistics:                      Debugging Options.  (line  835)
48558 * fdump-translation-unit:                Debugging Options.  (line  796)
48559 * fdump-tree:                            Debugging Options.  (line  847)
48560 * fdump-tree-alias:                      Debugging Options.  (line  986)
48561 * fdump-tree-all:                        Debugging Options.  (line 1076)
48562 * fdump-tree-ccp:                        Debugging Options.  (line  990)
48563 * fdump-tree-cfg:                        Debugging Options.  (line  974)
48564 * fdump-tree-ch:                         Debugging Options.  (line  978)
48565 * fdump-tree-copyprop:                   Debugging Options.  (line 1006)
48566 * fdump-tree-copyrename:                 Debugging Options.  (line 1052)
48567 * fdump-tree-dce:                        Debugging Options.  (line 1014)
48568 * fdump-tree-dom:                        Debugging Options.  (line 1032)
48569 * fdump-tree-dse:                        Debugging Options.  (line 1037)
48570 * fdump-tree-forwprop:                   Debugging Options.  (line 1047)
48571 * fdump-tree-fre:                        Debugging Options.  (line 1002)
48572 * fdump-tree-gimple:                     Debugging Options.  (line  969)
48573 * fdump-tree-mudflap:                    Debugging Options.  (line 1018)
48574 * fdump-tree-nrv:                        Debugging Options.  (line 1057)
48575 * fdump-tree-optimized:                  Debugging Options.  (line  966)
48576 * fdump-tree-original:                   Debugging Options.  (line  963)
48577 * fdump-tree-phiopt:                     Debugging Options.  (line 1042)
48578 * fdump-tree-pre:                        Debugging Options.  (line  998)
48579 * fdump-tree-sink:                       Debugging Options.  (line 1028)
48580 * fdump-tree-slp:                        Debugging Options.  (line 1067)
48581 * fdump-tree-sra:                        Debugging Options.  (line 1023)
48582 * fdump-tree-ssa:                        Debugging Options.  (line  982)
48583 * fdump-tree-store_copyprop:             Debugging Options.  (line 1010)
48584 * fdump-tree-storeccp:                   Debugging Options.  (line  994)
48585 * fdump-tree-vect:                       Debugging Options.  (line 1062)
48586 * fdump-tree-vrp:                        Debugging Options.  (line 1072)
48587 * fdump-unnumbered:                      Debugging Options.  (line  784)
48588 * fdump-unnumbered-links:                Debugging Options.  (line  790)
48589 * fdwarf2-cfi-asm:                       Debugging Options.  (line  324)
48590 * fearly-inlining:                       Optimize Options.   (line  276)
48591 * feliminate-dwarf2-dups:                Debugging Options.  (line  239)
48592 * feliminate-unused-debug-symbols:       Debugging Options.  (line   62)
48593 * feliminate-unused-debug-types:         Debugging Options.  (line 1392)
48594 * fenable-:                              Debugging Options.  (line  475)
48595 * fexceptions:                           Code Gen Options.   (line  108)
48596 * fexcess-precision:                     Optimize Options.   (line 1883)
48597 * fexec-charset:                         Preprocessor Options.
48598                                                              (line  554)
48599 * fexpensive-optimizations:              Optimize Options.   (line  587)
48600 * fext-numeric-literals:                 C++ Dialect Options.
48601                                                              (line  547)
48602 * fextended-identifiers:                 Preprocessor Options.
48603                                                              (line  498)
48604 * fextern-tls-init:                      C++ Dialect Options.
48605                                                              (line  122)
48606 * ffast-math:                            Optimize Options.   (line 1906)
48607 * ffat-lto-objects:                      Optimize Options.   (line 1774)
48608 * ffinite-math-only:                     Optimize Options.   (line 1980)
48609 * ffix-and-continue:                     Darwin Options.     (line  104)
48610 * ffixed:                                Code Gen Options.   (line  319)
48611 * ffloat-store <1>:                      Disappointments.    (line   77)
48612 * ffloat-store:                          Optimize Options.   (line 1869)
48613 * ffor-scope:                            C++ Dialect Options.
48614                                                              (line  143)
48615 * fforward-propagate:                    Optimize Options.   (line  185)
48616 * ffp-contract:                          Optimize Options.   (line  194)
48617 * ffreestanding <1>:                     Function Attributes.
48618                                                              (line  459)
48619 * ffreestanding <2>:                     Warning Options.    (line  255)
48620 * ffreestanding <3>:                     C Dialect Options.  (line  246)
48621 * ffreestanding:                         Standards.          (line   93)
48622 * ffriend-injection:                     C++ Dialect Options.
48623                                                              (line   92)
48624 * ffunction-sections:                    Optimize Options.   (line 2171)
48625 * fgcse:                                 Optimize Options.   (line  468)
48626 * fgcse-after-reload:                    Optimize Options.   (line  504)
48627 * fgcse-las:                             Optimize Options.   (line  497)
48628 * fgcse-lm:                              Optimize Options.   (line  479)
48629 * fgcse-sm:                              Optimize Options.   (line  488)
48630 * fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
48631                                                              (line   39)
48632 * fgnu-tm:                               C Dialect Options.  (line  264)
48633 * fgnu89-inline:                         C Dialect Options.  (line  147)
48634 * fgraphite-identity:                    Optimize Options.   (line 1074)
48635 * fhosted:                               C Dialect Options.  (line  239)
48636 * fif-conversion:                        Optimize Options.   (line  547)
48637 * fif-conversion2:                       Optimize Options.   (line  556)
48638 * filelist:                              Darwin Options.     (line  196)
48639 * findirect-data:                        Darwin Options.     (line  104)
48640 * findirect-inlining:                    Optimize Options.   (line  249)
48641 * finhibit-size-directive:               Code Gen Options.   (line  239)
48642 * finline-functions:                     Optimize Options.   (line  257)
48643 * finline-functions-called-once:         Optimize Options.   (line  268)
48644 * finline-limit:                         Optimize Options.   (line  293)
48645 * finline-small-functions:               Optimize Options.   (line  240)
48646 * finput-charset:                        Preprocessor Options.
48647                                                              (line  567)
48648 * finstrument-functions <1>:             Function Attributes.
48649                                                              (line  946)
48650 * finstrument-functions:                 Code Gen Options.   (line  375)
48651 * finstrument-functions-exclude-file-list: Code Gen Options. (line  411)
48652 * finstrument-functions-exclude-function-list: Code Gen Options.
48653                                                              (line  431)
48654 * fipa-cp:                               Optimize Options.   (line  913)
48655 * fipa-cp-clone:                         Optimize Options.   (line  921)
48656 * fipa-profile:                          Optimize Options.   (line  905)
48657 * fipa-pta:                              Optimize Options.   (line  899)
48658 * fipa-pure-const:                       Optimize Options.   (line  891)
48659 * fipa-reference:                        Optimize Options.   (line  895)
48660 * fipa-sra:                              Optimize Options.   (line  286)
48661 * fira-hoist-pressure:                   Optimize Options.   (line  643)
48662 * fira-loop-pressure:                    Optimize Options.   (line  650)
48663 * fira-verbose:                          Optimize Options.   (line  670)
48664 * fivopts:                               Optimize Options.   (line 1170)
48665 * fkeep-inline-functions <1>:            Inline.             (line   51)
48666 * fkeep-inline-functions:                Optimize Options.   (line  325)
48667 * fkeep-static-consts:                   Optimize Options.   (line  332)
48668 * flat_namespace:                        Darwin Options.     (line  196)
48669 * flax-vector-conversions:               C Dialect Options.  (line  320)
48670 * fleading-underscore:                   Code Gen Options.   (line  514)
48671 * floop-block:                           Optimize Options.   (line 1045)
48672 * floop-interchange:                     Optimize Options.   (line 1000)
48673 * floop-nest-optimize:                   Optimize Options.   (line 1082)
48674 * floop-parallelize-all:                 Optimize Options.   (line 1088)
48675 * floop-strip-mine:                      Optimize Options.   (line 1024)
48676 * flto:                                  Optimize Options.   (line 1565)
48677 * flto-partition:                        Optimize Options.   (line 1729)
48678 * fmax-errors:                           Warning Options.    (line   18)
48679 * fmem-report:                           Debugging Options.  (line  348)
48680 * fmem-report-wpa:                       Debugging Options.  (line  352)
48681 * fmerge-all-constants:                  Optimize Options.   (line  351)
48682 * fmerge-constants:                      Optimize Options.   (line  341)
48683 * fmerge-debug-strings:                  Debugging Options.  (line  313)
48684 * fmessage-length:                       Language Independent Options.
48685                                                              (line   14)
48686 * fmodulo-sched:                         Optimize Options.   (line  362)
48687 * fmodulo-sched-allow-regmoves:          Optimize Options.   (line  367)
48688 * fmove-loop-invariants:                 Optimize Options.   (line 2161)
48689 * fms-extensions <1>:                    Unnamed Fields.     (line   36)
48690 * fms-extensions <2>:                    C++ Dialect Options.
48691                                                              (line  177)
48692 * fms-extensions:                        C Dialect Options.  (line  279)
48693 * fmudflap:                              Optimize Options.   (line  407)
48694 * fmudflapir:                            Optimize Options.   (line  407)
48695 * fmudflapth:                            Optimize Options.   (line  407)
48696 * fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
48697                                                              (line   43)
48698 * fno-access-control:                    C++ Dialect Options.
48699                                                              (line   51)
48700 * fno-asm:                               C Dialect Options.  (line  191)
48701 * fno-branch-count-reg:                  Optimize Options.   (line  374)
48702 * fno-builtin <1>:                       Other Builtins.     (line   14)
48703 * fno-builtin <2>:                       Function Attributes.
48704                                                              (line  459)
48705 * fno-builtin <3>:                       Warning Options.    (line  255)
48706 * fno-builtin:                           C Dialect Options.  (line  205)
48707 * fno-canonical-system-headers:          Preprocessor Options.
48708                                                              (line  503)
48709 * fno-common <1>:                        Variable Attributes.
48710                                                              (line  105)
48711 * fno-common:                            Code Gen Options.   (line  216)
48712 * fno-compare-debug:                     Debugging Options.  (line  200)
48713 * fno-debug-types-section:               Debugging Options.  (line   74)
48714 * fno-default-inline <1>:                Inline.             (line   71)
48715 * fno-default-inline <2>:                Optimize Options.   (line  170)
48716 * fno-default-inline:                    C++ Dialect Options.
48717                                                              (line  356)
48718 * fno-defer-pop:                         Optimize Options.   (line  177)
48719 * fno-diagnostics-show-caret:            Language Independent Options.
48720                                                              (line   40)
48721 * fno-diagnostics-show-option:           Language Independent Options.
48722                                                              (line   34)
48723 * fno-dwarf2-cfi-asm:                    Debugging Options.  (line  324)
48724 * fno-elide-constructors:                C++ Dialect Options.
48725                                                              (line  105)
48726 * fno-eliminate-unused-debug-types:      Debugging Options.  (line 1392)
48727 * fno-enforce-eh-specs:                  C++ Dialect Options.
48728                                                              (line  111)
48729 * fno-ext-numeric-literals:              C++ Dialect Options.
48730                                                              (line  547)
48731 * fno-extern-tls-init:                   C++ Dialect Options.
48732                                                              (line  122)
48733 * fno-for-scope:                         C++ Dialect Options.
48734                                                              (line  143)
48735 * fno-function-cse:                      Optimize Options.   (line  384)
48736 * fno-gnu-keywords:                      C++ Dialect Options.
48737                                                              (line  155)
48738 * fno-guess-branch-probability:          Optimize Options.   (line 1334)
48739 * fno-ident:                             Code Gen Options.   (line  236)
48740 * fno-implement-inlines <1>:             C++ Interface.      (line   75)
48741 * fno-implement-inlines:                 C++ Dialect Options.
48742                                                              (line  172)
48743 * fno-implicit-inline-templates:         C++ Dialect Options.
48744                                                              (line  166)
48745 * fno-implicit-templates <1>:            Template Instantiation.
48746                                                              (line   78)
48747 * fno-implicit-templates:                C++ Dialect Options.
48748                                                              (line  160)
48749 * fno-inline:                            Optimize Options.   (line  232)
48750 * fno-ira-share-save-slots:              Optimize Options.   (line  658)
48751 * fno-ira-share-spill-slots:             Optimize Options.   (line  664)
48752 * fno-jump-tables:                       Code Gen Options.   (line  311)
48753 * fno-math-errno:                        Optimize Options.   (line 1920)
48754 * fno-merge-debug-strings:               Debugging Options.  (line  313)
48755 * fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
48756                                                              (line   49)
48757 * fno-nonansi-builtins:                  C++ Dialect Options.
48758                                                              (line  182)
48759 * fno-operator-names:                    C++ Dialect Options.
48760                                                              (line  198)
48761 * fno-optional-diags:                    C++ Dialect Options.
48762                                                              (line  202)
48763 * fno-peephole:                          Optimize Options.   (line 1325)
48764 * fno-peephole2:                         Optimize Options.   (line 1325)
48765 * fno-pretty-templates:                  C++ Dialect Options.
48766                                                              (line  212)
48767 * fno-rtti:                              C++ Dialect Options.
48768                                                              (line  229)
48769 * fno-sched-interblock:                  Optimize Options.   (line  702)
48770 * fno-sched-spec:                        Optimize Options.   (line  707)
48771 * fno-set-stack-executable:              i386 and x86-64 Windows Options.
48772                                                              (line   46)
48773 * fno-show-column:                       Preprocessor Options.
48774                                                              (line  592)
48775 * fno-signed-bitfields:                  C Dialect Options.  (line  353)
48776 * fno-signed-zeros:                      Optimize Options.   (line 1992)
48777 * fno-stack-limit:                       Code Gen Options.   (line  482)
48778 * fno-threadsafe-statics:                C++ Dialect Options.
48779                                                              (line  266)
48780 * fno-toplevel-reorder:                  Optimize Options.   (line 1531)
48781 * fno-trapping-math:                     Optimize Options.   (line 2002)
48782 * fno-unsigned-bitfields:                C Dialect Options.  (line  353)
48783 * fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
48784                                                              (line  279)
48785 * fno-var-tracking-assignments:          Debugging Options.  (line 1300)
48786 * fno-var-tracking-assignments-toggle:   Debugging Options.  (line 1309)
48787 * fno-weak:                              C++ Dialect Options.
48788                                                              (line  341)
48789 * fno-working-directory:                 Preprocessor Options.
48790                                                              (line  577)
48791 * fno-writable-relocated-rdata:          i386 and x86-64 Windows Options.
48792                                                              (line   53)
48793 * fno-zero-initialized-in-bss:           Optimize Options.   (line  395)
48794 * fnon-call-exceptions:                  Code Gen Options.   (line  122)
48795 * fnothrow-opt:                          C++ Dialect Options.
48796                                                              (line  187)
48797 * fobjc-abi-version:                     Objective-C and Objective-C++ Dialect Options.
48798                                                              (line   56)
48799 * fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
48800                                                              (line   67)
48801 * fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
48802                                                              (line   92)
48803 * fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
48804                                                              (line   96)
48805 * fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
48806                                                              (line  105)
48807 * fobjc-nilcheck:                        Objective-C and Objective-C++ Dialect Options.
48808                                                              (line  111)
48809 * fobjc-std:                             Objective-C and Objective-C++ Dialect Options.
48810                                                              (line  120)
48811 * fomit-frame-pointer:                   Optimize Options.   (line  205)
48812 * fopenmp:                               C Dialect Options.  (line  256)
48813 * fopt-info:                             Debugging Options.  (line 1082)
48814 * foptimize-register-move:               Optimize Options.   (line  602)
48815 * foptimize-sibling-calls:               Optimize Options.   (line  227)
48816 * force_cpusubtype_ALL:                  Darwin Options.     (line  135)
48817 * force_flat_namespace:                  Darwin Options.     (line  196)
48818 * fpack-struct:                          Code Gen Options.   (line  362)
48819 * fpartial-inlining:                     Optimize Options.   (line 1300)
48820 * fpcc-struct-return <1>:                Incompatibilities.  (line  170)
48821 * fpcc-struct-return:                    Code Gen Options.   (line  152)
48822 * fpch-deps:                             Preprocessor Options.
48823                                                              (line  294)
48824 * fpch-preprocess:                       Preprocessor Options.
48825                                                              (line  302)
48826 * fpeel-loops:                           Optimize Options.   (line 2153)
48827 * fpermissive:                           C++ Dialect Options.
48828                                                              (line  207)
48829 * fPIC:                                  Code Gen Options.   (line  288)
48830 * fpic:                                  Code Gen Options.   (line  267)
48831 * fPIE:                                  Code Gen Options.   (line  301)
48832 * fpie:                                  Code Gen Options.   (line  301)
48833 * fplan9-extensions:                     Unnamed Fields.     (line   44)
48834 * fpost-ipa-mem-report:                  Debugging Options.  (line  358)
48835 * fpre-ipa-mem-report:                   Debugging Options.  (line  356)
48836 * fpredictive-commoning:                 Optimize Options.   (line 1307)
48837 * fprefetch-loop-arrays:                 Optimize Options.   (line 1314)
48838 * fpreprocessed:                         Preprocessor Options.
48839                                                              (line  507)
48840 * fprofile-arcs <1>:                     Other Builtins.     (line  257)
48841 * fprofile-arcs:                         Debugging Options.  (line  397)
48842 * fprofile-correction:                   Optimize Options.   (line 1819)
48843 * fprofile-dir:                          Optimize Options.   (line 1826)
48844 * fprofile-generate:                     Optimize Options.   (line 1836)
48845 * fprofile-report:                       Debugging Options.  (line  362)
48846 * fprofile-use:                          Optimize Options.   (line 1849)
48847 * fprofile-values:                       Optimize Options.   (line 2101)
48848 * fpu:                                   RX Options.         (line   17)
48849 * frandom-seed:                          Debugging Options.  (line 1194)
48850 * freciprocal-math:                      Optimize Options.   (line 1971)
48851 * frecord-gcc-switches:                  Code Gen Options.   (line  255)
48852 * free:                                  Optimize Options.   (line  593)
48853 * freg-struct-return:                    Code Gen Options.   (line  170)
48854 * fregmove:                              Optimize Options.   (line  602)
48855 * frename-registers:                     Optimize Options.   (line 2120)
48856 * freorder-blocks:                       Optimize Options.   (line 1351)
48857 * freorder-blocks-and-partition:         Optimize Options.   (line 1357)
48858 * freorder-functions:                    Optimize Options.   (line 1368)
48859 * freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
48860                                                              (line  131)
48861 * frepo <1>:                             Template Instantiation.
48862                                                              (line   54)
48863 * frepo:                                 C++ Dialect Options.
48864                                                              (line  224)
48865 * frerun-cse-after-loop:                 Optimize Options.   (line  462)
48866 * freschedule-modulo-scheduled-loops:    Optimize Options.   (line  801)
48867 * frounding-math:                        Optimize Options.   (line 2017)
48868 * fsched-critical-path-heuristic:        Optimize Options.   (line  767)
48869 * fsched-dep-count-heuristic:            Optimize Options.   (line  794)
48870 * fsched-group-heuristic:                Optimize Options.   (line  761)
48871 * fsched-last-insn-heuristic:            Optimize Options.   (line  787)
48872 * fsched-pressure:                       Optimize Options.   (line  712)
48873 * fsched-rank-heuristic:                 Optimize Options.   (line  780)
48874 * fsched-spec-insn-heuristic:            Optimize Options.   (line  773)
48875 * fsched-spec-load:                      Optimize Options.   (line  721)
48876 * fsched-spec-load-dangerous:            Optimize Options.   (line  726)
48877 * fsched-stalled-insns:                  Optimize Options.   (line  732)
48878 * fsched-stalled-insns-dep:              Optimize Options.   (line  742)
48879 * fsched-verbose:                        Debugging Options.  (line 1204)
48880 * fsched2-use-superblocks:               Optimize Options.   (line  751)
48881 * fschedule-insns:                       Optimize Options.   (line  683)
48882 * fschedule-insns2:                      Optimize Options.   (line  693)
48883 * fsection-anchors:                      Optimize Options.   (line 2216)
48884 * fsel-sched-pipelining:                 Optimize Options.   (line  814)
48885 * fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  819)
48886 * fselective-scheduling:                 Optimize Options.   (line  806)
48887 * fselective-scheduling2:                Optimize Options.   (line  810)
48888 * fshort-double:                         Code Gen Options.   (line  198)
48889 * fshort-enums <1>:                      Non-bugs.           (line   42)
48890 * fshort-enums <2>:                      Type Attributes.    (line  113)
48891 * fshort-enums <3>:                      Structures unions enumerations and bit-fields implementation.
48892                                                              (line   43)
48893 * fshort-enums:                          Code Gen Options.   (line  188)
48894 * fshort-wchar:                          Code Gen Options.   (line  206)
48895 * fshrink-wrap:                          Optimize Options.   (line  824)
48896 * fsignaling-nans:                       Optimize Options.   (line 2037)
48897 * fsigned-bitfields <1>:                 Non-bugs.           (line   57)
48898 * fsigned-bitfields:                     C Dialect Options.  (line  353)
48899 * fsigned-char <1>:                      Characters implementation.
48900                                                              (line   31)
48901 * fsigned-char:                          C Dialect Options.  (line  343)
48902 * fsingle-precision-constant:            Optimize Options.   (line 2052)
48903 * fsplit-ivs-in-unroller:                Optimize Options.   (line 1281)
48904 * fsplit-stack <1>:                      Function Attributes.
48905                                                              (line  951)
48906 * fsplit-stack:                          Code Gen Options.   (line  496)
48907 * fsplit-wide-types:                     Optimize Options.   (line  437)
48908 * fstack-check:                          Code Gen Options.   (line  443)
48909 * fstack-limit-register:                 Code Gen Options.   (line  482)
48910 * fstack-limit-symbol:                   Code Gen Options.   (line  482)
48911 * fstack-protector:                      Optimize Options.   (line 2204)
48912 * fstack-protector-all:                  Optimize Options.   (line 2213)
48913 * fstack-usage:                          Debugging Options.  (line  366)
48914 * fstack_reuse:                          Code Gen Options.   (line   21)
48915 * fstats:                                C++ Dialect Options.
48916                                                              (line  239)
48917 * fstrict-aliasing:                      Optimize Options.   (line 1381)
48918 * fstrict-enums:                         C++ Dialect Options.
48919                                                              (line  244)
48920 * fstrict-overflow:                      Optimize Options.   (line 1427)
48921 * fstrict-volatile-bitfields:            Code Gen Options.   (line  599)
48922 * fsync-libcalls:                        Code Gen Options.   (line  628)
48923 * fsyntax-only:                          Warning Options.    (line   14)
48924 * ftabstop:                              Preprocessor Options.
48925                                                              (line  520)
48926 * ftemplate-backtrace-limit:             C++ Dialect Options.
48927                                                              (line  253)
48928 * ftemplate-depth:                       C++ Dialect Options.
48929                                                              (line  257)
48930 * ftest-coverage:                        Debugging Options.  (line  453)
48931 * fthread-jumps:                         Optimize Options.   (line  428)
48932 * ftime-report:                          Debugging Options.  (line  344)
48933 * ftls-model:                            Code Gen Options.   (line  525)
48934 * ftracer:                               Optimize Options.   (line 1264)
48935 * ftrack-macro-expansion:                Preprocessor Options.
48936                                                              (line  536)
48937 * ftrapv:                                Code Gen Options.   (line   96)
48938 * ftree-bit-ccp:                         Optimize Options.   (line  935)
48939 * ftree-builtin-call-dce:                Optimize Options.   (line  963)
48940 * ftree-ccp:                             Optimize Options.   (line  941)
48941 * ftree-ch:                              Optimize Options.   (line  983)
48942 * ftree-copy-prop:                       Optimize Options.   (line  886)
48943 * ftree-copyrename:                      Optimize Options.   (line 1194)
48944 * ftree-dce:                             Optimize Options.   (line  959)
48945 * ftree-dominator-opts:                  Optimize Options.   (line  969)
48946 * ftree-dse:                             Optimize Options.   (line  976)
48947 * ftree-forwprop:                        Optimize Options.   (line  865)
48948 * ftree-fre:                             Optimize Options.   (line  869)
48949 * ftree-loop-im:                         Optimize Options.   (line 1155)
48950 * ftree-loop-ivcanon:                    Optimize Options.   (line 1164)
48951 * ftree-loop-linear:                     Optimize Options.   (line  994)
48952 * ftree-loop-optimize:                   Optimize Options.   (line  990)
48953 * ftree-parallelize-loops:               Optimize Options.   (line 1175)
48954 * ftree-partial-pre:                     Optimize Options.   (line  861)
48955 * ftree-phiprop:                         Optimize Options.   (line  876)
48956 * ftree-pre:                             Optimize Options.   (line  857)
48957 * ftree-pta:                             Optimize Options.   (line 1184)
48958 * ftree-reassoc:                         Optimize Options.   (line  853)
48959 * ftree-sink:                            Optimize Options.   (line  931)
48960 * ftree-slp-vectorize:                   Optimize Options.   (line 1238)
48961 * ftree-slsr:                            Optimize Options.   (line 1228)
48962 * ftree-sra:                             Optimize Options.   (line 1188)
48963 * ftree-ter:                             Optimize Options.   (line 1220)
48964 * ftree-vect-loop-version:               Optimize Options.   (line 1242)
48965 * ftree-vectorize:                       Optimize Options.   (line 1234)
48966 * ftree-vectorizer-verbose:              Debugging Options.  (line 1177)
48967 * ftree-vrp:                             Optimize Options.   (line 1255)
48968 * funit-at-a-time:                       Optimize Options.   (line 1524)
48969 * funroll-all-loops:                     Optimize Options.   (line 1275)
48970 * funroll-loops:                         Optimize Options.   (line 1269)
48971 * funsafe-loop-optimizations:            Optimize Options.   (line  518)
48972 * funsafe-math-optimizations:            Optimize Options.   (line 1938)
48973 * funsigned-bitfields <1>:               Non-bugs.           (line   57)
48974 * funsigned-bitfields <2>:               Structures unions enumerations and bit-fields implementation.
48975                                                              (line   17)
48976 * funsigned-bitfields:                   C Dialect Options.  (line  353)
48977 * funsigned-char <1>:                    Characters implementation.
48978                                                              (line   31)
48979 * funsigned-char:                        C Dialect Options.  (line  325)
48980 * funswitch-loops:                       Optimize Options.   (line 2165)
48981 * funwind-tables:                        Code Gen Options.   (line  139)
48982 * fuse-cxa-atexit:                       C++ Dialect Options.
48983                                                              (line  272)
48984 * fvar-tracking:                         Debugging Options.  (line 1290)
48985 * fvar-tracking-assignments:             Debugging Options.  (line 1300)
48986 * fvar-tracking-assignments-toggle:      Debugging Options.  (line 1309)
48987 * fvariable-expansion-in-unroller:       Optimize Options.   (line 1295)
48988 * fvect-cost-model:                      Optimize Options.   (line 1251)
48989 * fverbose-asm:                          Code Gen Options.   (line  246)
48990 * fvisibility:                           Code Gen Options.   (line  533)
48991 * fvisibility-inlines-hidden:            C++ Dialect Options.
48992                                                              (line  284)
48993 * fvisibility-ms-compat:                 C++ Dialect Options.
48994                                                              (line  312)
48995 * fvpt:                                  Optimize Options.   (line 2110)
48996 * fweb:                                  Optimize Options.   (line 1543)
48997 * fwhole-program:                        Optimize Options.   (line 1554)
48998 * fwide-exec-charset:                    Preprocessor Options.
48999                                                              (line  559)
49000 * fworking-directory:                    Preprocessor Options.
49001                                                              (line  577)
49002 * fwrapv:                                Code Gen Options.   (line  100)
49003 * fzero-link:                            Objective-C and Objective-C++ Dialect Options.
49004                                                              (line  141)
49005 * G <1>:                                 System V Options.   (line   10)
49006 * G <2>:                                 RS/6000 and PowerPC Options.
49007                                                              (line  662)
49008 * G <3>:                                 MIPS Options.       (line  330)
49009 * G:                                     M32R/D Options.     (line   57)
49010 * g:                                     Debugging Options.  (line   10)
49011 * gcoff:                                 Debugging Options.  (line   89)
49012 * gdwarf-VERSION:                        Debugging Options.  (line  107)
49013 * gen-decls:                             Objective-C and Objective-C++ Dialect Options.
49014                                                              (line  153)
49015 * gfull:                                 Darwin Options.     (line   69)
49016 * ggdb:                                  Debugging Options.  (line   45)
49017 * gno-record-gcc-switches:               Debugging Options.  (line  127)
49018 * gno-strict-dwarf:                      Debugging Options.  (line  137)
49019 * gpubnames:                             Debugging Options.  (line   51)
49020 * grecord-gcc-switches:                  Debugging Options.  (line  118)
49021 * gsplit-dwarf:                          Debugging Options.  (line   38)
49022 * gstabs:                                Debugging Options.  (line   54)
49023 * gstabs+:                               Debugging Options.  (line   83)
49024 * gstrict-dwarf:                         Debugging Options.  (line  131)
49025 * gtoggle:                               Debugging Options.  (line  174)
49026 * gused:                                 Darwin Options.     (line   64)
49027 * gvms:                                  Debugging Options.  (line  141)
49028 * gxcoff:                                Debugging Options.  (line   94)
49029 * gxcoff+:                               Debugging Options.  (line   99)
49030 * H:                                     Preprocessor Options.
49031                                                              (line  710)
49032 * headerpad_max_install_names:           Darwin Options.     (line  196)
49033 * help <1>:                              Preprocessor Options.
49034                                                              (line  702)
49035 * help:                                  Overall Options.    (line  221)
49036 * hoist-adjacent-loads:                  Optimize Options.   (line  880)
49037 * I <1>:                                 Directory Options.  (line   10)
49038 * I:                                     Preprocessor Options.
49039                                                              (line   77)
49040 * I- <1>:                                Directory Options.  (line  119)
49041 * I-:                                    Preprocessor Options.
49042                                                              (line  387)
49043 * idirafter:                             Preprocessor Options.
49044                                                              (line  429)
49045 * iframework:                            Darwin Options.     (line   57)
49046 * imacros:                               Preprocessor Options.
49047                                                              (line  420)
49048 * image_base:                            Darwin Options.     (line  196)
49049 * imultilib:                             Preprocessor Options.
49050                                                              (line  454)
49051 * include:                               Preprocessor Options.
49052                                                              (line  409)
49053 * init:                                  Darwin Options.     (line  196)
49054 * install_name:                          Darwin Options.     (line  196)
49055 * iprefix:                               Preprocessor Options.
49056                                                              (line  436)
49057 * iquote <1>:                            Directory Options.  (line   36)
49058 * iquote:                                Preprocessor Options.
49059                                                              (line  466)
49060 * isysroot:                              Preprocessor Options.
49061                                                              (line  448)
49062 * isystem:                               Preprocessor Options.
49063                                                              (line  458)
49064 * iwithprefix:                           Preprocessor Options.
49065                                                              (line  442)
49066 * iwithprefixbefore:                     Preprocessor Options.
49067                                                              (line  442)
49068 * keep_private_externs:                  Darwin Options.     (line  196)
49069 * L:                                     Directory Options.  (line   42)
49070 * l:                                     Link Options.       (line   26)
49071 * lobjc:                                 Link Options.       (line   53)
49072 * m:                                     RS/6000 and PowerPC Options.
49073                                                              (line  515)
49074 * M:                                     Preprocessor Options.
49075                                                              (line  185)
49076 * m1:                                    SH Options.         (line    9)
49077 * m10:                                   PDP-11 Options.     (line   29)
49078 * m128bit-long-double:                   i386 and x86-64 Options.
49079                                                              (line  336)
49080 * m16-bit:                               CRIS Options.       (line   64)
49081 * m1reg-:                                Adapteva Epiphany Options.
49082                                                              (line  132)
49083 * m2:                                    SH Options.         (line   12)
49084 * m210:                                  MCore Options.      (line   43)
49085 * m2a:                                   SH Options.         (line   30)
49086 * m2a-nofpu:                             SH Options.         (line   18)
49087 * m2a-single:                            SH Options.         (line   26)
49088 * m2a-single-only:                       SH Options.         (line   22)
49089 * m3:                                    SH Options.         (line   34)
49090 * m31:                                   S/390 and zSeries Options.
49091                                                              (line   87)
49092 * m32 <1>:                               TILEPro Options.    (line   13)
49093 * m32 <2>:                               TILE-Gx Options.    (line   23)
49094 * m32 <3>:                               SPARC Options.      (line  245)
49095 * m32 <4>:                               RS/6000 and PowerPC Options.
49096                                                              (line  207)
49097 * m32:                                   i386 and x86-64 Options.
49098                                                              (line  835)
49099 * m32-bit:                               CRIS Options.       (line   64)
49100 * m32bit-doubles:                        RX Options.         (line   10)
49101 * m32r:                                  M32R/D Options.     (line   15)
49102 * m32r2:                                 M32R/D Options.     (line    9)
49103 * m32rx:                                 M32R/D Options.     (line   12)
49104 * m340:                                  MCore Options.      (line   43)
49105 * m3dnow:                                i386 and x86-64 Options.
49106                                                              (line  565)
49107 * m3e:                                   SH Options.         (line   37)
49108 * m4:                                    SH Options.         (line   51)
49109 * m4-nofpu:                              SH Options.         (line   40)
49110 * m4-single:                             SH Options.         (line   47)
49111 * m4-single-only:                        SH Options.         (line   43)
49112 * m40:                                   PDP-11 Options.     (line   23)
49113 * m45:                                   PDP-11 Options.     (line   26)
49114 * m4a:                                   SH Options.         (line   66)
49115 * m4a-nofpu:                             SH Options.         (line   54)
49116 * m4a-single:                            SH Options.         (line   62)
49117 * m4a-single-only:                       SH Options.         (line   58)
49118 * m4al:                                  SH Options.         (line   69)
49119 * m4byte-functions:                      MCore Options.      (line   27)
49120 * m5200:                                 M680x0 Options.     (line  147)
49121 * m5206e:                                M680x0 Options.     (line  156)
49122 * m528x:                                 M680x0 Options.     (line  160)
49123 * m5307:                                 M680x0 Options.     (line  164)
49124 * m5407:                                 M680x0 Options.     (line  168)
49125 * m64 <1>:                               TILE-Gx Options.    (line   23)
49126 * m64 <2>:                               SPARC Options.      (line  245)
49127 * m64 <3>:                               S/390 and zSeries Options.
49128                                                              (line   87)
49129 * m64 <4>:                               RS/6000 and PowerPC Options.
49130                                                              (line  207)
49131 * m64:                                   i386 and x86-64 Options.
49132                                                              (line  835)
49133 * m64bit-doubles:                        RX Options.         (line   10)
49134 * m68000:                                M680x0 Options.     (line   95)
49135 * m68010:                                M680x0 Options.     (line  103)
49136 * m68020:                                M680x0 Options.     (line  109)
49137 * m68020-40:                             M680x0 Options.     (line  178)
49138 * m68020-60:                             M680x0 Options.     (line  187)
49139 * m68030:                                M680x0 Options.     (line  114)
49140 * m68040:                                M680x0 Options.     (line  119)
49141 * m68060:                                M680x0 Options.     (line  128)
49142 * m68881:                                M680x0 Options.     (line  197)
49143 * m8-bit:                                CRIS Options.       (line   64)
49144 * m8byte-align:                          V850 Options.       (line  170)
49145 * m96bit-long-double:                    i386 and x86-64 Options.
49146                                                              (line  336)
49147 * mabi <1>:                              RS/6000 and PowerPC Options.
49148                                                              (line  542)
49149 * mabi <2>:                              i386 and x86-64 Options.
49150                                                              (line  715)
49151 * mabi:                                  ARM Options.        (line   10)
49152 * mabi=32:                               MIPS Options.       (line  131)
49153 * mabi=64:                               MIPS Options.       (line  131)
49154 * mabi=eabi:                             MIPS Options.       (line  131)
49155 * mabi=gnu:                              MMIX Options.       (line   20)
49156 * mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
49157                                                              (line  555)
49158 * mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
49159                                                              (line  559)
49160 * mabi=mmixware:                         MMIX Options.       (line   20)
49161 * mabi=n32:                              MIPS Options.       (line  131)
49162 * mabi=no-spe:                           RS/6000 and PowerPC Options.
49163                                                              (line  552)
49164 * mabi=o64:                              MIPS Options.       (line  131)
49165 * mabi=spe:                              RS/6000 and PowerPC Options.
49166                                                              (line  547)
49167 * mabicalls:                             MIPS Options.       (line  155)
49168 * mabort-on-noreturn:                    ARM Options.        (line  183)
49169 * mabsdiff:                              MeP Options.        (line    7)
49170 * mabshi:                                PDP-11 Options.     (line   55)
49171 * mac0:                                  PDP-11 Options.     (line   16)
49172 * macc-4:                                FRV Options.        (line  113)
49173 * macc-8:                                FRV Options.        (line  116)
49174 * maccumulate-args:                      AVR Options.        (line  139)
49175 * maccumulate-outgoing-args <1>:         SH Options.         (line  330)
49176 * maccumulate-outgoing-args:             i386 and x86-64 Options.
49177                                                              (line  738)
49178 * maddress-mode=long:                    i386 and x86-64 Options.
49179                                                              (line  878)
49180 * maddress-mode=short:                   i386 and x86-64 Options.
49181                                                              (line  883)
49182 * maddress-space-conversion:             SPU Options.        (line   63)
49183 * mads:                                  RS/6000 and PowerPC Options.
49184                                                              (line  585)
49185 * maix-struct-return:                    RS/6000 and PowerPC Options.
49186                                                              (line  535)
49187 * maix32:                                RS/6000 and PowerPC Options.
49188                                                              (line  245)
49189 * maix64:                                RS/6000 and PowerPC Options.
49190                                                              (line  245)
49191 * malign-300:                            H8/300 Options.     (line   41)
49192 * malign-double:                         i386 and x86-64 Options.
49193                                                              (line  320)
49194 * malign-int:                            M680x0 Options.     (line  267)
49195 * malign-labels:                         FRV Options.        (line  104)
49196 * malign-loops:                          M32R/D Options.     (line   73)
49197 * malign-natural:                        RS/6000 and PowerPC Options.
49198                                                              (line  284)
49199 * malign-power:                          RS/6000 and PowerPC Options.
49200                                                              (line  284)
49201 * mall-opts:                             MeP Options.        (line   11)
49202 * malloc-cc:                             FRV Options.        (line   25)
49203 * maltivec:                              RS/6000 and PowerPC Options.
49204                                                              (line  132)
49205 * mam33:                                 MN10300 Options.    (line   17)
49206 * mam33-2:                               MN10300 Options.    (line   24)
49207 * mam34:                                 MN10300 Options.    (line   27)
49208 * mandroid:                              GNU/Linux Options.  (line   21)
49209 * mapcs:                                 ARM Options.        (line   22)
49210 * mapcs-frame:                           ARM Options.        (line   14)
49211 * mapp-regs <1>:                         V850 Options.       (line  181)
49212 * mapp-regs:                             SPARC Options.      (line   10)
49213 * march <1>:                             S/390 and zSeries Options.
49214                                                              (line  116)
49215 * march <2>:                             MIPS Options.       (line   14)
49216 * march <3>:                             M680x0 Options.     (line   12)
49217 * march <4>:                             i386 and x86-64 Options.
49218                                                              (line   10)
49219 * march <5>:                             HPPA Options.       (line    9)
49220 * march <6>:                             CRIS Options.       (line   10)
49221 * march <7>:                             C6X Options.        (line    7)
49222 * march <8>:                             ARM Options.        (line  128)
49223 * march:                                 AArch64 Options.    (line   55)
49224 * marm:                                  ARM Options.        (line  244)
49225 * mas100-syntax:                         RX Options.         (line   76)
49226 * masm=DIALECT:                          i386 and x86-64 Options.
49227                                                              (line  275)
49228 * matomic-model=MODEL:                   SH Options.         (line  144)
49229 * matomic-updates:                       SPU Options.        (line   78)
49230 * mauto-pic:                             IA-64 Options.      (line   50)
49231 * maverage:                              MeP Options.        (line   16)
49232 * mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
49233                                                              (line  354)
49234 * max-vect-align:                        Adapteva Epiphany Options.
49235                                                              (line  120)
49236 * mb:                                    SH Options.         (line   74)
49237 * mbackchain:                            S/390 and zSeries Options.
49238                                                              (line   35)
49239 * mbarrel-shift-enabled:                 LM32 Options.       (line    9)
49240 * mbase-addresses:                       MMIX Options.       (line   54)
49241 * mbased=:                               MeP Options.        (line   20)
49242 * mbcopy:                                PDP-11 Options.     (line   36)
49243 * mbcopy-builtin:                        PDP-11 Options.     (line   32)
49244 * mbig:                                  RS/6000 and PowerPC Options.
49245                                                              (line  434)
49246 * mbig-endian <1>:                       RS/6000 and PowerPC Options.
49247                                                              (line  434)
49248 * mbig-endian <2>:                       MicroBlaze Options. (line   57)
49249 * mbig-endian <3>:                       MCore Options.      (line   39)
49250 * mbig-endian <4>:                       IA-64 Options.      (line    9)
49251 * mbig-endian <5>:                       C6X Options.        (line   13)
49252 * mbig-endian <6>:                       ARM Options.        (line   62)
49253 * mbig-endian:                           AArch64 Options.    (line    9)
49254 * mbig-endian-data:                      RX Options.         (line   42)
49255 * mbig-switch <1>:                       V850 Options.       (line  176)
49256 * mbig-switch:                           HPPA Options.       (line   23)
49257 * mbigtable:                             SH Options.         (line   89)
49258 * mbionic:                               GNU/Linux Options.  (line   17)
49259 * mbit-align:                            RS/6000 and PowerPC Options.
49260                                                              (line  386)
49261 * mbit-ops:                              CR16 Options.       (line   25)
49262 * mbitfield:                             M680x0 Options.     (line  235)
49263 * mbitops <1>:                           SH Options.         (line   93)
49264 * mbitops:                               MeP Options.        (line   26)
49265 * mblock-move-inline-limit:              RS/6000 and PowerPC Options.
49266                                                              (line  656)
49267 * mbranch-cheap:                         PDP-11 Options.     (line   65)
49268 * mbranch-cost <1>:                      MIPS Options.       (line  635)
49269 * mbranch-cost <2>:                      AVR Options.        (line  154)
49270 * mbranch-cost:                          Adapteva Epiphany Options.
49271                                                              (line   18)
49272 * mbranch-cost=NUM:                      SH Options.         (line  396)
49273 * mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
49274 * mbranch-expensive:                     PDP-11 Options.     (line   61)
49275 * mbranch-hints:                         SPU Options.        (line   27)
49276 * mbranch-likely:                        MIPS Options.       (line  642)
49277 * mbranch-predict:                       MMIX Options.       (line   49)
49278 * mbss-plt:                              RS/6000 and PowerPC Options.
49279                                                              (line  155)
49280 * mbuild-constants:                      DEC Alpha Options.  (line  141)
49281 * mbwx:                                  DEC Alpha Options.  (line  163)
49282 * mc68000:                               M680x0 Options.     (line   95)
49283 * mc68020:                               M680x0 Options.     (line  109)
49284 * mc=:                                   MeP Options.        (line   31)
49285 * mcache-size:                           SPU Options.        (line   70)
49286 * mcall-eabi:                            RS/6000 and PowerPC Options.
49287                                                              (line  509)
49288 * mcall-freebsd:                         RS/6000 and PowerPC Options.
49289                                                              (line  523)
49290 * mcall-linux:                           RS/6000 and PowerPC Options.
49291                                                              (line  519)
49292 * mcall-netbsd:                          RS/6000 and PowerPC Options.
49293                                                              (line  527)
49294 * mcall-prologues:                       AVR Options.        (line  159)
49295 * mcall-sysv:                            RS/6000 and PowerPC Options.
49296                                                              (line  501)
49297 * mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
49298                                                              (line  509)
49299 * mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
49300                                                              (line  512)
49301 * mcallee-super-interworking:            ARM Options.        (line  262)
49302 * mcaller-super-interworking:            ARM Options.        (line  269)
49303 * mcallgraph-data:                       MCore Options.      (line   31)
49304 * mcbcond:                               SPARC Options.      (line  216)
49305 * mcbranchdi:                            SH Options.         (line  411)
49306 * mcc-init:                              CRIS Options.       (line   41)
49307 * mcfv4e:                                M680x0 Options.     (line  172)
49308 * mcheck-zero-division:                  MIPS Options.       (line  441)
49309 * mcix:                                  DEC Alpha Options.  (line  163)
49310 * mcld:                                  i386 and x86-64 Options.
49311                                                              (line  588)
49312 * mclip:                                 MeP Options.        (line   35)
49313 * mcmodel:                               SPARC Options.      (line  250)
49314 * mcmodel=kernel:                        i386 and x86-64 Options.
49315                                                              (line  862)
49316 * mcmodel=large <1>:                     TILE-Gx Options.    (line   14)
49317 * mcmodel=large <2>:                     RS/6000 and PowerPC Options.
49318                                                              (line  126)
49319 * mcmodel=large <3>:                     i386 and x86-64 Options.
49320                                                              (line  874)
49321 * mcmodel=large:                         AArch64 Options.    (line   33)
49322 * mcmodel=medium <1>:                    RS/6000 and PowerPC Options.
49323                                                              (line  122)
49324 * mcmodel=medium:                        i386 and x86-64 Options.
49325                                                              (line  867)
49326 * mcmodel=small <1>:                     TILE-Gx Options.    (line    9)
49327 * mcmodel=small <2>:                     RS/6000 and PowerPC Options.
49328                                                              (line  118)
49329 * mcmodel=small <3>:                     i386 and x86-64 Options.
49330                                                              (line  856)
49331 * mcmodel=small:                         AArch64 Options.    (line   27)
49332 * mcmodel=tiny:                          AArch64 Options.    (line   20)
49333 * mcmove:                                Adapteva Epiphany Options.
49334                                                              (line   23)
49335 * mcmpb:                                 RS/6000 and PowerPC Options.
49336                                                              (line   27)
49337 * mcmpeqdi:                              SH Options.         (line  414)
49338 * mcode-readable:                        MIPS Options.       (line  401)
49339 * mcond-exec:                            FRV Options.        (line  152)
49340 * mcond-move:                            FRV Options.        (line  128)
49341 * mconfig=:                              MeP Options.        (line   39)
49342 * mconsole:                              i386 and x86-64 Windows Options.
49343                                                              (line    9)
49344 * mconst-align:                          CRIS Options.       (line   55)
49345 * mconst16:                              Xtensa Options.     (line   10)
49346 * mconstant-gp:                          IA-64 Options.      (line   46)
49347 * mcop:                                  MeP Options.        (line   48)
49348 * mcop32:                                MeP Options.        (line   53)
49349 * mcop64:                                MeP Options.        (line   56)
49350 * mcorea:                                Blackfin Options.   (line  157)
49351 * mcoreb:                                Blackfin Options.   (line  164)
49352 * mcpu <1>:                              TILEPro Options.    (line    9)
49353 * mcpu <2>:                              TILE-Gx Options.    (line   18)
49354 * mcpu <3>:                              SPARC Options.      (line   94)
49355 * mcpu <4>:                              RS/6000 and PowerPC Options.
49356                                                              (line   69)
49357 * mcpu <5>:                              picoChip Options.   (line    9)
49358 * mcpu <6>:                              M680x0 Options.     (line   28)
49359 * mcpu <7>:                              i386 and x86-64 Options.
49360                                                              (line  223)
49361 * mcpu <8>:                              FRV Options.        (line  212)
49362 * mcpu <9>:                              DEC Alpha Options.  (line  215)
49363 * mcpu <10>:                             CRIS Options.       (line   10)
49364 * mcpu <11>:                             ARM Options.        (line   75)
49365 * mcpu:                                  AArch64 Options.    (line   69)
49366 * mcpu32:                                M680x0 Options.     (line  138)
49367 * mcpu= <1>:                             MicroBlaze Options. (line   20)
49368 * mcpu= <2>:                             M32C Options.       (line    7)
49369 * mcpu=:                                 Blackfin Options.   (line    7)
49370 * mcr16c:                                CR16 Options.       (line   14)
49371 * mcr16cplus:                            CR16 Options.       (line   14)
49372 * mcrc32:                                i386 and x86-64 Options.
49373                                                              (line  635)
49374 * mcsync-anomaly:                        Blackfin Options.   (line   60)
49375 * mcx16:                                 i386 and x86-64 Options.
49376                                                              (line  612)
49377 * MD:                                    Preprocessor Options.
49378                                                              (line  274)
49379 * mdalign:                               SH Options.         (line   80)
49380 * mdata-align:                           CRIS Options.       (line   55)
49381 * mdata-model:                           CR16 Options.       (line   28)
49382 * mdc:                                   MeP Options.        (line   62)
49383 * mdebug <1>:                            S/390 and zSeries Options.
49384                                                              (line  112)
49385 * mdebug:                                M32R/D Options.     (line   69)
49386 * mdebug-main=PREFIX:                    VMS Options.        (line   13)
49387 * mdec-asm:                              PDP-11 Options.     (line   72)
49388 * mdisable-callt:                        V850 Options.       (line   92)
49389 * mdisable-fpregs:                       HPPA Options.       (line   33)
49390 * mdisable-indexing:                     HPPA Options.       (line   39)
49391 * mdiv <1>:                              MeP Options.        (line   65)
49392 * mdiv <2>:                              MCore Options.      (line   15)
49393 * mdiv:                                  M680x0 Options.     (line  209)
49394 * mdiv=STRATEGY:                         SH Options.         (line  238)
49395 * mdivide-breaks:                        MIPS Options.       (line  447)
49396 * mdivide-enabled:                       LM32 Options.       (line   12)
49397 * mdivide-traps:                         MIPS Options.       (line  447)
49398 * mdivsi3_libfunc=NAME:                  SH Options.         (line  336)
49399 * mdll:                                  i386 and x86-64 Windows Options.
49400                                                              (line   16)
49401 * mdlmzb:                                RS/6000 and PowerPC Options.
49402                                                              (line  379)
49403 * mdmx:                                  MIPS Options.       (line  290)
49404 * mdouble:                               FRV Options.        (line   38)
49405 * mdouble-float <1>:                     RS/6000 and PowerPC Options.
49406                                                              (line  302)
49407 * mdouble-float:                         MIPS Options.       (line  248)
49408 * mdsp:                                  MIPS Options.       (line  267)
49409 * mdspr2:                                MIPS Options.       (line  273)
49410 * mdual-nops:                            SPU Options.        (line   90)
49411 * mdwarf2-asm:                           IA-64 Options.      (line   94)
49412 * mdword:                                FRV Options.        (line   32)
49413 * mdynamic-no-pic:                       RS/6000 and PowerPC Options.
49414                                                              (line  439)
49415 * mea32:                                 SPU Options.        (line   55)
49416 * mea64:                                 SPU Options.        (line   55)
49417 * meabi:                                 RS/6000 and PowerPC Options.
49418                                                              (line  604)
49419 * mearly-stop-bits:                      IA-64 Options.      (line  100)
49420 * meb <1>:                               Score Options.      (line    9)
49421 * meb <2>:                               Moxie Options.      (line    7)
49422 * meb:                                   MeP Options.        (line   68)
49423 * mel <1>:                               Score Options.      (line   12)
49424 * mel <2>:                               Moxie Options.      (line   11)
49425 * mel:                                   MeP Options.        (line   71)
49426 * melf <1>:                              MMIX Options.       (line   44)
49427 * melf:                                  CRIS Options.       (line   87)
49428 * memb:                                  RS/6000 and PowerPC Options.
49429                                                              (line  599)
49430 * membedded-data:                        MIPS Options.       (line  388)
49431 * memregs=:                              M32C Options.       (line   21)
49432 * mep:                                   V850 Options.       (line   16)
49433 * mepsilon:                              MMIX Options.       (line   15)
49434 * merror-reloc:                          SPU Options.        (line   10)
49435 * mesa:                                  S/390 and zSeries Options.
49436                                                              (line   95)
49437 * metrax100:                             CRIS Options.       (line   26)
49438 * metrax4:                               CRIS Options.       (line   26)
49439 * mexplicit-relocs <1>:                  MIPS Options.       (line  432)
49440 * mexplicit-relocs:                      DEC Alpha Options.  (line  176)
49441 * mexr:                                  H8/300 Options.     (line   28)
49442 * mextern-sdata:                         MIPS Options.       (line  350)
49443 * MF:                                    Preprocessor Options.
49444                                                              (line  220)
49445 * mfast-fp:                              Blackfin Options.   (line  133)
49446 * mfast-indirect-calls:                  HPPA Options.       (line   51)
49447 * mfaster-structs:                       SPARC Options.      (line   84)
49448 * mfdpic:                                FRV Options.        (line   56)
49449 * mfentry:                               i386 and x86-64 Options.
49450                                                              (line  811)
49451 * mfix:                                  DEC Alpha Options.  (line  163)
49452 * mfix-24k:                              MIPS Options.       (line  500)
49453 * mfix-and-continue:                     Darwin Options.     (line  104)
49454 * mfix-at697f:                           SPARC Options.      (line  236)
49455 * mfix-cortex-m3-ldrd:                   ARM Options.        (line  302)
49456 * mfix-r10000:                           MIPS Options.       (line  527)
49457 * mfix-r4000:                            MIPS Options.       (line  506)
49458 * mfix-r4400:                            MIPS Options.       (line  520)
49459 * mfix-sb1:                              MIPS Options.       (line  559)
49460 * mfix-vr4120:                           MIPS Options.       (line  538)
49461 * mfix-vr4130:                           MIPS Options.       (line  552)
49462 * mfixed-cc:                             FRV Options.        (line   28)
49463 * mfixed-range <1>:                      SPU Options.        (line   47)
49464 * mfixed-range <2>:                      SH Options.         (line  343)
49465 * mfixed-range <3>:                      IA-64 Options.      (line  105)
49466 * mfixed-range:                          HPPA Options.       (line   58)
49467 * mflat:                                 SPARC Options.      (line   20)
49468 * mflip-mips16:                          MIPS Options.       (line  111)
49469 * mfloat-abi:                            ARM Options.        (line   42)
49470 * mfloat-gprs:                           RS/6000 and PowerPC Options.
49471                                                              (line  190)
49472 * mfloat-ieee:                           DEC Alpha Options.  (line  171)
49473 * mfloat-vax:                            DEC Alpha Options.  (line  171)
49474 * mfloat32:                              PDP-11 Options.     (line   52)
49475 * mfloat64:                              PDP-11 Options.     (line   48)
49476 * mflush-func:                           MIPS Options.       (line  626)
49477 * mflush-func=NAME:                      M32R/D Options.     (line   93)
49478 * mflush-trap=NUMBER:                    M32R/D Options.     (line   86)
49479 * mfmaf:                                 SPARC Options.      (line  230)
49480 * mfmovd:                                SH Options.         (line   96)
49481 * mforce-no-pic:                         Xtensa Options.     (line   41)
49482 * mfp-exceptions:                        MIPS Options.       (line  653)
49483 * mfp-mode:                              Adapteva Epiphany Options.
49484                                                              (line   72)
49485 * mfp-reg:                               DEC Alpha Options.  (line   25)
49486 * mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
49487 * mfp-trap-mode:                         DEC Alpha Options.  (line   63)
49488 * mfp16-format:                          ARM Options.        (line  163)
49489 * mfp32:                                 MIPS Options.       (line  221)
49490 * mfp64:                                 MIPS Options.       (line  224)
49491 * mfpmath <1>:                           i386 and x86-64 Options.
49492                                                              (line  226)
49493 * mfpmath:                               Optimize Options.   (line 1898)
49494 * mfpr-32:                               FRV Options.        (line   13)
49495 * mfpr-64:                               FRV Options.        (line   16)
49496 * mfprnd:                                RS/6000 and PowerPC Options.
49497                                                              (line   27)
49498 * mfpu <1>:                              SPARC Options.      (line   33)
49499 * mfpu <2>:                              RS/6000 and PowerPC Options.
49500                                                              (line  310)
49501 * mfpu <3>:                              PDP-11 Options.     (line    9)
49502 * mfpu:                                  ARM Options.        (line  143)
49503 * mfriz:                                 RS/6000 and PowerPC Options.
49504                                                              (line  785)
49505 * mfsca:                                 SH Options.         (line  428)
49506 * mfsrra:                                SH Options.         (line  437)
49507 * mfull-toc:                             RS/6000 and PowerPC Options.
49508                                                              (line  218)
49509 * mfused-madd <1>:                       Xtensa Options.     (line   19)
49510 * mfused-madd <2>:                       SH Options.         (line  419)
49511 * mfused-madd <3>:                       S/390 and zSeries Options.
49512                                                              (line  137)
49513 * mfused-madd <4>:                       RS/6000 and PowerPC Options.
49514                                                              (line  363)
49515 * mfused-madd <5>:                       MIPS Options.       (line  482)
49516 * mfused-madd:                           IA-64 Options.      (line   88)
49517 * mg:                                    VAX Options.        (line   17)
49518 * MG:                                    Preprocessor Options.
49519                                                              (line  229)
49520 * mgas:                                  HPPA Options.       (line   74)
49521 * mgcc-abi:                              V850 Options.       (line  148)
49522 * mgen-cell-microcode:                   RS/6000 and PowerPC Options.
49523                                                              (line  143)
49524 * mgeneral-regs-only:                    AArch64 Options.    (line   13)
49525 * mgettrcost=NUMBER:                     SH Options.         (line  360)
49526 * mghs:                                  V850 Options.       (line  127)
49527 * mglibc:                                GNU/Linux Options.  (line    9)
49528 * mgnu:                                  VAX Options.        (line   13)
49529 * mgnu-as:                               IA-64 Options.      (line   18)
49530 * mgnu-ld <1>:                           IA-64 Options.      (line   23)
49531 * mgnu-ld:                               HPPA Options.       (line  110)
49532 * mgotplt:                               CRIS Options.       (line   81)
49533 * mgp32:                                 MIPS Options.       (line  215)
49534 * mgp64:                                 MIPS Options.       (line  218)
49535 * mgpopt:                                MIPS Options.       (line  373)
49536 * mgpr-32:                               FRV Options.        (line    7)
49537 * mgpr-64:                               FRV Options.        (line   10)
49538 * mgprel-ro:                             FRV Options.        (line   79)
49539 * mh:                                    H8/300 Options.     (line   14)
49540 * mhalf-reg-file:                        Adapteva Epiphany Options.
49541                                                              (line    9)
49542 * mhard-dfp <1>:                         S/390 and zSeries Options.
49543                                                              (line   20)
49544 * mhard-dfp:                             RS/6000 and PowerPC Options.
49545                                                              (line   27)
49546 * mhard-float <1>:                       V850 Options.       (line  113)
49547 * mhard-float <2>:                       SPARC Options.      (line   33)
49548 * mhard-float <3>:                       S/390 and zSeries Options.
49549                                                              (line   11)
49550 * mhard-float <4>:                       RS/6000 and PowerPC Options.
49551                                                              (line  296)
49552 * mhard-float <5>:                       MIPS Options.       (line  227)
49553 * mhard-float <6>:                       MicroBlaze Options. (line   10)
49554 * mhard-float <7>:                       M680x0 Options.     (line  197)
49555 * mhard-float:                           FRV Options.        (line   19)
49556 * mhard-quad-float:                      SPARC Options.      (line   54)
49557 * mhardlit:                              MCore Options.      (line   10)
49558 * mhint-max-distance:                    SPU Options.        (line  102)
49559 * mhint-max-nops:                        SPU Options.        (line   96)
49560 * mhitachi:                              SH Options.         (line  100)
49561 * mhp-ld:                                HPPA Options.       (line  122)
49562 * micplb:                                Blackfin Options.   (line  178)
49563 * mid-shared-library:                    Blackfin Options.   (line   81)
49564 * mieee <1>:                             SH Options.         (line  116)
49565 * mieee:                                 DEC Alpha Options.  (line   39)
49566 * mieee-conformant:                      DEC Alpha Options.  (line  134)
49567 * mieee-fp:                              i386 and x86-64 Options.
49568                                                              (line  281)
49569 * mieee-with-inexact:                    DEC Alpha Options.  (line   52)
49570 * milp32:                                IA-64 Options.      (line  121)
49571 * mimpure-text:                          Solaris 2 Options.  (line    9)
49572 * mincoming-stack-boundary:              i386 and x86-64 Options.
49573                                                              (line  486)
49574 * mindexed-addressing:                   SH Options.         (line  350)
49575 * minline-all-stringops:                 i386 and x86-64 Options.
49576                                                              (line  759)
49577 * minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
49578 * minline-float-divide-min-latency:      IA-64 Options.      (line   54)
49579 * minline-ic_invalidate:                 SH Options.         (line  125)
49580 * minline-int-divide-max-throughput:     IA-64 Options.      (line   69)
49581 * minline-int-divide-min-latency:        IA-64 Options.      (line   65)
49582 * minline-plt <1>:                       FRV Options.        (line   64)
49583 * minline-plt:                           Blackfin Options.   (line  138)
49584 * minline-sqrt-max-throughput:           IA-64 Options.      (line   80)
49585 * minline-sqrt-min-latency:              IA-64 Options.      (line   76)
49586 * minline-stringops-dynamically:         i386 and x86-64 Options.
49587                                                              (line  766)
49588 * minsert-sched-nops:                    RS/6000 and PowerPC Options.
49589                                                              (line  479)
49590 * mint-register:                         RX Options.         (line  100)
49591 * mint16:                                PDP-11 Options.     (line   40)
49592 * mint32 <1>:                            PDP-11 Options.     (line   44)
49593 * mint32 <2>:                            H8/300 Options.     (line   38)
49594 * mint32:                                CR16 Options.       (line   22)
49595 * mint8:                                 AVR Options.        (line  163)
49596 * minterlink-mips16:                     MIPS Options.       (line  118)
49597 * minvalid-symbols:                      SH Options.         (line  386)
49598 * mio-volatile:                          MeP Options.        (line   74)
49599 * mips1:                                 MIPS Options.       (line   78)
49600 * mips16:                                MIPS Options.       (line  103)
49601 * mips2:                                 MIPS Options.       (line   81)
49602 * mips3:                                 MIPS Options.       (line   84)
49603 * mips32:                                MIPS Options.       (line   90)
49604 * mips32r2:                              MIPS Options.       (line   93)
49605 * mips3d:                                MIPS Options.       (line  296)
49606 * mips4:                                 MIPS Options.       (line   87)
49607 * mips64:                                MIPS Options.       (line   96)
49608 * mips64r2:                              MIPS Options.       (line   99)
49609 * misel:                                 RS/6000 and PowerPC Options.
49610                                                              (line  161)
49611 * misize:                                SH Options.         (line  137)
49612 * missue-rate=NUMBER:                    M32R/D Options.     (line   79)
49613 * mivc2:                                 MeP Options.        (line   59)
49614 * mjump-in-delay:                        HPPA Options.       (line   28)
49615 * mkernel:                               Darwin Options.     (line   82)
49616 * mknuthdiv:                             MMIX Options.       (line   33)
49617 * ml <1>:                                SH Options.         (line   77)
49618 * ml:                                    MeP Options.        (line   78)
49619 * mlarge-data:                           DEC Alpha Options.  (line  187)
49620 * mlarge-data-threshold:                 i386 and x86-64 Options.
49621                                                              (line  372)
49622 * mlarge-mem:                            SPU Options.        (line   35)
49623 * mlarge-text:                           DEC Alpha Options.  (line  205)
49624 * mleadz:                                MeP Options.        (line   81)
49625 * mleaf-id-shared-library:               Blackfin Options.   (line   92)
49626 * mlibfuncs:                             MMIX Options.       (line   10)
49627 * mlibrary-pic:                          FRV Options.        (line  110)
49628 * mlinked-fp:                            FRV Options.        (line   94)
49629 * mlinker-opt:                           HPPA Options.       (line   84)
49630 * mlinux:                                CRIS Options.       (line   91)
49631 * mlittle:                               RS/6000 and PowerPC Options.
49632                                                              (line  428)
49633 * mlittle-endian <1>:                    RS/6000 and PowerPC Options.
49634                                                              (line  428)
49635 * mlittle-endian <2>:                    MicroBlaze Options. (line   60)
49636 * mlittle-endian <3>:                    MCore Options.      (line   39)
49637 * mlittle-endian <4>:                    IA-64 Options.      (line   13)
49638 * mlittle-endian <5>:                    C6X Options.        (line   16)
49639 * mlittle-endian <6>:                    ARM Options.        (line   58)
49640 * mlittle-endian:                        AArch64 Options.    (line   16)
49641 * mlittle-endian-data:                   RX Options.         (line   42)
49642 * mliw:                                  MN10300 Options.    (line   54)
49643 * mllsc:                                 MIPS Options.       (line  253)
49644 * mlocal-sdata:                          MIPS Options.       (line  338)
49645 * mlong-calls <1>:                       V850 Options.       (line   10)
49646 * mlong-calls <2>:                       MIPS Options.       (line  468)
49647 * mlong-calls <3>:                       FRV Options.        (line   99)
49648 * mlong-calls <4>:                       Blackfin Options.   (line  121)
49649 * mlong-calls <5>:                       ARM Options.        (line  188)
49650 * mlong-calls:                           Adapteva Epiphany Options.
49651                                                              (line   55)
49652 * mlong-double-128:                      S/390 and zSeries Options.
49653                                                              (line   29)
49654 * mlong-double-64 <1>:                   S/390 and zSeries Options.
49655                                                              (line   29)
49656 * mlong-double-64:                       i386 and x86-64 Options.
49657                                                              (line  361)
49658 * mlong-double-80:                       i386 and x86-64 Options.
49659                                                              (line  361)
49660 * mlong-jumps:                           V850 Options.       (line  108)
49661 * mlong-load-store:                      HPPA Options.       (line   65)
49662 * mlong32:                               MIPS Options.       (line  313)
49663 * mlong64:                               MIPS Options.       (line  308)
49664 * mlongcall:                             RS/6000 and PowerPC Options.
49665                                                              (line  676)
49666 * mlongcalls:                            Xtensa Options.     (line   72)
49667 * mloop:                                 V850 Options.       (line  121)
49668 * mlow-64k:                              Blackfin Options.   (line   70)
49669 * mlp64:                                 IA-64 Options.      (line  121)
49670 * mm:                                    MeP Options.        (line   84)
49671 * MM:                                    Preprocessor Options.
49672                                                              (line  210)
49673 * mmac <1>:                              Score Options.      (line   21)
49674 * mmac:                                  CR16 Options.       (line    9)
49675 * mmad:                                  MIPS Options.       (line  477)
49676 * mmalloc64:                             VMS Options.        (line   17)
49677 * mmax:                                  DEC Alpha Options.  (line  163)
49678 * mmax-constant-size:                    RX Options.         (line   82)
49679 * mmax-stack-frame:                      CRIS Options.       (line   22)
49680 * mmcount-ra-address:                    MIPS Options.       (line  702)
49681 * mmcu <1>:                              MIPS Options.       (line  305)
49682 * mmcu:                                  AVR Options.        (line    9)
49683 * MMD:                                   Preprocessor Options.
49684                                                              (line  290)
49685 * mmedia:                                FRV Options.        (line   44)
49686 * mmemcpy <1>:                           MIPS Options.       (line  462)
49687 * mmemcpy:                               MicroBlaze Options. (line   13)
49688 * mmemory-latency:                       DEC Alpha Options.  (line  268)
49689 * mmemory-model:                         SPARC Options.      (line  278)
49690 * mmfcrf:                                RS/6000 and PowerPC Options.
49691                                                              (line   27)
49692 * mmfpgpr:                               RS/6000 and PowerPC Options.
49693                                                              (line   27)
49694 * mminimal-toc:                          RS/6000 and PowerPC Options.
49695                                                              (line  218)
49696 * mminmax:                               MeP Options.        (line   87)
49697 * mmmx:                                  i386 and x86-64 Options.
49698                                                              (line  565)
49699 * mmodel=large:                          M32R/D Options.     (line   33)
49700 * mmodel=medium:                         M32R/D Options.     (line   27)
49701 * mmodel=small:                          M32R/D Options.     (line   18)
49702 * mmovbe:                                i386 and x86-64 Options.
49703                                                              (line  631)
49704 * mmt:                                   MIPS Options.       (line  301)
49705 * mmul:                                  RL78 Options.       (line   13)
49706 * mmul-bug-workaround:                   CRIS Options.       (line   31)
49707 * mmuladd:                               FRV Options.        (line   50)
49708 * mmulhw:                                RS/6000 and PowerPC Options.
49709                                                              (line  372)
49710 * mmult:                                 MeP Options.        (line   90)
49711 * mmult-bug:                             MN10300 Options.    (line    9)
49712 * mmulti-cond-exec:                      FRV Options.        (line  176)
49713 * mmulticore:                            Blackfin Options.   (line  142)
49714 * mmultiple:                             RS/6000 and PowerPC Options.
49715                                                              (line  322)
49716 * mmvcle:                                S/390 and zSeries Options.
49717                                                              (line  105)
49718 * mmvme:                                 RS/6000 and PowerPC Options.
49719                                                              (line  580)
49720 * mn:                                    H8/300 Options.     (line   20)
49721 * mnested-cond-exec:                     FRV Options.        (line  189)
49722 * mnhwloop:                              Score Options.      (line   15)
49723 * mno-3dnow:                             i386 and x86-64 Options.
49724                                                              (line  565)
49725 * mno-4byte-functions:                   MCore Options.      (line   27)
49726 * mno-8byte-align:                       V850 Options.       (line  170)
49727 * mno-abicalls:                          MIPS Options.       (line  155)
49728 * mno-abshi:                             PDP-11 Options.     (line   58)
49729 * mno-ac0:                               PDP-11 Options.     (line   20)
49730 * mno-address-space-conversion:          SPU Options.        (line   63)
49731 * mno-align-double:                      i386 and x86-64 Options.
49732                                                              (line  320)
49733 * mno-align-int:                         M680x0 Options.     (line  267)
49734 * mno-align-loops:                       M32R/D Options.     (line   76)
49735 * mno-align-stringops:                   i386 and x86-64 Options.
49736                                                              (line  754)
49737 * mno-altivec:                           RS/6000 and PowerPC Options.
49738                                                              (line  132)
49739 * mno-am33:                              MN10300 Options.    (line   20)
49740 * mno-app-regs <1>:                      V850 Options.       (line  185)
49741 * mno-app-regs:                          SPARC Options.      (line   10)
49742 * mno-as100-syntax:                      RX Options.         (line   76)
49743 * mno-atomic-updates:                    SPU Options.        (line   78)
49744 * mno-avoid-indexed-addresses:           RS/6000 and PowerPC Options.
49745                                                              (line  354)
49746 * mno-backchain:                         S/390 and zSeries Options.
49747                                                              (line   35)
49748 * mno-base-addresses:                    MMIX Options.       (line   54)
49749 * mno-bit-align:                         RS/6000 and PowerPC Options.
49750                                                              (line  386)
49751 * mno-bitfield:                          M680x0 Options.     (line  231)
49752 * mno-branch-likely:                     MIPS Options.       (line  642)
49753 * mno-branch-predict:                    MMIX Options.       (line   49)
49754 * mno-bwx:                               DEC Alpha Options.  (line  163)
49755 * mno-callgraph-data:                    MCore Options.      (line   31)
49756 * mno-cbcond:                            SPARC Options.      (line  216)
49757 * mno-check-zero-division:               MIPS Options.       (line  441)
49758 * mno-cix:                               DEC Alpha Options.  (line  163)
49759 * mno-clearbss:                          MicroBlaze Options. (line   16)
49760 * mno-cmpb:                              RS/6000 and PowerPC Options.
49761                                                              (line   27)
49762 * mno-cond-exec:                         FRV Options.        (line  158)
49763 * mno-cond-move:                         FRV Options.        (line  134)
49764 * mno-const-align:                       CRIS Options.       (line   55)
49765 * mno-const16:                           Xtensa Options.     (line   10)
49766 * mno-crt0 <1>:                          Moxie Options.      (line   14)
49767 * mno-crt0:                              MN10300 Options.    (line   43)
49768 * mno-csync-anomaly:                     Blackfin Options.   (line   66)
49769 * mno-data-align:                        CRIS Options.       (line   55)
49770 * mno-debug:                             S/390 and zSeries Options.
49771                                                              (line  112)
49772 * mno-disable-callt:                     V850 Options.       (line   92)
49773 * mno-div <1>:                           MCore Options.      (line   15)
49774 * mno-div:                               M680x0 Options.     (line  209)
49775 * mno-dlmzb:                             RS/6000 and PowerPC Options.
49776                                                              (line  379)
49777 * mno-double:                            FRV Options.        (line   41)
49778 * mno-dsp:                               MIPS Options.       (line  267)
49779 * mno-dspr2:                             MIPS Options.       (line  273)
49780 * mno-dwarf2-asm:                        IA-64 Options.      (line   94)
49781 * mno-dword:                             FRV Options.        (line   35)
49782 * mno-eabi:                              RS/6000 and PowerPC Options.
49783                                                              (line  604)
49784 * mno-early-stop-bits:                   IA-64 Options.      (line  100)
49785 * mno-eflags:                            FRV Options.        (line  125)
49786 * mno-embedded-data:                     MIPS Options.       (line  388)
49787 * mno-ep:                                V850 Options.       (line   16)
49788 * mno-epsilon:                           MMIX Options.       (line   15)
49789 * mno-explicit-relocs <1>:               MIPS Options.       (line  432)
49790 * mno-explicit-relocs:                   DEC Alpha Options.  (line  176)
49791 * mno-exr:                               H8/300 Options.     (line   33)
49792 * mno-extern-sdata:                      MIPS Options.       (line  350)
49793 * mno-fancy-math-387:                    i386 and x86-64 Options.
49794                                                              (line  309)
49795 * mno-faster-structs:                    SPARC Options.      (line   84)
49796 * mno-fix:                               DEC Alpha Options.  (line  163)
49797 * mno-fix-24k:                           MIPS Options.       (line  500)
49798 * mno-fix-r10000:                        MIPS Options.       (line  527)
49799 * mno-fix-r4000:                         MIPS Options.       (line  506)
49800 * mno-fix-r4400:                         MIPS Options.       (line  520)
49801 * mno-flat:                              SPARC Options.      (line   20)
49802 * mno-float:                             MIPS Options.       (line  234)
49803 * mno-float32:                           PDP-11 Options.     (line   48)
49804 * mno-float64:                           PDP-11 Options.     (line   52)
49805 * mno-flush-func:                        M32R/D Options.     (line   98)
49806 * mno-flush-trap:                        M32R/D Options.     (line   90)
49807 * mno-fmaf:                              SPARC Options.      (line  230)
49808 * mno-fp-in-toc:                         RS/6000 and PowerPC Options.
49809                                                              (line  218)
49810 * mno-fp-regs:                           DEC Alpha Options.  (line   25)
49811 * mno-fp-ret-in-387:                     i386 and x86-64 Options.
49812                                                              (line  299)
49813 * mno-fprnd:                             RS/6000 and PowerPC Options.
49814                                                              (line   27)
49815 * mno-fpu:                               SPARC Options.      (line   38)
49816 * mno-fsca:                              SH Options.         (line  428)
49817 * mno-fsrra:                             SH Options.         (line  437)
49818 * mno-fused-madd <1>:                    Xtensa Options.     (line   19)
49819 * mno-fused-madd <2>:                    SH Options.         (line  419)
49820 * mno-fused-madd <3>:                    S/390 and zSeries Options.
49821                                                              (line  137)
49822 * mno-fused-madd <4>:                    RS/6000 and PowerPC Options.
49823                                                              (line  363)
49824 * mno-fused-madd <5>:                    MIPS Options.       (line  482)
49825 * mno-fused-madd:                        IA-64 Options.      (line   88)
49826 * mno-gnu-as:                            IA-64 Options.      (line   18)
49827 * mno-gnu-ld:                            IA-64 Options.      (line   23)
49828 * mno-gotplt:                            CRIS Options.       (line   81)
49829 * mno-gpopt:                             MIPS Options.       (line  373)
49830 * mno-hard-dfp <1>:                      S/390 and zSeries Options.
49831                                                              (line   20)
49832 * mno-hard-dfp:                          RS/6000 and PowerPC Options.
49833                                                              (line   27)
49834 * mno-hardlit:                           MCore Options.      (line   10)
49835 * mno-id-shared-library:                 Blackfin Options.   (line   88)
49836 * mno-ieee-fp:                           i386 and x86-64 Options.
49837                                                              (line  281)
49838 * mno-inline-float-divide:               IA-64 Options.      (line   62)
49839 * mno-inline-int-divide:                 IA-64 Options.      (line   73)
49840 * mno-inline-sqrt:                       IA-64 Options.      (line   84)
49841 * mno-int16:                             PDP-11 Options.     (line   44)
49842 * mno-int32:                             PDP-11 Options.     (line   40)
49843 * mno-interlink-mips16:                  MIPS Options.       (line  118)
49844 * mno-interrupts:                        AVR Options.        (line  169)
49845 * mno-isel:                              RS/6000 and PowerPC Options.
49846                                                              (line  161)
49847 * mno-knuthdiv:                          MMIX Options.       (line   33)
49848 * mno-leaf-id-shared-library:            Blackfin Options.   (line   98)
49849 * mno-libfuncs:                          MMIX Options.       (line   10)
49850 * mno-llsc:                              MIPS Options.       (line  253)
49851 * mno-local-sdata:                       MIPS Options.       (line  338)
49852 * mno-long-calls <1>:                    V850 Options.       (line   10)
49853 * mno-long-calls <2>:                    MIPS Options.       (line  468)
49854 * mno-long-calls <3>:                    HPPA Options.       (line  135)
49855 * mno-long-calls <4>:                    Blackfin Options.   (line  121)
49856 * mno-long-calls:                        ARM Options.        (line  188)
49857 * mno-long-jumps:                        V850 Options.       (line  108)
49858 * mno-longcall:                          RS/6000 and PowerPC Options.
49859                                                              (line  676)
49860 * mno-longcalls:                         Xtensa Options.     (line   72)
49861 * mno-low-64k:                           Blackfin Options.   (line   74)
49862 * mno-lsim <1>:                          MCore Options.      (line   46)
49863 * mno-lsim:                              FR30 Options.       (line   14)
49864 * mno-mad:                               MIPS Options.       (line  477)
49865 * mno-max:                               DEC Alpha Options.  (line  163)
49866 * mno-mcount-ra-address:                 MIPS Options.       (line  702)
49867 * mno-mcu:                               MIPS Options.       (line  305)
49868 * mno-mdmx:                              MIPS Options.       (line  290)
49869 * mno-media:                             FRV Options.        (line   47)
49870 * mno-memcpy:                            MIPS Options.       (line  462)
49871 * mno-mfcrf:                             RS/6000 and PowerPC Options.
49872                                                              (line   27)
49873 * mno-mfpgpr:                            RS/6000 and PowerPC Options.
49874                                                              (line   27)
49875 * mno-mips16:                            MIPS Options.       (line  103)
49876 * mno-mips3d:                            MIPS Options.       (line  296)
49877 * mno-mmx:                               i386 and x86-64 Options.
49878                                                              (line  565)
49879 * mno-mt:                                MIPS Options.       (line  301)
49880 * mno-mul-bug-workaround:                CRIS Options.       (line   31)
49881 * mno-muladd:                            FRV Options.        (line   53)
49882 * mno-mulhw:                             RS/6000 and PowerPC Options.
49883                                                              (line  372)
49884 * mno-mult-bug:                          MN10300 Options.    (line   13)
49885 * mno-multi-cond-exec:                   FRV Options.        (line  183)
49886 * mno-multiple:                          RS/6000 and PowerPC Options.
49887                                                              (line  322)
49888 * mno-mvcle:                             S/390 and zSeries Options.
49889                                                              (line  105)
49890 * mno-nested-cond-exec:                  FRV Options.        (line  195)
49891 * mno-omit-leaf-frame-pointer:           AArch64 Options.    (line   43)
49892 * mno-optimize-membar:                   FRV Options.        (line  205)
49893 * mno-opts:                              MeP Options.        (line   93)
49894 * mno-pack:                              FRV Options.        (line  122)
49895 * mno-packed-stack:                      S/390 and zSeries Options.
49896                                                              (line   54)
49897 * mno-paired:                            RS/6000 and PowerPC Options.
49898                                                              (line  175)
49899 * mno-paired-single:                     MIPS Options.       (line  284)
49900 * mno-pic:                               IA-64 Options.      (line   26)
49901 * mno-pid:                               RX Options.         (line  117)
49902 * mno-plt:                               MIPS Options.       (line  182)
49903 * mno-popc:                              SPARC Options.      (line  223)
49904 * mno-popcntb:                           RS/6000 and PowerPC Options.
49905                                                              (line   27)
49906 * mno-popcntd:                           RS/6000 and PowerPC Options.
49907                                                              (line   27)
49908 * mno-postinc:                           Adapteva Epiphany Options.
49909                                                              (line  110)
49910 * mno-postmodify:                        Adapteva Epiphany Options.
49911                                                              (line  110)
49912 * mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
49913                                                              (line   27)
49914 * mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
49915                                                              (line   27)
49916 * mno-powerpc64:                         RS/6000 and PowerPC Options.
49917                                                              (line   27)
49918 * mno-prolog-function:                   V850 Options.       (line   23)
49919 * mno-prologue-epilogue:                 CRIS Options.       (line   71)
49920 * mno-prototype:                         RS/6000 and PowerPC Options.
49921                                                              (line  564)
49922 * mno-push-args:                         i386 and x86-64 Options.
49923                                                              (line  731)
49924 * mno-red-zone:                          i386 and x86-64 Options.
49925                                                              (line  848)
49926 * mno-register-names:                    IA-64 Options.      (line   37)
49927 * mno-regnames:                          RS/6000 and PowerPC Options.
49928                                                              (line  670)
49929 * mno-relax:                             V850 Options.       (line  103)
49930 * mno-relax-immediate:                   MCore Options.      (line   19)
49931 * mno-relocatable:                       RS/6000 and PowerPC Options.
49932                                                              (line  402)
49933 * mno-relocatable-lib:                   RS/6000 and PowerPC Options.
49934                                                              (line  413)
49935 * mno-round-nearest:                     Adapteva Epiphany Options.
49936                                                              (line   51)
49937 * mno-rtd:                               M680x0 Options.     (line  262)
49938 * mno-scc:                               FRV Options.        (line  146)
49939 * mno-sched-ar-data-spec:                IA-64 Options.      (line  134)
49940 * mno-sched-ar-in-data-spec:             IA-64 Options.      (line  155)
49941 * mno-sched-br-data-spec:                IA-64 Options.      (line  128)
49942 * mno-sched-br-in-data-spec:             IA-64 Options.      (line  148)
49943 * mno-sched-control-spec:                IA-64 Options.      (line  140)
49944 * mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  182)
49945 * mno-sched-in-control-spec:             IA-64 Options.      (line  162)
49946 * mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  175)
49947 * mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  168)
49948 * mno-sched-prolog:                      ARM Options.        (line   33)
49949 * mno-sdata <1>:                         RS/6000 and PowerPC Options.
49950                                                              (line  651)
49951 * mno-sdata:                             IA-64 Options.      (line   42)
49952 * mno-sep-data:                          Blackfin Options.   (line  116)
49953 * mno-serialize-volatile:                Xtensa Options.     (line   35)
49954 * mno-short:                             M680x0 Options.     (line  226)
49955 * mno-side-effects:                      CRIS Options.       (line   46)
49956 * mno-sim:                               RX Options.         (line   71)
49957 * mno-single-exit:                       MMIX Options.       (line   66)
49958 * mno-slow-bytes:                        MCore Options.      (line   35)
49959 * mno-small-exec:                        S/390 and zSeries Options.
49960                                                              (line   80)
49961 * mno-smartmips:                         MIPS Options.       (line  280)
49962 * mno-soft-cmpsf:                        Adapteva Epiphany Options.
49963                                                              (line   29)
49964 * mno-soft-float:                        DEC Alpha Options.  (line   10)
49965 * mno-space-regs:                        HPPA Options.       (line   44)
49966 * mno-spe:                               RS/6000 and PowerPC Options.
49967                                                              (line  170)
49968 * mno-specld-anomaly:                    Blackfin Options.   (line   56)
49969 * mno-split-addresses:                   MIPS Options.       (line  426)
49970 * mno-sse:                               i386 and x86-64 Options.
49971                                                              (line  565)
49972 * mno-stack-align:                       CRIS Options.       (line   55)
49973 * mno-stack-bias:                        SPARC Options.      (line  302)
49974 * mno-strict-align <1>:                  RS/6000 and PowerPC Options.
49975                                                              (line  397)
49976 * mno-strict-align:                      M680x0 Options.     (line  287)
49977 * mno-string:                            RS/6000 and PowerPC Options.
49978                                                              (line  333)
49979 * mno-sum-in-toc:                        RS/6000 and PowerPC Options.
49980                                                              (line  218)
49981 * mno-sym32:                             MIPS Options.       (line  323)
49982 * mno-target-align:                      Xtensa Options.     (line   59)
49983 * mno-text-section-literals:             Xtensa Options.     (line   47)
49984 * mno-tls-markers:                       RS/6000 and PowerPC Options.
49985                                                              (line  709)
49986 * mno-toc:                               RS/6000 and PowerPC Options.
49987                                                              (line  422)
49988 * mno-toplevel-symbols:                  MMIX Options.       (line   40)
49989 * mno-tpf-trace:                         S/390 and zSeries Options.
49990                                                              (line  131)
49991 * mno-unaligned-access:                  ARM Options.        (line  309)
49992 * mno-unaligned-doubles:                 SPARC Options.      (line   72)
49993 * mno-uninit-const-in-rodata:            MIPS Options.       (line  396)
49994 * mno-update:                            RS/6000 and PowerPC Options.
49995                                                              (line  344)
49996 * mno-v8plus:                            SPARC Options.      (line  187)
49997 * mno-vect-double:                       Adapteva Epiphany Options.
49998                                                              (line  116)
49999 * mno-vis:                               SPARC Options.      (line  194)
50000 * mno-vis2:                              SPARC Options.      (line  200)
50001 * mno-vis3:                              SPARC Options.      (line  208)
50002 * mno-vliw-branch:                       FRV Options.        (line  170)
50003 * mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
50004 * mno-vrsave:                            RS/6000 and PowerPC Options.
50005                                                              (line  140)
50006 * mno-vsx:                               RS/6000 and PowerPC Options.
50007                                                              (line  184)
50008 * mno-warn-multiple-fast-interrupts:     RX Options.         (line  143)
50009 * mno-wide-bitfields:                    MCore Options.      (line   23)
50010 * mno-xgot <1>:                          MIPS Options.       (line  192)
50011 * mno-xgot:                              M680x0 Options.     (line  319)
50012 * mno-xl-compat:                         RS/6000 and PowerPC Options.
50013                                                              (line  253)
50014 * mno-zdcbranch:                         SH Options.         (line  403)
50015 * mno-zero-extend:                       MMIX Options.       (line   27)
50016 * mnobitfield:                           M680x0 Options.     (line  231)
50017 * mnoieee:                               SH Options.         (line  116)
50018 * mnoliw:                                MN10300 Options.    (line   59)
50019 * mnomacsave:                            SH Options.         (line  111)
50020 * mnop-fun-dllimport:                    i386 and x86-64 Windows Options.
50021                                                              (line   22)
50022 * mnops:                                 Adapteva Epiphany Options.
50023                                                              (line   26)
50024 * mnosetlb:                              MN10300 Options.    (line   69)
50025 * mnosplit-lohi:                         Adapteva Epiphany Options.
50026                                                              (line  110)
50027 * momit-leaf-frame-pointer <1>:          i386 and x86-64 Options.
50028                                                              (line  788)
50029 * momit-leaf-frame-pointer <2>:          Blackfin Options.   (line   44)
50030 * momit-leaf-frame-pointer:              AArch64 Options.    (line   43)
50031 * mone-byte-bool:                        Darwin Options.     (line   90)
50032 * moptimize-membar:                      FRV Options.        (line  201)
50033 * MP:                                    Preprocessor Options.
50034                                                              (line  239)
50035 * mpa-risc-1-0:                          HPPA Options.       (line   19)
50036 * mpa-risc-1-1:                          HPPA Options.       (line   19)
50037 * mpa-risc-2-0:                          HPPA Options.       (line   19)
50038 * mpack:                                 FRV Options.        (line  119)
50039 * mpacked-stack:                         S/390 and zSeries Options.
50040                                                              (line   54)
50041 * mpadstruct:                            SH Options.         (line  140)
50042 * mpaired:                               RS/6000 and PowerPC Options.
50043                                                              (line  175)
50044 * mpaired-single:                        MIPS Options.       (line  284)
50045 * mpc32:                                 i386 and x86-64 Options.
50046                                                              (line  435)
50047 * mpc64:                                 i386 and x86-64 Options.
50048                                                              (line  435)
50049 * mpc80:                                 i386 and x86-64 Options.
50050                                                              (line  435)
50051 * mpcrel:                                M680x0 Options.     (line  279)
50052 * mpdebug:                               CRIS Options.       (line   35)
50053 * mpe:                                   RS/6000 and PowerPC Options.
50054                                                              (line  273)
50055 * mpe-aligned-commons:                   i386 and x86-64 Windows Options.
50056                                                              (line   59)
50057 * mpic-register:                         ARM Options.        (line  218)
50058 * mpid:                                  RX Options.         (line  117)
50059 * mplt:                                  MIPS Options.       (line  182)
50060 * mpointers-to-nested-functions:         RS/6000 and PowerPC Options.
50061                                                              (line  793)
50062 * mpoke-function-name:                   ARM Options.        (line  222)
50063 * mpopc:                                 SPARC Options.      (line  223)
50064 * mpopcntb:                              RS/6000 and PowerPC Options.
50065                                                              (line   27)
50066 * mpopcntd:                              RS/6000 and PowerPC Options.
50067                                                              (line   27)
50068 * mportable-runtime:                     HPPA Options.       (line   70)
50069 * mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
50070                                                              (line   27)
50071 * mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
50072                                                              (line   27)
50073 * mpowerpc64:                            RS/6000 and PowerPC Options.
50074                                                              (line   27)
50075 * mprefer-avx128:                        i386 and x86-64 Options.
50076                                                              (line  608)
50077 * mprefer-short-insn-regs:               Adapteva Epiphany Options.
50078                                                              (line   13)
50079 * mprefergot:                            SH Options.         (line  225)
50080 * mpreferred-stack-boundary:             i386 and x86-64 Options.
50081                                                              (line  465)
50082 * mpretend-cmove:                        SH Options.         (line  446)
50083 * mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
50084                                                              (line  451)
50085 * mprolog-function:                      V850 Options.       (line   23)
50086 * mprologue-epilogue:                    CRIS Options.       (line   71)
50087 * mprototype:                            RS/6000 and PowerPC Options.
50088                                                              (line  564)
50089 * mpt-fixed:                             SH Options.         (line  364)
50090 * mpush-args:                            i386 and x86-64 Options.
50091                                                              (line  731)
50092 * MQ:                                    Preprocessor Options.
50093                                                              (line  265)
50094 * mr10k-cache-barrier:                   MIPS Options.       (line  564)
50095 * mrecip <1>:                            RS/6000 and PowerPC Options.
50096                                                              (line  721)
50097 * mrecip:                                i386 and x86-64 Options.
50098                                                              (line  641)
50099 * mrecip-precision:                      RS/6000 and PowerPC Options.
50100                                                              (line  757)
50101 * mrecip=opt <1>:                        RS/6000 and PowerPC Options.
50102                                                              (line  734)
50103 * mrecip=opt:                            i386 and x86-64 Options.
50104                                                              (line  663)
50105 * mregister-names:                       IA-64 Options.      (line   37)
50106 * mregnames:                             RS/6000 and PowerPC Options.
50107                                                              (line  670)
50108 * mregparm:                              i386 and x86-64 Options.
50109                                                              (line  402)
50110 * mrelax <1>:                            V850 Options.       (line  103)
50111 * mrelax <2>:                            SH Options.         (line   85)
50112 * mrelax <3>:                            RX Options.         (line   95)
50113 * mrelax <4>:                            MN10300 Options.    (line   46)
50114 * mrelax <5>:                            H8/300 Options.     (line    9)
50115 * mrelax:                                AVR Options.        (line  173)
50116 * mrelax-immediate:                      MCore Options.      (line   19)
50117 * mrelax-pic-calls:                      MIPS Options.       (line  689)
50118 * mrelocatable:                          RS/6000 and PowerPC Options.
50119                                                              (line  402)
50120 * mrelocatable-lib:                      RS/6000 and PowerPC Options.
50121                                                              (line  413)
50122 * mrepeat:                               MeP Options.        (line   96)
50123 * mreturn-pointer-on-d0:                 MN10300 Options.    (line   36)
50124 * mrh850-abi:                            V850 Options.       (line  127)
50125 * mrtd <1>:                              Function Attributes.
50126                                                              (line  177)
50127 * mrtd <2>:                              M680x0 Options.     (line  240)
50128 * mrtd:                                  i386 and x86-64 Options.
50129                                                              (line  378)
50130 * mrtp:                                  VxWorks Options.    (line   11)
50131 * ms <1>:                                MeP Options.        (line  100)
50132 * ms:                                    H8/300 Options.     (line   17)
50133 * ms2600:                                H8/300 Options.     (line   24)
50134 * msafe-dma:                             SPU Options.        (line   17)
50135 * msafe-hints:                           SPU Options.        (line  107)
50136 * msahf:                                 i386 and x86-64 Options.
50137                                                              (line  621)
50138 * msatur:                                MeP Options.        (line  105)
50139 * msave-acc-in-interrupts:               RX Options.         (line  109)
50140 * msave-toc-indirect:                    RS/6000 and PowerPC Options.
50141                                                              (line  805)
50142 * mscc:                                  FRV Options.        (line  140)
50143 * msched-ar-data-spec:                   IA-64 Options.      (line  134)
50144 * msched-ar-in-data-spec:                IA-64 Options.      (line  155)
50145 * msched-br-data-spec:                   IA-64 Options.      (line  128)
50146 * msched-br-in-data-spec:                IA-64 Options.      (line  148)
50147 * msched-control-spec:                   IA-64 Options.      (line  140)
50148 * msched-costly-dep:                     RS/6000 and PowerPC Options.
50149                                                              (line  458)
50150 * msched-count-spec-in-critical-path:    IA-64 Options.      (line  182)
50151 * msched-fp-mem-deps-zero-cost:          IA-64 Options.      (line  198)
50152 * msched-in-control-spec:                IA-64 Options.      (line  162)
50153 * msched-max-memory-insns:               IA-64 Options.      (line  207)
50154 * msched-max-memory-insns-hard-limit:    IA-64 Options.      (line  213)
50155 * msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  175)
50156 * msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  168)
50157 * msched-spec-ldc:                       IA-64 Options.      (line  187)
50158 * msched-stop-bits-after-every-cycle:    IA-64 Options.      (line  194)
50159 * mschedule:                             HPPA Options.       (line   77)
50160 * mscore5:                               Score Options.      (line   25)
50161 * mscore5u:                              Score Options.      (line   28)
50162 * mscore7:                               Score Options.      (line   31)
50163 * mscore7d:                              Score Options.      (line   34)
50164 * msda:                                  V850 Options.       (line   40)
50165 * msdata <1>:                            RS/6000 and PowerPC Options.
50166                                                              (line  638)
50167 * msdata:                                IA-64 Options.      (line   42)
50168 * msdata=all:                            C6X Options.        (line   30)
50169 * msdata=data:                           RS/6000 and PowerPC Options.
50170                                                              (line  643)
50171 * msdata=default <1>:                    RS/6000 and PowerPC Options.
50172                                                              (line  638)
50173 * msdata=default:                        C6X Options.        (line   22)
50174 * msdata=eabi:                           RS/6000 and PowerPC Options.
50175                                                              (line  618)
50176 * msdata=none <1>:                       RS/6000 and PowerPC Options.
50177                                                              (line  651)
50178 * msdata=none <2>:                       M32R/D Options.     (line   40)
50179 * msdata=none:                           C6X Options.        (line   35)
50180 * msdata=sdata:                          M32R/D Options.     (line   49)
50181 * msdata=sysv:                           RS/6000 and PowerPC Options.
50182                                                              (line  629)
50183 * msdata=use:                            M32R/D Options.     (line   53)
50184 * msdram <1>:                            MeP Options.        (line  110)
50185 * msdram:                                Blackfin Options.   (line  172)
50186 * msecure-plt:                           RS/6000 and PowerPC Options.
50187                                                              (line  150)
50188 * msel-sched-dont-check-control-spec:    IA-64 Options.      (line  203)
50189 * msep-data:                             Blackfin Options.   (line  110)
50190 * mserialize-volatile:                   Xtensa Options.     (line   35)
50191 * msetlb:                                MN10300 Options.    (line   64)
50192 * mshared-library-id:                    Blackfin Options.   (line  103)
50193 * mshort:                                M680x0 Options.     (line  220)
50194 * msign-extend-enabled:                  LM32 Options.       (line   18)
50195 * msim <1>:                              Xstormy16 Options.  (line    9)
50196 * msim <2>:                              RX Options.         (line   71)
50197 * msim <3>:                              RS/6000 and PowerPC Options.
50198                                                              (line  574)
50199 * msim <4>:                              RL78 Options.       (line    7)
50200 * msim <5>:                              MeP Options.        (line  114)
50201 * msim <6>:                              M32C Options.       (line   13)
50202 * msim <7>:                              CR16 Options.       (line   18)
50203 * msim <8>:                              C6X Options.        (line   19)
50204 * msim:                                  Blackfin Options.   (line   37)
50205 * msimnovec:                             MeP Options.        (line  117)
50206 * msimple-fpu:                           RS/6000 and PowerPC Options.
50207                                                              (line  306)
50208 * msingle-exit:                          MMIX Options.       (line   66)
50209 * msingle-float <1>:                     RS/6000 and PowerPC Options.
50210                                                              (line  302)
50211 * msingle-float:                         MIPS Options.       (line  244)
50212 * msingle-pic-base <1>:                  RS/6000 and PowerPC Options.
50213                                                              (line  445)
50214 * msingle-pic-base:                      ARM Options.        (line  212)
50215 * msio:                                  HPPA Options.       (line  104)
50216 * mslow-bytes:                           MCore Options.      (line   35)
50217 * msmall-data:                           DEC Alpha Options.  (line  187)
50218 * msmall-data-limit:                     RX Options.         (line   47)
50219 * msmall-divides:                        MicroBlaze Options. (line   39)
50220 * msmall-exec:                           S/390 and zSeries Options.
50221                                                              (line   80)
50222 * msmall-mem:                            SPU Options.        (line   35)
50223 * msmall-model:                          FR30 Options.       (line    9)
50224 * msmall-text:                           DEC Alpha Options.  (line  205)
50225 * msmall16:                              Adapteva Epiphany Options.
50226                                                              (line   67)
50227 * msmartmips:                            MIPS Options.       (line  280)
50228 * msoft-float <1>:                       V850 Options.       (line  113)
50229 * msoft-float <2>:                       SPARC Options.      (line   38)
50230 * msoft-float <3>:                       S/390 and zSeries Options.
50231                                                              (line   11)
50232 * msoft-float <4>:                       RS/6000 and PowerPC Options.
50233                                                              (line  296)
50234 * msoft-float <5>:                       PDP-11 Options.     (line   13)
50235 * msoft-float <6>:                       MIPS Options.       (line  230)
50236 * msoft-float <7>:                       MicroBlaze Options. (line    7)
50237 * msoft-float <8>:                       M680x0 Options.     (line  203)
50238 * msoft-float <9>:                       i386 and x86-64 Options.
50239                                                              (line  286)
50240 * msoft-float <10>:                      HPPA Options.       (line   90)
50241 * msoft-float <11>:                      FRV Options.        (line   22)
50242 * msoft-float:                           DEC Alpha Options.  (line   10)
50243 * msoft-quad-float:                      SPARC Options.      (line   58)
50244 * msp8:                                  AVR Options.        (line  187)
50245 * mspace <1>:                            V850 Options.       (line   30)
50246 * mspace:                                SH Options.         (line  222)
50247 * mspe:                                  RS/6000 and PowerPC Options.
50248                                                              (line  170)
50249 * mspecld-anomaly:                       Blackfin Options.   (line   51)
50250 * msplit-addresses:                      MIPS Options.       (line  426)
50251 * msplit-vecmove-early:                  Adapteva Epiphany Options.
50252                                                              (line  127)
50253 * msse:                                  i386 and x86-64 Options.
50254                                                              (line  565)
50255 * msse2avx:                              i386 and x86-64 Options.
50256                                                              (line  806)
50257 * msseregparm:                           i386 and x86-64 Options.
50258                                                              (line  413)
50259 * mstack-align:                          CRIS Options.       (line   55)
50260 * mstack-bias:                           SPARC Options.      (line  302)
50261 * mstack-check-l1:                       Blackfin Options.   (line   77)
50262 * mstack-guard:                          S/390 and zSeries Options.
50263                                                              (line  156)
50264 * mstack-increment:                      MCore Options.      (line   50)
50265 * mstack-offset:                         Adapteva Epiphany Options.
50266                                                              (line   37)
50267 * mstack-size:                           S/390 and zSeries Options.
50268                                                              (line  156)
50269 * mstackrealign:                         i386 and x86-64 Options.
50270                                                              (line  456)
50271 * mstdmain:                              SPU Options.        (line   40)
50272 * mstrict-align <1>:                     RS/6000 and PowerPC Options.
50273                                                              (line  397)
50274 * mstrict-align <2>:                     M680x0 Options.     (line  287)
50275 * mstrict-align:                         AArch64 Options.    (line   38)
50276 * mstrict-X:                             AVR Options.        (line  200)
50277 * mstring:                               RS/6000 and PowerPC Options.
50278                                                              (line  333)
50279 * mstringop-strategy=ALG:                i386 and x86-64 Options.
50280                                                              (line  770)
50281 * mstructure-size-boundary:              ARM Options.        (line  169)
50282 * msvr4-struct-return:                   RS/6000 and PowerPC Options.
50283                                                              (line  538)
50284 * msym32:                                MIPS Options.       (line  323)
50285 * msynci:                                MIPS Options.       (line  674)
50286 * MT:                                    Preprocessor Options.
50287                                                              (line  251)
50288 * mtarget-align:                         Xtensa Options.     (line   59)
50289 * mtas:                                  SH Options.         (line  213)
50290 * mtda:                                  V850 Options.       (line   34)
50291 * mtext-section-literals:                Xtensa Options.     (line   47)
50292 * mtf:                                   MeP Options.        (line  121)
50293 * mthread:                               i386 and x86-64 Windows Options.
50294                                                              (line   26)
50295 * mthreads:                              i386 and x86-64 Options.
50296                                                              (line  746)
50297 * mthumb:                                ARM Options.        (line  244)
50298 * mthumb-interwork:                      ARM Options.        (line   25)
50299 * mtiny-stack:                           AVR Options.        (line  214)
50300 * mtiny=:                                MeP Options.        (line  125)
50301 * mtls:                                  FRV Options.        (line   75)
50302 * mTLS:                                  FRV Options.        (line   72)
50303 * mtls-dialect <1>:                      i386 and x86-64 Options.
50304                                                              (line  724)
50305 * mtls-dialect:                          ARM Options.        (line  285)
50306 * mtls-dialect=desc:                     AArch64 Options.    (line   47)
50307 * mtls-dialect=traditional:              AArch64 Options.    (line   51)
50308 * mtls-direct-seg-refs:                  i386 and x86-64 Options.
50309                                                              (line  796)
50310 * mtls-markers:                          RS/6000 and PowerPC Options.
50311                                                              (line  709)
50312 * mtls-size:                             IA-64 Options.      (line  112)
50313 * mtoc:                                  RS/6000 and PowerPC Options.
50314                                                              (line  422)
50315 * mtomcat-stats:                         FRV Options.        (line  209)
50316 * mtoplevel-symbols:                     MMIX Options.       (line   40)
50317 * mtp:                                   ARM Options.        (line  277)
50318 * mtpcs-frame:                           ARM Options.        (line  250)
50319 * mtpcs-leaf-frame:                      ARM Options.        (line  256)
50320 * mtpf-trace:                            S/390 and zSeries Options.
50321                                                              (line  131)
50322 * mtrap-precision:                       DEC Alpha Options.  (line  109)
50323 * mtune <1>:                             SPARC Options.      (line  173)
50324 * mtune <2>:                             S/390 and zSeries Options.
50325                                                              (line  124)
50326 * mtune <3>:                             RS/6000 and PowerPC Options.
50327                                                              (line  110)
50328 * mtune <4>:                             MN10300 Options.    (line   30)
50329 * mtune <5>:                             MIPS Options.       (line   63)
50330 * mtune <6>:                             M680x0 Options.     (line   70)
50331 * mtune <7>:                             IA-64 Options.      (line  116)
50332 * mtune <8>:                             i386 and x86-64 Options.
50333                                                              (line  189)
50334 * mtune <9>:                             DEC Alpha Options.  (line  259)
50335 * mtune <10>:                            CRIS Options.       (line   16)
50336 * mtune <11>:                            ARM Options.        (line  105)
50337 * mtune:                                 AArch64 Options.    (line   82)
50338 * muclibc:                               GNU/Linux Options.  (line   13)
50339 * muls:                                  Score Options.      (line   18)
50340 * multcost=NUMBER:                       SH Options.         (line  235)
50341 * multi_module:                          Darwin Options.     (line  196)
50342 * multilib-library-pic:                  FRV Options.        (line   89)
50343 * multiply-enabled:                      LM32 Options.       (line   15)
50344 * multiply_defined:                      Darwin Options.     (line  196)
50345 * multiply_defined_unused:               Darwin Options.     (line  196)
50346 * munaligned-access:                     ARM Options.        (line  309)
50347 * munaligned-doubles:                    SPARC Options.      (line   72)
50348 * municode:                              i386 and x86-64 Windows Options.
50349                                                              (line   30)
50350 * muninit-const-in-rodata:               MIPS Options.       (line  396)
50351 * munix:                                 VAX Options.        (line    9)
50352 * munix-asm:                             PDP-11 Options.     (line   68)
50353 * munsafe-dma:                           SPU Options.        (line   17)
50354 * mupdate:                               RS/6000 and PowerPC Options.
50355                                                              (line  344)
50356 * muser-enabled:                         LM32 Options.       (line   21)
50357 * musermode:                             SH Options.         (line  230)
50358 * mv850:                                 V850 Options.       (line   49)
50359 * mv850e:                                V850 Options.       (line   79)
50360 * mv850e1:                               V850 Options.       (line   70)
50361 * mv850e2:                               V850 Options.       (line   66)
50362 * mv850e2v3:                             V850 Options.       (line   61)
50363 * mv850e2v4:                             V850 Options.       (line   57)
50364 * mv850e3v5:                             V850 Options.       (line   52)
50365 * mv850es:                               V850 Options.       (line   75)
50366 * mv8plus:                               SPARC Options.      (line  187)
50367 * mveclibabi <1>:                        RS/6000 and PowerPC Options.
50368                                                              (line  766)
50369 * mveclibabi:                            i386 and x86-64 Options.
50370                                                              (line  692)
50371 * mvect8-ret-in-mem:                     i386 and x86-64 Options.
50372                                                              (line  423)
50373 * mvis:                                  SPARC Options.      (line  194)
50374 * mvis2:                                 SPARC Options.      (line  200)
50375 * mvis3:                                 SPARC Options.      (line  208)
50376 * mvliw-branch:                          FRV Options.        (line  164)
50377 * mvms-return-codes:                     VMS Options.        (line    9)
50378 * mvolatile-asm-stop:                    IA-64 Options.      (line   32)
50379 * mvr4130-align:                         MIPS Options.       (line  663)
50380 * mvrsave:                               RS/6000 and PowerPC Options.
50381                                                              (line  140)
50382 * mvsx:                                  RS/6000 and PowerPC Options.
50383                                                              (line  184)
50384 * mvxworks:                              RS/6000 and PowerPC Options.
50385                                                              (line  595)
50386 * mvzeroupper:                           i386 and x86-64 Options.
50387                                                              (line  602)
50388 * mwarn-cell-microcode:                  RS/6000 and PowerPC Options.
50389                                                              (line  146)
50390 * mwarn-dynamicstack:                    S/390 and zSeries Options.
50391                                                              (line  150)
50392 * mwarn-framesize:                       S/390 and zSeries Options.
50393                                                              (line  142)
50394 * mwarn-multiple-fast-interrupts:        RX Options.         (line  143)
50395 * mwarn-reloc:                           SPU Options.        (line   10)
50396 * mwide-bitfields:                       MCore Options.      (line   23)
50397 * mwin32:                                i386 and x86-64 Windows Options.
50398                                                              (line   35)
50399 * mwindows:                              i386 and x86-64 Windows Options.
50400                                                              (line   41)
50401 * mword-relocations:                     ARM Options.        (line  296)
50402 * mwords-little-endian:                  ARM Options.        (line   66)
50403 * mx32:                                  i386 and x86-64 Options.
50404                                                              (line  835)
50405 * mxgot <1>:                             MIPS Options.       (line  192)
50406 * mxgot:                                 M680x0 Options.     (line  319)
50407 * mxilinx-fpu:                           RS/6000 and PowerPC Options.
50408                                                              (line  317)
50409 * mxl-barrel-shift:                      MicroBlaze Options. (line   33)
50410 * mxl-compat:                            RS/6000 and PowerPC Options.
50411                                                              (line  253)
50412 * mxl-float-convert:                     MicroBlaze Options. (line   51)
50413 * mxl-float-sqrt:                        MicroBlaze Options. (line   54)
50414 * mxl-gp-opt:                            MicroBlaze Options. (line   45)
50415 * mxl-multiply-high:                     MicroBlaze Options. (line   48)
50416 * mxl-pattern-compare:                   MicroBlaze Options. (line   36)
50417 * mxl-reorder:                           MicroBlaze Options. (line   63)
50418 * mxl-soft-div:                          MicroBlaze Options. (line   30)
50419 * mxl-soft-mul:                          MicroBlaze Options. (line   27)
50420 * mxl-stack-check:                       MicroBlaze Options. (line   42)
50421 * myellowknife:                          RS/6000 and PowerPC Options.
50422                                                              (line  590)
50423 * mzarch:                                S/390 and zSeries Options.
50424                                                              (line   95)
50425 * mzda:                                  V850 Options.       (line   45)
50426 * mzdcbranch:                            SH Options.         (line  403)
50427 * mzero-extend:                          MMIX Options.       (line   27)
50428 * no-canonical-prefixes:                 Overall Options.    (line  334)
50429 * no-integrated-cpp:                     Preprocessor Options.
50430                                                              (line   34)
50431 * no-sysroot-suffix:                     Directory Options.  (line  112)
50432 * no_dead_strip_inits_and_terms:         Darwin Options.     (line  196)
50433 * noall_load:                            Darwin Options.     (line  196)
50434 * nocpp:                                 MIPS Options.       (line  494)
50435 * nodefaultlibs:                         Link Options.       (line   62)
50436 * nofixprebinding:                       Darwin Options.     (line  196)
50437 * nofpu:                                 RX Options.         (line   17)
50438 * nolibdld:                              HPPA Options.       (line  187)
50439 * nomultidefs:                           Darwin Options.     (line  196)
50440 * non-static:                            VxWorks Options.    (line   16)
50441 * noprebind:                             Darwin Options.     (line  196)
50442 * noseglinkedit:                         Darwin Options.     (line  196)
50443 * nostartfiles:                          Link Options.       (line   57)
50444 * nostdinc:                              Preprocessor Options.
50445                                                              (line  399)
50446 * nostdinc++ <1>:                        Preprocessor Options.
50447                                                              (line  404)
50448 * nostdinc++:                            C++ Dialect Options.
50449                                                              (line  348)
50450 * nostdlib:                              Link Options.       (line   74)
50451 * o:                                     Preprocessor Options.
50452                                                              (line   87)
50453 * O:                                     Optimize Options.   (line   39)
50454 * o:                                     Overall Options.    (line  192)
50455 * O0:                                    Optimize Options.   (line  128)
50456 * O1:                                    Optimize Options.   (line   39)
50457 * O2:                                    Optimize Options.   (line   83)
50458 * O3:                                    Optimize Options.   (line  121)
50459 * Ofast:                                 Optimize Options.   (line  142)
50460 * Og:                                    Optimize Options.   (line  149)
50461 * Os:                                    Optimize Options.   (line  132)
50462 * P:                                     Preprocessor Options.
50463                                                              (line  649)
50464 * p:                                     Debugging Options.  (line  328)
50465 * pagezero_size:                         Darwin Options.     (line  196)
50466 * param:                                 Optimize Options.   (line 2240)
50467 * pass-exit-codes:                       Overall Options.    (line  150)
50468 * pedantic <1>:                          Warnings and Errors.
50469                                                              (line   25)
50470 * pedantic <2>:                          Alternate Keywords. (line   30)
50471 * pedantic <3>:                          C Extensions.       (line    6)
50472 * pedantic <4>:                          Preprocessor Options.
50473                                                              (line  175)
50474 * pedantic <5>:                          Warning Options.    (line   73)
50475 * pedantic:                              Standards.          (line   16)
50476 * pedantic-errors <1>:                   Warnings and Errors.
50477                                                              (line   25)
50478 * pedantic-errors <2>:                   Non-bugs.           (line  216)
50479 * pedantic-errors <3>:                   Preprocessor Options.
50480                                                              (line  180)
50481 * pedantic-errors <4>:                   Warning Options.    (line  115)
50482 * pedantic-errors:                       Standards.          (line   16)
50483 * pg:                                    Debugging Options.  (line  334)
50484 * pie:                                   Link Options.       (line   99)
50485 * pipe:                                  Overall Options.    (line  215)
50486 * prebind:                               Darwin Options.     (line  196)
50487 * prebind_all_twolevel_modules:          Darwin Options.     (line  196)
50488 * print-file-name:                       Debugging Options.  (line 1313)
50489 * print-libgcc-file-name:                Debugging Options.  (line 1347)
50490 * print-multi-directory:                 Debugging Options.  (line 1319)
50491 * print-multi-lib:                       Debugging Options.  (line 1324)
50492 * print-multi-os-directory:              Debugging Options.  (line 1331)
50493 * print-multiarch:                       Debugging Options.  (line 1340)
50494 * print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
50495                                                              (line  203)
50496 * print-prog-name:                       Debugging Options.  (line 1344)
50497 * print-search-dirs:                     Debugging Options.  (line 1355)
50498 * print-sysroot:                         Debugging Options.  (line 1368)
50499 * print-sysroot-headers-suffix:          Debugging Options.  (line 1375)
50500 * private_bundle:                        Darwin Options.     (line  196)
50501 * pthread <1>:                           Solaris 2 Options.  (line   31)
50502 * pthread:                               RS/6000 and PowerPC Options.
50503                                                              (line  716)
50504 * pthreads:                              Solaris 2 Options.  (line   25)
50505 * Q:                                     Debugging Options.  (line  340)
50506 * Qn:                                    System V Options.   (line   18)
50507 * Qy:                                    System V Options.   (line   14)
50508 * rdynamic:                              Link Options.       (line  105)
50509 * read_only_relocs:                      Darwin Options.     (line  196)
50510 * remap:                                 Preprocessor Options.
50511                                                              (line  697)
50512 * s:                                     Link Options.       (line  112)
50513 * S <1>:                                 Link Options.       (line   20)
50514 * S:                                     Overall Options.    (line  175)
50515 * save-temps:                            Debugging Options.  (line 1222)
50516 * save-temps=obj:                        Debugging Options.  (line 1248)
50517 * sectalign:                             Darwin Options.     (line  196)
50518 * sectcreate:                            Darwin Options.     (line  196)
50519 * sectobjectsymbols:                     Darwin Options.     (line  196)
50520 * sectorder:                             Darwin Options.     (line  196)
50521 * seg1addr:                              Darwin Options.     (line  196)
50522 * seg_addr_table:                        Darwin Options.     (line  196)
50523 * seg_addr_table_filename:               Darwin Options.     (line  196)
50524 * segaddr:                               Darwin Options.     (line  196)
50525 * seglinkedit:                           Darwin Options.     (line  196)
50526 * segprot:                               Darwin Options.     (line  196)
50527 * segs_read_only_addr:                   Darwin Options.     (line  196)
50528 * segs_read_write_addr:                  Darwin Options.     (line  196)
50529 * shared:                                Link Options.       (line  121)
50530 * shared-libgcc:                         Link Options.       (line  129)
50531 * short-calls:                           Adapteva Epiphany Options.
50532                                                              (line   61)
50533 * sim:                                   CRIS Options.       (line   95)
50534 * sim2:                                  CRIS Options.       (line  101)
50535 * single_module:                         Darwin Options.     (line  196)
50536 * specs:                                 Directory Options.  (line   89)
50537 * static <1>:                            HPPA Options.       (line  191)
50538 * static <2>:                            Darwin Options.     (line  196)
50539 * static:                                Link Options.       (line  116)
50540 * static-libgcc:                         Link Options.       (line  129)
50541 * std <1>:                               Non-bugs.           (line  107)
50542 * std <2>:                               Other Builtins.     (line   22)
50543 * std <3>:                               C Dialect Options.  (line   47)
50544 * std:                                   Standards.          (line   16)
50545 * std=:                                  Preprocessor Options.
50546                                                              (line  338)
50547 * sub_library:                           Darwin Options.     (line  196)
50548 * sub_umbrella:                          Darwin Options.     (line  196)
50549 * symbolic:                              Link Options.       (line  193)
50550 * sysroot:                               Directory Options.  (line   97)
50551 * T:                                     Link Options.       (line  199)
50552 * target-help <1>:                       Preprocessor Options.
50553                                                              (line  702)
50554 * target-help:                           Overall Options.    (line  230)
50555 * threads:                               HPPA Options.       (line  204)
50556 * time:                                  Debugging Options.  (line 1263)
50557 * tno-android-cc:                        GNU/Linux Options.  (line   31)
50558 * tno-android-ld:                        GNU/Linux Options.  (line   35)
50559 * traditional <1>:                       Incompatibilities.  (line    6)
50560 * traditional:                           C Dialect Options.  (line  309)
50561 * traditional-cpp <1>:                   Preprocessor Options.
50562                                                              (line  680)
50563 * traditional-cpp:                       C Dialect Options.  (line  309)
50564 * trigraphs <1>:                         Preprocessor Options.
50565                                                              (line  684)
50566 * trigraphs:                             C Dialect Options.  (line  304)
50567 * twolevel_namespace:                    Darwin Options.     (line  196)
50568 * u:                                     Link Options.       (line  231)
50569 * U:                                     Preprocessor Options.
50570                                                              (line   69)
50571 * umbrella:                              Darwin Options.     (line  196)
50572 * undef:                                 Preprocessor Options.
50573                                                              (line   73)
50574 * undefined:                             Darwin Options.     (line  196)
50575 * unexported_symbols_list:               Darwin Options.     (line  196)
50576 * v <1>:                                 Preprocessor Options.
50577                                                              (line  706)
50578 * v:                                     Overall Options.    (line  203)
50579 * version <1>:                           Preprocessor Options.
50580                                                              (line  719)
50581 * version:                               Overall Options.    (line  338)
50582 * W:                                     Incompatibilities.  (line   64)
50583 * w:                                     Preprocessor Options.
50584                                                              (line  171)
50585 * W:                                     Warning Options.    (line  168)
50586 * w:                                     Warning Options.    (line   25)
50587 * Wa:                                    Assembler Options.  (line    9)
50588 * Wabi:                                  C++ Dialect Options.
50589                                                              (line  362)
50590 * Waddr-space-convert:                   AVR Options.        (line  217)
50591 * Waddress:                              Warning Options.    (line 1177)
50592 * Waggregate-return:                     Warning Options.    (line 1195)
50593 * Waggressive-loop-optimizations:        Warning Options.    (line 1200)
50594 * Wall <1>:                              Standard Libraries. (line    6)
50595 * Wall <2>:                              Preprocessor Options.
50596                                                              (line   93)
50597 * Wall:                                  Warning Options.    (line  119)
50598 * Warray-bounds:                         Warning Options.    (line  833)
50599 * Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
50600                                                              (line  157)
50601 * Wattributes:                           Warning Options.    (line 1205)
50602 * Wbad-function-cast:                    Warning Options.    (line 1051)
50603 * Wbuiltin-macro-redefined:              Warning Options.    (line 1211)
50604 * Wcast-align:                           Warning Options.    (line 1082)
50605 * Wcast-qual:                            Warning Options.    (line 1066)
50606 * Wchar-subscripts:                      Warning Options.    (line  207)
50607 * Wclobbered:                            Warning Options.    (line 1102)
50608 * Wcomment <1>:                          Preprocessor Options.
50609                                                              (line  101)
50610 * Wcomment:                              Warning Options.    (line  212)
50611 * Wcomments:                             Preprocessor Options.
50612                                                              (line  101)
50613 * Wconversion:                           Warning Options.    (line 1106)
50614 * Wconversion-null:                      Warning Options.    (line 1124)
50615 * Wctor-dtor-privacy:                    C++ Dialect Options.
50616                                                              (line  472)
50617 * Wdeclaration-after-statement:          Warning Options.    (line  966)
50618 * Wdelete-non-virtual-dtor:              C++ Dialect Options.
50619                                                              (line  479)
50620 * Wdeprecated:                           Warning Options.    (line 1326)
50621 * Wdeprecated-declarations:              Warning Options.    (line 1330)
50622 * Wdisabled-optimization:                Warning Options.    (line 1486)
50623 * Wdiv-by-zero:                          Warning Options.    (line  838)
50624 * Wdouble-promotion:                     Warning Options.    (line  236)
50625 * weak_reference_mismatches:             Darwin Options.     (line  196)
50626 * Weffc++:                               C++ Dialect Options.
50627                                                              (line  558)
50628 * Wempty-body:                           Warning Options.    (line 1135)
50629 * Wendif-labels <1>:                     Preprocessor Options.
50630                                                              (line  148)
50631 * Wendif-labels:                         Warning Options.    (line  976)
50632 * Wenum-compare:                         Warning Options.    (line 1139)
50633 * Werror <1>:                            Preprocessor Options.
50634                                                              (line  161)
50635 * Werror:                                Warning Options.    (line   28)
50636 * Werror=:                               Warning Options.    (line   31)
50637 * Wextra:                                Warning Options.    (line  168)
50638 * Wfatal-errors:                         Warning Options.    (line   48)
50639 * Wfloat-equal:                          Warning Options.    (line  865)
50640 * Wformat <1>:                           Function Attributes.
50641                                                              (line  419)
50642 * Wformat:                               Warning Options.    (line  255)
50643 * Wformat-contains-nul:                  Warning Options.    (line  292)
50644 * Wformat-extra-args:                    Warning Options.    (line  296)
50645 * Wformat-nonliteral <1>:                Function Attributes.
50646                                                              (line  485)
50647 * Wformat-nonliteral:                    Warning Options.    (line  320)
50648 * Wformat-security:                      Warning Options.    (line  325)
50649 * Wformat-y2k:                           Warning Options.    (line  337)
50650 * Wformat-zero-length:                   Warning Options.    (line  310)
50651 * Wformat=:                              Warning Options.    (line  255)
50652 * Wframe-larger-than:                    Warning Options.    (line  990)
50653 * Wfree-nonheap-object:                  Warning Options.    (line  999)
50654 * whatsloaded:                           Darwin Options.     (line  196)
50655 * whyload:                               Darwin Options.     (line  196)
50656 * Wignored-qualifiers:                   Warning Options.    (line  377)
50657 * Wimplicit:                             Warning Options.    (line  373)
50658 * Wimplicit-function-declaration:        Warning Options.    (line  367)
50659 * Wimplicit-int:                         Warning Options.    (line  363)
50660 * Winherited-variadic-ctor:              Warning Options.    (line 1396)
50661 * Winit-self:                            Warning Options.    (line  348)
50662 * Winline <1>:                           Inline.             (line   63)
50663 * Winline:                               Warning Options.    (line 1401)
50664 * Wint-to-pointer-cast:                  Warning Options.    (line 1428)
50665 * Winvalid-offsetof:                     Warning Options.    (line 1414)
50666 * Winvalid-pch:                          Warning Options.    (line 1437)
50667 * Wjump-misses-init:                     Warning Options.    (line 1145)
50668 * Wl:                                    Link Options.       (line  223)
50669 * Wlarger-than-LEN:                      Warning Options.    (line  987)
50670 * Wlarger-than=LEN:                      Warning Options.    (line  987)
50671 * Wliteral-suffix:                       C++ Dialect Options.
50672                                                              (line  486)
50673 * Wlogical-op:                           Warning Options.    (line 1190)
50674 * Wlong-long:                            Warning Options.    (line 1441)
50675 * Wmain:                                 Warning Options.    (line  388)
50676 * Wmaybe-uninitialized:                  Warning Options.    (line  648)
50677 * Wmissing-braces:                       Warning Options.    (line  395)
50678 * Wmissing-declarations:                 Warning Options.    (line 1250)
50679 * Wmissing-field-initializers:           Warning Options.    (line 1260)
50680 * Wmissing-format-attribute:             Warning Options.    (line  812)
50681 * Wmissing-include-dirs:                 Warning Options.    (line  406)
50682 * Wmissing-parameter-type:               Warning Options.    (line 1232)
50683 * Wmissing-prototypes:                   Warning Options.    (line 1240)
50684 * Wmultichar:                            Warning Options.    (line 1278)
50685 * Wnarrowing:                            C++ Dialect Options.
50686                                                              (line  507)
50687 * Wnested-externs:                       Warning Options.    (line 1393)
50688 * Wno-abi:                               C++ Dialect Options.
50689                                                              (line  362)
50690 * Wno-address:                           Warning Options.    (line 1177)
50691 * Wno-aggregate-return:                  Warning Options.    (line 1195)
50692 * Wno-aggressive-loop-optimizations:     Warning Options.    (line 1200)
50693 * Wno-all:                               Warning Options.    (line  119)
50694 * Wno-array-bounds:                      Warning Options.    (line  833)
50695 * Wno-assign-intercept:                  Objective-C and Objective-C++ Dialect Options.
50696                                                              (line  157)
50697 * Wno-attributes:                        Warning Options.    (line 1205)
50698 * Wno-bad-function-cast:                 Warning Options.    (line 1051)
50699 * Wno-builtin-macro-redefined:           Warning Options.    (line 1211)
50700 * Wno-cast-align:                        Warning Options.    (line 1082)
50701 * Wno-cast-qual:                         Warning Options.    (line 1066)
50702 * Wno-char-subscripts:                   Warning Options.    (line  207)
50703 * Wno-clobbered:                         Warning Options.    (line 1102)
50704 * Wno-comment:                           Warning Options.    (line  212)
50705 * Wno-conversion:                        Warning Options.    (line 1106)
50706 * Wno-conversion-null:                   Warning Options.    (line 1124)
50707 * Wno-coverage-mismatch:                 Warning Options.    (line  217)
50708 * Wno-ctor-dtor-privacy:                 C++ Dialect Options.
50709                                                              (line  472)
50710 * Wno-declaration-after-statement:       Warning Options.    (line  966)
50711 * Wno-delete-non-virtual-dtor:           C++ Dialect Options.
50712                                                              (line  479)
50713 * Wno-deprecated:                        Warning Options.    (line 1326)
50714 * Wno-deprecated-declarations:           Warning Options.    (line 1330)
50715 * Wno-disabled-optimization:             Warning Options.    (line 1486)
50716 * Wno-div-by-zero:                       Warning Options.    (line  838)
50717 * Wno-double-promotion:                  Warning Options.    (line  236)
50718 * Wno-effc++:                            C++ Dialect Options.
50719                                                              (line  558)
50720 * Wno-empty-body:                        Warning Options.    (line 1135)
50721 * Wno-endif-labels:                      Warning Options.    (line  976)
50722 * Wno-enum-compare:                      Warning Options.    (line 1139)
50723 * Wno-error:                             Warning Options.    (line   28)
50724 * Wno-error=:                            Warning Options.    (line   31)
50725 * Wno-extra:                             Warning Options.    (line  168)
50726 * Wno-fatal-errors:                      Warning Options.    (line   48)
50727 * Wno-float-equal:                       Warning Options.    (line  865)
50728 * Wno-format:                            Warning Options.    (line  255)
50729 * Wno-format-contains-nul:               Warning Options.    (line  292)
50730 * Wno-format-extra-args:                 Warning Options.    (line  296)
50731 * Wno-format-nonliteral:                 Warning Options.    (line  320)
50732 * Wno-format-security:                   Warning Options.    (line  325)
50733 * Wno-format-y2k:                        Warning Options.    (line  337)
50734 * Wno-format-zero-length:                Warning Options.    (line  310)
50735 * Wno-free-nonheap-object:               Warning Options.    (line  999)
50736 * Wno-ignored-qualifiers:                Warning Options.    (line  377)
50737 * Wno-implicit:                          Warning Options.    (line  373)
50738 * Wno-implicit-function-declaration:     Warning Options.    (line  367)
50739 * Wno-implicit-int:                      Warning Options.    (line  363)
50740 * Wno-inherited-variadic-ctor:           Warning Options.    (line 1396)
50741 * Wno-init-self:                         Warning Options.    (line  348)
50742 * Wno-inline:                            Warning Options.    (line 1401)
50743 * Wno-int-to-pointer-cast:               Warning Options.    (line 1428)
50744 * Wno-invalid-offsetof:                  Warning Options.    (line 1414)
50745 * Wno-invalid-pch:                       Warning Options.    (line 1437)
50746 * Wno-jump-misses-init:                  Warning Options.    (line 1145)
50747 * Wno-literal-suffix:                    C++ Dialect Options.
50748                                                              (line  486)
50749 * Wno-logical-op:                        Warning Options.    (line 1190)
50750 * Wno-long-long:                         Warning Options.    (line 1441)
50751 * Wno-main:                              Warning Options.    (line  388)
50752 * Wno-maybe-uninitialized:               Warning Options.    (line  648)
50753 * Wno-missing-braces:                    Warning Options.    (line  395)
50754 * Wno-missing-declarations:              Warning Options.    (line 1250)
50755 * Wno-missing-field-initializers:        Warning Options.    (line 1260)
50756 * Wno-missing-format-attribute:          Warning Options.    (line  812)
50757 * Wno-missing-include-dirs:              Warning Options.    (line  406)
50758 * Wno-missing-parameter-type:            Warning Options.    (line 1232)
50759 * Wno-missing-prototypes:                Warning Options.    (line 1240)
50760 * Wno-mudflap:                           Warning Options.    (line 1506)
50761 * Wno-multichar:                         Warning Options.    (line 1278)
50762 * Wno-narrowing:                         C++ Dialect Options.
50763                                                              (line  507)
50764 * Wno-nested-externs:                    Warning Options.    (line 1393)
50765 * Wno-noexcept:                          C++ Dialect Options.
50766                                                              (line  520)
50767 * Wno-non-template-friend:               C++ Dialect Options.
50768                                                              (line  596)
50769 * Wno-non-virtual-dtor:                  C++ Dialect Options.
50770                                                              (line  526)
50771 * Wno-nonnull:                           Warning Options.    (line  341)
50772 * Wno-old-style-cast:                    C++ Dialect Options.
50773                                                              (line  612)
50774 * Wno-old-style-declaration:             Warning Options.    (line 1222)
50775 * Wno-old-style-definition:              Warning Options.    (line 1228)
50776 * Wno-overflow:                          Warning Options.    (line 1336)
50777 * Wno-overlength-strings:                Warning Options.    (line 1510)
50778 * Wno-overloaded-virtual:                C++ Dialect Options.
50779                                                              (line  618)
50780 * Wno-override-init:                     Warning Options.    (line 1339)
50781 * Wno-packed:                            Warning Options.    (line 1347)
50782 * Wno-packed-bitfield-compat:            Warning Options.    (line 1364)
50783 * Wno-padded:                            Warning Options.    (line 1381)
50784 * Wno-parentheses:                       Warning Options.    (line  409)
50785 * Wno-pedantic-ms-format:                Warning Options.    (line 1031)
50786 * Wno-pmf-conversions <1>:               Bound member functions.
50787                                                              (line   35)
50788 * Wno-pmf-conversions:                   C++ Dialect Options.
50789                                                              (line  637)
50790 * Wno-pointer-arith:                     Warning Options.    (line 1037)
50791 * Wno-pointer-sign:                      Warning Options.    (line 1495)
50792 * Wno-pointer-to-int-cast:               Warning Options.    (line 1433)
50793 * Wno-pragmas:                           Warning Options.    (line  698)
50794 * Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
50795                                                              (line  161)
50796 * Wno-redundant-decls:                   Warning Options.    (line 1388)
50797 * Wno-reorder:                           C++ Dialect Options.
50798                                                              (line  533)
50799 * Wno-return-local-addr:                 Warning Options.    (line  504)
50800 * Wno-return-type:                       Warning Options.    (line  508)
50801 * Wno-selector:                          Objective-C and Objective-C++ Dialect Options.
50802                                                              (line  171)
50803 * Wno-sequence-point:                    Warning Options.    (line  458)
50804 * Wno-shadow:                            Warning Options.    (line  980)
50805 * Wno-sign-compare:                      Warning Options.    (line 1156)
50806 * Wno-sign-conversion:                   Warning Options.    (line 1163)
50807 * Wno-sign-promo:                        C++ Dialect Options.
50808                                                              (line  641)
50809 * Wno-sizeof-pointer-memaccess:          Warning Options.    (line 1169)
50810 * Wno-stack-protector:                   Warning Options.    (line 1501)
50811 * Wno-strict-aliasing:                   Warning Options.    (line  703)
50812 * Wno-strict-null-sentinel:              C++ Dialect Options.
50813                                                              (line  588)
50814 * Wno-strict-overflow:                   Warning Options.    (line  743)
50815 * Wno-strict-prototypes:                 Warning Options.    (line 1216)
50816 * Wno-strict-selector-match:             Objective-C and Objective-C++ Dialect Options.
50817                                                              (line  183)
50818 * Wno-suggest-attribute=:                Warning Options.    (line  793)
50819 * Wno-suggest-attribute=const:           Warning Options.    (line  799)
50820 * Wno-suggest-attribute=format:          Warning Options.    (line  812)
50821 * Wno-suggest-attribute=noreturn:        Warning Options.    (line  799)
50822 * Wno-suggest-attribute=pure:            Warning Options.    (line  799)
50823 * Wno-switch:                            Warning Options.    (line  523)
50824 * Wno-switch-default:                    Warning Options.    (line  531)
50825 * Wno-switch-enum:                       Warning Options.    (line  534)
50826 * Wno-sync-nand:                         Warning Options.    (line  543)
50827 * Wno-system-headers:                    Warning Options.    (line  843)
50828 * Wno-traditional:                       Warning Options.    (line  880)
50829 * Wno-traditional-conversion:            Warning Options.    (line  958)
50830 * Wno-trampolines:                       Warning Options.    (line  854)
50831 * Wno-trigraphs:                         Warning Options.    (line  548)
50832 * Wno-type-limits:                       Warning Options.    (line 1044)
50833 * Wno-undeclared-selector:               Objective-C and Objective-C++ Dialect Options.
50834                                                              (line  191)
50835 * Wno-undef:                             Warning Options.    (line  973)
50836 * Wno-uninitialized:                     Warning Options.    (line  625)
50837 * Wno-unknown-pragmas:                   Warning Options.    (line  691)
50838 * Wno-unsafe-loop-optimizations:         Warning Options.    (line 1025)
50839 * Wno-unused:                            Warning Options.    (line  618)
50840 * Wno-unused-but-set-parameter:          Warning Options.    (line  553)
50841 * Wno-unused-but-set-variable:           Warning Options.    (line  562)
50842 * Wno-unused-function:                   Warning Options.    (line  572)
50843 * Wno-unused-label:                      Warning Options.    (line  577)
50844 * Wno-unused-parameter:                  Warning Options.    (line  588)
50845 * Wno-unused-result:                     Warning Options.    (line  595)
50846 * Wno-unused-value:                      Warning Options.    (line  608)
50847 * Wno-unused-variable:                   Warning Options.    (line  600)
50848 * Wno-useless-cast:                      Warning Options.    (line 1132)
50849 * Wno-varargs:                           Warning Options.    (line 1452)
50850 * Wno-variadic-macros:                   Warning Options.    (line 1446)
50851 * Wno-vector-operation-performance:      Warning Options.    (line 1457)
50852 * Wno-virtual-move-assign:               Warning Options.    (line 1467)
50853 * Wno-vla:                               Warning Options.    (line 1476)
50854 * Wno-volatile-register-var:             Warning Options.    (line 1480)
50855 * Wno-write-strings:                     Warning Options.    (line 1088)
50856 * Wno-zero-as-null-pointer-constant:     Warning Options.    (line 1128)
50857 * Wnoexcept:                             C++ Dialect Options.
50858                                                              (line  520)
50859 * Wnon-template-friend:                  C++ Dialect Options.
50860                                                              (line  596)
50861 * Wnon-virtual-dtor:                     C++ Dialect Options.
50862                                                              (line  526)
50863 * Wnonnull:                              Warning Options.    (line  341)
50864 * Wnormalized=:                          Warning Options.    (line 1284)
50865 * Wold-style-cast:                       C++ Dialect Options.
50866                                                              (line  612)
50867 * Wold-style-declaration:                Warning Options.    (line 1222)
50868 * Wold-style-definition:                 Warning Options.    (line 1228)
50869 * Woverflow:                             Warning Options.    (line 1336)
50870 * Woverlength-strings:                   Warning Options.    (line 1510)
50871 * Woverloaded-virtual:                   C++ Dialect Options.
50872                                                              (line  618)
50873 * Woverride-init:                        Warning Options.    (line 1339)
50874 * Wp:                                    Preprocessor Options.
50875                                                              (line   14)
50876 * Wpacked:                               Warning Options.    (line 1347)
50877 * Wpacked-bitfield-compat:               Warning Options.    (line 1364)
50878 * Wpadded:                               Warning Options.    (line 1381)
50879 * Wparentheses:                          Warning Options.    (line  409)
50880 * Wpedantic:                             Warning Options.    (line   73)
50881 * Wpedantic-ms-format:                   Warning Options.    (line 1031)
50882 * Wpmf-conversions:                      C++ Dialect Options.
50883                                                              (line  637)
50884 * Wpointer-arith <1>:                    Pointer Arith.      (line   13)
50885 * Wpointer-arith:                        Warning Options.    (line 1037)
50886 * Wpointer-sign:                         Warning Options.    (line 1495)
50887 * Wpointer-to-int-cast:                  Warning Options.    (line 1433)
50888 * Wpragmas:                              Warning Options.    (line  698)
50889 * Wprotocol:                             Objective-C and Objective-C++ Dialect Options.
50890                                                              (line  161)
50891 * wrapper:                               Overall Options.    (line  341)
50892 * Wredundant-decls:                      Warning Options.    (line 1388)
50893 * Wreorder:                              C++ Dialect Options.
50894                                                              (line  533)
50895 * Wreturn-local-addr:                    Warning Options.    (line  504)
50896 * Wreturn-type:                          Warning Options.    (line  508)
50897 * Wselector:                             Objective-C and Objective-C++ Dialect Options.
50898                                                              (line  171)
50899 * Wsequence-point:                       Warning Options.    (line  458)
50900 * Wshadow:                               Warning Options.    (line  980)
50901 * Wsign-compare:                         Warning Options.    (line 1156)
50902 * Wsign-conversion:                      Warning Options.    (line 1163)
50903 * Wsign-promo:                           C++ Dialect Options.
50904                                                              (line  641)
50905 * Wsizeof-pointer-memaccess:             Warning Options.    (line 1169)
50906 * Wstack-protector:                      Warning Options.    (line 1501)
50907 * Wstack-usage:                          Warning Options.    (line 1003)
50908 * Wstrict-aliasing:                      Warning Options.    (line  703)
50909 * Wstrict-aliasing=n:                    Warning Options.    (line  711)
50910 * Wstrict-null-sentinel:                 C++ Dialect Options.
50911                                                              (line  588)
50912 * Wstrict-overflow:                      Warning Options.    (line  743)
50913 * Wstrict-prototypes:                    Warning Options.    (line 1216)
50914 * Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
50915                                                              (line  183)
50916 * Wsuggest-attribute=:                   Warning Options.    (line  793)
50917 * Wsuggest-attribute=const:              Warning Options.    (line  799)
50918 * Wsuggest-attribute=format:             Warning Options.    (line  812)
50919 * Wsuggest-attribute=noreturn:           Warning Options.    (line  799)
50920 * Wsuggest-attribute=pure:               Warning Options.    (line  799)
50921 * Wswitch:                               Warning Options.    (line  523)
50922 * Wswitch-default:                       Warning Options.    (line  531)
50923 * Wswitch-enum:                          Warning Options.    (line  534)
50924 * Wsync-nand:                            Warning Options.    (line  543)
50925 * Wsystem-headers <1>:                   Preprocessor Options.
50926                                                              (line  165)
50927 * Wsystem-headers:                       Warning Options.    (line  843)
50928 * Wtraditional <1>:                      Preprocessor Options.
50929                                                              (line  118)
50930 * Wtraditional:                          Warning Options.    (line  880)
50931 * Wtraditional-conversion:               Warning Options.    (line  958)
50932 * Wtrampolines:                          Warning Options.    (line  854)
50933 * Wtrigraphs <1>:                        Preprocessor Options.
50934                                                              (line  106)
50935 * Wtrigraphs:                            Warning Options.    (line  548)
50936 * Wtype-limits:                          Warning Options.    (line 1044)
50937 * Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
50938                                                              (line  191)
50939 * Wundef <1>:                            Preprocessor Options.
50940                                                              (line  124)
50941 * Wundef:                                Warning Options.    (line  973)
50942 * Wuninitialized:                        Warning Options.    (line  625)
50943 * Wunknown-pragmas:                      Warning Options.    (line  691)
50944 * Wunsafe-loop-optimizations:            Warning Options.    (line 1025)
50945 * Wunsuffixed-float-constants:           Warning Options.    (line 1525)
50946 * Wunused:                               Warning Options.    (line  618)
50947 * Wunused-but-set-parameter:             Warning Options.    (line  553)
50948 * Wunused-but-set-variable:              Warning Options.    (line  562)
50949 * Wunused-function:                      Warning Options.    (line  572)
50950 * Wunused-label:                         Warning Options.    (line  577)
50951 * Wunused-local-typedefs:                Warning Options.    (line  584)
50952 * Wunused-macros:                        Preprocessor Options.
50953                                                              (line  129)
50954 * Wunused-parameter:                     Warning Options.    (line  588)
50955 * Wunused-result:                        Warning Options.    (line  595)
50956 * Wunused-value:                         Warning Options.    (line  608)
50957 * Wunused-variable:                      Warning Options.    (line  600)
50958 * Wuseless-cast:                         Warning Options.    (line 1132)
50959 * Wvarargs:                              Warning Options.    (line 1452)
50960 * Wvariadic-macros:                      Warning Options.    (line 1446)
50961 * Wvector-operation-performance:         Warning Options.    (line 1457)
50962 * Wvirtual-move-assign:                  Warning Options.    (line 1467)
50963 * Wvla:                                  Warning Options.    (line 1476)
50964 * Wvolatile-register-var:                Warning Options.    (line 1480)
50965 * Wwrite-strings:                        Warning Options.    (line 1088)
50966 * Wzero-as-null-pointer-constant:        Warning Options.    (line 1128)
50967 * x <1>:                                 Preprocessor Options.
50968                                                              (line  322)
50969 * x:                                     Overall Options.    (line  126)
50970 * Xassembler:                            Assembler Options.  (line   13)
50971 * Xbind-lazy:                            VxWorks Options.    (line   26)
50972 * Xbind-now:                             VxWorks Options.    (line   30)
50973 * Xlinker:                               Link Options.       (line  205)
50974 * Xpreprocessor:                         Preprocessor Options.
50975                                                              (line   25)
50976 * Ym:                                    System V Options.   (line   26)
50977 * YP:                                    System V Options.   (line   22)
50978
50979 \1f
50980 File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
50981
50982 Keyword Index
50983 *************
50984
50985 \0\b[index\0\b]
50986 * Menu:
50987
50988 * ! in constraint:                       Multi-Alternative.  (line   33)
50989 * # in constraint:                       Modifiers.          (line   57)
50990 * #pragma:                               Pragmas.            (line    6)
50991 * #pragma implementation:                C++ Interface.      (line   39)
50992 * #pragma implementation, implied:       C++ Interface.      (line   46)
50993 * #pragma interface:                     C++ Interface.      (line   20)
50994 * #pragma, reason for not using:         Function Attributes.
50995                                                              (line 1870)
50996 * $:                                     Dollar Signs.       (line    6)
50997 * % in constraint:                       Modifiers.          (line   45)
50998 * %include:                              Spec Files.         (line   27)
50999 * %include_noerr:                        Spec Files.         (line   31)
51000 * %rename:                               Spec Files.         (line   35)
51001 * & in constraint:                       Modifiers.          (line   25)
51002 * ':                                     Incompatibilities.  (line  116)
51003 * * in constraint:                       Modifiers.          (line   62)
51004 * *__builtin_assume_aligned:             Other Builtins.     (line  339)
51005 * + in constraint:                       Modifiers.          (line   12)
51006 * -lgcc, use with -nodefaultlibs:        Link Options.       (line   85)
51007 * -lgcc, use with -nostdlib:             Link Options.       (line   85)
51008 * -march feature modifiers:              AArch64 Options.    (line   92)
51009 * -mcpu feature modifiers:               AArch64 Options.    (line   92)
51010 * -nodefaultlibs and unresolved references: Link Options.    (line   85)
51011 * -nostdlib and unresolved references:   Link Options.       (line   85)
51012 * .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
51013                                                              (line  662)
51014 * //:                                    C++ Comments.       (line    6)
51015 * 0 in constraint:                       Simple Constraints. (line  127)
51016 * < in constraint:                       Simple Constraints. (line   48)
51017 * = in constraint:                       Modifiers.          (line    8)
51018 * > in constraint:                       Simple Constraints. (line   61)
51019 * ? in constraint:                       Multi-Alternative.  (line   27)
51020 * ?: extensions:                         Conditionals.       (line    6)
51021 * ?: side effect:                        Conditionals.       (line   20)
51022 * _ in variables in macros:              Typeof.             (line   46)
51023 * __atomic_add_fetch:                    __atomic Builtins.  (line  169)
51024 * __atomic_always_lock_free:             __atomic Builtins.  (line  242)
51025 * __atomic_and_fetch:                    __atomic Builtins.  (line  173)
51026 * __atomic_clear:                        __atomic Builtins.  (line  219)
51027 * __atomic_compare_exchange:             __atomic Builtins.  (line  161)
51028 * __atomic_compare_exchange_n:           __atomic Builtins.  (line  138)
51029 * __atomic_exchange:                     __atomic Builtins.  (line  130)
51030 * __atomic_exchange_n:                   __atomic Builtins.  (line  119)
51031 * __atomic_fetch_add:                    __atomic Builtins.  (line  189)
51032 * __atomic_fetch_and:                    __atomic Builtins.  (line  193)
51033 * __atomic_fetch_nand:                   __atomic Builtins.  (line  199)
51034 * __atomic_fetch_or:                     __atomic Builtins.  (line  197)
51035 * __atomic_fetch_sub:                    __atomic Builtins.  (line  191)
51036 * __atomic_fetch_xor:                    __atomic Builtins.  (line  195)
51037 * __atomic_is_lock_free:                 __atomic Builtins.  (line  256)
51038 * __atomic_load:                         __atomic Builtins.  (line   98)
51039 * __atomic_load_n:                       __atomic Builtins.  (line   89)
51040 * __atomic_nand_fetch:                   __atomic Builtins.  (line  179)
51041 * __atomic_or_fetch:                     __atomic Builtins.  (line  177)
51042 * __atomic_signal_fence:                 __atomic Builtins.  (line  234)
51043 * __atomic_store:                        __atomic Builtins.  (line  113)
51044 * __atomic_store_n:                      __atomic Builtins.  (line  104)
51045 * __atomic_sub_fetch:                    __atomic Builtins.  (line  171)
51046 * __atomic_test_and_set:                 __atomic Builtins.  (line  210)
51047 * __atomic_thread_fence:                 __atomic Builtins.  (line  227)
51048 * __atomic_xor_fetch:                    __atomic Builtins.  (line  175)
51049 * __builtin___clear_cache:               Other Builtins.     (line  372)
51050 * __builtin___fprintf_chk:               Object Size Checking.
51051                                                              (line    6)
51052 * __builtin___memcpy_chk:                Object Size Checking.
51053                                                              (line    6)
51054 * __builtin___memmove_chk:               Object Size Checking.
51055                                                              (line    6)
51056 * __builtin___mempcpy_chk:               Object Size Checking.
51057                                                              (line    6)
51058 * __builtin___memset_chk:                Object Size Checking.
51059                                                              (line    6)
51060 * __builtin___printf_chk:                Object Size Checking.
51061                                                              (line    6)
51062 * __builtin___snprintf_chk:              Object Size Checking.
51063                                                              (line    6)
51064 * __builtin___sprintf_chk:               Object Size Checking.
51065                                                              (line    6)
51066 * __builtin___stpcpy_chk:                Object Size Checking.
51067                                                              (line    6)
51068 * __builtin___strcat_chk:                Object Size Checking.
51069                                                              (line    6)
51070 * __builtin___strcpy_chk:                Object Size Checking.
51071                                                              (line    6)
51072 * __builtin___strncat_chk:               Object Size Checking.
51073                                                              (line    6)
51074 * __builtin___strncpy_chk:               Object Size Checking.
51075                                                              (line    6)
51076 * __builtin___vfprintf_chk:              Object Size Checking.
51077                                                              (line    6)
51078 * __builtin___vprintf_chk:               Object Size Checking.
51079                                                              (line    6)
51080 * __builtin___vsnprintf_chk:             Object Size Checking.
51081                                                              (line    6)
51082 * __builtin___vsprintf_chk:              Object Size Checking.
51083                                                              (line    6)
51084 * __builtin_apply:                       Constructing Calls. (line   31)
51085 * __builtin_apply_args:                  Constructing Calls. (line   20)
51086 * __builtin_bswap16:                     Other Builtins.     (line  603)
51087 * __builtin_bswap32:                     Other Builtins.     (line  607)
51088 * __builtin_bswap64:                     Other Builtins.     (line  611)
51089 * __builtin_choose_expr:                 Other Builtins.     (line  157)
51090 * __builtin_clrsb:                       Other Builtins.     (line  532)
51091 * __builtin_clrsbl:                      Other Builtins.     (line  555)
51092 * __builtin_clrsbll:                     Other Builtins.     (line  578)
51093 * __builtin_clz:                         Other Builtins.     (line  524)
51094 * __builtin_clzl:                        Other Builtins.     (line  547)
51095 * __builtin_clzll:                       Other Builtins.     (line  570)
51096 * __builtin_complex:                     Other Builtins.     (line  197)
51097 * __builtin_constant_p:                  Other Builtins.     (line  207)
51098 * __builtin_cpu_init:                    X86 Built-in Functions.
51099                                                              (line   63)
51100 * __builtin_cpu_is:                      X86 Built-in Functions.
51101                                                              (line   92)
51102 * __builtin_cpu_supports:                X86 Built-in Functions.
51103                                                              (line  161)
51104 * __builtin_ctz:                         Other Builtins.     (line  528)
51105 * __builtin_ctzl:                        Other Builtins.     (line  551)
51106 * __builtin_ctzll:                       Other Builtins.     (line  574)
51107 * __builtin_expect:                      Other Builtins.     (line  257)
51108 * __builtin_extract_return_addr:         Return Address.     (line   36)
51109 * __builtin_ffs:                         Other Builtins.     (line  520)
51110 * __builtin_ffsl:                        Other Builtins.     (line  543)
51111 * __builtin_ffsll:                       Other Builtins.     (line  566)
51112 * __builtin_FILE:                        Other Builtins.     (line  366)
51113 * __builtin_fpclassify:                  Other Builtins.     (line    6)
51114 * __builtin_frame_address:               Return Address.     (line   49)
51115 * __builtin_frob_return_address:         Return Address.     (line   45)
51116 * __builtin_FUNCTION:                    Other Builtins.     (line  361)
51117 * __builtin_huge_val:                    Other Builtins.     (line  423)
51118 * __builtin_huge_valf:                   Other Builtins.     (line  428)
51119 * __builtin_huge_vall:                   Other Builtins.     (line  431)
51120 * __builtin_huge_valq:                   X86 Built-in Functions.
51121                                                              (line   57)
51122 * __builtin_inf:                         Other Builtins.     (line  446)
51123 * __builtin_infd128:                     Other Builtins.     (line  456)
51124 * __builtin_infd32:                      Other Builtins.     (line  450)
51125 * __builtin_infd64:                      Other Builtins.     (line  453)
51126 * __builtin_inff:                        Other Builtins.     (line  460)
51127 * __builtin_infl:                        Other Builtins.     (line  465)
51128 * __builtin_infq:                        X86 Built-in Functions.
51129                                                              (line   53)
51130 * __builtin_isfinite:                    Other Builtins.     (line    6)
51131 * __builtin_isgreater:                   Other Builtins.     (line    6)
51132 * __builtin_isgreaterequal:              Other Builtins.     (line    6)
51133 * __builtin_isinf_sign:                  Other Builtins.     (line    6)
51134 * __builtin_isless:                      Other Builtins.     (line    6)
51135 * __builtin_islessequal:                 Other Builtins.     (line    6)
51136 * __builtin_islessgreater:               Other Builtins.     (line    6)
51137 * __builtin_isnormal:                    Other Builtins.     (line    6)
51138 * __builtin_isunordered:                 Other Builtins.     (line    6)
51139 * __builtin_LINE:                        Other Builtins.     (line  356)
51140 * __builtin_nan:                         Other Builtins.     (line  476)
51141 * __builtin_nand128:                     Other Builtins.     (line  498)
51142 * __builtin_nand32:                      Other Builtins.     (line  492)
51143 * __builtin_nand64:                      Other Builtins.     (line  495)
51144 * __builtin_nanf:                        Other Builtins.     (line  502)
51145 * __builtin_nanl:                        Other Builtins.     (line  505)
51146 * __builtin_nans:                        Other Builtins.     (line  509)
51147 * __builtin_nansf:                       Other Builtins.     (line  513)
51148 * __builtin_nansl:                       Other Builtins.     (line  516)
51149 * __builtin_object_size:                 Object Size Checking.
51150                                                              (line    6)
51151 * __builtin_offsetof:                    Offsetof.           (line    6)
51152 * __builtin_parity:                      Other Builtins.     (line  540)
51153 * __builtin_parityl:                     Other Builtins.     (line  562)
51154 * __builtin_parityll:                    Other Builtins.     (line  586)
51155 * __builtin_popcount:                    Other Builtins.     (line  537)
51156 * __builtin_popcountl:                   Other Builtins.     (line  558)
51157 * __builtin_popcountll:                  Other Builtins.     (line  582)
51158 * __builtin_powi:                        Other Builtins.     (line    6)
51159 * __builtin_powif:                       Other Builtins.     (line    6)
51160 * __builtin_powil:                       Other Builtins.     (line    6)
51161 * __builtin_prefetch:                    Other Builtins.     (line  384)
51162 * __builtin_return:                      Constructing Calls. (line   48)
51163 * __builtin_return_address:              Return Address.     (line   11)
51164 * __builtin_rx_brk:                      RX Built-in Functions.
51165                                                              (line   11)
51166 * __builtin_rx_clrpsw:                   RX Built-in Functions.
51167                                                              (line   14)
51168 * __builtin_rx_int:                      RX Built-in Functions.
51169                                                              (line   18)
51170 * __builtin_rx_machi:                    RX Built-in Functions.
51171                                                              (line   22)
51172 * __builtin_rx_maclo:                    RX Built-in Functions.
51173                                                              (line   27)
51174 * __builtin_rx_mulhi:                    RX Built-in Functions.
51175                                                              (line   32)
51176 * __builtin_rx_mullo:                    RX Built-in Functions.
51177                                                              (line   37)
51178 * __builtin_rx_mvfachi:                  RX Built-in Functions.
51179                                                              (line   42)
51180 * __builtin_rx_mvfacmi:                  RX Built-in Functions.
51181                                                              (line   46)
51182 * __builtin_rx_mvfc:                     RX Built-in Functions.
51183                                                              (line   50)
51184 * __builtin_rx_mvtachi:                  RX Built-in Functions.
51185                                                              (line   54)
51186 * __builtin_rx_mvtaclo:                  RX Built-in Functions.
51187                                                              (line   58)
51188 * __builtin_rx_mvtc:                     RX Built-in Functions.
51189                                                              (line   62)
51190 * __builtin_rx_mvtipl:                   RX Built-in Functions.
51191                                                              (line   66)
51192 * __builtin_rx_racw:                     RX Built-in Functions.
51193                                                              (line   70)
51194 * __builtin_rx_revw:                     RX Built-in Functions.
51195                                                              (line   74)
51196 * __builtin_rx_rmpa:                     RX Built-in Functions.
51197                                                              (line   79)
51198 * __builtin_rx_round:                    RX Built-in Functions.
51199                                                              (line   83)
51200 * __builtin_rx_sat:                      RX Built-in Functions.
51201                                                              (line   88)
51202 * __builtin_rx_setpsw:                   RX Built-in Functions.
51203                                                              (line   92)
51204 * __builtin_rx_wait:                     RX Built-in Functions.
51205                                                              (line   96)
51206 * __builtin_set_thread_pointer:          SH Built-in Functions.
51207                                                              (line   10)
51208 * __builtin_thread_pointer:              SH Built-in Functions.
51209                                                              (line   20)
51210 * __builtin_trap:                        Other Builtins.     (line  281)
51211 * __builtin_types_compatible_p:          Other Builtins.     (line  111)
51212 * __builtin_unreachable:                 Other Builtins.     (line  288)
51213 * __builtin_va_arg_pack:                 Constructing Calls. (line   53)
51214 * __builtin_va_arg_pack_len:             Constructing Calls. (line   76)
51215 * __complex__ keyword:                   Complex.            (line    6)
51216 * __declspec(dllexport):                 Function Attributes.
51217                                                              (line  258)
51218 * __declspec(dllimport):                 Function Attributes.
51219                                                              (line  293)
51220 * __ea SPU Named Address Spaces:         Named Address Spaces.
51221                                                              (line  155)
51222 * __extension__:                         Alternate Keywords. (line   30)
51223 * __far M32C Named Address Spaces:       Named Address Spaces.
51224                                                              (line  139)
51225 * __far RL78 Named Address Spaces:       Named Address Spaces.
51226                                                              (line  147)
51227 * __flash AVR Named Address Spaces:      Named Address Spaces.
51228                                                              (line   31)
51229 * __flash1 AVR Named Address Spaces:     Named Address Spaces.
51230                                                              (line   40)
51231 * __flash2 AVR Named Address Spaces:     Named Address Spaces.
51232                                                              (line   40)
51233 * __flash3 AVR Named Address Spaces:     Named Address Spaces.
51234                                                              (line   40)
51235 * __flash4 AVR Named Address Spaces:     Named Address Spaces.
51236                                                              (line   40)
51237 * __flash5 AVR Named Address Spaces:     Named Address Spaces.
51238                                                              (line   40)
51239 * __float128 data type:                  Floating Types.     (line    6)
51240 * __float80 data type:                   Floating Types.     (line    6)
51241 * __fp16 data type:                      Half-Precision.     (line    6)
51242 * __func__ identifier:                   Function Names.     (line    6)
51243 * __FUNCTION__ identifier:               Function Names.     (line    6)
51244 * __imag__ keyword:                      Complex.            (line   27)
51245 * __int128 data types:                   __int128.           (line    6)
51246 * __memx AVR Named Address Spaces:       Named Address Spaces.
51247                                                              (line   46)
51248 * __PRETTY_FUNCTION__ identifier:        Function Names.     (line    6)
51249 * __real__ keyword:                      Complex.            (line   27)
51250 * __STDC_HOSTED__:                       Standards.          (line   13)
51251 * __sync_add_and_fetch:                  __sync Builtins.    (line   60)
51252 * __sync_and_and_fetch:                  __sync Builtins.    (line   60)
51253 * __sync_bool_compare_and_swap:          __sync Builtins.    (line   71)
51254 * __sync_fetch_and_add:                  __sync Builtins.    (line   44)
51255 * __sync_fetch_and_and:                  __sync Builtins.    (line   44)
51256 * __sync_fetch_and_nand:                 __sync Builtins.    (line   44)
51257 * __sync_fetch_and_or:                   __sync Builtins.    (line   44)
51258 * __sync_fetch_and_sub:                  __sync Builtins.    (line   44)
51259 * __sync_fetch_and_xor:                  __sync Builtins.    (line   44)
51260 * __sync_lock_release:                   __sync Builtins.    (line  101)
51261 * __sync_lock_test_and_set:              __sync Builtins.    (line   83)
51262 * __sync_nand_and_fetch:                 __sync Builtins.    (line   60)
51263 * __sync_or_and_fetch:                   __sync Builtins.    (line   60)
51264 * __sync_sub_and_fetch:                  __sync Builtins.    (line   60)
51265 * __sync_synchronize:                    __sync Builtins.    (line   80)
51266 * __sync_val_compare_and_swap:           __sync Builtins.    (line   71)
51267 * __sync_xor_and_fetch:                  __sync Builtins.    (line   60)
51268 * __thread:                              Thread-Local.       (line    6)
51269 * _Accum data type:                      Fixed-Point.        (line    6)
51270 * _Complex keyword:                      Complex.            (line    6)
51271 * _Decimal128 data type:                 Decimal Float.      (line    6)
51272 * _Decimal32 data type:                  Decimal Float.      (line    6)
51273 * _Decimal64 data type:                  Decimal Float.      (line    6)
51274 * _exit:                                 Other Builtins.     (line    6)
51275 * _Exit:                                 Other Builtins.     (line    6)
51276 * _Fract data type:                      Fixed-Point.        (line    6)
51277 * _Sat data type:                        Fixed-Point.        (line    6)
51278 * _xabort:                               X86 transactional memory intrinsics.
51279                                                              (line   68)
51280 * _xbegin:                               X86 transactional memory intrinsics.
51281                                                              (line   20)
51282 * _xend:                                 X86 transactional memory intrinsics.
51283                                                              (line   59)
51284 * _xtest:                                X86 transactional memory intrinsics.
51285                                                              (line   64)
51286 * AArch64 Options:                       AArch64 Options.    (line    6)
51287 * ABI:                                   Compatibility.      (line    6)
51288 * abi_tag attribute:                     C++ Attributes.     (line    9)
51289 * abort:                                 Other Builtins.     (line    6)
51290 * abs:                                   Other Builtins.     (line    6)
51291 * accessing volatiles <1>:               C++ Volatiles.      (line    6)
51292 * accessing volatiles:                   Volatiles.          (line    6)
51293 * acos:                                  Other Builtins.     (line    6)
51294 * acosf:                                 Other Builtins.     (line    6)
51295 * acosh:                                 Other Builtins.     (line    6)
51296 * acoshf:                                Other Builtins.     (line    6)
51297 * acoshl:                                Other Builtins.     (line    6)
51298 * acosl:                                 Other Builtins.     (line    6)
51299 * Ada:                                   G++ and GCC.        (line    6)
51300 * additional floating types:             Floating Types.     (line    6)
51301 * address constraints:                   Simple Constraints. (line  154)
51302 * address of a label:                    Labels as Values.   (line    6)
51303 * address_operand:                       Simple Constraints. (line  158)
51304 * alias attribute:                       Function Attributes.
51305                                                              (line   37)
51306 * aligned attribute <1>:                 Type Attributes.    (line   31)
51307 * aligned attribute <2>:                 Variable Attributes.
51308                                                              (line   23)
51309 * aligned attribute:                     Function Attributes.
51310                                                              (line   50)
51311 * alignment:                             Alignment.          (line    6)
51312 * alloc_size attribute:                  Function Attributes.
51313                                                              (line   70)
51314 * alloca:                                Other Builtins.     (line    6)
51315 * alloca vs variable-length arrays:      Variable Length.    (line   26)
51316 * Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes.
51317                                                              (line  935)
51318 * alternate keywords:                    Alternate Keywords. (line    6)
51319 * always_inline function attribute:      Function Attributes.
51320                                                              (line   91)
51321 * AMD x86-64 Options:                    i386 and x86-64 Options.
51322                                                              (line    6)
51323 * AMD1:                                  Standards.          (line   13)
51324 * ANSI C:                                Standards.          (line   13)
51325 * ANSI C standard:                       Standards.          (line   13)
51326 * ANSI C89:                              Standards.          (line   13)
51327 * ANSI support:                          C Dialect Options.  (line   10)
51328 * ANSI X3.159-1989:                      Standards.          (line   13)
51329 * apostrophes:                           Incompatibilities.  (line  116)
51330 * application binary interface:          Compatibility.      (line    6)
51331 * ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
51332                                                              (line    6)
51333 * ARM options:                           ARM Options.        (line    6)
51334 * arrays of length zero:                 Zero Length.        (line    6)
51335 * arrays of variable length:             Variable Length.    (line    6)
51336 * arrays, non-lvalue:                    Subscripting.       (line    6)
51337 * artificial function attribute:         Function Attributes.
51338                                                              (line  134)
51339 * asin:                                  Other Builtins.     (line    6)
51340 * asinf:                                 Other Builtins.     (line    6)
51341 * asinh:                                 Other Builtins.     (line    6)
51342 * asinhf:                                Other Builtins.     (line    6)
51343 * asinhl:                                Other Builtins.     (line    6)
51344 * asinl:                                 Other Builtins.     (line    6)
51345 * asm constraints:                       Constraints.        (line    6)
51346 * asm expressions:                       Extended Asm.       (line    6)
51347 * assembler instructions:                Extended Asm.       (line    6)
51348 * assembler names for identifiers:       Asm Labels.         (line    6)
51349 * assembly code, invalid:                Bug Criteria.       (line   12)
51350 * atan:                                  Other Builtins.     (line    6)
51351 * atan2:                                 Other Builtins.     (line    6)
51352 * atan2f:                                Other Builtins.     (line    6)
51353 * atan2l:                                Other Builtins.     (line    6)
51354 * atanf:                                 Other Builtins.     (line    6)
51355 * atanh:                                 Other Builtins.     (line    6)
51356 * atanhf:                                Other Builtins.     (line    6)
51357 * atanhl:                                Other Builtins.     (line    6)
51358 * atanl:                                 Other Builtins.     (line    6)
51359 * attribute of types:                    Type Attributes.    (line    6)
51360 * attribute of variables:                Variable Attributes.
51361                                                              (line    6)
51362 * attribute syntax:                      Attribute Syntax.   (line    6)
51363 * autoincrement/decrement addressing:    Simple Constraints. (line   30)
51364 * automatic inline for C++ member fns:   Inline.             (line   71)
51365 * AVR Options:                           AVR Options.        (line    6)
51366 * Backwards Compatibility:               Backwards Compatibility.
51367                                                              (line    6)
51368 * base class members:                    Name lookup.        (line    6)
51369 * bcmp:                                  Other Builtins.     (line    6)
51370 * below100 attribute:                    Variable Attributes.
51371                                                              (line  584)
51372 * binary compatibility:                  Compatibility.      (line    6)
51373 * Binary constants using the 0b prefix:  Binary constants.   (line    6)
51374 * Blackfin Options:                      Blackfin Options.   (line    6)
51375 * bound pointer to member function:      Bound member functions.
51376                                                              (line    6)
51377 * bounds checking:                       Optimize Options.   (line  407)
51378 * bug criteria:                          Bug Criteria.       (line    6)
51379 * bugs:                                  Bugs.               (line    6)
51380 * bugs, known:                           Trouble.            (line    6)
51381 * built-in functions <1>:                Other Builtins.     (line    6)
51382 * built-in functions:                    C Dialect Options.  (line  205)
51383 * bzero:                                 Other Builtins.     (line    6)
51384 * C compilation options:                 Invoking GCC.       (line   17)
51385 * C intermediate output, nonexistent:    G++ and GCC.        (line   35)
51386 * C language extensions:                 C Extensions.       (line    6)
51387 * C language, traditional:               C Dialect Options.  (line  307)
51388 * C standard:                            Standards.          (line   13)
51389 * C standards:                           Standards.          (line   13)
51390 * c++:                                   Invoking G++.       (line   14)
51391 * C++:                                   G++ and GCC.        (line   30)
51392 * C++ comments:                          C++ Comments.       (line    6)
51393 * C++ compilation options:               Invoking GCC.       (line   23)
51394 * C++ interface and implementation headers: C++ Interface.   (line    6)
51395 * C++ language extensions:               C++ Extensions.     (line    6)
51396 * C++ member fns, automatically inline:  Inline.             (line   71)
51397 * C++ misunderstandings:                 C++ Misunderstandings.
51398                                                              (line    6)
51399 * C++ options, command-line:             C++ Dialect Options.
51400                                                              (line    6)
51401 * C++ pragmas, effect on inlining:       C++ Interface.      (line   66)
51402 * C++ source file suffixes:              Invoking G++.       (line    6)
51403 * C++ static data, declaring and defining: Static Definitions.
51404                                                              (line    6)
51405 * C11:                                   Standards.          (line   13)
51406 * C1X:                                   Standards.          (line   13)
51407 * C6X Options:                           C6X Options.        (line    6)
51408 * C89:                                   Standards.          (line   13)
51409 * C90:                                   Standards.          (line   13)
51410 * C94:                                   Standards.          (line   13)
51411 * C95:                                   Standards.          (line   13)
51412 * C99:                                   Standards.          (line   13)
51413 * C9X:                                   Standards.          (line   13)
51414 * C_INCLUDE_PATH:                        Environment Variables.
51415                                                              (line  130)
51416 * cabs:                                  Other Builtins.     (line    6)
51417 * cabsf:                                 Other Builtins.     (line    6)
51418 * cabsl:                                 Other Builtins.     (line    6)
51419 * cacos:                                 Other Builtins.     (line    6)
51420 * cacosf:                                Other Builtins.     (line    6)
51421 * cacosh:                                Other Builtins.     (line    6)
51422 * cacoshf:                               Other Builtins.     (line    6)
51423 * cacoshl:                               Other Builtins.     (line    6)
51424 * cacosl:                                Other Builtins.     (line    6)
51425 * callee_pop_aggregate_return attribute: Function Attributes.
51426                                                              (line  893)
51427 * calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes.
51428                                                              (line  532)
51429 * calloc:                                Other Builtins.     (line    6)
51430 * carg:                                  Other Builtins.     (line    6)
51431 * cargf:                                 Other Builtins.     (line    6)
51432 * cargl:                                 Other Builtins.     (line    6)
51433 * case labels in initializers:           Designated Inits.   (line    6)
51434 * case ranges:                           Case Ranges.        (line    6)
51435 * casin:                                 Other Builtins.     (line    6)
51436 * casinf:                                Other Builtins.     (line    6)
51437 * casinh:                                Other Builtins.     (line    6)
51438 * casinhf:                               Other Builtins.     (line    6)
51439 * casinhl:                               Other Builtins.     (line    6)
51440 * casinl:                                Other Builtins.     (line    6)
51441 * cast to a union:                       Cast to Union.      (line    6)
51442 * catan:                                 Other Builtins.     (line    6)
51443 * catanf:                                Other Builtins.     (line    6)
51444 * catanh:                                Other Builtins.     (line    6)
51445 * catanhf:                               Other Builtins.     (line    6)
51446 * catanhl:                               Other Builtins.     (line    6)
51447 * catanl:                                Other Builtins.     (line    6)
51448 * cbrt:                                  Other Builtins.     (line    6)
51449 * cbrtf:                                 Other Builtins.     (line    6)
51450 * cbrtl:                                 Other Builtins.     (line    6)
51451 * ccos:                                  Other Builtins.     (line    6)
51452 * ccosf:                                 Other Builtins.     (line    6)
51453 * ccosh:                                 Other Builtins.     (line    6)
51454 * ccoshf:                                Other Builtins.     (line    6)
51455 * ccoshl:                                Other Builtins.     (line    6)
51456 * ccosl:                                 Other Builtins.     (line    6)
51457 * ceil:                                  Other Builtins.     (line    6)
51458 * ceilf:                                 Other Builtins.     (line    6)
51459 * ceill:                                 Other Builtins.     (line    6)
51460 * cexp:                                  Other Builtins.     (line    6)
51461 * cexpf:                                 Other Builtins.     (line    6)
51462 * cexpl:                                 Other Builtins.     (line    6)
51463 * character set, execution:              Preprocessor Options.
51464                                                              (line  554)
51465 * character set, input:                  Preprocessor Options.
51466                                                              (line  567)
51467 * character set, input normalization:    Warning Options.    (line 1284)
51468 * character set, wide execution:         Preprocessor Options.
51469                                                              (line  559)
51470 * cimag:                                 Other Builtins.     (line    6)
51471 * cimagf:                                Other Builtins.     (line    6)
51472 * cimagl:                                Other Builtins.     (line    6)
51473 * cleanup attribute:                     Variable Attributes.
51474                                                              (line   89)
51475 * clog:                                  Other Builtins.     (line    6)
51476 * clogf:                                 Other Builtins.     (line    6)
51477 * clogl:                                 Other Builtins.     (line    6)
51478 * COBOL:                                 G++ and GCC.        (line   23)
51479 * code generation conventions:           Code Gen Options.   (line    6)
51480 * code, mixed with declarations:         Mixed Declarations. (line    6)
51481 * cold function attribute:               Function Attributes.
51482                                                              (line 1158)
51483 * cold label attribute:                  Function Attributes.
51484                                                              (line 1176)
51485 * command options:                       Invoking GCC.       (line    6)
51486 * comments, C++ style:                   C++ Comments.       (line    6)
51487 * common attribute:                      Variable Attributes.
51488                                                              (line  105)
51489 * comparison of signed and unsigned values, warning: Warning Options.
51490                                                              (line 1156)
51491 * compiler bugs, reporting:              Bug Reporting.      (line    6)
51492 * compiler compared to C++ preprocessor: G++ and GCC.        (line   35)
51493 * compiler options, C++:                 C++ Dialect Options.
51494                                                              (line    6)
51495 * compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
51496                                                              (line    6)
51497 * compiler version, specifying:          Target Options.     (line    6)
51498 * COMPILER_PATH:                         Environment Variables.
51499                                                              (line   91)
51500 * complex conjugation:                   Complex.            (line   34)
51501 * complex numbers:                       Complex.            (line    6)
51502 * compound literals:                     Compound Literals.  (line    6)
51503 * computed gotos:                        Labels as Values.   (line    6)
51504 * conditional expressions, extensions:   Conditionals.       (line    6)
51505 * conflicting types:                     Disappointments.    (line   21)
51506 * conj:                                  Other Builtins.     (line    6)
51507 * conjf:                                 Other Builtins.     (line    6)
51508 * conjl:                                 Other Builtins.     (line    6)
51509 * const applied to function:             Function Attributes.
51510                                                              (line    6)
51511 * const function attribute:              Function Attributes.
51512                                                              (line  183)
51513 * constants in constraints:              Simple Constraints. (line   70)
51514 * constraint modifier characters:        Modifiers.          (line    6)
51515 * constraint, matching:                  Simple Constraints. (line  139)
51516 * constraints, asm:                      Constraints.        (line    6)
51517 * constraints, machine specific:         Machine Constraints.
51518                                                              (line    6)
51519 * constructing calls:                    Constructing Calls. (line    6)
51520 * constructor expressions:               Compound Literals.  (line    6)
51521 * constructor function attribute:        Function Attributes.
51522                                                              (line  211)
51523 * contributors:                          Contributors.       (line    6)
51524 * copysign:                              Other Builtins.     (line    6)
51525 * copysignf:                             Other Builtins.     (line    6)
51526 * copysignl:                             Other Builtins.     (line    6)
51527 * core dump:                             Bug Criteria.       (line    9)
51528 * cos:                                   Other Builtins.     (line    6)
51529 * cosf:                                  Other Builtins.     (line    6)
51530 * cosh:                                  Other Builtins.     (line    6)
51531 * coshf:                                 Other Builtins.     (line    6)
51532 * coshl:                                 Other Builtins.     (line    6)
51533 * cosl:                                  Other Builtins.     (line    6)
51534 * CPATH:                                 Environment Variables.
51535                                                              (line  129)
51536 * CPLUS_INCLUDE_PATH:                    Environment Variables.
51537                                                              (line  131)
51538 * cpow:                                  Other Builtins.     (line    6)
51539 * cpowf:                                 Other Builtins.     (line    6)
51540 * cpowl:                                 Other Builtins.     (line    6)
51541 * cproj:                                 Other Builtins.     (line    6)
51542 * cprojf:                                Other Builtins.     (line    6)
51543 * cprojl:                                Other Builtins.     (line    6)
51544 * CR16 Options:                          CR16 Options.       (line    6)
51545 * creal:                                 Other Builtins.     (line    6)
51546 * crealf:                                Other Builtins.     (line    6)
51547 * creall:                                Other Builtins.     (line    6)
51548 * CRIS Options:                          CRIS Options.       (line    6)
51549 * cross compiling:                       Target Options.     (line    6)
51550 * csin:                                  Other Builtins.     (line    6)
51551 * csinf:                                 Other Builtins.     (line    6)
51552 * csinh:                                 Other Builtins.     (line    6)
51553 * csinhf:                                Other Builtins.     (line    6)
51554 * csinhl:                                Other Builtins.     (line    6)
51555 * csinl:                                 Other Builtins.     (line    6)
51556 * csqrt:                                 Other Builtins.     (line    6)
51557 * csqrtf:                                Other Builtins.     (line    6)
51558 * csqrtl:                                Other Builtins.     (line    6)
51559 * ctan:                                  Other Builtins.     (line    6)
51560 * ctanf:                                 Other Builtins.     (line    6)
51561 * ctanh:                                 Other Builtins.     (line    6)
51562 * ctanhf:                                Other Builtins.     (line    6)
51563 * ctanhl:                                Other Builtins.     (line    6)
51564 * ctanl:                                 Other Builtins.     (line    6)
51565 * Darwin options:                        Darwin Options.     (line    6)
51566 * dcgettext:                             Other Builtins.     (line    6)
51567 * DD integer suffix:                     Decimal Float.      (line    6)
51568 * dd integer suffix:                     Decimal Float.      (line    6)
51569 * deallocating variable length arrays:   Variable Length.    (line   22)
51570 * debugging information options:         Debugging Options.  (line    6)
51571 * decimal floating types:                Decimal Float.      (line    6)
51572 * declaration scope:                     Incompatibilities.  (line   80)
51573 * declarations inside expressions:       Statement Exprs.    (line    6)
51574 * declarations, mixed with code:         Mixed Declarations. (line    6)
51575 * declaring attributes of functions:     Function Attributes.
51576                                                              (line    6)
51577 * declaring static data in C++:          Static Definitions. (line    6)
51578 * defining static data in C++:           Static Definitions. (line    6)
51579 * dependencies for make as output:       Environment Variables.
51580                                                              (line  157)
51581 * dependencies, make:                    Preprocessor Options.
51582                                                              (line  185)
51583 * DEPENDENCIES_OUTPUT:                   Environment Variables.
51584                                                              (line  156)
51585 * dependent name lookup:                 Name lookup.        (line    6)
51586 * deprecated attribute:                  Variable Attributes.
51587                                                              (line  114)
51588 * deprecated attribute.:                 Function Attributes.
51589                                                              (line  233)
51590 * designated initializers:               Designated Inits.   (line    6)
51591 * designator lists:                      Designated Inits.   (line   94)
51592 * designators:                           Designated Inits.   (line   61)
51593 * destructor function attribute:         Function Attributes.
51594                                                              (line  211)
51595 * DF integer suffix:                     Decimal Float.      (line    6)
51596 * df integer suffix:                     Decimal Float.      (line    6)
51597 * dgettext:                              Other Builtins.     (line    6)
51598 * diagnostic messages:                   Language Independent Options.
51599                                                              (line    6)
51600 * dialect options:                       C Dialect Options.  (line    6)
51601 * digits in constraint:                  Simple Constraints. (line  127)
51602 * directory options:                     Directory Options.  (line    6)
51603 * disinterrupt attribute:                Function Attributes.
51604                                                              (line  253)
51605 * DL integer suffix:                     Decimal Float.      (line    6)
51606 * dl integer suffix:                     Decimal Float.      (line    6)
51607 * dollar signs in identifier names:      Dollar Signs.       (line    6)
51608 * double-word arithmetic:                Long Long.          (line    6)
51609 * downward funargs:                      Nested Functions.   (line    6)
51610 * drem:                                  Other Builtins.     (line    6)
51611 * dremf:                                 Other Builtins.     (line    6)
51612 * dreml:                                 Other Builtins.     (line    6)
51613 * E in constraint:                       Simple Constraints. (line   89)
51614 * earlyclobber operand:                  Modifiers.          (line   25)
51615 * eight-bit data on the H8/300, H8/300H, and H8S: Function Attributes.
51616                                                              (line  346)
51617 * EIND:                                  AVR Options.        (line  224)
51618 * empty structures:                      Empty Structures.   (line    6)
51619 * environment variables:                 Environment Variables.
51620                                                              (line    6)
51621 * erf:                                   Other Builtins.     (line    6)
51622 * erfc:                                  Other Builtins.     (line    6)
51623 * erfcf:                                 Other Builtins.     (line    6)
51624 * erfcl:                                 Other Builtins.     (line    6)
51625 * erff:                                  Other Builtins.     (line    6)
51626 * erfl:                                  Other Builtins.     (line    6)
51627 * error function attribute:              Function Attributes.
51628                                                              (line  153)
51629 * error messages:                        Warnings and Errors.
51630                                                              (line    6)
51631 * escaped newlines:                      Escaped Newlines.   (line    6)
51632 * exception handler functions on the Blackfin processor: Function Attributes.
51633                                                              (line  356)
51634 * exclamation point:                     Multi-Alternative.  (line   33)
51635 * exit:                                  Other Builtins.     (line    6)
51636 * exp:                                   Other Builtins.     (line    6)
51637 * exp10:                                 Other Builtins.     (line    6)
51638 * exp10f:                                Other Builtins.     (line    6)
51639 * exp10l:                                Other Builtins.     (line    6)
51640 * exp2:                                  Other Builtins.     (line    6)
51641 * exp2f:                                 Other Builtins.     (line    6)
51642 * exp2l:                                 Other Builtins.     (line    6)
51643 * expf:                                  Other Builtins.     (line    6)
51644 * expl:                                  Other Builtins.     (line    6)
51645 * explicit register variables:           Explicit Reg Vars.  (line    6)
51646 * expm1:                                 Other Builtins.     (line    6)
51647 * expm1f:                                Other Builtins.     (line    6)
51648 * expm1l:                                Other Builtins.     (line    6)
51649 * expressions containing statements:     Statement Exprs.    (line    6)
51650 * expressions, constructor:              Compound Literals.  (line    6)
51651 * extended asm:                          Extended Asm.       (line    6)
51652 * extensible constraints:                Simple Constraints. (line  163)
51653 * extensions, ?::                        Conditionals.       (line    6)
51654 * extensions, C language:                C Extensions.       (line    6)
51655 * extensions, C++ language:              C++ Extensions.     (line    6)
51656 * external declaration scope:            Incompatibilities.  (line   80)
51657 * externally_visible attribute.:         Function Attributes.
51658                                                              (line  362)
51659 * F in constraint:                       Simple Constraints. (line   94)
51660 * fabs:                                  Other Builtins.     (line    6)
51661 * fabsf:                                 Other Builtins.     (line    6)
51662 * fabsl:                                 Other Builtins.     (line    6)
51663 * fatal signal:                          Bug Criteria.       (line    9)
51664 * fdim:                                  Other Builtins.     (line    6)
51665 * fdimf:                                 Other Builtins.     (line    6)
51666 * fdiml:                                 Other Builtins.     (line    6)
51667 * FDL, GNU Free Documentation License:   GNU Free Documentation License.
51668                                                              (line    6)
51669 * ffs:                                   Other Builtins.     (line    6)
51670 * file name suffix:                      Overall Options.    (line   14)
51671 * file names:                            Link Options.       (line   10)
51672 * fixed-point types:                     Fixed-Point.        (line    6)
51673 * flatten function attribute:            Function Attributes.
51674                                                              (line  146)
51675 * flexible array members:                Zero Length.        (line    6)
51676 * float as function value type:          Incompatibilities.  (line  141)
51677 * floating point precision:              Disappointments.    (line   68)
51678 * floating-point precision:              Optimize Options.   (line 1873)
51679 * floor:                                 Other Builtins.     (line    6)
51680 * floorf:                                Other Builtins.     (line    6)
51681 * floorl:                                Other Builtins.     (line    6)
51682 * fma:                                   Other Builtins.     (line    6)
51683 * fmaf:                                  Other Builtins.     (line    6)
51684 * fmal:                                  Other Builtins.     (line    6)
51685 * fmax:                                  Other Builtins.     (line    6)
51686 * fmaxf:                                 Other Builtins.     (line    6)
51687 * fmaxl:                                 Other Builtins.     (line    6)
51688 * fmin:                                  Other Builtins.     (line    6)
51689 * fminf:                                 Other Builtins.     (line    6)
51690 * fminl:                                 Other Builtins.     (line    6)
51691 * fmod:                                  Other Builtins.     (line    6)
51692 * fmodf:                                 Other Builtins.     (line    6)
51693 * fmodl:                                 Other Builtins.     (line    6)
51694 * force_align_arg_pointer attribute:     Function Attributes.
51695                                                              (line 1218)
51696 * format function attribute:             Function Attributes.
51697                                                              (line  419)
51698 * format_arg function attribute:         Function Attributes.
51699                                                              (line  485)
51700 * Fortran:                               G++ and GCC.        (line    6)
51701 * forwarder_section attribute:           Function Attributes.
51702                                                              (line  685)
51703 * forwarding calls:                      Constructing Calls. (line    6)
51704 * fprintf:                               Other Builtins.     (line    6)
51705 * fprintf_unlocked:                      Other Builtins.     (line    6)
51706 * fputs:                                 Other Builtins.     (line    6)
51707 * fputs_unlocked:                        Other Builtins.     (line    6)
51708 * FR30 Options:                          FR30 Options.       (line    6)
51709 * freestanding environment:              Standards.          (line   13)
51710 * freestanding implementation:           Standards.          (line   13)
51711 * frexp:                                 Other Builtins.     (line    6)
51712 * frexpf:                                Other Builtins.     (line    6)
51713 * frexpl:                                Other Builtins.     (line    6)
51714 * FRV Options:                           FRV Options.        (line    6)
51715 * fscanf:                                Other Builtins.     (line    6)
51716 * fscanf, and constant strings:          Incompatibilities.  (line   17)
51717 * function addressability on the M32R/D: Function Attributes.
51718                                                              (line  853)
51719 * function attributes:                   Function Attributes.
51720                                                              (line    6)
51721 * function pointers, arithmetic:         Pointer Arith.      (line    6)
51722 * function prototype declarations:       Function Prototypes.
51723                                                              (line    6)
51724 * function versions:                     Function Multiversioning.
51725                                                              (line    6)
51726 * function without a prologue/epilogue code: Function Attributes.
51727                                                              (line  912)
51728 * function, size of pointer to:          Pointer Arith.      (line    6)
51729 * functions called via pointer on the RS/6000 and PowerPC: Function Attributes.
51730                                                              (line  808)
51731 * functions in arbitrary sections:       Function Attributes.
51732                                                              (line    6)
51733 * functions that are dynamically resolved: Function Attributes.
51734                                                              (line    6)
51735 * functions that are passed arguments in registers on the 386: Function Attributes.
51736                                                              (line    6)
51737 * functions that behave like malloc:     Function Attributes.
51738                                                              (line    6)
51739 * functions that do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
51740                                                              (line  925)
51741 * functions that do not pop the argument stack on the 386: Function Attributes.
51742                                                              (line    6)
51743 * functions that do pop the argument stack on the 386: Function Attributes.
51744                                                              (line  177)
51745 * functions that handle memory bank switching: Function Attributes.
51746                                                              (line  375)
51747 * functions that have different compilation options on the 386: Function Attributes.
51748                                                              (line    6)
51749 * functions that have different optimization options: Function Attributes.
51750                                                              (line    6)
51751 * functions that have no side effects:   Function Attributes.
51752                                                              (line    6)
51753 * functions that never return:           Function Attributes.
51754                                                              (line    6)
51755 * functions that pop the argument stack on the 386: Function Attributes.
51756                                                              (line    6)
51757 * functions that return more than once:  Function Attributes.
51758                                                              (line    6)
51759 * functions with non-null pointer arguments: Function Attributes.
51760                                                              (line    6)
51761 * functions with printf, scanf, strftime or strfmon style arguments: Function Attributes.
51762                                                              (line    6)
51763 * g in constraint:                       Simple Constraints. (line  120)
51764 * G in constraint:                       Simple Constraints. (line   98)
51765 * g++:                                   Invoking G++.       (line   14)
51766 * G++:                                   G++ and GCC.        (line   30)
51767 * gamma:                                 Other Builtins.     (line    6)
51768 * gamma_r:                               Other Builtins.     (line    6)
51769 * gammaf:                                Other Builtins.     (line    6)
51770 * gammaf_r:                              Other Builtins.     (line    6)
51771 * gammal:                                Other Builtins.     (line    6)
51772 * gammal_r:                              Other Builtins.     (line    6)
51773 * GCC:                                   G++ and GCC.        (line    6)
51774 * GCC command options:                   Invoking GCC.       (line    6)
51775 * GCC_COMPARE_DEBUG:                     Environment Variables.
51776                                                              (line   52)
51777 * GCC_EXEC_PREFIX:                       Environment Variables.
51778                                                              (line   57)
51779 * gcc_struct:                            Type Attributes.    (line  324)
51780 * gcc_struct attribute:                  Variable Attributes.
51781                                                              (line  445)
51782 * gcov:                                  Debugging Options.  (line  411)
51783 * gettext:                               Other Builtins.     (line    6)
51784 * global offset table:                   Code Gen Options.   (line  267)
51785 * global register after longjmp:         Global Reg Vars.    (line   65)
51786 * global register variables:             Global Reg Vars.    (line    6)
51787 * GNAT:                                  G++ and GCC.        (line   30)
51788 * GNU C Compiler:                        G++ and GCC.        (line    6)
51789 * GNU Compiler Collection:               G++ and GCC.        (line    6)
51790 * gnu_inline function attribute:         Function Attributes.
51791                                                              (line   96)
51792 * Go:                                    G++ and GCC.        (line    6)
51793 * goto with computed label:              Labels as Values.   (line    6)
51794 * gprof:                                 Debugging Options.  (line  333)
51795 * grouping options:                      Invoking GCC.       (line   26)
51796 * H in constraint:                       Simple Constraints. (line   98)
51797 * half-precision floating point:         Half-Precision.     (line    6)
51798 * hardware models and configurations, specifying: Submodel Options.
51799                                                              (line    6)
51800 * hex floats:                            Hex Floats.         (line    6)
51801 * HK fixed-suffix:                       Fixed-Point.        (line    6)
51802 * hk fixed-suffix:                       Fixed-Point.        (line    6)
51803 * hosted environment <1>:                C Dialect Options.  (line  239)
51804 * hosted environment:                    Standards.          (line   13)
51805 * hosted implementation:                 Standards.          (line   13)
51806 * hot function attribute:                Function Attributes.
51807                                                              (line 1136)
51808 * hot label attribute:                   Function Attributes.
51809                                                              (line 1148)
51810 * HPPA Options:                          HPPA Options.       (line    6)
51811 * HR fixed-suffix:                       Fixed-Point.        (line    6)
51812 * hr fixed-suffix:                       Fixed-Point.        (line    6)
51813 * hypot:                                 Other Builtins.     (line    6)
51814 * hypotf:                                Other Builtins.     (line    6)
51815 * hypotl:                                Other Builtins.     (line    6)
51816 * I in constraint:                       Simple Constraints. (line   81)
51817 * i in constraint:                       Simple Constraints. (line   70)
51818 * i386 and x86-64 Windows Options:       i386 and x86-64 Windows Options.
51819                                                              (line    6)
51820 * i386 Options:                          i386 and x86-64 Options.
51821                                                              (line    6)
51822 * IA-64 Options:                         IA-64 Options.      (line    6)
51823 * IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
51824                                                              (line    6)
51825 * identifier names, dollar signs in:     Dollar Signs.       (line    6)
51826 * identifiers, names in assembler code:  Asm Labels.         (line    6)
51827 * ifunc attribute:                       Function Attributes.
51828                                                              (line  593)
51829 * ilogb:                                 Other Builtins.     (line    6)
51830 * ilogbf:                                Other Builtins.     (line    6)
51831 * ilogbl:                                Other Builtins.     (line    6)
51832 * imaxabs:                               Other Builtins.     (line    6)
51833 * implementation-defined behavior, C language: C Implementation.
51834                                                              (line    6)
51835 * implementation-defined behavior, C++ language: C++ Implementation.
51836                                                              (line    6)
51837 * implied #pragma implementation:        C++ Interface.      (line   46)
51838 * incompatibilities of GCC:              Incompatibilities.  (line    6)
51839 * increment operators:                   Bug Criteria.       (line   17)
51840 * index:                                 Other Builtins.     (line    6)
51841 * indirect calls on ARM:                 Function Attributes.
51842                                                              (line  798)
51843 * indirect calls on MIPS:                Function Attributes.
51844                                                              (line  820)
51845 * init_priority attribute:               C++ Attributes.     (line   30)
51846 * initializations in expressions:        Compound Literals.  (line    6)
51847 * initializers with labeled elements:    Designated Inits.   (line    6)
51848 * initializers, non-constant:            Initializers.       (line    6)
51849 * inline automatic for C++ member fns:   Inline.             (line   71)
51850 * inline functions:                      Inline.             (line    6)
51851 * inline functions, omission of:         Inline.             (line   51)
51852 * inlining and C++ pragmas:              C++ Interface.      (line   66)
51853 * installation trouble:                  Trouble.            (line    6)
51854 * integrating function code:             Inline.             (line    6)
51855 * Intel 386 Options:                     i386 and x86-64 Options.
51856                                                              (line    6)
51857 * interface and implementation headers, C++: C++ Interface.  (line    6)
51858 * intermediate C version, nonexistent:   G++ and GCC.        (line   35)
51859 * interrupt handler functions:           Function Attributes.
51860                                                              (line  141)
51861 * interrupt handler functions on the AVR processors: Function Attributes.
51862                                                              (line 1313)
51863 * interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes.
51864                                                              (line  735)
51865 * interrupt service routines on ARM:     Function Attributes.
51866                                                              (line  750)
51867 * interrupt thread functions on fido:    Function Attributes.
51868                                                              (line  742)
51869 * introduction:                          Top.                (line    6)
51870 * invalid assembly code:                 Bug Criteria.       (line   12)
51871 * invalid input:                         Bug Criteria.       (line   42)
51872 * invoking g++:                          Invoking G++.       (line   22)
51873 * isalnum:                               Other Builtins.     (line    6)
51874 * isalpha:                               Other Builtins.     (line    6)
51875 * isascii:                               Other Builtins.     (line    6)
51876 * isblank:                               Other Builtins.     (line    6)
51877 * iscntrl:                               Other Builtins.     (line    6)
51878 * isdigit:                               Other Builtins.     (line    6)
51879 * isgraph:                               Other Builtins.     (line    6)
51880 * islower:                               Other Builtins.     (line    6)
51881 * ISO 9899:                              Standards.          (line   13)
51882 * ISO C:                                 Standards.          (line   13)
51883 * ISO C standard:                        Standards.          (line   13)
51884 * ISO C11:                               Standards.          (line   13)
51885 * ISO C1X:                               Standards.          (line   13)
51886 * ISO C90:                               Standards.          (line   13)
51887 * ISO C94:                               Standards.          (line   13)
51888 * ISO C95:                               Standards.          (line   13)
51889 * ISO C99:                               Standards.          (line   13)
51890 * ISO C9X:                               Standards.          (line   13)
51891 * ISO support:                           C Dialect Options.  (line   10)
51892 * ISO/IEC 9899:                          Standards.          (line   13)
51893 * isprint:                               Other Builtins.     (line    6)
51894 * ispunct:                               Other Builtins.     (line    6)
51895 * isspace:                               Other Builtins.     (line    6)
51896 * isupper:                               Other Builtins.     (line    6)
51897 * iswalnum:                              Other Builtins.     (line    6)
51898 * iswalpha:                              Other Builtins.     (line    6)
51899 * iswblank:                              Other Builtins.     (line    6)
51900 * iswcntrl:                              Other Builtins.     (line    6)
51901 * iswdigit:                              Other Builtins.     (line    6)
51902 * iswgraph:                              Other Builtins.     (line    6)
51903 * iswlower:                              Other Builtins.     (line    6)
51904 * iswprint:                              Other Builtins.     (line    6)
51905 * iswpunct:                              Other Builtins.     (line    6)
51906 * iswspace:                              Other Builtins.     (line    6)
51907 * iswupper:                              Other Builtins.     (line    6)
51908 * iswxdigit:                             Other Builtins.     (line    6)
51909 * isxdigit:                              Other Builtins.     (line    6)
51910 * j0:                                    Other Builtins.     (line    6)
51911 * j0f:                                   Other Builtins.     (line    6)
51912 * j0l:                                   Other Builtins.     (line    6)
51913 * j1:                                    Other Builtins.     (line    6)
51914 * j1f:                                   Other Builtins.     (line    6)
51915 * j1l:                                   Other Builtins.     (line    6)
51916 * Java:                                  G++ and GCC.        (line    6)
51917 * java_interface attribute:              C++ Attributes.     (line   50)
51918 * jn:                                    Other Builtins.     (line    6)
51919 * jnf:                                   Other Builtins.     (line    6)
51920 * jnl:                                   Other Builtins.     (line    6)
51921 * K fixed-suffix:                        Fixed-Point.        (line    6)
51922 * k fixed-suffix:                        Fixed-Point.        (line    6)
51923 * keep_interrupts_masked attribute:      Function Attributes.
51924                                                              (line  707)
51925 * keywords, alternate:                   Alternate Keywords. (line    6)
51926 * known causes of trouble:               Trouble.            (line    6)
51927 * l1_data variable attribute:            Variable Attributes.
51928                                                              (line  356)
51929 * l1_data_A variable attribute:          Variable Attributes.
51930                                                              (line  356)
51931 * l1_data_B variable attribute:          Variable Attributes.
51932                                                              (line  356)
51933 * l1_text function attribute:            Function Attributes.
51934                                                              (line  759)
51935 * l2 function attribute:                 Function Attributes.
51936                                                              (line  765)
51937 * l2 variable attribute:                 Variable Attributes.
51938                                                              (line  364)
51939 * labeled elements in initializers:      Designated Inits.   (line    6)
51940 * labels as values:                      Labels as Values.   (line    6)
51941 * labs:                                  Other Builtins.     (line    6)
51942 * LANG:                                  Environment Variables.
51943                                                              (line   21)
51944 * language dialect options:              C Dialect Options.  (line    6)
51945 * LC_ALL:                                Environment Variables.
51946                                                              (line   21)
51947 * LC_CTYPE:                              Environment Variables.
51948                                                              (line   21)
51949 * LC_MESSAGES:                           Environment Variables.
51950                                                              (line   21)
51951 * ldexp:                                 Other Builtins.     (line    6)
51952 * ldexpf:                                Other Builtins.     (line    6)
51953 * ldexpl:                                Other Builtins.     (line    6)
51954 * leaf function attribute:               Function Attributes.
51955                                                              (line  771)
51956 * length-zero arrays:                    Zero Length.        (line    6)
51957 * lgamma:                                Other Builtins.     (line    6)
51958 * lgamma_r:                              Other Builtins.     (line    6)
51959 * lgammaf:                               Other Builtins.     (line    6)
51960 * lgammaf_r:                             Other Builtins.     (line    6)
51961 * lgammal:                               Other Builtins.     (line    6)
51962 * lgammal_r:                             Other Builtins.     (line    6)
51963 * Libraries:                             Link Options.       (line   24)
51964 * LIBRARY_PATH:                          Environment Variables.
51965                                                              (line   97)
51966 * link options:                          Link Options.       (line    6)
51967 * linker script:                         Link Options.       (line  199)
51968 * LK fixed-suffix:                       Fixed-Point.        (line    6)
51969 * lk fixed-suffix:                       Fixed-Point.        (line    6)
51970 * LL integer suffix:                     Long Long.          (line    6)
51971 * llabs:                                 Other Builtins.     (line    6)
51972 * LLK fixed-suffix:                      Fixed-Point.        (line    6)
51973 * llk fixed-suffix:                      Fixed-Point.        (line    6)
51974 * LLR fixed-suffix:                      Fixed-Point.        (line    6)
51975 * llr fixed-suffix:                      Fixed-Point.        (line    6)
51976 * llrint:                                Other Builtins.     (line    6)
51977 * llrintf:                               Other Builtins.     (line    6)
51978 * llrintl:                               Other Builtins.     (line    6)
51979 * llround:                               Other Builtins.     (line    6)
51980 * llroundf:                              Other Builtins.     (line    6)
51981 * llroundl:                              Other Builtins.     (line    6)
51982 * LM32 options:                          LM32 Options.       (line    6)
51983 * load address instruction:              Simple Constraints. (line  154)
51984 * local labels:                          Local Labels.       (line    6)
51985 * local variables in macros:             Typeof.             (line   46)
51986 * local variables, specifying registers: Local Reg Vars.     (line    6)
51987 * locale:                                Environment Variables.
51988                                                              (line   21)
51989 * locale definition:                     Environment Variables.
51990                                                              (line  106)
51991 * log:                                   Other Builtins.     (line    6)
51992 * log10:                                 Other Builtins.     (line    6)
51993 * log10f:                                Other Builtins.     (line    6)
51994 * log10l:                                Other Builtins.     (line    6)
51995 * log1p:                                 Other Builtins.     (line    6)
51996 * log1pf:                                Other Builtins.     (line    6)
51997 * log1pl:                                Other Builtins.     (line    6)
51998 * log2:                                  Other Builtins.     (line    6)
51999 * log2f:                                 Other Builtins.     (line    6)
52000 * log2l:                                 Other Builtins.     (line    6)
52001 * logb:                                  Other Builtins.     (line    6)
52002 * logbf:                                 Other Builtins.     (line    6)
52003 * logbl:                                 Other Builtins.     (line    6)
52004 * logf:                                  Other Builtins.     (line    6)
52005 * logl:                                  Other Builtins.     (line    6)
52006 * long long data types:                  Long Long.          (line    6)
52007 * longjmp:                               Global Reg Vars.    (line   65)
52008 * longjmp incompatibilities:             Incompatibilities.  (line   39)
52009 * longjmp warnings:                      Warning Options.    (line  674)
52010 * LR fixed-suffix:                       Fixed-Point.        (line    6)
52011 * lr fixed-suffix:                       Fixed-Point.        (line    6)
52012 * lrint:                                 Other Builtins.     (line    6)
52013 * lrintf:                                Other Builtins.     (line    6)
52014 * lrintl:                                Other Builtins.     (line    6)
52015 * lround:                                Other Builtins.     (line    6)
52016 * lroundf:                               Other Builtins.     (line    6)
52017 * lroundl:                               Other Builtins.     (line    6)
52018 * m in constraint:                       Simple Constraints. (line   17)
52019 * M32C options:                          M32C Options.       (line    6)
52020 * M32R/D options:                        M32R/D Options.     (line    6)
52021 * M680x0 options:                        M680x0 Options.     (line    6)
52022 * machine dependent options:             Submodel Options.   (line    6)
52023 * machine specific constraints:          Machine Constraints.
52024                                                              (line    6)
52025 * macro with variable arguments:         Variadic Macros.    (line    6)
52026 * macros containing asm:                 Extended Asm.       (line  238)
52027 * macros, inline alternative:            Inline.             (line    6)
52028 * macros, local labels:                  Local Labels.       (line    6)
52029 * macros, local variables in:            Typeof.             (line   46)
52030 * macros, statements in expressions:     Statement Exprs.    (line    6)
52031 * macros, types of arguments:            Typeof.             (line    6)
52032 * make:                                  Preprocessor Options.
52033                                                              (line  185)
52034 * malloc:                                Other Builtins.     (line    6)
52035 * malloc attribute:                      Function Attributes.
52036                                                              (line  830)
52037 * matching constraint:                   Simple Constraints. (line  139)
52038 * MCore options:                         MCore Options.      (line    6)
52039 * member fns, automatically inline:      Inline.             (line   71)
52040 * memchr:                                Other Builtins.     (line    6)
52041 * memcmp:                                Other Builtins.     (line    6)
52042 * memcpy:                                Other Builtins.     (line    6)
52043 * memory references in constraints:      Simple Constraints. (line   17)
52044 * mempcpy:                               Other Builtins.     (line    6)
52045 * memset:                                Other Builtins.     (line    6)
52046 * MeP options:                           MeP Options.        (line    6)
52047 * Mercury:                               G++ and GCC.        (line   23)
52048 * message formatting:                    Language Independent Options.
52049                                                              (line    6)
52050 * messages, warning:                     Warning Options.    (line    6)
52051 * messages, warning and error:           Warnings and Errors.
52052                                                              (line    6)
52053 * MicroBlaze Options:                    MicroBlaze Options. (line    6)
52054 * middle-operands, omitted:              Conditionals.       (line    6)
52055 * MIPS options:                          MIPS Options.       (line    6)
52056 * mips16 attribute:                      Function Attributes.
52057                                                              (line  839)
52058 * misunderstandings in C++:              C++ Misunderstandings.
52059                                                              (line    6)
52060 * mixed declarations and code:           Mixed Declarations. (line    6)
52061 * mktemp, and constant strings:          Incompatibilities.  (line   13)
52062 * MMIX Options:                          MMIX Options.       (line    6)
52063 * MN10300 options:                       MN10300 Options.    (line    6)
52064 * mode attribute:                        Variable Attributes.
52065                                                              (line  134)
52066 * modf:                                  Other Builtins.     (line    6)
52067 * modff:                                 Other Builtins.     (line    6)
52068 * modfl:                                 Other Builtins.     (line    6)
52069 * modifiers in constraints:              Modifiers.          (line    6)
52070 * Moxie Options:                         Moxie Options.      (line    6)
52071 * ms_abi attribute:                      Function Attributes.
52072                                                              (line  881)
52073 * ms_hook_prologue attribute:            Function Attributes.
52074                                                              (line  906)
52075 * ms_struct:                             Type Attributes.    (line  324)
52076 * ms_struct attribute:                   Variable Attributes.
52077                                                              (line  445)
52078 * mudflap:                               Optimize Options.   (line  407)
52079 * multiple alternative constraints:      Multi-Alternative.  (line    6)
52080 * multiprecision arithmetic:             Long Long.          (line    6)
52081 * n in constraint:                       Simple Constraints. (line   75)
52082 * Named Address Spaces:                  Named Address Spaces.
52083                                                              (line    6)
52084 * names used in assembler code:          Asm Labels.         (line    6)
52085 * naming convention, implementation headers: C++ Interface.  (line   46)
52086 * nearbyint:                             Other Builtins.     (line    6)
52087 * nearbyintf:                            Other Builtins.     (line    6)
52088 * nearbyintl:                            Other Builtins.     (line    6)
52089 * nested functions:                      Nested Functions.   (line    6)
52090 * newlines (escaped):                    Escaped Newlines.   (line    6)
52091 * nextafter:                             Other Builtins.     (line    6)
52092 * nextafterf:                            Other Builtins.     (line    6)
52093 * nextafterl:                            Other Builtins.     (line    6)
52094 * nexttoward:                            Other Builtins.     (line    6)
52095 * nexttowardf:                           Other Builtins.     (line    6)
52096 * nexttowardl:                           Other Builtins.     (line    6)
52097 * NFC:                                   Warning Options.    (line 1284)
52098 * NFKC:                                  Warning Options.    (line 1284)
52099 * NMI handler functions on the Blackfin processor: Function Attributes.
52100                                                              (line  940)
52101 * no_instrument_function function attribute: Function Attributes.
52102                                                              (line  946)
52103 * no_sanitize_address function attribute: Function Attributes.
52104                                                              (line 1186)
52105 * no_split_stack function attribute:     Function Attributes.
52106                                                              (line  951)
52107 * noclone function attribute:            Function Attributes.
52108                                                              (line  968)
52109 * nocommon attribute:                    Variable Attributes.
52110                                                              (line  105)
52111 * noinline function attribute:           Function Attributes.
52112                                                              (line  957)
52113 * nomips16 attribute:                    Function Attributes.
52114                                                              (line  839)
52115 * non-constant initializers:             Initializers.       (line    6)
52116 * non-static inline function:            Inline.             (line   85)
52117 * nonnull function attribute:            Function Attributes.
52118                                                              (line  974)
52119 * noreturn function attribute:           Function Attributes.
52120                                                              (line  998)
52121 * nosave_low_regs attribute:             Function Attributes.
52122                                                              (line 1048)
52123 * nothrow function attribute:            Function Attributes.
52124                                                              (line 1040)
52125 * o in constraint:                       Simple Constraints. (line   23)
52126 * OBJC_INCLUDE_PATH:                     Environment Variables.
52127                                                              (line  132)
52128 * Objective-C <1>:                       Standards.          (line  163)
52129 * Objective-C:                           G++ and GCC.        (line    6)
52130 * Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options.
52131                                                              (line    6)
52132 * Objective-C++ <1>:                     Standards.          (line  163)
52133 * Objective-C++:                         G++ and GCC.        (line    6)
52134 * offsettable address:                   Simple Constraints. (line   23)
52135 * old-style function definitions:        Function Prototypes.
52136                                                              (line    6)
52137 * omitted middle-operands:               Conditionals.       (line    6)
52138 * open coding:                           Inline.             (line    6)
52139 * OpenMP parallel:                       C Dialect Options.  (line  256)
52140 * operand constraints, asm:              Constraints.        (line    6)
52141 * optimize function attribute:           Function Attributes.
52142                                                              (line 1054)
52143 * optimize options:                      Optimize Options.   (line    6)
52144 * options to control diagnostics formatting: Language Independent Options.
52145                                                              (line    6)
52146 * options to control warnings:           Warning Options.    (line    6)
52147 * options, C++:                          C++ Dialect Options.
52148                                                              (line    6)
52149 * options, code generation:              Code Gen Options.   (line    6)
52150 * options, debugging:                    Debugging Options.  (line    6)
52151 * options, dialect:                      C Dialect Options.  (line    6)
52152 * options, directory search:             Directory Options.  (line    6)
52153 * options, GCC command:                  Invoking GCC.       (line    6)
52154 * options, grouping:                     Invoking GCC.       (line   26)
52155 * options, linking:                      Link Options.       (line    6)
52156 * options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
52157                                                              (line    6)
52158 * options, optimization:                 Optimize Options.   (line    6)
52159 * options, order:                        Invoking GCC.       (line   30)
52160 * options, preprocessor:                 Preprocessor Options.
52161                                                              (line    6)
52162 * order of evaluation, side effects:     Non-bugs.           (line  196)
52163 * order of options:                      Invoking GCC.       (line   30)
52164 * OS_main AVR function attribute:        Function Attributes.
52165                                                              (line 1071)
52166 * OS_task AVR function attribute:        Function Attributes.
52167                                                              (line 1071)
52168 * other register constraints:            Simple Constraints. (line  163)
52169 * output file option:                    Overall Options.    (line  191)
52170 * overloaded virtual function, warning:  C++ Dialect Options.
52171                                                              (line  618)
52172 * p in constraint:                       Simple Constraints. (line  154)
52173 * packed attribute:                      Variable Attributes.
52174                                                              (line  145)
52175 * parameter forward declaration:         Variable Length.    (line   59)
52176 * Pascal:                                G++ and GCC.        (line   23)
52177 * pcs function attribute:                Function Attributes.
52178                                                              (line 1096)
52179 * PDP-11 Options:                        PDP-11 Options.     (line    6)
52180 * PIC:                                   Code Gen Options.   (line  267)
52181 * picoChip options:                      picoChip Options.   (line    6)
52182 * pmf:                                   Bound member functions.
52183                                                              (line    6)
52184 * pointer arguments:                     Function Attributes.
52185                                                              (line  188)
52186 * pointer to member function:            Bound member functions.
52187                                                              (line    6)
52188 * portions of temporary objects, pointers to: Temporaries.   (line    6)
52189 * pow:                                   Other Builtins.     (line    6)
52190 * pow10:                                 Other Builtins.     (line    6)
52191 * pow10f:                                Other Builtins.     (line    6)
52192 * pow10l:                                Other Builtins.     (line    6)
52193 * PowerPC options:                       PowerPC Options.    (line    6)
52194 * powf:                                  Other Builtins.     (line    6)
52195 * powl:                                  Other Builtins.     (line    6)
52196 * pragma GCC optimize:                   Function Specific Option Pragmas.
52197                                                              (line   21)
52198 * pragma GCC pop_options:                Function Specific Option Pragmas.
52199                                                              (line   34)
52200 * pragma GCC push_options:               Function Specific Option Pragmas.
52201                                                              (line   34)
52202 * pragma GCC reset_options:              Function Specific Option Pragmas.
52203                                                              (line   44)
52204 * pragma GCC target:                     Function Specific Option Pragmas.
52205                                                              (line    7)
52206 * pragma, address:                       M32C Pragmas.       (line   15)
52207 * pragma, align:                         Solaris Pragmas.    (line   11)
52208 * pragma, call:                          MeP Pragmas.        (line   48)
52209 * pragma, coprocessor available:         MeP Pragmas.        (line   13)
52210 * pragma, coprocessor call_saved:        MeP Pragmas.        (line   20)
52211 * pragma, coprocessor subclass:          MeP Pragmas.        (line   28)
52212 * pragma, custom io_volatile:            MeP Pragmas.        (line    7)
52213 * pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
52214 * pragma, disinterrupt:                  MeP Pragmas.        (line   38)
52215 * pragma, fini:                          Solaris Pragmas.    (line   19)
52216 * pragma, init:                          Solaris Pragmas.    (line   24)
52217 * pragma, long_calls:                    ARM Pragmas.        (line   11)
52218 * pragma, long_calls_off:                ARM Pragmas.        (line   17)
52219 * pragma, longcall:                      RS/6000 and PowerPC Pragmas.
52220                                                              (line   14)
52221 * pragma, mark:                          Darwin Pragmas.     (line   11)
52222 * pragma, memregs:                       M32C Pragmas.       (line    7)
52223 * pragma, no_long_calls:                 ARM Pragmas.        (line   14)
52224 * pragma, options align:                 Darwin Pragmas.     (line   14)
52225 * pragma, pop_macro:                     Push/Pop Macro Pragmas.
52226                                                              (line   15)
52227 * pragma, push_macro:                    Push/Pop Macro Pragmas.
52228                                                              (line   11)
52229 * pragma, reason for not using:          Function Attributes.
52230                                                              (line 1870)
52231 * pragma, redefine_extname:              Symbol-Renaming Pragmas.
52232                                                              (line   12)
52233 * pragma, segment:                       Darwin Pragmas.     (line   21)
52234 * pragma, unused:                        Darwin Pragmas.     (line   24)
52235 * pragma, visibility:                    Visibility Pragmas. (line    8)
52236 * pragma, weak:                          Weak Pragmas.       (line   10)
52237 * pragmas:                               Pragmas.            (line    6)
52238 * pragmas in C++, effect on inlining:    C++ Interface.      (line   66)
52239 * pragmas, interface and implementation: C++ Interface.      (line    6)
52240 * pragmas, warning of unknown:           Warning Options.    (line  691)
52241 * precompiled headers:                   Precompiled Headers.
52242                                                              (line    6)
52243 * preprocessing numbers:                 Incompatibilities.  (line  173)
52244 * preprocessing tokens:                  Incompatibilities.  (line  173)
52245 * preprocessor options:                  Preprocessor Options.
52246                                                              (line    6)
52247 * printf:                                Other Builtins.     (line    6)
52248 * printf_unlocked:                       Other Builtins.     (line    6)
52249 * prof:                                  Debugging Options.  (line  327)
52250 * progmem AVR variable attribute:        Variable Attributes.
52251                                                              (line  318)
52252 * promotion of formal parameters:        Function Prototypes.
52253                                                              (line    6)
52254 * pure function attribute:               Function Attributes.
52255                                                              (line 1114)
52256 * push address instruction:              Simple Constraints. (line  154)
52257 * putchar:                               Other Builtins.     (line    6)
52258 * puts:                                  Other Builtins.     (line    6)
52259 * Q floating point suffix:               Floating Types.     (line    6)
52260 * q floating point suffix:               Floating Types.     (line    6)
52261 * qsort, and global register variables:  Global Reg Vars.    (line   41)
52262 * question mark:                         Multi-Alternative.  (line   27)
52263 * R fixed-suffix:                        Fixed-Point.        (line    6)
52264 * r fixed-suffix:                        Fixed-Point.        (line    6)
52265 * r in constraint:                       Simple Constraints. (line   66)
52266 * RAMPD:                                 AVR Options.        (line  340)
52267 * RAMPX:                                 AVR Options.        (line  340)
52268 * RAMPY:                                 AVR Options.        (line  340)
52269 * RAMPZ:                                 AVR Options.        (line  340)
52270 * ranges in case statements:             Case Ranges.        (line    6)
52271 * read-only strings:                     Incompatibilities.  (line    9)
52272 * register variable after longjmp:       Global Reg Vars.    (line   65)
52273 * registers:                             Extended Asm.       (line    6)
52274 * registers for local variables:         Local Reg Vars.     (line    6)
52275 * registers in constraints:              Simple Constraints. (line   66)
52276 * registers, global allocation:          Explicit Reg Vars.  (line    6)
52277 * registers, global variables in:        Global Reg Vars.    (line    6)
52278 * regparm attribute:                     Function Attributes.
52279                                                              (line 1194)
52280 * relocation truncated to fit (ColdFire): M680x0 Options.    (line  329)
52281 * relocation truncated to fit (MIPS):    MIPS Options.       (line  200)
52282 * remainder:                             Other Builtins.     (line    6)
52283 * remainderf:                            Other Builtins.     (line    6)
52284 * remainderl:                            Other Builtins.     (line    6)
52285 * remquo:                                Other Builtins.     (line    6)
52286 * remquof:                               Other Builtins.     (line    6)
52287 * remquol:                               Other Builtins.     (line    6)
52288 * renesas attribute:                     Function Attributes.
52289                                                              (line 1226)
52290 * reordering, warning:                   C++ Dialect Options.
52291                                                              (line  533)
52292 * reporting bugs:                        Bugs.               (line    6)
52293 * resbank attribute:                     Function Attributes.
52294                                                              (line 1230)
52295 * rest argument (in macro):              Variadic Macros.    (line    6)
52296 * restricted pointers:                   Restricted Pointers.
52297                                                              (line    6)
52298 * restricted references:                 Restricted Pointers.
52299                                                              (line    6)
52300 * restricted this pointer:               Restricted Pointers.
52301                                                              (line    6)
52302 * returns_twice attribute:               Function Attributes.
52303                                                              (line 1244)
52304 * rindex:                                Other Builtins.     (line    6)
52305 * rint:                                  Other Builtins.     (line    6)
52306 * rintf:                                 Other Builtins.     (line    6)
52307 * rintl:                                 Other Builtins.     (line    6)
52308 * RL78 Options:                          RL78 Options.       (line    6)
52309 * round:                                 Other Builtins.     (line    6)
52310 * roundf:                                Other Builtins.     (line    6)
52311 * roundl:                                Other Builtins.     (line    6)
52312 * RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
52313                                                              (line    6)
52314 * RTTI:                                  Vague Linkage.      (line   42)
52315 * run-time options:                      Code Gen Options.   (line    6)
52316 * RX Options:                            RX Options.         (line    6)
52317 * s in constraint:                       Simple Constraints. (line  102)
52318 * S/390 and zSeries Options:             S/390 and zSeries Options.
52319                                                              (line    6)
52320 * save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes.
52321                                                              (line 1253)
52322 * save volatile registers on the MicroBlaze: Function Attributes.
52323                                                              (line 1258)
52324 * scalb:                                 Other Builtins.     (line    6)
52325 * scalbf:                                Other Builtins.     (line    6)
52326 * scalbl:                                Other Builtins.     (line    6)
52327 * scalbln:                               Other Builtins.     (line    6)
52328 * scalblnf:                              Other Builtins.     (line    6)
52329 * scalbn:                                Other Builtins.     (line    6)
52330 * scalbnf:                               Other Builtins.     (line    6)
52331 * scanf, and constant strings:           Incompatibilities.  (line   17)
52332 * scanfnl:                               Other Builtins.     (line    6)
52333 * scope of a variable length array:      Variable Length.    (line   22)
52334 * scope of declaration:                  Disappointments.    (line   21)
52335 * scope of external declarations:        Incompatibilities.  (line   80)
52336 * Score Options:                         Score Options.      (line    6)
52337 * search path:                           Directory Options.  (line    6)
52338 * section function attribute:            Function Attributes.
52339                                                              (line 1266)
52340 * section variable attribute:            Variable Attributes.
52341                                                              (line  166)
52342 * sentinel function attribute:           Function Attributes.
52343                                                              (line 1282)
52344 * setjmp:                                Global Reg Vars.    (line   65)
52345 * setjmp incompatibilities:              Incompatibilities.  (line   39)
52346 * shared strings:                        Incompatibilities.  (line    9)
52347 * shared variable attribute:             Variable Attributes.
52348                                                              (line  211)
52349 * side effect in ?::                     Conditionals.       (line   20)
52350 * side effects, macro argument:          Statement Exprs.    (line   35)
52351 * side effects, order of evaluation:     Non-bugs.           (line  196)
52352 * signbit:                               Other Builtins.     (line    6)
52353 * signbitd128:                           Other Builtins.     (line    6)
52354 * signbitd32:                            Other Builtins.     (line    6)
52355 * signbitd64:                            Other Builtins.     (line    6)
52356 * signbitf:                              Other Builtins.     (line    6)
52357 * signbitl:                              Other Builtins.     (line    6)
52358 * signed and unsigned values, comparison warning: Warning Options.
52359                                                              (line 1156)
52360 * significand:                           Other Builtins.     (line    6)
52361 * significandf:                          Other Builtins.     (line    6)
52362 * significandl:                          Other Builtins.     (line    6)
52363 * simple constraints:                    Simple Constraints. (line    6)
52364 * sin:                                   Other Builtins.     (line    6)
52365 * sincos:                                Other Builtins.     (line    6)
52366 * sincosf:                               Other Builtins.     (line    6)
52367 * sincosl:                               Other Builtins.     (line    6)
52368 * sinf:                                  Other Builtins.     (line    6)
52369 * sinh:                                  Other Builtins.     (line    6)
52370 * sinhf:                                 Other Builtins.     (line    6)
52371 * sinhl:                                 Other Builtins.     (line    6)
52372 * sinl:                                  Other Builtins.     (line    6)
52373 * sizeof:                                Typeof.             (line    6)
52374 * smaller data references:               M32R/D Options.     (line   57)
52375 * smaller data references (PowerPC):     RS/6000 and PowerPC Options.
52376                                                              (line  662)
52377 * snprintf:                              Other Builtins.     (line    6)
52378 * Solaris 2 options:                     Solaris 2 Options.  (line    6)
52379 * sp_switch attribute:                   Function Attributes.
52380                                                              (line 1331)
52381 * SPARC options:                         SPARC Options.      (line    6)
52382 * Spec Files:                            Spec Files.         (line    6)
52383 * specified registers:                   Explicit Reg Vars.  (line    6)
52384 * specifying compiler version and target machine: Target Options.
52385                                                              (line    6)
52386 * specifying hardware config:            Submodel Options.   (line    6)
52387 * specifying machine version:            Target Options.     (line    6)
52388 * specifying registers for local variables: Local Reg Vars.  (line    6)
52389 * speed of compilation:                  Precompiled Headers.
52390                                                              (line    6)
52391 * sprintf:                               Other Builtins.     (line    6)
52392 * SPU options:                           SPU Options.        (line    6)
52393 * sqrt:                                  Other Builtins.     (line    6)
52394 * sqrtf:                                 Other Builtins.     (line    6)
52395 * sqrtl:                                 Other Builtins.     (line    6)
52396 * sscanf:                                Other Builtins.     (line    6)
52397 * sscanf, and constant strings:          Incompatibilities.  (line   17)
52398 * sseregparm attribute:                  Function Attributes.
52399                                                              (line 1211)
52400 * statements inside expressions:         Statement Exprs.    (line    6)
52401 * static data in C++, declaring and defining: Static Definitions.
52402                                                              (line    6)
52403 * stpcpy:                                Other Builtins.     (line    6)
52404 * stpncpy:                               Other Builtins.     (line    6)
52405 * strcasecmp:                            Other Builtins.     (line    6)
52406 * strcat:                                Other Builtins.     (line    6)
52407 * strchr:                                Other Builtins.     (line    6)
52408 * strcmp:                                Other Builtins.     (line    6)
52409 * strcpy:                                Other Builtins.     (line    6)
52410 * strcspn:                               Other Builtins.     (line    6)
52411 * strdup:                                Other Builtins.     (line    6)
52412 * strfmon:                               Other Builtins.     (line    6)
52413 * strftime:                              Other Builtins.     (line    6)
52414 * string constants:                      Incompatibilities.  (line    9)
52415 * strlen:                                Other Builtins.     (line    6)
52416 * strncasecmp:                           Other Builtins.     (line    6)
52417 * strncat:                               Other Builtins.     (line    6)
52418 * strncmp:                               Other Builtins.     (line    6)
52419 * strncpy:                               Other Builtins.     (line    6)
52420 * strndup:                               Other Builtins.     (line    6)
52421 * strpbrk:                               Other Builtins.     (line    6)
52422 * strrchr:                               Other Builtins.     (line    6)
52423 * strspn:                                Other Builtins.     (line    6)
52424 * strstr:                                Other Builtins.     (line    6)
52425 * struct:                                Unnamed Fields.     (line    6)
52426 * structures:                            Incompatibilities.  (line  146)
52427 * structures, constructor expression:    Compound Literals.  (line    6)
52428 * submodel options:                      Submodel Options.   (line    6)
52429 * subscripting:                          Subscripting.       (line    6)
52430 * subscripting and function values:      Subscripting.       (line    6)
52431 * suffixes for C++ source:               Invoking G++.       (line    6)
52432 * SUNPRO_DEPENDENCIES:                   Environment Variables.
52433                                                              (line  172)
52434 * suppressing warnings:                  Warning Options.    (line    6)
52435 * surprises in C++:                      C++ Misunderstandings.
52436                                                              (line    6)
52437 * syntax checking:                       Warning Options.    (line   13)
52438 * syscall_linkage attribute:             Function Attributes.
52439                                                              (line 1346)
52440 * system headers, warnings from:         Warning Options.    (line  843)
52441 * sysv_abi attribute:                    Function Attributes.
52442                                                              (line  881)
52443 * tan:                                   Other Builtins.     (line    6)
52444 * tanf:                                  Other Builtins.     (line    6)
52445 * tanh:                                  Other Builtins.     (line    6)
52446 * tanhf:                                 Other Builtins.     (line    6)
52447 * tanhl:                                 Other Builtins.     (line    6)
52448 * tanl:                                  Other Builtins.     (line    6)
52449 * target function attribute:             Function Attributes.
52450                                                              (line 1353)
52451 * target machine, specifying:            Target Options.     (line    6)
52452 * target options:                        Target Options.     (line    6)
52453 * target("abm") attribute:               Function Attributes.
52454                                                              (line 1379)
52455 * target("aes") attribute:               Function Attributes.
52456                                                              (line 1384)
52457 * target("align-stringops") attribute:   Function Attributes.
52458                                                              (line 1478)
52459 * target("altivec") attribute:           Function Attributes.
52460                                                              (line 1504)
52461 * target("arch=ARCH") attribute:         Function Attributes.
52462                                                              (line 1487)
52463 * target("avoid-indexed-addresses") attribute: Function Attributes.
52464                                                              (line 1625)
52465 * target("cld") attribute:               Function Attributes.
52466                                                              (line 1449)
52467 * target("cmpb") attribute:              Function Attributes.
52468                                                              (line 1510)
52469 * target("cpu=CPU") attribute:           Function Attributes.
52470                                                              (line 1640)
52471 * target("default") attribute:           Function Attributes.
52472                                                              (line 1387)
52473 * target("dlmzb") attribute:             Function Attributes.
52474                                                              (line 1516)
52475 * target("fancy-math-387") attribute:    Function Attributes.
52476                                                              (line 1453)
52477 * target("fma4") attribute:              Function Attributes.
52478                                                              (line 1433)
52479 * target("fpmath=FPMATH") attribute:     Function Attributes.
52480                                                              (line 1495)
52481 * target("fprnd") attribute:             Function Attributes.
52482                                                              (line 1523)
52483 * target("friz") attribute:              Function Attributes.
52484                                                              (line 1616)
52485 * target("fused-madd") attribute:        Function Attributes.
52486                                                              (line 1458)
52487 * target("hard-dfp") attribute:          Function Attributes.
52488                                                              (line 1529)
52489 * target("ieee-fp") attribute:           Function Attributes.
52490                                                              (line 1463)
52491 * target("inline-all-stringops") attribute: Function Attributes.
52492                                                              (line 1468)
52493 * target("inline-stringops-dynamically") attribute: Function Attributes.
52494                                                              (line 1472)
52495 * target("isel") attribute:              Function Attributes.
52496                                                              (line 1535)
52497 * target("longcall") attribute:          Function Attributes.
52498                                                              (line 1635)
52499 * target("lwp") attribute:               Function Attributes.
52500                                                              (line 1441)
52501 * target("mfcrf") attribute:             Function Attributes.
52502                                                              (line 1539)
52503 * target("mfpgpr") attribute:            Function Attributes.
52504                                                              (line 1546)
52505 * target("mmx") attribute:               Function Attributes.
52506                                                              (line 1392)
52507 * target("mulhw") attribute:             Function Attributes.
52508                                                              (line 1553)
52509 * target("multiple") attribute:          Function Attributes.
52510                                                              (line 1560)
52511 * target("paired") attribute:            Function Attributes.
52512                                                              (line 1630)
52513 * target("pclmul") attribute:            Function Attributes.
52514                                                              (line 1396)
52515 * target("popcnt") attribute:            Function Attributes.
52516                                                              (line 1400)
52517 * target("popcntb") attribute:           Function Attributes.
52518                                                              (line 1571)
52519 * target("popcntd") attribute:           Function Attributes.
52520                                                              (line 1578)
52521 * target("powerpc-gfxopt") attribute:    Function Attributes.
52522                                                              (line 1584)
52523 * target("powerpc-gpopt") attribute:     Function Attributes.
52524                                                              (line 1590)
52525 * target("recip") attribute:             Function Attributes.
52526                                                              (line 1482)
52527 * target("recip-precision") attribute:   Function Attributes.
52528                                                              (line 1596)
52529 * target("sse") attribute:               Function Attributes.
52530                                                              (line 1404)
52531 * target("sse2") attribute:              Function Attributes.
52532                                                              (line 1408)
52533 * target("sse3") attribute:              Function Attributes.
52534                                                              (line 1412)
52535 * target("sse4") attribute:              Function Attributes.
52536                                                              (line 1416)
52537 * target("sse4.1") attribute:            Function Attributes.
52538                                                              (line 1421)
52539 * target("sse4.2") attribute:            Function Attributes.
52540                                                              (line 1425)
52541 * target("sse4a") attribute:             Function Attributes.
52542                                                              (line 1429)
52543 * target("ssse3") attribute:             Function Attributes.
52544                                                              (line 1445)
52545 * target("string") attribute:            Function Attributes.
52546                                                              (line 1602)
52547 * target("tune=TUNE") attribute:         Function Attributes.
52548                                                              (line 1491)
52549 * target("update") attribute:            Function Attributes.
52550                                                              (line 1565)
52551 * target("vsx") attribute:               Function Attributes.
52552                                                              (line 1608)
52553 * target("xop") attribute:               Function Attributes.
52554                                                              (line 1437)
52555 * TC1:                                   Standards.          (line   13)
52556 * TC2:                                   Standards.          (line   13)
52557 * TC3:                                   Standards.          (line   13)
52558 * Technical Corrigenda:                  Standards.          (line   13)
52559 * Technical Corrigendum 1:               Standards.          (line   13)
52560 * Technical Corrigendum 2:               Standards.          (line   13)
52561 * Technical Corrigendum 3:               Standards.          (line   13)
52562 * template instantiation:                Template Instantiation.
52563                                                              (line    6)
52564 * temporaries, lifetime of:              Temporaries.        (line    6)
52565 * tgamma:                                Other Builtins.     (line    6)
52566 * tgammaf:                               Other Builtins.     (line    6)
52567 * tgammal:                               Other Builtins.     (line    6)
52568 * Thread-Local Storage:                  Thread-Local.       (line    6)
52569 * thunks:                                Nested Functions.   (line    6)
52570 * TILE-Gx options:                       TILE-Gx Options.    (line    6)
52571 * TILEPro options:                       TILEPro Options.    (line    6)
52572 * tiny data section on the H8/300H and H8S: Function Attributes.
52573                                                              (line 1669)
52574 * TLS:                                   Thread-Local.       (line    6)
52575 * tls_model attribute:                   Variable Attributes.
52576                                                              (line  235)
52577 * TMPDIR:                                Environment Variables.
52578                                                              (line   45)
52579 * toascii:                               Other Builtins.     (line    6)
52580 * tolower:                               Other Builtins.     (line    6)
52581 * toupper:                               Other Builtins.     (line    6)
52582 * towlower:                              Other Builtins.     (line    6)
52583 * towupper:                              Other Builtins.     (line    6)
52584 * traditional C language:                C Dialect Options.  (line  307)
52585 * trap_exit attribute:                   Function Attributes.
52586                                                              (line 1676)
52587 * trapa_handler attribute:               Function Attributes.
52588                                                              (line 1681)
52589 * trunc:                                 Other Builtins.     (line    6)
52590 * truncf:                                Other Builtins.     (line    6)
52591 * truncl:                                Other Builtins.     (line    6)
52592 * two-stage name lookup:                 Name lookup.        (line    6)
52593 * type alignment:                        Alignment.          (line    6)
52594 * type attributes:                       Type Attributes.    (line    6)
52595 * type_info:                             Vague Linkage.      (line   42)
52596 * typedef names as function parameters:  Incompatibilities.  (line   97)
52597 * typeof:                                Typeof.             (line    6)
52598 * UHK fixed-suffix:                      Fixed-Point.        (line    6)
52599 * uhk fixed-suffix:                      Fixed-Point.        (line    6)
52600 * UHR fixed-suffix:                      Fixed-Point.        (line    6)
52601 * uhr fixed-suffix:                      Fixed-Point.        (line    6)
52602 * UK fixed-suffix:                       Fixed-Point.        (line    6)
52603 * uk fixed-suffix:                       Fixed-Point.        (line    6)
52604 * ULK fixed-suffix:                      Fixed-Point.        (line    6)
52605 * ulk fixed-suffix:                      Fixed-Point.        (line    6)
52606 * ULL integer suffix:                    Long Long.          (line    6)
52607 * ULLK fixed-suffix:                     Fixed-Point.        (line    6)
52608 * ullk fixed-suffix:                     Fixed-Point.        (line    6)
52609 * ULLR fixed-suffix:                     Fixed-Point.        (line    6)
52610 * ullr fixed-suffix:                     Fixed-Point.        (line    6)
52611 * ULR fixed-suffix:                      Fixed-Point.        (line    6)
52612 * ulr fixed-suffix:                      Fixed-Point.        (line    6)
52613 * undefined behavior:                    Bug Criteria.       (line   17)
52614 * undefined function value:              Bug Criteria.       (line   17)
52615 * underscores in variables in macros:    Typeof.             (line   46)
52616 * union:                                 Unnamed Fields.     (line    6)
52617 * union, casting to a:                   Cast to Union.      (line    6)
52618 * unions:                                Incompatibilities.  (line  146)
52619 * unknown pragmas, warning:              Warning Options.    (line  691)
52620 * unresolved references and -nodefaultlibs: Link Options.    (line   85)
52621 * unresolved references and -nostdlib:   Link Options.       (line   85)
52622 * unused attribute.:                     Function Attributes.
52623                                                              (line 1685)
52624 * UR fixed-suffix:                       Fixed-Point.        (line    6)
52625 * ur fixed-suffix:                       Fixed-Point.        (line    6)
52626 * use_debug_exception_return attribute:  Function Attributes.
52627                                                              (line  712)
52628 * use_shadow_register_set attribute:     Function Attributes.
52629                                                              (line  703)
52630 * used attribute.:                       Function Attributes.
52631                                                              (line 1690)
52632 * User stack pointer in interrupts on the Blackfin: Function Attributes.
52633                                                              (line  754)
52634 * V in constraint:                       Simple Constraints. (line   43)
52635 * V850 Options:                          V850 Options.       (line    6)
52636 * vague linkage:                         Vague Linkage.      (line    6)
52637 * value after longjmp:                   Global Reg Vars.    (line   65)
52638 * variable addressability on the IA-64:  Function Attributes.
52639                                                              (line  853)
52640 * variable addressability on the M32R/D: Variable Attributes.
52641                                                              (line  374)
52642 * variable alignment:                    Alignment.          (line    6)
52643 * variable attributes:                   Variable Attributes.
52644                                                              (line    6)
52645 * variable number of arguments:          Variadic Macros.    (line    6)
52646 * variable-length array scope:           Variable Length.    (line   22)
52647 * variable-length arrays:                Variable Length.    (line    6)
52648 * variables in specified registers:      Explicit Reg Vars.  (line    6)
52649 * variables, local, in macros:           Typeof.             (line   46)
52650 * variadic macros:                       Variadic Macros.    (line    6)
52651 * VAX options:                           VAX Options.        (line    6)
52652 * version_id attribute:                  Function Attributes.
52653                                                              (line 1700)
52654 * vfprintf:                              Other Builtins.     (line    6)
52655 * vfscanf:                               Other Builtins.     (line    6)
52656 * visibility attribute:                  Function Attributes.
52657                                                              (line 1710)
52658 * VLAs:                                  Variable Length.    (line    6)
52659 * vliw attribute:                        Function Attributes.
52660                                                              (line 1803)
52661 * void pointers, arithmetic:             Pointer Arith.      (line    6)
52662 * void, size of pointer to:              Pointer Arith.      (line    6)
52663 * volatile access <1>:                   C++ Volatiles.      (line    6)
52664 * volatile access:                       Volatiles.          (line    6)
52665 * volatile applied to function:          Function Attributes.
52666                                                              (line    6)
52667 * volatile read <1>:                     C++ Volatiles.      (line    6)
52668 * volatile read:                         Volatiles.          (line    6)
52669 * volatile write <1>:                    C++ Volatiles.      (line    6)
52670 * volatile write:                        Volatiles.          (line    6)
52671 * vprintf:                               Other Builtins.     (line    6)
52672 * vscanf:                                Other Builtins.     (line    6)
52673 * vsnprintf:                             Other Builtins.     (line    6)
52674 * vsprintf:                              Other Builtins.     (line    6)
52675 * vsscanf:                               Other Builtins.     (line    6)
52676 * vtable:                                Vague Linkage.      (line   27)
52677 * VxWorks Options:                       VxWorks Options.    (line    6)
52678 * W floating point suffix:               Floating Types.     (line    6)
52679 * w floating point suffix:               Floating Types.     (line    6)
52680 * warn_unused_result attribute:          Function Attributes.
52681                                                              (line 1809)
52682 * warning for comparison of signed and unsigned values: Warning Options.
52683                                                              (line 1156)
52684 * warning for overloaded virtual function: C++ Dialect Options.
52685                                                              (line  618)
52686 * warning for reordering of member initializers: C++ Dialect Options.
52687                                                              (line  533)
52688 * warning for unknown pragmas:           Warning Options.    (line  691)
52689 * warning function attribute:            Function Attributes.
52690                                                              (line  166)
52691 * warning messages:                      Warning Options.    (line    6)
52692 * warnings from system headers:          Warning Options.    (line  843)
52693 * warnings vs errors:                    Warnings and Errors.
52694                                                              (line    6)
52695 * weak attribute:                        Function Attributes.
52696                                                              (line 1826)
52697 * weakref attribute:                     Function Attributes.
52698                                                              (line 1835)
52699 * whitespace:                            Incompatibilities.  (line  112)
52700 * X in constraint:                       Simple Constraints. (line  124)
52701 * X3.159-1989:                           Standards.          (line   13)
52702 * x86-64 options:                        x86-64 Options.     (line    6)
52703 * x86-64 Options:                        i386 and x86-64 Options.
52704                                                              (line    6)
52705 * Xstormy16 Options:                     Xstormy16 Options.  (line    6)
52706 * Xtensa Options:                        Xtensa Options.     (line    6)
52707 * y0:                                    Other Builtins.     (line    6)
52708 * y0f:                                   Other Builtins.     (line    6)
52709 * y0l:                                   Other Builtins.     (line    6)
52710 * y1:                                    Other Builtins.     (line    6)
52711 * y1f:                                   Other Builtins.     (line    6)
52712 * y1l:                                   Other Builtins.     (line    6)
52713 * yn:                                    Other Builtins.     (line    6)
52714 * ynf:                                   Other Builtins.     (line    6)
52715 * ynl:                                   Other Builtins.     (line    6)
52716 * zero-length arrays:                    Zero Length.        (line    6)
52717 * zero-size structures:                  Empty Structures.   (line    6)
52718 * zSeries options:                       zSeries Options.    (line    6)
52719
52720
52721 \1f
52722 Tag Table:
52723 Node: Top\7f1920
52724 Node: G++ and GCC\7f3686
52725 Node: Standards\7f5755
52726 Node: Invoking GCC\7f17933
52727 Node: Option Summary\7f21678
52728 Node: Overall Options\7f61417
52729 Node: Invoking G++\7f75516
52730 Node: C Dialect Options\7f77039
52731 Node: C++ Dialect Options\7f92878
52732 Node: Objective-C and Objective-C++ Dialect Options\7f120980
52733 Node: Language Independent Options\7f131488
52734 Node: Warning Options\7f133687
52735 Node: Debugging Options\7f202888
52736 Node: Optimize Options\7f260279
52737 Ref: Type-punning\7f318948
52738 Node: Preprocessor Options\7f397157
52739 Ref: Wtrigraphs\7f401939
52740 Ref: dashMF\7f406687
52741 Ref: fdollars-in-identifiers\7f417551
52742 Node: Assembler Options\7f427818
52743 Node: Link Options\7f428510
52744 Ref: Link Options-Footnote-1\7f439754
52745 Node: Directory Options\7f440088
52746 Node: Spec Files\7f446647
52747 Node: Target Options\7f468045
52748 Node: Submodel Options\7f468444
52749 Node: AArch64 Options\7f470137
52750 Node: Adapteva Epiphany Options\7f474011
52751 Node: ARM Options\7f479962
52752 Node: AVR Options\7f495607
52753 Node: Blackfin Options\7f515951
52754 Node: C6X Options\7f523966
52755 Node: CRIS Options\7f525509
52756 Node: CR16 Options\7f529253
52757 Node: Darwin Options\7f530160
52758 Node: DEC Alpha Options\7f537593
52759 Node: FR30 Options\7f549181
52760 Node: FRV Options\7f549746
52761 Node: GNU/Linux Options\7f556465
52762 Node: H8/300 Options\7f557726
52763 Node: HPPA Options\7f559176
52764 Node: i386 and x86-64 Options\7f568660
52765 Node: i386 and x86-64 Windows Options\7f605501
52766 Node: IA-64 Options\7f608357
52767 Node: LM32 Options\7f616421
52768 Node: M32C Options\7f616945
52769 Node: M32R/D Options\7f618219
52770 Node: M680x0 Options\7f621765
52771 Node: MCore Options\7f635811
52772 Node: MeP Options\7f637314
52773 Node: MicroBlaze Options\7f641273
52774 Node: MIPS Options\7f644069
52775 Node: MMIX Options\7f672969
52776 Node: MN10300 Options\7f675451
52777 Node: Moxie Options\7f677994
52778 Node: PDP-11 Options\7f678365
52779 Node: picoChip Options\7f680057
52780 Node: PowerPC Options\7f682198
52781 Node: RL78 Options\7f682419
52782 Node: RS/6000 and PowerPC Options\7f683081
52783 Node: RX Options\7f717931
52784 Node: S/390 and zSeries Options\7f725265
52785 Node: Score Options\7f733187
52786 Node: SH Options\7f734029
52787 Node: Solaris 2 Options\7f752884
52788 Node: SPARC Options\7f754115
52789 Node: SPU Options\7f766821
52790 Node: System V Options\7f771758
52791 Node: TILE-Gx Options\7f772584
52792 Node: TILEPro Options\7f773508
52793 Node: V850 Options\7f774012
52794 Node: VAX Options\7f780725
52795 Node: VMS Options\7f781260
52796 Node: VxWorks Options\7f782071
52797 Node: x86-64 Options\7f783226
52798 Node: Xstormy16 Options\7f783444
52799 Node: Xtensa Options\7f783733
52800 Node: zSeries Options\7f788044
52801 Node: Code Gen Options\7f788240
52802 Node: Environment Variables\7f818074
52803 Node: Precompiled Headers\7f826075
52804 Node: C Implementation\7f832083
52805 Node: Translation implementation\7f833752
52806 Node: Environment implementation\7f834326
52807 Node: Identifiers implementation\7f834876
52808 Node: Characters implementation\7f835930
52809 Node: Integers implementation\7f838736
52810 Node: Floating point implementation\7f840561
52811 Node: Arrays and pointers implementation\7f843490
52812 Ref: Arrays and pointers implementation-Footnote-1\7f844925
52813 Node: Hints implementation\7f845049
52814 Node: Structures unions enumerations and bit-fields implementation\7f846515
52815 Node: Qualifiers implementation\7f848501
52816 Node: Declarators implementation\7f850273
52817 Node: Statements implementation\7f850615
52818 Node: Preprocessing directives implementation\7f850942
52819 Node: Library functions implementation\7f853047
52820 Node: Architecture implementation\7f853687
52821 Node: Locale-specific behavior implementation\7f854390
52822 Node: C++ Implementation\7f854695
52823 Node: Conditionally-supported behavior\7f855977
52824 Node: Exception handling\7f856487
52825 Node: C Extensions\7f856896
52826 Node: Statement Exprs\7f861890
52827 Node: Local Labels\7f866349
52828 Node: Labels as Values\7f869322
52829 Ref: Labels as Values-Footnote-1\7f871721
52830 Node: Nested Functions\7f871904
52831 Node: Constructing Calls\7f875862
52832 Node: Typeof\7f880580
52833 Node: Conditionals\7f883888
52834 Node: __int128\7f884778
52835 Node: Long Long\7f885302
52836 Node: Complex\7f886778
52837 Node: Floating Types\7f889367
52838 Node: Half-Precision\7f890495
52839 Node: Decimal Float\7f892677
52840 Node: Hex Floats\7f894532
52841 Node: Fixed-Point\7f895568
52842 Node: Named Address Spaces\7f898850
52843 Ref: AVR Named Address Spaces\7f899531
52844 Node: Zero Length\7f904737
52845 Node: Empty Structures\7f908024
52846 Node: Variable Length\7f908430
52847 Node: Variadic Macros\7f911106
52848 Node: Escaped Newlines\7f913484
52849 Node: Subscripting\7f914323
52850 Node: Pointer Arith\7f915049
52851 Node: Initializers\7f915617
52852 Node: Compound Literals\7f916113
52853 Node: Designated Inits\7f919474
52854 Node: Case Ranges\7f923106
52855 Node: Cast to Union\7f923787
52856 Node: Mixed Declarations\7f924878
52857 Node: Function Attributes\7f925388
52858 Node: Attribute Syntax\7f1011269
52859 Node: Function Prototypes\7f1021660
52860 Node: C++ Comments\7f1023441
52861 Node: Dollar Signs\7f1023960
52862 Node: Character Escapes\7f1024425
52863 Node: Variable Attributes\7f1024719
52864 Ref: AVR Variable Attributes\7f1038386
52865 Ref: MeP Variable Attributes\7f1041047
52866 Ref: i386 Variable Attributes\7f1042993
52867 Node: Type Attributes\7f1048657
52868 Ref: MeP Type Attributes\7f1062545
52869 Ref: i386 Type Attributes\7f1062819
52870 Ref: PowerPC Type Attributes\7f1063510
52871 Ref: SPU Type Attributes\7f1064372
52872 Node: Alignment\7f1064663
52873 Node: Inline\7f1066033
52874 Node: Volatiles\7f1071008
52875 Node: Extended Asm\7f1073890
52876 Ref: Example of asm with clobbered asm reg\7f1079794
52877 Ref: Extended asm with goto\7f1089501
52878 Node: Constraints\7f1097352
52879 Node: Simple Constraints\7f1098436
52880 Node: Multi-Alternative\7f1105757
52881 Node: Modifiers\7f1107474
52882 Node: Machine Constraints\7f1110488
52883 Node: Asm Labels\7f1159452
52884 Node: Explicit Reg Vars\7f1161128
52885 Node: Global Reg Vars\7f1162731
52886 Node: Local Reg Vars\7f1167227
52887 Node: Alternate Keywords\7f1169644
52888 Node: Incomplete Enums\7f1171130
52889 Node: Function Names\7f1171886
52890 Node: Return Address\7f1174047
52891 Node: Vector Extensions\7f1177554
52892 Node: Offsetof\7f1183729
52893 Node: __sync Builtins\7f1184542
52894 Node: __atomic Builtins\7f1190012
52895 Node: x86 specific memory model extensions for transactional memory\7f1201298
52896 Node: Object Size Checking\7f1202535
52897 Node: Other Builtins\7f1208024
52898 Node: Target Builtins\7f1237168
52899 Node: Alpha Built-in Functions\7f1238308
52900 Node: ARM iWMMXt Built-in Functions\7f1241317
52901 Node: ARM NEON Intrinsics\7f1248297
52902 Node: AVR Built-in Functions\7f1456716
52903 Node: Blackfin Built-in Functions\7f1459786
52904 Node: FR-V Built-in Functions\7f1460403
52905 Node: Argument Types\7f1461262
52906 Node: Directly-mapped Integer Functions\7f1463014
52907 Node: Directly-mapped Media Functions\7f1464096
52908 Node: Raw read/write Functions\7f1471128
52909 Node: Other Built-in Functions\7f1472040
52910 Node: X86 Built-in Functions\7f1473224
52911 Node: X86 transactional memory intrinsics\7f1532192
52912 Node: MIPS DSP Built-in Functions\7f1534866
52913 Node: MIPS Paired-Single Support\7f1547374
52914 Node: MIPS Loongson Built-in Functions\7f1548873
52915 Node: Paired-Single Arithmetic\7f1555393
52916 Node: Paired-Single Built-in Functions\7f1556341
52917 Node: MIPS-3D Built-in Functions\7f1559008
52918 Node: Other MIPS Built-in Functions\7f1564385
52919 Node: picoChip Built-in Functions\7f1564909
52920 Node: PowerPC Built-in Functions\7f1566258
52921 Node: PowerPC AltiVec/VSX Built-in Functions\7f1567672
52922 Node: RX Built-in Functions\7f1677659
52923 Node: SH Built-in Functions\7f1681662
52924 Node: SPARC VIS Built-in Functions\7f1683043
52925 Node: SPU Built-in Functions\7f1688647
52926 Node: TI C6X Built-in Functions\7f1690463
52927 Node: TILE-Gx Built-in Functions\7f1691487
52928 Node: TILEPro Built-in Functions\7f1692604
52929 Node: Target Format Checks\7f1693671
52930 Node: Solaris Format Checks\7f1694103
52931 Node: Darwin Format Checks\7f1694529
52932 Node: Pragmas\7f1695347
52933 Node: ARM Pragmas\7f1696057
52934 Node: M32C Pragmas\7f1696660
52935 Node: MeP Pragmas\7f1697734
52936 Node: RS/6000 and PowerPC Pragmas\7f1699803
52937 Node: Darwin Pragmas\7f1700544
52938 Node: Solaris Pragmas\7f1701611
52939 Node: Symbol-Renaming Pragmas\7f1702772
52940 Node: Structure-Packing Pragmas\7f1704326
52941 Node: Weak Pragmas\7f1705976
52942 Node: Diagnostic Pragmas\7f1706710
52943 Node: Visibility Pragmas\7f1709817
52944 Node: Push/Pop Macro Pragmas\7f1710569
52945 Node: Function Specific Option Pragmas\7f1711541
52946 Node: Unnamed Fields\7f1713798
52947 Node: Thread-Local\7f1716026
52948 Node: C99 Thread-Local Edits\7f1718131
52949 Node: C++98 Thread-Local Edits\7f1720143
52950 Node: Binary constants\7f1723587
52951 Node: C++ Extensions\7f1724258
52952 Node: C++ Volatiles\7f1725969
52953 Node: Restricted Pointers\7f1728317
52954 Node: Vague Linkage\7f1729908
52955 Node: C++ Interface\7f1733532
52956 Ref: C++ Interface-Footnote-1\7f1737818
52957 Node: Template Instantiation\7f1737954
52958 Node: Bound member functions\7f1744541
52959 Node: C++ Attributes\7f1746073
52960 Node: Function Multiversioning\7f1748729
52961 Node: Namespace Association\7f1750544
52962 Node: Type Traits\7f1751924
52963 Node: Java Exceptions\7f1758412
52964 Node: Deprecated Features\7f1759802
52965 Node: Backwards Compatibility\7f1762767
52966 Node: Objective-C\7f1764119
52967 Node: GNU Objective-C runtime API\7f1764728
52968 Node: Modern GNU Objective-C runtime API\7f1765735
52969 Node: Traditional GNU Objective-C runtime API\7f1768172
52970 Node: Executing code before main\7f1768900
52971 Node: What you can and what you cannot do in +load\7f1771638
52972 Node: Type encoding\7f1774028
52973 Node: Legacy type encoding\7f1779104
52974 Node: @encode\7f1780195
52975 Node: Method signatures\7f1780736
52976 Node: Garbage Collection\7f1782731
52977 Node: Constant string objects\7f1785420
52978 Node: compatibility_alias\7f1787928
52979 Node: Exceptions\7f1788650
52980 Node: Synchronization\7f1791361
52981 Node: Fast enumeration\7f1792545
52982 Node: Using fast enumeration\7f1792857
52983 Node: c99-like fast enumeration syntax\7f1794068
52984 Node: Fast enumeration details\7f1794771
52985 Node: Fast enumeration protocol\7f1797112
52986 Node: Messaging with the GNU Objective-C runtime\7f1800264
52987 Node: Dynamically registering methods\7f1801635
52988 Node: Forwarding hook\7f1803326
52989 Node: Compatibility\7f1806366
52990 Node: Gcov\7f1812933
52991 Node: Gcov Intro\7f1813466
52992 Node: Invoking Gcov\7f1816184
52993 Node: Gcov and Optimization\7f1829095
52994 Node: Gcov Data Files\7f1832095
52995 Node: Cross-profiling\7f1833490
52996 Node: Trouble\7f1835341
52997 Node: Actual Bugs\7f1836753
52998 Node: Interoperation\7f1837200
52999 Node: Incompatibilities\7f1844092
53000 Node: Fixed Headers\7f1852243
53001 Node: Standard Libraries\7f1853906
53002 Node: Disappointments\7f1855278
53003 Node: C++ Misunderstandings\7f1859636
53004 Node: Static Definitions\7f1860447
53005 Node: Name lookup\7f1861500
53006 Ref: Name lookup-Footnote-1\7f1866278
53007 Node: Temporaries\7f1866465
53008 Node: Copy Assignment\7f1868441
53009 Node: Non-bugs\7f1870248
53010 Node: Warnings and Errors\7f1880755
53011 Node: Bugs\7f1882517
53012 Node: Bug Criteria\7f1883081
53013 Node: Bug Reporting\7f1885291
53014 Node: Service\7f1885512
53015 Node: Contributing\7f1886331
53016 Node: Funding\7f1887071
53017 Node: GNU Project\7f1889560
53018 Node: Copying\7f1890206
53019 Node: GNU Free Documentation License\7f1927734
53020 Node: Contributors\7f1952871
53021 Node: Option Index\7f1990273
53022 Node: Keyword Index\7f2180269
53023 \1f
53024 End Tag Table