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.
4 Copyright (C) 1988-2013 Free Software Foundation, Inc.
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".
14 (a) The FSF's Front-Cover Text is:
18 (b) The FSF's Back-Cover Text is:
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.
24 INFO-DIR-SECTION Software development
26 * gcc: (gcc). The GNU Compiler Collection.
27 * g++: (gcc). The GNU C++ compiler.
28 * gcov: (gcc) Gcov. `gcov'--a test coverage program.
30 This file documents the use of the GNU compilers.
32 Copyright (C) 1988-2013 Free Software Foundation, Inc.
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".
42 (a) The FSF's Front-Cover Text is:
46 (b) The FSF's Back-Cover Text is:
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.
54 File: gcc.info, Node: Top, Next: G++ and GCC, Up: (DIR)
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.
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.
83 * Funding:: How to help assure funding for free software.
84 * GNU Project:: The GNU Project and GNU/Linux.
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.
91 * Option Index:: Index to command line options.
92 * Keyword Index:: Index of concepts and symbol names.
95 File: gcc.info, Node: G++ and GCC, Next: Standards, Prev: Top, Up: Top
97 1 Programming Languages Supported by GCC
98 ****************************************
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.
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.
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
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
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.
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.
138 File: gcc.info, Node: Standards, Next: Invoking GCC, Prev: G++ and GCC, Up: Top
140 2 Language Standards Supported by GCC
141 *************************************
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.
150 GCC supports three versions of the C standard, although support for the
151 most recent version is not yet complete.
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.
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
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).
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".)
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
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
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.
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
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.
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.
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'.
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'
262 GCC supports the original ISO C++ standard (1998) and contains
263 experimental support for the second ISO C++ standard (2011).
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).
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).
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/'.
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'.
297 2.3 Objective-C and Objective-C++ languages
298 ===========================================
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++.
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.
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;
323 * `http://objc.toodarkpark.net' is the same document in another
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
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
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.
349 GCC has currently no support for non-fragile instance variables.
351 The authoritative manual on Objective-C 2.0 is available from Apple:
353 `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/'
355 For more information concerning the history of Objective-C that is
356 available online, see `http://gcc.gnu.org/readings.html'
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'.
364 2.5 References for other languages
365 ==================================
367 *Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
368 conformance and compatibility of the Ada compiler.
370 *Note Standards: (gfortran)Standards, for details of standards
371 supported by GNU Fortran.
373 *Note Compatibility with the Java Platform: (gcj)Compatibility, for
374 details of compatibility between `gcj' and the Java Platform.
377 File: gcc.info, Node: Invoking GCC, Next: C Implementation, Prev: Standards, Up: Top
379 3 GCC Command Options
380 *********************
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
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.
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.
399 *Note Compiling C++ Programs: Invoking G++, for a summary of special
400 options for compiling C++ programs.
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'.
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.
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.
418 *Note Option Index::, for an index to GCC's options.
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
431 * Language Independent Options:: Controlling how diagnostics should be
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
448 * Environment Variables:: Env vars that affect GCC.
449 * Precompiled Headers:: Compiling a header once, and using it many times.
452 File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC
457 Here is a summary of all the options, grouped by type. Explanations are
458 in the following sections.
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
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
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
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
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
513 -fobjc-call-cxx-cdtors
514 -fobjc-direct-dispatch
519 -freplace-objc-classes
523 -Wno-protocol -Wselector
524 -Wstrict-selector-match
525 -Wundeclared-selector
527 _Language Independent Options_
528 *Note Options to Control Diagnostic Messages Formatting: Language
531 -fdiagnostics-show-location=[once|every-line]
532 -fno-diagnostics-show-option -fno-diagnostics-show-caret
535 *Note Options to Request or Suppress Warnings: Warning Options.
536 -fsyntax-only -fmax-errors=N -Wpedantic
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
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
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
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
589 *Note Options for Debugging Your Program or GCC: Debugging Options.
590 -dLETTERS -dumpspecs -dumpmachine -dumpversion
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
605 -fdump-tree-original[-N]
606 -fdump-tree-optimized[-N]
607 -fdump-tree-cfg -fdump-tree-alias
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]
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
621 -fdump-tree-forwprop[-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
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
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]
654 _Optimization Options_
655 *Note Options that Control Optimization: Optimize Options.
656 -faggressive-loop-optimizations -falign-functions[=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
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
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
730 -O -O0 -O1 -O2 -O3 -Os -Ofast -Og
732 _Preprocessor Options_
733 *Note Options Controlling the Preprocessor: Preprocessor Options.
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
749 *Note Passing Options to the Assembler: Assembler Options.
750 -Wa,OPTION -Xassembler OPTION
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
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
768 _Machine Dependent Options_
769 *Note Hardware Models and Configurations: Submodel Options.
772 -mbig-endian -mlittle-endian
774 -mcmodel=tiny -mcmodel=small -mcmodel=large
776 -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer
777 -mtls-dialect=desc -mtls-dialect=traditional
778 -march=NAME -mcpu=NAME -mtune=NAME
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
789 -mapcs-frame -mno-apcs-frame
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
798 -mthumb-interwork -mno-thumb-interwork
799 -mcpu=NAME -march=NAME -mfpu=NAME
800 -mstructure-size-boundary=N
802 -mlong-calls -mno-long-calls
803 -msingle-pic-base -mno-single-pic-base
808 -mtpcs-frame -mtpcs-leaf-frame
809 -mcaller-super-interworking -mcallee-super-interworking
810 -mtp=NAME -mtls-dialect=DIALECT
816 -mmcu=MCU -maccumulate-args -mbranch-cost=COST
817 -mcall-prologues -mint8 -mno-interrupts -mrelax
818 -mstrict-X -mtiny-stack -Waddr-space-convert
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
832 -mbig-endian -mlittle-endian -march=CPU
833 -msim -msdata=SDATA-TYPE
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
847 -msim -mint32 -mbit-ops
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
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
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
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
890 -msmall-model -mno-lsim
893 -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64
894 -mhard-float -msoft-float
895 -malloc-cc -mfixed-cc -mdword -mno-dword
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
911 -mglibc -muclibc -mbionic -mandroid
912 -tno-android-cc -tno-android-ld
915 -mrelax -mh -ms -mn -mexr -mno-exr -mint32 -malign-300
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
932 _i386 and x86-64 Options_
933 -mtune=CPU-TYPE -march=CPU-TYPE
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
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
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
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
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
989 -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled
990 -msign-extend-enabled -muser-enabled
995 -malign-loops -mno-align-loops
998 -mmodel=CODE-SIZE-MODEL-TYPE
1000 -mno-flush-func -mflush-func=NAME
1001 -mno-flush-trap -mflush-trap=NUMBER
1005 -mcpu=CPU -msim -memregs=NUMBER
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
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
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
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
1040 -EL -EB -march=ARCH -mtune=ARCH
1041 -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2
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
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
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
1084 -mmult-bug -mno-mult-bug
1085 -mno-am33 -mam33 -mam33-2 -mam34
1087 -mreturn-pointer-on-d0
1088 -mno-crt0 -mrelax -mliw -msetlb
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
1102 -mae=AE_TYPE -mvliw-lookahead=N
1103 -msymbol-as-address -mno-inefficient-warnings
1105 _PowerPC Options_ See RS/6000 and PowerPC Options.
1108 -msim -mmul=none -mmul=g13 -mmul=rl78
1110 _RS/6000 and PowerPC Options_
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
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
1141 -misel=yes -misel=no
1145 -mgen-cell-microcode -mwarn-cell-microcode
1146 -mvrsave -mno-vrsave
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
1160 -m64bit-doubles -m32bit-doubles -fpu -nofpu
1162 -mbig-endian-data -mlittle-endian-data
1165 -mas100-syntax -mno-as100-syntax
1167 -mmax-constant-size=
1170 -mno-warn-multiple-fast-interrupts
1171 -msave-acc-in-interrupts
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
1188 -mscore5 -mscore5u -mscore7 -mscore7d
1192 -m2a-nofpu -m2a-single-only -m2a-single -m2a
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
1212 -mimpure-text -mno-impure-text
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
1233 -mwarn-reloc -merror-reloc
1234 -msafe-dma -munsafe-dma
1236 -msmall-mem -mlarge-mem -mstdmain
1237 -mfixed-range=REGISTER-RANGE
1239 -maddress-space-conversion -mno-address-space-conversion
1240 -mcache-size=CACHE-SIZE
1241 -matomic-updates -mno-atomic-updates
1244 -Qy -Qn -YP,PATHS -Ym,DIR
1247 -mcpu=CPU -m32 -m64 -mcmodel=CODE-MODEL
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
1273 -mvms-return-codes -mdebug-main=PREFIX -mmalloc64
1277 -mrtp -non-static -Bstatic -Bdynamic
1278 -Xbind-lazy -Xbind-now
1280 _x86-64 Options_ See i386 and x86-64 Options.
1286 -mconst16 -mno-const16
1287 -mfused-madd -mno-fused-madd
1289 -mserialize-volatile -mno-serialize-volatile
1290 -mtext-section-literals -mno-text-section-literals
1291 -mtarget-align -mno-target-align
1292 -mlongcalls -mno-longcalls
1294 _zSeries Options_ See S/390 and zSeries Options.
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
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
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
1329 * Language Independent Options:: Controlling how diagnostics should be
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.
1344 File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC
1346 3.2 Options Controlling the Kind of Output
1347 ==========================================
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
1357 For any given input file, the file name suffix determines what kind of
1358 compilation is done:
1361 C source code that must be preprocessed.
1364 C source code that should not be preprocessed.
1367 C++ source code that should not be preprocessed.
1370 Objective-C source code. Note that you must link with the
1371 `libobjc' library to make an Objective-C program work.
1374 Objective-C source code that should not be preprocessed.
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.
1383 Objective-C++ source code that should not be preprocessed.
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).
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.
1403 Objective-C++ source code that must be preprocessed.
1406 Objective-C++ source code that should not be preprocessed.
1416 C++ header file to be turned into a precompiled header or Ada spec.
1421 Fixed form Fortran source code that should not be preprocessed.
1428 Fixed form Fortran source code that must be preprocessed (with the
1429 traditional preprocessor).
1435 Free form Fortran source code that should not be preprocessed.
1441 Free form Fortran source code that must be preprocessed (with the
1442 traditional preprocessor).
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
1455 Ada source code file containing a library unit body (a subprogram
1456 or package body). Such files are also called "bodies".
1463 Assembler code that must be preprocessed.
1466 An object file to be fed straight into linking. Any file name
1467 with no recognized suffix is treated this way.
1469 You can specify the input language explicitly with the `-x' option:
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
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
1483 f77 f77-cpp-input f95 f95-cpp-input
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).
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.
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
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.
1511 By default, the object file name for a source file is made by
1512 replacing the suffix `.c', `.i', `.s', etc., with `.o'.
1514 Unrecognized input files, not requiring compilation or assembly,
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.
1522 By default, the assembler file name for a source file is made by
1523 replacing the suffix `.c', `.i', etc., with `.s'.
1525 Input files that don't require compilation are ignored.
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.
1532 Input files that don't require preprocessing are ignored.
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.
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
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
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
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.
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.
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.
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:
1583 Display all of the optimization options supported by the
1587 Display all of the options controlling warning messages
1588 produced by the compiler.
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.
1597 Display the values recognized by the `--param' option.
1600 Display the options supported for LANGUAGE, where LANGUAGE is
1601 the name of one of the languages supported in this version of
1605 Display the options that are common to all languages.
1607 These are the supported qualifiers:
1610 Display only those options that are undocumented.
1613 Display options taking an argument that appears after an equal
1614 sign in the same continuous piece of text, such as:
1618 Display options taking an argument that appears as a separate
1619 word following the original option, such as: `-o output-file'.
1621 Thus for example to display all the undocumented target-specific
1622 switches supported by the compiler, use:
1624 --help=target,undocumented
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:
1631 --help=warnings,^joined,^undocumented
1633 The argument to `--help=' should not consist solely of inverted
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:
1642 --help=target,optimizers
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.
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).
1655 Here is a truncated example from the ARM port of `gcc':
1657 % gcc -Q -mabi=2 --help=target -c
1658 The following options are target specific:
1660 -mabort-on-noreturn [disabled]
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:
1667 -Q -O2 --help=optimizers
1669 Alternatively you can discover which binary optimizations are
1670 enabled by `-O3' by using:
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
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.
1681 Display the version number and copyrights of the invoked GCC.
1684 Invoke all subcommands under a wrapper program. The name of the
1685 wrapper program and its parameters are passed as a comma separated
1688 gcc -c t.c -wrapper gdb,--args
1690 This invokes all subprograms of `gcc' under `gdb --args', thus the
1691 invocation of `cc1' is `gdb --args cc1 ...'.
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
1701 `-fplugin-arg-NAME-KEY=VALUE'
1702 Define an argument called KEY with a value of VALUE for the plugin
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.
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.
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.
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
1732 File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC
1734 3.3 Compiling C++ Programs
1735 ==========================
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
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
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.
1763 File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC
1765 3.4 Options Controlling C Dialect
1766 =================================
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
1773 In C mode, this is equivalent to `-std=c90'. In C++ mode, it is
1774 equivalent to `-std=c++98'.
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'
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'.
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::.
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.
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
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
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'
1832 A value for this option must be provided; possible values are
1837 Support all ISO C90 programs (certain GNU extensions that
1838 conflict with ISO C90 are disabled). Same as `-ansi' for C
1842 ISO C90 as modified in amendment 1.
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.
1855 ISO C11, the 2011 revision of the ISO C standard. Support is
1856 incomplete and experimental. The name `c1x' is deprecated.
1860 GNU dialect of ISO C90 (including some C99 features). This is
1861 the default for C code.
1865 GNU dialect of ISO C99. When ISO C99 is fully implemented in
1866 GCC, this will become the default. The name `gnu9x' is
1871 GNU dialect of ISO C11. Support is incomplete and
1872 experimental. The name `gnu1x' is deprecated.
1876 The 1998 ISO C++ standard plus the 2003 technical corrigendum
1877 and some additional defect reports. Same as `-ansi' for C++
1882 GNU dialect of `-std=c++98'. This is the default for C++
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.
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.
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
1904 GNU dialect of `-std=c++1y'. Support is highly experimental,
1905 and will almost certainly change in incompatible ways in
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::).
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
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.
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.
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.
1945 `-fallow-parameterless-variadic-functions'
1946 Accept variadic functions without named parameters.
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++.
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
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
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.
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.
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:
1997 #define abs(n) __builtin_abs ((n))
1998 #define strcpy(d, s) __builtin_strcpy ((d), (s))
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'.
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'.
2014 *Note Language Standards Supported by GCC: Standards, for details
2015 of freestanding and hosted environments.
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'.
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.
2033 For more information on GCC's support for transactional memory,
2034 *Note The GNU Transactional Memory Library: (libitm)Enabling
2037 Note that the transactional memory feature is not supported with
2038 non-call exceptions (`-fnon-call-exceptions').
2041 Accept some non-standard constructs used in Microsoft header files.
2043 In C++ code, this allows member names in structures to be similar
2044 to previous types declarations.
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.
2055 `-fplan9-extensions'
2056 Accept some non-standard constructs used in Plan 9 code.
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++.
2066 Support ISO C trigraphs. The `-ansi' option (and `-std' options
2067 for strict ISO C conformance) implies `-trigraphs'.
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.
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++.
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.
2087 Let the type `char' be unsigned, like `unsigned char'.
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
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.
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.
2105 Let the type `char' be signed, like `signed char'.
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'.
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.
2121 File: gcc.info, Node: C++ Dialect Options, Next: Objective-C and Objective-C++ Dialect Options, Prev: C Dialect Options, Up: Invoking GCC
2123 3.5 Options Controlling C++ Dialect
2124 ===================================
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:
2131 g++ -g -frepo -O -c firstClass.C
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
2137 Here is a list of options that are _only_ for compiling C++ programs:
2140 Use version N of the C++ ABI. The default is version 2.
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.
2146 Version 1 is the version of the C++ ABI that first appeared in G++
2149 Version 2 is the version of the C++ ABI that first appeared in G++
2152 Version 3 corrects an error in mangling a constant address as a
2155 Version 4, which first appeared in G++ 4.5, implements a standard
2156 mangling for vector types.
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
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.
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.
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)'.
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.
2190 `-fdeduce-init-list'
2191 Enable deduction of a template type parameter as
2192 `std::initializer_list' from a brace-enclosed initializer list,
2195 template <class T> auto forward(T t) -> decltype (realfn (t))
2202 forward({1,2}); // call forward<std::initializer_list<int>>
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
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.
2221 This option is for compatibility, and may be removed in a future
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.
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.
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.
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'.
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++.
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.
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'.
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
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.
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.
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.
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.
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'.
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.
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.
2327 Downgrade some diagnostics about nonconformant code from errors to
2328 warnings. Thus, using `-fpermissive' allows some nonconforming
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.
2344 Enable automatic template instantiation at link time. This option
2345 also implies `-fno-implicit-templates'. *Note Template
2346 Instantiation::, for more information.
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.
2359 Emit statistics about front-end processing at the end of the
2360 compilation. This information is generally only useful to the G++
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
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.
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
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
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
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.
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.
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.
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.
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.
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::.
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.
2435 The flag makes these changes to GCC's linkage model:
2437 1. It sets the default visibility to `hidden', like
2438 `-fvisibility=hidden'.
2440 2. Types, but not their members, are not hidden by default.
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.
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.
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
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++.
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.)
2472 In addition, these optimization, warning, and code generation options
2473 have meanings only for C++ programs:
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.
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.
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.
2493 The known incompatibilities in `-fabi-version=2' (the default)
2496 * A template with a non-type template parameter of reference
2497 type is mangled incorrectly:
2499 template <int &> struct S {};
2502 This is fixed in `-fabi-version=3'.
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
2509 The mangling is changed in `-fabi-version=4'.
2511 The known incompatibilities in `-fabi-version=1' include:
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
2517 struct A { virtual void f(); int f1 : 1; };
2518 struct B : public A { int f2 : 1; };
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.
2526 * Incorrect handling of tail-padding for virtual bases. G++
2527 does not use tail padding when laying out virtual bases. For
2530 struct A { virtual void f(); char c1; };
2531 struct B { B(); char c2; };
2532 struct C : public A, public virtual B {};
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.
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:
2544 union U { int i : 4096; };
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'.
2549 * Empty classes can be placed at incorrect offsets. For
2559 struct C : public B, public A {};
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.
2565 * Names of template functions whose types involve `typename' or
2566 template template parameters can be mangled incorrectly.
2568 template <typename Q>
2569 void f(typename Q::X) {}
2571 template <template <typename> class Q>
2572 void f(typename Q<int>::X) {}
2574 Instantiations of these templates may be mangled incorrectly.
2577 It also warns about psABI-related changes. The known psABI
2578 changes at this point include:
2580 * For SysV/x86-64, unions with `long double' members are passed
2581 in memory as specified in psABI. For example:
2588 `union U' is always passed in memory.
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.
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'.
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:
2612 #define __STDC_FORMAT_MACROS
2613 #include <inttypes.h>
2618 printf("My int64: %"PRId64"\n", i64);
2621 In this case, `PRId64' is treated as a separate preprocessing
2624 This warning is enabled by default.
2626 `-Wnarrowing (C++ and Objective-C++ only)'
2627 Warn when a narrowing conversion prohibited by C++11 occurs within
2630 int i = { 2.2 }; // error: narrowing from double to int
2632 This flag is included in `-Wall' and `-Wc++11-compat'.
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.
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.
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
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:
2659 A(): j (0), i (1) { }
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'.
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', ...).
2675 The following `-W...' options are not affected by `-Wall'.
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:
2681 * Item 11: Define a copy constructor and an assignment
2682 operator for classes with dynamically-allocated memory.
2684 * Item 12: Prefer initialization to assignment in constructors.
2686 * Item 14: Make destructors virtual in base classes.
2688 * Item 15: Have `operator=' return a reference to `*this'.
2690 * Item 23: Don't try to return a reference when you must
2694 Also warn about violations of the following style guidelines from
2695 Scott Meyers' `More Effective C++' book:
2697 * Item 6: Distinguish between prefix and postfix forms of
2698 increment and decrement operators.
2700 * Item 7: Never overload `&&', `||', or `,'.
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.
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
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.
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.
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:
2745 struct B: public A {
2749 the `A' class version of `f' is hidden in `B', and code like:
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.
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.
2767 File: gcc.info, Node: Objective-C and Objective-C++ Dialect Options, Next: Language Independent Options, Prev: C++ Dialect Options, Up: Invoking GCC
2769 3.6 Options Controlling Objective-C and Objective-C++ Dialects
2770 ==============================================================
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.)
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:
2781 gcc -g -fgnu-runtime -O -c some_class.m
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.
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').
2792 Here is a list of options that are _only_ for compiling Objective-C
2793 and Objective-C++ programs:
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.
2805 Generate object code compatible with the standard GNU Objective-C
2806 runtime. This is the default for most types of systems.
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
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.
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
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
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.
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.
2857 `-fobjc-direct-dispatch'
2858 Allow fast jumps to the message dispatcher. On Darwin this is
2859 accomplished via the comm page.
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
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.
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.
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
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.
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.
2919 Dump interface declarations for all classes seen in the source
2920 file to a file named `SOURCENAME.decl'.
2922 `-Wassign-intercept (Objective-C and Objective-C++ only)'
2923 Warn whenever an Objective-C assignment is being intercepted by the
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
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.
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.
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.
2968 `-print-objc-runtime-info'
2969 Generate C header describing the largest structure that is passed
2974 File: gcc.info, Node: Language Independent Options, Next: Warning Options, Prev: Objective-C and Objective-C++ Dialect Options, Up: Invoking GCC
2976 3.7 Options to Control Diagnostic Messages Formatting
2977 =====================================================
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.
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.
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.
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.
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.
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.
3019 File: gcc.info, Node: Warning Options, Next: Debugging Options, Prev: Language Independent Options, Up: Invoking GCC
3021 3.8 Options to Request or Suppress Warnings
3022 ===========================================
3024 Warnings are diagnostic messages that report constructions that are not
3025 inherently erroneous but that are risky or suggest there may have been
3028 The following language-independent options do not enable specific
3029 warnings but control the kinds of diagnostics produced by GCC.
3032 Check the code for syntax errors, but don't do anything beyond
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.
3043 Inhibit all warning messages.
3046 Make all warnings into errors.
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.
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.)
3062 Note that specifying `-Werror='FOO automatically implies `-W'FOO.
3063 However, `-Wno-error='FOO does not imply anything.
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.
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::.
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
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
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
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::.
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.
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.
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.)
3133 Like `-Wpedantic', except that errors are produced rather than
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
3144 `-Wall' turns on the following warning flags:
3147 -Warray-bounds (only with `-O2')
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)
3155 -Wmain (only for C/ObjC and unless `-ffreestanding')
3156 -Wmaybe-uninitialized
3157 -Wmissing-braces (only for C/ObjC)
3164 -Wsign-compare (only in C++)
3175 -Wvolatile-register-var
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.
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.)
3192 -Wignored-qualifiers
3193 -Wmissing-field-initializers
3194 -Wmissing-parameter-type (C only)
3195 -Wold-style-declaration (C only)
3200 -Wunused-parameter (only with `-Wunused' or `-Wall')
3201 -Wunused-but-set-parameter (only with `-Wunused' or `-Wall')
3203 The option `-Wextra' also prints warning messages for the
3206 * A pointer is compared against integer zero with `<', `<=',
3209 * (C++ only) An enumerator and a non-enumerator both appear in a
3210 conditional expression.
3212 * (C++ only) Ambiguous virtual bases.
3214 * (C++ only) Subscripting an array that has been declared
3217 * (C++ only) Taking the address of a variable that has been
3218 declared `register'.
3220 * (C++ only) A base class is not initialized in a derived
3221 class's copy constructor.
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'.
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'.
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.
3249 (C, Objective-C, C++, Objective-C++ and Fortran only)
3251 Suppress warning messages emitted by `#warning' directives.
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
3261 It is easy to accidentally do computations with `double' because
3262 floating-point literals are implicitly of type `double'. For
3264 float area(float radius)
3266 return 3.14159 * radius * radius;
3268 the compiler performs the entire computation with `double' because
3269 the floating-point literal is a `double'.
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
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
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'.
3309 `-Wno-format-contains-nul'
3310 If `-Wformat' is specified, do not warn about format strings
3311 that contain NUL bytes.
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.
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.
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
3333 Enable `-Wformat' plus additional format checks. Currently
3334 equivalent to `-Wformat -Wformat-nonliteral -Wformat-security
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'.
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'.)
3355 If `-Wformat' is specified, also warn about `strftime'
3356 formats that may yield only a two-digit year.
3359 Warn about passing a null pointer for arguments marked as
3360 requiring a non-null value by the `nonnull' function attribute.
3362 `-Wnonnull' is included in `-Wall' and `-Wformat'. It can be
3363 disabled with the `-Wno-nonnull' option.
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.
3370 For example, GCC warns about `i' being uninitialized in the
3371 following snippet only when `-Winit-self' has been specified:
3378 This warning is enabled by `-Wall' in C++.
3380 `-Wimplicit-int (C and Objective-C only)'
3381 Warn when a declaration does not specify a type. This warning is
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'.
3390 `-Wimplicit (C and Objective-C only)'
3391 Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'.
3392 This warning is enabled by `-Wall'.
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
3403 This warning is also enabled by `-Wextra'.
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'.
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.
3418 int a[2][2] = { 0, 1, 2, 3 };
3419 int b[2][2] = { { 0, 1 }, { 2, 3 } };
3421 This warning is enabled by `-Wall'.
3423 `-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
3424 Warn if a user-supplied include directory does not exist.
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.
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.
3436 Also warn about constructions where there may be confusion to which
3437 `if' statement an `else' branch belongs. Here is an example of
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:
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.
3473 This warning is enabled by `-Wall'.
3476 Warn about code that may have undefined semantics because of
3477 violations of sequence point rules in the C and C++ standards.
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.
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.
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.
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'.
3519 This warning is enabled by `-Wall' for C and C++.
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.
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'.
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
3538 This warning is enabled by `-Wall'.
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'.
3549 Warn whenever a `switch' statement does not have a `default' case.
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
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
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'.
3570 `-Wunused-but-set-parameter'
3571 Warn whenever a function parameter is assigned to, but otherwise
3572 unused (aside from its declaration).
3574 To suppress this warning use the `unused' attribute (*note
3575 Variable Attributes::).
3577 This warning is also enabled by `-Wunused' together with `-Wextra'.
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'.
3583 To suppress this warning use the `unused' attribute (*note
3584 Variable Attributes::).
3586 This warning is also enabled by `-Wunused', which is enabled by
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
3595 Warn whenever a label is declared but not used. This warning is
3598 To suppress this warning use the `unused' attribute (*note
3599 Variable Attributes::).
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'.
3605 `-Wunused-parameter'
3606 Warn whenever a function parameter is unused aside from its
3609 To suppress this warning use the `unused' attribute (*note
3610 Variable Attributes::).
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'.
3618 Warn whenever a local variable or non-constant static variable is
3619 unused aside from its declaration. This warning is enabled by
3622 To suppress this warning use the `unused' attribute (*note
3623 Variable Attributes::).
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.
3633 This warning is enabled by `-Wall'.
3636 All the above `-Wunused' options combined.
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'.
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.
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'
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.
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.
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:
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.
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.
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.
3702 Some spurious warnings can be avoided if you declare all the
3703 functions you use that never return as `noreturn'. *Note Function
3706 This warning is enabled by `-Wall' or `-Wextra'.
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.
3716 Do not warn about misuses of pragmas, such as incorrect parameters,
3717 invalid syntax, or conflicts between pragmas. See also
3718 `-Wunknown-pragmas'.
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'
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'.
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.
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.
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
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.
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
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.
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'.
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'.
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
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.
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.
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
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
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.
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'.
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.
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'
3872 Warn about trampolines generated for pointers to nested functions.
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.
3883 Warn if floating-point values are used in equality comparisons.
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
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
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.
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.
3918 * A function-like macro that appears without arguments.
3920 * The unary plus operator.
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
3932 * A function declared external in one block and then used after
3933 the end of the block.
3935 * A `switch' statement has an operand of type `long'.
3937 * A non-`static' function declaration follows a `static' one.
3938 This construct is not accepted by some traditional C
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
3947 * Usage of ISO string concatenation is detected.
3949 * Initialization of automatic aggregates.
3951 * Identifier conflicts with labels. Traditional C lacks a
3952 separate namespace for labels.
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.
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'.
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
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
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
3991 Warn if an undefined identifier is evaluated in an `#if' directive.
3994 Do not warn whenever an `#else' or an `#endif' are followed by
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.
4005 Warn whenever an object of larger than LEN bytes is defined.
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.
4016 `-Wno-free-nonheap-object'
4017 Do not warn when attempting to free an object that was not
4018 allocated on the heap.
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.
4027 The message is in keeping with the output of `-fstack-usage'.
4029 * If the stack usage is fully static but exceeds the specified
4032 warning: stack usage is 1120 bytes
4034 * If the stack usage is (partly) dynamic but bounded, it's:
4036 warning: stack usage might be 1648 bytes
4038 * If the stack usage is (partly) dynamic and not bounded, it's:
4040 warning: stack usage might be unbounded
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
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.
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'.
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'.
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 *'.
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.
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'.
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 *'.
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:
4092 /* p is char ** value. */
4093 const char **q = (const char **) p;
4094 /* Assignment of readonly string to const char * is OK. */
4096 /* Now char** pointer points to read-only memory. */
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.
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
4115 When compiling C++, warn about the deprecated conversion from
4116 string literals to `char *'. This warning is enabled by default
4120 Warn for variables that might be changed by `longjmp' or `vfork'.
4121 This warning is also enabled by `-Wextra'.
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'.
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.
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.
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.
4149 `-Wuseless-cast (C++ and Objective-C++ only)'
4150 Warn when an expression is casted to its own type.
4153 Warn if an empty body occurs in an `if', `else' or `do while'
4154 statement. This warning is also enabled by `-Wextra'.
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'.
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.
4170 `-Wjump-misses-init' is included in `-Wc++-compat'. It can be
4171 disabled with the `-Wno-jump-misses-init' option.
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
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'.
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
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
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.
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
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
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
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__'.
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
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'.
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.
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:
4255 This warning is also enabled by `-Wextra'.
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++.
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.
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'
4282 struct s { int f, g, h; };
4283 struct s x = { 3, 4 };
4285 This option does not warn about designated initializers, so the
4286 following modification does not trigger a warning:
4288 struct s { int f, g, h; };
4289 struct s x = { .f = 3, .g = 4 };
4291 This warning is included in `-Wextra'. To get other `-Wextra'
4292 warnings without this one, use `-Wextra
4293 -Wno-missing-field-initializers'.
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
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.
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.
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.
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.
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.
4344 Do not warn about usage of deprecated features. *Note Deprecated
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'
4354 Do not warn about compile-time overflow in constant expressions.
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:
4361 This warning is included in `-Wextra'. To get other `-Wextra'
4362 warnings without this one, use `-Wextra -Wno-override-init'.
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
4375 } __attribute__((packed));
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:
4393 } __attribute__ ((packed));
4395 This warning is enabled by default. Use
4396 `-Wno-packed-bitfield-compat' to disable this warning.
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
4406 Warn if anything is declared more than once in the same scope,
4407 even in cases where multiple declaration is valid and changes
4410 `-Wnested-externs (C and Objective-C only)'
4411 Warn if an `extern' declaration is encountered within a function.
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.
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.
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
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.
4442 The restrictions on `offsetof' may be relaxed in a future version
4443 of the C++ standard.
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.
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
4455 Warn if a precompiled header (*note Precompiled Headers::) is
4456 found in the search path but can't be used.
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'.
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'.
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'.
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
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
4494 Warn if variable length array is used in the code. `-Wno-vla'
4495 prevents the `-Wpedantic' warning of the variable length array.
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
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
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'.
4519 This option is only active when `-fstack-protector' is active. It
4520 warns about functions that are not protected against stack
4524 Suppress warnings about constructs that cannot be instrumented by
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.
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++.
4539 This option is implied by `-Wpedantic', and can be disabled with
4540 `-Wno-overlength-strings'.
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.
4550 File: gcc.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking GCC
4552 3.9 Options for Debugging Your Program or GCC
4553 =============================================
4555 GCC has various special options that are used for debugging either your
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.
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
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.
4579 Nevertheless it proves possible to debug optimized output. This
4580 makes it reasonable to use the optimizer for programs that might
4583 The following options are useful when GCC is generated with the
4584 capability for more than one debugging format.
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
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.
4600 Generate dwarf .debug_pubnames and .debug_pubtypes sections.
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.
4610 `-feliminate-unused-debug-symbols'
4611 Produce debugging information in stabs format (if that is
4612 supported), for only symbols that are actually used.
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.
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.
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.
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.
4643 Produce debugging information in XCOFF format (if that is
4644 supported). This is the format used by the DBX debugger on IBM
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
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.
4660 Note that with DWARF Version 2, some ports require and always use
4661 some non-conflicting DWARF 3 extensions in the unwind tables.
4663 Version 4 may require GDB 7.0 and `-fvar-tracking-assignments' for
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.
4675 `-gno-record-gcc-switches'
4676 Disallow appending command-line options to the DW_AT_producer
4677 attribute in DWARF debugging information.
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
4686 Allow using extensions of later DWARF standard version than
4687 selected with `-gdwarf-VERSION'.
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.
4699 Request debugging information and also use LEVEL to specify how
4700 much information. The default level is 2.
4702 Level 0 produces no debug information at all. Thus, `-g0' negates
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.
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'.
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.
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'.
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.
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
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
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
4755 If the equal sign is omitted, the default `-gtoggle' is used.
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.
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.
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.
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.
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.
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'.
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.
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
4803 This option works only with DWARF 2.
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.
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
4817 This option works only with DWARF 2.
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.
4824 This option is a detailed version of `-femit-struct-debug-reduced'
4825 and `-femit-struct-debug-baseonly', which serves for most needs.
4827 A specification has the syntax
4828 [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none')
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;'.
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.
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.
4854 You may need to experiment to determine the best settings for your
4857 The default is `-femit-struct-debug-detailed=all'.
4859 This option works only with DWARF 2.
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.
4868 `-fdebug-prefix-map=OLD=NEW'
4869 When compiling files in directory `OLD', record debugging
4870 information describing them as in `NEW' instead.
4872 `-fno-dwarf2-cfi-asm'
4873 Emit DWARF 2 unwind info as compiler generated `.eh_frame' section
4874 instead of using GAS `.cfi_*' directives.
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
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
4889 Makes the compiler print out each function name as it is compiled,
4890 and print some statistics about each pass when it finishes.
4893 Makes the compiler print some statistics about the time consumed
4894 by each pass when it finishes.
4897 Makes the compiler print some statistics about permanent memory
4898 allocation when it finishes.
4901 Makes the compiler print some statistics about permanent memory
4902 allocation for the WPA phase only.
4904 `-fpre-ipa-mem-report'
4906 `-fpost-ipa-mem-report'
4907 Makes the compiler print some statistics about permanent memory
4908 allocation before or after interprocedural optimization.
4911 Makes the compiler print some statistics about consistency of the
4912 (estimated) profile and effect of individual passes.
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:
4922 * The name of the function.
4924 * A number of bytes.
4926 * One or more qualifiers: `static', `dynamic', `bounded'.
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.
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
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::.
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.
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.
4971 * Link your object files with `-lgcov' or `-fprofile-arcs' (the
4972 latter implies the former).
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
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.).
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.
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.
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
5011 Print the name and the counter upper bound for all debug counters.
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.
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.
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
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'.
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.
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
5062 `-fenable-rtl-PASS=RANGE-LIST'
5063 Enable RTL pass PASS. See `-fdisable-rtl' for option argument
5064 description and examples.
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.
5072 Here are some examples showing uses of these options.
5075 # disable ccp1 for all functions
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
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.
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:
5113 `-fdump-rtl-alignments'
5114 Dump after branch alignments have been computed.
5116 `-fdump-rtl-asmcons'
5117 Dump after fixing rtl statements that have unsatisfied in/out
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.
5124 `-fdump-rtl-barriers'
5125 Dump after cleaning up the barrier instructions.
5128 Dump after partitioning hot and cold basic blocks.
5131 Dump after block reordering.
5135 `-fdump-rtl-btl1' and `-fdump-rtl-btl2' enable dumping after
5136 the two branch target load optimization passes.
5139 Dump after jump bypassing and control flow optimizations.
5141 `-fdump-rtl-combine'
5142 Dump after the RTL instruction combination pass.
5144 `-fdump-rtl-compgotos'
5145 Dump after duplicating the computed gotos.
5150 `-fdump-rtl-ce1', `-fdump-rtl-ce2', and `-fdump-rtl-ce3'
5151 enable dumping after the three if conversion passes.
5153 `-fdump-rtl-cprop_hardreg'
5154 Dump after hard register copy propagation.
5157 Dump after combining stack adjustments.
5161 `-fdump-rtl-cse1' and `-fdump-rtl-cse2' enable dumping after
5162 the two common subexpression elimination passes.
5165 Dump after the standalone dead code elimination passes.
5168 Dump after delayed branch scheduling.
5172 `-fdump-rtl-dce1' and `-fdump-rtl-dce2' enable dumping after
5173 the two dead store elimination passes.
5176 Dump after finalization of EH handling code.
5178 `-fdump-rtl-eh_ranges'
5179 Dump after conversion of EH handling range regions.
5182 Dump after RTL generation.
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.
5191 `-fdump-rtl-gcse1' and `-fdump-rtl-gcse2' enable dumping
5192 after global common subexpression elimination.
5194 `-fdump-rtl-init-regs'
5195 Dump after the initialization of the registers.
5197 `-fdump-rtl-initvals'
5198 Dump after the computation of the initial value sets.
5200 `-fdump-rtl-into_cfglayout'
5201 Dump after converting to cfglayout mode.
5204 Dump after iterated register allocation.
5207 Dump after the second jump optimization.
5210 `-fdump-rtl-loop2' enables dumping after the rtl loop
5211 optimization passes.
5214 Dump after performing the machine dependent reorganization
5215 pass, if that pass exists.
5217 `-fdump-rtl-mode_sw'
5218 Dump after removing redundant mode switches.
5221 Dump after register renumbering.
5223 `-fdump-rtl-outof_cfglayout'
5224 Dump after converting from cfglayout mode.
5226 `-fdump-rtl-peephole2'
5227 Dump after the peephole pass.
5229 `-fdump-rtl-postreload'
5230 Dump after post-reload optimizations.
5232 `-fdump-rtl-pro_and_epilogue'
5233 Dump after generating the function prologues and epilogues.
5235 `-fdump-rtl-regmove'
5236 Dump after the register move pass.
5240 `-fdump-rtl-sched1' and `-fdump-rtl-sched2' enable dumping
5241 after the basic block scheduling passes.
5244 Dump after sign extension elimination.
5246 `-fdump-rtl-seqabstr'
5247 Dump after common sequence discovery.
5249 `-fdump-rtl-shorten'
5250 Dump after shortening branches.
5252 `-fdump-rtl-sibling'
5253 Dump after sibling call optimizations.
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.
5266 Dump after modulo scheduling. This pass is only run on some
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.
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.
5279 `-fdump-rtl-unshare'
5280 Dump after all rtl has been unshared.
5282 `-fdump-rtl-vartrack'
5283 Dump after variable tracking.
5286 Dump after converting virtual registers to hard registers.
5289 Dump after live range splitting.
5291 `-fdump-rtl-regclass'
5292 `-fdump-rtl-subregs_of_mode_init'
5293 `-fdump-rtl-subregs_of_mode_finish'
5295 `-fdump-rtl-dfinish'
5296 These dumps are defined but always produce empty files.
5300 Produce all the dumps listed above.
5303 Annotate the assembler output with miscellaneous debugging
5307 Dump all macro definitions, at the end of preprocessing, in
5308 addition to normal output.
5311 Produce a core dump whenever an error occurs.
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.
5319 Dump the RTL in the assembler output as a comment before each
5320 instruction. Also turns on `-dp' annotation.
5323 Just generate RTL for a function instead of compiling it.
5324 Usually used with `-fdump-rtl-expand'.
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.
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'.
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.
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.
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.
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
5369 Enables all inter-procedural analysis dumps.
5372 Dumps information about call-graph optimization, unused
5373 function removal, and inlining decisions.
5376 Dump after function inlining.
5380 Dump the list of optimization passes that are turned on and off by
5381 the current command-line options.
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.
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
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.
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
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.
5425 When dumping pretty-printed trees, this option inhibits
5426 dumping the bodies of control structures.
5428 When dumping RTL, print the RTL in slim (condensed) form
5429 instead of the default LISP-like representation.
5432 Print a raw representation of the tree. By default, trees are
5433 pretty-printed into a C-like representation.
5436 Enable more detailed dumps (not honored by every dump
5437 option). Also include information from the optimization
5441 Enable dumping various statistics about the pass (not honored
5442 by every dump option).
5445 Enable showing basic block boundaries (disabled in raw dumps).
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.
5455 This option currently only works for RTL dumps, and the RTL
5456 is always dumped in slim form.
5459 Enable showing virtual operands for every statement.
5462 Enable showing line numbers for statements.
5465 Enable showing the unique ID (`DECL_UID') for each variable.
5468 Enable showing the tree dump for each statement.
5471 Enable showing the EH region number holding each statement.
5474 Enable showing scalar evolution analysis details.
5477 Enable showing optimization information (only available in
5481 Enable showing missed optimization information (only
5482 available in certain passes).
5485 Enable other detailed optimization information (only
5486 available in certain passes).
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.
5494 gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
5495 -fdump-tree-pre=stderr file.c
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
5503 Turn on all options, except `raw', `slim', `verbose' and
5507 Turn on all optimization options, i.e., `optimized',
5508 `missed', and `note'.
5510 The following tree dumps are possible:
5512 Dump before any tree based optimization, to `FILE.original'.
5515 Dump after all tree based optimization, to `FILE.optimized'.
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.
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.
5527 Dump each function after copying loop headers. The file name
5528 is made by appending `.ch' to the source file name.
5531 Dump SSA related information to a file. The file name is
5532 made by appending `.ssa' to the source file name.
5535 Dump aliasing information for each function. The file name
5536 is made by appending `.alias' to the source file name.
5539 Dump each function after CCP. The file name is made by
5540 appending `.ccp' to the source file name.
5543 Dump each function after STORE-CCP. The file name is made by
5544 appending `.storeccp' to the source file name.
5547 Dump trees after partial redundancy elimination. The file
5548 name is made by appending `.pre' to the source file name.
5551 Dump trees after full redundancy elimination. The file name
5552 is made by appending `.fre' to the source file name.
5555 Dump trees after copy propagation. The file name is made by
5556 appending `.copyprop' to the source file name.
5559 Dump trees after store copy-propagation. The file name is
5560 made by appending `.store_copyprop' to the source file name.
5563 Dump each function after dead code elimination. The file
5564 name is made by appending `.dce' to the source file name.
5567 Dump each function after adding mudflap instrumentation. The
5568 file name is made by appending `.mudflap' to the source file
5572 Dump each function after performing scalar replacement of
5573 aggregates. The file name is made by appending `.sra' to the
5577 Dump each function after performing code sinking. The file
5578 name is made by appending `.sink' to the source file name.
5581 Dump each function after applying dominator tree
5582 optimizations. The file name is made by appending `.dom' to
5583 the source file name.
5586 Dump each function after applying dead store elimination.
5587 The file name is made by appending `.dse' to the source file
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.
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.
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.
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.
5611 Dump each function after applying vectorization of loops.
5612 The file name is made by appending `.vect' to the source file
5616 Dump each function after applying vectorization of basic
5617 blocks. The file name is made by appending `.slp' to the
5621 Dump each function after Value Range Propagation (VRP). The
5622 file name is made by appending `.vrp' to the source file name.
5625 Enable all the available tree dumps with the flags provided
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
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.
5650 The dump verbosity has the following options
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.
5659 Print information about missed optimizations. Individual
5660 passes control which information to include in the output.
5663 gcc -O2 -ftree-vectorize -fopt-info-vec-missed
5665 will print information about missed optimization
5666 opportunities from vectorization passes on stderr.
5669 Print verbose information about optimizations, such as certain
5670 transformations, more detailed messages about decisions etc.
5673 Print detailed optimization information. This includes
5674 OPTIMIZED, MISSED, and NOTE.
5676 The second set of options describes a group of optimizations and
5677 may include one or more of the following.
5680 Enable dumps from all interprocedural optimizations.
5683 Enable dumps from all loop optimizations.
5686 Enable dumps from all inlining optimizations.
5689 Enable dumps from all vectorization optimizations.
5692 gcc -O3 -fopt-info-missed=missed.all
5694 outputs missed optimization report from all the passes into
5698 gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
5700 will output information about missed optimizations as well as
5701 optimized locations from all the inlining passes into `inline.txt'.
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'.
5712 Note that `-fopt-info-vec-missed' behaves the same as
5713 `-fopt-info-missed-vec'.
5715 As another example, consider
5717 gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
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.
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
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
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.
5750 The STRING should be different for every file you compile.
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.
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
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.
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'.
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:
5790 gcc -save-temps -o outdir1/foo.o indir1/foo.c&
5791 gcc -save-temps -o outdir2/foo.o indir2/foo.c&
5793 may result in `foo.i' and `foo.o' being written to simultaneously
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'.
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
5808 creates `foo.i', `foo.s', `dir/xbar.i', `dir/xbar.s',
5809 `dir2/yfoobar.i', `dir2/yfoobar.s', and `dir2/yfoobar.o'.
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).
5816 Without the specification of an output file, the output looks like
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.
5827 With the specification of an output file, the output is appended
5828 to the named file, and it looks like this:
5830 0.12 0.01 cc1 OPTIONS
5831 0.00 0.01 as OPTIONS
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
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
5844 It is enabled by default when compiling with optimization (`-Os',
5845 `-O', `-O2', ...), debugging information (`-g') and the debug info
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.
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.
5857 `-fvar-tracking-assignments-toggle'
5858 Toggle `-fvar-tracking-assignments', in the same way that
5859 `-gtoggle' toggles `-g'.
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
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'.
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.
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'.
5889 Print the path to OS libraries for the selected multiarch,
5890 relative to some `lib' subdirectory.
5892 `-print-prog-name=PROGRAM'
5893 Like `-print-file-name', but searches for a program such as `cpp'.
5895 `-print-libgcc-file-name'
5896 Same as `-print-file-name=libgcc.a'.
5898 This is useful when you use `-nostdlib' or `-nodefaultlibs' but
5899 you do want to link with `libgcc.a'. You can do:
5901 gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
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
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
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.
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.
5929 Print the compiler's target machine (for example,
5930 `i686-pc-linux-gnu')--and don't do anything else.
5933 Print the compiler version (for example, `3.0')--and don't do
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::.
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.
5952 File: gcc.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking GCC
5954 3.10 Options That Control Optimization
5955 ======================================
5957 These options control various sorts of optimizations.
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.
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.
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.
5975 Not all optimizations are controlled directly by a flag. Only
5976 optimizations that have a flag are listed in this section.
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.
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.
5990 Optimize. Optimizing compilation takes somewhat more time, and a
5991 lot more memory for a large function.
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.
5997 `-O' turns on the following optimization flags:
6005 -fguess-branch-probability
6014 -ftree-builtin-call-dce
6019 -ftree-dominator-opts
6030 `-O' also turns on `-fomit-frame-pointer' on machines where doing
6031 so does not interfere with debugging.
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.
6039 `-O2' turns on all optimization flags specified by `-O'. It also
6040 turns on the following optimization flags:
6042 -falign-functions -falign-jumps
6043 -falign-loops -falign-labels
6046 -fcse-follow-jumps -fcse-skip-blocks
6047 -fdelete-null-pointer-checks
6049 -fexpensive-optimizations
6051 -fhoist-adjacent-loads
6052 -finline-small-functions
6055 -foptimize-sibling-calls
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
6068 Please note the warning under `-fgcse' about invoking `-O2' on
6069 programs that use computed gotos.
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.
6079 Reduce compilation time and make debugging produce the expected
6080 results. This is the default.
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.
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
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
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.
6106 If you use multiple `-O' options, with or without level numbers,
6107 the last such option is the one that is effective.
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.
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.
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.
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.
6133 Disabled at levels `-O', `-O2', `-O3', `-Os'.
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.
6141 This option is enabled by default at optimization levels `-O',
6142 `-O2', `-O3', `-Os'.
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'.
6153 The default is `-ffp-contract=fast'.
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
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.
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.
6175 Enabled at levels `-O', `-O2', `-O3', `-Os'.
6177 `-foptimize-sibling-calls'
6178 Optimize sibling and tail recursive calls.
6180 Enabled at levels `-O2', `-O3', `-Os'.
6183 Do not expand any functions inline apart from those marked with
6184 the `always_inline' attribute. This is the default when not
6187 Single functions can be exempted from inlining by marking them
6188 with the `noinline' attribute.
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.
6197 Enabled at level `-O2'.
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.
6205 Enabled at level `-O2'.
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.
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.
6216 Enabled at level `-O3'.
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.
6224 Enabled at levels `-O1', `-O2', `-O3' and `-Os'.
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
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.
6241 Enabled at levels `-O2', `-O3' and `-Os'.
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.
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:
6252 `max-inline-insns-single'
6255 `max-inline-insns-auto'
6258 See below for a documentation of the individual parameters
6259 controlling inlining and for the defaults of these parameters.
6261 _Note:_ there may be no value to `-finline-limit' that results in
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.
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.)
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.
6282 `-fkeep-static-consts'
6283 Emit variables declared `static const' when optimization isn't
6284 turned on, even if the variables aren't referenced.
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.
6292 Attempt to merge identical constants (string constants and
6293 floating-point constants) across compilation units.
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.
6299 Enabled at levels `-O', `-O2', `-O3', `-Os'.
6301 `-fmerge-all-constants'
6302 Attempt to merge identical constants and identical variables.
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.
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.
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.
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
6332 The default is `-fbranch-count-reg'.
6335 Do not put function addresses in registers; make each instruction
6336 that calls a constant function contain the function's address
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.
6343 The default is `-ffunction-cse'
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.
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.
6355 The default is `-fzero-initialized-in-bss'.
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
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.
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.
6385 Enabled at levels `-O2', `-O3', `-Os'.
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.
6393 Enabled at levels `-O', `-O2', `-O3', `-Os'.
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
6402 Enabled at levels `-O2', `-O3', `-Os'.
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'.
6410 Enabled at levels `-O2', `-O3', `-Os'.
6412 `-frerun-cse-after-loop'
6413 Re-run common subexpression elimination after loop optimizations
6416 Enabled at levels `-O2', `-O3', `-Os'.
6419 Perform a global common subexpression elimination pass. This pass
6420 also performs global constant and copy propagation.
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.
6427 Enabled at levels `-O2', `-O3', `-Os'.
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.
6436 Enabled by default when `-fgcse' is enabled.
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.
6445 Not enabled at any optimization level.
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).
6452 Not enabled at any optimization level.
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.
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.
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.
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.
6481 Enabled at levels `-O2', `-O3', `-Os'.
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.
6490 Perform dead code elimination (DCE) on RTL. Enabled by default at
6494 Perform dead store elimination (DSE) on RTL. Enabled by default
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'.
6504 Enabled at levels `-O', `-O2', `-O3', `-Os'.
6507 Use conditional execution (where available) to transform
6508 conditional jumps into branch-less equivalents.
6510 Enabled at levels `-O', `-O2', `-O3', `-Os'.
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.
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.
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.
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',
6537 `-fexpensive-optimizations'
6538 Perform a number of minor optimizations that are relatively
6541 Enabled at levels `-O2', `-O3', `-Os'.
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
6549 Enabled for x86 at levels `-O2', `-O3'.
6551 `-foptimize-register-move'
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.
6558 Note `-fregmove' and `-foptimize-register-move' are the same
6561 Enabled at levels `-O2', `-O3', `-Os'.
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.
6571 `-fira-region=REGION'
6572 Use specified regions for the integrated register allocator. The
6573 REGION argument should be one of the following:
6576 Use all loops as register allocation regions. This can give
6577 the best results for machines with a small and/or irregular
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',
6588 Use all functions as a single region. This typically results
6589 in the smallest code size, and is enabled by default for
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.
6598 This option is enabled at level `-Os' for all targets.
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.
6606 This option is enabled at level `-O3' for some targets.
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
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
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.
6627 If supported for the target machine, attempt to reorder
6628 instructions to exploit instruction slots available after delayed
6629 branch instructions.
6631 Enabled at levels `-O', `-O2', `-O3', `-Os'.
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.
6641 Enabled at levels `-O2', `-O3'.
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
6650 Enabled at levels `-O2', `-O3', `-Os'.
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.
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.
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.
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.
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.
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'.
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'.
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.
6708 This only makes sense when scheduling after register allocation,
6709 i.e. with `-fschedule-insns2' or at `-O2' or higher.
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.
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.
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.
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'
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.
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
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.
6756 `-fselective-scheduling'
6757 Schedule instructions using selective scheduling algorithm.
6758 Selective scheduling runs instead of the first scheduler pass.
6760 `-fselective-scheduling2'
6761 Schedule instructions using selective scheduling algorithm.
6762 Selective scheduling runs instead of the second scheduler pass.
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.
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.
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.
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.
6785 This option is always enabled by default on certain machines,
6786 usually those which have no call-preserved registers to use
6789 Enabled at levels `-O2', `-O3', `-Os'.
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.
6795 Enabled by default at `-O1' and higher.
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.
6804 Perform reassociation on trees. This flag is enabled by default
6808 Perform partial redundancy elimination (PRE) on trees. This flag
6809 is enabled by default at `-O2' and `-O3'.
6811 `-ftree-partial-pre'
6812 Make partial redundancy elimination (PRE) more aggressive. This
6813 flag is enabled by default at `-O3'.
6816 Perform forward propagation on trees. This flag is enabled by
6817 default at `-O' and higher.
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.
6827 Perform hoisting of loads from conditional pointers on trees. This
6828 pass is enabled by default at `-O' and higher.
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.
6837 Perform copy propagation on trees. This pass eliminates
6838 unnecessary copy operations. This flag is enabled by default at
6842 Discover which functions are pure or constant. Enabled by default
6846 Discover which static variables do not escape the compilation unit.
6847 Enabled by default at `-O' and higher.
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.
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.
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'.
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
6882 Perform forward store motion on trees. This flag is enabled by
6883 default at `-O' and higher.
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.
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.
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.
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.
6910 Perform dead code elimination (DCE) on trees. This flag is
6911 enabled by default at `-O' and higher.
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.
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.
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
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
6940 `-ftree-loop-optimize'
6941 Perform loop optimizations on trees. This flag is enabled by
6942 default at `-O' and higher.
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.
6950 `-floop-interchange'
6951 Perform loop interchange transformations on loops. Interchanging
6952 two nested loops switches the inner and outer loops. For example,
6956 A(J, I) = A(J, I) * C
6959 loop interchange transforms the loop as if it were written:
6962 A(J, I) = A(J, I) * C
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.
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
6984 loop strip mining transforms the loop as if it were written:
6986 DO I = II, min (II + 50, N)
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.
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,
7003 A(J, I) = B(I) + C(J)
7006 loop blocking transforms the loop as if it were written:
7009 DO I = II, min (II + 50, N)
7010 DO J = JJ, min (JJ + 50, M)
7011 A(J, I) = B(I) + C(J)
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.
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.
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.
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.
7045 Compare the results of several data dependence analyzers. This
7046 option is used for debugging the data dependence analyzers.
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.
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++)
7064 for (i = 0; i < N; i++)
7065 A[i] = cond ? expr : A[i];
7066 potentially producing data races.
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
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'.
7089 This pass distributes the initialization loops and generates a
7090 call to memset zero. For example, the loop
7102 and the initialization loop is transformed into a call to memset
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
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.
7121 Perform induction variable optimizations (strength reduction,
7122 induction variable merging and induction variable elimination) on
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'.
7135 Perform function-local points-to analysis on trees. This flag is
7136 enabled by default at `-O' and higher.
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
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
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.
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
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.
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.
7185 Perform loop vectorization on trees. This flag is enabled by
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.
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.
7202 Enable cost model for vectorization. This option is enabled by
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
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.
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.
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
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.
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
7243 This optimization is enabled by default.
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
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.
7255 Enabled at level `-O2'.
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.
7262 This option is enabled at level `-O3'.
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
7269 This option may generate better or worse code; results are highly
7270 dependent on the structure of loops within the source code.
7272 Disabled at level `-Os'.
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.
7281 `-fpeephole' is enabled by default. `-fpeephole2' enabled at
7282 levels `-O2', `-O3', `-Os'.
7284 `-fno-guess-branch-probability'
7285 Do not guess branch probabilities using heuristics.
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.
7298 The default is `-fguess-branch-probability' at levels `-O', `-O2',
7302 Reorder basic blocks in the compiled function in order to reduce
7303 number of taken branches and improve code locality.
7305 Enabled at levels `-O2', `-O3'.
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.
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.
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.
7326 Also profile feedback must be available to make this option
7327 effective. See `-fprofile-arcs' for details.
7329 Enabled at levels `-O2', `-O3', `-Os'.
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.
7341 Pay special attention to code like this:
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:
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.:
7371 return ((union a_union *) &d)->i;
7374 The `-fstrict-aliasing' option is enabled at levels `-O2', `-O3',
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
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.
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.
7408 The `-fstrict-overflow' option is enabled at levels `-O2', `-O3',
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.
7419 `-fno-align-functions' and `-falign-functions=1' are equivalent
7420 and mean that functions are not aligned.
7422 Some assemblers only support this flag when N is a power of two;
7423 in that case, it is rounded up.
7425 If N is not specified or is zero, use a machine-dependent default.
7427 Enabled at levels `-O2', `-O3'.
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.
7436 `-fno-align-labels' and `-falign-labels=1' are equivalent and mean
7437 that labels are not aligned.
7439 If `-falign-loops' or `-falign-jumps' are applicable and are
7440 greater than this value, then their values are used instead.
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.
7445 Enabled at levels `-O2', `-O3'.
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.
7453 `-fno-align-loops' and `-falign-loops=1' are equivalent and mean
7454 that loops are not aligned.
7456 If N is not specified or is zero, use a machine-dependent default.
7458 Enabled at levels `-O2', `-O3'.
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
7467 `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean
7468 that loops are not aligned.
7470 If N is not specified or is zero, use a machine-dependent default.
7472 Enabled at levels `-O2', `-O3'.
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'.
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.
7489 Enabled at level `-O0'. When disabled explicitly, it also implies
7490 `-fno-section-anchors', which is otherwise enabled at `-O0' on some
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
7502 Enabled by default with `-funroll-loops'.
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.
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.
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.
7523 To use the link-time optimizer, `-flto' needs to be specified at
7524 compile time and during the final link. For example:
7526 gcc -c -O2 -flto foo.c
7527 gcc -c -O2 -flto bar.c
7528 gcc -o myprog -flto -O2 foo.o bar.o
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.
7541 Another (simpler) way to enable link-time optimization is:
7543 gcc -o myprog -flto -O2 foo.c bar.c
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'.
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.
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
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.
7571 Additionally, the optimization flags used to compile individual
7572 files are not necessarily related to those used at link time. For
7575 gcc -c -O0 -flto foo.c
7576 gcc -c -O0 -flto bar.c
7577 gcc -o myprog -flto -O3 foo.o bar.o
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.
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
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.
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
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
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:
7619 gfortran -c -flto baz.f90
7620 g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
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.
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
7635 gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
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.
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.
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').
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.
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.
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.
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.
7677 This option is disabled by default.
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.
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.
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').
7704 Disabled by default.
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.
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.
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).
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.
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
7740 The default is `-ffat-lto-objects' but this default is intended to
7741 change in future releases when linker plugin enabled environments
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.
7750 This pass only applies to certain targets that cannot explicitly
7751 represent the comparison operation before register allocation is
7754 Enabled at levels `-O', `-O2', `-O3', `-Os'.
7757 Use the `bfd' linker instead of the default linker.
7760 Use the `gold' linker instead of the default linker.
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.
7767 Enabled at levels `-O', `-O2', `-O3', `-Os'.
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.
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.
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.
7792 The following options are enabled: `-fprofile-arcs',
7793 `-fprofile-values', `-fvpt'.
7795 If PATH is specified, GCC looks at the PATH to find the profile
7796 feedback data files. See `-fprofile-dir'.
7799 `-fprofile-use=PATH'
7800 Enable profile feedback directed optimizations, and optimizations
7801 generally profitable only with profile feedback available.
7803 The following options are enabled: `-fbranch-probabilities',
7804 `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer',
7805 `-ftree-vectorize', `ftree-loop-distribute-patterns'
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.
7812 If PATH is specified, GCC looks at the PATH to find the profile
7813 feedback data files. See `-fprofile-dir'.
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.
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.
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
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
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.
7857 Sets `-fno-math-errno', `-funsafe-math-optimizations',
7858 `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans'
7859 and `-fcx-limited-range'.
7861 This option causes the preprocessor macro `__FAST_MATH__' to be
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.
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.
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.
7882 The default is `-fmath-errno'.
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.
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.
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'.
7903 The default is `-fno-unsafe-math-optimizations'.
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.
7919 The default is `-fno-associative-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.
7928 The default is `-fno-reciprocal-math'.
7930 `-ffinite-math-only'
7931 Allow optimizations for floating-point arithmetic that assume that
7932 arguments and results are not NaNs or +-Infs.
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.
7940 The default is `-fno-finite-math-only'.
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.
7950 The default is `-fsigned-zeros'.
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.
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
7965 The default is `-ftrapping-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
7979 The default is `-fno-rounding-math'.
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'.
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
7994 This option causes the preprocessor macro `__SUPPORT_SNAN__' to be
7997 The default is `-fno-signaling-nans'.
7999 This option is experimental and does not currently guarantee to
8000 disable all GCC optimizations that affect signaling NaN behavior.
8002 `-fsingle-precision-constant'
8003 Treat floating-point constants as single precision instead of
8004 implicitly converting them to double-precision constants.
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'.
8014 This option controls the default setting of the ISO C99
8015 `CX_LIMITED_RANGE' pragma. Nevertheless, the option applies to
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
8025 The default is `-fno-cx-fortran-rules'.
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.
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
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.
8052 If combined with `-fprofile-arcs', it adds code so that some data
8053 about values of expressions in the program is gathered.
8055 With `-fbranch-probabilities', it reads back the data gathered
8056 from profiling values of expressions for usage in optimizations.
8058 Enabled with `-fprofile-generate' and `-fprofile-use'.
8061 If combined with `-fprofile-arcs', this option instructs the
8062 compiler to add code to gather information about values of
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.
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".
8078 Enabled by default with `-funroll-loops' and `-fpeel-loops'.
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.
8085 Enabled with `-fprofile-use'.
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.
8095 Enabled with `-fprofile-use'.
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
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
8109 Enabled with `-fprofile-use'.
8111 `-fmove-loop-invariants'
8112 Enables the loop invariant motion pass in the RTL loop optimizer.
8113 Enabled at level `-O1'
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).
8120 `-ffunction-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
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.
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
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.
8146 `-fbranch-target-load-optimize2'
8147 Perform branch target register load optimization after prologue /
8150 `-fbtr-bb-exclusive'
8151 When performing branch target register load optimization, don't
8152 reuse branch target registers within any basic block.
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.
8163 `-fstack-protector-all'
8164 Like `-fstack-protector' except that all functions are protected.
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.
8172 For example, the implementation of the following function `foo':
8175 int foo (void) { return a + b + c; }
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):
8184 register int *xr = &x;
8185 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
8188 Not all targets support this option.
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.
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.
8201 In each case, the VALUE is an integer. The allowable choices for
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.
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
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.
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.
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
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.
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
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.
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
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.
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.
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.
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
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'.
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.
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.
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.
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.
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
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.
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.
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.
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.
8363 `max-inline-recursive-depth'
8364 `max-inline-recursive-depth-auto'
8365 Specifies the maximum recursion depth used for recursive
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
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.
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.
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.
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
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.
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
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.
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
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
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.
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.
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.
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.
8460 The maximum number of unrollings of a single loop.
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.
8468 The maximum number of peelings of a single loop.
8471 The maximum number of branches on the hot path through the
8474 `max-completely-peeled-insns'
8475 The maximum number of insns of a completely peeled loop.
8477 `max-completely-peel-times'
8478 The maximum number of iterations of a loop to be suitable for
8481 `max-completely-peel-loop-nest-depth'
8482 The maximum depth of a loop nest suitable for complete
8485 `max-unswitch-insns'
8486 The maximum number of insns of an unswitched loop.
8488 `max-unswitch-level'
8489 The maximum number of branches unswitched in a single loop.
8492 The minimum cost of an expensive expression in the loop
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.
8502 `iv-max-considered-uses'
8503 The induction variable optimizations give up on loops that
8504 contain more induction variable uses.
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
8511 `scev-max-expr-size'
8512 Bound on size of expressions used in the scalar evolutions
8513 analyzer. Large expressions slow the analyzer.
8515 `scev-max-expr-complexity'
8516 Bound on the complexity of the expressions in the scalar
8517 evolutions analyzer. Complex expressions slow the analyzer.
8520 The maximum number of variables in an Omega constraint system.
8521 The default value is 128.
8524 The maximum number of inequalities in an Omega constraint
8525 system. The default value is 256.
8528 The maximum number of equalities in an Omega constraint
8529 system. The default value is 128.
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.
8535 `omega-hash-table-size'
8536 The size of the hash table in the Omega solver. The default
8540 The maximal number of keys used by the Omega solver. The
8541 default value is 500.
8543 `omega-eliminate-redundant-constraints'
8544 When set to 1, use expensive methods to eliminate all
8545 redundant constraints. The default value is 0.
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.
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.
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.
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.
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
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.
8582 Select fraction of the maximal frequency of executions of a
8583 basic block in a function to align the basic block.
8585 `align-loop-iterations'
8586 A loop expected to iterate at least the selected number of
8587 iterations is aligned.
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.
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.
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
8607 `tracer-min-branch-ratio'
8608 Stop reverse growth when the reverse probability of best edge
8609 is less than this threshold (in percent).
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.
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.
8622 `max-cse-path-length'
8623 The maximum number of basic blocks on path that CSE considers.
8627 The maximum number of instructions CSE processes before
8628 flushing. The default is 1000.
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.
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
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.
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
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
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
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.
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.
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.
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.
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
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.
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
8717 The minimum probability (in percents) of reaching a source
8718 block for interblock speculative scheduling. The default
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
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.
8730 `sched-spec-prob-cutoff'
8731 The minimal probability of speculation success (in percents),
8732 so that speculative insns are scheduled. The default value
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.
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.
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.
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.
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.
8760 The minimum value of stage count that swing modulo scheduler
8761 generates. The default value is 2.
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.
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.
8775 The minimum size of buffers (i.e. arrays) that receive stack
8776 smashing protection when `-fstack-protection' is used.
8778 `max-jump-thread-duplication-stmts'
8779 Maximum number of statements allowed in a block that needs to
8780 be duplicated when threading jumps.
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'.
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').
8794 `simultaneous-prefetches'
8795 Maximum number of prefetches that can run at the same time.
8797 `l1-cache-line-size'
8798 The size of cache line in L1 cache, in bytes.
8801 The size of L1 cache, in kilobytes.
8804 The size of L2 cache, in kilobytes.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
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'.
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.
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.
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.
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.
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.
8966 Size of minimal partition for WHOPR (in estimated
8967 instructions). This prevents expenses of splitting very
8968 small programs into too many partitions.
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
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
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
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.
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.
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.
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.
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.
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.
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.
9034 The default choice depends on the target.
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.
9043 File: gcc.info, Node: Preprocessor Options, Next: Assembler Options, Prev: Optimize Options, Up: Invoking GCC
9045 3.11 Options Controlling the Preprocessor
9046 =========================================
9048 These options control the C preprocessor, which is run on each C source
9049 file before actual compilation.
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.
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
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
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
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.
9088 Predefine NAME as a macro, with definition `1'.
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
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.
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.
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.
9111 Cancel any previous definition of NAME, either built in or
9112 provided with a `-D' option.
9115 Do not predefine any system-specific or GCC-specific macros. The
9116 standard predefined macros remain defined.
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'.
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.
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.
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.)
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.
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'.
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
9166 Warn whenever an identifier which is not a macro is encountered in
9167 an `#if' directive, outside of `defined'. Such identifiers are
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.
9176 Built-in macros, macros defined on the command line, and macros
9177 defined in include files are not warned about.
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
9186 #if defined the_macro_causing_the_warning
9190 Warn whenever an `#else' or an `#endif' are followed by text.
9191 This usually happens in code of the form
9199 The second and third `FOO' should be in comments, but often are not
9200 in older programs. This warning is on by default.
9203 Make all warnings into hard errors. Source code which triggers
9204 warnings will be rejected.
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
9213 Suppress all warnings, including those which GNU CPP issues by
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.
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.
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.
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
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.
9248 Passing `-M' to the driver implies `-E', and suppresses warnings
9249 with an implicit `-w'.
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.
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.
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
9267 When used with the driver options `-MD' or `-MMD', `-MF' overrides
9268 the default dependency output file.
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.
9278 This feature is used in automatic updating of makefiles.
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.
9286 This is typical output:
9288 test.o: test.c test.h
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.
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.
9302 For example, `-MT '$(objpfx)foo.o'' might give
9304 $(objpfx)foo.o: foo.c
9307 Same as `-MT', but it quotes any characters which are special to
9308 Make. `-MQ '$(objpfx)foo.o'' gives
9310 $$(objpfx)foo.o: foo.c
9312 The default target is automatically quoted, as if it were given
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'
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.
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.
9332 Like `-MD' except mention only user header files, not system
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.
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
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
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.
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.
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'
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
9384 STANDARD may be one of:
9388 The ISO C standard from 1990. `c90' is the customary
9389 shorthand for this version of the standard.
9391 The `-ansi' option is equivalent to `-std=c90'.
9394 The 1990 C standard, as amended in 1994.
9400 The revised ISO C standard, published in December 1999.
9401 Before publication, this was known as C9X.
9406 The revised ISO C standard, published in December 2011.
9407 Before publication, this was known as C1X.
9411 The 1990 C standard plus GNU extensions. This is the default.
9415 The 1999 C standard plus GNU extensions.
9419 The 2011 C standard plus GNU extensions.
9422 The 1998 ISO C++ standard plus amendments.
9425 The same as `-std=c++98' plus GNU extensions. This is the
9426 default for C++ code.
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'
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.
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.
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.)
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
9458 If multiple `-include' options are given, the files are included
9459 in the order they appear on the command line.
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.
9467 All files specified by `-imacros' are processed before all files
9468 specified by `-include'.
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'.
9478 Specify PREFIX as the prefix for subsequent `-iwithprefix'
9479 options. If the prefix represents a directory, you should include
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.
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
9496 Use DIR as a subdirectory of the directory containing
9497 target-specific C++ headers.
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'.
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'.
9515 When preprocessing, handle directives, but do not expand macros.
9517 The option's behavior depends on the `-E' and `-fpreprocessed'
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
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
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'.
9536 `-fdollars-in-identifiers'
9537 Accept `$' in identifiers.
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++.
9544 `-fno-canonical-system-headers'
9545 When preprocessing, do not shorten system header paths with
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.
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'.
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.
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
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}
9575 When used without `-E', this option has no effect.
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'.
9593 Note that -ftrack-macro-expansion=2 is activated by default.
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.
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'.
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.
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.
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'.
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
9644 `-A -PREDICATE=ANSWER'
9645 Cancel an assertion with the predicate PREDICATE and answer ANSWER.
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.
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
9662 touch foo.h; cpp -dM foo.h
9664 will show all the predefined macros.
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.
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.
9677 Like `D', but emit only the macro names, not their expansions.
9680 Output `#include' directives in addition to the result of
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.
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.
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.
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
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.
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
9719 The `-CC' option is generally used to support lint comments.
9722 Try to imitate the behavior of old-fashioned C preprocessors, as
9723 opposed to ISO C preprocessors.
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.
9733 The nine trigraphs and their replacements are
9735 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
9736 Replacement: [ ] { } # \ ^ | ~
9739 Enable special code to work around file systems which only permit
9740 very short file names, such as MS-DOS.
9744 Print text describing all the command line options instead of
9745 preprocessing anything.
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.
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
9761 Print out GNU CPP's version number. With one dash, proceed to
9762 preprocess as normal. With two dashes, exit immediately.
9765 File: gcc.info, Node: Assembler Options, Next: Link Options, Prev: Preprocessor Options, Up: Invoking GCC
9767 3.12 Passing Options to the Assembler
9768 =====================================
9770 You can pass options to the assembler.
9773 Pass OPTION as an option to the assembler. If OPTION contains
9774 commas, it is split into multiple options at the commas.
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
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.
9786 File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC
9788 3.13 Options for Linking
9789 ========================
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
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.
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
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.)
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.
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.
9825 The directories searched include several standard system
9826 directories plus any that you specify with `-L'.
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.
9838 You need this special case of the `-l' option in order to link an
9839 Objective-C or Objective-C++ program.
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.
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.
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.
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
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.
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.)
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.
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
9897 Remove all symbol table and relocation information from the
9901 On systems that support dynamic linking, this prevents linking
9902 with the shared libraries. On other systems, this option has no
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)
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.
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
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.
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.
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
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.
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
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.
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.
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.
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.
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
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.
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'.
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.
10020 ---------- Footnotes ----------
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.
10029 File: gcc.info, Node: Directory Options, Next: Spec Files, Prev: Link Options, Up: Invoking GCC
10031 3.14 Options for Directory Search
10032 =================================
10034 These options specify directories to search for header files, for
10035 libraries and for parts of the compiler:
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.
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.
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.
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
10070 Add directory DIR to the list of directories to be searched for
10074 This option specifies where to find the executables, libraries,
10075 include files, and data files of the compiler itself.
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::).
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
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.
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
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.
10107 Another way to specify a prefix much like the `-B' prefix is to use
10108 the environment variable `GCC_EXEC_PREFIX'. *Note Environment
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.
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.
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'.
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.
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.
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
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>'.
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.)
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.
10165 `-I-' does not inhibit the use of the standard system directories
10166 for header files. Thus, `-I-' and `-nostdinc' are independent.
10169 File: gcc.info, Node: Spec Files, Next: Target Options, Prev: Directory Options, Up: Invoking GCC
10171 3.15 Specifying subprocesses and the switches to pass to them
10172 =============================================================
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
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:
10191 Issues a COMMAND to the spec file processor. The commands that can
10195 Search for FILE and insert its text at the current point in
10198 `%include_noerr <FILE>'
10199 Just like `%include', but do not generate an error message if
10200 the include file cannot be found.
10202 `%rename OLD_NAME NEW_NAME'
10203 Rename the spec string OLD_NAME to NEW_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
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
10227 z-compile -input %i
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.)
10234 As an alternative to providing a spec string, the text following a
10235 suffix directive can be one of the following:
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:
10245 Says that .ZZ files are, in fact, C++ source files.
10248 This causes an error messages saying:
10250 NAME compiler not installed on this system.
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
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.
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
10276 startfile Object files to include at the start of the link
10278 Here is a small example of a spec file:
10280 %rename lib old_lib
10283 --start-group -lgcc -lc -leval1 --end-group %(old_lib)
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.
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.
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.
10302 Substitute one `%' into the program name or argument.
10305 Substitute the name of the input file being processed.
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.
10313 This is the same as `%b', but include the file suffix (text after
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.
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.
10336 Like `%g', but generates a new temporary file name each time it
10337 appears instead of once per compilation.
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.
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.
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'.
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 %.
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.
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.
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'.
10393 Substitutes the standard macro predefinitions for the current
10394 target machine. Use this when running `cpp'.
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.
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
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.
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.
10422 Print STR as an error message. STR is terminated by a newline.
10423 Use this when inconsistent options are detected.
10426 Substitute the contents of spec string NAME at this point.
10429 Accumulate an option for `%X'.
10432 Output the accumulated linker options specified by `-Wl' or a `%x'
10436 Output the accumulated assembler options specified by `-Wa'.
10439 Output the accumulated preprocessor options specified by `-Wp'.
10442 Process the `asm' spec. This is used to compute the switches to
10443 be passed to the assembler.
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
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.
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.
10461 Process the `lib' spec. This is a spec string for deciding which
10462 libraries are included on the command line to the linker.
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
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'.
10475 Process the `endfile' spec. This is a spec string that specifies
10476 the last object files that are passed to the linker.
10479 Process the `cpp' spec. This is used to construct the arguments
10480 to be passed to the C preprocessor.
10483 Process the `cc1' spec. This is used to construct the options to
10484 be passed to the actual C compiler (`cc1').
10487 Process the `cc1plus' spec. This is used to construct the options
10488 to be passed to the actual C++ compiler (`cc1plus').
10491 Substitute the variable part of a matched option. See below.
10492 Note that each comma in the substituted string is replaced by a
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
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
10508 The following built-in spec functions are provided:
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:
10518 %:getenv(TOPDIR /include)
10520 expands to `/path/to/top/include'.
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:
10528 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
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:
10541 crt0%O%s %:if-exists(crti%O%s) \
10542 %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
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:
10550 %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
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:
10557 %:remove-outfile(-lm)
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.
10568 %:pass-through-libs(%G %L %G)
10570 ``print-asm-header''
10571 The `print-asm-header' function takes no arguments and simply
10572 prints a banner like:
10577 Use "-Wa,OPTION" to pass "OPTION" to the assembler.
10579 It is used to separate compiler options from assembler options
10580 in the `--target-help' output.
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'.
10591 Like %{`S'} but mark last argument supplied within as a file to be
10592 deleted on failure.
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.
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*}'.
10608 Substitutes `X', if the `-S' switch is given to GCC.
10611 Substitutes `X', if the `-S' switch is _not_ given to GCC.
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
10622 Substitutes `X', if processing a file with suffix `S'.
10625 Substitutes `X', if _not_ processing a file with suffix `S'.
10628 Substitutes `X', if processing a file for language `S'.
10631 Substitutes `X', if not processing a file for language `S'.
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.
10640 For example, a spec string like this:
10642 %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
10644 outputs the following command-line options from the following input
10645 command-line options:
10649 -d fred.c -foo -baz -boggle
10650 -d jim.d -bar -baz -boggle
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.
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.
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.
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.
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
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.
10689 File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Spec Files, Up: Invoking GCC
10691 3.16 Specifying Target Machine and Compiler Version
10692 ===================================================
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.
10699 File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC
10701 3.17 Hardware Models and Configurations
10702 =======================================
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.
10710 Some configurations of the compiler also support additional special
10711 options, usually for compatibility with other compilers on the same
10716 * AArch64 Options::
10717 * Adapteva Epiphany Options::
10720 * Blackfin Options::
10725 * DEC Alpha Options::
10728 * GNU/Linux Options::
10731 * i386 and x86-64 Options::
10732 * i386 and x86-64 Windows Options::
10740 * MicroBlaze Options::
10743 * MN10300 Options::
10746 * picoChip Options::
10747 * PowerPC Options::
10749 * RS/6000 and PowerPC Options::
10751 * S/390 and zSeries Options::
10754 * Solaris 2 Options::
10757 * System V Options::
10758 * TILE-Gx Options::
10759 * TILEPro Options::
10763 * VxWorks Options::
10765 * Xstormy16 Options::
10767 * zSeries Options::
10770 File: gcc.info, Node: AArch64 Options, Next: Adapteva Epiphany Options, Up: Submodel Options
10772 3.17.1 AArch64 Options
10773 ----------------------
10775 These options are defined for AArch64 implementations:
10778 Generate big-endian code. This is the default when GCC is
10779 configured for an `aarch64_be-*-*' target.
10781 `-mgeneral-regs-only'
10782 Generate code which uses only the general registers.
10785 Generate little-endian code. This is the default when GCC is
10786 configured for an `aarch64-*-*' but not an `aarch64_be-*-*' target.
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
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.
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.
10807 Do not assume that unaligned memory references will be handled by
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.
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.
10819 `-mtls-dialect=traditional'
10820 Use traditional TLS as the thread-local storage mechanism for
10821 dynamic accesses of TLS variables.
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
10830 Where conflicting feature modifiers are specified, the right-most
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.
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.
10844 Where conflicting feature modifiers are specified, the right-most
10847 GCC uses this name to determine what kind of instructions it can
10848 emit when generating assembly code.
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.
10858 3.17.1.1 `-march' and `-mcpu' feature modifiers
10859 ...............................................
10861 Feature modifiers used with `-march' and `-mcpu' can be one the
10865 Enable Crypto extension. This implies Advanced SIMD is enabled.
10868 Enable floating-point instructions.
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='.
10876 File: gcc.info, Node: Adapteva Epiphany Options, Next: ARM Options, Prev: AArch64 Options, Up: Submodel Options
10878 3.17.2 Adapteva Epiphany Options
10879 --------------------------------
10881 These `-m' options are defined for Adapteva Epiphany:
10884 Don't allocate any register in the range `r32'...`r63'. That
10885 allows code to run on hardware variants that lack these registers.
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.
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.
10898 Enable the generation of conditional moves.
10901 Emit NUM NOPs before every other generated instruction.
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.
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.
10925 `-mno-round-nearest'
10926 Make the scheduler assume that the rounding mode has been set to
10927 truncating. The default is `-mround-nearest'.
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.
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
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.
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.
10953 MODE can be set to one the following values:
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.
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.
10972 This is the mode used for floating-point calculations with
10973 round-to-nearest-or-even rounding mode.
10976 This is the mode used to perform integer calculations in the
10977 FPU, e.g. integer multiply, or integer
10978 multiply-and-accumulate.
10980 The default is `-mfp-mode=caller'
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'.
10991 Change the preferred SIMD mode to SImode. The default is
10992 `-mvect-double', which uses DImode as preferred SIMD mode.
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.
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.
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'.
11015 File: gcc.info, Node: ARM Options, Next: AVR Options, Prev: Adapteva Epiphany Options, Up: Submodel Options
11020 These `-m' options are defined for Advanced RISC Machines (ARM)
11024 Generate code for the specified ABI. Permissible values are:
11025 `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'.
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
11036 This is a synonym for `-mapcs-frame'.
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.
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'.
11056 Specifies which floating-point ABI to use. Permissible values
11057 are: `soft', `softfp' and `hard'.
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.
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.
11072 Generate code for a processor running in little-endian mode. This
11073 is the default for all standard configurations.
11076 Generate code for a processor running in big-endian mode; the
11077 default is to compile code for a little-endian processor.
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
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'.
11109 `-mcpu=generic-ARCH' is also permissible, and is equivalent to
11110 `-march=ARCH -mtune=generic-ARCH'. See `-mtune' for more
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.
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.
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.
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.
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'.
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.
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'.
11164 If `-msoft-float' is specified this specifies the format of
11165 floating-point values.
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
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.
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.
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
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.
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.
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.
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.
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.
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.
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
11241 .ascii "arm_poke_function_name", 0
11244 .word 0xff000000 + (t1 - t0)
11245 arm_poke_function_name
11247 stmfd sp!, {fp, ip, lr, pc}
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)'.
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.
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
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'.
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.
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.
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'.
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.
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.
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.
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.
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.
11337 File: gcc.info, Node: AVR Options, Next: Blackfin Options, Prev: ARM Options, Up: Submodel Options
11342 These options are defined for AVR implementations:
11345 Specify Atmel AVR instruction set architectures (ISA) or MCU type.
11347 The default for this option is `avr2'.
11349 GCC supports the following AVR devices and ISAs:
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'.
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'.
11369 "Classic" devices with 16 KiB up to 64 KiB of program memory.
11370 MCU = `at43usb355', `at76c711'.
11373 "Classic" devices with 128 KiB of program memory.
11374 MCU = `atmega103', `at43usb320'.
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'.
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'.
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',
11422 "Enhanced" devices with 128 KiB of program memory.
11423 MCU = `atmega128', `atmega128a', `atmega128rfa1',
11424 `atmega1280', `atmega1281', `atmega1284', `atmega1284p',
11425 `at90can128', `at90usb1286', `at90usb1287'.
11428 "Enhanced" devices with 3-byte PC, i.e. with more than
11429 128 KiB of program memory.
11430 MCU = `atmega2560', `atmega2561'.
11433 "XMEGA" devices with more than 8 KiB and up to 64 KiB of
11435 MCU = `atmxt112sl', `atmxt224', `atmxt224e', `atmxt336s',
11436 `atxmega16a4', `atxmega16a4u', `atxmega16c4', `atxmega16d4',
11437 `atxmega16x1', `atxmega32a4', `atxmega32a4u', `atxmega32c4',
11438 `atxmega32d4', `atxmega32e5', `atxmega32x1'.
11441 "XMEGA" devices with more than 64 KiB and up to 128 KiB of
11443 MCU = `atxmega64a3', `atxmega64a3u', `atxmega64a4u',
11444 `atxmega64b1', `atxmega64b3', `atxmega64c3', `atxmega64d3',
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'.
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'.
11463 "XMEGA" devices with more than 128 KiB of program memory and
11464 more than 64 KiB of RAM.
11465 MCU = `atxmega128a1', `atxmega128a1u', `atxmega128a4u'.
11468 This ISA is implemented by the minimal AVR core and supported
11469 for assembler only.
11470 MCU = `attiny11', `attiny12', `attiny15', `attiny28',
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.
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.
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.
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.
11495 Functions prologues/epilogues are expanded as calls to appropriate
11496 subroutines. Code size is smaller.
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.
11505 Generated code is not compatible with hardware interrupts. Code
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
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.
11519 Relaxing must be turned on if linker stubs are needed, see the
11520 section on `EIND' and linker stubs below.
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.
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.
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.
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
11545 adiw r26, const ; X += const
11547 sbiw r26, const ; X -= const
11550 Only change the lower 8 bits of the stack pointer.
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
11557 3.17.4.1 `EIND' and Devices with more than 128 Ki Bytes of Flash
11558 ................................................................
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.
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.
11569 Indirect jumps and calls on these devices are handled as follows by
11570 the compiler and are subject to some limitations:
11572 * The compiler never sets `EIND'.
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.
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
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.
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.
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'
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/).
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>
11614 __attribute__((section(".init3"),naked,used,no_instrument_function))
11615 init3_set_eind (void)
11617 __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
11618 "out %i0,r24" :: "n" (&EIND) : "r24","memory");
11621 The `__trampolines_start' symbol is defined in the linker script.
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))
11630 - The final location of that label is in a code segment
11631 _outside_ the segment where the stubs are located.
11633 * The compiler emits such `gs' modifiers for code labels in the
11634 following situations:
11635 - Taking address of a function or code label.
11639 - If prologue-save function is used, see `-mcall-prologues'
11640 command-line option.
11642 - Switch/case dispatch tables. If you do not want such dispatch
11643 tables you can specify the `-fno-jump-tables' command-line
11646 - C and C++ constructors/destructors called during
11649 - If the tools hit a `gs()' modifier explained above.
11651 * Jumping to non-symbolic addresses like so is _not_ supported:
11655 /* Call function at word address 0x2 */
11656 return ((int(*)(void)) 0x2)();
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):
11664 extern int func_4 (void);
11666 /* Call function at byte address 0x4 */
11670 and the application be linked with `-Wl,--defsym,func_4=0x4'.
11671 Alternatively, `func_4' can be defined in the linker script.
11673 3.17.4.2 Handling of the `RAMPD', `RAMPX', `RAMPY' and `RAMPZ' Special Function Registers
11674 .........................................................................................
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.
11684 * The startup code initializes the `RAMP' special function registers
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.
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.
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.
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.
11705 3.17.4.3 AVR Built-in Macros
11706 ............................
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.
11713 For even more AVR-specific built-in macros see *note AVR Named Address
11714 Spaces:: and *note AVR Built-in Functions::.
11717 Build-in macro that resolves to a decimal number that identifies
11718 the architecture and depends on the `-mmcu=MCU' option. Possible
11721 `2', `25', `3', `31', `35', `4', `5', `51', `6', `102', `104',
11722 `105', `106', `107'
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'.
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.
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.
11741 If DEVICE is not a device but only a core architecture like
11742 `avr51', this macro will not be defined.
11745 The device / architecture belongs to the XMEGA family of devices.
11747 `__AVR_HAVE_ELPM__'
11748 The device has the the `ELPM' instruction.
11750 `__AVR_HAVE_ELPMX__'
11751 The device has the `ELPM RN,Z' and `ELPM RN,Z+' instructions.
11753 `__AVR_HAVE_MOVW__'
11754 The device has the `MOVW' instruction to perform 16-bit
11755 register-register moves.
11757 `__AVR_HAVE_LPMX__'
11758 The device has the `LPM RN,Z' and `LPM RN,Z+' instructions.
11761 The device has a hardware multiplier.
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.
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.
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.
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'.
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'.
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.
11797 `__NO_INTERRUPTS__'
11798 This macro reflects the `-mno-interrupts' command line option.
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.
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
11816 The compiler is configured to be used together with AVR-Libc. See
11817 the `--with-avrlibc' configure option.
11821 File: gcc.info, Node: Blackfin Options, Next: C6X Options, Prev: AVR Options, Up: Submodel Options
11823 3.17.5 Blackfin Options
11824 -----------------------
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'.
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.
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.
11851 Without this option, `bf532' is used as the processor by default.
11853 Note that support for `bf561' is incomplete. For `bf561', only
11854 the preprocessor macro is defined.
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
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.
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.
11875 `-mno-specld-anomaly'
11876 Don't generate extra code to prevent speculative loads from
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.
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.
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.
11894 Assume that the program is arbitrarily large. This is the default.
11897 Do stack checking using information placed into L1 scratchpad
11898 memory by the uClinux kernel.
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
11907 `-mno-id-shared-library'
11908 Generate code that doesn't assume ID-based shared libraries are
11909 being used. This is the default.
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.
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
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.
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.
11936 Generate code that assumes that the data segment follows the text
11937 segment. This is the default.
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.
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.
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.
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'.
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]'.
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'.
11973 If this option is not used, the single-core application programming
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'.
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'.
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.
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
12004 File: gcc.info, Node: C6X Options, Next: CRIS Options, Prev: Blackfin Options, Up: Submodel Options
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'.
12016 Generate code for a big-endian target.
12019 Generate code for a little-endian target. This is the default.
12022 Choose startup files and linker script suitable for the simulator.
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'.
12033 Put all data, not just small objects, into the sections reserved
12034 for small data, and use addressing relative to the `B14' register
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
12045 File: gcc.info, Node: CRIS Options, Next: CR16 Options, Prev: C6X Options, Up: Submodel Options
12047 3.17.7 CRIS Options
12048 -------------------
12050 These options are defined specifically for the CRIS ports.
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'.
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'.
12065 `-mmax-stack-frame=N'
12066 Warn when the stack frame of a function exceeds N bytes.
12070 The options `-metrax4' and `-metrax100' are synonyms for
12071 `-march=v3' and `-march=v8' respectively.
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.
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.
12085 Do not use condition-code results from previous instruction;
12086 always emit compare and test instructions before use of condition
12089 `-mno-side-effects'
12090 Do not emit instructions with side effects in addressing modes
12091 other than post-increment.
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.
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
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
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'.
12131 Legacy no-op option only recognized with the cris-axis-elf and
12132 cris-axis-linux-gnu targets.
12135 Legacy no-op option only recognized with the cris-axis-linux-gnu
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
12145 Like `-sim', but pass linker options to locate initialized data at
12146 0x40000000 and zero-initialized data at 0x80000000.
12149 File: gcc.info, Node: CR16 Options, Next: Darwin Options, Prev: CRIS Options, Up: Submodel Options
12151 3.17.8 CR16 Options
12152 -------------------
12154 These options are defined specifically for the CR16 ports.
12157 Enable the use of multiply-accumulate instructions. Disabled by
12162 Generate code for CR16C or CR16C+ architecture. CR16C+ architecture
12166 Links the library libsim.a which is in compatible with simulator.
12167 Applicable to ELF compiler only.
12170 Choose integer type as 32-bit wide.
12173 Generates `sbit'/`cbit' instructions for bit manipulations.
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
12182 File: gcc.info, Node: Darwin Options, Next: DEC Alpha Options, Prev: CR16 Options, Up: Submodel Options
12184 3.17.9 Darwin Options
12185 ---------------------
12187 These options are defined for all architectures running the Darwin
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'.
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.
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.
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.
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.
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.
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.
12250 Emit debugging information for all symbols and types.
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
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.
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
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
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.
12282 `-mfix-and-continue'
12283 `-ffix-and-continue'
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.
12291 Loads all members of static archive libraries. See man ld(1) for
12294 `-arch_errors_fatal'
12295 Cause the errors having to do with files that have the wrong
12296 architecture to be fatal.
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
12304 Produce a Mach-o bundle format file. See man ld(1) for more
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.
12312 When passed this option, GCC produces a dynamic library instead of
12313 an executable when linking, using the Darwin `libtool' command.
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.
12319 `-allowable_client CLIENT_NAME'
12321 `-compatibility_version'
12326 `-dylinker_install_name'
12328 `-exported_symbols_list'
12331 `-force_flat_namespace'
12332 `-headerpad_max_install_names'
12336 `-keep_private_externs'
12338 `-multiply_defined'
12339 `-multiply_defined_unused'
12341 `-no_dead_strip_inits_and_terms'
12348 `-prebind_all_twolevel_modules'
12350 `-read_only_relocs'
12352 `-sectobjectsymbols'
12356 `-sectobjectsymbols'
12359 `-segs_read_only_addr'
12360 `-segs_read_write_addr'
12362 `-seg_addr_table_filename'
12365 `-segs_read_only_addr'
12366 `-segs_read_write_addr'
12371 `-twolevel_namespace'
12374 `-unexported_symbols_list'
12375 `-weak_reference_mismatches'
12377 These options are passed to the Darwin linker. The Darwin linker
12378 man page describes them in detail.
12381 File: gcc.info, Node: DEC Alpha Options, Next: FR30 Options, Prev: Darwin Options, Up: Submodel Options
12383 3.17.10 DEC Alpha Options
12384 -------------------------
12386 These `-m' options are defined for the DEC Alpha implementations:
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.
12400 Note that Alpha implementations without floating-point operations
12401 are required to have floating-point registers.
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.
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
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'.
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'.
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:
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).
12453 In addition to the traps enabled by `n', underflow traps are
12457 Like `u', but the instructions are marked to be safe for
12458 software completion (see Alpha architecture manual for
12462 Like `su', but inexact traps are enabled as well.
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:
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.
12474 Round towards minus infinity.
12477 Chopped rounding mode. Floating-point numbers are rounded
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.
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:
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.
12503 Function precision. The trap handler can determine the
12504 function that caused a floating-point exception.
12507 Instruction precision. The trap handler can determine the
12508 exact instruction that caused a floating-point exception.
12510 Other Alpha compilers provide the equivalent options called
12511 `-scope_safe' and `-resumption_safe'.
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.
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.
12526 Use this option to require GCC to construct _all_ integer constants
12527 using code, even if it takes more instructions (the maximum is
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
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
12551 Generate code that uses (does not use) VAX F and G floating-point
12552 arithmetic instead of IEEE single and double precision.
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.
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.
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.
12580 When generating code for shared libraries, `-fpic' implies
12581 `-msmall-data' and `-fPIC' implies `-mlarge-data'.
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.
12592 The default is `-mlarge-text'.
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.
12603 Supported values for CPU_TYPE are
12608 Schedules as an EV4 and has no instruction set extensions.
12612 Schedules as an EV5 and has no instruction set extensions.
12616 Schedules as an EV5 and supports the BWX extension.
12621 Schedules as an EV5 and supports the BWX and MAX extensions.
12625 Schedules as an EV6 and supports the BWX, FIX, and MAX
12630 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
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
12639 Set only the instruction scheduling parameters for machine type
12640 CPU_TYPE. The instruction set is not changed.
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
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.
12653 Valid options for TIME are
12656 A decimal number representing clock cycles.
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.
12669 File: gcc.info, Node: FR30 Options, Next: FRV Options, Prev: DEC Alpha Options, Up: Submodel Options
12671 3.17.11 FR30 Options
12672 --------------------
12674 These options are defined specifically for the FR30 port.
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
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
12688 File: gcc.info, Node: FRV Options, Next: GNU/Linux Options, Prev: FR30 Options, Up: Submodel Options
12690 3.17.12 FRV Options
12691 -------------------
12694 Only use the first 32 general-purpose registers.
12697 Use all 64 general-purpose registers.
12700 Use only the first 32 floating-point registers.
12703 Use all 64 floating-point registers.
12706 Use hardware instructions for floating-point operations.
12709 Use library routines for floating-point operations.
12712 Dynamically allocate condition code registers.
12715 Do not try to dynamically allocate condition code registers, only
12716 use `icc0' and `fcc0'.
12719 Change ABI to use double word insns.
12722 Do not use double word instructions.
12725 Use floating-point double instructions.
12728 Do not use floating-point double instructions.
12731 Use media instructions.
12734 Do not use media instructions.
12737 Use multiply and add/subtract instructions.
12740 Do not use multiply and add/subtract instructions.
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'.
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
12759 Assume a large TLS segment when generating thread-local code.
12762 Do not assume a large TLS segment when generating thread-local
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.
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.
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'.
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.
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.
12797 Generate position-independent EABI code.
12800 Use only the first four media accumulator registers.
12803 Use all eight media accumulator registers.
12806 Pack VLIW instructions.
12809 Do not pack VLIW instructions.
12812 Do not mark ABI switches in e_flags.
12815 Enable the use of conditional-move instructions (default).
12817 This switch is mainly for debugging the compiler and will likely
12818 be removed in a future version.
12821 Disable the use of conditional-move instructions.
12823 This switch is mainly for debugging the compiler and will likely
12824 be removed in a future version.
12827 Enable the use of conditional set instructions (default).
12829 This switch is mainly for debugging the compiler and will likely
12830 be removed in a future version.
12833 Disable the use of conditional set instructions.
12835 This switch is mainly for debugging the compiler and will likely
12836 be removed in a future version.
12839 Enable the use of conditional execution (default).
12841 This switch is mainly for debugging the compiler and will likely
12842 be removed in a future version.
12845 Disable the use of conditional execution.
12847 This switch is mainly for debugging the compiler and will likely
12848 be removed in a future version.
12851 Run a pass to pack branches into VLIW instructions (default).
12853 This switch is mainly for debugging the compiler and will likely
12854 be removed in a future version.
12857 Do not run a pass to pack branches into VLIW instructions.
12859 This switch is mainly for debugging the compiler and will likely
12860 be removed in a future version.
12862 `-mmulti-cond-exec'
12863 Enable optimization of `&&' and `||' in conditional execution
12866 This switch is mainly for debugging the compiler and will likely
12867 be removed in a future version.
12869 `-mno-multi-cond-exec'
12870 Disable optimization of `&&' and `||' in conditional execution.
12872 This switch is mainly for debugging the compiler and will likely
12873 be removed in a future version.
12875 `-mnested-cond-exec'
12876 Enable nested conditional execution optimizations (default).
12878 This switch is mainly for debugging the compiler and will likely
12879 be removed in a future version.
12881 `-mno-nested-cond-exec'
12882 Disable nested conditional execution optimizations.
12884 This switch is mainly for debugging the compiler and will likely
12885 be removed in a future version.
12887 `-moptimize-membar'
12888 This switch removes redundant `membar' instructions from the
12889 compiler-generated code. It is enabled by default.
12891 `-mno-optimize-membar'
12892 This switch disables the automatic removal of redundant `membar'
12893 instructions from the generated code.
12896 Cause gas to print out tomcat statistics.
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'.
12905 File: gcc.info, Node: GNU/Linux Options, Next: H8/300 Options, Prev: FRV Options, Up: Submodel Options
12907 3.17.13 GNU/Linux Options
12908 -------------------------
12910 These `-m' options are defined for GNU/Linux targets:
12913 Use the GNU C library. This is the default except on
12914 `*-*-linux-*uclibc*' and `*-*-linux-*android*' targets.
12917 Use uClibc C library. This is the default on `*-*-linux-*uclibc*'
12921 Use Bionic C library. This is the default on
12922 `*-*-linux-*android*' targets.
12925 Compile code compatible with Android platform. This is the
12926 default on `*-*-linux-*android*' targets.
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.
12935 Disable compilation effects of `-mandroid', i.e., do not enable
12936 `-mbionic', `-fPIC', `-fno-exceptions' and `-fno-rtti' by default.
12939 Disable linking effects of `-mandroid', i.e., pass standard Linux
12940 linking options to the linker.
12944 File: gcc.info, Node: H8/300 Options, Next: HPPA Options, Prev: GNU/Linux Options, Up: Submodel Options
12946 3.17.14 H8/300 Options
12947 ----------------------
12949 These `-m' options are defined for the H8/300 implementations:
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.
12957 Generate code for the H8/300H.
12960 Generate code for the H8S.
12963 Generate code for the H8S and H8/300H in the normal mode. This
12964 switch must be used either with `-mh' or `-ms'.
12967 Generate code for the H8S/2600. This switch must be used with
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.
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.
12981 Make `int' data 32 bits by default.
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
12991 File: gcc.info, Node: HPPA Options, Next: i386 and x86-64 Options, Prev: H8/300 Options, Up: Submodel Options
12993 3.17.15 HPPA Options
12994 --------------------
12996 These `-m' options are defined for the HPPA family of computers:
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.
13009 Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0'
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.
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.
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.
13028 `-mdisable-indexing'
13029 Prevent the compiler from using indexing address modes. This
13030 avoids some rather obscure problems when compiling MIG generated
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.
13038 Such code is suitable for level 0 PA systems and kernels.
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.
13044 This option does not work in the presence of shared libraries or
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.
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.
13059 `-mportable-runtime'
13060 Use the portable calling conventions proposed by HP for ELF
13064 Enable the use of assembler directives only GAS understands.
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'.
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.
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.
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
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.
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*'.
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*'.
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.
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
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.
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.
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
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'.
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
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.
13177 Suppress the generation of link options to search libdld.sl when
13178 the `-static' option is specified on HP-UX 10 and later.
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.
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.
13194 Add support for multithreading with the "dce thread" library under
13195 HP-UX. This option sets flags for both the preprocessor and
13199 File: gcc.info, Node: i386 and x86-64 Options, Next: i386 and x86-64 Windows Options, Prev: HPPA Options, Up: Submodel Options
13201 3.17.16 Intel 386 and AMD x86-64 Options
13202 ----------------------------------------
13204 These `-m' options are defined for the i386 and x86-64 family of
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'.
13214 The choices for CPU-TYPE are:
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.
13226 Original Intel i386 CPU.
13229 Intel i486 CPU. (No scheduling is implemented for this chip.)
13233 Intel Pentium CPU with no MMX support.
13236 Intel Pentium MMX CPU, based on Pentium core with MMX
13237 instruction set support.
13240 Intel Pentium Pro CPU.
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'.
13248 Intel Pentium II CPU, based on Pentium Pro core with MMX
13249 instruction set support.
13253 Intel Pentium III CPU, based on Pentium Pro core with MMX and
13254 SSE instruction set support.
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.
13263 Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set
13267 Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2
13268 and SSE3 instruction set support.
13271 Improved version of Intel Pentium 4 CPU with 64-bit
13272 extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
13275 Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
13276 and SSSE3 instruction set support.
13279 Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2,
13280 SSE3, SSSE3, SSE4.1 and SSE4.2 instruction set support.
13283 Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2,
13284 SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction
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.
13293 Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
13294 and SSSE3 instruction set support.
13297 AMD K6 CPU with MMX instruction set support.
13301 Improved versions of AMD K6 CPU with MMX and 3DNow!
13302 instruction set support.
13306 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
13307 prefetch instructions support.
13312 Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
13313 full SSE instruction set support.
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.)
13327 Improved versions of AMD K8 cores with SSE3 instruction set
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
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.)
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.)
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.
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.)
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.
13367 IDT WinChip C6 CPU, dealt in same way as i486 with additional
13368 MMX instruction set support.
13371 IDT WinChip 2 CPU, dealt in same way as i486 with additional
13372 MMX and 3DNow! instruction set support.
13375 VIA C3 CPU with MMX and 3DNow! instruction set support. (No
13376 scheduling is implemented for this chip.)
13379 VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
13380 support. (No scheduling is implemented for this chip.)
13383 AMD Geode embedded processor with MMX and 3DNow! instruction
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.
13396 The choices for CPU-TYPE are the same as for `-march'. In
13397 addition, `-mtune' supports an extra choice for CPU-TYPE:
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.
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.
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
13421 A deprecated synonym for `-mtune'.
13424 Generate floating-point arithmetic for selected unit UNIT. The
13425 choices for UNIT are:
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.
13436 This is the default choice for i386 compiler.
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
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.
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.
13459 This is the default choice for the x86-64 compiler.
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.
13473 Output assembly instructions using selected DIALECT. Supported
13474 choices are `intel' or `att' (the default). Darwin does not
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.
13484 Generate output containing library calls for floating point.
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
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.
13496 `-mno-fp-ret-in-387'
13497 Do not use the FPU registers for return values of functions.
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.
13503 The option `-mno-fp-ret-in-387' causes such values to be returned
13504 in ordinary CPU registers instead.
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'
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
13524 On x86-64, `-malign-double' is enabled by default.
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.
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.
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.
13544 In the x86-64 compiler, `-m128bit-long-double' is the default
13545 choice as its ABI specifies that `long double' is aligned on
13548 Notice that neither of these options enable any extra precision
13549 over the x87 standard of 80 bits for a `long double'.
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.
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.
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.
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
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.
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::.
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.
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.
13595 In addition, seriously incorrect code results if you call a
13596 function with too many arguments. (Normally, extra arguments are
13597 harmlessly ignored.)
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::.
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.
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::.
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.
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
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.
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.
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
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).
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
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.
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.
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
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'.
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
13771 To generate SSE/SSE2 instructions automatically from floating-point
13772 code (as opposed to 387 instructions), see `-mfpmath=sse'.
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.
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.
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.
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.
13806 This option instructs GCC to use 128-bit AVX instructions instead
13807 of 256-bit AVX instructions in the auto-vectorizer.
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.
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.
13829 This option enables use of the `movbe' instruction to implement
13830 `__builtin_bswap32' and `__builtin_bswap64'.
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
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).
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'.
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'.
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:
13866 Enable all estimate instructions.
13869 Enable the default instructions, equivalent to `-mrecip'.
13872 Disable all estimate instructions, equivalent to `-mno-recip'.
13875 Enable the approximation for scalar division.
13878 Enable the approximation for vectorized division.
13881 Enable the approximation for scalar square root.
13884 Enable the approximation for vectorized square root.
13886 So, for example, `-mrecip=all,!sqrt' enables all of the reciprocal
13887 approximations, except for square root.
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.
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
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::.
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.
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
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'.
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.
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.
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
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.
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:
13975 Expand using i386 `rep' prefix of the specified size.
13980 Expand into an inline loop.
13983 Always use a library call.
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.
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.
14000 For systems that use the GNU C Library, the default is on.
14004 Specify that the assembler should encode SSE instructions with VEX
14005 prefix. The option `-mavx' turns this on by default.
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
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.
14022 `-mavx256-split-unaligned-load'
14023 `-mavx256-split-unaligned-store'
14024 Split 32-byte AVX unaligned load and store.
14027 These `-m' switches are supported in addition to the above on x86-64
14028 processors in 64-bit environments.
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.
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.
14042 The `-mx32' option sets `int', `long', and pointer types to 32
14043 bits, and generates code for the x86-64 architecture.
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.
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.
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
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.
14072 Generate code for the large model. This model makes no assumptions
14073 about addresses and sizes of sections.
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.
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.
14086 File: gcc.info, Node: i386 and x86-64 Windows Options, Next: IA-64 Options, Prev: i386 and x86-64 Options, Up: Submodel Options
14088 3.17.17 i386 and x86-64 Windows Options
14089 ---------------------------------------
14091 These additional options are available for Microsoft Windows targets:
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
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
14106 `-mnop-fun-dllimport'
14107 This option is available for Cygwin and MinGW targets. It
14108 specifies that the `dllimport' attribute should be ignored.
14111 This option is available for MinGW targets. It specifies that
14112 MinGW-specific thread support is to be used.
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.
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.
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.
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.
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.
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
14151 See also under *note i386 and x86-64 Options:: for standard options.
14154 File: gcc.info, Node: IA-64 Options, Next: LM32 Options, Prev: i386 and x86-64 Windows Options, Up: Submodel Options
14156 3.17.18 IA-64 Options
14157 ---------------------
14159 These are the `-m' options defined for the Intel IA-64 architecture.
14162 Generate code for a big-endian target. This is the default for
14166 Generate code for a little-endian target. This is the default for
14167 AIX5 and GNU/Linux.
14171 Generate (or don't) code for the GNU assembler. This is the
14176 Generate (or don't) code for the GNU linker. This is the default.
14179 Generate code that does not use a global pointer register. The
14180 result is not position independent code, and violates the IA-64
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.
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.
14195 Disable (or enable) optimizations that use the small data section.
14196 This may be useful for working around optimizer bugs.
14199 Generate code that uses a single constant global pointer value.
14200 This is useful when compiling kernel code.
14203 Generate code that is self-relocatable. This implies
14204 `-mconstant-gp'. This is useful when compiling firmware code.
14206 `-minline-float-divide-min-latency'
14207 Generate code for inline divides of floating-point values using
14208 the minimum latency algorithm.
14210 `-minline-float-divide-max-throughput'
14211 Generate code for inline divides of floating-point values using
14212 the maximum throughput algorithm.
14214 `-mno-inline-float-divide'
14215 Do not generate inline code for divides of floating-point values.
14217 `-minline-int-divide-min-latency'
14218 Generate code for inline divides of integer values using the
14219 minimum latency algorithm.
14221 `-minline-int-divide-max-throughput'
14222 Generate code for inline divides of integer values using the
14223 maximum throughput algorithm.
14225 `-mno-inline-int-divide'
14226 Do not generate inline code for divides of integer values.
14228 `-minline-sqrt-min-latency'
14229 Generate code for inline square roots using the minimum latency
14232 `-minline-sqrt-max-throughput'
14233 Generate code for inline square roots using the maximum throughput
14237 Do not generate inline code for `sqrt'.
14241 Do (don't) generate code that uses the fused multiply/add or
14242 multiply/subtract instructions. The default is to use these
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
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.
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.
14264 `-mtls-size=TLS-SIZE'
14265 Specify bit size of immediate TLS offsets. Valid values are 14,
14269 Tune the instruction scheduling for a particular CPU, Valid values
14270 are `itanium', `itanium1', `merced', `itanium2', and `mckinley'.
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.
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'.
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'.
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
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
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
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'.
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
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'.
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'.
14340 Use a simple data speculation check. This option is on by default.
14342 `-msched-control-spec-ldc'
14343 Use a simple check for control speculation. This option is on by
14346 `-msched-stop-bits-after-every-cycle'
14347 Place a stop bit after every cycle when scheduling. This option
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.
14355 `-msel-sched-dont-check-control-spec'
14356 Generate checks for control speculation in selective scheduling.
14357 This flag is disabled by default.
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.
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.
14374 File: gcc.info, Node: LM32 Options, Next: M32C Options, Prev: IA-64 Options, Up: Submodel Options
14376 3.17.19 LM32 Options
14377 --------------------
14379 These `-m' options are defined for the LatticeMico32 architecture:
14381 `-mbarrel-shift-enabled'
14382 Enable barrel-shift instructions.
14385 Enable divide and modulus instructions.
14387 `-mmultiply-enabled'
14388 Enable multiply instructions.
14390 `-msign-extend-enabled'
14391 Enable sign extend instructions.
14394 Enable user-defined instructions.
14398 File: gcc.info, Node: M32C Options, Next: M32R/D Options, Prev: LM32 Options, Up: Submodel Options
14400 3.17.20 M32C Options
14401 --------------------
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
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
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
14429 File: gcc.info, Node: M32R/D Options, Next: M680x0 Options, Prev: M32C Options, Up: Submodel Options
14431 3.17.21 M32R/D Options
14432 ----------------------
14434 These `-m' options are defined for Renesas M32R/D architectures:
14437 Generate code for the M32R/2.
14440 Generate code for the M32R/X.
14443 Generate code for the M32R. This is the default.
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
14451 The addressability of a particular object can be set with the
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'
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).
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.
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.
14477 Put small global and static data in the small data area, but do not
14478 generate special code to reference them.
14481 Put small global and static data in the small data area, and
14482 generate special instructions to reference them.
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
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
14497 Makes the M32R-specific code in the compiler display some
14498 statistics that might help in debugging programs.
14501 Align all loops to a 32-byte boundary.
14504 Do not enforce a 32-byte alignment for loops. This is the default.
14506 `-missue-rate=NUMBER'
14507 Issue NUMBER instructions per cycle. NUMBER can only be 1 or 2.
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.
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.
14518 Specifies that the cache cannot be flushed by using a trap.
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.
14526 Indicates that there is no OS function for flushing the cache.
14530 File: gcc.info, Node: M680x0 Options, Next: MCore Options, Prev: M32R/D Options, Up: Submodel Options
14532 3.17.22 M680x0 Options
14533 ----------------------
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
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'.
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.
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.
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
14563 *Family* *`-mcpu' arguments*
14564 `51' `51' `51ac' `51ag' `51cn' `51em' `51je' `51jf' `51jg'
14565 `51jm' `51mm' `51qe' `51qm'
14566 `5206' `5202' `5204' `5206'
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'
14578 `5271' `5270' `5271'
14580 `5275' `5274' `5275'
14581 `5282' `5280' `5281' `5282' `528x'
14582 `53017' `53011' `53012' `53013' `53014' `53015' `53016'
14585 `5329' `5327' `5328' `5329' `532x'
14586 `5373' `5372' `5373' `537x'
14588 `5475' `5470' `5471' `5472' `5473' `5474' `5475' `547x'
14589 `5480' `5481' `5482' `5483' `5484' `5485'
14591 `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with
14592 CPU. Other combinations of `-mcpu' and `-march' are rejected.
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.
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'.
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.
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
14618 GCC also defines the macro `__mUARCH__' when tuning for ColdFire
14619 microarchitecture UARCH, where UARCH is one of the arguments given
14624 Generate output for a 68000. This is the default when the
14625 compiler is configured for 68000-based systems. It is equivalent
14628 Use this option for microcontrollers with a 68000 or EC000 core,
14629 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
14632 Generate output for a 68010. This is the default when the
14633 compiler is configured for 68010-based systems. It is equivalent
14638 Generate output for a 68020. This is the default when the
14639 compiler is configured for 68020-based systems. It is equivalent
14643 Generate output for a 68030. This is the default when the
14644 compiler is configured for 68030-based systems. It is equivalent
14648 Generate output for a 68040. This is the default when the
14649 compiler is configured for 68040-based systems. It is equivalent
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.
14657 Generate output for a 68060. This is the default when the
14658 compiler is configured for 68060-based systems. It is equivalent
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
14667 Generate output for a CPU32. This is the default when the
14668 compiler is configured for CPU32-based systems. It is equivalent
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.
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
14681 Use this option for microcontroller with a 5200 core, including
14682 the MCF5202, MCF5203, MCF5204 and MCF5206.
14685 Generate output for a 5206e ColdFire CPU. The option is now
14686 deprecated in favor of the equivalent `-mcpu=5206e'.
14689 Generate output for a member of the ColdFire 528X family. The
14690 option is now deprecated in favor of the equivalent `-mcpu=528x'.
14693 Generate output for a ColdFire 5307 CPU. The option is now
14694 deprecated in favor of the equivalent `-mcpu=5307'.
14697 Generate output for a ColdFire 5407 CPU. The option is now
14698 deprecated in favor of the equivalent `-mcpu=5407'.
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.
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
14713 The option is equivalent to `-march=68020' `-mtune=68020-40'.
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
14722 The option is equivalent to `-march=68020' `-mtune=68020-60'.
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.
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.
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
14746 GCC defines the macro `__mcfhwdiv__' when this option is enabled.
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
14755 Do not consider type `int' to be 16 bits wide. This is the
14760 Do not use the bit-field instructions. The `-m68000', `-mcpu32'
14761 and `-m5200' options imply `-mnobitfield'.
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.
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.
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.
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.
14783 In addition, seriously incorrect code results if you call a
14784 function with too many arguments. (Normally, extra arguments are
14785 harmlessly ignored.)
14787 The `rtd' instruction is supported by the 68010, 68020, 68030,
14788 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
14791 Do not use the calling conventions selected by `-mrtd'. This is
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
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.
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.
14814 `-mno-strict-align'
14816 Do not (do) assume that unaligned memory references are handled by
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'.
14826 Generate code that assumes that the data segment follows the text
14827 segment. This is the default.
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
14835 `-mno-id-shared-library'
14836 Generate code that doesn't assume ID-based shared libraries are
14837 being used. This is the default.
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.
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.
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:
14858 relocation truncated to fit: R_68K_GOT16O foobar
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.
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
14871 These options have no effect unless GCC is generating
14872 position-independent code.
14876 File: gcc.info, Node: MCore Options, Next: MeP Options, Prev: M680x0 Options, Up: Submodel Options
14878 3.17.23 MCore Options
14879 ---------------------
14881 These are the `-m' options defined for the Motorola M*Core processors.
14885 Inline constants into the code stream if it can be done in two
14886 instructions or less.
14890 Use the divide instruction. (Enabled by default).
14892 `-mrelax-immediate'
14893 `-mno-relax-immediate'
14894 Allow arbitrary-sized immediates in bit operations.
14897 `-mno-wide-bitfields'
14898 Always treat bit-fields as `int'-sized.
14900 `-m4byte-functions'
14901 `-mno-4byte-functions'
14902 Force all functions to be aligned to a 4-byte boundary.
14905 `-mno-callgraph-data'
14906 Emit callgraph information.
14910 Prefer word access when reading byte quantities.
14914 Generate code for a little-endian target.
14918 Generate code for the 210 processor.
14921 Assume that runtime support has been provided and so omit the
14922 simulator library (`libsim.a)' from the linker command line.
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.
14933 File: gcc.info, Node: MeP Options, Next: MicroBlaze Options, Prev: MCore Options, Up: Submodel Options
14935 3.17.24 MeP Options
14936 -------------------
14939 Enables the `abs' instruction, which is the absolute difference
14940 between two registers.
14943 Enables all the optional instructions--average, multiply, divide,
14944 bit operations, leading zero, absolute difference, min/max, clip,
14948 Enables the `ave' instruction, which computes the average of two
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'
14958 Enables the bit operation instructions--bit test (`btstm'), set
14959 (`bsetm'), clear (`bclrm'), invert (`bnotm'), and test-and-set
14963 Selects which section constant data is placed in. NAME may be
14964 `tiny', `near', or `far'.
14967 Enables the `clip' instruction. Note that `-mclip' is not useful
14968 unless you also provide `-mminmax'.
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'.
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.
14985 Enables the 32-bit coprocessor's instructions.
14988 Enables the 64-bit coprocessor's instructions.
14991 Enables IVC2 scheduling. IVC2 is a 64-bit VLIW coprocessor.
14994 Causes constant variables to be placed in the `.near' section.
14997 Enables the `div' and `divu' instructions.
15000 Generate big-endian code.
15003 Generate little-endian code.
15006 Tells the compiler that any variable marked with the `io'
15007 attribute is to be considered volatile.
15010 Causes variables to be assigned to the `.far' section by default.
15013 Enables the `leadz' (leading zero) instruction.
15016 Causes variables to be assigned to the `.near' section by default.
15019 Enables the `min' and `max' instructions.
15022 Enables the multiplication and multiply-accumulate instructions.
15025 Disables all the optional instructions enabled by `-mall-opts'.
15028 Enables the `repeat' and `erepeat' instructions, used for
15029 low-overhead looping.
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.
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'.
15042 Link the SDRAM-based runtime instead of the default ROM-based
15046 Link the simulator runtime libraries.
15049 Link the simulator runtime libraries, excluding built-in support
15050 for reset and exception vectors and tables.
15053 Causes all functions to default to the `.far' section. Without
15054 this option, functions default to the `.near' section.
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.
15064 File: gcc.info, Node: MicroBlaze Options, Next: MIPS Options, Prev: MeP Options, Up: Submodel Options
15066 3.17.25 MicroBlaze Options
15067 --------------------------
15070 Use software emulation for floating point (default).
15073 Use hardware floating-point instructions.
15076 Do not optimize block moves, use `memcpy'.
15079 This option is deprecated. Use `-fno-zero-initialized-in-bss'
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',
15090 Use software multiply emulation (default).
15093 Use software emulation for divides (default).
15095 `-mxl-barrel-shift'
15096 Use the hardware barrel shifter.
15098 `-mxl-pattern-compare'
15099 Use pattern compare instructions.
15102 Use table lookup optimization for small signed integer divisions.
15105 This option is deprecated. Use `-fstack-check' instead.
15108 Use GP-relative `.sdata'/`.sbss' sections.
15110 `-mxl-multiply-high'
15111 Use multiply high instructions for high part of 32x32 multiply.
15113 `-mxl-float-convert'
15114 Use hardware floating-point conversion instructions.
15117 Use hardware floating-point square root instruction.
15120 Generate code for a big-endian target.
15123 Generate code for a little-endian target.
15126 Use reorder instructions (swap and byte reversed load/store).
15128 `-mxl-mode-APP-MODEL'
15129 Select application model APP-MODEL. Valid models are
15131 normal executable (default), uses startup code `crt0.o'.
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
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.
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
15152 Option `-xl-mode-APP-MODEL' is a deprecated alias for
15153 `-mxl-mode-APP-MODEL'.
15157 File: gcc.info, Node: MIPS Options, Next: MMIX Options, Prev: MicroBlaze Options, Up: Submodel Options
15159 3.17.26 MIPS Options
15160 --------------------
15163 Generate big-endian code.
15166 Generate little-endian code. This is the default for `mips*el-*-*'
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).
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
15193 In processor names, a final `000' can be abbreviated as `k' (for
15194 example, `-march=r2k'). Prefixes are optional, and `vr' may be
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'.
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'.
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.
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
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
15230 `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO',
15231 which work in the same way as the `-march' ones described above.
15234 Equivalent to `-march=mips1'.
15237 Equivalent to `-march=mips2'.
15240 Equivalent to `-march=mips3'.
15243 Equivalent to `-march=mips4'.
15246 Equivalent to `-march=mips32'.
15249 Equivalent to `-march=mips32r2'.
15252 Equivalent to `-march=mips64'.
15255 Equivalent to `-march=mips64r2'.
15259 Generate (do not generate) MIPS16 code. If GCC is targeting a
15260 MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
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.
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
15272 `-minterlink-mips16'
15273 `-mno-interlink-mips16'
15274 Require (do not require) that non-MIPS16 code be link-compatible
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.
15287 Generate code for the given ABI.
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.
15293 For information about the O64 ABI, see
15294 `http://gcc.gnu.org/projects/mipso64-abi.html'.
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.
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.
15311 Generate (do not generate) code that is suitable for SVR4-style
15312 dynamic objects. `-mabicalls' is the default for SVR4-based
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'.
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'.
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.
15334 `-mshared' is the default.
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
15343 You can make `-mplt' the default by configuring GCC with
15344 `--with-mips-plt'. The default is `-mno-plt' otherwise.
15348 Lift (do not lift) the usual restrictions on the size of the global
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:
15356 relocation truncated to fit: R_MIPS_GOT16 foobar
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
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.
15367 These options have no effect unless GCC is generating position
15371 Assume that general-purpose registers are 32 bits wide.
15374 Assume that general-purpose registers are 64 bits wide.
15377 Assume that floating-point registers are 32 bits wide.
15380 Assume that floating-point registers are 64 bits wide.
15383 Use floating-point coprocessor instructions.
15386 Do not use floating-point coprocessor instructions. Implement
15387 floating-point calculations using library calls instead.
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.
15400 Assume that the floating-point coprocessor only supports
15401 single-precision operations.
15404 Assume that the floating-point coprocessor supports
15405 double-precision operations. This is the default.
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
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.
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.
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'
15436 Use (do not use) the MIPS SmartMIPS ASE.
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.
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.
15452 Use (do not use) the MIPS-3D ASE. *Note MIPS-3D Built-in
15453 Functions::. The option `-mips3d' implies `-mpaired-single'.
15457 Use (do not use) MT Multithreading instructions.
15461 Use (do not use) the MIPS MCU ASE instructions.
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
15469 Force `long', `int', and pointer types to be 32 bits wide.
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.
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
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.
15490 The default `-G' option depends on the configuration.
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.
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.
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.
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'
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.
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.
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
15540 `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'.
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.
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
15556 `-mcode-readable=SETTING'
15557 Specify whether GCC may generate code that reads from executable
15558 sections. There are three possible settings:
15560 `-mcode-readable=yes'
15561 Instructions may freely access executable sections. This is
15562 the default setting.
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.
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
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.
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.
15592 `-mexplicit-relocs' is the default if GCC was configured to use an
15593 assembler that supports relocation operators.
15595 `-mcheck-zero-division'
15596 `-mno-check-zero-division'
15597 Trap (do not trap) on integer division by zero.
15599 The default is `-mcheck-zero-division'.
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.
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'.
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.
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.
15628 This option has no effect on abicalls code. The default is
15633 Enable (disable) use of the `mad', `madu' and `mul' instructions,
15634 as provided by the R4650 ISA.
15638 Enable (disable) use of the floating-point multiply-accumulate
15639 instructions, when they are available. The default is
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.
15650 Tell the MIPS assembler to not run its preprocessor over user
15651 assembler files (with a `.s' suffix) when assembling them.
15656 Work around the 24K E48 (lost data on stores during refill) errata.
15657 The workarounds are implemented by the assembler rather than by
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
15667 - A double-word or a variable shift may give an incorrect
15668 result if executed while an integer multiplication is in
15671 - An integer division may give an incorrect result if started
15672 in a delay slot of a taken branch or a jump.
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
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.
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
15694 Work around certain VR4120 errata:
15695 - `dmultu' does not always produce the correct result.
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.
15703 Other VR4120 errata require a NOP to be inserted between certain
15704 pairs of instructions. These errata are handled by the assembler,
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.
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
15719 `-mr10k-cache-barrier=SETTING'
15720 Specify whether GCC should insert cache barriers to avoid the
15721 side-effects of speculation on R10K processors.
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.
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.
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:
15745 1. the memory occupied by the current function's stack frame;
15747 2. the memory occupied by an incoming stack argument;
15749 3. the memory occupied by an object with a link-time-constant
15752 It is the kernel's responsibility to ensure that speculative
15753 accesses to these regions are indeed safe.
15755 If the input program contains a function declaration such as:
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.
15764 The option has three forms:
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
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
15776 `-mr10k-cache-barrier=none'
15777 Disable the insertion of cache barriers. This is the default
15780 `-mflush-func=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'.
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.
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.
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.
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.
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.
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'.
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
15835 This option defaults to `-mno-synci', but the default can be
15836 overridden by configuring with `--with-synci'.
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.
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.
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.
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
15864 * Returning the new address in register `$31'.
15866 * Storing the new address in `*RA-ADDRESS', if RA-ADDRESS is
15869 The default is `-mno-mcount-ra-address'.
15873 File: gcc.info, Node: MMIX Options, Next: MN10300 Options, Prev: MIPS Options, Up: Submodel Options
15875 3.17.27 MMIX Options
15876 --------------------
15878 These options are defined for the MMIX:
15882 Specify that intrinsic library functions are being compiled,
15883 passing all values in registers, no matter the size.
15887 Generate floating-point comparison instructions that compare with
15888 respect to the `rE' epsilon register.
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
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.
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.
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.
15916 Generate an executable in the ELF format, rather than the default
15917 `mmo' format used by the `mmix' simulator.
15920 `-mno-branch-predict'
15921 Use (do not use) the probable-branch instructions, when static
15922 branch prediction indicates a probable branch.
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'.
15938 Force (do not force) generated code to have a single exit point in
15942 File: gcc.info, Node: MN10300 Options, Next: Moxie Options, Prev: MMIX Options, Up: Submodel Options
15944 3.17.28 MN10300 Options
15945 -----------------------
15947 These `-m' options are defined for Matsushita MN10300 architectures:
15950 Generate code to avoid bugs in the multiply instructions for the
15951 MN10300 processors. This is the default.
15954 Do not generate code to avoid bugs in the multiply instructions
15955 for the MN10300 processors.
15958 Generate code using features specific to the AM33 processor.
15961 Do not generate code using features specific to the AM33
15962 processor. This is the default.
15965 Generate code using features specific to the AM33/2.0 processor.
15968 Generate code using features specific to the AM34 processor.
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'.
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.
15984 Do not link in the C run-time initialization object file.
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.
15992 This option makes symbolic debugging impossible.
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__'.
16000 Do not allow the compiler to generate _Long Instruction Word_
16001 instructions. This option defines the preprocessor macro
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__'.
16010 Do not allow the compiler to generate _SETLB_ or _Lcc_
16011 instructions. This option defines the preprocessor macro
16016 File: gcc.info, Node: Moxie Options, Next: PDP-11 Options, Prev: MN10300 Options, Up: Submodel Options
16018 3.17.29 Moxie Options
16019 ---------------------
16022 Generate big-endian code. This is the default for `moxie-*-*'
16026 Generate little-endian code.
16029 Do not link in the C run-time initialization object file.
16033 File: gcc.info, Node: PDP-11 Options, Next: picoChip Options, Prev: Moxie Options, Up: Submodel Options
16035 3.17.30 PDP-11 Options
16036 ----------------------
16038 These options are defined for the PDP-11:
16041 Use hardware FPP floating point. This is the default. (FIS
16042 floating point on the PDP-11/40 is not supported.)
16045 Do not use hardware floating point.
16048 Return floating-point results in ac0 (fr0 in Unix assembler
16052 Return floating-point results in memory. This is the default.
16055 Generate code for a PDP-11/40.
16058 Generate code for a PDP-11/45. This is the default.
16061 Generate code for a PDP-11/10.
16064 Use inline `movmemhi' patterns for copying memory. This is the
16068 Do not use inline `movmemhi' patterns for copying memory.
16072 Use 16-bit `int'. This is the default.
16080 Use 64-bit `float'. This is the default.
16084 Use 32-bit `float'.
16087 Use `abshi2' pattern. This is the default.
16090 Do not use `abshi2' pattern.
16092 `-mbranch-expensive'
16093 Pretend that branches are expensive. This is for experimenting
16094 with code generation only.
16097 Do not pretend that branches are expensive. This is the default.
16100 Use Unix assembler syntax. This is the default when configured for
16104 Use DEC assembler syntax. This is the default when configured for
16105 any PDP-11 target other than `pdp11-*-bsd'.
16108 File: gcc.info, Node: picoChip Options, Next: PowerPC Options, Prev: PDP-11 Options, Up: Submodel Options
16110 3.17.31 picoChip Options
16111 ------------------------
16113 These `-m' options are defined for picoChip implementations:
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'.
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.
16126 `-mae=MUL' selects a MUL AE type. This is the most useful AE type
16127 for compiled code, and is the default.
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.
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.
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.
16155 File: gcc.info, Node: PowerPC Options, Next: RL78 Options, Prev: picoChip Options, Up: Submodel Options
16157 3.17.32 PowerPC Options
16158 -----------------------
16160 These are listed under *Note RS/6000 and PowerPC Options::.
16163 File: gcc.info, Node: RL78 Options, Next: RS/6000 and PowerPC Options, Prev: PowerPC Options, Up: Submodel Options
16165 3.17.33 RL78 Options
16166 --------------------
16169 Links in additional target libraries to support operation within a
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
16184 File: gcc.info, Node: RS/6000 and PowerPC Options, Next: RX Options, Prev: RL78 Options, Up: Submodel Options
16186 3.17.34 IBM RS/6000 and PowerPC Options
16187 ---------------------------------------
16189 These `-m' options are defined for the IBM RS/6000 and PowerPC:
16191 `-mno-powerpc-gpopt'
16193 `-mno-powerpc-gfxopt'
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.
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.
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.
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'.
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'.
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
16267 The other options specify a specific processor. Code generated
16268 under those options runs best on that processor, and may not run
16271 The `-mcpu' options automatically enable or disable the following
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
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'.
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
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'.
16301 Generate PowerPC64 code for the small model: The TOC is limited to
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.
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
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
16323 Generate VRSAVE instructions when generating AltiVec code.
16325 `-mgen-cell-microcode'
16326 Generate Cell microcode instructions.
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.
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.
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.
16344 This switch enables or disables the generation of ISEL
16348 This switch has been deprecated. Use `-misel' and `-mno-isel'
16353 This switch enables or disables the generation of SPE simd
16358 This switch enables or disables the generation of PAIRED simd
16362 This option has been deprecated. Use `-mspe' and `-mno-spe'
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.
16371 `-mfloat-gprs=YES/SINGLE/DOUBLE/NO'
16373 This switch enables or disables the generation of floating-point
16374 operations on the general-purpose registers for architectures that
16377 The argument YES or SINGLE enables the use of single-precision
16378 floating-point operations.
16380 The argument DOUBLE enables the use of single and double-precision
16381 floating-point operations.
16383 The argument NO disables floating-point operations on the
16384 general-purpose registers.
16386 This option is currently only available on the MPC854x.
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
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.
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.
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.
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'.
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.
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
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.
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.
16474 On 64-bit Darwin, natural alignment is the default, and
16475 `-malign-power' is not supported.
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.
16485 Generate code for single- or double-precision floating-point
16486 operations. `-mdouble-float' implies `-msingle-float'.
16489 Do not generate `sqrt' and `div' instructions for hardware
16490 floating-point unit.
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
16500 Perform optimizations for the floating-point unit on Xilinx PPC
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.
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.
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.
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.
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'.
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.
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
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.
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.
16578 `-mno-strict-align'
16580 On System V.4 and embedded PowerPC systems do not (do) assume that
16581 unaligned memory references are handled by the system.
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.
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.
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.
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'.
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
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
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.
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.
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:
16646 No dependence is costly.
16649 All dependences are costly.
16651 `true_store_to_load'
16652 A true dependence from store to load is costly.
16655 Any dependence from store to load is costly.
16658 Any dependence for which the latency is greater than or equal
16659 to NUMBER is costly.
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
16670 Pad with NOPs any dispatch group that has vacant issue slots,
16671 according to the scheduler's grouping.
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
16680 Insert NOPs to force costly dependent insns into separate
16681 groups. Insert NUMBER NOPs to force an insn to a new group.
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'.
16692 Specify both `-mcall-sysv' and `-meabi' options.
16694 `-mcall-sysv-noeabi'
16695 Specify both `-mcall-sysv' and `-mno-eabi' options.
16698 On System V.4 and embedded PowerPC systems compile code for the AIX
16702 On System V.4 and embedded PowerPC systems compile code for the
16703 Linux-based GNU system.
16706 On System V.4 and embedded PowerPC systems compile code for the
16707 FreeBSD operating system.
16710 On System V.4 and embedded PowerPC systems compile code for the
16711 NetBSD operating system.
16714 On System V.4 and embedded PowerPC systems compile code for the
16715 OpenBSD operating system.
16717 `-maix-struct-return'
16718 Return all structures in memory (as specified by the AIX ABI).
16720 `-msvr4-struct-return'
16721 Return structures smaller than 8 bytes in registers (as specified
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.
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
16735 Disable Book-E SPE ABI extensions for the current ABI.
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.
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.
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.
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.
16763 On embedded PowerPC systems, assume that the startup module is
16764 called `crt0.o' and the standard C libraries are `libmvme.a' and
16768 On embedded PowerPC systems, assume that the startup module is
16769 called `crt0.o' and the standard C libraries are `libads.a' and
16773 On embedded PowerPC systems, assume that the startup module is
16774 called `crt0.o' and the standard C libraries are `libyk.a' and
16778 On System V.4 and embedded PowerPC systems, specify that you are
16779 compiling for a VxWorks system.
16782 On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
16783 header to indicate that `eabi' extended relocations are used.
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.
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
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'
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'.
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'
16834 On embedded PowerPC systems, put all initialized global and static
16835 data in the `.data' section, and all uninitialized data in the
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.
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.
16853 On System V.4 and embedded PowerPC systems do (do not) emit
16854 register names in the assembly language output using symbolic
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)'.
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
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
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.
16887 In the future, GCC may ignore all longcall specifications when the
16888 linker is known to generate glue.
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.
16899 Adds support for multithreading with the "pthreads" library. This
16900 option sets flags for both the preprocessor and linker.
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.
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
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.
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.
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.
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.
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'.
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
16996 File: gcc.info, Node: RX Options, Next: S/390 and zSeries Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options
17001 These command-line options are defined for RX targets:
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'.
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.
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.
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.
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.
17029 The only difference between RX600 and RX610 is that the RX610 does
17030 not support the `MVTIPL' instruction.
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.
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
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.
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.
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.
17066 Use the simulator runtime. The default is to use the libgloss
17067 board-specific runtime.
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.
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.
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.
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.
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.
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.
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.
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.
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.
17133 By default this feature is not enabled. The default can be
17134 restored via the `-mno-pid' command-line option.
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.
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.
17153 File: gcc.info, Node: S/390 and zSeries Options, Next: Score Options, Prev: RX Options, Up: Submodel Options
17155 3.17.36 S/390 and zSeries Options
17156 ---------------------------------
17158 These are the `-m' options defined for the S/390 and zSeries
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
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.
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.
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.
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'.
17202 The default is to not maintain the backchain.
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.
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'.
17228 The default is to not use the packed stack layout.
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.
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'.
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'.
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
17264 Print (or do not print) additional debug information when
17265 compiling. The default is to not print debug information.
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'.
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'.
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.
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.
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
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.
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.
17325 File: gcc.info, Node: Score Options, Next: SH Options, Prev: S/390 and zSeries Options, Up: Submodel Options
17327 3.17.37 Score Options
17328 ---------------------
17330 These options are defined for Score implementations:
17333 Compile code for big-endian mode. This is the default.
17336 Compile code for little-endian mode.
17339 Disable generation of `bcnz' instructions.
17342 Enable generation of unaligned load and store instructions.
17345 Enable the use of multiply-accumulate instructions. Disabled by
17349 Specify the SCORE5 as the target architecture.
17352 Specify the SCORE5U of the target architecture.
17355 Specify the SCORE7 as the target architecture. This is the default.
17358 Specify the SCORE7D as the target architecture.
17361 File: gcc.info, Node: SH Options, Next: Solaris 2 Options, Prev: Score Options, Up: Submodel Options
17366 These `-m' options are defined for the SH implementations:
17369 Generate code for the SH1.
17372 Generate code for the SH2.
17375 Generate code for the SH2e.
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.
17382 Generate code for the SH2a-FPU, in such a way that no
17383 double-precision floating-point operations are used.
17386 Generate code for the SH2a-FPU assuming the floating-point unit is
17387 in single-precision mode by default.
17390 Generate code for the SH2a-FPU assuming the floating-point unit is
17391 in double-precision mode by default.
17394 Generate code for the SH3.
17397 Generate code for the SH3e.
17400 Generate code for the SH4 without a floating-point unit.
17403 Generate code for the SH4 with a floating-point unit that only
17404 supports single-precision arithmetic.
17407 Generate code for the SH4 assuming the floating-point unit is in
17408 single-precision mode by default.
17411 Generate code for the SH4.
17414 Generate code for the SH4al-dsp, or for a SH4a in such a way that
17415 the floating-point unit is not used.
17418 Generate code for the SH4a, in such a way that no double-precision
17419 floating-point operations are used.
17422 Generate code for the SH4a assuming the floating-point unit is in
17423 single-precision mode by default.
17426 Generate code for the SH4a.
17429 Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to
17430 the assembler. GCC doesn't generate any DSP instructions at the
17434 Compile code for the processor in big-endian mode.
17437 Compile code for the processor in little-endian mode.
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'.
17445 Shorten some address references at link time, when possible; uses
17446 the linker option `-relax'.
17449 Use 32-bit offsets in `switch' tables. The default is to use
17453 Enable the use of bit manipulation instructions on SH2A.
17456 Enable the use of the instruction `fmovd'. Check `-mdalign' for
17457 alignment constraints.
17460 Comply with the calling conventions defined by Renesas.
17463 Comply with the calling conventions defined by 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.
17471 Mark the `MAC' register as call-clobbered, even if `-mhitachi' is
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'.
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.
17497 Dump instruction size and location in the assembly code.
17500 This option is deprecated. It pads structures to multiple of 4
17501 bytes, which is incompatible with the SH ABI.
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:
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*'.
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'
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
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*.
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.
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.
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
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.
17582 Optimize for space instead of speed. Implied by `-Os'.
17585 When generating position-independent code, emit function calls
17586 using the Global Offset Table instead of the Procedure Linkage
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*'.
17595 Set the cost to assume for a multiply insn.
17598 Set the division strategy to be used for integer division
17599 operations. For SHmedia STRATEGY can be one of:
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.
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.
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.
17625 Calls a library function that usually implements the
17626 `inv:minlat' strategy. This gives high code density for
17627 `m5-*media-nofpu' compilations.
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.
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
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
17660 For targets other than SHmedia STRATEGY can be one of:
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.
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'.
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'.
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.
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.
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.
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.
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'.
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.
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
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
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'.
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.
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'.
17771 Enable the `cbranchdi4' instruction pattern.
17774 Emit the `cmpeqdi_t' instruction pattern even when `-mcbranchdi'
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'.
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.
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.
17806 Prefer zero-displacement conditional branches for conditional move
17807 instruction patterns. This can result in faster code on the SH4
17812 File: gcc.info, Node: Solaris 2 Options, Next: SPARC Options, Prev: SH Options, Up: Submodel Options
17814 3.17.39 Solaris 2 Options
17815 -------------------------
17817 These `-m' options are supported on Solaris 2:
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
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'.
17833 These switches are supported in addition to the above on Solaris 2:
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.
17842 This is a synonym for `-pthreads'.
17845 File: gcc.info, Node: SPARC Options, Next: SPU Options, Prev: Solaris 2 Options, Up: Submodel Options
17847 3.17.40 SPARC Options
17848 ---------------------
17850 These `-m' options are supported on the SPARC:
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.
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.
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
17871 With `-mno-flat' (the default), the compiler generates save/restore
17872 instructions (except for leaf functions). This is the normal
17877 Generate output containing floating-point instructions. This is
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.
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
17897 `-mhard-quad-float'
17898 Generate output containing quad-word (long double) floating-point
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.
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.
17914 `-mno-unaligned-doubles'
17915 `-munaligned-doubles'
17916 Assume that doubles have 8-byte alignment. This is the default.
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.
17926 `-mno-faster-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.
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'.
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
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'.
17954 Here is a list of each supported architecture and their supported
17961 supersparc, hypersparc, leon
17964 f930, f934, sparclite86x
17970 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
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.
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
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.
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.
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.
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.
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.
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.
18038 With `-mvis', GCC generates code that takes advantage of the
18039 UltraSPARC Visual Instruction Set extensions. The default is
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'
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'.
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.
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.
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.
18080 Enable the documented workaround for the single erratum of the
18081 Atmel AT697F processor (which corresponds to erratum #13 of the
18084 These `-m' options are supported in addition to the above on SPARC-V9
18085 processors in 64-bit environments:
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.
18094 Set the code model to one of
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.
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.
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.
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
18121 `-mmemory-model=MEM-MODEL'
18122 Set the memory model in force on the processor to one of
18125 The default memory model for the processor and operating
18129 Relaxed Memory Order
18132 Partial Store Order
18138 Sequential Consistency
18140 These memory models are formally defined in Appendix D of the
18141 Sparc V9 architecture manual, as set in the processor's
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.
18152 File: gcc.info, Node: SPU Options, Next: System V Options, Prev: SPARC Options, Up: Submodel Options
18154 3.17.41 SPU Options
18155 -------------------
18157 These `-m' options are supported on the SPU:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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'.
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.
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.
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.
18264 File: gcc.info, Node: System V Options, Next: TILE-Gx Options, Prev: SPU Options, Up: Submodel Options
18266 3.17.42 Options for System V
18267 ----------------------------
18269 These additional options are available on System V Release 4 for
18270 compatibility with other compilers on those systems:
18273 Create a shared object. It is recommended that `-symbolic' or
18274 `-shared' be used instead.
18277 Identify the versions of each tool used by the compiler, in a
18278 `.ident' assembler directive in the output.
18281 Refrain from adding `.ident' directives to the output file (this is
18285 Search the directories DIRS, and no others, for libraries
18286 specified with `-l'.
18289 Look in the directory DIR to find the M4 preprocessor. The
18290 assembler uses this option.
18293 File: gcc.info, Node: TILE-Gx Options, Next: TILEPro Options, Prev: System V Options, Up: Submodel Options
18295 3.17.43 TILE-Gx Options
18296 -----------------------
18298 These `-m' options are supported on the TILE-Gx:
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.
18306 Generate code for the large model. There is no limitation on call
18307 distance, pc-relative addresses, or absolute addresses.
18310 Selects the type of CPU to be targeted. Currently the only
18311 supported type is `tilegx'.
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.
18320 File: gcc.info, Node: TILEPro Options, Next: V850 Options, Prev: TILE-Gx Options, Up: Submodel Options
18322 3.17.44 TILEPro Options
18323 -----------------------
18325 These `-m' options are supported on the TILEPro:
18328 Selects the type of CPU to be targeted. Currently the only
18329 supported type is `tilepro'.
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.
18337 File: gcc.info, Node: V850 Options, Next: VAX Options, Prev: TILEPro Options, Up: Submodel Options
18339 3.17.45 V850 Options
18340 --------------------
18342 These `-m' options are defined for V850 implementations:
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.
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.
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.
18366 Try to make the code as small as possible. At present, this just
18367 turns on the `-mep' and `-mprolog-function' options.
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
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.
18381 Put static or global variables whose size is N bytes or less into
18382 the first 32 kilobytes of memory.
18385 Specify that the target processor is the V850.
18388 Specify that the target processor is the V850E3V5. The
18389 preprocessor constant `__v850e3v5__' is defined if this option is
18393 Specify that the target processor is the V850E3V5. This is an
18394 alias for the `-mv850e3v5' option.
18397 Specify that the target processor is the V850E2V3. The
18398 preprocessor constant `__v850e2v3__' is defined if this option is
18402 Specify that the target processor is the V850E2. The preprocessor
18403 constant `__v850e2__' is defined if this option is used.
18406 Specify that the target processor is the V850E1. The preprocessor
18407 constants `__v850e1__' and `__v850e__' are defined if this option
18411 Specify that the target processor is the V850ES. This is an alias
18412 for the `-mv850e1' option.
18415 Specify that the target processor is the V850E. The preprocessor
18416 constant `__v850e__' is defined if this option is used.
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.
18423 The preprocessor constants `__v850' and `__v851__' are always
18424 defined, regardless of which processor variant is the target.
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
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.
18439 Pass on (or do not pass on) the `-mrelax' command line option to
18444 Disable (or re-enable) the generation of PC-relative jump
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__'
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.
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:
18466 * Integer sized structures and unions are returned via a memory
18467 pointer rather than a register.
18469 * Large structures and unions (more than 8 bytes in size) are
18472 * Functions are aligned to 16-bit boundaries.
18474 * The `-m8byte-align' command line option is supported.
18476 * The `-mdisable-callt' command line option is enabled by
18477 default. The `-mno-disable-callt' command line option is not
18480 When this version of the ABI is enabled the C preprocessor symbol
18481 `__V850_RH850_ABI__' is defined.
18484 Enables support for the old GCC version of the V850 ABI. With this
18485 version of the ABI the following rules apply:
18487 * Integer sized structures and unions are returned in register
18490 * Large structures and unions (more than 8 bytes in size) are
18491 passed by reference.
18493 * Functions are aligned to 32-bit boundaries, unless optimizing
18496 * The `-m8byte-align' command line option is not supported.
18498 * The `-mdisable-callt' command line option is supported but not
18499 enabled by default.
18501 When this version of the ABI is enabled the C preprocessor symbol
18502 `__V850_GCC_ABI__' is defined.
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.
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.
18517 This option causes r2 and r5 to be used in the code generated by
18518 the compiler. This setting is the default.
18521 This option causes r2 and r5 to be treated as fixed registers.
18525 File: gcc.info, Node: VAX Options, Next: VMS Options, Prev: V850 Options, Up: Submodel Options
18527 3.17.46 VAX Options
18528 -------------------
18530 These `-m' options are defined for the VAX:
18533 Do not output certain jump instructions (`aobleq' and so on) that
18534 the Unix assembler for the VAX cannot handle across long ranges.
18537 Do output those jump instructions, on the assumption that the GNU
18538 assembler is being used.
18541 Output code for G-format floating-point numbers instead of
18545 File: gcc.info, Node: VMS Options, Next: VxWorks Options, Prev: VAX Options, Up: Submodel Options
18547 3.17.47 VMS Options
18548 -------------------
18550 These `-m' options are defined for the VMS implementations:
18552 `-mvms-return-codes'
18553 Return VMS condition codes from `main'. The default is to return
18554 POSIX-style condition (e.g. error) codes.
18556 `-mdebug-main=PREFIX'
18557 Flag the first routine whose name starts with PREFIX as the main
18558 routine for the debugger.
18561 Default to 64-bit memory allocation routines.
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'.
18570 File: gcc.info, Node: VxWorks Options, Next: x86-64 Options, Prev: VMS Options, Up: Submodel Options
18572 3.17.48 VxWorks Options
18573 -----------------------
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.
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__'.
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.
18591 These options are passed down to the linker. They are defined for
18592 compatibility with Diab.
18595 Enable lazy binding of function calls. This option is equivalent
18596 to `-Wl,-z,now' and is defined for compatibility with Diab.
18599 Disable lazy binding of function calls. This option is the
18600 default and is defined for compatibility with Diab.
18603 File: gcc.info, Node: x86-64 Options, Next: Xstormy16 Options, Prev: VxWorks Options, Up: Submodel Options
18605 3.17.49 x86-64 Options
18606 ----------------------
18608 These are listed under *Note i386 and x86-64 Options::.
18611 File: gcc.info, Node: Xstormy16 Options, Next: Xtensa Options, Prev: x86-64 Options, Up: Submodel Options
18613 3.17.50 Xstormy16 Options
18614 -------------------------
18616 These options are defined for Xstormy16:
18619 Choose startup files and linker script suitable for the simulator.
18622 File: gcc.info, Node: Xtensa Options, Next: zSeries Options, Prev: Xstormy16 Options, Up: Submodel Options
18624 3.17.51 Xtensa Options
18625 ----------------------
18627 These options are supported for Xtensa targets:
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.
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.
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.
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.
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.
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.
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.
18709 File: gcc.info, Node: zSeries Options, Prev: Xtensa Options, Up: Submodel Options
18711 3.17.52 zSeries Options
18712 -----------------------
18714 These are listed under *Note S/390 and zSeries Options::.
18717 File: gcc.info, Node: Code Gen Options, Next: Environment Variables, Prev: Submodel Options, Up: Invoking GCC
18719 3.18 Options for Code Generation Conventions
18720 ============================================
18722 These machine-independent options control the interface conventions
18723 used in code generation.
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.
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.
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.
18768 if (*p == 10) // out of scope use of local1
18777 A(int k) : i(k), j(k) { }
18784 void foo(const A& ar)
18791 foo(A(10)); // temp object's lifetime ends when foo returns
18797 ap->i+= 10; // ap references out of scope temp whose space
18798 // is reused with a. What is the value of ap->i?
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.
18812 This option generates traps for signed overflow on addition,
18813 subtraction, multiplication operations.
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
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.
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
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.
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
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).
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).
18874 The precise convention for returning structures in memory depends
18875 on the target configuration macros.
18877 Short structures and unions are those whose size and alignment
18878 match that of some integer type.
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.
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'.
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
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.
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.
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
18914 Use the same size for `double' as for `float'.
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
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.
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
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.
18952 Ignore the `#ident' directive.
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.
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).
18967 `-fno-verbose-asm', the default, causes the extra information to
18968 be omitted and is useful when comparing two assembler files.
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.
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.)
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.
19000 When this flag is set, the macros `__pic__' and `__PIC__' are
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.
19009 Position-independent code requires special support, and therefore
19010 works only on certain machines.
19012 When this flag is set, the macros `__pic__' and `__PIC__' are
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
19022 `-fpie' and `-fPIE' both define the macros `__pie__' and
19023 `__PIE__'. The macros have the value 1 for `-fpie' and 2 for
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.
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).
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.
19043 This flag does not have a negative form, because it specifies a
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.
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.
19057 This flag does not have a negative form, because it specifies a
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.
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.
19071 A different sort of disaster results from the use of this flag for
19072 a register in which function values may be returned.
19074 This flag does not have a negative form, because it specifies a
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.
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.
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.)
19099 void __cyg_profile_func_enter (void *this_fn,
19101 void __cyg_profile_func_exit (void *this_fn,
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.
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
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).
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.
19136 -finstrument-functions-exclude-file-list=/bits/stl,include/sys
19138 excludes any inline function defined in files whose pathnames
19139 contain `/bits/stl' or `include/sys'.
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).
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
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
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
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'.
19176 Old-style checking is a generic mechanism that requires no specific
19177 target support in the compiler but comes with the following
19180 1. Modified allocation strategy for large objects: they are
19181 always allocated dynamically if their size exceeds a fixed
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.
19188 3. Inefficiency: because of both the modified allocation
19189 strategy and the generic implementation, code performance is
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.
19195 `-fstack-limit-register=REG'
19196 `-fstack-limit-symbol=SYM'
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.
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.
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.
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
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.
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.
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'.
19245 The default without `-fpic' is `initial-exec'; with `-fpic' the
19246 default is `global-dynamic'.
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.
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
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.
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.
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.
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.
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
19311 An overview of these techniques, their benefits and how to use them
19312 is at `http://gcc.gnu.org/wiki/Visibility'.
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
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.
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.
19340 The default value of this option is determined by the application
19341 binary interface for the target processor.
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.
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.
19354 File: gcc.info, Node: Environment Variables, Next: Precompiled Headers, Prev: Code Gen Options, Up: Invoking GCC
19356 3.19 Environment Variables Affecting GCC
19357 ========================================
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.
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.
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.
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.
19388 The `LC_MESSAGES' environment variable specifies the language to
19389 use in diagnostic messages.
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.
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
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.
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.
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.
19418 If GCC cannot find the subprogram using the specified prefix, it
19419 tries looking in the usual places for the subprogram.
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'
19426 Other prefixes specified with `-B' take precedence over this
19429 This prefix is also used for finding files such as `crt0.o' that
19430 are used for linking.
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.
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'.
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).
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:
19467 Recognize JIS characters.
19470 Recognize SJIS characters.
19473 Recognize EUCJP characters.
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.
19479 Some additional environment variables affect the behavior of the
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.
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.
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.
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'.
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
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.
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.
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::.
19532 File: gcc.info, Node: Precompiled Headers, Prev: Environment Variables, Up: Invoking GCC
19534 3.20 Using Precompiled Headers
19535 ==============================
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.
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
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.
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.
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.
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).
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
19585 There are many other possibilities, limited only by your imagination,
19586 good sense, and the constraints of your build system.
19588 A precompiled header file can be used only when these conditions apply:
19590 * Only one precompiled header can be used in a particular
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.
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.
19601 * The precompiled header file must have been produced by the same
19602 compiler binary as the current compilation is using.
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
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.
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
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.
19626 * Each of the following options must be the same when building and
19627 using the precompiled header:
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:
19638 -fmessage-length= -fpreprocessed -fsched-interblock
19639 -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous
19640 -fsched-verbose=NUMBER -fschedule-insns -fvisibility=
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
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.
19657 File: gcc.info, Node: C Implementation, Next: C++ Implementation, Prev: Invoking GCC, Up: Top
19659 4 C Implementation-defined behavior
19660 ***********************************
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
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.
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::
19699 File: gcc.info, Node: Translation implementation, Next: Environment implementation, Up: C Implementation
19704 * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99
19707 Diagnostics consist of all the output sent to stderr by GCC.
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).'
19713 *Note Implementation-defined behavior: (cpp)Implementation-defined
19718 File: gcc.info, Node: Environment implementation, Next: Identifiers implementation, Prev: Translation implementation, Up: C Implementation
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.
19726 * `The mapping between physical source file multibyte characters and
19727 the source character set in translation phase 1 (C90 and C99
19730 *Note Implementation-defined behavior: (cpp)Implementation-defined
19735 File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation
19740 * `Which additional multibyte characters may appear in identifiers
19741 and their correspondence to universal character names (C99 6.4.2).'
19743 *Note Implementation-defined behavior: (cpp)Implementation-defined
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).'
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.
19753 * `Whether case distinctions are significant in an identifier with
19754 external linkage (C90 6.1.2).'
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.
19762 File: gcc.info, Node: Characters implementation, Next: Integers implementation, Prev: Identifiers implementation, Up: C Implementation
19767 * `The number of bits in a byte (C90 3.4, C99 3.6).'
19771 * `The values of the members of the execution character set (C90 and
19776 * `The unique value of the member of the execution character set
19777 produced for each of the standard alphabetic escape sequences (C90
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).'
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).'
19792 Determined by ABI. The options `-funsigned-char' and
19793 `-fsigned-char' change the default. *Note Options Controlling C
19794 Dialect: C Dialect Options.
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).'
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,
19807 *Note Implementation-defined behavior: (cpp)Implementation-defined
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).'
19815 *Note Implementation-defined behavior: (cpp)Implementation-defined
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).'
19823 *Note Implementation-defined behavior: (cpp)Implementation-defined
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).'
19829 *Note Implementation-defined behavior: (cpp)Implementation-defined
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).'
19836 *Note Implementation-defined behavior: (cpp)Implementation-defined
19840 File: gcc.info, Node: Integers implementation, Next: Floating point implementation, Prev: Characters implementation, Up: C Implementation
19845 * `Any extended integer types that exist in the implementation (C99
19848 GCC does not support any extended integer types.
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
19855 GCC supports only two's complement integer types, and all bit
19856 patterns are ordinary values.
19858 * `The rank of any extended integer type relative to another extended
19859 integer type with the same precision (C99 6.3.1.1).'
19861 GCC does not support any extended integer types.
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).'
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.
19870 * `The results of some bitwise operations on signed integers (C90
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.
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.
19881 * `The sign of the remainder on integer division (C90 6.3.5).'
19883 GCC always follows the C99 requirement that the result of division
19884 is truncated towards zero.
19888 File: gcc.info, Node: Floating point implementation, Next: Arrays and pointers implementation, Prev: Integers implementation, Up: C Implementation
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).'
19897 The accuracy is unknown.
19899 * `The rounding behaviors characterized by non-standard values of
19900 `FLT_ROUNDS' (C90 and C99 5.2.4.2.2).'
19902 GCC does not use such values.
19904 * `The evaluation methods characterized by non-standard negative
19905 values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).'
19907 GCC does not use such values.
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).'
19913 C99 Annex F is followed.
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
19919 C99 Annex F is followed.
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).'
19926 C99 Annex F is followed.
19928 * `Whether and how floating expressions are contracted when not
19929 disallowed by the `FP_CONTRACT' pragma (C99 6.5).'
19931 Expressions are currently only contracted if
19932 `-funsafe-math-optimizations' or `-ffast-math' are used. This is
19935 * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).'
19937 This pragma is not implemented, but the default is to "off" unless
19938 `-frounding-math' is used in which case it is "on".
19940 * `Additional floating-point exceptions, rounding modes,
19941 environments, and classifications, and their macro names (C99 7.6,
19944 This is dependent on the implementation of the C library, and is
19945 not defined by GCC itself.
19947 * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).'
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.
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).'
19957 This is dependent on the implementation of the C library, and is
19958 not defined by GCC itself.
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).'
19964 This is dependent on the implementation of the C library, and is
19965 not defined by GCC itself.
19969 File: gcc.info, Node: Arrays and pointers implementation, Next: Hints implementation, Prev: Floating point implementation, Up: C Implementation
19971 4.7 Arrays and pointers
19972 =======================
19974 * `The result of converting a pointer to an integer or vice versa
19975 (C90 6.3.4, C99 6.3.2.3).'
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.
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.
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.
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).'
19997 The value is as specified in the standard and the type is
19998 determined by the ABI.
20001 ---------- Footnotes ----------
20003 (1) Future versions of GCC may zero-extend, or use a target-defined
20004 `ptr_extend' pattern. Do not rely on sign extension.
20007 File: gcc.info, Node: Hints implementation, Next: Structures unions enumerations and bit-fields implementation, Prev: Arrays and pointers implementation, Up: C Implementation
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).'
20015 The `register' specifier affects code generation only in these
20018 * When used as part of the register variable extension, see
20019 *note Explicit Reg Vars::.
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.
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'.
20032 * `The extent to which suggestions made by using the inline function
20033 specifier are effective (C99 6.7.4).'
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.
20042 File: gcc.info, Node: Structures unions enumerations and bit-fields implementation, Next: Qualifiers implementation, Prev: Hints implementation, Up: C Implementation
20044 4.9 Structures, unions, enumerations, and bit-fields
20045 ====================================================
20047 * `A member of a union object is accessed using a member of a
20048 different type (C90 6.3.2.3).'
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.
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).'
20058 By default it is treated as `signed int' but this may be changed
20059 by the `-funsigned-bitfields' option.
20061 * `Allowable bit-field types other than `_Bool', `signed int', and
20062 `unsigned int' (C99 6.7.2.1).'
20064 No other types are permitted in strictly conforming mode.
20066 * `Whether a bit-field can straddle a storage-unit boundary (C90
20067 6.5.2.1, C99 6.7.2.1).'
20071 * `The order of allocation of bit-fields within a unit (C90 6.5.2.1,
20076 * `The alignment of non-bit-field members of structures (C90
20077 6.5.2.1, C99 6.7.2.1).'
20081 * `The integer type compatible with each enumerated type (C90
20082 6.5.2.2, C99 6.7.2.2).'
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.
20091 On some targets, `-fshort-enums' is the default; this is
20092 determined by the ABI.
20096 File: gcc.info, Node: Qualifiers implementation, Next: Declarators implementation, Prev: Structures unions enumerations and bit-fields implementation, Up: C Implementation
20101 * `What constitutes an access to an object that has
20102 volatile-qualified type (C90 6.5.3, C99 6.7.3).'
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
20108 volatile int *dst = SOMEVALUE;
20109 volatile int *src = SOMEOTHERVALUE;
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'.
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
20121 volatile int *src = SOMEVALUE;
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.
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.
20138 File: gcc.info, Node: Declarators implementation, Next: Statements implementation, Prev: Qualifiers implementation, Up: C Implementation
20143 * `The maximum number of declarators that may modify an arithmetic,
20144 structure or union type (C90 6.5.4).'
20146 GCC is only limited by available memory.
20150 File: gcc.info, Node: Statements implementation, Next: Preprocessing directives implementation, Prev: Declarators implementation, Up: C Implementation
20155 * `The maximum number of `case' values in a `switch' statement (C90
20158 GCC is only limited by available memory.
20162 File: gcc.info, Node: Preprocessing directives implementation, Next: Library functions implementation, Prev: Statements implementation, Up: C Implementation
20164 4.13 Preprocessing directives
20165 =============================
20167 *Note Implementation-defined behavior: (cpp)Implementation-defined
20168 behavior, for details of these aspects of implementation-defined
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).'
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
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).'
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).'
20187 * `How the named source file is searched for in an included `""'
20188 delimited header (C90 6.8.2, C99 6.10.2).'
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).'
20194 * `The nesting limit for `#include' processing (C90 6.8.2, C99
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).'
20201 * `The behavior on each recognized non-`STDC #pragma' directive (C90
20202 6.8.6, C99 6.10.6).'
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.
20208 * `The definitions for `__DATE__' and `__TIME__' when respectively,
20209 the date and time of translation are not available (C90 6.8.8, C99
20214 File: gcc.info, Node: Library functions implementation, Next: Architecture implementation, Prev: Preprocessing directives implementation, Up: C Implementation
20216 4.14 Library functions
20217 ======================
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.
20222 * `The null pointer constant to which the macro `NULL' expands (C90
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.
20231 File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation
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).'
20242 * `The number, order, and encoding of bytes in any object (when not
20243 explicitly specified in this International Standard) (C99
20248 * `The value of the result of the `sizeof' operator (C90 6.3.3.4,
20255 File: gcc.info, Node: Locale-specific behavior implementation, Prev: Architecture implementation, Up: C Implementation
20257 4.16 Locale-specific behavior
20258 =============================
20260 The behavior of these points are dependent on the implementation of the
20261 C library, and are not defined by GCC itself.
20264 File: gcc.info, Node: C++ Implementation, Next: C Extensions, Prev: C Implementation, Up: Top
20266 5 C++ Implementation-defined behavior
20267 *************************************
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.
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.
20289 * Conditionally-supported behavior::
20290 * Exception handling::
20293 File: gcc.info, Node: Conditionally-supported behavior, Next: Exception handling, Up: C++ Implementation
20295 5.1 Conditionally-supported behavior
20296 ====================================
20298 `Each implementation shall include documentation that identifies all
20299 conditionally-supported constructs that it does not support (C++0x
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).'
20305 Such argument passing is not supported.
20309 File: gcc.info, Node: Exception handling, Prev: Conditionally-supported behavior, Up: C++ Implementation
20311 5.2 Exception handling
20312 ======================
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).'
20318 The stack is not unwound before std::terminate is called.
20322 File: gcc.info, Node: C Extensions, Next: C++ Extensions, Prev: C++ Implementation, Up: Top
20324 6 Extensions to the C Language Family
20325 *************************************
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.
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++.
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++.
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
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
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.
20410 File: gcc.info, Node: Statement Exprs, Next: Local Labels, Up: C Extensions
20412 6.1 Statements and Declarations in Expressions
20413 ==============================================
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.
20419 Recall that a compound statement is a sequence of statements surrounded
20420 by braces; in this construct, parentheses go around the braces. For
20423 ({ int y = foo (); int z;
20428 is a valid (though slightly more complex than necessary) expression for
20429 the absolute value of `foo ()'.
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.)
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
20442 #define max(a,b) ((a) > (b) ? (a) : (b))
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
20449 #define maxint(a,b) \
20450 ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
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.
20456 If you don't know the type of the operand, you can still do this, but
20457 you must use `typeof' (*note Typeof::).
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
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'.
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,
20479 #define macro(a) ({__typeof__(a) b = (a); b + 3; })
20480 template<typename T> T function(T a) { T b = a; return b + 3; }
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
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
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,
20512 foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
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
20519 File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions
20521 6.2 Locally Declared Labels
20522 ===========================
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.
20529 A local label declaration looks like this:
20535 __label__ LABEL1, LABEL2, /* ... */;
20537 Local label declarations must come at the beginning of the block,
20538 before any ordinary declarations or statements.
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.
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:
20551 #define SEARCH(value, array, target) \
20554 typeof (target) _SEARCH_target = (target); \
20555 typeof (*(array)) *_SEARCH_array = (array); \
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; } \
20566 This could also be written using a statement expression:
20568 #define SEARCH(array, target) \
20571 typeof (target) _SEARCH_target = (target); \
20572 typeof (*(array)) *_SEARCH_array = (array); \
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; } \
20584 Local label declarations also make the labels they declare visible to
20585 nested functions, if there are any. *Note Nested Functions::, for
20589 File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions
20591 6.3 Labels as Values
20592 ====================
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:
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,
20608 Any expression of type `void *' is allowed.
20610 One way of using these constants is in initializing a static array that
20611 serves as a jump table:
20613 static void *array[] = { &&foo, &&bar, &&hack };
20615 Then you can select a label with indexing, like this:
20619 Note that this does not check whether the subscript is in bounds--array
20620 indexing in C never does that.
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.
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.
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.
20636 An alternate way to write the above example is
20638 static const int array[] = { &&foo - &&foo, &&bar - &&foo,
20640 goto *(&&foo + array[i]);
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.
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.
20653 ---------- Footnotes ----------
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.
20660 File: gcc.info, Node: Nested Functions, Next: Constructing Calls, Prev: Labels as Values, Up: C Extensions
20662 6.4 Nested Functions
20663 ====================
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++.
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
20673 foo (double a, double b)
20675 double square (double z) { return z * z; }
20677 return square (a) + square (b);
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':
20685 bar (int *array, int offset, int size)
20687 int access (int *array, int index)
20688 { return array[index + offset]; }
20691 for (i = 0; i < size; i++)
20692 /* ... */ access (array, i) /* ... */
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.
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
20703 hack (int *array, int size)
20705 void store (int index, int value)
20706 { array[index] = value; }
20708 intermediate (store, size);
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
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.
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).
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:
20735 bar (int *array, int offset, int size)
20738 int access (int *array, int index)
20742 return array[index + offset];
20746 for (i = 0; i < size; i++)
20747 /* ... */ access (array, i) /* ... */
20751 /* Control comes here from `access'
20752 if it detects an error. */
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).
20762 bar (int *array, int offset, int size)
20765 auto int access (int *, int);
20767 int access (int *array, int index)
20771 return array[index + offset];
20777 File: gcc.info, Node: Constructing Calls, Next: Typeof, Prev: Nested Functions, Up: C Extensions
20779 6.5 Constructing Function Calls
20780 ===============================
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.
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).
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.
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
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.
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.
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.
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.
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
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'.
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, ...)
20842 int r = fprintf (f, "myprintf: ");
20845 int s = fprintf (f, format, __builtin_va_arg_pack ());
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, ...)
20863 if (__builtin_va_arg_pack_len () > 1)
20864 warn_open_too_many_arguments ();
20866 if (__builtin_constant_p (oflag))
20868 if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
20870 warn_open_missing_mode ();
20871 return __open_2 (path, oflag);
20873 return open (path, oflag, __builtin_va_arg_pack ());
20876 if (__builtin_va_arg_pack_len () < 1)
20877 return __open_2 (path, oflag);
20879 return open (path, oflag, __builtin_va_arg_pack ());
20884 File: gcc.info, Node: Typeof, Next: Conditionals, Prev: Constructing Calls, Up: C Extensions
20886 6.6 Referring to a Type with `typeof'
20887 =====================================
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'.
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:
20898 This assumes that `x' is an array of pointers to functions; the type
20899 described is that of the values of the functions.
20901 Here is an example with a typename as the argument:
20905 Here the type described is that of pointers to `int'.
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
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'.
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
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:
20925 ({ typeof (a) _a = (a); \
20926 typeof (b) _b = (b); \
20927 _a > _b ? _a : _b; })
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.
20936 Some more examples of the use of `typeof':
20938 * This declares `y' with the type of what `x' points to.
20942 * This declares `y' as an array of such values.
20946 * This declares `y' as an array of pointers to characters:
20948 typeof (typeof (char *)[4]) y;
20950 It is equivalent to the following traditional C declaration:
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:
20957 #define pointer(T) typeof(T *)
20958 #define array(T, N) typeof(T [N])
20960 Now the declaration can be rewritten this way:
20962 array (pointer (char), 4) y;
20964 Thus, `array (pointer (char), 4)' is the type of arrays of 4
20965 pointers to `char'.
20967 _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more
20968 limited extension that permitted one to write
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':
20977 typedef typeof(EXPR) T;
20979 This works with all versions of GCC.
20982 File: gcc.info, Node: Conditionals, Next: __int128, Prev: Typeof, Up: C Extensions
20984 6.7 Conditionals with Omitted Operands
20985 ======================================
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
20991 Therefore, the expression
20995 has the value of `x' if that is nonzero; otherwise, the value of `y'.
20997 This example is perfectly equivalent to
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.
21009 File: gcc.info, Node: __int128, Next: Long Long, Prev: Conditionals, Up: C Extensions
21011 6.8 128-bit integers
21012 ====================
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.
21022 File: gcc.info, Node: Long Long, Next: Complex, Prev: __int128, Up: C Extensions
21024 6.9 Double-Word Integers
21025 ========================
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
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.
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.
21052 File: gcc.info, Node: Complex, Next: Floating Types, Prev: Long Long, Up: C Extensions
21054 6.10 Complex Numbers
21055 ====================
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.
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.
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.
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.
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
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.
21102 File: gcc.info, Node: Floating Types, Next: Half-Precision, Prev: Complex, Up: C Extensions
21104 6.11 Additional Floating Types
21105 ==============================
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:
21117 typedef _Complex float __attribute__((mode(TC))) _Complex128;
21118 typedef _Complex float __attribute__((mode(XC))) _Complex80;
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.
21125 File: gcc.info, Node: Half-Precision, Next: Decimal Float, Prev: Floating Types, Up: C Extensions
21127 6.12 Half-Precision Floating Point
21128 ==================================
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.
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.
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
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.
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
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.
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.
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.
21172 File: gcc.info, Node: Decimal Float, Next: Hex Floats, Prev: Half-Precision, Up: C Extensions
21174 6.13 Decimal Floating Types
21175 ===========================
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.
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.
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'
21195 GCC support of decimal float as specified by the draft technical report
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
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.
21209 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by
21210 the DWARF 2 debug information format.
21213 File: gcc.info, Node: Hex Floats, Next: Fixed-Point, Prev: Decimal Float, Up: C Extensions
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'.
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'.
21235 File: gcc.info, Node: Fixed-Point, Next: Named Address Spaces, Prev: Hex Floats, Up: C Extensions
21237 6.15 Fixed-Point Types
21238 ======================
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
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'.
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.
21261 Support for fixed-point types includes:
21262 * prefix and postfix increment and decrement operators (`++', `--')
21264 * unary arithmetic operators (`+', `-', `!')
21266 * binary arithmetic operators (`+', `-', `*', `/')
21268 * binary shift operators (`<<', `>>')
21270 * relational operators (`<', `<=', `>=', `>')
21272 * equality operators (`==', `!=')
21274 * assignment operators (`+=', `-=', `*=', `/=', `<<=', `>>=')
21276 * conversions to and from integer, floating-point, or fixed-point
21279 Use a suffix in a fixed-point literal constant:
21280 * `hr' or `HR' for `short _Fract' and `_Sat short _Fract'
21282 * `r' or `R' for `_Fract' and `_Sat _Fract'
21284 * `lr' or `LR' for `long _Fract' and `_Sat long _Fract'
21286 * `llr' or `LLR' for `long long _Fract' and `_Sat long long _Fract'
21288 * `uhr' or `UHR' for `unsigned short _Fract' and `_Sat unsigned
21291 * `ur' or `UR' for `unsigned _Fract' and `_Sat unsigned _Fract'
21293 * `ulr' or `ULR' for `unsigned long _Fract' and `_Sat unsigned long
21296 * `ullr' or `ULLR' for `unsigned long long _Fract' and `_Sat
21297 unsigned long long _Fract'
21299 * `hk' or `HK' for `short _Accum' and `_Sat short _Accum'
21301 * `k' or `K' for `_Accum' and `_Sat _Accum'
21303 * `lk' or `LK' for `long _Accum' and `_Sat long _Accum'
21305 * `llk' or `LLK' for `long long _Accum' and `_Sat long long _Accum'
21307 * `uhk' or `UHK' for `unsigned short _Accum' and `_Sat unsigned
21310 * `uk' or `UK' for `unsigned _Accum' and `_Sat unsigned _Accum'
21312 * `ulk' or `ULK' for `unsigned long _Accum' and `_Sat unsigned long
21315 * `ullk' or `ULLK' for `unsigned long long _Accum' and `_Sat
21316 unsigned long long _Accum'
21318 GCC support of fixed-point types as specified by the draft technical
21319 report is incomplete:
21321 * Pragmas to control overflow and rounding behaviors are not
21324 Fixed-point types are supported by the DWARF 2 debug information
21328 File: gcc.info, Node: Named Address Spaces, Next: Zero Length, Prev: Fixed-Point, Up: C Extensions
21330 6.16 Named Address Spaces
21331 =========================
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.
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
21344 6.16.1 AVR Named Address Spaces
21345 -------------------------------
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
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.
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.
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.
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.
21380 Objects in this address space are located in `.progmemx.data'.
21384 char my_read (const __flash char ** p)
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
21394 /* Locate array[] in flash memory */
21395 const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 };
21401 /* Return 17 by reading from flash memory */
21402 return array[array[i]];
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
21411 const __flash int var = 1;
21413 int read_var (void)
21418 #include <avr/pgmspace.h> /* From AVR-LibC */
21420 const int var PROGMEM = 1;
21422 int read_var (void)
21424 return (int) pgm_read_word (&var);
21426 #endif /* __FLASH */
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'.
21434 Limitations and caveats
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'.
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.
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.
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;
21459 Such code requires at least binutils 2.23, see
21460 PR13503 (http://sourceware.org/PR13503).
21463 6.16.2 M32C Named Address Spaces
21464 --------------------------------
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.
21471 6.16.3 RL78 Named Address Spaces
21472 --------------------------------
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.
21479 6.16.4 SPU Named Address Spaces
21480 -------------------------------
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
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.
21493 File: gcc.info, Node: Zero Length, Next: Empty Structures, Prev: Named Address Spaces, Up: C Extensions
21495 6.17 Arrays of Length Zero
21496 ==========================
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:
21507 struct line *thisline = (struct line *)
21508 malloc (sizeof (struct line) + this_length);
21509 thisline->length = this_length;
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'.
21514 In ISO C99, you would use a "flexible array member", which is slightly
21515 different in syntax and semantics:
21517 * Flexible array members are written as `contents[]' without the `0'.
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.
21523 * Flexible array members may only appear as the last member of a
21524 `struct' that is otherwise non-empty.
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.)
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.
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
21548 } f1 = { 1, { 2, 3, 4 } };
21551 struct f1 f1; int data[3];
21552 } f2 = { { 1 }, { 2, 3, 4 } };
21554 The convenience of this extension is that `f1' has the desired type,
21555 eliminating the need to consistently refer to `f2.f1'.
21557 This has symmetry with normal static arrays, in that an array of
21558 unknown size is also written with `[]'.
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:
21567 struct foo { int x; int y[]; };
21568 struct bar { struct foo z; };
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.
21576 File: gcc.info, Node: Empty Structures, Next: Variable Length, Prev: Zero Length, Up: C Extensions
21578 6.18 Structures With No Members
21579 ===============================
21581 GCC permits a C structure to have no members:
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
21591 File: gcc.info, Node: Variable Length, Next: Variadic Macros, Prev: Empty Structures, Up: C Extensions
21593 6.19 Arrays of Variable Length
21594 ==============================
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:
21604 concat_fopen (char *s1, char *s2, char *mode)
21606 char str[strlen (s1) + strlen (s2) + 1];
21609 return fopen (str, mode);
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
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.
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'.)
21628 You can also use variable-length arrays as arguments to functions:
21631 tester (int len, char data[len][len])
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
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.
21644 tester (int len; char data[len][len], int len)
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.
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.
21661 File: gcc.info, Node: Variadic Macros, Next: Escaped Newlines, Prev: Variable Length, Up: C Extensions
21663 6.20 Macros with a Variable Number of Arguments.
21664 ================================================
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
21671 #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
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.
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:
21683 #define debug(format, args...) fprintf (stderr, format, args)
21685 This is in all ways equivalent to the ISO C example above, but arguably
21686 more readable and descriptive.
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.
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
21696 debug ("A message")
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
21703 To help solve this problem, CPP behaves specially for variable
21704 arguments used with the token paste operator, `##'. If instead you
21707 #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
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.
21717 File: gcc.info, Node: Escaped Newlines, Next: Subscripting, Prev: Variadic Macros, Up: C Extensions
21719 6.21 Slightly Looser Rules for Escaped Newlines
21720 ===============================================
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.
21734 File: gcc.info, Node: Subscripting, Next: Pointer Arith, Prev: Escaped Newlines, Up: C Extensions
21736 6.22 Non-Lvalue Arrays May Have Subscripts
21737 ==========================================
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:
21746 struct foo {int a[4];};
21752 return f().a[index];
21756 File: gcc.info, Node: Pointer Arith, Next: Initializers, Prev: Subscripting, Up: C Extensions
21758 6.23 Arithmetic on `void'- and Function-Pointers
21759 ================================================
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.
21765 A consequence of this is that `sizeof' is also allowed on `void' and
21766 on function types, and returns 1.
21768 The option `-Wpointer-arith' requests a warning if these extensions
21772 File: gcc.info, Node: Initializers, Next: Compound Literals, Prev: Pointer Arith, Up: C Extensions
21774 6.24 Non-Constant Initializers
21775 ==============================
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:
21782 foo (float f, float g)
21784 float beat_freqs[2] = { f-g, f+g };
21789 File: gcc.info, Node: Compound Literals, Next: Designated Inits, Prev: Initializers, Up: C Extensions
21791 6.25 Compound Literals
21792 ======================
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
21801 Usually, the specified type is a structure. Assume that `struct foo'
21802 and `structure' are declared as shown:
21804 struct foo {int a; char b[2];} structure;
21806 Here is an example of constructing a `struct foo' with a compound
21809 structure = ((struct foo) {x + y, 'a', 0});
21811 This is equivalent to writing the following:
21814 struct foo temp = {x + y, 'a', 0};
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:
21825 char **foo = (char *[]) { "x", "y", "z" };
21827 Compound literals for scalar types and union types are also allowed,
21828 but then the compound literal is equivalent to a cast.
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.
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};
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};
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.
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++.
21868 File: gcc.info, Node: Designated Inits, Next: Case Ranges, Prev: Compound Literals, Up: C Extensions
21870 6.26 Designated Initializers
21871 ============================
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.
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
21882 To specify an array index, write `[INDEX] =' before the element value.
21885 int a[6] = { [4] = 29, [2] = 15 };
21889 int a[6] = { 0, 0, 15, 0, 29, 0 };
21891 The index values must be constant expressions, even if the array being
21892 initialized is automatic.
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
21898 To initialize a range of elements to the same value, write `[FIRST ...
21899 LAST] = VALUE'. This is a GNU extension. For example,
21901 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
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.
21906 Note that the length of the array is the highest value specified plus
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,
21913 struct point { int x, y; };
21915 the following initialization
21917 struct point p = { .y = yvalue, .x = xvalue };
21921 struct point p = { xvalue, yvalue };
21923 Another syntax that has the same meaning, obsolete since GCC 2.5, is
21924 `FIELDNAME:', as shown here:
21926 struct point p = { y: yvalue, x: xvalue };
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
21933 union foo { int i; double d; };
21935 union foo f = { .d = 4 };
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
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,
21947 int a[6] = { [1] = v1, v2, [4] = v4 };
21951 int a[6] = { 0, v1, v2, 0, v4, 0 };
21953 Labeling the elements of an array initializer is especially useful
21954 when the indices are characters or belong to an `enum' type. For
21957 int whitespace[256]
21958 = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
21959 ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
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'
21967 struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
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.
21975 File: gcc.info, Node: Case Ranges, Next: Cast to Union, Prev: Designated Inits, Up: C Extensions
21980 You can specify a range of consecutive values in a single `case' label,
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.
21988 This feature is especially useful for ranges of ASCII character codes:
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
22003 File: gcc.info, Node: Cast to Union, Next: Mixed Declarations, Prev: Case Ranges, Up: C Extensions
22005 6.28 Cast to a Union Type
22006 =========================
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::.)
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:
22017 union foo { int i; double d; };
22021 both `x' and `y' can be cast to type `union foo'.
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:
22028 u = (union foo) x == u.i = x
22029 u = (union foo) y == u.d = y
22031 You can also use the union cast as a function argument:
22033 void hack (union foo);
22035 hack ((union foo) x);
22038 File: gcc.info, Node: Mixed Declarations, Next: Function Attributes, Prev: Cast to Union, Up: C Extensions
22040 6.29 Mixed Declarations and Code
22041 ================================
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:
22052 Each identifier is visible from where it is declared until the end of
22053 the enclosing block.
22056 File: gcc.info, Node: Function Attributes, Next: Attribute Syntax, Prev: Mixed Declarations, Up: C Extensions
22058 6.30 Declaring Attributes of Functions
22059 ======================================
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.
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::).
22081 GCC plugins may provide their own attributes.
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'.
22088 *Note Attribute Syntax::, for details of the exact syntax for using
22092 The `alias' attribute causes the declaration to be emitted as an
22093 alias for another symbol, which must be specified. For instance,
22095 void __f () { /* Do something. */; }
22096 void f () __attribute__ ((weak, alias ("__f")));
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.
22102 Not all target machines support this attribute.
22104 `aligned (ALIGNMENT)'
22105 This attribute specifies a minimum alignment for the function,
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
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.
22121 The `aligned' attribute can also be used for variables and fields
22122 (*note Variable Attributes::.)
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'.
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.
22138 void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2)))
22139 void my_realloc(void*, size_t) __attribute__((alloc_size(2)))
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.
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.
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
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
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.
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.
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
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
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.
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
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.
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.
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
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.
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
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:
22254 typedef int intfn ();
22256 extern const intfn square;
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
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.
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++
22284 These attributes are not currently implemented for Objective-C.
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:
22296 int old_fn () __attribute__ ((deprecated));
22298 int (*fn_ptr)() = old_fn;
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
22304 The `deprecated' attribute can also be used for variables and
22305 types (*note Variable Attributes::, *note Type Attributes::.)
22308 On Epiphany and MeP targets, this attribute causes the compiler to
22309 emit instructions to disable interrupts for the duration of the
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
22320 You can use `__declspec(dllexport)' as a synonym for
22321 `__attribute__ ((dllexport))' for compatibility with other
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.
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'.
22335 The attribute is also ignored for undefined symbols.
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.
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.
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.
22355 You can use `__declspec(dllimport)' as a synonym for
22356 `__attribute__ ((dllimport))' for compatibility with other
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.
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'.
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.
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.
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
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.
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.
22407 You must use GAS and GLD from GNU binutils version 2.7 or later for
22408 this attribute to work correctly.
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.
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.
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.
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.
22435 On 68HC12 the compiler uses the `call' and `rtc' instructions to
22436 call and return from a function.
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'.
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
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
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.
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.
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
22480 my_printf (void *my_object, const char *my_format, ...)
22481 __attribute__ ((format (printf, 2, 3)));
22483 causes the compiler to check the arguments in calls to `my_printf'
22484 for consistency with the `printf' style format string argument
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.
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.
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
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.
22535 The target may also provide additional types of format checks.
22536 *Note Format Checks Specific to Particular Target Machines: Target
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
22550 my_dgettext (char *my_domain, const char *my_format)
22551 __attribute__ ((format_arg (2)));
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.
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.
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
22578 For Objective-C dialects, the `format-arg' attribute may refer to
22579 an `NSString' reference for compatibility with the `format'
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.
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.
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.
22607 Please refer the example of M16C target, to see the use of this
22608 attribute while declaring a function,
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
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).
22629 In the following example 2 bytes are saved for each call to
22632 void foo (void) __attribute__((function_vector(0x18)));
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.
22645 This attribute is ignored for R8C target.
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:
22661 void *my_memcpy (void *dst, const void *src, size_t len)
22666 static void (*resolve_memcpy (void)) (void)
22668 return my_memcpy; // we'll just always select this routine
22671 The exported header file declaring the function the user calls
22674 extern void *memcpy (void *, const void *, size_t);
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:
22680 void *memcpy (void *, const void *, size_t)
22681 __attribute__ ((ifunc ("resolve_memcpy")));
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
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.
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.
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
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
22712 void f () __attribute__ ((interrupt ("IRQ")));
22714 Permissible values for this parameter are: `IRQ', `FIQ', `SWI',
22715 `ABORT' and `UNDEF'.
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.
22720 On Epiphany targets one or more optional parameters can be added
22723 void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
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.
22734 Note, on Epiphany targets, interrupts are enabled inside the
22735 function unless the `disinterrupt' attribute is also specified.
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.
22745 The following examples are all valid uses of these attributes on
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 ();
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.
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.
22766 `use_debug_exception_return'
22767 Return using the `deret' instruction. Interrupt handlers
22768 that don't have this attribute return using `eret' instead.
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 ();
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').
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
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
22805 Use this attribute on ARM to write Interrupt Service Routines.
22806 This is an alias to the `interrupt' attribute above.
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.
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.
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
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.
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.
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'.
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.
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.
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.
22871 *Note RS/6000 and PowerPC Options::, for more information on
22872 whether long calls are necessary.
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.
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.
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::).
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::).
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.
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.
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.
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
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.
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.
22944 Note, the `ms_abi' attribute for Microsoft Windows 64-bit targets
22945 currently requires the `-maccumulate-outgoing-args' option.
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
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
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.
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
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'
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.
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.
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.
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.
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.
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
23019 (*note Extended Asm::) in the called function, to serve as a
23020 special side-effect.
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.
23028 `nonnull (ARG-INDEX, ...)'
23029 The `nonnull' attribute specifies that some function parameters
23030 should be non-null pointers. For instance, the declaration:
23033 my_memcpy (void *dest, const void *src, size_t len)
23034 __attribute__((nonnull (1, 2)));
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
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:
23049 my_memcpy (void *dest, const void *src, size_t len)
23050 __attribute__((nonnull));
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,
23058 void fatal () __attribute__ ((noreturn));
23063 /* ... */ /* Print error message. */ /* ... */
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.
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'.
23077 Do not assume that registers saved by the calling function are
23078 restored before calling the `noreturn' function.
23080 It does not make sense for a `noreturn' function to have a return
23081 type other than `void'.
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:
23088 typedef void voidfn ();
23090 volatile voidfn fatal;
23092 This approach does not work in GNU C++.
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.
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.
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
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.
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.
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.
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
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.
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
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.
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"').
23162 /* Argument passed in r0, and result returned in r0+r1. */
23163 double f2d (float) __attribute__((pcs("aapcs")));
23165 Variadic functions always use the `"aapcs"' calling convention and
23166 the compiler rejects attempts to specify an alternative.
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,
23176 int square (int) __attribute__ ((pure));
23178 says that the hypothetical function `square' is safe to call fewer
23179 times than the program says.
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).
23187 The attribute `pure' is not implemented in GCC versions earlier
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.
23197 When profile feedback is available, via `-fprofile-use', hot
23198 functions are automatically detected and this attribute is ignored.
23200 The `hot' attribute on functions is not implemented in GCC versions
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
23209 The `hot' attribute on labels is not implemented in GCC versions
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
23225 When profile feedback is available, via `-fprofile-use', cold
23226 functions are automatically detected and this attribute is ignored.
23228 The `cold' attribute on functions is not implemented in GCC
23229 versions earlier than 4.3.
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'.
23236 The `cold' attribute on labels is not implemented in GCC versions
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'.
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.
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.)
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.
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.
23281 On SH targets this attribute specifies that the function or struct
23282 follows the Renesas ABI.
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
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.
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.
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.
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.
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:
23327 extern void foobar (void) __attribute__ ((section ("bar")));
23329 puts the function `foobar' in the `bar' section.
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.
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.
23345 __attribute__ ((sentinel))
23347 __attribute__ ((sentinel(0)))
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.
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.
23358 The warnings for missing or incorrect sentinels are enabled with
23362 See `long_call/short_call'.
23365 See `longcall/shortcall'.
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.
23373 See also the `interrupt' function attribute.
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.
23382 If both `signal' and `interrupt' are specified for the same
23383 function, `signal' is silently ignored.
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
23392 void f () __attribute__ ((interrupt_handler,
23393 sp_switch ("alt_stack")));
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.
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.
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.
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).
23427 int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
23428 int sse3_func (void) __attribute__ ((__target__ ("sse3")));
23430 On the 386, the following options are allowed:
23434 Enable/disable the generation of the advanced bit
23439 Enable/disable the generation of the AES instructions.
23442 *Note Function Multiversioning::, where it is used to specify
23443 the default function version.
23447 Enable/disable the generation of the MMX instructions.
23451 Enable/disable the generation of the PCLMUL instructions.
23455 Enable/disable the generation of the POPCNT instruction.
23459 Enable/disable the generation of the SSE instructions.
23463 Enable/disable the generation of the SSE2 instructions.
23467 Enable/disable the generation of the SSE3 instructions.
23471 Enable/disable the generation of the SSE4 instructions (both
23472 SSE4.1 and SSE4.2).
23476 Enable/disable the generation of the sse4.1 instructions.
23480 Enable/disable the generation of the sse4.2 instructions.
23484 Enable/disable the generation of the SSE4A instructions.
23488 Enable/disable the generation of the FMA4 instructions.
23492 Enable/disable the generation of the XOP instructions.
23496 Enable/disable the generation of the LWP instructions.
23500 Enable/disable the generation of the SSSE3 instructions.
23504 Enable/disable the generation of the CLD before string moves.
23507 `no-fancy-math-387'
23508 Enable/disable the generation of the `sin', `cos', and `sqrt'
23509 instructions on the 387 floating-point unit.
23513 Enable/disable the generation of the fused multiply/add
23518 Enable/disable the generation of floating point that depends
23519 on IEEE arithmetic.
23521 `inline-all-stringops'
23522 `no-inline-all-stringops'
23523 Enable/disable inlining of string operations.
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
23532 `no-align-stringops'
23533 Do/do not align destination of inlined string operations.
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.
23542 Specify the architecture to generate code for in compiling
23546 Specify the architecture to tune for in compiling the
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
23555 On the PowerPC, the following options are allowed:
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.
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.
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.
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.
23584 Generate code that uses (does not use) the decimal
23585 floating-point instructions implemented on some POWER
23590 Generate code that uses (does not use) ISEL instruction.
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
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.
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.
23615 Generate code that uses (does not use) the load multiple word
23616 instructions and the store multiple word instructions.
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
23685 Generate code that uses (does not use) the generation of
23686 PAIRED simd instructions.
23690 Generate code that assumes (does not assume) that all calls
23691 are far away so that a longer more expensive calling sequence
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.
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.
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 (`,').
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'
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.
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.
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.
23736 On SH targets this function attribute is similar to
23737 `interrupt_handler' but it does not save and restore all registers.
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
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.
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.
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.
23760 extern int foo () __attribute__((version_id ("20040821")));
23762 Calls to FOO are mapped to calls to FOO{20040821}.
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.
23769 void __attribute__ ((visibility ("protected")))
23770 f () { /* Do something. */; }
23771 int i __attribute__ ((visibility ("hidden")));
23773 The possible values of VISIBILITY_TYPE correspond to the
23774 visibility settings in the ELF gABI.
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.
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.
23786 On Darwin, default visibility means that the declaration is
23787 visible to other modules.
23789 Default visibility corresponds to "external linkage" in the
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.
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.
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.
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.
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.
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.
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.
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::).
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.
23854 If both the template and enclosing class have explicit visibility,
23855 the visibility from the template is used.
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.
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
23870 int fn () __attribute__ ((warn_unused_result));
23873 if (fn () < 0) return -1;
23878 results in warning on line 5.
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.
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'.
23898 static int x() __attribute__ ((weakref ("y")));
23899 /* is equivalent to... */
23900 static int x() __attribute__ ((weak, weakref, alias ("y")));
23902 static int x() __attribute__ ((weakref));
23903 static int x() __attribute__ ((alias ("y")));
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.
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.
23917 At present, a declaration to which `weakref' is attached can only
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.
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.
23929 1. It is impossible to generate `#pragma' commands from a macro.
23931 2. There is no telling what the same `#pragma' might mean in another
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_.
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.
23947 File: gcc.info, Node: Attribute Syntax, Next: Function Prototypes, Prev: Function Attributes, Up: C Extensions
23949 6.31 Attribute Syntax
23950 =====================
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.
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.
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.
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
23977 * Empty. Empty attributes are ignored.
23979 * A word (which may be an identifier such as `unused', or a reserved
23980 word such as `const').
23982 * A word, followed by, in parentheses, parameters for the attribute.
23983 These parameters take one of the following forms:
23985 * An identifier. For example, `mode' attributes use this form.
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.
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
23997 An "attribute specifier list" is a sequence of one or more attribute
23998 specifiers, not separated by any other tokens.
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
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.
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
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.
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.
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
24065 __attribute__((noreturn)) void d0 (void),
24066 __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
24069 the `noreturn' attribute applies to all the functions declared; the
24070 `format' attribute only applies to `d1'.
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.
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).
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
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
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.
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.
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.
24119 void (__attribute__((noreturn)) ****f) (void);
24121 specifies the type "pointer to pointer to pointer to pointer to
24122 non-returning function returning `void'". As another example,
24124 char *__attribute__((aligned(8))) *f;
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
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
24149 File: gcc.info, Node: Function Prototypes, Next: C++ Comments, Prev: Attribute Syntax, Up: C Extensions
24151 6.32 Prototypes and Old-Style Function Definitions
24152 ==================================================
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:
24157 /* Use prototypes unless the compiler is old-fashioned. */
24164 /* Prototype function declaration. */
24165 int isroot P((uid_t));
24167 /* Old-style function definition. */
24169 isroot (x) /* ??? lossage here ??? */
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'.
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
24191 int isroot (uid_t);
24199 GNU C++ does not support old-style function definitions, so this
24200 extension is irrelevant.
24203 File: gcc.info, Node: C++ Comments, Next: Dollar Signs, Prev: Function Prototypes, Up: C Extensions
24205 6.33 C++ Style Comments
24206 =======================
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
24216 File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: C++ Comments, Up: C Extensions
24218 6.34 Dollar Signs in Identifier Names
24219 =====================================
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.
24227 File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions
24229 6.35 The Character <ESC> in Constants
24230 =====================================
24232 You can use the sequence `\e' in a string or character constant to
24233 stand for the ASCII character <ESC>.
24236 File: gcc.info, Node: Variable Attributes, Next: Type Attributes, Prev: Character Escapes, Up: C Extensions
24238 6.36 Specifying Attributes of Variables
24239 =======================================
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.).
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'.
24255 *Note Attribute Syntax::, for details of the exact syntax for using
24258 `aligned (ALIGNMENT)'
24259 This attribute specifies a minimum alignment for the variable or
24260 structure field, measured in bytes. For example, the declaration:
24262 int x __attribute__ ((aligned (16))) = 0;
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.
24269 You can also specify the alignment of structure fields. For
24270 example, to create a double-word aligned `int' pair, you could
24273 struct foo { int x[2] __attribute__ ((aligned (8))); };
24275 This is an alternative to creating a union with a `double' member,
24276 which forces the union to be double-word aligned.
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.
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
24293 short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
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.
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.
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.
24320 The `aligned' attribute can also be used for functions (*note
24321 Function Attributes::.)
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.
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
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.
24344 These attributes override the default chosen by the `-fno-common'
24345 and `-fcommon' flags respectively.
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:
24357 extern int old_var __attribute__ ((deprecated));
24358 extern int old_var;
24359 int new_fn () { return old_var; }
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
24365 The `deprecated' attribute can also be used for functions and
24366 types (*note Function Attributes::, *note Type Attributes::.)
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.
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.
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.
24385 Here is a structure in which the field `x' is packed, so that it
24386 immediately follows `a':
24391 int x[2] __attribute__ ((packed));
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
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:
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")));
24416 /* Initialize stack pointer */
24417 init_sp (stack + sizeof (stack));
24419 /* Initialize initialized data */
24420 memcpy (&init_data, &data, &edata - &data);
24422 /* Turn on the serial ports */
24427 Use the `section' attribute with _global_ variables and not
24428 _local_ variables, as shown in the example.
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.
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.
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:
24452 int foo __attribute__((section ("shared"), shared)) = 0;
24457 /* Read and write foo. All running
24458 copies see the same value. */
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
24467 The `shared' attribute is only available on Microsoft Windows.
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'.
24476 Not all targets support this attribute.
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
24484 This attribute, attached to a variable, means that the variable
24485 must be emitted even if it appears that the variable is not
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.
24492 `vector_size (BYTES)'
24493 This attribute specifies the vector size for the variable,
24494 measured in bytes. For example, the declaration:
24496 int foo __attribute__ ((vector_size (16)));
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.
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.
24506 Aggregates with this attribute are invalid, even if they are of
24507 the same size as a corresponding scalar. For example, the
24510 struct S { int a; };
24511 struct S __attribute__ ((vector_size (16))) foo;
24513 is invalid even if the size of the structure is the same as the
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.
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
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
24538 The `weak' attribute is described in *note Function Attributes::.
24541 The `dllimport' attribute is described in *note Function
24545 The `dllexport' attribute is described in *note Function
24549 6.36.1 AVR Variable Attributes
24550 ------------------------------
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'.
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.
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>
24568 /* Locate var in flash memory */
24569 const int var[2] PROGMEM = { 1, 2 };
24571 int read_var (int i)
24573 /* Access var[] by accessor macro from avr/pgmspace.h */
24574 return (int) pgm_read_word (& var[i]);
24577 AVR is a Harvard architecture processor and data and read-only data
24578 normally resides in the data memory (RAM).
24580 See also the *note AVR Named Address Spaces:: section for an
24581 alternate way to locate and access data in flash memory.
24583 6.36.2 Blackfin Variable Attributes
24584 -----------------------------------
24586 Three attributes are currently defined for the Blackfin.
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'.
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'.
24603 6.36.3 M32R/D Variable Attributes
24604 ---------------------------------
24606 One attribute is currently defined for the M32R/D.
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.
24613 Small model objects live in the lower 16MB of memory (so that their
24614 addresses can be loaded with the `ld24' instruction).
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).
24620 6.36.4 MeP Variable Attributes
24621 ------------------------------
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.
24633 Any variable with the `based' attribute is assigned to the
24634 `.based' section, and is accessed with relative to the `$tp'
24638 Likewise, the `tiny' attribute assigned variables to the `.tiny'
24639 section, relative to the `$gp' register.
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'.
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
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).
24661 int timer_count __attribute__((io(0x123)));
24665 Variables with the `cb' attribute are used to access the control
24666 bus, using special instructions. `addr' indicates the control bus
24669 int cpu_clock __attribute__((cb(0x123)));
24672 6.36.5 i386 Variable Attributes
24673 -------------------------------
24675 Two attributes are currently defined for i386 configurations:
24676 `ms_struct' and `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.
24687 Currently `-m[no-]ms-bitfields' is provided for the Microsoft
24688 Windows X86 compilers to match the native Microsoft compiler.
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:
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.
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:
24708 offset % alignment_requirement == 0
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.
24716 MSVC interprets zero-length bit-fields in the following ways:
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.
24725 unsigned long bf_1 : 12;
24727 unsigned long bf_2 : 12;
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
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.
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.
24760 Taking this into account, it is important to note the
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.
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
24779 Here, `t4' takes up 4 bytes.
24781 3. Zero-length bit-fields following non-bit-field members are
24791 Here, `t5' takes up 2 bytes.
24793 6.36.6 PowerPC Variable Attributes
24794 ----------------------------------
24796 Three attributes currently are defined for PowerPC configurations:
24797 `altivec', `ms_struct' and `gcc_struct'.
24799 For full documentation of the struct attributes please see the
24800 documentation in *note i386 Variable Attributes::.
24802 For documentation of `altivec' attribute please see the documentation
24803 in *note PowerPC Type Attributes::.
24805 6.36.7 SPU Variable Attributes
24806 ------------------------------
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::.
24812 6.36.8 Xstormy16 Variable Attributes
24813 ------------------------------------
24815 One attribute is currently defined for xstormy16 configurations:
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'
24827 File: gcc.info, Node: Type Attributes, Next: Alignment, Prev: Variable Attributes, Up: C Extensions
24829 6.37 Specifying Attributes of Types
24830 ===================================
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::).
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'.
24845 You may specify type attributes in an enum, struct or union type
24846 declaration or definition, or for other types in a `typedef'
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
24854 *Note Attribute Syntax::, for details of the exact syntax for using
24857 `aligned (ALIGNMENT)'
24858 This attribute specifies a minimum alignment (in bytes) for
24859 variables of the specified type. For example, the declarations:
24861 struct S { short f[3]; } __attribute__ ((aligned (8)));
24862 typedef int more_aligned_int __attribute__ ((aligned (8)));
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.
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.
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:
24889 struct S { short f[3]; } __attribute__ ((aligned));
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.
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
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.
24919 The `aligned' attribute can only increase the alignment; but you
24920 can decrease it by specifying `packed' as well. See below.
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.
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.
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.
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
24950 struct my_unpacked_struct
24956 struct __attribute__ ((__packed__)) my_packed_struct
24960 struct my_unpacked_struct s;
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.
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.
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.
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.
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:
24997 typedef union __attribute__ ((__transparent_union__))
25001 } wait_status_ptr_t;
25003 pid_t wait (wait_status_ptr_t);
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:
25009 int w1 () { int w; return wait (&w); }
25010 int w2 () { union wait w; return wait (&w); }
25012 With this interface, `wait''s implementation might look like this:
25014 pid_t wait (wait_status_ptr_t p)
25016 return waitpid (-1, p.__ip, 0);
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.
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.
25040 typedef int T1 __attribute__ ((deprecated));
25044 typedef T1 T3 __attribute__ ((deprecated));
25045 T3 z __attribute__ ((deprecated));
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.
25053 The `deprecated' attribute can also be used for functions and
25054 variables (*note Function Attributes::, *note Variable
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.
25068 Note that an object of a type with this attribute does not have any
25073 typedef short __attribute__((__may_alias__)) short_a;
25078 int a = 0x12345678;
25079 short_a *b = (short_a *) &a;
25083 if (a == 0x12345678)
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.
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.
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.
25109 To specify multiple attributes, separate them by commas within the
25110 double parentheses: for example, `__attribute__ ((aligned (16),
25113 6.37.1 ARM Type Attributes
25114 --------------------------
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.
25121 class __declspec(notshared) C {
25123 __declspec(dllimport) C();
25127 __declspec(dllexport)
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'.)
25134 6.37.2 MeP Type Attributes
25135 --------------------------
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
25142 6.37.3 i386 Type Attributes
25143 ---------------------------
25145 Two attributes are currently defined for i386 configurations:
25146 `ms_struct' and `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.
25157 Currently `-m[no-]ms-bitfields' is provided for the Microsoft
25158 Windows X86 compilers to match the native Microsoft compiler.
25160 6.37.4 PowerPC Type Attributes
25161 ------------------------------
25163 Three attributes currently are defined for PowerPC configurations:
25164 `altivec', `ms_struct' and `gcc_struct'.
25166 For full documentation of the `ms_struct' and `gcc_struct' attributes
25167 please see the documentation in *note i386 Type Attributes::.
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).
25175 __attribute__((altivec(vector__)))
25176 __attribute__((altivec(pixel__))) unsigned short
25177 __attribute__((altivec(bool__))) unsigned
25179 These attributes mainly are intended to support the `__vector',
25180 `__pixel', and `__bool' AltiVec keywords.
25182 6.37.5 SPU Type Attributes
25183 --------------------------
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.
25191 File: gcc.info, Node: Alignment, Next: Inline, Prev: Type Attributes, Up: C Extensions
25193 6.38 Inquiring on Alignment of Types or Variables
25194 =================================================
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'.
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.
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.
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:
25215 struct foo { int x; char y; } foo1;
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)'.
25220 It is an error to ask for the alignment of an incomplete type.
25223 File: gcc.info, Node: Inline, Next: Volatiles, Prev: Alignment, Up: C Extensions
25225 6.39 An Inline Function is As Fast As a Macro
25226 =============================================
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'.
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++.
25246 To declare a function inline, use the `inline' keyword in its
25247 declaration, like this:
25255 If you are writing a header file to be included in ISO C90 programs,
25256 write `__inline__' instead of `inline'. *Note Alternate Keywords::.
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:
25263 extern int inc (int *a);
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.
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.
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.
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++
25299 GCC does not inline any functions when not optimizing unless you
25300 specify the `always_inline' attribute for the function, like this:
25303 inline void foo (const char) __attribute__((always_inline));
25305 The remainder of this section is specific to GNU C90 inlining.
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.
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.
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
25329 File: gcc.info, Node: Volatiles, Next: Extended Asm, Prev: Inline, Up: C Extensions
25331 6.40 When is a Volatile Object Accessed?
25332 ========================================
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.
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
25352 int *ptr = SOMETHING;
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:
25361 int *ptr = SOMETHING;
25364 asm volatile ("" : : : "memory");
25367 A scalar volatile object is read when it is accessed in a void context:
25369 volatile int *src = SOMEVALUE;
25372 Such expressions are rvalues, and GCC implements this as a read of the
25373 volatile object being pointed to.
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
25385 obj = vobj = SOMETHING;
25386 obj ? vobj = ONETHING : vobj = ANOTHERTHING;
25387 obj = (SOMETHING, vobj = ANOTHERTHING);
25389 If you need to read the volatile object after an assignment has
25390 occurred, you must use a separate expression with an intervening
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
25401 File: gcc.info, Node: Extended Asm, Next: Constraints, Prev: Volatiles, Up: C Extensions
25403 6.41 Assembler Instructions with C Expression Operands
25404 ======================================================
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.
25410 You must specify an assembler instruction template much like what
25411 appears in a machine description, plus an operand constraint string for
25414 For example, here is how to use the 68881's `fsinx' instruction:
25416 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
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::).
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
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
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
25445 asm ("fsinx %[angle],%[output]"
25446 : [output] "=f" (result)
25447 : [angle] "f" (angle));
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.
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.
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.
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
25481 asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
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.
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
25493 asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
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.
25503 As of GCC version 3.1, one may write `[NAME]' instead of the operand
25504 number for a matching constraint. For example:
25506 asm ("cmoveq %1,%2,%[result]"
25507 : [result] "=r"(result)
25508 : "r" (test), "r"(new), "[result]"(old));
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:
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));
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:
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));
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:
25542 asm volatile ("movc3 %0,%1,%2"
25544 : "g" (from), "g" (to), "g" (count)
25545 : "r0", "r1", "r2", "r3", "r4", "r5");
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.
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.
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.
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:
25583 {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}.
25585 Note that in the following example the memory input is necessary,
25586 otherwise GCC might optimize the store to `x' away:
25592 asm ("magic stuff accessing an 'int' pointed to by '%1'"
25593 : "=&d" (r) : "a" (y), "m" (*y));
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:
25610 asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
25612 : "g" (from), "g" (to)
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::.
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:
25626 asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:"
25630 This assumes your assembler supports local labels, as the GNU assembler
25631 and most Unix assemblers do.
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::.
25638 Usually the most convenient way to use these `asm' instructions is to
25639 encapsulate them in macros that look like functions. For example,
25642 ({ double __value, __arg = (x); \
25643 asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \
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'.
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.
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.
25668 You can prevent an `asm' instruction from being deleted by writing the
25669 keyword `volatile' after the `asm'. For example:
25671 #define get_and_set_priority(new) \
25673 asm volatile ("get_and_set_priority %0, %1" \
25674 : "=g" (__old) : "g" (new)); \
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:
25687 asm volatile("mtfsf 255,%0" : : "f" (fpenv));
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:
25695 asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv));
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.
25704 An `asm' instruction without any output operands is treated
25705 identically to a volatile `asm' instruction.
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.
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.
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.
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.
25735 asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
25736 : : "r"(x), "r"(&y) : "r5", "memory" : error);
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.
25751 asm goto ("mfsr %%r1, 123; jmp %%r1;"
25752 ".pushsection doit_table;"
25753 ".long %l0, %l1, %l2, %l3;"
25755 : : : "r1" : label1, label2, label3, label4);
25756 __builtin_unreachable ();
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
25779 #define TRACE1(NUM) \
25781 asm goto ("0: nop;" \
25782 ".pushsection trace_table;" \
25785 : : : : trace#NUM); \
25786 if (0) { trace#NUM: trace(); } \
25788 #define TRACE TRACE1(__COUNTER__)
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'.
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::.
25803 6.41.1 Size of an `asm'
25804 -----------------------
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.
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.
25824 6.41.2 i386 floating-point asm operands
25825 ---------------------------------------
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:
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.
25835 An input register that is implicitly popped by the `asm' must be
25836 explicitly clobbered, unless it is constrained to match an output
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".
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.
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
25853 asm ("foo" : "=t" (a) : "f" (b));
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.
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.
25865 The example above would be correctly written as:
25867 asm ("foo" : "=&t" (a) : "f" (b));
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.
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.
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
25884 Output operands must start at the top of the reg-stack: output
25885 operands may not "skip" a register.
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.
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.
25895 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
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.
25901 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
25904 File: gcc.info, Node: Constraints, Next: Asm Labels, Prev: Extended Asm, Up: C Extensions
25906 6.42 Constraints for `asm' Operands
25907 ===================================
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.
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.
25928 File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints
25930 6.42.1 Simple Constraints
25931 -------------------------
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:
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
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.
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
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.
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).
25971 A memory operand that is not offsettable. In other words,
25972 anything that would fit the `m' constraint but not the `o'
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
25989 A memory operand with autoincrement addressing (either
25990 preincrement or postincrement) is allowed. In inline `asm' the
25991 same restrictions as for `<' apply.
25994 A register operand is allowed provided that it is in a general
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.
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'.
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
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).
26022 An immediate floating operand (expression code `const_double' or
26023 `const_vector') is allowed.
26026 `G' and `H' may be defined in a machine-dependent fashion to
26027 permit immediate floating operands in particular ranges of values.
26030 An immediate integer operand whose value is not an explicit
26031 integer is allowed.
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.
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.
26048 Any register, memory or immediate integer operand is allowed,
26049 except for registers that are not general registers.
26052 Any operand whatsoever is allowed.
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.
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.
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:
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
26082 An operand that is a valid memory address is allowed. This is for
26083 "load address" and "push address" instructions.
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.
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.
26097 File: gcc.info, Node: Multi-Alternative, Next: Modifiers, Prev: Simple Constraints, Up: Constraints
26099 6.42.2 Multiple Alternative Constraints
26100 ---------------------------------------
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.
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
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:
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
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.
26135 File: gcc.info, Node: Modifiers, Next: Machine Constraints, Prev: Multi-Alternative, Up: Constraints
26137 6.42.3 Constraint Modifier Characters
26138 -------------------------------------
26140 Here are constraint modifier characters.
26143 Means that this operand is write-only for this instruction: the
26144 previous value is discarded and replaced by output data.
26147 Means that this operand is both read and written by the
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.
26156 If you specify `=' or `+' in a constraint, you put it in the first
26157 character of the constraint string.
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.
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'
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.
26177 `&' does not obviate the need to write `='.
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.
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.
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.
26205 File: gcc.info, Node: Machine Constraints, Prev: Modifiers, Up: Constraints
26207 6.42.4 Constraints for Particular Machines
26208 ------------------------------------------
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
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.
26229 _AArch64 family--`config/aarch64/constraints.md'_
26232 The stack pointer register (`SP')
26235 Floating point or SIMD vector register
26238 Integer constant that is valid as an immediate operand in an
26242 Integer constant that is valid as an immediate operand in a
26243 `SUB' instruction (once negated)
26246 Integer constant that can be used with a 32-bit logical
26250 Integer constant that can be used with a 64-bit logical
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
26260 Integer constant that is valid as an immediate operand in a
26261 64-bit `MOV' pseudo instruction
26264 An absolute symbolic address or a label reference
26267 Floating point constant zero
26270 Integer constant zero
26273 An absolute symbolic address
26276 The high part (bits 12 and upwards) of the pc-relative
26277 address of a symbol within 4GB of the instruction
26280 A memory address which uses a single base register with no
26284 A memory address suitable for a load/store pair instruction
26285 in SI, DI, SF and DF modes
26288 _ARM family--`config/arm/constraints.md'_
26291 VFP floating-point register
26294 The floating-point constant 0.0
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
26302 Integer in the range -4095 to 4095
26305 Integer that satisfies constraint `I' when inverted (ones
26309 Integer that satisfies constraint `I' when negated (twos
26313 Integer in the range 0 to 32
26316 A memory reference where the exact address is in a single
26317 register (``m'' is preferable for `asm' statements)
26320 An item in the constant pool
26323 A symbol in the text segment of the current file
26326 A memory reference suitable for VFP load/store insns
26327 (reg+constant offset)
26330 A memory reference suitable for iWMMXt load/store
26334 A memory reference suitable for the ARMv4 ldrsb instruction.
26336 _AVR family--`config/avr/constraints.md'_
26339 Registers from r0 to r15
26342 Registers from r16 to r23
26345 Registers from r16 to r31
26348 Registers from r24 to r31. These registers can be used in
26352 Pointer register (r26-r31)
26355 Base pointer register (r28-r31)
26358 Stack pointer register (SPH:SPL)
26361 Temporary register r0
26364 Register pair X (r27:r26)
26367 Register pair Y (r29:r28)
26370 Register pair Z (r31:r30)
26373 Constant greater than -1, less than 64
26376 Constant greater than -64, less than 1
26385 Constant that fits in 8 bits
26388 Constant integer -1
26391 Constant integer 8, 16, or 24
26397 A floating point constant 0.0
26400 A memory address based on Y or Z pointer with displacement.
26402 _Epiphany--`config/epiphany/constraints.md'_
26405 An unsigned 16-bit constant.
26408 An unsigned 5-bit constant.
26411 A signed 11-bit constant.
26414 A signed 11-bit constant added to -1. Can only match when
26415 the `-m1reg-REG' option is active.
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.
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.
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.
26434 Symbolic constant for call/jump instruction.
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'
26443 The the register class of registers that can be used to hold a
26444 sibcall call address. I.e., a caller-saved register.
26447 Core control register class.
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
26456 Matches the return address if it can be replaced with the
26460 Matches the integer condition code register.
26463 Matches the return address if it is in a stack slot.
26466 Matches control register values to switch fp mode, which are
26467 encapsulated in `UNSPEC_FP_MODE'.
26469 _CR16 Architecture--`config/cr16/cr16.h'_
26472 Registers from r0 to r14 (registers without stack pointer)
26475 Register from r0 to r11 (all 16-bit registers)
26478 Register from r12 to r15 (all 32-bit registers)
26481 Signed constant that fits in 4 bits
26484 Signed constant that fits in 5 bits
26487 Signed constant that fits in 6 bits
26490 Unsigned constant that fits in 4 bits
26493 Signed constant that fits in 32 bits
26496 Check for 64 bits wide constants for add/sub instructions
26499 Floating point constant that is legal for store immediate
26501 _Hewlett-Packard PA-RISC--`config/pa/pa.h'_
26507 Floating point register
26510 Shift amount register
26513 Floating point register (deprecated)
26516 Upper floating point register (32-bit), floating point
26523 Signed 11-bit integer constant
26526 Signed 14-bit integer constant
26529 Integer constant that can be deposited with a `zdepi'
26533 Signed 5-bit integer constant
26539 Integer constant that can be loaded with a `ldil' instruction
26542 Integer constant whose value plus one is a power of 2
26545 Integer constant that can be used for `and' operations in
26546 `depi' and `extru' instructions
26549 Integer constant 31
26552 Integer constant 63
26555 Floating-point constant 0.0
26558 A `lo_sum' data-linkage-table memory operand
26561 A memory operand that can be used as the destination operand
26562 of an integer store instruction
26565 A scaled or unscaled indexed memory operand
26568 A memory operand for floating-point loads and stores
26571 A register indirect memory operand
26573 _picoChip family--`picochip.h'_
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.
26586 A twin register. A register which may be paired with an
26587 adjacent register to create a 32-bit register.
26590 Any absolute memory address (e.g., symbolic constant, symbolic
26591 constant + offset).
26594 4-bit signed integer.
26597 4-bit unsigned integer.
26600 8-bit signed integer.
26603 Any constant whose absolute value is no greater than 4-bits.
26606 10-bit signed integer
26609 16-bit signed integer.
26612 _PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_
26615 Address base register
26618 Floating point register (containing 64-bit value)
26621 Floating point register (containing 32-bit value)
26624 Altivec vector register
26627 VSX vector register to hold vector double data
26630 VSX vector register to hold vector float data
26633 VSX vector register to hold scalar float data
26639 `MQ', `CTR', or `LINK' register
26651 `CR' register (condition register) number 0
26654 `CR' register (condition register)
26657 `XER[CA]' carry bit (part of the XER register)
26660 Signed 16-bit constant
26663 Unsigned 16-bit constant shifted left 16 bits (use `L'
26664 instead for `SImode' constants)
26667 Unsigned 16-bit constant
26670 Signed 16-bit constant shifted left 16 bits
26673 Constant larger than 31
26682 Constant whose negation is a signed 16-bit constant
26685 Floating point constant that can be loaded into a register
26686 with one instruction per word
26689 Integer/Floating point constant that can be loaded into a
26690 register using three instructions
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:
26702 asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
26706 asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
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
26719 Memory operand that is an offset from a register (it is
26720 usually better to use `m' or `es' in `asm' statements)
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)
26730 Address operand that is an indexed or indirect from a
26731 register (`p' is preferable for `asm' statements)
26734 Constant suitable as a 64-bit mask operand
26737 Constant suitable as a 32-bit mask operand
26740 System V Release 4 small data area reference
26743 AND masks that can be performed by two rldic{l, r}
26747 Vector constant that does not require memory
26750 Vector constant that is all zeros.
26753 _Intel 386--`config/i386/constraints.md'_
26756 Legacy register--the eight integer registers available on all
26757 i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp').
26760 Any register accessible as `Rl'. In 32-bit mode, `a', `b',
26761 `c', and `d'; in 64-bit mode, any integer register.
26764 Any register accessible as `Rh': `a', `b', `c', and `d'.
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':
26791 unsigned long long rdtsc (void)
26793 unsigned long long tick;
26794 __asm__ __volatile__("rdtsc":"=A"(tick));
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
26802 unsigned long long rdtsc (void)
26804 unsigned int tickl, tickh;
26805 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
26806 return ((unsigned long long)tickh << 32)|tickl;
26810 Any 80387 floating-point (stack) register.
26813 Top of 80387 floating-point stack (`%st(0)').
26816 Second from top of 80387 floating-point stack (`%st(1)').
26825 First SSE register (`%xmm0').
26828 Integer constant in the range 0 ... 31, for 32-bit shifts.
26831 Integer constant in the range 0 ... 63, for 64-bit shifts.
26834 Signed 8-bit integer constant.
26837 `0xFF' or `0xFFFF', for andsi as a zero-extending move.
26840 0, 1, 2, or 3 (shifts for the `lea' instruction).
26843 Unsigned 8-bit integer constant (for `in' and `out'
26847 Standard 80387 floating point constant.
26850 Standard SSE floating point constant.
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).
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).
26863 _Intel IA-64--`config/ia64/ia64.h'_
26866 General register `r0' to `r3' for `addl' instruction
26872 Predicate register (`c' as in "conditional")
26875 Application register residing in M-unit
26878 Application register residing in I-unit
26881 Floating-point register
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.
26889 Floating-point constant 0.0 or 1.0
26892 14-bit signed integer constant
26895 22-bit signed integer constant
26898 8-bit signed integer constant for logical instructions
26901 8-bit adjusted signed integer constant for compare pseudo-ops
26904 6-bit unsigned integer constant for shift counts
26907 9-bit signed integer constant for load and store
26914 0 or -1 for `dep' instruction
26917 Non-volatile memory for floating-point loads and stores
26920 Integer constant in the range 1 to 4 for `shladd' instruction
26923 Memory operand except postincrement and postdecrement. This
26924 is now roughly the same as `m' when not used together with `<'
26927 _FRV--`config/frv/frv.h'_
26930 Register in the class `ACC_REGS' (`acc0' to `acc7').
26933 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
26936 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
26940 Register in the class `GPR_REGS' (`gr0' to `gr63').
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.
26948 Register in the class `FPR_REGS' (`fr0' to `fr63').
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.
26956 Register in the class `LR_REG' (the `lr' register).
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
26965 Register in the class `ICC_REGS' (`icc0' to `icc3').
26968 Register in the class `FCC_REGS' (`fcc0' to `fcc3').
26971 Register in the class `ICR_REGS' (`cc4' to `cc7').
26974 Register in the class `FCR_REGS' (`cc0' to `cc3').
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
26983 Register in the class `SPR_REGS' (`lcr' and `lr').
26986 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
26989 Register in the class `ACCG_REGS' (`accg0' to `accg7').
26992 Register in the class `CR_REGS' (`cc0' to `cc7').
26995 Floating point constant zero
26998 6-bit signed integer constant
27001 10-bit signed integer constant
27004 16-bit signed integer constant
27007 16-bit unsigned integer constant
27010 12-bit signed integer constant that is negative--i.e. in the
27011 range of -2048 to -1
27017 12-bit signed integer constant that is greater than
27018 zero--i.e. in the range of 1 to 2047.
27021 _Blackfin family--`config/bfin/constraints.md'_
27030 A call clobbered P register.
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.
27037 Even-numbered D register
27040 Odd-numbered D register
27043 Accumulator register.
27046 Even-numbered accumulator register.
27049 Odd-numbered accumulator register.
27061 Registers used for circular buffering, i.e. I, B, or L
27077 Any D, P, B, M, I or L register.
27080 Additional registers typically used only in prologues and
27081 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
27085 Any register except accumulators or CC.
27088 Signed 16 bit integer (in the range -32768 to 32767)
27091 Unsigned 16 bit integer (in the range 0 to 65535)
27094 Signed 7 bit integer (in the range -64 to 63)
27097 Unsigned 7 bit integer (in the range 0 to 127)
27100 Unsigned 5 bit integer (in the range 0 to 31)
27103 Signed 4 bit integer (in the range -8 to 7)
27106 Signed 3 bit integer (in the range -3 to 4)
27109 Unsigned 3 bit integer (in the range 0 to 7)
27112 Constant N, where N is a single-digit constant in the range 0
27116 An integer equal to one of the MACFLAG_XXX constants that is
27117 suitable for use with either accumulator.
27120 An integer equal to one of the MACFLAG_XXX constants that is
27121 suitable for use only with accumulator A1.
27130 An integer constant with exactly a single bit set.
27133 An integer constant with all bits set except exactly one.
27140 _M32C--`config/m32c/m32c.c'_
27145 `$sp', `$fb', `$sb'.
27148 Any control register, when they're 16 bits wide (nothing if
27149 control registers are 24 bits wide)
27152 Any control register, when they're 24 bits wide.
27158 $r0, $r1, $r2, $r3.
27161 $r0 or $r2, or $r2r0 for 32 bit values.
27164 $r1 or $r3, or $r3r1 for 32 bit values.
27167 A register that can hold a 64 bit value.
27170 $r0 or $r1 (registers with addressable high/low bytes)
27179 Address registers when they're 16 bits wide.
27182 Address registers when they're 24 bits wide.
27185 Registers that can hold QI values.
27188 Registers that can be used with displacements ($a0, $a1, $sb).
27191 Registers that can hold 32 bit values.
27194 Registers that can hold 16 bit values.
27197 Registers chat can hold 16 bit values, including all control
27201 $r0 through R1, plus $a0 and $a1.
27204 The flags register.
27207 The memory-based pseudo-registers $mem0 through $mem15.
27210 Registers that can hold pointers (16 bit registers for r8c,
27211 m16c; 24 bit registers for m32cm, m32c).
27214 Matches multiple registers in a PARALLEL to form a larger
27215 register. Used to match function return values.
27230 -8 ... -1 or 1 ... 8
27233 -16 ... -1 or 1 ... 16
27236 -32 ... -1 or 1 ... 32
27242 An 8 bit value with exactly one bit set.
27245 A 16 bit value with exactly one bit set.
27248 The common src/dest memory addressing modes.
27251 Memory addressed using $a0 or $a1.
27254 Memory addressed with immediate addresses.
27257 Memory addressed using the stack pointer ($sp).
27260 Memory addressed using the frame base register ($fb).
27263 Memory addressed using the small base register ($sb).
27268 _MeP--`config/mep/constraints.md'_
27277 Any control register.
27280 Either the $hi or the $lo register.
27283 Coprocessor registers that can be directly loaded ($c0-$c15).
27286 Coprocessor registers that can be moved to each other.
27289 Coprocessor registers that can be moved to core registers.
27301 Registers which can be used in $tp-relative addressing.
27307 The coprocessor registers.
27310 The coprocessor control registers.
27316 User-defined register set A.
27319 User-defined register set B.
27322 User-defined register set C.
27325 User-defined register set D.
27328 Offsets for $gp-rel addressing.
27331 Constants that can be used directly with boolean insns.
27334 Constants that can be moved directly to registers.
27337 Small constants that can be added to registers.
27343 Small constants that can be compared to registers.
27346 Constants that can be loaded into the top half of registers.
27349 Signed 8-bit immediates.
27352 Symbols encoded for $tp-rel or $gp-rel addressing.
27355 Non-constant addresses for loading/saving coprocessor
27359 The top half of a symbol's value.
27362 A register indirect address without offset.
27365 Symbolic references to the control bus.
27368 _MicroBlaze--`config/microblaze/constraints.md'_
27371 A general register (`r0' to `r31').
27374 A status register (`rmsr', `$fcc1' to `$fcc7').
27377 _MIPS--`config/mips/constraints.md'_
27380 An address register. This is equivalent to `r' unless
27381 generating MIPS16 code.
27384 A floating-point register (if available).
27387 Formerly the `hi' register. This constraint is no longer
27391 The `lo' register. Use this register to store values that are
27392 no bigger than a word.
27395 The concatenated `hi' and `lo' registers. Use this register
27396 to store doubleword values.
27399 A register suitable for use in an indirect jump. This will
27400 always be `$25' for `-mabicalls'.
27403 Register `$3'. Do not use this constraint in new code; it is
27404 retained only for compatibility with glibc.
27407 Equivalent to `r'; retained for backwards compatibility.
27410 A floating-point condition code register.
27413 A signed 16-bit constant (for arithmetic instructions).
27419 An unsigned 16-bit constant (for logic instructions).
27422 A signed 32-bit constant in which the lower 16 bits are zero.
27423 Such constants can be loaded using `lui'.
27426 A constant that cannot be loaded using `lui', `addiu' or
27430 A constant in the range -65535 to -1 (inclusive).
27433 A signed 15-bit constant.
27436 A constant in the range 1 to 65535 (inclusive).
27439 Floating-point zero.
27442 An address that can be used in a non-macro load or store.
27444 _Motorola 680x0--`config/m68k/constraints.md'_
27453 68881 floating-point register, if available
27456 Integer in the range 1 to 8
27459 16-bit signed number
27462 Signed number whose magnitude is greater than 0x80
27465 Integer in the range -8 to -1
27468 Signed number whose magnitude is greater than 0x100
27471 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
27474 16 (for rotate using swap)
27477 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
27480 Numbers that mov3q can handle
27483 Floating point constant that is not a 68881 constant
27486 Operands that satisfy 'm' when -mpcrel is in effect
27489 Operands that satisfy 's' when -mpcrel is not in effect
27492 Address register indirect addressing mode
27495 Register offset addressing
27501 symbol_ref or const
27510 Range of signed numbers that don't fit in 16 bits
27513 Integers valid for mvq
27516 Integers valid for a moveq followed by a swap
27519 Integers valid for mvz
27522 Integers valid for mvs
27528 Non-register operands allowed in clr
27531 _Moxie--`config/moxie/constraints.md'_
27534 An absolute address
27540 A register indirect memory operand
27543 A constant in the range of 0 to 255.
27546 A constant in the range of 0 to -255.
27549 _PDP-11--`config/pdp11/constraints.md'_
27552 Floating point registers AC0 through AC3. These can be
27553 loaded from/to memory with a single instruction.
27556 Odd numbered general registers (R1, R3, R5). These are used
27557 for 16-bit multiply operations.
27560 Any of the floating point registers (AC0 through AC5).
27563 Floating point constant 0.
27566 An integer constant that fits in 16 bits.
27569 An integer constant whose low order 16 bits are zero.
27572 An integer constant that does not meet the constraints for
27576 The integer constant 1.
27579 The integer constant -1.
27582 The integer constant 0.
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.
27590 A memory reference which requires an additional word (address
27591 or offset) after the opcode.
27594 A memory reference that is encoded within the opcode.
27597 _RL78--`config/rl78/constraints.md'_
27600 An integer constant in the range 1 ... 7.
27603 An integer constant in the range 0 ... 255.
27606 An integer constant in the range -255 ... 0
27609 The integer constant 1.
27612 The integer constant -1.
27615 The integer constant 0.
27618 The integer constant 2.
27621 The integer constant -2.
27624 An integer constant in the range 1 ... 15.
27627 The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
27630 The synthetic compare types-gt, lt, ge, and le.
27633 A memory reference with an absolute address.
27636 A memory reference using `BC' as a base register, with an
27640 A memory reference using `AX', `BC', `DE', or `HL' for the
27641 address, for calls.
27644 A memory reference using any 16-bit register pair for the
27645 address, for calls.
27648 A memory reference using `DE' as a base register, with an
27652 A memory reference using `DE' as a base register, without any
27656 Any memory reference to an address in the far address space.
27659 A memory reference using `HL' as a base register, with an
27660 optional one-byte offset.
27663 A memory reference using `HL' as a base register, with `B' or
27664 `C' as the index register.
27667 A memory reference using `HL' as a base register, without any
27671 A memory reference using `SP' as a base register, with an
27672 optional one-byte offset.
27675 Any memory reference to an address in the near address space.
27687 `A' through `L' registers.
27696 The 16-bit `R8' register.
27699 The 16-bit `R10' register.
27702 The registers reserved for interrupts (`R24' to `R31').
27726 The virtual registers.
27729 The `PSW' register.
27735 _RX--`config/rx/constraints.md'_
27738 An address which does not involve register indirect
27739 addressing or pre/post increment/decrement addressing.
27742 A symbol reference.
27745 A constant in the range -256 to 255, inclusive.
27748 A constant in the range -128 to 127, inclusive.
27751 A constant in the range -32768 to 32767, inclusive.
27754 A constant in the range -8388608 to 8388607, inclusive.
27757 A constant in the range 0 to 15, inclusive.
27760 _SPARC--`config/sparc/sparc.h'_
27763 Floating-point register on the SPARC-V8 architecture and
27764 lower floating-point register on the SPARC-V9 architecture.
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.
27772 Floating-point condition code register.
27775 Lower floating-point register. It is only valid on the
27776 SPARC-V9 architecture when the Visual Instruction Set is
27780 Floating-point register. It is only valid on the SPARC-V9
27781 architecture when the Visual Instruction Set is available.
27784 64-bit global or out register for the SPARC-V8+ architecture.
27787 The constant all-ones, for floating-point.
27790 Signed 5-bit constant
27796 Signed 13-bit constant
27802 32-bit constant with the low 12 bits clear (a constant that
27803 can be loaded with the `sethi' instruction)
27806 A constant in the range supported by `movcc' instructions
27807 (11-bit signed immediate)
27810 A constant in the range supported by `movrcc' instructions
27811 (10-bit signed immediate)
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'
27822 Floating-point zero
27825 Signed 13-bit constant, sign-extended to 32 or 64 bits
27831 Floating-point constant whose integral representation can be
27832 moved into an integer register using a single sethi
27836 Floating-point constant whose integral representation can be
27837 moved into an integer register using a single mov instruction
27840 Floating-point constant whose integral representation can be
27841 moved into an integer register using a high/lo_sum
27842 instruction sequence
27845 Memory address aligned to an 8-byte boundary
27851 Memory address for `e' constraint registers
27854 Memory address with only a base register
27860 _SPU--`config/spu/spu.h'_
27863 An immediate which can be loaded with the il/ila/ilh/ilhu
27864 instructions. const_int is treated as a 64 bit value.
27867 An immediate for and/xor/or instructions. const_int is
27868 treated as a 64 bit value.
27871 An immediate for the `iohl' instruction. const_int is
27872 treated as a 64 bit value.
27875 An immediate which can be loaded with `fsmbi'.
27878 An immediate which can be loaded with the il/ila/ilh/ilhu
27879 instructions. const_int is treated as a 32 bit value.
27882 An immediate for most arithmetic instructions. const_int is
27883 treated as a 32 bit value.
27886 An immediate for and/xor/or instructions. const_int is
27887 treated as a 32 bit value.
27890 An immediate for the `iohl' instruction. const_int is
27891 treated as a 32 bit value.
27894 A constant in the range [-64, 63] for shift/rotate
27898 An unsigned 7-bit constant for conversion/nop/channel
27902 A signed 10-bit constant for most arithmetic instructions.
27905 A signed 16 bit immediate for `stop'.
27908 An unsigned 16-bit constant for `iohl' and `fsmbi'.
27911 An unsigned 7-bit constant whose 3 least significant bits are
27915 An unsigned 3-bit constant for 16-byte rotates and shifts
27918 Call operand, reg, for indirect calls
27921 Call operand, symbol, for relative calls.
27924 Call operand, const_int, for absolute calls.
27927 An immediate which can be loaded with the il/ila/ilh/ilhu
27928 instructions. const_int is sign extended to 128 bit.
27931 An immediate for shift and rotate instructions. const_int is
27932 treated as a 32 bit value.
27935 An immediate for and/xor/or instructions. const_int is sign
27936 extended as a 128 bit.
27939 An immediate for the `iohl' instruction. const_int is sign
27940 extended to 128 bit.
27943 _S/390 and zSeries--`config/s390/s390.h'_
27946 Address register (general purpose register except r0)
27949 Condition code register
27952 Data register (arbitrary general purpose register)
27955 Floating-point register
27958 Unsigned 8-bit constant (0-255)
27961 Unsigned 12-bit constant (0-4095)
27964 Signed 16-bit constant (-32768-32767)
27967 Value appropriate as displacement.
27969 for short displacement
27971 `(-524288..524287)'
27972 for long displacement
27975 Constant integer with a value of 0x7fffffff.
27978 Multiple letter constraint followed by 4 parameter letters.
27980 number of the part counting from most to least
27987 mode of the containing operand
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.
27995 Memory reference without index register and with short
27999 Memory reference with index register and short displacement.
28002 Memory reference without index register but with long
28006 Memory reference with index register and long displacement.
28009 Pointer with short displacement.
28012 Pointer with long displacement.
28015 Shift count operand.
28018 _Score family--`config/score/score.h'_
28021 Registers from r0 to r32.
28024 Registers from r0 to r16.
28027 r8--r11 or r22--r27 registers.
28048 cnt + lcb + scb register.
28051 cr0--cr15 register.
28063 cp1 + cp2 + cp3 registers.
28066 High 16-bit constant (32-bit constant with 16 LSBs zero).
28069 Unsigned 5 bit integer (in the range 0 to 31).
28072 Unsigned 16 bit integer (in the range 0 to 65535).
28075 Signed 16 bit integer (in the range -32768 to 32767).
28078 Unsigned 14 bit integer (in the range 0 to 16383).
28081 Signed 14 bit integer (in the range -8192 to 8191).
28086 _Xstormy16--`config/stormy16/stormy16.h'_
28101 Registers r0 through r7.
28104 Registers r0 and r1.
28107 The carry register.
28110 Registers r8 and r9.
28113 A constant between 0 and 3 inclusive.
28116 A constant that has exactly one bit set.
28119 A constant that has exactly one bit clear.
28122 A constant between 0 and 255 inclusive.
28125 A constant between -255 and 0 inclusive.
28128 A constant between -3 and 0 inclusive.
28131 A constant between 1 and 4 inclusive.
28134 A constant between -4 and -1 inclusive.
28137 A memory reference that is a stack push.
28140 A memory reference that is a stack pop.
28143 A memory reference that refers to a constant address of known
28147 The register indicated by Rx (not implemented yet).
28150 A constant that is not between 2 and 15 inclusive.
28156 _TI C6X family--`config/c6x/constraints.md'_
28159 Register file A (A0-A31).
28162 Register file B (B0-B31).
28165 Predicate registers in register file A (A0-A2 on C64X and
28166 higher, A1 and A2 otherwise).
28169 Predicate registers in register file B (B0-B2).
28172 A call-used register in register file B (B0-B9, B16-B31).
28175 Register file A, excluding predicate registers (A3-A31, plus
28176 A0 if not C64X or higher).
28179 Register file B, excluding predicate registers (B3-B31).
28182 Integer constant in the range 0 ... 15.
28185 Integer constant in the range 0 ... 31.
28188 Integer constant in the range -31 ... 0.
28191 Integer constant in the range -16 ... 15.
28194 Integer constant that can be the operand of an ADDA or a SUBA
28198 Integer constant in the range 0 ... 65535.
28201 Integer constant in the range -32768 ... 32767.
28204 Integer constant in the range -2^20 ... 2^20 - 1.
28207 Integer constant that is a valid mask for the clr instruction.
28210 Integer constant that is a valid mask for the set instruction.
28213 Memory location with A base register.
28216 Memory location with B base register.
28219 Register B14 (aka DP).
28222 _TILE-Gx--`config/tilegx/constraints.md'_
28235 Each of these represents a register constraint for an
28236 individual register, from r0 to r10.
28239 Signed 8-bit integer constant.
28242 Signed 16-bit integer constant.
28245 Unsigned 16-bit integer constant.
28248 Integer constant that fits in one signed byte when
28249 incremented by one (-129 ... 126).
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:
28256 asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));
28259 A bit mask suitable for the BFINS instruction.
28262 Integer constant that is a byte tiled out eight times.
28265 The integer zero constant.
28268 Integer constant that is a sign-extended byte tiled out as
28272 Integer constant that fits in one signed byte when incremented
28273 (-129 ... 126), but excluding -1.
28276 Integer constant that has all 1 bits consecutive and starting
28280 A 16-bit fragment of a got, tls, or pc-relative reference.
28283 Memory operand except postincrement. This is roughly the
28284 same as `m' when not used together with `<' or `>'.
28287 An 8-element vector constant with identical elements.
28290 A 4-element vector constant with identical elements.
28293 The integer constant 0xffffffff.
28296 The integer constant 0xffffffff00000000.
28299 _TILEPro--`config/tilepro/constraints.md'_
28312 Each of these represents a register constraint for an
28313 individual register, from r0 to r10.
28316 Signed 8-bit integer constant.
28319 Signed 16-bit integer constant.
28322 Nonzero integer constant with low 16 bits zero.
28325 Integer constant that fits in one signed byte when
28326 incremented by one (-129 ... 126).
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:
28333 asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));
28336 A bit mask suitable for the MM instruction.
28339 Integer constant that is a byte tiled out four times.
28342 The integer zero constant.
28345 Integer constant that is a sign-extended byte tiled out as
28349 Integer constant that fits in one signed byte when incremented
28350 (-129 ... 126), but excluding -1.
28353 A symbolic operand, or a 16-bit fragment of a got, tls, or
28354 pc-relative reference.
28357 Memory operand except postincrement. This is roughly the
28358 same as `m' when not used together with `<' or `>'.
28361 A 4-element vector constant with identical elements.
28364 A 2-element vector constant with identical elements.
28367 _Xtensa--`config/xtensa/constraints.md'_
28370 General-purpose 32-bit register
28373 One-bit boolean register
28376 MAC16 40-bit accumulator register
28379 Signed 12-bit integer constant, for use in MOVI instructions
28382 Signed 8-bit integer constant, for use in ADDI instructions
28385 Integer constant valid for BccI instructions
28388 Unsigned constant valid for BccUI instructions
28393 File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Constraints, Up: C Extensions
28395 6.43 Controlling Names Used in Assembler Code
28396 =============================================
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:
28402 int foo asm ("myfoo") = 2;
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'.
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.
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
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:
28422 extern func () asm ("FUNC");
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.
28435 File: gcc.info, Node: Explicit Reg Vars, Next: Alternate Keywords, Prev: Asm Labels, Up: C Extensions
28437 6.44 Variables in Specified Registers
28438 =====================================
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.
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.
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.
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
28468 * Global Reg Vars::
28472 File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars
28474 6.44.1 Defining Global Register Variables
28475 -----------------------------------------
28477 You can define a global register variable in GNU C like this:
28479 register int *foo asm ("a5");
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.
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.
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'.
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
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.
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).
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
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.
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.
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.
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.
28549 Global register variables may not have initial values, because an
28550 executable file has no means to supply initial contents for a register.
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.
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.
28561 File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars
28563 6.44.2 Specifying Registers for Local Variables
28564 -----------------------------------------------
28566 You can define a local register variable with a specified register like
28569 register int *foo asm ("a5");
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.
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
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'.
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.
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.
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.
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") = ...;
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::.
28614 File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: C Extensions
28616 6.45 Alternate Keywords
28617 =======================
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
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'.
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
28640 #define __asm__ asm
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
28649 File: gcc.info, Node: Incomplete Enums, Next: Function Names, Prev: Alternate Keywords, Up: C Extensions
28651 6.46 Incomplete `enum' Types
28652 ============================
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.
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.
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.
28665 This extension is not supported by GNU C++.
28668 File: gcc.info, Node: Function Names, Next: Return Address, Prev: Incomplete Enums, Up: C Extensions
28670 6.47 Function Names as Strings
28671 ==============================
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:
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
28681 static const char __func__[] = "function-name";
28683 appeared, where function-name is the name of the lexically-enclosing
28684 function. This name is the unadorned name of the function.
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:
28691 #if __STDC_VERSION__ < 199901L
28693 # define __func__ __FUNCTION__
28695 # define __func__ "<unknown>"
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:
28704 extern int printf (char *, ...);
28711 printf ("__FUNCTION__ = %s\n", __FUNCTION__);
28712 printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
28727 __PRETTY_FUNCTION__ = void a::sub(int)
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.
28737 File: gcc.info, Node: Return Address, Next: Vector Extensions, Prev: Function Names, Up: C Extensions
28739 6.48 Getting the Return or Frame Address of a Function
28740 ======================================================
28742 These functions may be used to get information about the callers of a
28745 -- Built-in Function: void * __builtin_return_address (unsigned int
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.
28756 The LEVEL argument must be a constant integer.
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.
28765 Additional post-processing of the returned value may be needed, see
28766 `__builtin_extract_return_addr'.
28768 This function should only be used with a nonzero argument for
28769 debugging purposes.
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.
28778 If no fixup is needed, this function simply passes through ADDR.
28780 -- Built-in Function: void * __builtin_frob_return_address (void *ADDR)
28781 This function does the reverse of `__builtin_extract_return_addr'.
28783 -- Built-in Function: void * __builtin_frame_address (unsigned int
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.
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
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
28807 This function should only be used with a nonzero argument for
28808 debugging purposes.
28811 File: gcc.info, Node: Vector Extensions, Next: Offsetof, Prev: Return Address, Up: C Extensions
28813 6.49 Using Vector Instructions through Built-in Functions
28814 =========================================================
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.
28821 The first step in using these extensions is to provide the necessary
28822 data types. This should be done using an appropriate `typedef':
28824 typedef int v4si __attribute__ ((vector_size (16)));
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.
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.
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
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
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, ^, |, &, ~, %'.
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.
28858 typedef int v4si __attribute__ ((vector_size (16)));
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.
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.
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
28882 typedef int v4si __attribute__ ((vector_size (16)));
28887 a = b + 1; /* a = b + {1,1,1,1}; */
28888 a = 2 * b; /* a = {2,2,2,2} * b; */
28890 a = l + a; /* Error, cannot convert long to int. */
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'.
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.
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.
28908 typedef int v4si __attribute__ ((vector_size (16)));
28910 v4si a = {1,2,3,4};
28911 v4si b = {3,2,1,4};
28914 c = a > b; /* The result would be {0, 0,-1, 0} */
28915 c = a == b; /* The result would be {0,-1, 0,-1} */
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
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
28929 Consider the following example,
28931 typedef int v4si __attribute__ ((vector_size (16)));
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};
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} */
28942 Note that `__builtin_shuffle' is intentionally semantically compatible
28943 with the OpenCL `shuffle' and `shuffle2' functions.
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).
28952 You cannot operate between vectors of different lengths or different
28953 signedness without a cast.
28956 File: gcc.info, Node: Offsetof, Next: __sync Builtins, Prev: Vector Extensions, Up: C Extensions
28961 GCC implements for both C and C++ a syntactic extension to implement
28962 the `offsetof' macro.
28965 "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")"
28967 offsetof_member_designator:
28969 | offsetof_member_designator "." `identifier'
28970 | offsetof_member_designator "[" `expr' "]"
28972 This extension is sufficient such that
28974 #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER)
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.
28981 File: gcc.info, Node: __sync Builtins, Next: __atomic Builtins, Prev: Offsetof, Up: C Extensions
28983 6.51 Legacy __sync Built-in Functions for Atomic Memory Access
28984 ==============================================================
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.
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.
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.
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.
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.
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.
29028 { tmp = *ptr; *ptr OP= value; return tmp; }
29029 { tmp = *ptr; *ptr = ~(tmp & value); return tmp; } // nand
29031 _Note:_ GCC 4.4 and later implement `__sync_fetch_and_nand' as
29032 `*ptr = ~(tmp & value)' instead of `*ptr = ~tmp & value'.
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,
29043 { *ptr OP= value; return *ptr; }
29044 { *ptr = ~(*ptr & value); return *ptr; } // nand
29046 _Note:_ GCC 4.4 and later implement `__sync_nand_and_fetch' as
29047 `*ptr = ~(*ptr & value)' instead of `*ptr = ~*ptr & value'.
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
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.
29059 `__sync_synchronize (...)'
29060 This built-in function issues a full memory barrier.
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'.
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.
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.
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'.
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.
29092 File: gcc.info, Node: __atomic Builtins, Next: x86 specific memory model extensions for transactional memory, Prev: __sync Builtins, Up: C Extensions
29094 6.52 Built-in functions for memory model aware atomic operations
29095 ================================================================
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.
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.
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.
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.
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.
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.
29139 No barriers or synchronization.
29142 Data dependency only for both barrier and synchronization with
29146 Barrier to hoisting of code and synchronizes with release (or
29147 stronger) semantic stores from another thread.
29150 Barrier to sinking of code and synchronizes with acquire (or
29151 stronger) semantic loads from another thread.
29154 Full barrier in both directions and synchronizes with acquire
29155 loads and release stores in another thread.
29158 Full barrier in both directions and synchronizes with acquire
29159 loads and release stores in all threads.
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.
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.
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.
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'.
29183 The valid memory model variants are `__ATOMIC_RELAXED',
29184 `__ATOMIC_SEQ_CST', `__ATOMIC_ACQUIRE', and `__ATOMIC_CONSUME'.
29187 -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int
29189 This is the generic version of an atomic load. It returns the
29190 contents of `*PTR' in `*RET'.
29193 -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int
29195 This built-in function implements an atomic store operation. It
29196 writes `VAL' into `*PTR'.
29198 The valid memory model variants are `__ATOMIC_RELAXED',
29199 `__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'.
29202 -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int
29204 This is the generic version of an atomic store. It stores the
29205 value of `*VAL' into `*PTR'.
29208 -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val,
29210 This built-in function implements an atomic exchange operation.
29211 It writes VAL into `*PTR', and returns the previous contents of
29214 The valid memory model variants are `__ATOMIC_RELAXED',
29215 `__ATOMIC_SEQ_CST', `__ATOMIC_ACQUIRE', `__ATOMIC_RELEASE', and
29216 `__ATOMIC_ACQ_REL'.
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'.
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
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.
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.
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
29258 -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val,
29260 -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val,
29262 -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val,
29264 -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val,
29266 -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int
29268 -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val,
29270 These built-in functions perform the operation suggested by the
29271 name, and return the result of the operation. That is,
29273 { *ptr OP= val; return *ptr; }
29275 All memory models are valid.
29278 -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val,
29280 -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val,
29282 -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val,
29284 -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val,
29286 -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int
29288 -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val,
29290 These built-in functions perform the operation suggested by the
29291 name, and return the value that had previously been in `*PTR'.
29294 { tmp = *ptr; *ptr OP= val; return tmp; }
29296 All memory models are valid.
29299 -- Built-in Function: bool __atomic_test_and_set (void *ptr, int
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".
29306 All memory models are valid.
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.
29313 The valid memory model variants are `__ATOMIC_RELAXED',
29314 `__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'.
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.
29321 All memory orders are valid.
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.
29328 All memory orders are valid.
29331 -- Built-in Function: bool __atomic_always_lock_free (size_t size,
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.
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.
29342 if (_atomic_always_lock_free (sizeof (long long), 0))
29345 -- Built-in Function: bool __atomic_is_lock_free (size_t size, void
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'.
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.
29357 File: gcc.info, Node: x86 specific memory model extensions for transactional memory, Next: Object Size Checking, Prev: __atomic Builtins, Up: C Extensions
29359 6.53 x86 specific memory model extensions for transactional memory
29360 ==================================================================
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.
29366 `__ATOMIC_HLE_ACQUIRE'
29367 Start lock elision on a lock variable. Memory model must be
29368 `__ATOMIC_ACQUIRE' or stronger.
29370 `__ATOMIC_HLE_RELEASE'
29371 End lock elision on a lock variable. Memory model must be
29372 `__ATOMIC_RELEASE' or stronger.
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'
29377 #include <immintrin.h> // For _mm_pause
29379 /* Acquire lock with lock elision */
29380 while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE))
29381 _mm_pause(); /* Abort failed transaction */
29383 /* Free lock with lock elision */
29384 __atomic_clear(&lockvar, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);
29387 File: gcc.info, Node: Object Size Checking, Next: Other Builtins, Prev: x86 specific memory model extensions for transactional memory, Up: C Extensions
29389 6.54 Object Size Checking Built-in Functions
29390 ============================================
29392 GCC implements a limited buffer overflow protection mechanism that can
29393 prevent some buffer overflow attacks.
29395 -- Built-in Function: size_t __builtin_object_size (void * PTR, int
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.
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
29416 struct V { char buf1[10]; int b; char buf2[10]; } var;
29417 char *p = &var.buf1[1], *q = &var.b;
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));
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.
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.
29441 The intended use can be e.g.
29444 #define bos0(dest) __builtin_object_size (dest, 0)
29445 #define memcpy(dest, src, n) \
29446 __builtin___memcpy_chk (dest, src, n, bos0 (dest))
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
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);
29465 Such built-in functions are provided for `memcpy', `mempcpy',
29466 `memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and
29469 There are also checking built-in functions for formatted output
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,
29476 int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
29477 const char *fmt, va_list ap);
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.
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'.
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
29499 File: gcc.info, Node: Other Builtins, Next: Target Builtins, Prev: Object Size Checking, Up: C Extensions
29501 6.55 Other Built-in Functions Provided by GCC
29502 =============================================
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.
29510 The remaining functions are provided for optimization purposes.
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
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
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').
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_'.
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').
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_'.
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.
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.
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.
29617 This built-in function ignores top level qualifiers (e.g., `const',
29618 `volatile'). For example, `int' is equivalent to `const int'.
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.
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}'.
29633 You typically use this function in code whose execution varies
29634 depending on the arguments' types. For example:
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); \
29650 _Note:_ This construct is only available for C.
29653 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
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
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
29668 This built-in function can return an lvalue if the chosen argument
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
29678 __builtin_choose_expr ( \
29679 __builtin_types_compatible_p (typeof (x), double), \
29681 __builtin_choose_expr ( \
29682 __builtin_types_compatible_p (typeof (x), float), \
29684 /* The void expression results in a compile-time error \
29685 when assigning the result to something. */ \
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
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.
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.
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
29721 #define Scale_Value(X) \
29722 (__builtin_constant_p (X) \
29723 ? ((X) * SCALE + OFFSET) : Scale (X))
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.
29733 You may also use `__builtin_constant_p' in initializers for static
29734 data. For instance, you can write
29736 static const int table[] = {
29737 __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
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
29750 Previous versions of GCC did not accept this built-in in data
29751 initializers. The earliest version where it is completely safe is
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.
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:
29766 if (__builtin_expect (x, 0))
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
29773 if (__builtin_expect (ptr != NULL, 1))
29776 when testing pointer or floating-point values.
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.
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.
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
29797 int f (int c, int v)
29805 asm("jmp error_handler");
29806 __builtin_unreachable ();
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.
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:
29819 void function_that_never_returns (void);
29829 function_that_never_returns ();
29830 __builtin_unreachable ();
29835 -- Built-in Function: void *__builtin_assume_aligned (const void *EXP,
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:
29843 void *x = __builtin_assume_aligned (arg, 16);
29845 means that the compiler can assume `x', set to `arg', is at least
29846 16-byte aligned, while:
29848 void *x = __builtin_assume_aligned (arg, 32, 8);
29850 means that the compiler can assume for `x', set to `arg', that
29851 `(char *) x - 8' is 32-byte aligned.
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
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
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
29868 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char
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.
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.
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.
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.
29903 for (i = 0; i < n; i++)
29905 a[i] = a[i] + b[i];
29906 __builtin_prefetch (&a[i+j], 1, 1);
29907 __builtin_prefetch (&b[i+j], 0, 1);
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.
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.
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'.
29925 -- Built-in Function: float __builtin_huge_valf (void)
29926 Similar to `__builtin_huge_val', except the return type is `float'.
29928 -- Built-in Function: long double __builtin_huge_vall (void)
29929 Similar to `__builtin_huge_val', except the return type is `long
29932 -- Built-in Function: int __builtin_fpclassify (int, int, int, 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.
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.
29947 -- Built-in Function: _Decimal32 __builtin_infd32 (void)
29948 Similar to `__builtin_inf', except the return type is `_Decimal32'.
29950 -- Built-in Function: _Decimal64 __builtin_infd64 (void)
29951 Similar to `__builtin_inf', except the return type is `_Decimal64'.
29953 -- Built-in Function: _Decimal128 __builtin_infd128 (void)
29954 Similar to `__builtin_inf', except the return type is
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
29962 -- Built-in Function: long double __builtin_infl (void)
29963 Similar to `__builtin_inf', except the return type is `long
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.
29973 -- Built-in Function: double __builtin_nan (const char *str)
29974 This is an implementation of the ISO C99 function `nan'.
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.
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.
29989 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
29990 Similar to `__builtin_nan', except the return type is `_Decimal32'.
29992 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
29993 Similar to `__builtin_nan', except the return type is `_Decimal64'.
29995 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
29996 Similar to `__builtin_nan', except the return type is
29999 -- Built-in Function: float __builtin_nanf (const char *str)
30000 Similar to `__builtin_nan', except the return type is `float'.
30002 -- Built-in Function: long double __builtin_nanl (const char *str)
30003 Similar to `__builtin_nan', except the return type is `long
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.
30010 -- Built-in Function: float __builtin_nansf (const char *str)
30011 Similar to `__builtin_nans', except the return type is `float'.
30013 -- Built-in Function: long double __builtin_nansl (const char *str)
30014 Similar to `__builtin_nans', except the return type is `long
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.
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.
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.
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.
30034 -- Built-in Function: int __builtin_popcount (unsigned int x)
30035 Returns the number of 1-bits in X.
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.
30040 -- Built-in Function: int __builtin_ffsl (unsigned long)
30041 Similar to `__builtin_ffs', except the argument type is `unsigned
30044 -- Built-in Function: int __builtin_clzl (unsigned long)
30045 Similar to `__builtin_clz', except the argument type is `unsigned
30048 -- Built-in Function: int __builtin_ctzl (unsigned long)
30049 Similar to `__builtin_ctz', except the argument type is `unsigned
30052 -- Built-in Function: int __builtin_clrsbl (long)
30053 Similar to `__builtin_clrsb', except the argument type is `long'.
30055 -- Built-in Function: int __builtin_popcountl (unsigned long)
30056 Similar to `__builtin_popcount', except the argument type is
30059 -- Built-in Function: int __builtin_parityl (unsigned long)
30060 Similar to `__builtin_parity', except the argument type is
30063 -- Built-in Function: int __builtin_ffsll (unsigned long long)
30064 Similar to `__builtin_ffs', except the argument type is `unsigned
30067 -- Built-in Function: int __builtin_clzll (unsigned long long)
30068 Similar to `__builtin_clz', except the argument type is `unsigned
30071 -- Built-in Function: int __builtin_ctzll (unsigned long long)
30072 Similar to `__builtin_ctz', except the argument type is `unsigned
30075 -- Built-in Function: int __builtin_clrsbll (long long)
30076 Similar to `__builtin_clrsb', except the argument type is `long
30079 -- Built-in Function: int __builtin_popcountll (unsigned long long)
30080 Similar to `__builtin_popcount', except the argument type is
30081 `unsigned long long'.
30083 -- Built-in Function: int __builtin_parityll (unsigned long long)
30084 Similar to `__builtin_parity', except the argument type is
30085 `unsigned long long'.
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
30092 -- Built-in Function: float __builtin_powif (float, int)
30093 Similar to `__builtin_powi', except the argument and return types
30096 -- Built-in Function: long double __builtin_powil (long double, int)
30097 Similar to `__builtin_powi', except the argument and return types
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.
30104 -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x)
30105 Similar to `__builtin_bswap16', except the argument and return
30108 -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x)
30109 Similar to `__builtin_bswap32', except the argument and return
30113 File: gcc.info, Node: Target Builtins, Next: Target Format Checks, Prev: Other Builtins, Up: C Extensions
30115 6.56 Built-in Functions Specific to Particular Target Machines
30116 ==============================================================
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.
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::
30148 File: gcc.info, Node: Alpha Built-in Functions, Next: ARM iWMMXt Built-in Functions, Up: Target Builtins
30150 6.56.1 Alpha Built-in Functions
30151 -------------------------------
30153 These built-in functions are available for the Alpha family of
30154 processors, depending on the command-line switches used.
30156 The following built-in functions are always available. They all
30157 generate the machine instruction that is part of the name.
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)
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.
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)
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.
30210 long __builtin_alpha_cttz (long)
30211 long __builtin_alpha_ctlz (long)
30212 long __builtin_alpha_ctpop (long)
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
30219 void *__builtin_thread_pointer (void)
30220 void __builtin_set_thread_pointer (void *)
30223 File: gcc.info, Node: ARM iWMMXt Built-in Functions, Next: ARM NEON Intrinsics, Prev: Alpha Built-in Functions, Up: Target Builtins
30225 6.56.2 ARM iWMMXt Built-in Functions
30226 ------------------------------------
30228 These built-in functions are available for the ARM family of processors
30229 when the `-mcpu=iwmmxt' switch is used:
30231 typedef int v2si __attribute__ ((vector_size (8)));
30232 typedef short v4hi __attribute__ ((vector_size (8)));
30233 typedef char v8qi __attribute__ ((vector_size (8)));
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 ()
30377 File: gcc.info, Node: ARM NEON Intrinsics, Next: AVR Built-in Functions, Prev: ARM iWMMXt Built-in Functions, Up: Target Builtins
30379 6.56.3 ARM NEON Intrinsics
30380 --------------------------
30382 These built-in intrinsics for the ARM Advanced SIMD extension are
30383 available when the `-mfpu=neon' switch is used:
30388 * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t)
30389 _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0'
30391 * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t)
30392 _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0'
30394 * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t)
30395 _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0'
30397 * int32x2_t vadd_s32 (int32x2_t, int32x2_t)
30398 _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0'
30400 * int16x4_t vadd_s16 (int16x4_t, int16x4_t)
30401 _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0'
30403 * int8x8_t vadd_s8 (int8x8_t, int8x8_t)
30404 _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0'
30406 * float32x2_t vadd_f32 (float32x2_t, float32x2_t)
30407 _Form of expected instruction(s):_ `vadd.f32 D0, D0, D0'
30409 * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t)
30411 * int64x1_t vadd_s64 (int64x1_t, int64x1_t)
30413 * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t)
30414 _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0'
30416 * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t)
30417 _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0'
30419 * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t)
30420 _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0'
30422 * int32x4_t vaddq_s32 (int32x4_t, int32x4_t)
30423 _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0'
30425 * int16x8_t vaddq_s16 (int16x8_t, int16x8_t)
30426 _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0'
30428 * int8x16_t vaddq_s8 (int8x16_t, int8x16_t)
30429 _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0'
30431 * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t)
30432 _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0'
30434 * int64x2_t vaddq_s64 (int64x2_t, int64x2_t)
30435 _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0'
30437 * float32x4_t vaddq_f32 (float32x4_t, float32x4_t)
30438 _Form of expected instruction(s):_ `vadd.f32 Q0, Q0, Q0'
30440 * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t)
30441 _Form of expected instruction(s):_ `vaddl.u32 Q0, D0, D0'
30443 * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t)
30444 _Form of expected instruction(s):_ `vaddl.u16 Q0, D0, D0'
30446 * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t)
30447 _Form of expected instruction(s):_ `vaddl.u8 Q0, D0, D0'
30449 * int64x2_t vaddl_s32 (int32x2_t, int32x2_t)
30450 _Form of expected instruction(s):_ `vaddl.s32 Q0, D0, D0'
30452 * int32x4_t vaddl_s16 (int16x4_t, int16x4_t)
30453 _Form of expected instruction(s):_ `vaddl.s16 Q0, D0, D0'
30455 * int16x8_t vaddl_s8 (int8x8_t, int8x8_t)
30456 _Form of expected instruction(s):_ `vaddl.s8 Q0, D0, D0'
30458 * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t)
30459 _Form of expected instruction(s):_ `vaddw.u32 Q0, Q0, D0'
30461 * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t)
30462 _Form of expected instruction(s):_ `vaddw.u16 Q0, Q0, D0'
30464 * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t)
30465 _Form of expected instruction(s):_ `vaddw.u8 Q0, Q0, D0'
30467 * int64x2_t vaddw_s32 (int64x2_t, int32x2_t)
30468 _Form of expected instruction(s):_ `vaddw.s32 Q0, Q0, D0'
30470 * int32x4_t vaddw_s16 (int32x4_t, int16x4_t)
30471 _Form of expected instruction(s):_ `vaddw.s16 Q0, Q0, D0'
30473 * int16x8_t vaddw_s8 (int16x8_t, int8x8_t)
30474 _Form of expected instruction(s):_ `vaddw.s8 Q0, Q0, D0'
30476 * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t)
30477 _Form of expected instruction(s):_ `vhadd.u32 D0, D0, D0'
30479 * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t)
30480 _Form of expected instruction(s):_ `vhadd.u16 D0, D0, D0'
30482 * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t)
30483 _Form of expected instruction(s):_ `vhadd.u8 D0, D0, D0'
30485 * int32x2_t vhadd_s32 (int32x2_t, int32x2_t)
30486 _Form of expected instruction(s):_ `vhadd.s32 D0, D0, D0'
30488 * int16x4_t vhadd_s16 (int16x4_t, int16x4_t)
30489 _Form of expected instruction(s):_ `vhadd.s16 D0, D0, D0'
30491 * int8x8_t vhadd_s8 (int8x8_t, int8x8_t)
30492 _Form of expected instruction(s):_ `vhadd.s8 D0, D0, D0'
30494 * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t)
30495 _Form of expected instruction(s):_ `vhadd.u32 Q0, Q0, Q0'
30497 * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t)
30498 _Form of expected instruction(s):_ `vhadd.u16 Q0, Q0, Q0'
30500 * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t)
30501 _Form of expected instruction(s):_ `vhadd.u8 Q0, Q0, Q0'
30503 * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t)
30504 _Form of expected instruction(s):_ `vhadd.s32 Q0, Q0, Q0'
30506 * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t)
30507 _Form of expected instruction(s):_ `vhadd.s16 Q0, Q0, Q0'
30509 * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t)
30510 _Form of expected instruction(s):_ `vhadd.s8 Q0, Q0, Q0'
30512 * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t)
30513 _Form of expected instruction(s):_ `vrhadd.u32 D0, D0, D0'
30515 * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t)
30516 _Form of expected instruction(s):_ `vrhadd.u16 D0, D0, D0'
30518 * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t)
30519 _Form of expected instruction(s):_ `vrhadd.u8 D0, D0, D0'
30521 * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t)
30522 _Form of expected instruction(s):_ `vrhadd.s32 D0, D0, D0'
30524 * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t)
30525 _Form of expected instruction(s):_ `vrhadd.s16 D0, D0, D0'
30527 * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t)
30528 _Form of expected instruction(s):_ `vrhadd.s8 D0, D0, D0'
30530 * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t)
30531 _Form of expected instruction(s):_ `vrhadd.u32 Q0, Q0, Q0'
30533 * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t)
30534 _Form of expected instruction(s):_ `vrhadd.u16 Q0, Q0, Q0'
30536 * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t)
30537 _Form of expected instruction(s):_ `vrhadd.u8 Q0, Q0, Q0'
30539 * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t)
30540 _Form of expected instruction(s):_ `vrhadd.s32 Q0, Q0, Q0'
30542 * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t)
30543 _Form of expected instruction(s):_ `vrhadd.s16 Q0, Q0, Q0'
30545 * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t)
30546 _Form of expected instruction(s):_ `vrhadd.s8 Q0, Q0, Q0'
30548 * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t)
30549 _Form of expected instruction(s):_ `vqadd.u32 D0, D0, D0'
30551 * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t)
30552 _Form of expected instruction(s):_ `vqadd.u16 D0, D0, D0'
30554 * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t)
30555 _Form of expected instruction(s):_ `vqadd.u8 D0, D0, D0'
30557 * int32x2_t vqadd_s32 (int32x2_t, int32x2_t)
30558 _Form of expected instruction(s):_ `vqadd.s32 D0, D0, D0'
30560 * int16x4_t vqadd_s16 (int16x4_t, int16x4_t)
30561 _Form of expected instruction(s):_ `vqadd.s16 D0, D0, D0'
30563 * int8x8_t vqadd_s8 (int8x8_t, int8x8_t)
30564 _Form of expected instruction(s):_ `vqadd.s8 D0, D0, D0'
30566 * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t)
30567 _Form of expected instruction(s):_ `vqadd.u64 D0, D0, D0'
30569 * int64x1_t vqadd_s64 (int64x1_t, int64x1_t)
30570 _Form of expected instruction(s):_ `vqadd.s64 D0, D0, D0'
30572 * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t)
30573 _Form of expected instruction(s):_ `vqadd.u32 Q0, Q0, Q0'
30575 * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t)
30576 _Form of expected instruction(s):_ `vqadd.u16 Q0, Q0, Q0'
30578 * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t)
30579 _Form of expected instruction(s):_ `vqadd.u8 Q0, Q0, Q0'
30581 * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t)
30582 _Form of expected instruction(s):_ `vqadd.s32 Q0, Q0, Q0'
30584 * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t)
30585 _Form of expected instruction(s):_ `vqadd.s16 Q0, Q0, Q0'
30587 * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t)
30588 _Form of expected instruction(s):_ `vqadd.s8 Q0, Q0, Q0'
30590 * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t)
30591 _Form of expected instruction(s):_ `vqadd.u64 Q0, Q0, Q0'
30593 * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t)
30594 _Form of expected instruction(s):_ `vqadd.s64 Q0, Q0, Q0'
30596 * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t)
30597 _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0'
30599 * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t)
30600 _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0'
30602 * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t)
30603 _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0'
30605 * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t)
30606 _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0'
30608 * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t)
30609 _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0'
30611 * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t)
30612 _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0'
30614 * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t)
30615 _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0'
30617 * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t)
30618 _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0'
30620 * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t)
30621 _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0'
30623 * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t)
30624 _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0'
30626 * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t)
30627 _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0'
30629 * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t)
30630 _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0'
30632 6.56.3.2 Multiplication
30633 .......................
30635 * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t)
30636 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0'
30638 * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t)
30639 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0'
30641 * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t)
30642 _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0'
30644 * int32x2_t vmul_s32 (int32x2_t, int32x2_t)
30645 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0'
30647 * int16x4_t vmul_s16 (int16x4_t, int16x4_t)
30648 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0'
30650 * int8x8_t vmul_s8 (int8x8_t, int8x8_t)
30651 _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0'
30653 * float32x2_t vmul_f32 (float32x2_t, float32x2_t)
30654 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0'
30656 * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t)
30657 _Form of expected instruction(s):_ `vmul.p8 D0, D0, D0'
30659 * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t)
30660 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0'
30662 * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t)
30663 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0'
30665 * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t)
30666 _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0'
30668 * int32x4_t vmulq_s32 (int32x4_t, int32x4_t)
30669 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0'
30671 * int16x8_t vmulq_s16 (int16x8_t, int16x8_t)
30672 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0'
30674 * int8x16_t vmulq_s8 (int8x16_t, int8x16_t)
30675 _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0'
30677 * float32x4_t vmulq_f32 (float32x4_t, float32x4_t)
30678 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, Q0'
30680 * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t)
30681 _Form of expected instruction(s):_ `vmul.p8 Q0, Q0, Q0'
30683 * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t)
30684 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0'
30686 * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t)
30687 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0'
30689 * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t)
30690 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, Q0'
30692 * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t)
30693 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, Q0'
30695 * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t)
30696 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0'
30698 * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t)
30699 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0'
30701 * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t)
30702 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, Q0'
30704 * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t)
30705 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, Q0'
30707 * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t)
30708 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0'
30710 * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t)
30711 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0'
30713 * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t)
30714 _Form of expected instruction(s):_ `vmull.u8 Q0, D0, D0'
30716 * int64x2_t vmull_s32 (int32x2_t, int32x2_t)
30717 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0'
30719 * int32x4_t vmull_s16 (int16x4_t, int16x4_t)
30720 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0'
30722 * int16x8_t vmull_s8 (int8x8_t, int8x8_t)
30723 _Form of expected instruction(s):_ `vmull.s8 Q0, D0, D0'
30725 * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t)
30726 _Form of expected instruction(s):_ `vmull.p8 Q0, D0, D0'
30728 * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t)
30729 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0'
30731 * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t)
30732 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0'
30734 6.56.3.3 Multiply-accumulate
30735 ............................
30737 * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
30738 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0'
30740 * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
30741 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0'
30743 * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
30744 _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0'
30746 * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t)
30747 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0'
30749 * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t)
30750 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0'
30752 * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t)
30753 _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0'
30755 * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t)
30756 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0'
30758 * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
30759 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0'
30761 * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
30762 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0'
30764 * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
30765 _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0'
30767 * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t)
30768 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0'
30770 * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t)
30771 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0'
30773 * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t)
30774 _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0'
30776 * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t)
30777 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, Q0'
30779 * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
30780 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0'
30782 * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
30783 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0'
30785 * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
30786 _Form of expected instruction(s):_ `vmlal.u8 Q0, D0, D0'
30788 * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
30789 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0'
30791 * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
30792 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0'
30794 * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t)
30795 _Form of expected instruction(s):_ `vmlal.s8 Q0, D0, D0'
30797 * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
30798 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0'
30800 * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
30801 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0'
30803 6.56.3.4 Multiply-subtract
30804 ..........................
30806 * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
30807 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0'
30809 * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
30810 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0'
30812 * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
30813 _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0'
30815 * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t)
30816 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0'
30818 * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t)
30819 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0'
30821 * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t)
30822 _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0'
30824 * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t)
30825 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0'
30827 * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
30828 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0'
30830 * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
30831 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0'
30833 * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
30834 _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0'
30836 * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t)
30837 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0'
30839 * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t)
30840 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0'
30842 * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t)
30843 _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0'
30845 * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t)
30846 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, Q0'
30848 * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
30849 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0'
30851 * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
30852 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0'
30854 * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
30855 _Form of expected instruction(s):_ `vmlsl.u8 Q0, D0, D0'
30857 * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
30858 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0'
30860 * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
30861 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0'
30863 * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t)
30864 _Form of expected instruction(s):_ `vmlsl.s8 Q0, D0, D0'
30866 * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
30867 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0'
30869 * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
30870 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0'
30872 6.56.3.5 Fused-multiply-accumulate
30873 ..................................
30875 * float32x2_t vfma_f32 (float32x2_t, float32x2_t, float32x2_t)
30876 _Form of expected instruction(s):_ `vfma.f32 D0, D0, D0'
30878 * float32x4_t vfmaq_f32 (float32x4_t, float32x4_t, float32x4_t)
30879 _Form of expected instruction(s):_ `vfma.f32 Q0, Q0, Q0'
30881 6.56.3.6 Fused-multiply-subtract
30882 ................................
30884 * float32x2_t vfms_f32 (float32x2_t, float32x2_t, float32x2_t)
30885 _Form of expected instruction(s):_ `vfms.f32 D0, D0, D0'
30887 * float32x4_t vfmsq_f32 (float32x4_t, float32x4_t, float32x4_t)
30888 _Form of expected instruction(s):_ `vfms.f32 Q0, Q0, Q0'
30890 6.56.3.7 Round to integral (to nearest, ties to even)
30891 .....................................................
30893 * float32x2_t vrndn_f32 (float32x2_t)
30894 _Form of expected instruction(s):_ `vrintn.f32 D0, D0'
30896 * float32x4_t vrndqn_f32 (float32x4_t)
30897 _Form of expected instruction(s):_ `vrintn.f32 Q0, Q0'
30899 6.56.3.8 Round to integral (to nearest, ties away from zero)
30900 ............................................................
30902 * float32x2_t vrnda_f32 (float32x2_t)
30903 _Form of expected instruction(s):_ `vrinta.f32 D0, D0'
30905 * float32x4_t vrndqa_f32 (float32x4_t)
30906 _Form of expected instruction(s):_ `vrinta.f32 Q0, Q0'
30908 6.56.3.9 Round to integral (towards +Inf)
30909 .........................................
30911 * float32x2_t vrndp_f32 (float32x2_t)
30912 _Form of expected instruction(s):_ `vrintp.f32 D0, D0'
30914 * float32x4_t vrndqp_f32 (float32x4_t)
30915 _Form of expected instruction(s):_ `vrintp.f32 Q0, Q0'
30917 6.56.3.10 Round to integral (towards -Inf)
30918 ..........................................
30920 * float32x2_t vrndm_f32 (float32x2_t)
30921 _Form of expected instruction(s):_ `vrintm.f32 D0, D0'
30923 * float32x4_t vrndqm_f32 (float32x4_t)
30924 _Form of expected instruction(s):_ `vrintm.f32 Q0, Q0'
30926 6.56.3.11 Round to integral (towards 0)
30927 .......................................
30929 * float32x2_t vrnd_f32 (float32x2_t)
30930 _Form of expected instruction(s):_ `vrintz.f32 D0, D0'
30932 * float32x4_t vrndq_f32 (float32x4_t)
30933 _Form of expected instruction(s):_ `vrintz.f32 Q0, Q0'
30935 6.56.3.12 Subtraction
30936 .....................
30938 * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t)
30939 _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0'
30941 * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t)
30942 _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0'
30944 * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t)
30945 _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0'
30947 * int32x2_t vsub_s32 (int32x2_t, int32x2_t)
30948 _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0'
30950 * int16x4_t vsub_s16 (int16x4_t, int16x4_t)
30951 _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0'
30953 * int8x8_t vsub_s8 (int8x8_t, int8x8_t)
30954 _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0'
30956 * float32x2_t vsub_f32 (float32x2_t, float32x2_t)
30957 _Form of expected instruction(s):_ `vsub.f32 D0, D0, D0'
30959 * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t)
30961 * int64x1_t vsub_s64 (int64x1_t, int64x1_t)
30963 * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t)
30964 _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0'
30966 * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t)
30967 _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0'
30969 * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t)
30970 _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0'
30972 * int32x4_t vsubq_s32 (int32x4_t, int32x4_t)
30973 _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0'
30975 * int16x8_t vsubq_s16 (int16x8_t, int16x8_t)
30976 _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0'
30978 * int8x16_t vsubq_s8 (int8x16_t, int8x16_t)
30979 _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0'
30981 * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t)
30982 _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0'
30984 * int64x2_t vsubq_s64 (int64x2_t, int64x2_t)
30985 _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0'
30987 * float32x4_t vsubq_f32 (float32x4_t, float32x4_t)
30988 _Form of expected instruction(s):_ `vsub.f32 Q0, Q0, Q0'
30990 * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t)
30991 _Form of expected instruction(s):_ `vsubl.u32 Q0, D0, D0'
30993 * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t)
30994 _Form of expected instruction(s):_ `vsubl.u16 Q0, D0, D0'
30996 * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t)
30997 _Form of expected instruction(s):_ `vsubl.u8 Q0, D0, D0'
30999 * int64x2_t vsubl_s32 (int32x2_t, int32x2_t)
31000 _Form of expected instruction(s):_ `vsubl.s32 Q0, D0, D0'
31002 * int32x4_t vsubl_s16 (int16x4_t, int16x4_t)
31003 _Form of expected instruction(s):_ `vsubl.s16 Q0, D0, D0'
31005 * int16x8_t vsubl_s8 (int8x8_t, int8x8_t)
31006 _Form of expected instruction(s):_ `vsubl.s8 Q0, D0, D0'
31008 * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t)
31009 _Form of expected instruction(s):_ `vsubw.u32 Q0, Q0, D0'
31011 * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t)
31012 _Form of expected instruction(s):_ `vsubw.u16 Q0, Q0, D0'
31014 * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t)
31015 _Form of expected instruction(s):_ `vsubw.u8 Q0, Q0, D0'
31017 * int64x2_t vsubw_s32 (int64x2_t, int32x2_t)
31018 _Form of expected instruction(s):_ `vsubw.s32 Q0, Q0, D0'
31020 * int32x4_t vsubw_s16 (int32x4_t, int16x4_t)
31021 _Form of expected instruction(s):_ `vsubw.s16 Q0, Q0, D0'
31023 * int16x8_t vsubw_s8 (int16x8_t, int8x8_t)
31024 _Form of expected instruction(s):_ `vsubw.s8 Q0, Q0, D0'
31026 * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t)
31027 _Form of expected instruction(s):_ `vhsub.u32 D0, D0, D0'
31029 * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t)
31030 _Form of expected instruction(s):_ `vhsub.u16 D0, D0, D0'
31032 * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t)
31033 _Form of expected instruction(s):_ `vhsub.u8 D0, D0, D0'
31035 * int32x2_t vhsub_s32 (int32x2_t, int32x2_t)
31036 _Form of expected instruction(s):_ `vhsub.s32 D0, D0, D0'
31038 * int16x4_t vhsub_s16 (int16x4_t, int16x4_t)
31039 _Form of expected instruction(s):_ `vhsub.s16 D0, D0, D0'
31041 * int8x8_t vhsub_s8 (int8x8_t, int8x8_t)
31042 _Form of expected instruction(s):_ `vhsub.s8 D0, D0, D0'
31044 * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t)
31045 _Form of expected instruction(s):_ `vhsub.u32 Q0, Q0, Q0'
31047 * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t)
31048 _Form of expected instruction(s):_ `vhsub.u16 Q0, Q0, Q0'
31050 * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t)
31051 _Form of expected instruction(s):_ `vhsub.u8 Q0, Q0, Q0'
31053 * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t)
31054 _Form of expected instruction(s):_ `vhsub.s32 Q0, Q0, Q0'
31056 * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t)
31057 _Form of expected instruction(s):_ `vhsub.s16 Q0, Q0, Q0'
31059 * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t)
31060 _Form of expected instruction(s):_ `vhsub.s8 Q0, Q0, Q0'
31062 * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t)
31063 _Form of expected instruction(s):_ `vqsub.u32 D0, D0, D0'
31065 * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t)
31066 _Form of expected instruction(s):_ `vqsub.u16 D0, D0, D0'
31068 * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t)
31069 _Form of expected instruction(s):_ `vqsub.u8 D0, D0, D0'
31071 * int32x2_t vqsub_s32 (int32x2_t, int32x2_t)
31072 _Form of expected instruction(s):_ `vqsub.s32 D0, D0, D0'
31074 * int16x4_t vqsub_s16 (int16x4_t, int16x4_t)
31075 _Form of expected instruction(s):_ `vqsub.s16 D0, D0, D0'
31077 * int8x8_t vqsub_s8 (int8x8_t, int8x8_t)
31078 _Form of expected instruction(s):_ `vqsub.s8 D0, D0, D0'
31080 * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t)
31081 _Form of expected instruction(s):_ `vqsub.u64 D0, D0, D0'
31083 * int64x1_t vqsub_s64 (int64x1_t, int64x1_t)
31084 _Form of expected instruction(s):_ `vqsub.s64 D0, D0, D0'
31086 * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t)
31087 _Form of expected instruction(s):_ `vqsub.u32 Q0, Q0, Q0'
31089 * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t)
31090 _Form of expected instruction(s):_ `vqsub.u16 Q0, Q0, Q0'
31092 * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t)
31093 _Form of expected instruction(s):_ `vqsub.u8 Q0, Q0, Q0'
31095 * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t)
31096 _Form of expected instruction(s):_ `vqsub.s32 Q0, Q0, Q0'
31098 * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t)
31099 _Form of expected instruction(s):_ `vqsub.s16 Q0, Q0, Q0'
31101 * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t)
31102 _Form of expected instruction(s):_ `vqsub.s8 Q0, Q0, Q0'
31104 * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t)
31105 _Form of expected instruction(s):_ `vqsub.u64 Q0, Q0, Q0'
31107 * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t)
31108 _Form of expected instruction(s):_ `vqsub.s64 Q0, Q0, Q0'
31110 * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t)
31111 _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0'
31113 * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t)
31114 _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0'
31116 * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t)
31117 _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0'
31119 * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t)
31120 _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0'
31122 * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t)
31123 _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0'
31125 * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t)
31126 _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0'
31128 * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t)
31129 _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0'
31131 * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t)
31132 _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0'
31134 * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t)
31135 _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0'
31137 * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t)
31138 _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0'
31140 * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t)
31141 _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0'
31143 * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t)
31144 _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0'
31146 6.56.3.13 Comparison (equal-to)
31147 ...............................
31149 * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t)
31150 _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0'
31152 * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t)
31153 _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0'
31155 * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t)
31156 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
31158 * uint32x2_t vceq_s32 (int32x2_t, int32x2_t)
31159 _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0'
31161 * uint16x4_t vceq_s16 (int16x4_t, int16x4_t)
31162 _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0'
31164 * uint8x8_t vceq_s8 (int8x8_t, int8x8_t)
31165 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
31167 * uint32x2_t vceq_f32 (float32x2_t, float32x2_t)
31168 _Form of expected instruction(s):_ `vceq.f32 D0, D0, D0'
31170 * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t)
31171 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
31173 * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t)
31174 _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0'
31176 * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t)
31177 _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0'
31179 * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t)
31180 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
31182 * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t)
31183 _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0'
31185 * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t)
31186 _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0'
31188 * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t)
31189 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
31191 * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t)
31192 _Form of expected instruction(s):_ `vceq.f32 Q0, Q0, Q0'
31194 * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t)
31195 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
31197 6.56.3.14 Comparison (greater-than-or-equal-to)
31198 ...............................................
31200 * uint32x2_t vcge_s32 (int32x2_t, int32x2_t)
31201 _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0'
31203 * uint16x4_t vcge_s16 (int16x4_t, int16x4_t)
31204 _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0'
31206 * uint8x8_t vcge_s8 (int8x8_t, int8x8_t)
31207 _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0'
31209 * uint32x2_t vcge_f32 (float32x2_t, float32x2_t)
31210 _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0'
31212 * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t)
31213 _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0'
31215 * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t)
31216 _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0'
31218 * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t)
31219 _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0'
31221 * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t)
31222 _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0'
31224 * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t)
31225 _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0'
31227 * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t)
31228 _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0'
31230 * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t)
31231 _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0'
31233 * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t)
31234 _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0'
31236 * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t)
31237 _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0'
31239 * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t)
31240 _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0'
31242 6.56.3.15 Comparison (less-than-or-equal-to)
31243 ............................................
31245 * uint32x2_t vcle_s32 (int32x2_t, int32x2_t)
31246 _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0'
31248 * uint16x4_t vcle_s16 (int16x4_t, int16x4_t)
31249 _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0'
31251 * uint8x8_t vcle_s8 (int8x8_t, int8x8_t)
31252 _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0'
31254 * uint32x2_t vcle_f32 (float32x2_t, float32x2_t)
31255 _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0'
31257 * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t)
31258 _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0'
31260 * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t)
31261 _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0'
31263 * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t)
31264 _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0'
31266 * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t)
31267 _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0'
31269 * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t)
31270 _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0'
31272 * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t)
31273 _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0'
31275 * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t)
31276 _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0'
31278 * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t)
31279 _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0'
31281 * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t)
31282 _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0'
31284 * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t)
31285 _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0'
31287 6.56.3.16 Comparison (greater-than)
31288 ...................................
31290 * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t)
31291 _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0'
31293 * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t)
31294 _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0'
31296 * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t)
31297 _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0'
31299 * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t)
31300 _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0'
31302 * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t)
31303 _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0'
31305 * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t)
31306 _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0'
31308 * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t)
31309 _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0'
31311 * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t)
31312 _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0'
31314 * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t)
31315 _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0'
31317 * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t)
31318 _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0'
31320 * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t)
31321 _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0'
31323 * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t)
31324 _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0'
31326 * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t)
31327 _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0'
31329 * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t)
31330 _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0'
31332 6.56.3.17 Comparison (less-than)
31333 ................................
31335 * uint32x2_t vclt_s32 (int32x2_t, int32x2_t)
31336 _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0'
31338 * uint16x4_t vclt_s16 (int16x4_t, int16x4_t)
31339 _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0'
31341 * uint8x8_t vclt_s8 (int8x8_t, int8x8_t)
31342 _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0'
31344 * uint32x2_t vclt_f32 (float32x2_t, float32x2_t)
31345 _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0'
31347 * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t)
31348 _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0'
31350 * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t)
31351 _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0'
31353 * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t)
31354 _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0'
31356 * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t)
31357 _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0'
31359 * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t)
31360 _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0'
31362 * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t)
31363 _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0'
31365 * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t)
31366 _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0'
31368 * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t)
31369 _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0'
31371 * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t)
31372 _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0'
31374 * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t)
31375 _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0'
31377 6.56.3.18 Comparison (absolute greater-than-or-equal-to)
31378 ........................................................
31380 * uint32x2_t vcage_f32 (float32x2_t, float32x2_t)
31381 _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0'
31383 * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t)
31384 _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0'
31386 6.56.3.19 Comparison (absolute less-than-or-equal-to)
31387 .....................................................
31389 * uint32x2_t vcale_f32 (float32x2_t, float32x2_t)
31390 _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0'
31392 * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t)
31393 _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0'
31395 6.56.3.20 Comparison (absolute greater-than)
31396 ............................................
31398 * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t)
31399 _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0'
31401 * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t)
31402 _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0'
31404 6.56.3.21 Comparison (absolute less-than)
31405 .........................................
31407 * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t)
31408 _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0'
31410 * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t)
31411 _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0'
31413 6.56.3.22 Test bits
31414 ...................
31416 * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t)
31417 _Form of expected instruction(s):_ `vtst.32 D0, D0, D0'
31419 * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t)
31420 _Form of expected instruction(s):_ `vtst.16 D0, D0, D0'
31422 * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t)
31423 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
31425 * uint32x2_t vtst_s32 (int32x2_t, int32x2_t)
31426 _Form of expected instruction(s):_ `vtst.32 D0, D0, D0'
31428 * uint16x4_t vtst_s16 (int16x4_t, int16x4_t)
31429 _Form of expected instruction(s):_ `vtst.16 D0, D0, D0'
31431 * uint8x8_t vtst_s8 (int8x8_t, int8x8_t)
31432 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
31434 * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t)
31435 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
31437 * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t)
31438 _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0'
31440 * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t)
31441 _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0'
31443 * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t)
31444 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
31446 * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t)
31447 _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0'
31449 * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t)
31450 _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0'
31452 * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t)
31453 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
31455 * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t)
31456 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
31458 6.56.3.23 Absolute difference
31459 .............................
31461 * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t)
31462 _Form of expected instruction(s):_ `vabd.u32 D0, D0, D0'
31464 * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t)
31465 _Form of expected instruction(s):_ `vabd.u16 D0, D0, D0'
31467 * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t)
31468 _Form of expected instruction(s):_ `vabd.u8 D0, D0, D0'
31470 * int32x2_t vabd_s32 (int32x2_t, int32x2_t)
31471 _Form of expected instruction(s):_ `vabd.s32 D0, D0, D0'
31473 * int16x4_t vabd_s16 (int16x4_t, int16x4_t)
31474 _Form of expected instruction(s):_ `vabd.s16 D0, D0, D0'
31476 * int8x8_t vabd_s8 (int8x8_t, int8x8_t)
31477 _Form of expected instruction(s):_ `vabd.s8 D0, D0, D0'
31479 * float32x2_t vabd_f32 (float32x2_t, float32x2_t)
31480 _Form of expected instruction(s):_ `vabd.f32 D0, D0, D0'
31482 * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t)
31483 _Form of expected instruction(s):_ `vabd.u32 Q0, Q0, Q0'
31485 * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t)
31486 _Form of expected instruction(s):_ `vabd.u16 Q0, Q0, Q0'
31488 * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t)
31489 _Form of expected instruction(s):_ `vabd.u8 Q0, Q0, Q0'
31491 * int32x4_t vabdq_s32 (int32x4_t, int32x4_t)
31492 _Form of expected instruction(s):_ `vabd.s32 Q0, Q0, Q0'
31494 * int16x8_t vabdq_s16 (int16x8_t, int16x8_t)
31495 _Form of expected instruction(s):_ `vabd.s16 Q0, Q0, Q0'
31497 * int8x16_t vabdq_s8 (int8x16_t, int8x16_t)
31498 _Form of expected instruction(s):_ `vabd.s8 Q0, Q0, Q0'
31500 * float32x4_t vabdq_f32 (float32x4_t, float32x4_t)
31501 _Form of expected instruction(s):_ `vabd.f32 Q0, Q0, Q0'
31503 * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t)
31504 _Form of expected instruction(s):_ `vabdl.u32 Q0, D0, D0'
31506 * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t)
31507 _Form of expected instruction(s):_ `vabdl.u16 Q0, D0, D0'
31509 * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t)
31510 _Form of expected instruction(s):_ `vabdl.u8 Q0, D0, D0'
31512 * int64x2_t vabdl_s32 (int32x2_t, int32x2_t)
31513 _Form of expected instruction(s):_ `vabdl.s32 Q0, D0, D0'
31515 * int32x4_t vabdl_s16 (int16x4_t, int16x4_t)
31516 _Form of expected instruction(s):_ `vabdl.s16 Q0, D0, D0'
31518 * int16x8_t vabdl_s8 (int8x8_t, int8x8_t)
31519 _Form of expected instruction(s):_ `vabdl.s8 Q0, D0, D0'
31521 6.56.3.24 Absolute difference and accumulate
31522 ............................................
31524 * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
31525 _Form of expected instruction(s):_ `vaba.u32 D0, D0, D0'
31527 * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
31528 _Form of expected instruction(s):_ `vaba.u16 D0, D0, D0'
31530 * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
31531 _Form of expected instruction(s):_ `vaba.u8 D0, D0, D0'
31533 * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t)
31534 _Form of expected instruction(s):_ `vaba.s32 D0, D0, D0'
31536 * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t)
31537 _Form of expected instruction(s):_ `vaba.s16 D0, D0, D0'
31539 * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t)
31540 _Form of expected instruction(s):_ `vaba.s8 D0, D0, D0'
31542 * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
31543 _Form of expected instruction(s):_ `vaba.u32 Q0, Q0, Q0'
31545 * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
31546 _Form of expected instruction(s):_ `vaba.u16 Q0, Q0, Q0'
31548 * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
31549 _Form of expected instruction(s):_ `vaba.u8 Q0, Q0, Q0'
31551 * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t)
31552 _Form of expected instruction(s):_ `vaba.s32 Q0, Q0, Q0'
31554 * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t)
31555 _Form of expected instruction(s):_ `vaba.s16 Q0, Q0, Q0'
31557 * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t)
31558 _Form of expected instruction(s):_ `vaba.s8 Q0, Q0, Q0'
31560 * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
31561 _Form of expected instruction(s):_ `vabal.u32 Q0, D0, D0'
31563 * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
31564 _Form of expected instruction(s):_ `vabal.u16 Q0, D0, D0'
31566 * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
31567 _Form of expected instruction(s):_ `vabal.u8 Q0, D0, D0'
31569 * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t)
31570 _Form of expected instruction(s):_ `vabal.s32 Q0, D0, D0'
31572 * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t)
31573 _Form of expected instruction(s):_ `vabal.s16 Q0, D0, D0'
31575 * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t)
31576 _Form of expected instruction(s):_ `vabal.s8 Q0, D0, D0'
31581 * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t)
31582 _Form of expected instruction(s):_ `vmax.u32 D0, D0, D0'
31584 * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t)
31585 _Form of expected instruction(s):_ `vmax.u16 D0, D0, D0'
31587 * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t)
31588 _Form of expected instruction(s):_ `vmax.u8 D0, D0, D0'
31590 * int32x2_t vmax_s32 (int32x2_t, int32x2_t)
31591 _Form of expected instruction(s):_ `vmax.s32 D0, D0, D0'
31593 * int16x4_t vmax_s16 (int16x4_t, int16x4_t)
31594 _Form of expected instruction(s):_ `vmax.s16 D0, D0, D0'
31596 * int8x8_t vmax_s8 (int8x8_t, int8x8_t)
31597 _Form of expected instruction(s):_ `vmax.s8 D0, D0, D0'
31599 * float32x2_t vmax_f32 (float32x2_t, float32x2_t)
31600 _Form of expected instruction(s):_ `vmax.f32 D0, D0, D0'
31602 * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t)
31603 _Form of expected instruction(s):_ `vmax.u32 Q0, Q0, Q0'
31605 * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t)
31606 _Form of expected instruction(s):_ `vmax.u16 Q0, Q0, Q0'
31608 * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t)
31609 _Form of expected instruction(s):_ `vmax.u8 Q0, Q0, Q0'
31611 * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t)
31612 _Form of expected instruction(s):_ `vmax.s32 Q0, Q0, Q0'
31614 * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t)
31615 _Form of expected instruction(s):_ `vmax.s16 Q0, Q0, Q0'
31617 * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t)
31618 _Form of expected instruction(s):_ `vmax.s8 Q0, Q0, Q0'
31620 * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t)
31621 _Form of expected instruction(s):_ `vmax.f32 Q0, Q0, Q0'
31626 * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t)
31627 _Form of expected instruction(s):_ `vmin.u32 D0, D0, D0'
31629 * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t)
31630 _Form of expected instruction(s):_ `vmin.u16 D0, D0, D0'
31632 * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t)
31633 _Form of expected instruction(s):_ `vmin.u8 D0, D0, D0'
31635 * int32x2_t vmin_s32 (int32x2_t, int32x2_t)
31636 _Form of expected instruction(s):_ `vmin.s32 D0, D0, D0'
31638 * int16x4_t vmin_s16 (int16x4_t, int16x4_t)
31639 _Form of expected instruction(s):_ `vmin.s16 D0, D0, D0'
31641 * int8x8_t vmin_s8 (int8x8_t, int8x8_t)
31642 _Form of expected instruction(s):_ `vmin.s8 D0, D0, D0'
31644 * float32x2_t vmin_f32 (float32x2_t, float32x2_t)
31645 _Form of expected instruction(s):_ `vmin.f32 D0, D0, D0'
31647 * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t)
31648 _Form of expected instruction(s):_ `vmin.u32 Q0, Q0, Q0'
31650 * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t)
31651 _Form of expected instruction(s):_ `vmin.u16 Q0, Q0, Q0'
31653 * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t)
31654 _Form of expected instruction(s):_ `vmin.u8 Q0, Q0, Q0'
31656 * int32x4_t vminq_s32 (int32x4_t, int32x4_t)
31657 _Form of expected instruction(s):_ `vmin.s32 Q0, Q0, Q0'
31659 * int16x8_t vminq_s16 (int16x8_t, int16x8_t)
31660 _Form of expected instruction(s):_ `vmin.s16 Q0, Q0, Q0'
31662 * int8x16_t vminq_s8 (int8x16_t, int8x16_t)
31663 _Form of expected instruction(s):_ `vmin.s8 Q0, Q0, Q0'
31665 * float32x4_t vminq_f32 (float32x4_t, float32x4_t)
31666 _Form of expected instruction(s):_ `vmin.f32 Q0, Q0, Q0'
31668 6.56.3.27 Pairwise add
31669 ......................
31671 * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t)
31672 _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0'
31674 * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t)
31675 _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0'
31677 * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t)
31678 _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0'
31680 * int32x2_t vpadd_s32 (int32x2_t, int32x2_t)
31681 _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0'
31683 * int16x4_t vpadd_s16 (int16x4_t, int16x4_t)
31684 _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0'
31686 * int8x8_t vpadd_s8 (int8x8_t, int8x8_t)
31687 _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0'
31689 * float32x2_t vpadd_f32 (float32x2_t, float32x2_t)
31690 _Form of expected instruction(s):_ `vpadd.f32 D0, D0, D0'
31692 * uint64x1_t vpaddl_u32 (uint32x2_t)
31693 _Form of expected instruction(s):_ `vpaddl.u32 D0, D0'
31695 * uint32x2_t vpaddl_u16 (uint16x4_t)
31696 _Form of expected instruction(s):_ `vpaddl.u16 D0, D0'
31698 * uint16x4_t vpaddl_u8 (uint8x8_t)
31699 _Form of expected instruction(s):_ `vpaddl.u8 D0, D0'
31701 * int64x1_t vpaddl_s32 (int32x2_t)
31702 _Form of expected instruction(s):_ `vpaddl.s32 D0, D0'
31704 * int32x2_t vpaddl_s16 (int16x4_t)
31705 _Form of expected instruction(s):_ `vpaddl.s16 D0, D0'
31707 * int16x4_t vpaddl_s8 (int8x8_t)
31708 _Form of expected instruction(s):_ `vpaddl.s8 D0, D0'
31710 * uint64x2_t vpaddlq_u32 (uint32x4_t)
31711 _Form of expected instruction(s):_ `vpaddl.u32 Q0, Q0'
31713 * uint32x4_t vpaddlq_u16 (uint16x8_t)
31714 _Form of expected instruction(s):_ `vpaddl.u16 Q0, Q0'
31716 * uint16x8_t vpaddlq_u8 (uint8x16_t)
31717 _Form of expected instruction(s):_ `vpaddl.u8 Q0, Q0'
31719 * int64x2_t vpaddlq_s32 (int32x4_t)
31720 _Form of expected instruction(s):_ `vpaddl.s32 Q0, Q0'
31722 * int32x4_t vpaddlq_s16 (int16x8_t)
31723 _Form of expected instruction(s):_ `vpaddl.s16 Q0, Q0'
31725 * int16x8_t vpaddlq_s8 (int8x16_t)
31726 _Form of expected instruction(s):_ `vpaddl.s8 Q0, Q0'
31728 6.56.3.28 Pairwise add, single_opcode widen and accumulate
31729 ..........................................................
31731 * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t)
31732 _Form of expected instruction(s):_ `vpadal.u32 D0, D0'
31734 * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t)
31735 _Form of expected instruction(s):_ `vpadal.u16 D0, D0'
31737 * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t)
31738 _Form of expected instruction(s):_ `vpadal.u8 D0, D0'
31740 * int64x1_t vpadal_s32 (int64x1_t, int32x2_t)
31741 _Form of expected instruction(s):_ `vpadal.s32 D0, D0'
31743 * int32x2_t vpadal_s16 (int32x2_t, int16x4_t)
31744 _Form of expected instruction(s):_ `vpadal.s16 D0, D0'
31746 * int16x4_t vpadal_s8 (int16x4_t, int8x8_t)
31747 _Form of expected instruction(s):_ `vpadal.s8 D0, D0'
31749 * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t)
31750 _Form of expected instruction(s):_ `vpadal.u32 Q0, Q0'
31752 * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t)
31753 _Form of expected instruction(s):_ `vpadal.u16 Q0, Q0'
31755 * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t)
31756 _Form of expected instruction(s):_ `vpadal.u8 Q0, Q0'
31758 * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t)
31759 _Form of expected instruction(s):_ `vpadal.s32 Q0, Q0'
31761 * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t)
31762 _Form of expected instruction(s):_ `vpadal.s16 Q0, Q0'
31764 * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t)
31765 _Form of expected instruction(s):_ `vpadal.s8 Q0, Q0'
31767 6.56.3.29 Folding maximum
31768 .........................
31770 * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t)
31771 _Form of expected instruction(s):_ `vpmax.u32 D0, D0, D0'
31773 * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t)
31774 _Form of expected instruction(s):_ `vpmax.u16 D0, D0, D0'
31776 * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t)
31777 _Form of expected instruction(s):_ `vpmax.u8 D0, D0, D0'
31779 * int32x2_t vpmax_s32 (int32x2_t, int32x2_t)
31780 _Form of expected instruction(s):_ `vpmax.s32 D0, D0, D0'
31782 * int16x4_t vpmax_s16 (int16x4_t, int16x4_t)
31783 _Form of expected instruction(s):_ `vpmax.s16 D0, D0, D0'
31785 * int8x8_t vpmax_s8 (int8x8_t, int8x8_t)
31786 _Form of expected instruction(s):_ `vpmax.s8 D0, D0, D0'
31788 * float32x2_t vpmax_f32 (float32x2_t, float32x2_t)
31789 _Form of expected instruction(s):_ `vpmax.f32 D0, D0, D0'
31791 6.56.3.30 Folding minimum
31792 .........................
31794 * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t)
31795 _Form of expected instruction(s):_ `vpmin.u32 D0, D0, D0'
31797 * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t)
31798 _Form of expected instruction(s):_ `vpmin.u16 D0, D0, D0'
31800 * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t)
31801 _Form of expected instruction(s):_ `vpmin.u8 D0, D0, D0'
31803 * int32x2_t vpmin_s32 (int32x2_t, int32x2_t)
31804 _Form of expected instruction(s):_ `vpmin.s32 D0, D0, D0'
31806 * int16x4_t vpmin_s16 (int16x4_t, int16x4_t)
31807 _Form of expected instruction(s):_ `vpmin.s16 D0, D0, D0'
31809 * int8x8_t vpmin_s8 (int8x8_t, int8x8_t)
31810 _Form of expected instruction(s):_ `vpmin.s8 D0, D0, D0'
31812 * float32x2_t vpmin_f32 (float32x2_t, float32x2_t)
31813 _Form of expected instruction(s):_ `vpmin.f32 D0, D0, D0'
31815 6.56.3.31 Reciprocal step
31816 .........................
31818 * float32x2_t vrecps_f32 (float32x2_t, float32x2_t)
31819 _Form of expected instruction(s):_ `vrecps.f32 D0, D0, D0'
31821 * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t)
31822 _Form of expected instruction(s):_ `vrecps.f32 Q0, Q0, Q0'
31824 * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t)
31825 _Form of expected instruction(s):_ `vrsqrts.f32 D0, D0, D0'
31827 * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t)
31828 _Form of expected instruction(s):_ `vrsqrts.f32 Q0, Q0, Q0'
31830 6.56.3.32 Vector shift left
31831 ...........................
31833 * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t)
31834 _Form of expected instruction(s):_ `vshl.u32 D0, D0, D0'
31836 * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t)
31837 _Form of expected instruction(s):_ `vshl.u16 D0, D0, D0'
31839 * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t)
31840 _Form of expected instruction(s):_ `vshl.u8 D0, D0, D0'
31842 * int32x2_t vshl_s32 (int32x2_t, int32x2_t)
31843 _Form of expected instruction(s):_ `vshl.s32 D0, D0, D0'
31845 * int16x4_t vshl_s16 (int16x4_t, int16x4_t)
31846 _Form of expected instruction(s):_ `vshl.s16 D0, D0, D0'
31848 * int8x8_t vshl_s8 (int8x8_t, int8x8_t)
31849 _Form of expected instruction(s):_ `vshl.s8 D0, D0, D0'
31851 * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t)
31852 _Form of expected instruction(s):_ `vshl.u64 D0, D0, D0'
31854 * int64x1_t vshl_s64 (int64x1_t, int64x1_t)
31855 _Form of expected instruction(s):_ `vshl.s64 D0, D0, D0'
31857 * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t)
31858 _Form of expected instruction(s):_ `vshl.u32 Q0, Q0, Q0'
31860 * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t)
31861 _Form of expected instruction(s):_ `vshl.u16 Q0, Q0, Q0'
31863 * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t)
31864 _Form of expected instruction(s):_ `vshl.u8 Q0, Q0, Q0'
31866 * int32x4_t vshlq_s32 (int32x4_t, int32x4_t)
31867 _Form of expected instruction(s):_ `vshl.s32 Q0, Q0, Q0'
31869 * int16x8_t vshlq_s16 (int16x8_t, int16x8_t)
31870 _Form of expected instruction(s):_ `vshl.s16 Q0, Q0, Q0'
31872 * int8x16_t vshlq_s8 (int8x16_t, int8x16_t)
31873 _Form of expected instruction(s):_ `vshl.s8 Q0, Q0, Q0'
31875 * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t)
31876 _Form of expected instruction(s):_ `vshl.u64 Q0, Q0, Q0'
31878 * int64x2_t vshlq_s64 (int64x2_t, int64x2_t)
31879 _Form of expected instruction(s):_ `vshl.s64 Q0, Q0, Q0'
31881 * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t)
31882 _Form of expected instruction(s):_ `vrshl.u32 D0, D0, D0'
31884 * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t)
31885 _Form of expected instruction(s):_ `vrshl.u16 D0, D0, D0'
31887 * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t)
31888 _Form of expected instruction(s):_ `vrshl.u8 D0, D0, D0'
31890 * int32x2_t vrshl_s32 (int32x2_t, int32x2_t)
31891 _Form of expected instruction(s):_ `vrshl.s32 D0, D0, D0'
31893 * int16x4_t vrshl_s16 (int16x4_t, int16x4_t)
31894 _Form of expected instruction(s):_ `vrshl.s16 D0, D0, D0'
31896 * int8x8_t vrshl_s8 (int8x8_t, int8x8_t)
31897 _Form of expected instruction(s):_ `vrshl.s8 D0, D0, D0'
31899 * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t)
31900 _Form of expected instruction(s):_ `vrshl.u64 D0, D0, D0'
31902 * int64x1_t vrshl_s64 (int64x1_t, int64x1_t)
31903 _Form of expected instruction(s):_ `vrshl.s64 D0, D0, D0'
31905 * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t)
31906 _Form of expected instruction(s):_ `vrshl.u32 Q0, Q0, Q0'
31908 * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t)
31909 _Form of expected instruction(s):_ `vrshl.u16 Q0, Q0, Q0'
31911 * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t)
31912 _Form of expected instruction(s):_ `vrshl.u8 Q0, Q0, Q0'
31914 * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t)
31915 _Form of expected instruction(s):_ `vrshl.s32 Q0, Q0, Q0'
31917 * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t)
31918 _Form of expected instruction(s):_ `vrshl.s16 Q0, Q0, Q0'
31920 * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t)
31921 _Form of expected instruction(s):_ `vrshl.s8 Q0, Q0, Q0'
31923 * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t)
31924 _Form of expected instruction(s):_ `vrshl.u64 Q0, Q0, Q0'
31926 * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t)
31927 _Form of expected instruction(s):_ `vrshl.s64 Q0, Q0, Q0'
31929 * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t)
31930 _Form of expected instruction(s):_ `vqshl.u32 D0, D0, D0'
31932 * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t)
31933 _Form of expected instruction(s):_ `vqshl.u16 D0, D0, D0'
31935 * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t)
31936 _Form of expected instruction(s):_ `vqshl.u8 D0, D0, D0'
31938 * int32x2_t vqshl_s32 (int32x2_t, int32x2_t)
31939 _Form of expected instruction(s):_ `vqshl.s32 D0, D0, D0'
31941 * int16x4_t vqshl_s16 (int16x4_t, int16x4_t)
31942 _Form of expected instruction(s):_ `vqshl.s16 D0, D0, D0'
31944 * int8x8_t vqshl_s8 (int8x8_t, int8x8_t)
31945 _Form of expected instruction(s):_ `vqshl.s8 D0, D0, D0'
31947 * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t)
31948 _Form of expected instruction(s):_ `vqshl.u64 D0, D0, D0'
31950 * int64x1_t vqshl_s64 (int64x1_t, int64x1_t)
31951 _Form of expected instruction(s):_ `vqshl.s64 D0, D0, D0'
31953 * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t)
31954 _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, Q0'
31956 * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t)
31957 _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, Q0'
31959 * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t)
31960 _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, Q0'
31962 * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t)
31963 _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, Q0'
31965 * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t)
31966 _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, Q0'
31968 * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t)
31969 _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, Q0'
31971 * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t)
31972 _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, Q0'
31974 * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t)
31975 _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, Q0'
31977 * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t)
31978 _Form of expected instruction(s):_ `vqrshl.u32 D0, D0, D0'
31980 * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t)
31981 _Form of expected instruction(s):_ `vqrshl.u16 D0, D0, D0'
31983 * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t)
31984 _Form of expected instruction(s):_ `vqrshl.u8 D0, D0, D0'
31986 * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t)
31987 _Form of expected instruction(s):_ `vqrshl.s32 D0, D0, D0'
31989 * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t)
31990 _Form of expected instruction(s):_ `vqrshl.s16 D0, D0, D0'
31992 * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t)
31993 _Form of expected instruction(s):_ `vqrshl.s8 D0, D0, D0'
31995 * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t)
31996 _Form of expected instruction(s):_ `vqrshl.u64 D0, D0, D0'
31998 * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t)
31999 _Form of expected instruction(s):_ `vqrshl.s64 D0, D0, D0'
32001 * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t)
32002 _Form of expected instruction(s):_ `vqrshl.u32 Q0, Q0, Q0'
32004 * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t)
32005 _Form of expected instruction(s):_ `vqrshl.u16 Q0, Q0, Q0'
32007 * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t)
32008 _Form of expected instruction(s):_ `vqrshl.u8 Q0, Q0, Q0'
32010 * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t)
32011 _Form of expected instruction(s):_ `vqrshl.s32 Q0, Q0, Q0'
32013 * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t)
32014 _Form of expected instruction(s):_ `vqrshl.s16 Q0, Q0, Q0'
32016 * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t)
32017 _Form of expected instruction(s):_ `vqrshl.s8 Q0, Q0, Q0'
32019 * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t)
32020 _Form of expected instruction(s):_ `vqrshl.u64 Q0, Q0, Q0'
32022 * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t)
32023 _Form of expected instruction(s):_ `vqrshl.s64 Q0, Q0, Q0'
32025 6.56.3.33 Vector shift left by constant
32026 .......................................
32028 * uint32x2_t vshl_n_u32 (uint32x2_t, const int)
32029 _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0'
32031 * uint16x4_t vshl_n_u16 (uint16x4_t, const int)
32032 _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0'
32034 * uint8x8_t vshl_n_u8 (uint8x8_t, const int)
32035 _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0'
32037 * int32x2_t vshl_n_s32 (int32x2_t, const int)
32038 _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0'
32040 * int16x4_t vshl_n_s16 (int16x4_t, const int)
32041 _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0'
32043 * int8x8_t vshl_n_s8 (int8x8_t, const int)
32044 _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0'
32046 * uint64x1_t vshl_n_u64 (uint64x1_t, const int)
32047 _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0'
32049 * int64x1_t vshl_n_s64 (int64x1_t, const int)
32050 _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0'
32052 * uint32x4_t vshlq_n_u32 (uint32x4_t, const int)
32053 _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0'
32055 * uint16x8_t vshlq_n_u16 (uint16x8_t, const int)
32056 _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0'
32058 * uint8x16_t vshlq_n_u8 (uint8x16_t, const int)
32059 _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0'
32061 * int32x4_t vshlq_n_s32 (int32x4_t, const int)
32062 _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0'
32064 * int16x8_t vshlq_n_s16 (int16x8_t, const int)
32065 _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0'
32067 * int8x16_t vshlq_n_s8 (int8x16_t, const int)
32068 _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0'
32070 * uint64x2_t vshlq_n_u64 (uint64x2_t, const int)
32071 _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0'
32073 * int64x2_t vshlq_n_s64 (int64x2_t, const int)
32074 _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0'
32076 * uint32x2_t vqshl_n_u32 (uint32x2_t, const int)
32077 _Form of expected instruction(s):_ `vqshl.u32 D0, D0, #0'
32079 * uint16x4_t vqshl_n_u16 (uint16x4_t, const int)
32080 _Form of expected instruction(s):_ `vqshl.u16 D0, D0, #0'
32082 * uint8x8_t vqshl_n_u8 (uint8x8_t, const int)
32083 _Form of expected instruction(s):_ `vqshl.u8 D0, D0, #0'
32085 * int32x2_t vqshl_n_s32 (int32x2_t, const int)
32086 _Form of expected instruction(s):_ `vqshl.s32 D0, D0, #0'
32088 * int16x4_t vqshl_n_s16 (int16x4_t, const int)
32089 _Form of expected instruction(s):_ `vqshl.s16 D0, D0, #0'
32091 * int8x8_t vqshl_n_s8 (int8x8_t, const int)
32092 _Form of expected instruction(s):_ `vqshl.s8 D0, D0, #0'
32094 * uint64x1_t vqshl_n_u64 (uint64x1_t, const int)
32095 _Form of expected instruction(s):_ `vqshl.u64 D0, D0, #0'
32097 * int64x1_t vqshl_n_s64 (int64x1_t, const int)
32098 _Form of expected instruction(s):_ `vqshl.s64 D0, D0, #0'
32100 * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int)
32101 _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, #0'
32103 * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int)
32104 _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, #0'
32106 * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int)
32107 _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, #0'
32109 * int32x4_t vqshlq_n_s32 (int32x4_t, const int)
32110 _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, #0'
32112 * int16x8_t vqshlq_n_s16 (int16x8_t, const int)
32113 _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, #0'
32115 * int8x16_t vqshlq_n_s8 (int8x16_t, const int)
32116 _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, #0'
32118 * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int)
32119 _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, #0'
32121 * int64x2_t vqshlq_n_s64 (int64x2_t, const int)
32122 _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, #0'
32124 * uint64x1_t vqshlu_n_s64 (int64x1_t, const int)
32125 _Form of expected instruction(s):_ `vqshlu.s64 D0, D0, #0'
32127 * uint32x2_t vqshlu_n_s32 (int32x2_t, const int)
32128 _Form of expected instruction(s):_ `vqshlu.s32 D0, D0, #0'
32130 * uint16x4_t vqshlu_n_s16 (int16x4_t, const int)
32131 _Form of expected instruction(s):_ `vqshlu.s16 D0, D0, #0'
32133 * uint8x8_t vqshlu_n_s8 (int8x8_t, const int)
32134 _Form of expected instruction(s):_ `vqshlu.s8 D0, D0, #0'
32136 * uint64x2_t vqshluq_n_s64 (int64x2_t, const int)
32137 _Form of expected instruction(s):_ `vqshlu.s64 Q0, Q0, #0'
32139 * uint32x4_t vqshluq_n_s32 (int32x4_t, const int)
32140 _Form of expected instruction(s):_ `vqshlu.s32 Q0, Q0, #0'
32142 * uint16x8_t vqshluq_n_s16 (int16x8_t, const int)
32143 _Form of expected instruction(s):_ `vqshlu.s16 Q0, Q0, #0'
32145 * uint8x16_t vqshluq_n_s8 (int8x16_t, const int)
32146 _Form of expected instruction(s):_ `vqshlu.s8 Q0, Q0, #0'
32148 * uint64x2_t vshll_n_u32 (uint32x2_t, const int)
32149 _Form of expected instruction(s):_ `vshll.u32 Q0, D0, #0'
32151 * uint32x4_t vshll_n_u16 (uint16x4_t, const int)
32152 _Form of expected instruction(s):_ `vshll.u16 Q0, D0, #0'
32154 * uint16x8_t vshll_n_u8 (uint8x8_t, const int)
32155 _Form of expected instruction(s):_ `vshll.u8 Q0, D0, #0'
32157 * int64x2_t vshll_n_s32 (int32x2_t, const int)
32158 _Form of expected instruction(s):_ `vshll.s32 Q0, D0, #0'
32160 * int32x4_t vshll_n_s16 (int16x4_t, const int)
32161 _Form of expected instruction(s):_ `vshll.s16 Q0, D0, #0'
32163 * int16x8_t vshll_n_s8 (int8x8_t, const int)
32164 _Form of expected instruction(s):_ `vshll.s8 Q0, D0, #0'
32166 6.56.3.34 Vector shift right by constant
32167 ........................................
32169 * uint32x2_t vshr_n_u32 (uint32x2_t, const int)
32170 _Form of expected instruction(s):_ `vshr.u32 D0, D0, #0'
32172 * uint16x4_t vshr_n_u16 (uint16x4_t, const int)
32173 _Form of expected instruction(s):_ `vshr.u16 D0, D0, #0'
32175 * uint8x8_t vshr_n_u8 (uint8x8_t, const int)
32176 _Form of expected instruction(s):_ `vshr.u8 D0, D0, #0'
32178 * int32x2_t vshr_n_s32 (int32x2_t, const int)
32179 _Form of expected instruction(s):_ `vshr.s32 D0, D0, #0'
32181 * int16x4_t vshr_n_s16 (int16x4_t, const int)
32182 _Form of expected instruction(s):_ `vshr.s16 D0, D0, #0'
32184 * int8x8_t vshr_n_s8 (int8x8_t, const int)
32185 _Form of expected instruction(s):_ `vshr.s8 D0, D0, #0'
32187 * uint64x1_t vshr_n_u64 (uint64x1_t, const int)
32188 _Form of expected instruction(s):_ `vshr.u64 D0, D0, #0'
32190 * int64x1_t vshr_n_s64 (int64x1_t, const int)
32191 _Form of expected instruction(s):_ `vshr.s64 D0, D0, #0'
32193 * uint32x4_t vshrq_n_u32 (uint32x4_t, const int)
32194 _Form of expected instruction(s):_ `vshr.u32 Q0, Q0, #0'
32196 * uint16x8_t vshrq_n_u16 (uint16x8_t, const int)
32197 _Form of expected instruction(s):_ `vshr.u16 Q0, Q0, #0'
32199 * uint8x16_t vshrq_n_u8 (uint8x16_t, const int)
32200 _Form of expected instruction(s):_ `vshr.u8 Q0, Q0, #0'
32202 * int32x4_t vshrq_n_s32 (int32x4_t, const int)
32203 _Form of expected instruction(s):_ `vshr.s32 Q0, Q0, #0'
32205 * int16x8_t vshrq_n_s16 (int16x8_t, const int)
32206 _Form of expected instruction(s):_ `vshr.s16 Q0, Q0, #0'
32208 * int8x16_t vshrq_n_s8 (int8x16_t, const int)
32209 _Form of expected instruction(s):_ `vshr.s8 Q0, Q0, #0'
32211 * uint64x2_t vshrq_n_u64 (uint64x2_t, const int)
32212 _Form of expected instruction(s):_ `vshr.u64 Q0, Q0, #0'
32214 * int64x2_t vshrq_n_s64 (int64x2_t, const int)
32215 _Form of expected instruction(s):_ `vshr.s64 Q0, Q0, #0'
32217 * uint32x2_t vrshr_n_u32 (uint32x2_t, const int)
32218 _Form of expected instruction(s):_ `vrshr.u32 D0, D0, #0'
32220 * uint16x4_t vrshr_n_u16 (uint16x4_t, const int)
32221 _Form of expected instruction(s):_ `vrshr.u16 D0, D0, #0'
32223 * uint8x8_t vrshr_n_u8 (uint8x8_t, const int)
32224 _Form of expected instruction(s):_ `vrshr.u8 D0, D0, #0'
32226 * int32x2_t vrshr_n_s32 (int32x2_t, const int)
32227 _Form of expected instruction(s):_ `vrshr.s32 D0, D0, #0'
32229 * int16x4_t vrshr_n_s16 (int16x4_t, const int)
32230 _Form of expected instruction(s):_ `vrshr.s16 D0, D0, #0'
32232 * int8x8_t vrshr_n_s8 (int8x8_t, const int)
32233 _Form of expected instruction(s):_ `vrshr.s8 D0, D0, #0'
32235 * uint64x1_t vrshr_n_u64 (uint64x1_t, const int)
32236 _Form of expected instruction(s):_ `vrshr.u64 D0, D0, #0'
32238 * int64x1_t vrshr_n_s64 (int64x1_t, const int)
32239 _Form of expected instruction(s):_ `vrshr.s64 D0, D0, #0'
32241 * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int)
32242 _Form of expected instruction(s):_ `vrshr.u32 Q0, Q0, #0'
32244 * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int)
32245 _Form of expected instruction(s):_ `vrshr.u16 Q0, Q0, #0'
32247 * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int)
32248 _Form of expected instruction(s):_ `vrshr.u8 Q0, Q0, #0'
32250 * int32x4_t vrshrq_n_s32 (int32x4_t, const int)
32251 _Form of expected instruction(s):_ `vrshr.s32 Q0, Q0, #0'
32253 * int16x8_t vrshrq_n_s16 (int16x8_t, const int)
32254 _Form of expected instruction(s):_ `vrshr.s16 Q0, Q0, #0'
32256 * int8x16_t vrshrq_n_s8 (int8x16_t, const int)
32257 _Form of expected instruction(s):_ `vrshr.s8 Q0, Q0, #0'
32259 * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int)
32260 _Form of expected instruction(s):_ `vrshr.u64 Q0, Q0, #0'
32262 * int64x2_t vrshrq_n_s64 (int64x2_t, const int)
32263 _Form of expected instruction(s):_ `vrshr.s64 Q0, Q0, #0'
32265 * uint32x2_t vshrn_n_u64 (uint64x2_t, const int)
32266 _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0'
32268 * uint16x4_t vshrn_n_u32 (uint32x4_t, const int)
32269 _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0'
32271 * uint8x8_t vshrn_n_u16 (uint16x8_t, const int)
32272 _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0'
32274 * int32x2_t vshrn_n_s64 (int64x2_t, const int)
32275 _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0'
32277 * int16x4_t vshrn_n_s32 (int32x4_t, const int)
32278 _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0'
32280 * int8x8_t vshrn_n_s16 (int16x8_t, const int)
32281 _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0'
32283 * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int)
32284 _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0'
32286 * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int)
32287 _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0'
32289 * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int)
32290 _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0'
32292 * int32x2_t vrshrn_n_s64 (int64x2_t, const int)
32293 _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0'
32295 * int16x4_t vrshrn_n_s32 (int32x4_t, const int)
32296 _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0'
32298 * int8x8_t vrshrn_n_s16 (int16x8_t, const int)
32299 _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0'
32301 * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int)
32302 _Form of expected instruction(s):_ `vqshrn.u64 D0, Q0, #0'
32304 * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int)
32305 _Form of expected instruction(s):_ `vqshrn.u32 D0, Q0, #0'
32307 * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int)
32308 _Form of expected instruction(s):_ `vqshrn.u16 D0, Q0, #0'
32310 * int32x2_t vqshrn_n_s64 (int64x2_t, const int)
32311 _Form of expected instruction(s):_ `vqshrn.s64 D0, Q0, #0'
32313 * int16x4_t vqshrn_n_s32 (int32x4_t, const int)
32314 _Form of expected instruction(s):_ `vqshrn.s32 D0, Q0, #0'
32316 * int8x8_t vqshrn_n_s16 (int16x8_t, const int)
32317 _Form of expected instruction(s):_ `vqshrn.s16 D0, Q0, #0'
32319 * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int)
32320 _Form of expected instruction(s):_ `vqrshrn.u64 D0, Q0, #0'
32322 * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int)
32323 _Form of expected instruction(s):_ `vqrshrn.u32 D0, Q0, #0'
32325 * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int)
32326 _Form of expected instruction(s):_ `vqrshrn.u16 D0, Q0, #0'
32328 * int32x2_t vqrshrn_n_s64 (int64x2_t, const int)
32329 _Form of expected instruction(s):_ `vqrshrn.s64 D0, Q0, #0'
32331 * int16x4_t vqrshrn_n_s32 (int32x4_t, const int)
32332 _Form of expected instruction(s):_ `vqrshrn.s32 D0, Q0, #0'
32334 * int8x8_t vqrshrn_n_s16 (int16x8_t, const int)
32335 _Form of expected instruction(s):_ `vqrshrn.s16 D0, Q0, #0'
32337 * uint32x2_t vqshrun_n_s64 (int64x2_t, const int)
32338 _Form of expected instruction(s):_ `vqshrun.s64 D0, Q0, #0'
32340 * uint16x4_t vqshrun_n_s32 (int32x4_t, const int)
32341 _Form of expected instruction(s):_ `vqshrun.s32 D0, Q0, #0'
32343 * uint8x8_t vqshrun_n_s16 (int16x8_t, const int)
32344 _Form of expected instruction(s):_ `vqshrun.s16 D0, Q0, #0'
32346 * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int)
32347 _Form of expected instruction(s):_ `vqrshrun.s64 D0, Q0, #0'
32349 * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int)
32350 _Form of expected instruction(s):_ `vqrshrun.s32 D0, Q0, #0'
32352 * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int)
32353 _Form of expected instruction(s):_ `vqrshrun.s16 D0, Q0, #0'
32355 6.56.3.35 Vector shift right by constant and accumulate
32356 .......................................................
32358 * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int)
32359 _Form of expected instruction(s):_ `vsra.u32 D0, D0, #0'
32361 * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int)
32362 _Form of expected instruction(s):_ `vsra.u16 D0, D0, #0'
32364 * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int)
32365 _Form of expected instruction(s):_ `vsra.u8 D0, D0, #0'
32367 * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int)
32368 _Form of expected instruction(s):_ `vsra.s32 D0, D0, #0'
32370 * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int)
32371 _Form of expected instruction(s):_ `vsra.s16 D0, D0, #0'
32373 * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int)
32374 _Form of expected instruction(s):_ `vsra.s8 D0, D0, #0'
32376 * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int)
32377 _Form of expected instruction(s):_ `vsra.u64 D0, D0, #0'
32379 * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int)
32380 _Form of expected instruction(s):_ `vsra.s64 D0, D0, #0'
32382 * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
32383 _Form of expected instruction(s):_ `vsra.u32 Q0, Q0, #0'
32385 * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
32386 _Form of expected instruction(s):_ `vsra.u16 Q0, Q0, #0'
32388 * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
32389 _Form of expected instruction(s):_ `vsra.u8 Q0, Q0, #0'
32391 * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int)
32392 _Form of expected instruction(s):_ `vsra.s32 Q0, Q0, #0'
32394 * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int)
32395 _Form of expected instruction(s):_ `vsra.s16 Q0, Q0, #0'
32397 * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int)
32398 _Form of expected instruction(s):_ `vsra.s8 Q0, Q0, #0'
32400 * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
32401 _Form of expected instruction(s):_ `vsra.u64 Q0, Q0, #0'
32403 * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int)
32404 _Form of expected instruction(s):_ `vsra.s64 Q0, Q0, #0'
32406 * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int)
32407 _Form of expected instruction(s):_ `vrsra.u32 D0, D0, #0'
32409 * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int)
32410 _Form of expected instruction(s):_ `vrsra.u16 D0, D0, #0'
32412 * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int)
32413 _Form of expected instruction(s):_ `vrsra.u8 D0, D0, #0'
32415 * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int)
32416 _Form of expected instruction(s):_ `vrsra.s32 D0, D0, #0'
32418 * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int)
32419 _Form of expected instruction(s):_ `vrsra.s16 D0, D0, #0'
32421 * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int)
32422 _Form of expected instruction(s):_ `vrsra.s8 D0, D0, #0'
32424 * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int)
32425 _Form of expected instruction(s):_ `vrsra.u64 D0, D0, #0'
32427 * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int)
32428 _Form of expected instruction(s):_ `vrsra.s64 D0, D0, #0'
32430 * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
32431 _Form of expected instruction(s):_ `vrsra.u32 Q0, Q0, #0'
32433 * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
32434 _Form of expected instruction(s):_ `vrsra.u16 Q0, Q0, #0'
32436 * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
32437 _Form of expected instruction(s):_ `vrsra.u8 Q0, Q0, #0'
32439 * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int)
32440 _Form of expected instruction(s):_ `vrsra.s32 Q0, Q0, #0'
32442 * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int)
32443 _Form of expected instruction(s):_ `vrsra.s16 Q0, Q0, #0'
32445 * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int)
32446 _Form of expected instruction(s):_ `vrsra.s8 Q0, Q0, #0'
32448 * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
32449 _Form of expected instruction(s):_ `vrsra.u64 Q0, Q0, #0'
32451 * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int)
32452 _Form of expected instruction(s):_ `vrsra.s64 Q0, Q0, #0'
32454 6.56.3.36 Vector shift right and insert
32455 .......................................
32457 * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int)
32458 _Form of expected instruction(s):_ `vsri.32 D0, D0, #0'
32460 * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int)
32461 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
32463 * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int)
32464 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
32466 * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int)
32467 _Form of expected instruction(s):_ `vsri.32 D0, D0, #0'
32469 * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int)
32470 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
32472 * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int)
32473 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
32475 * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int)
32476 _Form of expected instruction(s):_ `vsri.64 D0, D0, #0'
32478 * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int)
32479 _Form of expected instruction(s):_ `vsri.64 D0, D0, #0'
32481 * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int)
32482 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
32484 * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int)
32485 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
32487 * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int)
32488 _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0'
32490 * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int)
32491 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
32493 * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int)
32494 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
32496 * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int)
32497 _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0'
32499 * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int)
32500 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
32502 * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int)
32503 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
32505 * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int)
32506 _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0'
32508 * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int)
32509 _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0'
32511 * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int)
32512 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
32514 * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int)
32515 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
32517 6.56.3.37 Vector shift left and insert
32518 ......................................
32520 * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int)
32521 _Form of expected instruction(s):_ `vsli.32 D0, D0, #0'
32523 * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int)
32524 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
32526 * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int)
32527 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
32529 * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int)
32530 _Form of expected instruction(s):_ `vsli.32 D0, D0, #0'
32532 * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int)
32533 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
32535 * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int)
32536 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
32538 * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int)
32539 _Form of expected instruction(s):_ `vsli.64 D0, D0, #0'
32541 * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int)
32542 _Form of expected instruction(s):_ `vsli.64 D0, D0, #0'
32544 * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int)
32545 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
32547 * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int)
32548 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
32550 * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int)
32551 _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0'
32553 * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int)
32554 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
32556 * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int)
32557 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
32559 * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int)
32560 _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0'
32562 * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int)
32563 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
32565 * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int)
32566 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
32568 * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int)
32569 _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0'
32571 * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int)
32572 _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0'
32574 * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int)
32575 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
32577 * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int)
32578 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
32580 6.56.3.38 Absolute value
32581 ........................
32583 * float32x2_t vabs_f32 (float32x2_t)
32584 _Form of expected instruction(s):_ `vabs.f32 D0, D0'
32586 * int32x2_t vabs_s32 (int32x2_t)
32587 _Form of expected instruction(s):_ `vabs.s32 D0, D0'
32589 * int16x4_t vabs_s16 (int16x4_t)
32590 _Form of expected instruction(s):_ `vabs.s16 D0, D0'
32592 * int8x8_t vabs_s8 (int8x8_t)
32593 _Form of expected instruction(s):_ `vabs.s8 D0, D0'
32595 * float32x4_t vabsq_f32 (float32x4_t)
32596 _Form of expected instruction(s):_ `vabs.f32 Q0, Q0'
32598 * int32x4_t vabsq_s32 (int32x4_t)
32599 _Form of expected instruction(s):_ `vabs.s32 Q0, Q0'
32601 * int16x8_t vabsq_s16 (int16x8_t)
32602 _Form of expected instruction(s):_ `vabs.s16 Q0, Q0'
32604 * int8x16_t vabsq_s8 (int8x16_t)
32605 _Form of expected instruction(s):_ `vabs.s8 Q0, Q0'
32607 * int32x2_t vqabs_s32 (int32x2_t)
32608 _Form of expected instruction(s):_ `vqabs.s32 D0, D0'
32610 * int16x4_t vqabs_s16 (int16x4_t)
32611 _Form of expected instruction(s):_ `vqabs.s16 D0, D0'
32613 * int8x8_t vqabs_s8 (int8x8_t)
32614 _Form of expected instruction(s):_ `vqabs.s8 D0, D0'
32616 * int32x4_t vqabsq_s32 (int32x4_t)
32617 _Form of expected instruction(s):_ `vqabs.s32 Q0, Q0'
32619 * int16x8_t vqabsq_s16 (int16x8_t)
32620 _Form of expected instruction(s):_ `vqabs.s16 Q0, Q0'
32622 * int8x16_t vqabsq_s8 (int8x16_t)
32623 _Form of expected instruction(s):_ `vqabs.s8 Q0, Q0'
32628 * float32x2_t vneg_f32 (float32x2_t)
32629 _Form of expected instruction(s):_ `vneg.f32 D0, D0'
32631 * int32x2_t vneg_s32 (int32x2_t)
32632 _Form of expected instruction(s):_ `vneg.s32 D0, D0'
32634 * int16x4_t vneg_s16 (int16x4_t)
32635 _Form of expected instruction(s):_ `vneg.s16 D0, D0'
32637 * int8x8_t vneg_s8 (int8x8_t)
32638 _Form of expected instruction(s):_ `vneg.s8 D0, D0'
32640 * float32x4_t vnegq_f32 (float32x4_t)
32641 _Form of expected instruction(s):_ `vneg.f32 Q0, Q0'
32643 * int32x4_t vnegq_s32 (int32x4_t)
32644 _Form of expected instruction(s):_ `vneg.s32 Q0, Q0'
32646 * int16x8_t vnegq_s16 (int16x8_t)
32647 _Form of expected instruction(s):_ `vneg.s16 Q0, Q0'
32649 * int8x16_t vnegq_s8 (int8x16_t)
32650 _Form of expected instruction(s):_ `vneg.s8 Q0, Q0'
32652 * int32x2_t vqneg_s32 (int32x2_t)
32653 _Form of expected instruction(s):_ `vqneg.s32 D0, D0'
32655 * int16x4_t vqneg_s16 (int16x4_t)
32656 _Form of expected instruction(s):_ `vqneg.s16 D0, D0'
32658 * int8x8_t vqneg_s8 (int8x8_t)
32659 _Form of expected instruction(s):_ `vqneg.s8 D0, D0'
32661 * int32x4_t vqnegq_s32 (int32x4_t)
32662 _Form of expected instruction(s):_ `vqneg.s32 Q0, Q0'
32664 * int16x8_t vqnegq_s16 (int16x8_t)
32665 _Form of expected instruction(s):_ `vqneg.s16 Q0, Q0'
32667 * int8x16_t vqnegq_s8 (int8x16_t)
32668 _Form of expected instruction(s):_ `vqneg.s8 Q0, Q0'
32670 6.56.3.40 Bitwise not
32671 .....................
32673 * uint32x2_t vmvn_u32 (uint32x2_t)
32674 _Form of expected instruction(s):_ `vmvn D0, D0'
32676 * uint16x4_t vmvn_u16 (uint16x4_t)
32677 _Form of expected instruction(s):_ `vmvn D0, D0'
32679 * uint8x8_t vmvn_u8 (uint8x8_t)
32680 _Form of expected instruction(s):_ `vmvn D0, D0'
32682 * int32x2_t vmvn_s32 (int32x2_t)
32683 _Form of expected instruction(s):_ `vmvn D0, D0'
32685 * int16x4_t vmvn_s16 (int16x4_t)
32686 _Form of expected instruction(s):_ `vmvn D0, D0'
32688 * int8x8_t vmvn_s8 (int8x8_t)
32689 _Form of expected instruction(s):_ `vmvn D0, D0'
32691 * poly8x8_t vmvn_p8 (poly8x8_t)
32692 _Form of expected instruction(s):_ `vmvn D0, D0'
32694 * uint32x4_t vmvnq_u32 (uint32x4_t)
32695 _Form of expected instruction(s):_ `vmvn Q0, Q0'
32697 * uint16x8_t vmvnq_u16 (uint16x8_t)
32698 _Form of expected instruction(s):_ `vmvn Q0, Q0'
32700 * uint8x16_t vmvnq_u8 (uint8x16_t)
32701 _Form of expected instruction(s):_ `vmvn Q0, Q0'
32703 * int32x4_t vmvnq_s32 (int32x4_t)
32704 _Form of expected instruction(s):_ `vmvn Q0, Q0'
32706 * int16x8_t vmvnq_s16 (int16x8_t)
32707 _Form of expected instruction(s):_ `vmvn Q0, Q0'
32709 * int8x16_t vmvnq_s8 (int8x16_t)
32710 _Form of expected instruction(s):_ `vmvn Q0, Q0'
32712 * poly8x16_t vmvnq_p8 (poly8x16_t)
32713 _Form of expected instruction(s):_ `vmvn Q0, Q0'
32715 6.56.3.41 Count leading sign bits
32716 .................................
32718 * int32x2_t vcls_s32 (int32x2_t)
32719 _Form of expected instruction(s):_ `vcls.s32 D0, D0'
32721 * int16x4_t vcls_s16 (int16x4_t)
32722 _Form of expected instruction(s):_ `vcls.s16 D0, D0'
32724 * int8x8_t vcls_s8 (int8x8_t)
32725 _Form of expected instruction(s):_ `vcls.s8 D0, D0'
32727 * int32x4_t vclsq_s32 (int32x4_t)
32728 _Form of expected instruction(s):_ `vcls.s32 Q0, Q0'
32730 * int16x8_t vclsq_s16 (int16x8_t)
32731 _Form of expected instruction(s):_ `vcls.s16 Q0, Q0'
32733 * int8x16_t vclsq_s8 (int8x16_t)
32734 _Form of expected instruction(s):_ `vcls.s8 Q0, Q0'
32736 6.56.3.42 Count leading zeros
32737 .............................
32739 * uint32x2_t vclz_u32 (uint32x2_t)
32740 _Form of expected instruction(s):_ `vclz.i32 D0, D0'
32742 * uint16x4_t vclz_u16 (uint16x4_t)
32743 _Form of expected instruction(s):_ `vclz.i16 D0, D0'
32745 * uint8x8_t vclz_u8 (uint8x8_t)
32746 _Form of expected instruction(s):_ `vclz.i8 D0, D0'
32748 * int32x2_t vclz_s32 (int32x2_t)
32749 _Form of expected instruction(s):_ `vclz.i32 D0, D0'
32751 * int16x4_t vclz_s16 (int16x4_t)
32752 _Form of expected instruction(s):_ `vclz.i16 D0, D0'
32754 * int8x8_t vclz_s8 (int8x8_t)
32755 _Form of expected instruction(s):_ `vclz.i8 D0, D0'
32757 * uint32x4_t vclzq_u32 (uint32x4_t)
32758 _Form of expected instruction(s):_ `vclz.i32 Q0, Q0'
32760 * uint16x8_t vclzq_u16 (uint16x8_t)
32761 _Form of expected instruction(s):_ `vclz.i16 Q0, Q0'
32763 * uint8x16_t vclzq_u8 (uint8x16_t)
32764 _Form of expected instruction(s):_ `vclz.i8 Q0, Q0'
32766 * int32x4_t vclzq_s32 (int32x4_t)
32767 _Form of expected instruction(s):_ `vclz.i32 Q0, Q0'
32769 * int16x8_t vclzq_s16 (int16x8_t)
32770 _Form of expected instruction(s):_ `vclz.i16 Q0, Q0'
32772 * int8x16_t vclzq_s8 (int8x16_t)
32773 _Form of expected instruction(s):_ `vclz.i8 Q0, Q0'
32775 6.56.3.43 Count number of set bits
32776 ..................................
32778 * uint8x8_t vcnt_u8 (uint8x8_t)
32779 _Form of expected instruction(s):_ `vcnt.8 D0, D0'
32781 * int8x8_t vcnt_s8 (int8x8_t)
32782 _Form of expected instruction(s):_ `vcnt.8 D0, D0'
32784 * poly8x8_t vcnt_p8 (poly8x8_t)
32785 _Form of expected instruction(s):_ `vcnt.8 D0, D0'
32787 * uint8x16_t vcntq_u8 (uint8x16_t)
32788 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
32790 * int8x16_t vcntq_s8 (int8x16_t)
32791 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
32793 * poly8x16_t vcntq_p8 (poly8x16_t)
32794 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
32796 6.56.3.44 Reciprocal estimate
32797 .............................
32799 * float32x2_t vrecpe_f32 (float32x2_t)
32800 _Form of expected instruction(s):_ `vrecpe.f32 D0, D0'
32802 * uint32x2_t vrecpe_u32 (uint32x2_t)
32803 _Form of expected instruction(s):_ `vrecpe.u32 D0, D0'
32805 * float32x4_t vrecpeq_f32 (float32x4_t)
32806 _Form of expected instruction(s):_ `vrecpe.f32 Q0, Q0'
32808 * uint32x4_t vrecpeq_u32 (uint32x4_t)
32809 _Form of expected instruction(s):_ `vrecpe.u32 Q0, Q0'
32811 6.56.3.45 Reciprocal square-root estimate
32812 .........................................
32814 * float32x2_t vrsqrte_f32 (float32x2_t)
32815 _Form of expected instruction(s):_ `vrsqrte.f32 D0, D0'
32817 * uint32x2_t vrsqrte_u32 (uint32x2_t)
32818 _Form of expected instruction(s):_ `vrsqrte.u32 D0, D0'
32820 * float32x4_t vrsqrteq_f32 (float32x4_t)
32821 _Form of expected instruction(s):_ `vrsqrte.f32 Q0, Q0'
32823 * uint32x4_t vrsqrteq_u32 (uint32x4_t)
32824 _Form of expected instruction(s):_ `vrsqrte.u32 Q0, Q0'
32826 6.56.3.46 Get lanes from a vector
32827 .................................
32829 * uint32_t vget_lane_u32 (uint32x2_t, const int)
32830 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
32832 * uint16_t vget_lane_u16 (uint16x4_t, const int)
32833 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
32835 * uint8_t vget_lane_u8 (uint8x8_t, const int)
32836 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
32838 * int32_t vget_lane_s32 (int32x2_t, const int)
32839 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
32841 * int16_t vget_lane_s16 (int16x4_t, const int)
32842 _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]'
32844 * int8_t vget_lane_s8 (int8x8_t, const int)
32845 _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]'
32847 * float32_t vget_lane_f32 (float32x2_t, const int)
32848 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
32850 * poly16_t vget_lane_p16 (poly16x4_t, const int)
32851 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
32853 * poly8_t vget_lane_p8 (poly8x8_t, const int)
32854 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
32856 * uint64_t vget_lane_u64 (uint64x1_t, const int)
32858 * int64_t vget_lane_s64 (int64x1_t, const int)
32860 * uint32_t vgetq_lane_u32 (uint32x4_t, const int)
32861 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
32863 * uint16_t vgetq_lane_u16 (uint16x8_t, const int)
32864 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
32866 * uint8_t vgetq_lane_u8 (uint8x16_t, const int)
32867 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
32869 * int32_t vgetq_lane_s32 (int32x4_t, const int)
32870 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
32872 * int16_t vgetq_lane_s16 (int16x8_t, const int)
32873 _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]'
32875 * int8_t vgetq_lane_s8 (int8x16_t, const int)
32876 _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]'
32878 * float32_t vgetq_lane_f32 (float32x4_t, const int)
32879 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
32881 * poly16_t vgetq_lane_p16 (poly16x8_t, const int)
32882 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
32884 * poly8_t vgetq_lane_p8 (poly8x16_t, const int)
32885 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
32887 * uint64_t vgetq_lane_u64 (uint64x2_t, const int)
32888 _Form of expected instruction(s):_ `vmov R0, R0, D0' _or_ `fmrrd
32891 * int64_t vgetq_lane_s64 (int64x2_t, const int)
32892 _Form of expected instruction(s):_ `vmov R0, R0, D0' _or_ `fmrrd
32895 6.56.3.47 Set lanes in a vector
32896 ...............................
32898 * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int)
32899 _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
32901 * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int)
32902 _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
32904 * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int)
32905 _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
32907 * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int)
32908 _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
32910 * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int)
32911 _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
32913 * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int)
32914 _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
32916 * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int)
32917 _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
32919 * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int)
32920 _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
32922 * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int)
32923 _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
32925 * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int)
32927 * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int)
32929 * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int)
32930 _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
32932 * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int)
32933 _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
32935 * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int)
32936 _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
32938 * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int)
32939 _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
32941 * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int)
32942 _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
32944 * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int)
32945 _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
32947 * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int)
32948 _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
32950 * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int)
32951 _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
32953 * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int)
32954 _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
32956 * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int)
32957 _Form of expected instruction(s):_ `vmov D0, R0, R0'
32959 * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int)
32960 _Form of expected instruction(s):_ `vmov D0, R0, R0'
32962 6.56.3.48 Create vector from literal bit pattern
32963 ................................................
32965 * uint32x2_t vcreate_u32 (uint64_t)
32967 * uint16x4_t vcreate_u16 (uint64_t)
32969 * uint8x8_t vcreate_u8 (uint64_t)
32971 * int32x2_t vcreate_s32 (uint64_t)
32973 * int16x4_t vcreate_s16 (uint64_t)
32975 * int8x8_t vcreate_s8 (uint64_t)
32977 * uint64x1_t vcreate_u64 (uint64_t)
32979 * int64x1_t vcreate_s64 (uint64_t)
32981 * float32x2_t vcreate_f32 (uint64_t)
32983 * poly16x4_t vcreate_p16 (uint64_t)
32985 * poly8x8_t vcreate_p8 (uint64_t)
32987 6.56.3.49 Set all lanes to the same value
32988 .........................................
32990 * uint32x2_t vdup_n_u32 (uint32_t)
32991 _Form of expected instruction(s):_ `vdup.32 D0, R0'
32993 * uint16x4_t vdup_n_u16 (uint16_t)
32994 _Form of expected instruction(s):_ `vdup.16 D0, R0'
32996 * uint8x8_t vdup_n_u8 (uint8_t)
32997 _Form of expected instruction(s):_ `vdup.8 D0, R0'
32999 * int32x2_t vdup_n_s32 (int32_t)
33000 _Form of expected instruction(s):_ `vdup.32 D0, R0'
33002 * int16x4_t vdup_n_s16 (int16_t)
33003 _Form of expected instruction(s):_ `vdup.16 D0, R0'
33005 * int8x8_t vdup_n_s8 (int8_t)
33006 _Form of expected instruction(s):_ `vdup.8 D0, R0'
33008 * float32x2_t vdup_n_f32 (float32_t)
33009 _Form of expected instruction(s):_ `vdup.32 D0, R0'
33011 * poly16x4_t vdup_n_p16 (poly16_t)
33012 _Form of expected instruction(s):_ `vdup.16 D0, R0'
33014 * poly8x8_t vdup_n_p8 (poly8_t)
33015 _Form of expected instruction(s):_ `vdup.8 D0, R0'
33017 * uint64x1_t vdup_n_u64 (uint64_t)
33019 * int64x1_t vdup_n_s64 (int64_t)
33021 * uint32x4_t vdupq_n_u32 (uint32_t)
33022 _Form of expected instruction(s):_ `vdup.32 Q0, R0'
33024 * uint16x8_t vdupq_n_u16 (uint16_t)
33025 _Form of expected instruction(s):_ `vdup.16 Q0, R0'
33027 * uint8x16_t vdupq_n_u8 (uint8_t)
33028 _Form of expected instruction(s):_ `vdup.8 Q0, R0'
33030 * int32x4_t vdupq_n_s32 (int32_t)
33031 _Form of expected instruction(s):_ `vdup.32 Q0, R0'
33033 * int16x8_t vdupq_n_s16 (int16_t)
33034 _Form of expected instruction(s):_ `vdup.16 Q0, R0'
33036 * int8x16_t vdupq_n_s8 (int8_t)
33037 _Form of expected instruction(s):_ `vdup.8 Q0, R0'
33039 * float32x4_t vdupq_n_f32 (float32_t)
33040 _Form of expected instruction(s):_ `vdup.32 Q0, R0'
33042 * poly16x8_t vdupq_n_p16 (poly16_t)
33043 _Form of expected instruction(s):_ `vdup.16 Q0, R0'
33045 * poly8x16_t vdupq_n_p8 (poly8_t)
33046 _Form of expected instruction(s):_ `vdup.8 Q0, R0'
33048 * uint64x2_t vdupq_n_u64 (uint64_t)
33050 * int64x2_t vdupq_n_s64 (int64_t)
33052 * uint32x2_t vmov_n_u32 (uint32_t)
33053 _Form of expected instruction(s):_ `vdup.32 D0, R0'
33055 * uint16x4_t vmov_n_u16 (uint16_t)
33056 _Form of expected instruction(s):_ `vdup.16 D0, R0'
33058 * uint8x8_t vmov_n_u8 (uint8_t)
33059 _Form of expected instruction(s):_ `vdup.8 D0, R0'
33061 * int32x2_t vmov_n_s32 (int32_t)
33062 _Form of expected instruction(s):_ `vdup.32 D0, R0'
33064 * int16x4_t vmov_n_s16 (int16_t)
33065 _Form of expected instruction(s):_ `vdup.16 D0, R0'
33067 * int8x8_t vmov_n_s8 (int8_t)
33068 _Form of expected instruction(s):_ `vdup.8 D0, R0'
33070 * float32x2_t vmov_n_f32 (float32_t)
33071 _Form of expected instruction(s):_ `vdup.32 D0, R0'
33073 * poly16x4_t vmov_n_p16 (poly16_t)
33074 _Form of expected instruction(s):_ `vdup.16 D0, R0'
33076 * poly8x8_t vmov_n_p8 (poly8_t)
33077 _Form of expected instruction(s):_ `vdup.8 D0, R0'
33079 * uint64x1_t vmov_n_u64 (uint64_t)
33081 * int64x1_t vmov_n_s64 (int64_t)
33083 * uint32x4_t vmovq_n_u32 (uint32_t)
33084 _Form of expected instruction(s):_ `vdup.32 Q0, R0'
33086 * uint16x8_t vmovq_n_u16 (uint16_t)
33087 _Form of expected instruction(s):_ `vdup.16 Q0, R0'
33089 * uint8x16_t vmovq_n_u8 (uint8_t)
33090 _Form of expected instruction(s):_ `vdup.8 Q0, R0'
33092 * int32x4_t vmovq_n_s32 (int32_t)
33093 _Form of expected instruction(s):_ `vdup.32 Q0, R0'
33095 * int16x8_t vmovq_n_s16 (int16_t)
33096 _Form of expected instruction(s):_ `vdup.16 Q0, R0'
33098 * int8x16_t vmovq_n_s8 (int8_t)
33099 _Form of expected instruction(s):_ `vdup.8 Q0, R0'
33101 * float32x4_t vmovq_n_f32 (float32_t)
33102 _Form of expected instruction(s):_ `vdup.32 Q0, R0'
33104 * poly16x8_t vmovq_n_p16 (poly16_t)
33105 _Form of expected instruction(s):_ `vdup.16 Q0, R0'
33107 * poly8x16_t vmovq_n_p8 (poly8_t)
33108 _Form of expected instruction(s):_ `vdup.8 Q0, R0'
33110 * uint64x2_t vmovq_n_u64 (uint64_t)
33112 * int64x2_t vmovq_n_s64 (int64_t)
33114 * uint32x2_t vdup_lane_u32 (uint32x2_t, const int)
33115 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
33117 * uint16x4_t vdup_lane_u16 (uint16x4_t, const int)
33118 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
33120 * uint8x8_t vdup_lane_u8 (uint8x8_t, const int)
33121 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
33123 * int32x2_t vdup_lane_s32 (int32x2_t, const int)
33124 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
33126 * int16x4_t vdup_lane_s16 (int16x4_t, const int)
33127 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
33129 * int8x8_t vdup_lane_s8 (int8x8_t, const int)
33130 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
33132 * float32x2_t vdup_lane_f32 (float32x2_t, const int)
33133 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
33135 * poly16x4_t vdup_lane_p16 (poly16x4_t, const int)
33136 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
33138 * poly8x8_t vdup_lane_p8 (poly8x8_t, const int)
33139 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
33141 * uint64x1_t vdup_lane_u64 (uint64x1_t, const int)
33143 * int64x1_t vdup_lane_s64 (int64x1_t, const int)
33145 * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int)
33146 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
33148 * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int)
33149 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
33151 * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int)
33152 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
33154 * int32x4_t vdupq_lane_s32 (int32x2_t, const int)
33155 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
33157 * int16x8_t vdupq_lane_s16 (int16x4_t, const int)
33158 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
33160 * int8x16_t vdupq_lane_s8 (int8x8_t, const int)
33161 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
33163 * float32x4_t vdupq_lane_f32 (float32x2_t, const int)
33164 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
33166 * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int)
33167 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
33169 * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int)
33170 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
33172 * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int)
33174 * int64x2_t vdupq_lane_s64 (int64x1_t, const int)
33176 6.56.3.50 Combining vectors
33177 ...........................
33179 * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t)
33181 * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t)
33183 * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t)
33185 * int32x4_t vcombine_s32 (int32x2_t, int32x2_t)
33187 * int16x8_t vcombine_s16 (int16x4_t, int16x4_t)
33189 * int8x16_t vcombine_s8 (int8x8_t, int8x8_t)
33191 * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t)
33193 * int64x2_t vcombine_s64 (int64x1_t, int64x1_t)
33195 * float32x4_t vcombine_f32 (float32x2_t, float32x2_t)
33197 * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t)
33199 * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t)
33201 6.56.3.51 Splitting vectors
33202 ...........................
33204 * uint32x2_t vget_high_u32 (uint32x4_t)
33206 * uint16x4_t vget_high_u16 (uint16x8_t)
33208 * uint8x8_t vget_high_u8 (uint8x16_t)
33210 * int32x2_t vget_high_s32 (int32x4_t)
33212 * int16x4_t vget_high_s16 (int16x8_t)
33214 * int8x8_t vget_high_s8 (int8x16_t)
33216 * uint64x1_t vget_high_u64 (uint64x2_t)
33218 * int64x1_t vget_high_s64 (int64x2_t)
33220 * float32x2_t vget_high_f32 (float32x4_t)
33222 * poly16x4_t vget_high_p16 (poly16x8_t)
33224 * poly8x8_t vget_high_p8 (poly8x16_t)
33226 * uint32x2_t vget_low_u32 (uint32x4_t)
33227 _Form of expected instruction(s):_ `vmov D0, D0'
33229 * uint16x4_t vget_low_u16 (uint16x8_t)
33230 _Form of expected instruction(s):_ `vmov D0, D0'
33232 * uint8x8_t vget_low_u8 (uint8x16_t)
33233 _Form of expected instruction(s):_ `vmov D0, D0'
33235 * int32x2_t vget_low_s32 (int32x4_t)
33236 _Form of expected instruction(s):_ `vmov D0, D0'
33238 * int16x4_t vget_low_s16 (int16x8_t)
33239 _Form of expected instruction(s):_ `vmov D0, D0'
33241 * int8x8_t vget_low_s8 (int8x16_t)
33242 _Form of expected instruction(s):_ `vmov D0, D0'
33244 * float32x2_t vget_low_f32 (float32x4_t)
33245 _Form of expected instruction(s):_ `vmov D0, D0'
33247 * poly16x4_t vget_low_p16 (poly16x8_t)
33248 _Form of expected instruction(s):_ `vmov D0, D0'
33250 * poly8x8_t vget_low_p8 (poly8x16_t)
33251 _Form of expected instruction(s):_ `vmov D0, D0'
33253 * uint64x1_t vget_low_u64 (uint64x2_t)
33255 * int64x1_t vget_low_s64 (int64x2_t)
33257 6.56.3.52 Conversions
33258 .....................
33260 * float32x2_t vcvt_f32_u32 (uint32x2_t)
33261 _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0'
33263 * float32x2_t vcvt_f32_s32 (int32x2_t)
33264 _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0'
33266 * uint32x2_t vcvt_u32_f32 (float32x2_t)
33267 _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0'
33269 * int32x2_t vcvt_s32_f32 (float32x2_t)
33270 _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0'
33272 * float32x4_t vcvtq_f32_u32 (uint32x4_t)
33273 _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0'
33275 * float32x4_t vcvtq_f32_s32 (int32x4_t)
33276 _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0'
33278 * uint32x4_t vcvtq_u32_f32 (float32x4_t)
33279 _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0'
33281 * int32x4_t vcvtq_s32_f32 (float32x4_t)
33282 _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0'
33284 * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int)
33285 _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0, #0'
33287 * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int)
33288 _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0, #0'
33290 * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int)
33291 _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0, #0'
33293 * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int)
33294 _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0, #0'
33296 * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int)
33297 _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0, #0'
33299 * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int)
33300 _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0, #0'
33302 * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int)
33303 _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0, #0'
33305 * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int)
33306 _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0, #0'
33308 6.56.3.53 Move, single_opcode narrowing
33309 .......................................
33311 * uint32x2_t vmovn_u64 (uint64x2_t)
33312 _Form of expected instruction(s):_ `vmovn.i64 D0, Q0'
33314 * uint16x4_t vmovn_u32 (uint32x4_t)
33315 _Form of expected instruction(s):_ `vmovn.i32 D0, Q0'
33317 * uint8x8_t vmovn_u16 (uint16x8_t)
33318 _Form of expected instruction(s):_ `vmovn.i16 D0, Q0'
33320 * int32x2_t vmovn_s64 (int64x2_t)
33321 _Form of expected instruction(s):_ `vmovn.i64 D0, Q0'
33323 * int16x4_t vmovn_s32 (int32x4_t)
33324 _Form of expected instruction(s):_ `vmovn.i32 D0, Q0'
33326 * int8x8_t vmovn_s16 (int16x8_t)
33327 _Form of expected instruction(s):_ `vmovn.i16 D0, Q0'
33329 * uint32x2_t vqmovn_u64 (uint64x2_t)
33330 _Form of expected instruction(s):_ `vqmovn.u64 D0, Q0'
33332 * uint16x4_t vqmovn_u32 (uint32x4_t)
33333 _Form of expected instruction(s):_ `vqmovn.u32 D0, Q0'
33335 * uint8x8_t vqmovn_u16 (uint16x8_t)
33336 _Form of expected instruction(s):_ `vqmovn.u16 D0, Q0'
33338 * int32x2_t vqmovn_s64 (int64x2_t)
33339 _Form of expected instruction(s):_ `vqmovn.s64 D0, Q0'
33341 * int16x4_t vqmovn_s32 (int32x4_t)
33342 _Form of expected instruction(s):_ `vqmovn.s32 D0, Q0'
33344 * int8x8_t vqmovn_s16 (int16x8_t)
33345 _Form of expected instruction(s):_ `vqmovn.s16 D0, Q0'
33347 * uint32x2_t vqmovun_s64 (int64x2_t)
33348 _Form of expected instruction(s):_ `vqmovun.s64 D0, Q0'
33350 * uint16x4_t vqmovun_s32 (int32x4_t)
33351 _Form of expected instruction(s):_ `vqmovun.s32 D0, Q0'
33353 * uint8x8_t vqmovun_s16 (int16x8_t)
33354 _Form of expected instruction(s):_ `vqmovun.s16 D0, Q0'
33356 6.56.3.54 Move, single_opcode long
33357 ..................................
33359 * uint64x2_t vmovl_u32 (uint32x2_t)
33360 _Form of expected instruction(s):_ `vmovl.u32 Q0, D0'
33362 * uint32x4_t vmovl_u16 (uint16x4_t)
33363 _Form of expected instruction(s):_ `vmovl.u16 Q0, D0'
33365 * uint16x8_t vmovl_u8 (uint8x8_t)
33366 _Form of expected instruction(s):_ `vmovl.u8 Q0, D0'
33368 * int64x2_t vmovl_s32 (int32x2_t)
33369 _Form of expected instruction(s):_ `vmovl.s32 Q0, D0'
33371 * int32x4_t vmovl_s16 (int16x4_t)
33372 _Form of expected instruction(s):_ `vmovl.s16 Q0, D0'
33374 * int16x8_t vmovl_s8 (int8x8_t)
33375 _Form of expected instruction(s):_ `vmovl.s8 Q0, D0'
33377 6.56.3.55 Table lookup
33378 ......................
33380 * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t)
33381 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
33383 * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t)
33384 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
33386 * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t)
33387 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
33389 * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t)
33390 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
33392 * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t)
33393 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
33395 * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t)
33396 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
33398 * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t)
33399 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
33401 * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t)
33402 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
33404 * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t)
33405 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
33407 * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t)
33408 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
33411 * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t)
33412 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
33415 * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t)
33416 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
33419 6.56.3.56 Extended table lookup
33420 ...............................
33422 * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t)
33423 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
33425 * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t)
33426 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
33428 * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
33429 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
33431 * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t)
33432 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
33434 * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t)
33435 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
33437 * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t)
33438 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
33440 * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t)
33441 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
33443 * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t)
33444 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
33446 * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t)
33447 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
33449 * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t)
33450 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
33453 * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t)
33454 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
33457 * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t)
33458 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
33461 6.56.3.57 Multiply, lane
33462 ........................
33464 * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int)
33465 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]'
33467 * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int)
33468 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
33470 * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int)
33471 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
33473 * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int)
33474 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
33476 * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int)
33477 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
33479 * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int)
33480 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]'
33482 * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int)
33483 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
33485 * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int)
33486 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
33488 * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int)
33489 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
33491 * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int)
33492 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
33494 6.56.3.58 Long multiply, lane
33495 .............................
33497 * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int)
33498 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]'
33500 * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int)
33501 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]'
33503 * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int)
33504 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]'
33506 * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int)
33507 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]'
33509 6.56.3.59 Saturating doubling long multiply, lane
33510 .................................................
33512 * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int)
33513 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]'
33515 * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int)
33516 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]'
33518 6.56.3.60 Saturating doubling multiply high, lane
33519 .................................................
33521 * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
33522 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]'
33524 * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
33525 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]'
33527 * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
33528 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]'
33530 * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
33531 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]'
33533 * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
33534 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]'
33536 * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
33537 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]'
33539 * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
33540 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]'
33542 * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
33543 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]'
33545 6.56.3.61 Multiply-accumulate, lane
33546 ...................................
33548 * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
33550 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]'
33552 * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t,
33554 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
33556 * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t,
33558 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
33560 * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
33562 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
33564 * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
33566 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
33568 * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
33570 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]'
33572 * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
33574 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
33576 * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
33578 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
33580 * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
33582 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
33584 * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
33586 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
33588 * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
33590 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]'
33592 * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
33594 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]'
33596 * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
33598 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]'
33600 * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
33602 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]'
33604 * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
33606 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]'
33608 * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
33610 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]'
33612 6.56.3.62 Multiply-subtract, lane
33613 .................................
33615 * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
33617 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]'
33619 * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t,
33621 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
33623 * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t,
33625 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
33627 * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
33629 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
33631 * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
33633 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
33635 * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
33637 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]'
33639 * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
33641 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
33643 * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
33645 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
33647 * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
33649 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
33651 * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
33653 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
33655 * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
33657 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]'
33659 * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
33661 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]'
33663 * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
33665 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]'
33667 * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
33669 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]'
33671 * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
33673 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]'
33675 * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
33677 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]'
33679 6.56.3.63 Vector multiply by scalar
33680 ...................................
33682 * float32x2_t vmul_n_f32 (float32x2_t, float32_t)
33683 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]'
33685 * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t)
33686 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
33688 * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t)
33689 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
33691 * int32x2_t vmul_n_s32 (int32x2_t, int32_t)
33692 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
33694 * int16x4_t vmul_n_s16 (int16x4_t, int16_t)
33695 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
33697 * float32x4_t vmulq_n_f32 (float32x4_t, float32_t)
33698 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]'
33700 * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t)
33701 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
33703 * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t)
33704 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
33706 * int32x4_t vmulq_n_s32 (int32x4_t, int32_t)
33707 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
33709 * int16x8_t vmulq_n_s16 (int16x8_t, int16_t)
33710 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
33712 6.56.3.64 Vector long multiply by scalar
33713 ........................................
33715 * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t)
33716 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]'
33718 * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t)
33719 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]'
33721 * int64x2_t vmull_n_s32 (int32x2_t, int32_t)
33722 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]'
33724 * int32x4_t vmull_n_s16 (int16x4_t, int16_t)
33725 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]'
33727 6.56.3.65 Vector saturating doubling long multiply by scalar
33728 ............................................................
33730 * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t)
33731 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]'
33733 * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t)
33734 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]'
33736 6.56.3.66 Vector saturating doubling multiply high by scalar
33737 ............................................................
33739 * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t)
33740 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]'
33742 * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t)
33743 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]'
33745 * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t)
33746 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]'
33748 * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t)
33749 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]'
33751 * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t)
33752 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]'
33754 * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t)
33755 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]'
33757 * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t)
33758 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]'
33760 * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t)
33761 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]'
33763 6.56.3.67 Vector multiply-accumulate by scalar
33764 ..............................................
33766 * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t)
33767 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]'
33769 * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
33770 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
33772 * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
33773 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
33775 * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t)
33776 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
33778 * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t)
33779 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
33781 * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t)
33782 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]'
33784 * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
33785 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
33787 * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
33788 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
33790 * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t)
33791 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
33793 * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t)
33794 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
33796 * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
33797 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]'
33799 * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
33800 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]'
33802 * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
33803 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]'
33805 * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
33806 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]'
33808 * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
33809 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]'
33811 * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
33812 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]'
33814 6.56.3.68 Vector multiply-subtract by scalar
33815 ............................................
33817 * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t)
33818 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]'
33820 * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
33821 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
33823 * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
33824 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
33826 * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t)
33827 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
33829 * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t)
33830 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
33832 * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t)
33833 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]'
33835 * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
33836 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
33838 * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
33839 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
33841 * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t)
33842 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
33844 * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t)
33845 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
33847 * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
33848 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]'
33850 * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
33851 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]'
33853 * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
33854 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]'
33856 * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
33857 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]'
33859 * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
33860 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]'
33862 * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
33863 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]'
33865 6.56.3.69 Vector extract
33866 ........................
33868 * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int)
33869 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
33871 * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int)
33872 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
33874 * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int)
33875 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
33877 * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int)
33878 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
33880 * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int)
33881 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
33883 * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int)
33884 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
33886 * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int)
33887 _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0'
33889 * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int)
33890 _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0'
33892 * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int)
33893 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
33895 * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int)
33896 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
33898 * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int)
33899 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
33901 * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int)
33902 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
33904 * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int)
33905 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
33907 * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int)
33908 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
33910 * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int)
33911 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
33913 * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int)
33914 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
33916 * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int)
33917 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
33919 * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int)
33920 _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0'
33922 * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int)
33923 _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0'
33925 * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int)
33926 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
33928 * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int)
33929 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
33931 * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int)
33932 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
33934 6.56.3.70 Reverse elements
33935 ..........................
33937 * uint32x2_t vrev64_u32 (uint32x2_t)
33938 _Form of expected instruction(s):_ `vrev64.32 D0, D0'
33940 * uint16x4_t vrev64_u16 (uint16x4_t)
33941 _Form of expected instruction(s):_ `vrev64.16 D0, D0'
33943 * uint8x8_t vrev64_u8 (uint8x8_t)
33944 _Form of expected instruction(s):_ `vrev64.8 D0, D0'
33946 * int32x2_t vrev64_s32 (int32x2_t)
33947 _Form of expected instruction(s):_ `vrev64.32 D0, D0'
33949 * int16x4_t vrev64_s16 (int16x4_t)
33950 _Form of expected instruction(s):_ `vrev64.16 D0, D0'
33952 * int8x8_t vrev64_s8 (int8x8_t)
33953 _Form of expected instruction(s):_ `vrev64.8 D0, D0'
33955 * float32x2_t vrev64_f32 (float32x2_t)
33956 _Form of expected instruction(s):_ `vrev64.32 D0, D0'
33958 * poly16x4_t vrev64_p16 (poly16x4_t)
33959 _Form of expected instruction(s):_ `vrev64.16 D0, D0'
33961 * poly8x8_t vrev64_p8 (poly8x8_t)
33962 _Form of expected instruction(s):_ `vrev64.8 D0, D0'
33964 * uint32x4_t vrev64q_u32 (uint32x4_t)
33965 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
33967 * uint16x8_t vrev64q_u16 (uint16x8_t)
33968 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
33970 * uint8x16_t vrev64q_u8 (uint8x16_t)
33971 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
33973 * int32x4_t vrev64q_s32 (int32x4_t)
33974 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
33976 * int16x8_t vrev64q_s16 (int16x8_t)
33977 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
33979 * int8x16_t vrev64q_s8 (int8x16_t)
33980 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
33982 * float32x4_t vrev64q_f32 (float32x4_t)
33983 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
33985 * poly16x8_t vrev64q_p16 (poly16x8_t)
33986 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
33988 * poly8x16_t vrev64q_p8 (poly8x16_t)
33989 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
33991 * uint16x4_t vrev32_u16 (uint16x4_t)
33992 _Form of expected instruction(s):_ `vrev32.16 D0, D0'
33994 * int16x4_t vrev32_s16 (int16x4_t)
33995 _Form of expected instruction(s):_ `vrev32.16 D0, D0'
33997 * uint8x8_t vrev32_u8 (uint8x8_t)
33998 _Form of expected instruction(s):_ `vrev32.8 D0, D0'
34000 * int8x8_t vrev32_s8 (int8x8_t)
34001 _Form of expected instruction(s):_ `vrev32.8 D0, D0'
34003 * poly16x4_t vrev32_p16 (poly16x4_t)
34004 _Form of expected instruction(s):_ `vrev32.16 D0, D0'
34006 * poly8x8_t vrev32_p8 (poly8x8_t)
34007 _Form of expected instruction(s):_ `vrev32.8 D0, D0'
34009 * uint16x8_t vrev32q_u16 (uint16x8_t)
34010 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
34012 * int16x8_t vrev32q_s16 (int16x8_t)
34013 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
34015 * uint8x16_t vrev32q_u8 (uint8x16_t)
34016 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
34018 * int8x16_t vrev32q_s8 (int8x16_t)
34019 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
34021 * poly16x8_t vrev32q_p16 (poly16x8_t)
34022 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
34024 * poly8x16_t vrev32q_p8 (poly8x16_t)
34025 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
34027 * uint8x8_t vrev16_u8 (uint8x8_t)
34028 _Form of expected instruction(s):_ `vrev16.8 D0, D0'
34030 * int8x8_t vrev16_s8 (int8x8_t)
34031 _Form of expected instruction(s):_ `vrev16.8 D0, D0'
34033 * poly8x8_t vrev16_p8 (poly8x8_t)
34034 _Form of expected instruction(s):_ `vrev16.8 D0, D0'
34036 * uint8x16_t vrev16q_u8 (uint8x16_t)
34037 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
34039 * int8x16_t vrev16q_s8 (int8x16_t)
34040 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
34042 * poly8x16_t vrev16q_p8 (poly8x16_t)
34043 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
34045 6.56.3.71 Bit selection
34046 .......................
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
34136 6.56.3.72 Transpose elements
34137 ............................
34139 * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t)
34140 _Form of expected instruction(s):_ `vtrn.16 D0, D1'
34142 * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t)
34143 _Form of expected instruction(s):_ `vtrn.8 D0, D1'
34145 * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t)
34146 _Form of expected instruction(s):_ `vtrn.16 D0, D1'
34148 * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t)
34149 _Form of expected instruction(s):_ `vtrn.8 D0, D1'
34151 * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t)
34152 _Form of expected instruction(s):_ `vtrn.16 D0, D1'
34154 * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t)
34155 _Form of expected instruction(s):_ `vtrn.8 D0, D1'
34157 * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t)
34158 _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34160 * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t)
34161 _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34163 * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t)
34164 _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34166 * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t)
34167 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
34169 * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t)
34170 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
34172 * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t)
34173 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
34175 * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t)
34176 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
34178 * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t)
34179 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
34181 * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t)
34182 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
34184 * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t)
34185 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
34187 * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t)
34188 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
34190 * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t)
34191 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
34193 6.56.3.73 Zip elements
34194 ......................
34196 * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t)
34197 _Form of expected instruction(s):_ `vzip.16 D0, D1'
34199 * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t)
34200 _Form of expected instruction(s):_ `vzip.8 D0, D1'
34202 * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t)
34203 _Form of expected instruction(s):_ `vzip.16 D0, D1'
34205 * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t)
34206 _Form of expected instruction(s):_ `vzip.8 D0, D1'
34208 * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t)
34209 _Form of expected instruction(s):_ `vzip.16 D0, D1'
34211 * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t)
34212 _Form of expected instruction(s):_ `vzip.8 D0, D1'
34214 * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t)
34215 _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34217 * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t)
34218 _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34220 * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t)
34221 _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34223 * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t)
34224 _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
34226 * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t)
34227 _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
34229 * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t)
34230 _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
34232 * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t)
34233 _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
34235 * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t)
34236 _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
34238 * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t)
34239 _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
34241 * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t)
34242 _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
34244 * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t)
34245 _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
34247 * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t)
34248 _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
34250 6.56.3.74 Unzip elements
34251 ........................
34253 * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t)
34254 _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34256 * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t)
34257 _Form of expected instruction(s):_ `vuzp.16 D0, D1'
34259 * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t)
34260 _Form of expected instruction(s):_ `vuzp.8 D0, D1'
34262 * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t)
34263 _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34265 * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t)
34266 _Form of expected instruction(s):_ `vuzp.16 D0, D1'
34268 * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t)
34269 _Form of expected instruction(s):_ `vuzp.8 D0, D1'
34271 * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t)
34272 _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34274 * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t)
34275 _Form of expected instruction(s):_ `vuzp.16 D0, D1'
34277 * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t)
34278 _Form of expected instruction(s):_ `vuzp.8 D0, D1'
34280 * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t)
34281 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
34283 * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t)
34284 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
34286 * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t)
34287 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
34289 * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t)
34290 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
34292 * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t)
34293 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
34295 * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t)
34296 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
34298 * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t)
34299 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
34301 * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t)
34302 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
34304 * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t)
34305 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
34307 6.56.3.75 Element/structure loads, VLD1 variants
34308 ................................................
34310 * uint32x2_t vld1_u32 (const uint32_t *)
34311 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
34313 * uint16x4_t vld1_u16 (const uint16_t *)
34314 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
34316 * uint8x8_t vld1_u8 (const uint8_t *)
34317 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
34319 * int32x2_t vld1_s32 (const int32_t *)
34320 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
34322 * int16x4_t vld1_s16 (const int16_t *)
34323 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
34325 * int8x8_t vld1_s8 (const int8_t *)
34326 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
34328 * uint64x1_t vld1_u64 (const uint64_t *)
34329 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34331 * int64x1_t vld1_s64 (const int64_t *)
34332 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34334 * float32x2_t vld1_f32 (const float32_t *)
34335 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
34337 * poly16x4_t vld1_p16 (const poly16_t *)
34338 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
34340 * poly8x8_t vld1_p8 (const poly8_t *)
34341 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
34343 * uint32x4_t vld1q_u32 (const uint32_t *)
34344 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
34346 * uint16x8_t vld1q_u16 (const uint16_t *)
34347 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
34349 * uint8x16_t vld1q_u8 (const uint8_t *)
34350 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
34352 * int32x4_t vld1q_s32 (const int32_t *)
34353 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
34355 * int16x8_t vld1q_s16 (const int16_t *)
34356 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
34358 * int8x16_t vld1q_s8 (const int8_t *)
34359 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
34361 * uint64x2_t vld1q_u64 (const uint64_t *)
34362 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
34364 * int64x2_t vld1q_s64 (const int64_t *)
34365 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
34367 * float32x4_t vld1q_f32 (const float32_t *)
34368 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
34370 * poly16x8_t vld1q_p16 (const poly16_t *)
34371 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
34373 * poly8x16_t vld1q_p8 (const poly8_t *)
34374 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
34376 * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int)
34377 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
34379 * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int)
34380 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
34382 * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int)
34383 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
34385 * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int)
34386 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
34388 * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int)
34389 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
34391 * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int)
34392 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
34394 * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const
34396 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
34398 * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int)
34399 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
34401 * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int)
34402 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
34404 * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int)
34405 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34407 * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int)
34408 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34410 * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int)
34411 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
34413 * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int)
34414 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
34416 * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int)
34417 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
34419 * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int)
34420 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
34422 * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int)
34423 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
34425 * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int)
34426 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
34428 * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const
34430 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
34432 * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int)
34433 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
34435 * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int)
34436 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
34438 * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int)
34439 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34441 * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int)
34442 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34444 * uint32x2_t vld1_dup_u32 (const uint32_t *)
34445 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
34447 * uint16x4_t vld1_dup_u16 (const uint16_t *)
34448 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
34450 * uint8x8_t vld1_dup_u8 (const uint8_t *)
34451 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
34453 * int32x2_t vld1_dup_s32 (const int32_t *)
34454 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
34456 * int16x4_t vld1_dup_s16 (const int16_t *)
34457 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
34459 * int8x8_t vld1_dup_s8 (const int8_t *)
34460 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
34462 * float32x2_t vld1_dup_f32 (const float32_t *)
34463 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
34465 * poly16x4_t vld1_dup_p16 (const poly16_t *)
34466 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
34468 * poly8x8_t vld1_dup_p8 (const poly8_t *)
34469 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
34471 * uint64x1_t vld1_dup_u64 (const uint64_t *)
34472 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34474 * int64x1_t vld1_dup_s64 (const int64_t *)
34475 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34477 * uint32x4_t vld1q_dup_u32 (const uint32_t *)
34478 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
34480 * uint16x8_t vld1q_dup_u16 (const uint16_t *)
34481 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
34483 * uint8x16_t vld1q_dup_u8 (const uint8_t *)
34484 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
34486 * int32x4_t vld1q_dup_s32 (const int32_t *)
34487 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
34489 * int16x8_t vld1q_dup_s16 (const int16_t *)
34490 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
34492 * int8x16_t vld1q_dup_s8 (const int8_t *)
34493 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
34495 * float32x4_t vld1q_dup_f32 (const float32_t *)
34496 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
34498 * poly16x8_t vld1q_dup_p16 (const poly16_t *)
34499 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
34501 * poly8x16_t vld1q_dup_p8 (const poly8_t *)
34502 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
34504 * uint64x2_t vld1q_dup_u64 (const uint64_t *)
34505 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34507 * int64x2_t vld1q_dup_s64 (const int64_t *)
34508 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34510 6.56.3.76 Element/structure stores, VST1 variants
34511 .................................................
34513 * void vst1_u32 (uint32_t *, uint32x2_t)
34514 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
34516 * void vst1_u16 (uint16_t *, uint16x4_t)
34517 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
34519 * void vst1_u8 (uint8_t *, uint8x8_t)
34520 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
34522 * void vst1_s32 (int32_t *, int32x2_t)
34523 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
34525 * void vst1_s16 (int16_t *, int16x4_t)
34526 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
34528 * void vst1_s8 (int8_t *, int8x8_t)
34529 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
34531 * void vst1_u64 (uint64_t *, uint64x1_t)
34532 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
34534 * void vst1_s64 (int64_t *, int64x1_t)
34535 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
34537 * void vst1_f32 (float32_t *, float32x2_t)
34538 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
34540 * void vst1_p16 (poly16_t *, poly16x4_t)
34541 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
34543 * void vst1_p8 (poly8_t *, poly8x8_t)
34544 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
34546 * void vst1q_u32 (uint32_t *, uint32x4_t)
34547 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
34549 * void vst1q_u16 (uint16_t *, uint16x8_t)
34550 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
34552 * void vst1q_u8 (uint8_t *, uint8x16_t)
34553 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
34555 * void vst1q_s32 (int32_t *, int32x4_t)
34556 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
34558 * void vst1q_s16 (int16_t *, int16x8_t)
34559 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
34561 * void vst1q_s8 (int8_t *, int8x16_t)
34562 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
34564 * void vst1q_u64 (uint64_t *, uint64x2_t)
34565 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
34567 * void vst1q_s64 (int64_t *, int64x2_t)
34568 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
34570 * void vst1q_f32 (float32_t *, float32x4_t)
34571 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
34573 * void vst1q_p16 (poly16_t *, poly16x8_t)
34574 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
34576 * void vst1q_p8 (poly8_t *, poly8x16_t)
34577 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
34579 * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int)
34580 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
34582 * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int)
34583 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
34585 * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int)
34586 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
34588 * void vst1_lane_s32 (int32_t *, int32x2_t, const int)
34589 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
34591 * void vst1_lane_s16 (int16_t *, int16x4_t, const int)
34592 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
34594 * void vst1_lane_s8 (int8_t *, int8x8_t, const int)
34595 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
34597 * void vst1_lane_f32 (float32_t *, float32x2_t, const int)
34598 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
34600 * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int)
34601 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
34603 * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int)
34604 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
34606 * void vst1_lane_s64 (int64_t *, int64x1_t, const int)
34607 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
34609 * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int)
34610 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
34612 * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int)
34613 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
34615 * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int)
34616 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
34618 * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int)
34619 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
34621 * void vst1q_lane_s32 (int32_t *, int32x4_t, const int)
34622 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
34624 * void vst1q_lane_s16 (int16_t *, int16x8_t, const int)
34625 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
34627 * void vst1q_lane_s8 (int8_t *, int8x16_t, const int)
34628 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
34630 * void vst1q_lane_f32 (float32_t *, float32x4_t, const int)
34631 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
34633 * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int)
34634 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
34636 * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int)
34637 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
34639 * void vst1q_lane_s64 (int64_t *, int64x2_t, const int)
34640 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
34642 * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int)
34643 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
34645 6.56.3.77 Element/structure loads, VLD2 variants
34646 ................................................
34648 * uint32x2x2_t vld2_u32 (const uint32_t *)
34649 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
34651 * uint16x4x2_t vld2_u16 (const uint16_t *)
34652 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
34654 * uint8x8x2_t vld2_u8 (const uint8_t *)
34655 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
34657 * int32x2x2_t vld2_s32 (const int32_t *)
34658 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
34660 * int16x4x2_t vld2_s16 (const int16_t *)
34661 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
34663 * int8x8x2_t vld2_s8 (const int8_t *)
34664 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
34666 * float32x2x2_t vld2_f32 (const float32_t *)
34667 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
34669 * poly16x4x2_t vld2_p16 (const poly16_t *)
34670 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
34672 * poly8x8x2_t vld2_p8 (const poly8_t *)
34673 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
34675 * uint64x1x2_t vld2_u64 (const uint64_t *)
34676 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
34678 * int64x1x2_t vld2_s64 (const int64_t *)
34679 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
34681 * uint32x4x2_t vld2q_u32 (const uint32_t *)
34682 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
34684 * uint16x8x2_t vld2q_u16 (const uint16_t *)
34685 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
34687 * uint8x16x2_t vld2q_u8 (const uint8_t *)
34688 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
34690 * int32x4x2_t vld2q_s32 (const int32_t *)
34691 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
34693 * int16x8x2_t vld2q_s16 (const int16_t *)
34694 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
34696 * int8x16x2_t vld2q_s8 (const int8_t *)
34697 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
34699 * float32x4x2_t vld2q_f32 (const float32_t *)
34700 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
34702 * poly16x8x2_t vld2q_p16 (const poly16_t *)
34703 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
34705 * poly8x16x2_t vld2q_p8 (const poly8_t *)
34706 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
34708 * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const
34710 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
34712 * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const
34714 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
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]'
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]'
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]'
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]'
34728 * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t,
34730 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
34732 * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const
34734 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
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]'
34739 * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const
34741 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
34743 * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const
34745 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
34747 * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const
34749 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
34751 * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const
34753 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
34755 * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t,
34757 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
34759 * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const
34761 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
34763 * uint32x2x2_t vld2_dup_u32 (const uint32_t *)
34764 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
34766 * uint16x4x2_t vld2_dup_u16 (const uint16_t *)
34767 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
34769 * uint8x8x2_t vld2_dup_u8 (const uint8_t *)
34770 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
34772 * int32x2x2_t vld2_dup_s32 (const int32_t *)
34773 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
34775 * int16x4x2_t vld2_dup_s16 (const int16_t *)
34776 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
34778 * int8x8x2_t vld2_dup_s8 (const int8_t *)
34779 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
34781 * float32x2x2_t vld2_dup_f32 (const float32_t *)
34782 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
34784 * poly16x4x2_t vld2_dup_p16 (const poly16_t *)
34785 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
34787 * poly8x8x2_t vld2_dup_p8 (const poly8_t *)
34788 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
34790 * uint64x1x2_t vld2_dup_u64 (const uint64_t *)
34791 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
34793 * int64x1x2_t vld2_dup_s64 (const int64_t *)
34794 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
34796 6.56.3.78 Element/structure stores, VST2 variants
34797 .................................................
34799 * void vst2_u32 (uint32_t *, uint32x2x2_t)
34800 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
34802 * void vst2_u16 (uint16_t *, uint16x4x2_t)
34803 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
34805 * void vst2_u8 (uint8_t *, uint8x8x2_t)
34806 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
34808 * void vst2_s32 (int32_t *, int32x2x2_t)
34809 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
34811 * void vst2_s16 (int16_t *, int16x4x2_t)
34812 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
34814 * void vst2_s8 (int8_t *, int8x8x2_t)
34815 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
34817 * void vst2_f32 (float32_t *, float32x2x2_t)
34818 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
34820 * void vst2_p16 (poly16_t *, poly16x4x2_t)
34821 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
34823 * void vst2_p8 (poly8_t *, poly8x8x2_t)
34824 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
34826 * void vst2_u64 (uint64_t *, uint64x1x2_t)
34827 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
34829 * void vst2_s64 (int64_t *, int64x1x2_t)
34830 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
34832 * void vst2q_u32 (uint32_t *, uint32x4x2_t)
34833 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
34835 * void vst2q_u16 (uint16_t *, uint16x8x2_t)
34836 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
34838 * void vst2q_u8 (uint8_t *, uint8x16x2_t)
34839 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
34841 * void vst2q_s32 (int32_t *, int32x4x2_t)
34842 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
34844 * void vst2q_s16 (int16_t *, int16x8x2_t)
34845 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
34847 * void vst2q_s8 (int8_t *, int8x16x2_t)
34848 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
34850 * void vst2q_f32 (float32_t *, float32x4x2_t)
34851 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
34853 * void vst2q_p16 (poly16_t *, poly16x8x2_t)
34854 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
34856 * void vst2q_p8 (poly8_t *, poly8x16x2_t)
34857 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
34859 * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int)
34860 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
34862 * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int)
34863 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
34865 * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int)
34866 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
34868 * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int)
34869 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
34871 * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int)
34872 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
34874 * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int)
34875 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
34877 * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int)
34878 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
34880 * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int)
34881 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
34883 * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int)
34884 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
34886 * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int)
34887 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
34889 * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int)
34890 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
34892 * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int)
34893 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
34895 * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int)
34896 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
34898 * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int)
34899 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
34901 * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int)
34902 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
34904 6.56.3.79 Element/structure loads, VLD3 variants
34905 ................................................
34907 * uint32x2x3_t vld3_u32 (const uint32_t *)
34908 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
34910 * uint16x4x3_t vld3_u16 (const uint16_t *)
34911 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
34913 * uint8x8x3_t vld3_u8 (const uint8_t *)
34914 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
34916 * int32x2x3_t vld3_s32 (const int32_t *)
34917 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
34919 * int16x4x3_t vld3_s16 (const int16_t *)
34920 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
34922 * int8x8x3_t vld3_s8 (const int8_t *)
34923 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
34925 * float32x2x3_t vld3_f32 (const float32_t *)
34926 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
34928 * poly16x4x3_t vld3_p16 (const poly16_t *)
34929 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
34931 * poly8x8x3_t vld3_p8 (const poly8_t *)
34932 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
34934 * uint64x1x3_t vld3_u64 (const uint64_t *)
34935 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
34937 * int64x1x3_t vld3_s64 (const int64_t *)
34938 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
34940 * uint32x4x3_t vld3q_u32 (const uint32_t *)
34941 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
34943 * uint16x8x3_t vld3q_u16 (const uint16_t *)
34944 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
34946 * uint8x16x3_t vld3q_u8 (const uint8_t *)
34947 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
34949 * int32x4x3_t vld3q_s32 (const int32_t *)
34950 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
34952 * int16x8x3_t vld3q_s16 (const int16_t *)
34953 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
34955 * int8x16x3_t vld3q_s8 (const int8_t *)
34956 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
34958 * float32x4x3_t vld3q_f32 (const float32_t *)
34959 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
34961 * poly16x8x3_t vld3q_p16 (const poly16_t *)
34962 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
34964 * poly8x16x3_t vld3q_p8 (const poly8_t *)
34965 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
34967 * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const
34969 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
34972 * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const
34974 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
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]},
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]},
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]},
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]},
34993 * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t,
34995 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
34998 * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const
35000 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
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]},
35007 * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const
35009 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
35012 * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const
35014 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
35017 * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const
35019 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
35022 * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const
35024 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
35027 * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t,
35029 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
35032 * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const
35034 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
35037 * uint32x2x3_t vld3_dup_u32 (const uint32_t *)
35038 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
35041 * uint16x4x3_t vld3_dup_u16 (const uint16_t *)
35042 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
35045 * uint8x8x3_t vld3_dup_u8 (const uint8_t *)
35046 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
35049 * int32x2x3_t vld3_dup_s32 (const int32_t *)
35050 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
35053 * int16x4x3_t vld3_dup_s16 (const int16_t *)
35054 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
35057 * int8x8x3_t vld3_dup_s8 (const int8_t *)
35058 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
35061 * float32x2x3_t vld3_dup_f32 (const float32_t *)
35062 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
35065 * poly16x4x3_t vld3_dup_p16 (const poly16_t *)
35066 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
35069 * poly8x8x3_t vld3_dup_p8 (const poly8_t *)
35070 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
35073 * uint64x1x3_t vld3_dup_u64 (const uint64_t *)
35074 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
35076 * int64x1x3_t vld3_dup_s64 (const int64_t *)
35077 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
35079 6.56.3.80 Element/structure stores, VST3 variants
35080 .................................................
35082 * void vst3_u32 (uint32_t *, uint32x2x3_t)
35083 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
35085 * void vst3_u16 (uint16_t *, uint16x4x3_t)
35086 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
35088 * void vst3_u8 (uint8_t *, uint8x8x3_t)
35089 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
35091 * void vst3_s32 (int32_t *, int32x2x3_t)
35092 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
35094 * void vst3_s16 (int16_t *, int16x4x3_t)
35095 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
35097 * void vst3_s8 (int8_t *, int8x8x3_t)
35098 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
35100 * void vst3_f32 (float32_t *, float32x2x3_t)
35101 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
35103 * void vst3_p16 (poly16_t *, poly16x4x3_t)
35104 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
35106 * void vst3_p8 (poly8_t *, poly8x8x3_t)
35107 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
35109 * void vst3_u64 (uint64_t *, uint64x1x3_t)
35110 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
35112 * void vst3_s64 (int64_t *, int64x1x3_t)
35113 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
35115 * void vst3q_u32 (uint32_t *, uint32x4x3_t)
35116 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
35118 * void vst3q_u16 (uint16_t *, uint16x8x3_t)
35119 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
35121 * void vst3q_u8 (uint8_t *, uint8x16x3_t)
35122 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
35124 * void vst3q_s32 (int32_t *, int32x4x3_t)
35125 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
35127 * void vst3q_s16 (int16_t *, int16x8x3_t)
35128 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
35130 * void vst3q_s8 (int8_t *, int8x16x3_t)
35131 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
35133 * void vst3q_f32 (float32_t *, float32x4x3_t)
35134 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
35136 * void vst3q_p16 (poly16_t *, poly16x8x3_t)
35137 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
35139 * void vst3q_p8 (poly8_t *, poly8x16x3_t)
35140 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
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]},
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]},
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]},
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]},
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]},
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]},
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]},
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]},
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]},
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]},
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]},
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]},
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]},
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]},
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]},
35202 6.56.3.81 Element/structure loads, VLD4 variants
35203 ................................................
35205 * uint32x2x4_t vld4_u32 (const uint32_t *)
35206 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
35208 * uint16x4x4_t vld4_u16 (const uint16_t *)
35209 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
35211 * uint8x8x4_t vld4_u8 (const uint8_t *)
35212 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
35214 * int32x2x4_t vld4_s32 (const int32_t *)
35215 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
35217 * int16x4x4_t vld4_s16 (const int16_t *)
35218 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
35220 * int8x8x4_t vld4_s8 (const int8_t *)
35221 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
35223 * float32x2x4_t vld4_f32 (const float32_t *)
35224 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
35226 * poly16x4x4_t vld4_p16 (const poly16_t *)
35227 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
35229 * poly8x8x4_t vld4_p8 (const poly8_t *)
35230 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
35232 * uint64x1x4_t vld4_u64 (const uint64_t *)
35233 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
35235 * int64x1x4_t vld4_s64 (const int64_t *)
35236 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
35238 * uint32x4x4_t vld4q_u32 (const uint32_t *)
35239 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
35241 * uint16x8x4_t vld4q_u16 (const uint16_t *)
35242 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
35244 * uint8x16x4_t vld4q_u8 (const uint8_t *)
35245 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
35247 * int32x4x4_t vld4q_s32 (const int32_t *)
35248 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
35250 * int16x8x4_t vld4q_s16 (const int16_t *)
35251 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
35253 * int8x16x4_t vld4q_s8 (const int8_t *)
35254 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
35256 * float32x4x4_t vld4q_f32 (const float32_t *)
35257 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
35259 * poly16x8x4_t vld4q_p16 (const poly16_t *)
35260 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
35262 * poly8x16x4_t vld4q_p8 (const poly8_t *)
35263 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
35265 * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const
35267 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
35270 * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const
35272 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
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],
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],
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],
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],
35291 * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t,
35293 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
35296 * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const
35298 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
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],
35305 * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const
35307 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
35310 * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const
35312 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
35315 * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const
35317 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
35320 * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const
35322 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
35325 * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t,
35327 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
35330 * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const
35332 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
35335 * uint32x2x4_t vld4_dup_u32 (const uint32_t *)
35336 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
35339 * uint16x4x4_t vld4_dup_u16 (const uint16_t *)
35340 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
35343 * uint8x8x4_t vld4_dup_u8 (const uint8_t *)
35344 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
35347 * int32x2x4_t vld4_dup_s32 (const int32_t *)
35348 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
35351 * int16x4x4_t vld4_dup_s16 (const int16_t *)
35352 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
35355 * int8x8x4_t vld4_dup_s8 (const int8_t *)
35356 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
35359 * float32x2x4_t vld4_dup_f32 (const float32_t *)
35360 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
35363 * poly16x4x4_t vld4_dup_p16 (const poly16_t *)
35364 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
35367 * poly8x8x4_t vld4_dup_p8 (const poly8_t *)
35368 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
35371 * uint64x1x4_t vld4_dup_u64 (const uint64_t *)
35372 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
35374 * int64x1x4_t vld4_dup_s64 (const int64_t *)
35375 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
35377 6.56.3.82 Element/structure stores, VST4 variants
35378 .................................................
35380 * void vst4_u32 (uint32_t *, uint32x2x4_t)
35381 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
35383 * void vst4_u16 (uint16_t *, uint16x4x4_t)
35384 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
35386 * void vst4_u8 (uint8_t *, uint8x8x4_t)
35387 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
35389 * void vst4_s32 (int32_t *, int32x2x4_t)
35390 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
35392 * void vst4_s16 (int16_t *, int16x4x4_t)
35393 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
35395 * void vst4_s8 (int8_t *, int8x8x4_t)
35396 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
35398 * void vst4_f32 (float32_t *, float32x2x4_t)
35399 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
35401 * void vst4_p16 (poly16_t *, poly16x4x4_t)
35402 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
35404 * void vst4_p8 (poly8_t *, poly8x8x4_t)
35405 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
35407 * void vst4_u64 (uint64_t *, uint64x1x4_t)
35408 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
35410 * void vst4_s64 (int64_t *, int64x1x4_t)
35411 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
35413 * void vst4q_u32 (uint32_t *, uint32x4x4_t)
35414 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
35416 * void vst4q_u16 (uint16_t *, uint16x8x4_t)
35417 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
35419 * void vst4q_u8 (uint8_t *, uint8x16x4_t)
35420 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
35422 * void vst4q_s32 (int32_t *, int32x4x4_t)
35423 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
35425 * void vst4q_s16 (int16_t *, int16x8x4_t)
35426 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
35428 * void vst4q_s8 (int8_t *, int8x16x4_t)
35429 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
35431 * void vst4q_f32 (float32_t *, float32x4x4_t)
35432 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
35434 * void vst4q_p16 (poly16_t *, poly16x8x4_t)
35435 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
35437 * void vst4q_p8 (poly8_t *, poly8x16x4_t)
35438 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
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],
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],
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],
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],
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],
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],
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],
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],
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],
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],
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],
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],
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],
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],
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],
35500 6.56.3.83 Logical operations (AND)
35501 ..................................
35503 * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t)
35504 _Form of expected instruction(s):_ `vand D0, D0, D0'
35506 * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t)
35507 _Form of expected instruction(s):_ `vand D0, D0, D0'
35509 * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t)
35510 _Form of expected instruction(s):_ `vand D0, D0, D0'
35512 * int32x2_t vand_s32 (int32x2_t, int32x2_t)
35513 _Form of expected instruction(s):_ `vand D0, D0, D0'
35515 * int16x4_t vand_s16 (int16x4_t, int16x4_t)
35516 _Form of expected instruction(s):_ `vand D0, D0, D0'
35518 * int8x8_t vand_s8 (int8x8_t, int8x8_t)
35519 _Form of expected instruction(s):_ `vand D0, D0, D0'
35521 * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t)
35523 * int64x1_t vand_s64 (int64x1_t, int64x1_t)
35525 * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t)
35526 _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35528 * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t)
35529 _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35531 * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t)
35532 _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35534 * int32x4_t vandq_s32 (int32x4_t, int32x4_t)
35535 _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35537 * int16x8_t vandq_s16 (int16x8_t, int16x8_t)
35538 _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35540 * int8x16_t vandq_s8 (int8x16_t, int8x16_t)
35541 _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35543 * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t)
35544 _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35546 * int64x2_t vandq_s64 (int64x2_t, int64x2_t)
35547 _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35549 6.56.3.84 Logical operations (OR)
35550 .................................
35552 * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t)
35553 _Form of expected instruction(s):_ `vorr D0, D0, D0'
35555 * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t)
35556 _Form of expected instruction(s):_ `vorr D0, D0, D0'
35558 * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t)
35559 _Form of expected instruction(s):_ `vorr D0, D0, D0'
35561 * int32x2_t vorr_s32 (int32x2_t, int32x2_t)
35562 _Form of expected instruction(s):_ `vorr D0, D0, D0'
35564 * int16x4_t vorr_s16 (int16x4_t, int16x4_t)
35565 _Form of expected instruction(s):_ `vorr D0, D0, D0'
35567 * int8x8_t vorr_s8 (int8x8_t, int8x8_t)
35568 _Form of expected instruction(s):_ `vorr D0, D0, D0'
35570 * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t)
35572 * int64x1_t vorr_s64 (int64x1_t, int64x1_t)
35574 * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t)
35575 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35577 * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t)
35578 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35580 * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t)
35581 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35583 * int32x4_t vorrq_s32 (int32x4_t, int32x4_t)
35584 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35586 * int16x8_t vorrq_s16 (int16x8_t, int16x8_t)
35587 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35589 * int8x16_t vorrq_s8 (int8x16_t, int8x16_t)
35590 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35592 * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t)
35593 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35595 * int64x2_t vorrq_s64 (int64x2_t, int64x2_t)
35596 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35598 6.56.3.85 Logical operations (exclusive OR)
35599 ...........................................
35601 * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t)
35602 _Form of expected instruction(s):_ `veor D0, D0, D0'
35604 * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t)
35605 _Form of expected instruction(s):_ `veor D0, D0, D0'
35607 * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t)
35608 _Form of expected instruction(s):_ `veor D0, D0, D0'
35610 * int32x2_t veor_s32 (int32x2_t, int32x2_t)
35611 _Form of expected instruction(s):_ `veor D0, D0, D0'
35613 * int16x4_t veor_s16 (int16x4_t, int16x4_t)
35614 _Form of expected instruction(s):_ `veor D0, D0, D0'
35616 * int8x8_t veor_s8 (int8x8_t, int8x8_t)
35617 _Form of expected instruction(s):_ `veor D0, D0, D0'
35619 * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t)
35621 * int64x1_t veor_s64 (int64x1_t, int64x1_t)
35623 * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t)
35624 _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35626 * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t)
35627 _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35629 * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t)
35630 _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35632 * int32x4_t veorq_s32 (int32x4_t, int32x4_t)
35633 _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35635 * int16x8_t veorq_s16 (int16x8_t, int16x8_t)
35636 _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35638 * int8x16_t veorq_s8 (int8x16_t, int8x16_t)
35639 _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35641 * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t)
35642 _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35644 * int64x2_t veorq_s64 (int64x2_t, int64x2_t)
35645 _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35647 6.56.3.86 Logical operations (AND-NOT)
35648 ......................................
35650 * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t)
35651 _Form of expected instruction(s):_ `vbic D0, D0, D0'
35653 * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t)
35654 _Form of expected instruction(s):_ `vbic D0, D0, D0'
35656 * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t)
35657 _Form of expected instruction(s):_ `vbic D0, D0, D0'
35659 * int32x2_t vbic_s32 (int32x2_t, int32x2_t)
35660 _Form of expected instruction(s):_ `vbic D0, D0, D0'
35662 * int16x4_t vbic_s16 (int16x4_t, int16x4_t)
35663 _Form of expected instruction(s):_ `vbic D0, D0, D0'
35665 * int8x8_t vbic_s8 (int8x8_t, int8x8_t)
35666 _Form of expected instruction(s):_ `vbic D0, D0, D0'
35668 * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t)
35670 * int64x1_t vbic_s64 (int64x1_t, int64x1_t)
35672 * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t)
35673 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
35675 * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t)
35676 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
35678 * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t)
35679 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
35681 * int32x4_t vbicq_s32 (int32x4_t, int32x4_t)
35682 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
35684 * int16x8_t vbicq_s16 (int16x8_t, int16x8_t)
35685 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
35687 * int8x16_t vbicq_s8 (int8x16_t, int8x16_t)
35688 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
35690 * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t)
35691 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
35693 * int64x2_t vbicq_s64 (int64x2_t, int64x2_t)
35694 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
35696 6.56.3.87 Logical operations (OR-NOT)
35697 .....................................
35699 * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t)
35700 _Form of expected instruction(s):_ `vorn D0, D0, D0'
35702 * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t)
35703 _Form of expected instruction(s):_ `vorn D0, D0, D0'
35705 * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t)
35706 _Form of expected instruction(s):_ `vorn D0, D0, D0'
35708 * int32x2_t vorn_s32 (int32x2_t, int32x2_t)
35709 _Form of expected instruction(s):_ `vorn D0, D0, D0'
35711 * int16x4_t vorn_s16 (int16x4_t, int16x4_t)
35712 _Form of expected instruction(s):_ `vorn D0, D0, D0'
35714 * int8x8_t vorn_s8 (int8x8_t, int8x8_t)
35715 _Form of expected instruction(s):_ `vorn D0, D0, D0'
35717 * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t)
35719 * int64x1_t vorn_s64 (int64x1_t, int64x1_t)
35721 * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t)
35722 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
35724 * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t)
35725 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
35727 * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t)
35728 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
35730 * int32x4_t vornq_s32 (int32x4_t, int32x4_t)
35731 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
35733 * int16x8_t vornq_s16 (int16x8_t, int16x8_t)
35734 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
35736 * int8x16_t vornq_s8 (int8x16_t, int8x16_t)
35737 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
35739 * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t)
35740 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
35742 * int64x2_t vornq_s64 (int64x2_t, int64x2_t)
35743 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
35745 6.56.3.88 Reinterpret casts
35746 ...........................
35748 * poly8x8_t vreinterpret_p8_u32 (uint32x2_t)
35750 * poly8x8_t vreinterpret_p8_u16 (uint16x4_t)
35752 * poly8x8_t vreinterpret_p8_u8 (uint8x8_t)
35754 * poly8x8_t vreinterpret_p8_s32 (int32x2_t)
35756 * poly8x8_t vreinterpret_p8_s16 (int16x4_t)
35758 * poly8x8_t vreinterpret_p8_s8 (int8x8_t)
35760 * poly8x8_t vreinterpret_p8_u64 (uint64x1_t)
35762 * poly8x8_t vreinterpret_p8_s64 (int64x1_t)
35764 * poly8x8_t vreinterpret_p8_f32 (float32x2_t)
35766 * poly8x8_t vreinterpret_p8_p16 (poly16x4_t)
35768 * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t)
35770 * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t)
35772 * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t)
35774 * poly8x16_t vreinterpretq_p8_s32 (int32x4_t)
35776 * poly8x16_t vreinterpretq_p8_s16 (int16x8_t)
35778 * poly8x16_t vreinterpretq_p8_s8 (int8x16_t)
35780 * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t)
35782 * poly8x16_t vreinterpretq_p8_s64 (int64x2_t)
35784 * poly8x16_t vreinterpretq_p8_f32 (float32x4_t)
35786 * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t)
35788 * poly16x4_t vreinterpret_p16_u32 (uint32x2_t)
35790 * poly16x4_t vreinterpret_p16_u16 (uint16x4_t)
35792 * poly16x4_t vreinterpret_p16_u8 (uint8x8_t)
35794 * poly16x4_t vreinterpret_p16_s32 (int32x2_t)
35796 * poly16x4_t vreinterpret_p16_s16 (int16x4_t)
35798 * poly16x4_t vreinterpret_p16_s8 (int8x8_t)
35800 * poly16x4_t vreinterpret_p16_u64 (uint64x1_t)
35802 * poly16x4_t vreinterpret_p16_s64 (int64x1_t)
35804 * poly16x4_t vreinterpret_p16_f32 (float32x2_t)
35806 * poly16x4_t vreinterpret_p16_p8 (poly8x8_t)
35808 * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t)
35810 * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t)
35812 * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t)
35814 * poly16x8_t vreinterpretq_p16_s32 (int32x4_t)
35816 * poly16x8_t vreinterpretq_p16_s16 (int16x8_t)
35818 * poly16x8_t vreinterpretq_p16_s8 (int8x16_t)
35820 * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t)
35822 * poly16x8_t vreinterpretq_p16_s64 (int64x2_t)
35824 * poly16x8_t vreinterpretq_p16_f32 (float32x4_t)
35826 * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t)
35828 * float32x2_t vreinterpret_f32_u32 (uint32x2_t)
35830 * float32x2_t vreinterpret_f32_u16 (uint16x4_t)
35832 * float32x2_t vreinterpret_f32_u8 (uint8x8_t)
35834 * float32x2_t vreinterpret_f32_s32 (int32x2_t)
35836 * float32x2_t vreinterpret_f32_s16 (int16x4_t)
35838 * float32x2_t vreinterpret_f32_s8 (int8x8_t)
35840 * float32x2_t vreinterpret_f32_u64 (uint64x1_t)
35842 * float32x2_t vreinterpret_f32_s64 (int64x1_t)
35844 * float32x2_t vreinterpret_f32_p16 (poly16x4_t)
35846 * float32x2_t vreinterpret_f32_p8 (poly8x8_t)
35848 * float32x4_t vreinterpretq_f32_u32 (uint32x4_t)
35850 * float32x4_t vreinterpretq_f32_u16 (uint16x8_t)
35852 * float32x4_t vreinterpretq_f32_u8 (uint8x16_t)
35854 * float32x4_t vreinterpretq_f32_s32 (int32x4_t)
35856 * float32x4_t vreinterpretq_f32_s16 (int16x8_t)
35858 * float32x4_t vreinterpretq_f32_s8 (int8x16_t)
35860 * float32x4_t vreinterpretq_f32_u64 (uint64x2_t)
35862 * float32x4_t vreinterpretq_f32_s64 (int64x2_t)
35864 * float32x4_t vreinterpretq_f32_p16 (poly16x8_t)
35866 * float32x4_t vreinterpretq_f32_p8 (poly8x16_t)
35868 * int64x1_t vreinterpret_s64_u32 (uint32x2_t)
35870 * int64x1_t vreinterpret_s64_u16 (uint16x4_t)
35872 * int64x1_t vreinterpret_s64_u8 (uint8x8_t)
35874 * int64x1_t vreinterpret_s64_s32 (int32x2_t)
35876 * int64x1_t vreinterpret_s64_s16 (int16x4_t)
35878 * int64x1_t vreinterpret_s64_s8 (int8x8_t)
35880 * int64x1_t vreinterpret_s64_u64 (uint64x1_t)
35882 * int64x1_t vreinterpret_s64_f32 (float32x2_t)
35884 * int64x1_t vreinterpret_s64_p16 (poly16x4_t)
35886 * int64x1_t vreinterpret_s64_p8 (poly8x8_t)
35888 * int64x2_t vreinterpretq_s64_u32 (uint32x4_t)
35890 * int64x2_t vreinterpretq_s64_u16 (uint16x8_t)
35892 * int64x2_t vreinterpretq_s64_u8 (uint8x16_t)
35894 * int64x2_t vreinterpretq_s64_s32 (int32x4_t)
35896 * int64x2_t vreinterpretq_s64_s16 (int16x8_t)
35898 * int64x2_t vreinterpretq_s64_s8 (int8x16_t)
35900 * int64x2_t vreinterpretq_s64_u64 (uint64x2_t)
35902 * int64x2_t vreinterpretq_s64_f32 (float32x4_t)
35904 * int64x2_t vreinterpretq_s64_p16 (poly16x8_t)
35906 * int64x2_t vreinterpretq_s64_p8 (poly8x16_t)
35908 * uint64x1_t vreinterpret_u64_u32 (uint32x2_t)
35910 * uint64x1_t vreinterpret_u64_u16 (uint16x4_t)
35912 * uint64x1_t vreinterpret_u64_u8 (uint8x8_t)
35914 * uint64x1_t vreinterpret_u64_s32 (int32x2_t)
35916 * uint64x1_t vreinterpret_u64_s16 (int16x4_t)
35918 * uint64x1_t vreinterpret_u64_s8 (int8x8_t)
35920 * uint64x1_t vreinterpret_u64_s64 (int64x1_t)
35922 * uint64x1_t vreinterpret_u64_f32 (float32x2_t)
35924 * uint64x1_t vreinterpret_u64_p16 (poly16x4_t)
35926 * uint64x1_t vreinterpret_u64_p8 (poly8x8_t)
35928 * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t)
35930 * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t)
35932 * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t)
35934 * uint64x2_t vreinterpretq_u64_s32 (int32x4_t)
35936 * uint64x2_t vreinterpretq_u64_s16 (int16x8_t)
35938 * uint64x2_t vreinterpretq_u64_s8 (int8x16_t)
35940 * uint64x2_t vreinterpretq_u64_s64 (int64x2_t)
35942 * uint64x2_t vreinterpretq_u64_f32 (float32x4_t)
35944 * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t)
35946 * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t)
35948 * int8x8_t vreinterpret_s8_u32 (uint32x2_t)
35950 * int8x8_t vreinterpret_s8_u16 (uint16x4_t)
35952 * int8x8_t vreinterpret_s8_u8 (uint8x8_t)
35954 * int8x8_t vreinterpret_s8_s32 (int32x2_t)
35956 * int8x8_t vreinterpret_s8_s16 (int16x4_t)
35958 * int8x8_t vreinterpret_s8_u64 (uint64x1_t)
35960 * int8x8_t vreinterpret_s8_s64 (int64x1_t)
35962 * int8x8_t vreinterpret_s8_f32 (float32x2_t)
35964 * int8x8_t vreinterpret_s8_p16 (poly16x4_t)
35966 * int8x8_t vreinterpret_s8_p8 (poly8x8_t)
35968 * int8x16_t vreinterpretq_s8_u32 (uint32x4_t)
35970 * int8x16_t vreinterpretq_s8_u16 (uint16x8_t)
35972 * int8x16_t vreinterpretq_s8_u8 (uint8x16_t)
35974 * int8x16_t vreinterpretq_s8_s32 (int32x4_t)
35976 * int8x16_t vreinterpretq_s8_s16 (int16x8_t)
35978 * int8x16_t vreinterpretq_s8_u64 (uint64x2_t)
35980 * int8x16_t vreinterpretq_s8_s64 (int64x2_t)
35982 * int8x16_t vreinterpretq_s8_f32 (float32x4_t)
35984 * int8x16_t vreinterpretq_s8_p16 (poly16x8_t)
35986 * int8x16_t vreinterpretq_s8_p8 (poly8x16_t)
35988 * int16x4_t vreinterpret_s16_u32 (uint32x2_t)
35990 * int16x4_t vreinterpret_s16_u16 (uint16x4_t)
35992 * int16x4_t vreinterpret_s16_u8 (uint8x8_t)
35994 * int16x4_t vreinterpret_s16_s32 (int32x2_t)
35996 * int16x4_t vreinterpret_s16_s8 (int8x8_t)
35998 * int16x4_t vreinterpret_s16_u64 (uint64x1_t)
36000 * int16x4_t vreinterpret_s16_s64 (int64x1_t)
36002 * int16x4_t vreinterpret_s16_f32 (float32x2_t)
36004 * int16x4_t vreinterpret_s16_p16 (poly16x4_t)
36006 * int16x4_t vreinterpret_s16_p8 (poly8x8_t)
36008 * int16x8_t vreinterpretq_s16_u32 (uint32x4_t)
36010 * int16x8_t vreinterpretq_s16_u16 (uint16x8_t)
36012 * int16x8_t vreinterpretq_s16_u8 (uint8x16_t)
36014 * int16x8_t vreinterpretq_s16_s32 (int32x4_t)
36016 * int16x8_t vreinterpretq_s16_s8 (int8x16_t)
36018 * int16x8_t vreinterpretq_s16_u64 (uint64x2_t)
36020 * int16x8_t vreinterpretq_s16_s64 (int64x2_t)
36022 * int16x8_t vreinterpretq_s16_f32 (float32x4_t)
36024 * int16x8_t vreinterpretq_s16_p16 (poly16x8_t)
36026 * int16x8_t vreinterpretq_s16_p8 (poly8x16_t)
36028 * int32x2_t vreinterpret_s32_u32 (uint32x2_t)
36030 * int32x2_t vreinterpret_s32_u16 (uint16x4_t)
36032 * int32x2_t vreinterpret_s32_u8 (uint8x8_t)
36034 * int32x2_t vreinterpret_s32_s16 (int16x4_t)
36036 * int32x2_t vreinterpret_s32_s8 (int8x8_t)
36038 * int32x2_t vreinterpret_s32_u64 (uint64x1_t)
36040 * int32x2_t vreinterpret_s32_s64 (int64x1_t)
36042 * int32x2_t vreinterpret_s32_f32 (float32x2_t)
36044 * int32x2_t vreinterpret_s32_p16 (poly16x4_t)
36046 * int32x2_t vreinterpret_s32_p8 (poly8x8_t)
36048 * int32x4_t vreinterpretq_s32_u32 (uint32x4_t)
36050 * int32x4_t vreinterpretq_s32_u16 (uint16x8_t)
36052 * int32x4_t vreinterpretq_s32_u8 (uint8x16_t)
36054 * int32x4_t vreinterpretq_s32_s16 (int16x8_t)
36056 * int32x4_t vreinterpretq_s32_s8 (int8x16_t)
36058 * int32x4_t vreinterpretq_s32_u64 (uint64x2_t)
36060 * int32x4_t vreinterpretq_s32_s64 (int64x2_t)
36062 * int32x4_t vreinterpretq_s32_f32 (float32x4_t)
36064 * int32x4_t vreinterpretq_s32_p16 (poly16x8_t)
36066 * int32x4_t vreinterpretq_s32_p8 (poly8x16_t)
36068 * uint8x8_t vreinterpret_u8_u32 (uint32x2_t)
36070 * uint8x8_t vreinterpret_u8_u16 (uint16x4_t)
36072 * uint8x8_t vreinterpret_u8_s32 (int32x2_t)
36074 * uint8x8_t vreinterpret_u8_s16 (int16x4_t)
36076 * uint8x8_t vreinterpret_u8_s8 (int8x8_t)
36078 * uint8x8_t vreinterpret_u8_u64 (uint64x1_t)
36080 * uint8x8_t vreinterpret_u8_s64 (int64x1_t)
36082 * uint8x8_t vreinterpret_u8_f32 (float32x2_t)
36084 * uint8x8_t vreinterpret_u8_p16 (poly16x4_t)
36086 * uint8x8_t vreinterpret_u8_p8 (poly8x8_t)
36088 * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t)
36090 * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t)
36092 * uint8x16_t vreinterpretq_u8_s32 (int32x4_t)
36094 * uint8x16_t vreinterpretq_u8_s16 (int16x8_t)
36096 * uint8x16_t vreinterpretq_u8_s8 (int8x16_t)
36098 * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t)
36100 * uint8x16_t vreinterpretq_u8_s64 (int64x2_t)
36102 * uint8x16_t vreinterpretq_u8_f32 (float32x4_t)
36104 * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t)
36106 * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t)
36108 * uint16x4_t vreinterpret_u16_u32 (uint32x2_t)
36110 * uint16x4_t vreinterpret_u16_u8 (uint8x8_t)
36112 * uint16x4_t vreinterpret_u16_s32 (int32x2_t)
36114 * uint16x4_t vreinterpret_u16_s16 (int16x4_t)
36116 * uint16x4_t vreinterpret_u16_s8 (int8x8_t)
36118 * uint16x4_t vreinterpret_u16_u64 (uint64x1_t)
36120 * uint16x4_t vreinterpret_u16_s64 (int64x1_t)
36122 * uint16x4_t vreinterpret_u16_f32 (float32x2_t)
36124 * uint16x4_t vreinterpret_u16_p16 (poly16x4_t)
36126 * uint16x4_t vreinterpret_u16_p8 (poly8x8_t)
36128 * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t)
36130 * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t)
36132 * uint16x8_t vreinterpretq_u16_s32 (int32x4_t)
36134 * uint16x8_t vreinterpretq_u16_s16 (int16x8_t)
36136 * uint16x8_t vreinterpretq_u16_s8 (int8x16_t)
36138 * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t)
36140 * uint16x8_t vreinterpretq_u16_s64 (int64x2_t)
36142 * uint16x8_t vreinterpretq_u16_f32 (float32x4_t)
36144 * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t)
36146 * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t)
36148 * uint32x2_t vreinterpret_u32_u16 (uint16x4_t)
36150 * uint32x2_t vreinterpret_u32_u8 (uint8x8_t)
36152 * uint32x2_t vreinterpret_u32_s32 (int32x2_t)
36154 * uint32x2_t vreinterpret_u32_s16 (int16x4_t)
36156 * uint32x2_t vreinterpret_u32_s8 (int8x8_t)
36158 * uint32x2_t vreinterpret_u32_u64 (uint64x1_t)
36160 * uint32x2_t vreinterpret_u32_s64 (int64x1_t)
36162 * uint32x2_t vreinterpret_u32_f32 (float32x2_t)
36164 * uint32x2_t vreinterpret_u32_p16 (poly16x4_t)
36166 * uint32x2_t vreinterpret_u32_p8 (poly8x8_t)
36168 * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t)
36170 * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t)
36172 * uint32x4_t vreinterpretq_u32_s32 (int32x4_t)
36174 * uint32x4_t vreinterpretq_u32_s16 (int16x8_t)
36176 * uint32x4_t vreinterpretq_u32_s8 (int8x16_t)
36178 * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t)
36180 * uint32x4_t vreinterpretq_u32_s64 (int64x2_t)
36182 * uint32x4_t vreinterpretq_u32_f32 (float32x4_t)
36184 * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t)
36186 * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t)
36189 File: gcc.info, Node: AVR Built-in Functions, Next: Blackfin Built-in Functions, Prev: ARM NEON Intrinsics, Up: Target Builtins
36191 6.56.4 AVR Built-in Functions
36192 -----------------------------
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.
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.
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)
36215 In order to delay execution for a specific number of cycles, GCC
36217 void __builtin_avr_delay_cycles (unsigned long ticks)
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.
36224 char __builtin_avr_flash_segment (const __memx void*)
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
36232 unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val)
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
36237 1. If X is `0xf', then the N-th bit of VAL is returned unaltered.
36239 2. If X is in the range 0...7, then the N-th result bit is set to the
36242 3. If X is in the range 8...`0xe', then the N-th result bit is
36245 One typical use case for this built-in is adjusting input and output
36246 values to non-contiguous port layouts. Some examples:
36248 // same as val, bits is unused
36249 __builtin_avr_insert_bits (0xffffffff, bits, val)
36251 // same as bits, val is unused
36252 __builtin_avr_insert_bits (0x76543210, bits, val)
36254 // same as rotating bits by 4
36255 __builtin_avr_insert_bits (0x32107654, bits, 0)
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)
36261 // reverse the bit order of bits
36262 __builtin_avr_insert_bits (0x01234567, bits, 0)
36265 File: gcc.info, Node: Blackfin Built-in Functions, Next: FR-V Built-in Functions, Prev: AVR Built-in Functions, Up: Target Builtins
36267 6.56.5 Blackfin Built-in Functions
36268 ----------------------------------
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:
36276 void __builtin_bfin_csync (void)
36277 void __builtin_bfin_ssync (void)
36280 File: gcc.info, Node: FR-V Built-in Functions, Next: X86 Built-in Functions, Prev: Blackfin Built-in Functions, Up: Target Builtins
36282 6.56.6 FR-V Built-in Functions
36283 ------------------------------
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.
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
36298 * Directly-mapped Integer Functions::
36299 * Directly-mapped Media Functions::
36300 * Raw read/write Functions::
36301 * Other Built-in Functions::
36304 File: gcc.info, Node: Argument Types, Next: Directly-mapped Integer Functions, Up: FR-V Built-in Functions
36306 6.56.6.1 Argument Types
36307 .......................
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:
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
36324 These pseudo types are not defined by GCC, they are simply a notational
36325 convenience used in this manual.
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
36331 `const' arguments represent immediate operands in the underlying FR-V
36332 instructions. They must be compile-time constants.
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.
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
36343 File: gcc.info, Node: Directly-mapped Integer Functions, Next: Directly-mapped Media Functions, Prev: Argument Types, Up: FR-V Built-in Functions
36345 6.56.6.2 Directly-mapped Integer Functions
36346 ..........................................
36348 The functions listed below map directly to FR-V I-type instructions.
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'
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
36365 6.56.6.3 Directly-mapped Media Functions
36366 ........................................
36368 The functions listed below map directly to FR-V M-type instructions.
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'
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'
36435 `void __MQMULXHU (acc, uw2, `__MQMULXHU (C, A, B)' `MQMULXHU A,B,C'
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'
36444 `void __MQXMACXHS (acc, sw2, `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C'
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'
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
36468 6.56.6.4 Raw read/write Functions
36469 .................................
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.
36476 `unsigned char __builtin_read8 (void *DATA)'
36478 `unsigned short __builtin_read16 (void *DATA)'
36480 `unsigned long __builtin_read32 (void *DATA)'
36482 `unsigned long long __builtin_read64 (void *DATA)'
36484 `void __builtin_write8 (void *DATA, unsigned char DATUM)'
36486 `void __builtin_write16 (void *DATA, unsigned short DATUM)'
36488 `void __builtin_write32 (void *DATA, unsigned long DATUM)'
36490 `void __builtin_write64 (void *DATA, unsigned long long DATUM)'
36493 File: gcc.info, Node: Other Built-in Functions, Prev: Raw read/write Functions, Up: FR-V Built-in Functions
36495 6.56.6.5 Other Built-in Functions
36496 .................................
36498 This section describes built-in functions that are not named after a
36499 specific FR-V instruction.
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.
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.
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.
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.
36517 `void __data_prefetch0 (const void *X)'
36518 Use the `dcpl' instruction to load the contents of address X into
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.
36526 File: gcc.info, Node: X86 Built-in Functions, Next: X86 transactional memory intrinsics, Prev: FR-V Built-in Functions, Up: Target Builtins
36528 6.56.7 X86 Built-in Functions
36529 -----------------------------
36531 These built-in functions are available for the i386 and x86-64 family
36532 of computers, depending on the command-line switches used.
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
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.
36549 If 3DNow! extensions are enabled, `V2SF' is used as a mode for a vector
36550 of two 32-bit floating-point values.
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'.
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.
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.
36565 __float128 __builtin_fabsq (__float128)
36566 __float128 __builtin_copysignq (__float128, __float128)
36568 The following built-in function is always available.
36570 `void __builtin_ia32_pause (void)'
36571 Generates the `pause' machine instruction with a compiler memory
36574 The following floating-point built-in functions are made available in
36577 `__float128 __builtin_infq (void)'
36578 Similar to `__builtin_inf', except the return type is `__float128'.
36580 `__float128 __builtin_huge_valq (void)'
36581 Similar to `__builtin_huge_val', except the return type is
36584 The following built-in functions are always available and can be used
36585 to check the target platform type.
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.
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.
36601 static void (*resolve_memcpy (void)) (void)
36603 // ifunc resolvers fire before constructors, explicitly call the init
36605 __builtin_cpu_init ();
36606 if (__builtin_cpu_supports ("ssse3"))
36607 return ssse3_memcpy; // super fast memcpy with ssse3 instructions.
36609 return default_memcpy;
36612 void *memcpy (void *, const void *, size_t)
36613 __attribute__ ((ifunc ("resolve_memcpy")));
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
36634 Intel Core i7 Nehalem CPU.
36637 Intel Core i7 Westmere CPU.
36640 Intel Core i7 Sandy Bridge CPU.
36646 AMD Family 10h CPU.
36649 AMD Family 10h Barcelona CPU.
36652 AMD Family 10h Shanghai CPU.
36655 AMD Family 10h Istanbul CPU.
36658 AMD Family 14h CPU.
36661 AMD Family 15h CPU.
36664 AMD Family 15h Bulldozer version 1.
36667 AMD Family 15h Bulldozer version 2.
36670 AMD Family 15h Bulldozer version 3.
36673 AMD Family 16h CPU.
36675 Here is an example:
36676 if (__builtin_cpu_is ("corei7"))
36678 do_corei7 (); // Core i7 specific implementation.
36682 do_generic (); // Generic implementation.
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
36697 POPCNT instruction.
36709 SSSE3 instructions.
36712 SSE4.1 instructions.
36715 SSE4.2 instructions.
36723 Here is an example:
36724 if (__builtin_cpu_supports ("popcnt"))
36726 asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc");
36730 count = generic_countbits (n); //generic implementation.
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.
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)
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)
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.
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)
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.
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)
36880 The following built-in functions are available when `-msse' is used.
36882 `v4sf __builtin_ia32_loadaps (float *)'
36883 Generates the `movaps' machine instruction as a load from memory.
36885 `void __builtin_ia32_storeaps (float *, v4sf)'
36886 Generates the `movaps' machine instruction as a store to memory.
36888 `v4sf __builtin_ia32_loadups (float *)'
36889 Generates the `movups' machine instruction as a load from memory.
36891 `void __builtin_ia32_storeups (float *, v4sf)'
36892 Generates the `movups' machine instruction as a store to memory.
36894 `v4sf __builtin_ia32_loadsss (float *)'
36895 Generates the `movss' machine instruction as a load from memory.
36897 `void __builtin_ia32_storess (float *, v4sf)'
36898 Generates the `movss' machine instruction as a store to memory.
36900 `v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)'
36901 Generates the `movhps' machine instruction as a load from memory.
36903 `v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)'
36904 Generates the `movlps' machine instruction as a load from memory
36906 `void __builtin_ia32_storehps (v2sf *, v4sf)'
36907 Generates the `movhps' machine instruction as a store to memory.
36909 `void __builtin_ia32_storelps (v2sf *, v4sf)'
36910 Generates the `movlps' machine instruction as a store to memory.
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.
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)
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.
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)
37087 The following built-in functions are available when `-msse3' is used.
37089 `v2df __builtin_ia32_loadddup (double const *)'
37090 Generates the `movddup' machine instruction as a load from memory.
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.
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)
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.
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)
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
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)
37182 The following built-in functions are available when `-msse4.1' is used.
37184 `v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)'
37185 Generates the `insertps' machine instruction.
37187 `int __builtin_ia32_vec_ext_v16qi (v16qi, const int)'
37188 Generates the `pextrb' machine instruction.
37190 `v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)'
37191 Generates the `pinsrb' machine instruction.
37193 `v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)'
37194 Generates the `pinsrd' machine instruction.
37196 `v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)'
37197 Generates the `pinsrq' machine instruction in 64bit mode.
37199 The following built-in functions are changed to generate new SSE4.1
37200 instructions when `-msse4.1' is used.
37202 `float __builtin_ia32_vec_ext_v4sf (v4sf, const int)'
37203 Generates the `extractps' machine instruction.
37205 `int __builtin_ia32_vec_ext_v4si (v4si, const int)'
37206 Generates the `pextrd' machine instruction.
37208 `long long __builtin_ia32_vec_ext_v2di (v2di, const int)'
37209 Generates the `pextrq' machine instruction in 64bit mode.
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
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)
37231 The following built-in functions are available when `-msse4.2' is used.
37233 `unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)'
37234 Generates the `crc32b' machine instruction.
37236 `unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)'
37237 Generates the `crc32w' machine instruction.
37239 `unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)'
37240 Generates the `crc32l' machine instruction.
37242 `unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)'
37243 Generates the `crc32q' machine instruction.
37245 The following built-in functions are changed to generate new SSE4.2
37246 instructions when `-msse4.2' is used.
37248 `int __builtin_popcount (unsigned int)'
37249 Generates the `popcntl' machine instruction.
37251 `int __builtin_popcountl (unsigned long)'
37252 Generates the `popcntl' or `popcntq' machine instruction,
37253 depending on the size of `unsigned long'.
37255 `int __builtin_popcountll (unsigned long long)'
37256 Generates the `popcntq' machine instruction.
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.
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)
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.
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)
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.
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)
37575 The following built-in function is available when `-mpclmul' is used.
37577 `v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)'
37578 Generates the `pclmulqdq' machine instruction.
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
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)
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.
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 *)
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.
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)
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)
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.
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)
37773 The following built-in functions are available when `-mlwp' is used.
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)
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);
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)
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);
37808 The following built-in functions are available when `-mtbm' is used.
37809 Both of them generate the immediate form of the bextr machine
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);
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.
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)
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.
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)
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.
37854 int __builtin_ia32_xbegin ()
37855 void __builtin_ia32_xend ()
37856 void __builtin_ia32_xabort (status)
37857 int __builtin_ia32_xtest ()
37860 File: gcc.info, Node: X86 transactional memory intrinsics, Next: MIPS DSP Built-in Functions, Prev: X86 Built-in Functions, Up: Target Builtins
37862 6.56.8 X86 transaction memory intrinsics
37863 ----------------------------------------
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.
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.
37875 Generally there is no guarantee that a memory transaction ever suceeds
37876 and suitable fallback code always needs to be supplied.
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.
37887 #include <immintrin.h>
37889 if ((status = _xbegin ()) == _XBEGIN_STARTED) {
37890 ... transaction code...
37893 ... non transactional fallback path...
37896 Valid abort status bits (when the value is not `_XBEGIN_STARTED') are:
37899 Transaction explicitely aborted with `_xabort'. The parameter
37900 passed to `_xabort' is available with `_XABORT_CODE(status)'
37903 Transaction retry is possible.
37906 Transaction abort due to a memory conflict with another thread
37909 Transaction abort due to the transaction using too much memory
37912 Transaction abort due to a debug trap
37915 Transaction abort in a inner nested transaction
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.
37922 -- RTM Function: int _xtest ()
37923 Return a value not zero when a transaction is currently active,
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'
37932 File: gcc.info, Node: MIPS DSP Built-in Functions, Next: MIPS Paired-Single Support, Prev: X86 transactional memory intrinsics, Up: Target Builtins
37934 6.56.9 MIPS DSP Built-in Functions
37935 ----------------------------------
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.
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.
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'.
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
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:
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)));
37970 `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same
37971 way as aggregates. For example:
37973 v4i8 a = {1, 2, 3, 4};
37975 b = (v4i8) {5, 6, 7, 8};
37977 v2q15 c = {0x0fcb, 0x3a75};
37979 d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
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.
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'.
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.
37998 C code MIPS instruction
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.
38007 C code MIPS instruction
38010 It is easier to describe the DSP built-in functions if we first define
38011 the following types:
38015 typedef unsigned int ui32;
38016 typedef long long a64;
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').
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.
38034 imm0_255: 0 to 255.
38035 imm_n32_31: -32 to 31.
38036 imm_n512_511: -512 to 511.
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.
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);
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.
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);
38205 File: gcc.info, Node: MIPS Paired-Single Support, Next: MIPS Loongson Built-in Functions, Prev: MIPS DSP Built-in Functions, Up: Target Builtins
38207 6.56.10 MIPS Paired-Single Support
38208 ----------------------------------
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
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.
38221 The vector type associated with paired-single values is usually called
38222 `v2sf'. It can be defined in C as follows:
38224 typedef float v2sf __attribute__ ((vector_size (8)));
38226 `v2sf' values are initialized in the same way as aggregates. For
38229 v2sf a = {1.5, 9.1};
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.
38242 File: gcc.info, Node: MIPS Loongson Built-in Functions, Next: Other MIPS Built-in Functions, Prev: MIPS Paired-Single Support, Up: Target Builtins
38244 6.56.11 MIPS Loongson Built-in Functions
38245 ----------------------------------------
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:
38252 * `uint8x8_t', a vector of eight unsigned 8-bit integers;
38254 * `uint16x4_t', a vector of four unsigned 16-bit integers;
38256 * `uint32x2_t', a vector of two unsigned 32-bit integers;
38258 * `int8x8_t', a vector of eight signed 8-bit integers;
38260 * `int16x4_t', a vector of four signed 16-bit integers;
38262 * `int32x2_t', a vector of two signed 32-bit integers.
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
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);
38373 * Paired-Single Arithmetic::
38374 * Paired-Single Built-in Functions::
38375 * MIPS-3D Built-in Functions::
38378 File: gcc.info, Node: Paired-Single Arithmetic, Next: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions
38380 6.56.11.1 Paired-Single Arithmetic
38381 ..................................
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
38387 C code MIPS instruction
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'
38398 Note that the multiply-accumulate instructions can be disabled using
38399 the command-line option `-mno-fused-madd'.
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
38404 6.56.11.2 Paired-Single Built-in Functions
38405 ..........................................
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.
38411 `v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
38412 Pair lower lower (`pll.ps').
38414 `v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
38415 Pair upper lower (`pul.ps').
38417 `v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
38418 Pair lower upper (`plu.ps').
38420 `v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
38421 Pair upper upper (`puu.ps').
38423 `v2sf __builtin_mips_cvt_ps_s (float, float)'
38424 Convert pair to paired single (`cvt.ps.s').
38426 `float __builtin_mips_cvt_s_pl (v2sf)'
38427 Convert pair lower to single (`cvt.s.pl').
38429 `float __builtin_mips_cvt_s_pu (v2sf)'
38430 Convert pair upper to single (`cvt.s.pu').
38432 `v2sf __builtin_mips_abs_ps (v2sf)'
38433 Absolute value (`abs.ps').
38435 `v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
38436 Align variable (`alnv.ps').
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.
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'.
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').
38452 The `movt' functions return the value X computed by:
38458 The `movf' functions are similar but use `movf.ps' instead of
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',
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:
38470 if (__builtin_mips_upper_c_eq_ps (a, b))
38471 upper_halves_are_equal ();
38473 upper_halves_are_unequal ();
38475 if (__builtin_mips_lower_c_eq_ps (a, b))
38476 lower_halves_are_equal ();
38478 lower_halves_are_unequal ();
38481 File: gcc.info, Node: MIPS-3D Built-in Functions, Prev: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions
38483 6.56.11.3 MIPS-3D Built-in Functions
38484 ....................................
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.
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.
38495 `v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
38496 Reduction add (`addr.ps').
38498 `v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
38499 Reduction multiply (`mulr.ps').
38501 `v2sf __builtin_mips_cvt_pw_ps (v2sf)'
38502 Convert paired single to paired word (`cvt.pw.ps').
38504 `v2sf __builtin_mips_cvt_ps_pw (v2sf)'
38505 Convert paired word to paired single (`cvt.ps.pw').
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').
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').
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)
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)
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'.
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',
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
38544 if (__builtin_mips_cabs_eq_s (a, b))
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',
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:
38558 if (__builtin_mips_upper_cabs_eq_ps (a, b))
38559 upper_halves_are_equal ();
38561 upper_halves_are_unequal ();
38563 if (__builtin_mips_lower_cabs_eq_ps (a, b))
38564 lower_halves_are_equal ();
38566 lower_halves_are_unequal ();
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').
38573 The `movt' functions return the value X computed by:
38575 cabs.COND.ps CC,A,B
38579 The `movf' functions are similar but use `movf.ps' instead of
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').
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.
38595 if (__builtin_mips_any_c_eq_ps (a, b))
38600 if (__builtin_mips_all_c_eq_ps (a, b))
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').
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:
38618 if (__builtin_mips_any_c_eq_4s (a, b, c, d))
38623 if (__builtin_mips_all_c_eq_4s (a, b, c, d))
38629 File: gcc.info, Node: Other MIPS Built-in Functions, Next: picoChip Built-in Functions, Prev: MIPS Loongson Built-in Functions, Up: Target Builtins
38631 6.56.12 Other MIPS Built-in Functions
38632 -------------------------------------
38634 GCC provides other MIPS-specific built-in functions:
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.
38642 File: gcc.info, Node: picoChip Built-in Functions, Next: PowerPC Built-in Functions, Prev: Other MIPS Built-in Functions, Up: Target Builtins
38644 6.56.13 picoChip Built-in Functions
38645 -----------------------------------
38647 GCC provides an interface to selected machine instructions from the
38648 picoChip instruction set.
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.
38656 `int __builtin_byteswap (int VALUE)'
38657 Byte swap. Return the result of swapping the upper and lower
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
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.
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.
38673 `void __builtin_halt (void)'
38674 Halt. The processor stops execution. This built-in is useful for
38675 implementing assertions.
38679 File: gcc.info, Node: PowerPC Built-in Functions, Next: PowerPC AltiVec/VSX Built-in Functions, Prev: picoChip Built-in Functions, Up: Target Builtins
38681 6.56.14 PowerPC Built-in Functions
38682 ----------------------------------
38684 These built-in functions are available for the PowerPC family of
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 ();
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.
38698 The `__builtin_recipdiv', and `__builtin_recipdivf' functions generate
38699 multiple instructions to implement division using the reciprocal
38700 estimate instructions.
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.
38711 File: gcc.info, Node: PowerPC AltiVec/VSX Built-in Functions, Next: RX Built-in Functions, Prev: PowerPC Built-in Functions, Up: Target Builtins
38713 6.56.15 PowerPC AltiVec Built-in Functions
38714 ------------------------------------------
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.
38722 vector unsigned char
38726 vector unsigned short
38727 vector signed short
38731 vector unsigned int
38736 If `-mvsx' is used the following additional vector types are
38739 vector unsigned long
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
38747 GCC's implementation of the high-level language interface available
38748 from C and C++ code differs from Motorola's documentation in several
38751 * A vector constant is a list of constant expressions within curly
38754 * A vector initializer requires no cast if the vector constant is of
38755 the same type as the variable it is initializing.
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.
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.
38768 * GCC allows using a `typedef' name as the type specifier for a
38771 * For C, overloaded functions are implemented with macros so the
38772 following does not work:
38774 vec_add ((vector signed int){1, 2, 3, 4}, foo);
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.
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.
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
38791 Arguments that are documented as `const int' require literal integral
38792 values within the range required for that operation.
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);
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);
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);
38827 vector float vec_vaddfp (vector float, vector float);
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);
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);
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,
38857 vector unsigned char vec_vaddubm (vector unsigned char,
38858 vector unsigned char);
38860 vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
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);
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);
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);
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);
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);
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);
38912 vector unsigned char vec_vaddubs (vector bool char,
38913 vector unsigned char);
38914 vector unsigned char vec_vaddubs (vector unsigned char,
38916 vector unsigned char vec_vaddubs (vector unsigned char,
38917 vector unsigned char);
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);
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);
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);
38986 vector signed int vec_vavgsw (vector signed int, vector signed int);
38988 vector unsigned int vec_vavguw (vector unsigned int,
38989 vector unsigned int);
38991 vector signed short vec_vavgsh (vector signed short,
38992 vector signed short);
38994 vector unsigned short vec_vavguh (vector unsigned short,
38995 vector unsigned short);
38997 vector signed char vec_vavgsb (vector signed char, vector signed char);
38999 vector unsigned char vec_vavgub (vector unsigned char,
39000 vector unsigned char);
39002 vector float vec_copysign (vector float);
39004 vector float vec_ceil (vector float);
39006 vector signed int vec_cmpb (vector float, vector float);
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);
39017 vector bool int vec_vcmpeqfp (vector float, vector float);
39019 vector bool int vec_vcmpequw (vector signed int, vector signed int);
39020 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
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);
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);
39031 vector bool int vec_cmpge (vector float, vector float);
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);
39042 vector bool int vec_vcmpgtfp (vector float, vector float);
39044 vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
39046 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
39048 vector bool short vec_vcmpgtsh (vector signed short,
39049 vector signed short);
39051 vector bool short vec_vcmpgtuh (vector unsigned short,
39052 vector unsigned short);
39054 vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
39056 vector bool char vec_vcmpgtub (vector unsigned char,
39057 vector unsigned char);
39059 vector bool int vec_cmple (vector float, vector float);
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);
39070 vector float vec_ctf (vector unsigned int, const int);
39071 vector float vec_ctf (vector signed int, const int);
39073 vector float vec_vcfsx (vector signed int, const int);
39075 vector float vec_vcfux (vector unsigned int, const int);
39077 vector signed int vec_cts (vector float, const int);
39079 vector unsigned int vec_ctu (vector float, const int);
39081 void vec_dss (const int);
39083 void vec_dssall (void);
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);
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);
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);
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);
39169 vector float vec_expte (vector float);
39171 vector float vec_floor (vector float);
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 *);
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 *);
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 *);
39210 vector signed short vec_lvehx (int, short *);
39211 vector unsigned short vec_lvehx (int, unsigned short *);
39213 vector signed char vec_lvebx (int, char *);
39214 vector unsigned char vec_lvebx (int, unsigned char *);
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 *);
39237 vector float vec_loge (vector float);
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 *);
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 *);
39259 vector float vec_madd (vector float, vector float, vector float);
39261 vector signed short vec_madds (vector signed short,
39262 vector signed short,
39263 vector signed short);
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);
39289 vector float vec_vmaxfp (vector float, vector float);
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);
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);
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);
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);
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);
39316 vector unsigned char vec_vmaxub (vector bool char,
39317 vector unsigned char);
39318 vector unsigned char vec_vmaxub (vector unsigned char,
39320 vector unsigned char vec_vmaxub (vector unsigned char,
39321 vector unsigned char);
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);
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);
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);
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);
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);
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);
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);
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);
39391 vector unsigned short vec_mfvscr (void);
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);
39417 vector float vec_vminfp (vector float, vector float);
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);
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);
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);
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);
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);
39444 vector unsigned char vec_vminub (vector bool char,
39445 vector unsigned char);
39446 vector unsigned char vec_vminub (vector unsigned char,
39448 vector unsigned char vec_vminub (vector unsigned char,
39449 vector unsigned char);
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);
39464 vector signed short vec_mradds (vector signed short,
39465 vector signed short,
39466 vector signed short);
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);
39481 vector signed int vec_vmsumshm (vector signed short,
39482 vector signed short,
39483 vector signed int);
39485 vector unsigned int vec_vmsumuhm (vector unsigned short,
39486 vector unsigned short,
39487 vector unsigned int);
39489 vector signed int vec_vmsummbm (vector signed char,
39490 vector unsigned char,
39491 vector signed int);
39493 vector unsigned int vec_vmsumubm (vector unsigned char,
39494 vector unsigned char,
39495 vector unsigned int);
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);
39504 vector signed int vec_vmsumshs (vector signed short,
39505 vector signed short,
39506 vector signed int);
39508 vector unsigned int vec_vmsumuhs (vector unsigned short,
39509 vector unsigned short,
39510 vector unsigned int);
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);
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);
39531 vector signed int vec_vmulesh (vector signed short,
39532 vector signed short);
39534 vector unsigned int vec_vmuleuh (vector unsigned short,
39535 vector unsigned short);
39537 vector signed short vec_vmulesb (vector signed char,
39538 vector signed char);
39540 vector unsigned short vec_vmuleub (vector unsigned char,
39541 vector unsigned char);
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);
39550 vector signed int vec_vmulosh (vector signed short,
39551 vector signed short);
39553 vector unsigned int vec_vmulouh (vector unsigned short,
39554 vector unsigned short);
39556 vector signed short vec_vmulosb (vector signed char,
39557 vector signed char);
39559 vector unsigned short vec_vmuloub (vector unsigned char,
39560 vector unsigned char);
39562 vector float vec_nmsub (vector float, vector float, vector float);
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);
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);
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);
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);
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);
39624 vector pixel vec_packpx (vector unsigned int, vector unsigned int);
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);
39633 vector signed short vec_vpkswss (vector signed int, vector signed int);
39635 vector unsigned short vec_vpkuwus (vector unsigned int,
39636 vector unsigned int);
39638 vector signed char vec_vpkshss (vector signed short,
39639 vector signed short);
39641 vector unsigned char vec_vpkuhus (vector unsigned short,
39642 vector unsigned short);
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);
39652 vector unsigned short vec_vpkswus (vector signed int,
39653 vector signed int);
39655 vector unsigned char vec_vpkshus (vector signed short,
39656 vector signed short);
39658 vector float vec_perm (vector float,
39660 vector unsigned char);
39661 vector signed int vec_perm (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,
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,
39678 vector unsigned char);
39679 vector pixel vec_perm (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,
39690 vector unsigned char);
39692 vector float vec_re (vector float);
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);
39704 vector signed int vec_vrlw (vector signed int, vector unsigned int);
39705 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
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);
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);
39716 vector float vec_round (vector float);
39718 vector float vec_recip (vector float, vector float);
39720 vector float vec_rsqrt (vector float);
39722 vector float vec_rsqrte (vector float);
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,
39729 vector signed int vec_sel (vector signed int,
39731 vector unsigned int);
39732 vector unsigned int vec_sel (vector unsigned int,
39733 vector unsigned 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,
39741 vector bool int vec_sel (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,
39758 vector bool short);
39759 vector bool short vec_sel (vector bool short,
39761 vector unsigned short);
39762 vector signed char vec_sel (vector signed char,
39763 vector signed 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,
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,
39777 vector bool char vec_sel (vector bool char,
39779 vector unsigned char);
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);
39791 vector signed int vec_vslw (vector signed int, vector unsigned int);
39792 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
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);
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);
39803 vector float vec_sld (vector float, vector float, const int);
39804 vector signed int vec_sld (vector signed int,
39807 vector unsigned int vec_sld (vector unsigned int,
39808 vector unsigned int,
39810 vector bool int vec_sld (vector bool int,
39813 vector signed short vec_sld (vector signed short,
39814 vector signed short,
39816 vector unsigned short vec_sld (vector unsigned short,
39817 vector unsigned short,
39819 vector bool short vec_sld (vector bool short,
39822 vector pixel vec_sld (vector pixel,
39825 vector signed char vec_sld (vector signed char,
39826 vector signed char,
39828 vector unsigned char vec_sld (vector unsigned char,
39829 vector unsigned char,
39831 vector bool char vec_sld (vector bool char,
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);
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);
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);
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);
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);
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);
39930 vector signed char vec_splat_s8 (const int);
39932 vector signed short vec_splat_s16 (const int);
39934 vector signed int vec_splat_s32 (const int);
39936 vector unsigned char vec_splat_u8 (const int);
39938 vector unsigned short vec_splat_u16 (const int);
39940 vector unsigned int vec_splat_u32 (const int);
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);
39952 vector signed int vec_vsrw (vector signed int, vector unsigned int);
39953 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
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);
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);
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);
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);
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);
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);
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);
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);
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 *);
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 *);
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 *);
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 *);
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 *);
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 *);
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);
40158 vector float vec_vsubfp (vector float, vector float);
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);
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);
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,
40188 vector unsigned char vec_vsububm (vector unsigned char,
40189 vector unsigned char);
40191 vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
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);
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);
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);
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);
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);
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);
40243 vector unsigned char vec_vsububs (vector bool char,
40244 vector unsigned char);
40245 vector unsigned char vec_vsububs (vector unsigned char,
40247 vector unsigned char vec_vsububs (vector unsigned char,
40248 vector unsigned char);
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);
40255 vector signed int vec_vsum4shs (vector signed short, vector signed int);
40257 vector signed int vec_vsum4sbs (vector signed char, vector signed int);
40259 vector unsigned int vec_vsum4ubs (vector unsigned char,
40260 vector unsigned int);
40262 vector signed int vec_sum2s (vector signed int, vector signed int);
40264 vector signed int vec_sums (vector signed int, vector signed int);
40266 vector float vec_trunc (vector float);
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);
40274 vector bool int vec_vupkhsh (vector bool short);
40275 vector signed int vec_vupkhsh (vector signed short);
40277 vector unsigned int vec_vupkhpx (vector pixel);
40279 vector bool short vec_vupkhsb (vector bool char);
40280 vector signed short vec_vupkhsb (vector signed char);
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);
40288 vector unsigned int vec_vupklpx (vector pixel);
40290 vector bool int vec_vupklsh (vector bool short);
40291 vector signed int vec_vupklsh (vector signed short);
40293 vector bool short vec_vupklsb (vector bool char);
40294 vector signed short vec_vupklsb (vector signed char);
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);
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);
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);
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);
40389 int vec_all_in (vector float, vector float);
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);
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);
40431 int vec_all_nan (vector float);
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);
40457 int vec_all_nge (vector float, vector float);
40459 int vec_all_ngt (vector float, vector float);
40461 int vec_all_nle (vector float, vector float);
40463 int vec_all_nlt (vector float, vector float);
40465 int vec_all_numeric (vector float);
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);
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);
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);
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);
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);
40571 int vec_any_nan (vector float);
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);
40597 int vec_any_nge (vector float, vector float);
40599 int vec_any_ngt (vector float, vector float);
40601 int vec_any_nle (vector float, vector float);
40603 int vec_any_nlt (vector float, vector float);
40605 int vec_any_numeric (vector float);
40607 int vec_any_out (vector float, vector float);
40609 If the vector/scalar (VSX) instruction set is available, the following
40610 additional functions are available:
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,
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);
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 *);
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 *);
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'
40753 File: gcc.info, Node: RX Built-in Functions, Next: SH Built-in Functions, Prev: PowerPC AltiVec/VSX Built-in Functions, Up: Target Builtins
40755 6.56.16 RX Built-in Functions
40756 -----------------------------
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:
40762 -- Built-in Function: void __builtin_rx_brk (void)
40763 Generates the `brk' machine instruction.
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.
40769 -- Built-in Function: void __builtin_rx_int (int)
40770 Generates the `int' machine instruction to generate an interrupt
40771 with the specified value.
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
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
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
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
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.
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.
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.
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.
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.
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'.
40817 -- Built-in Function: void __builtin_rx_mvtipl (int)
40818 Generates the `mvtipl' machine instruction set the interrupt
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.
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.
40830 -- Built-in Function: void __builtin_rx_rmpa (void)
40831 Generates the `rmpa' machine instruction which initiates a
40832 repeated multiply and accumulate sequence.
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.
40839 -- Built-in Function: int __builtin_rx_sat (int)
40840 Generates the `sat' machine instruction which returns the
40841 saturated value of the argument.
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.
40847 -- Built-in Function: void __builtin_rx_wait (void)
40848 Generates the `wait' machine instruction.
40851 File: gcc.info, Node: SH Built-in Functions, Next: SPARC VIS Built-in Functions, Prev: RX Built-in Functions, Up: Target Builtins
40853 6.56.17 SH Built-in Functions
40854 -----------------------------
40856 The following built-in functions are supported on the SH1, SH2, SH3 and
40857 SH4 families of processors:
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.
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:
40879 int get_tcb_value (void)
40881 // Generate `mov.l @(8,gbr),r0' instruction
40882 return ((my_tcb*)__builtin_thread_pointer ())->c;
40886 File: gcc.info, Node: SPARC VIS Built-in Functions, Next: SPU Built-in Functions, Prev: SH Built-in Functions, Up: Target Builtins
40888 6.56.18 SPARC VIS Built-in Functions
40889 ------------------------------------
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
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)));
40904 void __builtin_vis_write_gsr (int64_t);
40905 int64_t __builtin_vis_read_gsr (void);
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);
40914 v4hi __builtin_vis_fexpand (v4qi);
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);
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);
40929 int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
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 *);
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);
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);
40956 long __builtin_vis_array8 (long, long);
40957 long __builtin_vis_array16 (long, long);
40958 long __builtin_vis_array32 (long, long);
40960 When you use the `-mvis2' switch, the VIS version 2.0 built-in
40961 functions also become available:
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);
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 *);
40976 When you use the `-mvis3' switch, the VIS version 3.0 built-in
40977 functions also become available:
40979 void __builtin_vis_cmask8 (long);
40980 void __builtin_vis_cmask16 (long);
40981 void __builtin_vis_cmask32 (long);
40983 v4hi __builtin_vis_fchksm16 (v4hi, v4hi);
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);
40994 long __builtin_vis_pdistn (v8qi, v8qi);
40996 v4hi __builtin_vis_fmean16 (v4hi, v4hi);
40998 int64_t __builtin_vis_fpadd64 (int64_t, int64_t);
40999 int64_t __builtin_vis_fpsub64 (int64_t, int64_t);
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);
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);
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);
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);
41027 File: gcc.info, Node: SPU Built-in Functions, Next: TI C6X Built-in Functions, Prev: SPARC VIS Built-in Functions, Up: Target Builtins
41029 6.56.19 SPU Built-in Functions
41030 ------------------------------
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.
41038 * The optional extension of specifying vector constants in
41039 parentheses is not supported.
41041 * A vector initializer requires no cast if the vector constant is of
41042 the same type as the variable it is initializing.
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.
41049 * By default, the keyword `__vector' is added. The macro `vector' is
41050 defined in `<spu_intrinsics.h>' and can be undefined.
41052 * GCC allows using a `typedef' name as the type specifier for a
41055 * For C, overloaded functions are implemented with macros so the
41056 following does not work:
41058 spu_add ((vector signed int){1, 2, 3, 4}, foo);
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.
41064 * The extended version of `__builtin_expect' is not supported.
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.
41073 File: gcc.info, Node: TI C6X Built-in Functions, Next: TILE-Gx Built-in Functions, Prev: SPU Built-in Functions, Up: Target Builtins
41075 6.56.20 TI C6X Built-in Functions
41076 ---------------------------------
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
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)
41094 int _smpy (int, int)
41095 int _smpyh (int, int)
41096 int _smpyhl (int, int)
41097 int _smpylh (int, int)
41099 int _sshl (int, int)
41100 int _subc (int, int)
41102 int _avg2 (int, int)
41103 int _avgu4 (int, int)
41105 int _clrr (int, int)
41106 int _extr (int, int)
41107 int _extru (int, int)
41112 File: gcc.info, Node: TILE-Gx Built-in Functions, Next: TILEPro Built-in Functions, Prev: TI C6X Built-in Functions, Up: Target Builtins
41114 6.56.21 TILE-Gx Built-in Functions
41115 ----------------------------------
41117 GCC provides intrinsics to access every instruction of the TILE-Gx
41118 processor. The intrinsics are of the form:
41121 unsigned long long __insn_OP (...)
41123 Where OP is the name of the instruction. Refer to the ISA manual for
41124 the complete list of instructions.
41126 GCC also provides intrinsics to directly access the network registers.
41127 The intrinsics are:
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)
41139 The intrinsic `void __tile_network_barrier (void)' is used to
41140 guarantee that no network operations before it are reordered with those
41144 File: gcc.info, Node: TILEPro Built-in Functions, Prev: TILE-Gx Built-in Functions, Up: Target Builtins
41146 6.56.22 TILEPro Built-in Functions
41147 ----------------------------------
41149 GCC provides intrinsics to access every instruction of the TILEPro
41150 processor. The intrinsics are of the form:
41153 unsigned __insn_OP (...)
41155 where OP is the name of the instruction. Refer to the ISA manual for
41156 the complete list of instructions.
41158 GCC also provides intrinsics to directly access the network registers.
41159 The intrinsics are:
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)
41173 The intrinsic `void __tile_network_barrier (void)' is used to
41174 guarantee that no network operations before it are reordered with those
41178 File: gcc.info, Node: Target Format Checks, Next: Pragmas, Prev: Target Builtins, Up: C Extensions
41180 6.57 Format Checks Specific to Particular Target Machines
41181 =========================================================
41183 For some target machines, GCC supports additional options to the format
41184 attribute (*note Declaring Attributes of Functions: Function
41189 * Solaris Format Checks::
41190 * Darwin Format Checks::
41193 File: gcc.info, Node: Solaris Format Checks, Next: Darwin Format Checks, Up: Target Format Checks
41195 6.57.1 Solaris Format Checks
41196 ----------------------------
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.
41204 File: gcc.info, Node: Darwin Format Checks, Prev: Solaris Format Checks, Up: Target Format Checks
41206 6.57.2 Darwin Format Checks
41207 ---------------------------
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.
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.
41222 File: gcc.info, Node: Pragmas, Next: Unnamed Fields, Prev: Target Format Checks, Up: C Extensions
41224 6.58 Pragmas Accepted by GCC
41225 ============================
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.
41237 * RS/6000 and PowerPC Pragmas::
41239 * Solaris Pragmas::
41240 * Symbol-Renaming Pragmas::
41241 * Structure-Packing Pragmas::
41243 * Diagnostic Pragmas::
41244 * Visibility Pragmas::
41245 * Push/Pop Macro Pragmas::
41246 * Function Specific Option Pragmas::
41249 File: gcc.info, Node: ARM Pragmas, Next: M32C Pragmas, Up: Pragmas
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.
41259 Set all subsequent functions to have the `long_call' attribute.
41262 Set all subsequent functions to have the `short_call' attribute.
41265 Do not affect the `long_call' or `short_call' attributes of
41266 subsequent functions.
41269 File: gcc.info, Node: M32C Pragmas, Next: MeP Pragmas, Prev: ARM Pragmas, Up: Pragmas
41271 6.58.2 M32C Pragmas
41272 -------------------
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.
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).
41291 #pragma ADDRESS port3 0x103
41296 File: gcc.info, Node: MeP Pragmas, Next: RS/6000 and PowerPC Pragmas, Prev: M32C Pragmas, Up: Pragmas
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
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:
41312 #pragma GCC coprocessor available $c0...$c10, $c28
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
41320 #pragma GCC coprocessor call_saved $c4...$c6, $c31
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:
41328 #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6
41330 asm ("cpfoo %0" : "=B" (x));
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:
41338 #pragma disinterrupt foo
41339 #pragma disinterrupt bar, grill
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.
41352 File: gcc.info, Node: RS/6000 and PowerPC Pragmas, Next: Darwin Pragmas, Prev: MeP Pragmas, Up: Pragmas
41354 6.58.4 RS/6000 and PowerPC Pragmas
41355 ----------------------------------
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.
41365 Apply the `longcall' attribute to all subsequent function
41369 Do not apply the `longcall' attribute to subsequent function
41373 File: gcc.info, Node: Darwin Pragmas, Next: Solaris Pragmas, Prev: RS/6000 and PowerPC Pragmas, Up: Pragmas
41375 6.58.5 Darwin Pragmas
41376 ---------------------
41378 The following pragmas are available for all architectures running the
41379 Darwin operating system. These are useful for compatibility with other
41383 This pragma is accepted, but has no effect.
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
41392 `segment TOKENS...'
41393 This pragma is accepted, but has no effect.
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.
41402 File: gcc.info, Node: Solaris Pragmas, Next: Symbol-Renaming Pragmas, Prev: Darwin Pragmas, Up: Pragmas
41404 6.58.6 Solaris Pragmas
41405 ----------------------
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.
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
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'
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.
41431 File: gcc.info, Node: Symbol-Renaming Pragmas, Next: Structure-Packing Pragmas, Prev: Solaris Pragmas, Up: Pragmas
41433 6.58.7 Symbol-Renaming Pragmas
41434 ------------------------------
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::).
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).
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.
41449 1. Both pragmas silently apply only to declarations with external
41450 linkage. Asm labels do not have this restriction.
41452 2. In C++, both pragmas silently apply only to declarations with "C"
41453 linkage. Again, asm labels do not have this restriction.
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.
41462 4. The OLDNAME used by `#pragma redefine_extname' is always the
41466 File: gcc.info, Node: Structure-Packing Pragmas, Next: Weak Pragmas, Prev: Symbol-Renaming Pragmas, Up: Pragmas
41468 6.58.8 Structure-Packing Pragmas
41469 --------------------------------
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.
41477 1. `#pragma pack(N)' simply sets the new alignment.
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::).
41483 3. `#pragma pack(push[,N])' pushes the current alignment setting on
41484 an internal stack and then optionally sets the new alignment.
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)'.
41493 Some targets, e.g. i386 and PowerPC, support the `ms_struct' `#pragma'
41494 which lays out a structure as the documented `__attribute__
41496 1. `#pragma ms_struct on' turns on the layout for structures declared.
41498 2. `#pragma ms_struct off' turns off the layout for structures
41501 3. `#pragma ms_struct reset' goes back to the default layout.
41504 File: gcc.info, Node: Weak Pragmas, Next: Diagnostic Pragmas, Prev: Structure-Packing Pragmas, Up: Pragmas
41506 6.58.9 Weak Pragmas
41507 -------------------
41509 For compatibility with SVR4, GCC supports a set of `#pragma' directives
41510 for declaring symbols to be weak, and defining weak aliases.
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.
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.
41523 File: gcc.info, Node: Diagnostic Pragmas, Next: Visibility Pragmas, Prev: Weak Pragmas, Up: Pragmas
41525 6.58.10 Diagnostic Pragmas
41526 --------------------------
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.
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.
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.
41547 #pragma GCC diagnostic warning "-Wformat"
41548 #pragma GCC diagnostic error "-Wformat"
41549 #pragma GCC diagnostic ignored "-Wformat"
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
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.
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 */
41574 GCC also offers a simple mechanism for printing messages during
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
41582 #pragma message "Compiling " __FILE__ "..."
41584 STRING may be parenthesized, and is printed with location
41585 information. For example,
41587 #define DO_PRAGMA(x) _Pragma (#x)
41588 #define TODO(x) DO_PRAGMA(message ("TODO - " #x))
41590 TODO(Remember to fix this)
41592 prints `/tmp/file.c:4: note: #pragma message: TODO - Remember to
41597 File: gcc.info, Node: Visibility Pragmas, Next: Push/Pop Macro Pragmas, Prev: Diagnostic Pragmas, Up: Pragmas
41599 6.58.11 Visibility Pragmas
41600 --------------------------
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.
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.
41616 File: gcc.info, Node: Push/Pop Macro Pragmas, Next: Function Specific Option Pragmas, Prev: Visibility Pragmas, Up: Pragmas
41618 6.58.12 Push/Pop Macro Pragmas
41619 ------------------------------
41621 For compatibility with Microsoft Windows compilers, GCC supports
41622 `#pragma push_macro("MACRO_NAME")' and `#pragma
41623 pop_macro("MACRO_NAME")'.
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.
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.
41637 #pragma push_macro("X")
41640 #pragma pop_macro("X")
41643 In this example, the definition of X as 1 is saved by `#pragma
41644 push_macro' and restored by `#pragma pop_macro'.
41647 File: gcc.info, Node: Function Specific Option Pragmas, Prev: Push/Pop Macro Pragmas, Up: Pragmas
41649 6.58.13 Function Specific Option Pragmas
41650 ----------------------------------------
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.
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
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.
41675 The `#pragma GCC optimize' pragma is not implemented in GCC
41676 versions earlier than 4.4.
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
41686 The `#pragma GCC push_options' and `#pragma GCC pop_options'
41687 pragmas are not implemented in GCC versions earlier than 4.4.
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
41694 The `#pragma GCC reset_options' pragma is not implemented in GCC
41695 versions earlier than 4.4.
41698 File: gcc.info, Node: Unnamed Fields, Next: Thread-Local, Prev: Pragmas, Up: C Extensions
41700 6.59 Unnamed struct/union fields within structs/unions
41701 ======================================================
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:
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'.
41720 You must never create such structures that cause ambiguous field
41721 definitions. For example, in this structure:
41730 it is ambiguous which `a' is being referred to with `foo.a'. The
41731 compiler gives errors for such constructs.
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
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:
41746 struct s1 { int a; };
41747 struct s2 { struct s1; };
41748 extern void f1 (struct s1 *);
41749 void f2 (struct s2 *p) { f1 (p); }
41751 In the call to `f1' inside `f2', the pointer `p' is converted into a
41752 pointer to the anonymous field.
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
41758 typedef struct { int a; } s1;
41760 s1 f1 (struct s2 *p) { return p->s1; }
41762 These usages are only permitted when they are not ambiguous.
41765 File: gcc.info, Node: Thread-Local, Next: Binary constants, Prev: Unnamed Fields, Up: C Extensions
41767 6.60 Thread-Local Storage
41768 =========================
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.
41778 At the user level, the extension is visible with a new storage class
41779 keyword: `__thread'. For example:
41782 extern __thread struct state s;
41783 static __thread char *p;
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.
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.
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.
41800 No static initialization may refer to the address of a thread-local
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++
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.
41814 * C99 Thread-Local Edits::
41815 * C++98 Thread-Local Edits::
41818 File: gcc.info, Node: C99 Thread-Local Edits, Next: C++98 Thread-Local Edits, Up: Thread-Local
41820 6.60.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
41821 -------------------------------------------------------
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.
41826 * `5.1.2 Execution environments'
41828 Add new text after paragraph 1
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.
41839 * `6.2.4 Storage durations of objects'
41841 Add new text before paragraph 3
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
41853 * `6.7.1 Storage-class specifiers'
41855 Add `__thread' to the list of storage class specifiers in
41858 Change paragraph 2 to
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'.
41864 Add new text after paragraph 6
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'.
41870 The `__thread' specifier shall be used only with variables.
41873 File: gcc.info, Node: C++98 Thread-Local Edits, Prev: C99 Thread-Local Edits, Up: Thread-Local
41875 6.60.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
41876 --------------------------------------------------------
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.
41881 * [intro.execution]
41883 New text after paragraph 4
41885 A "thread" is a flow of control within the abstract machine.
41886 It is implementation defined whether or not there may be more
41889 New text after paragraph 7
41891 It is unspecified whether additional action must be taken to
41892 ensure when and whether side effects are visible to other
41899 * [basic.start.main]
41901 Add after paragraph 5
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'.
41912 * [basic.start.init]
41914 Add after paragraph 4
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.
41921 * [basic.start.term]
41923 Add after paragraph 3
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
41932 Add "thread storage duration" to the list in paragraph 1.
41936 Thread, static, and automatic storage durations are
41937 associated with objects introduced by declarations [...].
41939 Add `__thread' to the list of specifiers in paragraph 3.
41941 * [basic.stc.thread]
41943 New section before [basic.stc.static]
41945 The keyword `__thread' applied to a non-local object gives the
41946 object thread storage duration.
41948 A local variable or class data member declared both `static'
41949 and `__thread' gives the variable or member thread storage
41952 * [basic.stc.static]
41956 All objects that have neither thread storage duration, dynamic
41957 storage duration nor are local [...].
41961 Add `__thread' to the list in paragraph 1.
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'
41971 Add after paragraph 5
41973 The `__thread' specifier can be applied only to the names of
41974 objects and to anonymous unions.
41978 Add after paragraph 6
41980 Non-`static' members shall not be `__thread'.
41983 File: gcc.info, Node: Binary constants, Prev: Thread-Local, Up: C Extensions
41985 6.61 Binary constants using the `0b' prefix
41986 ===========================================
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).
41993 The following statements are identical:
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
42005 File: gcc.info, Node: C++ Extensions, Next: Objective-C, Prev: C Extensions, Up: Top
42007 7 Extensions to the C++ Language
42008 ********************************
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.).
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++.
42038 File: gcc.info, Node: C++ Volatiles, Next: Restricted Pointers, Up: C++ Extensions
42040 7.1 When is a Volatile C++ Object Accessed?
42041 ===========================================
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.
42051 The C and C++ language specifications differ when an object is
42052 accessed in a void context:
42054 volatile int *src = SOMEVALUE;
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
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
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
42085 volatile int &vref = vobj = SOMETHING;
42088 File: gcc.info, Node: Restricted Pointers, Next: Vague Linkage, Prev: C++ Volatiles, Up: C++ Extensions
42090 7.2 Restricting Pointer Aliasing
42091 ================================
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++.
42098 In addition to allowing restricted pointers, you can specify restricted
42099 references, which indicate that the reference is not aliased in the
42102 void fn (int *__restrict__ rptr, int &__restrict__ rref)
42107 In the body of `fn', RPTR points to an unaliased integer and RREF
42108 refers to a (different) unaliased integer.
42110 You may also specify whether a member function's THIS pointer is
42111 unaliased by using `__restrict__' as a member function qualifier.
42113 void T::fn () __restrict__
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.
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
42131 File: gcc.info, Node: Vague Linkage, Next: C++ Interface, Prev: Restricted Pointers, Up: C++ Extensions
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
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.
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
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.
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.
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.
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.
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
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.
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.
42203 *Note Declarations and Definitions in One Header: C++ Interface, for
42204 another way to control placement of these constructs.
42207 File: gcc.info, Node: C++ Interface, Next: Template Instantiation, Prev: Vague Linkage, Up: C++ Extensions
42209 7.4 #pragma interface and implementation
42210 ========================================
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.
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.
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.
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
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.
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"'.
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.
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
42269 There is no way to split up the contents of a single header file
42270 into multiple implementation files.
42272 `#pragma implementation' and `#pragma interface' also have an effect
42273 on function inlining.
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.
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.
42289 ---------- Footnotes ----------
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'.
42295 File: gcc.info, Node: Template Instantiation, Next: Bound member functions, Prev: C++ Interface, Up: C++ Extensions
42297 7.5 Where's the Template?
42298 =========================
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
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.
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.
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
42345 You have the following options for dealing with template
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.
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
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.
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
42386 template class Foo<int>;
42387 template ostream& operator <<
42388 (ostream&, const Foo<int>&);
42390 for each of the instances you need, and create a template
42391 instantiation library from those.
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.
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.
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'):
42411 extern template int max (int, int);
42412 inline template class Foo<int>;
42413 static template class Foo<int>;
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.
42422 File: gcc.info, Node: Bound member functions, Next: C++ Attributes, Prev: Template Instantiation, Up: C++ Extensions
42424 7.6 Extracting the function pointer from a bound pointer to member function
42425 ===========================================================================
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.
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
42442 The syntax for this extension is
42445 extern int (A::*fp)();
42446 typedef int (*fptr)(A *);
42448 fptr p = (fptr)(a.*fp);
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:
42454 fptr p1 = (fptr)(&A::foo);
42456 You must specify `-Wno-pmf-conversions' to use this extension.
42459 File: gcc.info, Node: C++ Attributes, Next: Function Multiversioning, Prev: Bound member functions, Up: C++ Extensions
42461 7.7 C++-Specific Variable, Function, and Type Attributes
42462 ========================================================
42464 Some attributes only make sense for C++ programs.
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.
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
42478 A redeclaration of a function or class must not add new ABI tags,
42479 since doing so would change the mangled name.
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.
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.
42498 In the following example, `A' would normally be created before
42499 `B', but the `init_priority' attribute reverses that order:
42501 Some_Class A __attribute__ ((init_priority (2000)));
42502 Some_Class B __attribute__ ((init_priority (543)));
42504 Note that the particular values of PRIORITY do not matter; only
42505 their relative ordering.
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.
42515 See also *note Namespace Association::.
42518 File: gcc.info, Node: Function Multiversioning, Next: Namespace Association, Prev: C++ Attributes, Up: C++ Extensions
42520 7.8 Function Multiversioning
42521 ============================
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.
42529 __attribute__ ((target ("default")))
42532 // The default version of foo.
42536 __attribute__ ((target ("sse4.2")))
42539 // foo version for SSE4.2
42543 __attribute__ ((target ("arch=atom")))
42546 // foo version for the Intel ATOM processor
42550 __attribute__ ((target ("arch=amdfam10")))
42553 // foo version for the AMD Family 0x10 processors.
42560 assert ((*p) () == foo ());
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.
42576 File: gcc.info, Node: Namespace Association, Next: Type Traits, Prev: Function Multiversioning, Up: C++ Extensions
42578 7.9 Namespace Association
42579 =========================
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++.
42585 A using-directive with `__attribute ((strong))' is stronger than a
42586 normal using-directive in two ways:
42588 * Templates from the used namespace can be specialized and explicitly
42589 instantiated as though they were members of the using namespace.
42591 * The using namespace is considered an associated namespace of all
42592 templates in the used namespace for purposes of argument-dependent
42595 The used namespace must be nested within the using namespace so that
42596 normal unqualified lookup works properly.
42598 This is useful for composing a namespace transparently from
42599 implementation namespaces. For example:
42603 template <class T> struct A { };
42605 using namespace debug __attribute ((__strong__));
42606 template <> struct A<int> { }; // ok to specialize
42608 template <class T> void f (A<T>);
42613 f (std::A<float>()); // lookup finds std::f
42618 File: gcc.info, Node: Type Traits, Next: Java Exceptions, Prev: Namespace Association, Up: C++ Extensions
42623 The C++ front end implements syntactic extensions that allow
42624 compile-time determination of various characteristics of a type (or of a
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
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.
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.
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.
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.
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.
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
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
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.
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.
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.
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.
42718 If `type' is a cv enumeration type ([basic.compound]) the trait is
42719 true, else it is false.
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.
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.
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.
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.
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.
42746 `__is_union (type)'
42747 If `type' is a cv union type ([basic.compound]) the trait is true,
42750 `__underlying_type (type)'
42751 The underlying type of `type'. Requires: `type' shall be an
42752 enumeration type ([dcl.enum]).
42756 File: gcc.info, Node: Java Exceptions, Next: Deprecated Features, Prev: Type Traits, Up: C++ Extensions
42758 7.11 Java Exceptions
42759 ====================
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:
42768 struct S { ~S(); };
42769 extern void bar(); // is written in Java, and may throw exceptions
42776 The usual effect of an incorrect guess is a link failure, complaining of
42777 a missing routine called `__gxx_personality_v0'.
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.
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.
42791 File: gcc.info, Node: Deprecated Features, Next: Backwards Compatibility, Prev: Java Exceptions, Up: C++ Extensions
42793 7.12 Deprecated Features
42794 ========================
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.
42803 While the list below is not exhaustive, it documents some of the
42804 options that are now deprecated:
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.
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::.
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
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.
42832 The named return value extension has been deprecated, and is now
42835 The use of initializer lists with new expressions has been deprecated,
42836 and is now removed from G++.
42838 Floating and complex non-type template parameters have been deprecated,
42839 and are now removed from G++.
42841 The implicit typename extension has been deprecated and is now removed
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++.
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.
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.
42859 File: gcc.info, Node: Backwards Compatibility, Prev: Deprecated Features, Up: C++ Extensions
42861 7.13 Backwards Compatibility
42862 ============================
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::.
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
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.
42888 File: gcc.info, Node: Objective-C, Next: Compatibility, Prev: C++ Extensions, Up: Top
42890 8 GNU Objective-C features
42891 **************************
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.
42899 * GNU Objective-C runtime API::
42900 * Executing code before main::
42902 * Garbage Collection::
42903 * Constant string objects::
42904 * compatibility_alias::
42906 * Synchronization::
42907 * Fast enumeration::
42908 * Messaging with the GNU Objective-C runtime::
42911 File: gcc.info, Node: GNU Objective-C runtime API, Next: Executing code before main, Up: Objective-C
42913 8.1 GNU Objective-C runtime API
42914 ===============================
42916 This section is specific for the GNU Objective-C runtime. If you are
42917 using a different runtime, you can skip it.
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
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.
42933 * Modern GNU Objective-C runtime API::
42934 * Traditional GNU Objective-C runtime API::
42937 File: gcc.info, Node: Modern GNU Objective-C runtime API, Next: Traditional GNU Objective-C runtime API, Up: GNU Objective-C runtime API
42939 8.1.1 Modern GNU Objective-C runtime API
42940 ----------------------------------------
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
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.
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
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.
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.
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++
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.
42984 The header files contain detailed documentation for each function in
42985 the GNU Objective-C runtime API.
42988 File: gcc.info, Node: Traditional GNU Objective-C runtime API, Prev: Modern GNU Objective-C runtime API, Up: GNU Objective-C runtime API
42990 8.1.2 Traditional GNU Objective-C runtime API
42991 ---------------------------------------------
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
43001 Starting with GCC 4.7.0, the traditional GNU runtime API is no longer
43005 File: gcc.info, Node: Executing code before main, Next: Type encoding, Prev: GNU Objective-C runtime API, Up: Objective-C
43007 8.2 `+load': Executing code before main
43008 =======================================
43010 This section is specific for the GNU Objective-C runtime. If you are
43011 using a different runtime, you can skip it.
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'.
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.
43025 Suppose for example you have a `FileStream' class that declares
43026 `Stdin', `Stdout' and `Stderr' as global variables, like below:
43029 FileStream *Stdin = nil;
43030 FileStream *Stdout = nil;
43031 FileStream *Stderr = nil;
43033 @implementation FileStream
43037 Stdin = [[FileStream new] initWithFd:0];
43038 Stdout = [[FileStream new] initWithFd:1];
43039 Stderr = [[FileStream new] initWithFd:2];
43042 /* Other methods here */
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'.
43053 The correct solution of the above problem is to use the `+load' method
43054 instead of `+initialize':
43057 @implementation FileStream
43061 Stdin = [[FileStream new] initWithFd:0];
43062 Stdout = [[FileStream new] initWithFd:1];
43063 Stderr = [[FileStream new] initWithFd:2];
43066 /* Other methods here */
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
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'.
43080 * What you can and what you cannot do in +load::
43083 File: gcc.info, Node: What you can and what you cannot do in +load, Up: Executing code before main
43085 8.2.1 What you can and what you cannot do in `+load'
43086 ----------------------------------------------------
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.
43093 The `+load' implementation in the GNU runtime guarantees you the
43096 * you can write whatever C code you like;
43098 * you can allocate and send messages to objects whose class is
43099 implemented in the same file;
43101 * the `+load' implementation of all super classes of a class are
43102 executed before the `+load' of that class is executed;
43104 * the `+load' implementation of a class is executed before the
43105 `+load' implementation of any category.
43108 In particular, the following things, even if they can work in a
43109 particular case, are not guaranteed:
43111 * allocation of or sending messages to arbitrary objects;
43113 * allocation of or sending messages to objects whose classes have a
43114 category implemented in the same file;
43116 * sending messages to Objective-C constant strings (`@"this is a
43117 constant string"');
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.
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.
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.
43140 File: gcc.info, Node: Type encoding, Next: Garbage Collection, Prev: Executing code before main, Up: Objective-C
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.
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.
43153 The types are encoded in the following way:
43157 `unsigned char' `C'
43159 `unsigned short' `S'
43163 `unsigned long' `L'
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'.
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)
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
43198 The position in the bit-field is the position, counting in bits, of the
43199 bit closest to the beginning of the structure.
43201 The non-atomic types are encoded as follows:
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
43209 unions `(' followed by the name of the structure (or `?' if the
43210 union is unnamed), the `=' sign, the type of the members
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 `]'
43217 Here are some types and their encodings, as they are generated by the
43218 compiler on an i386 machine:
43221 Objective-C type Compiler encoding
43223 struct { `{?=i[3f]b128i3b131i2c}'
43230 int a __attribute__ ((vector_size (16)));`![16,16i]' (alignment would depend on the machine)
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:
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
43252 Note how `const' interacts with pointers:
43255 Objective-C type Compiler encoding
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'.
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
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
43277 * Legacy type encoding::
43279 * Method signatures::
43282 File: gcc.info, Node: Legacy type encoding, Next: @encode, Up: Type encoding
43284 8.3.1 Legacy type encoding
43285 --------------------------
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
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
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.
43302 * `enum's are always encoded as 'i' (int) even if they are actually
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.
43311 File: gcc.info, Node: @encode, Next: Method signatures, Prev: Legacy type encoding, Up: Type encoding
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"'.
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
43326 File: gcc.info, Node: Method signatures, Prev: @encode, Up: Type encoding
43328 8.3.3 Method signatures
43329 -----------------------
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.
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.
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
43346 The "signature" is a null-terminated string, composed of the following:
43348 * The return type, including type qualifiers. For example, a method
43349 returning `int' would have `i' here.
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').
43355 * Each argument, with the type encoding, followed by the offset (in
43356 bytes) of the argument in the list of parameters.
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').
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.
43372 File: gcc.info, Node: Garbage Collection, Next: Constant string objects, Prev: Type encoding, Up: Objective-C
43374 8.4 Garbage Collection
43375 ======================
43377 This section is specific for the GNU Objective-C runtime. If you are
43378 using a different runtime, you can skip it.
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.
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.
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
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'.
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:
43412 @interface WeakPointer : Object
43414 const void* weakPointer;
43417 - initWithPointer:(const void*)p;
43418 - (const void*)weakPointer;
43422 @implementation WeakPointer
43426 if (self == objc_lookUpClass ("WeakPointer"))
43427 class_ivar_set_gcinvisible (self, "weakPointer", YES);
43430 - initWithPointer:(const void*)p
43436 - (const void*)weakPointer
43438 return weakPointer;
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.
43449 File: gcc.info, Node: Constant string objects, Next: compatibility_alias, Prev: Garbage Collection, Up: Objective-C
43451 8.5 Constant string objects
43452 ===========================
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 `@':
43458 id myString = @"this is a constant string object";
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.
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:
43472 @interface MyConstantStringClass
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.
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).
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.
43506 File: gcc.info, Node: compatibility_alias, Next: Exceptions, Prev: Constant string objects, Up: Objective-C
43508 8.6 compatibility_alias
43509 =======================
43511 The keyword `@compatibility_alias' allows you to define a class name as
43512 equivalent to another class name. For example:
43514 @compatibility_alias WOApplication GSWApplication;
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').
43520 There are some constraints on how this can be used--
43522 * `WOApplication' (the alias) must not be an existing class;
43524 * `GSWApplication' (the real class) must be an existing class.
43528 File: gcc.info, Node: Exceptions, Next: Synchronization, Prev: compatibility_alias, Up: Objective-C
43533 GNU Objective-C provides exception support built into the language, as
43534 in the following example:
43541 @catch (AnObjCClass *exc) {
43548 @catch (AnotherClass *exc) {
43551 @catch (id allOthers) {
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.
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'
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.
43579 There are several caveats to using the new exception mechanism:
43581 * The `-fobjc-exceptions' command line option must be used when
43582 compiling Objective-C files that use exceptions.
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.
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.
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').
43602 File: gcc.info, Node: Synchronization, Next: Fast enumeration, Prev: Exceptions, Up: Objective-C
43604 8.8 Synchronization
43605 ===================
43607 GNU Objective-C provides support for synchronized blocks:
43609 @synchronized (ObjCClass *guard) {
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).
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.
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'.
43632 File: gcc.info, Node: Fast enumeration, Next: Messaging with the GNU Objective-C runtime, Prev: Synchronization, Up: Objective-C
43634 8.9 Fast enumeration
43635 ====================
43639 * Using fast enumeration::
43640 * c99-like fast enumeration syntax::
43641 * Fast enumeration details::
43642 * Fast enumeration protocol::
43645 File: gcc.info, Node: Using fast enumeration, Next: c99-like fast enumeration syntax, Up: Fast enumeration
43647 8.9.1 Using fast enumeration
43648 ----------------------------
43650 GNU Objective-C provides support for the fast enumeration syntax:
43655 for (object in array)
43657 /* Do something with 'object' */
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
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.
43671 Here is a fully worked-out example using a Foundation library (which
43672 provides the implementation of `NSArray', `NSString' and `NSLog'):
43674 NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
43677 for (object in array)
43678 NSLog (@"Iterating over %@", object);
43681 File: gcc.info, Node: c99-like fast enumeration syntax, Next: Fast enumeration details, Prev: Using fast enumeration, Up: Fast enumeration
43683 8.9.2 c99-like fast enumeration syntax
43684 --------------------------------------
43686 A c99-like declaration syntax is also allowed:
43690 for (id object in array)
43692 /* Do something with 'object' */
43695 this is completely equivalent to:
43701 for (object in array)
43703 /* Do something with 'object' */
43707 but can save some typing.
43709 Note that the option `-std=c99' is not required to allow this syntax
43713 File: gcc.info, Node: Fast enumeration details, Next: Fast enumeration protocol, Prev: c99-like fast enumeration syntax, Up: Fast enumeration
43715 8.9.3 Fast enumeration details
43716 ------------------------------
43718 Here is a more technical description with the gory details. Consider
43721 for (OBJECT EXPRESSION in COLLECTION EXPRESSION)
43726 here is what happens when you run it:
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]) ...'.
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
43740 * if there are no objects in the collection, then `OBJECT
43741 EXPRESSION' is set to `nil' and the loop immediately terminates.
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.
43747 * `STATEMENTS' can contain `break' and `continue' commands, which
43748 will abort the iteration or skip to the next loop iteration as
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').
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.
43768 File: gcc.info, Node: Fast enumeration protocol, Prev: Fast enumeration details, Up: Fast enumeration
43770 8.9.4 Fast enumeration protocol
43771 -------------------------------
43773 If you want your own collection object to be usable with fast
43774 enumeration, you need to have it implement the method
43776 - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state
43777 objects: (id *)objects
43778 count: (unsigned long)len;
43780 where `NSFastEnumerationState' must be defined in your code as follows:
43784 unsigned long state;
43786 unsigned long *mutationsPtr;
43787 unsigned long extra[5];
43788 } NSFastEnumerationState;
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)
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.
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.
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.
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'
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.
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.
43836 File: gcc.info, Node: Messaging with the GNU Objective-C runtime, Prev: Fast enumeration, Up: Objective-C
43838 8.10 Messaging with the GNU Objective-C runtime
43839 ===============================================
43841 This section is specific for the GNU Objective-C runtime. If you are
43842 using a different runtime, you can skip it.
43844 The implementation of messaging in the GNU Objective-C runtime is
43845 designed to be portable, and so is based on standard C.
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.
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.
43864 * Dynamically registering methods::
43865 * Forwarding hook::
43868 File: gcc.info, Node: Dynamically registering methods, Next: Forwarding hook, Up: Messaging with the GNU Objective-C runtime
43870 8.10.1 Dynamically registering methods
43871 --------------------------------------
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.
43877 To do so, the runtime checks if the class of the receiver implements
43880 + (BOOL) resolveInstanceMethod: (SEL)selector;
43882 in the case of an instance method, or
43884 + (BOOL) resolveClassMethod: (SEL)selector;
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:'.
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.
43900 If `+resolveInstanceMethod:' (or `+resolveClassMethod:') is not
43901 implemented or returns `NO', the runtime then tries the forwarding hook.
43903 Support for `+resolveInstanceMethod:' and `resolveClassMethod:' was
43904 added to the GNU Objective-C runtime in GCC version 4.6.
43907 File: gcc.info, Node: Forwarding hook, Prev: Dynamically registering methods, Up: Messaging with the GNU Objective-C runtime
43909 8.10.2 Forwarding hook
43910 ----------------------
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.
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.
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.
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'.
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
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.
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.
43965 File: gcc.info, Node: Compatibility, Next: Gcov, Prev: Objective-C, Up: Top
43967 9 Binary Compatibility
43968 **********************
43970 Binary compatibility encompasses several related concepts:
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.
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.
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.
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.
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.
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
44015 Conformance to the same ABI and the same behavior of
44016 implementation-defined features are both relevant for
44019 The application binary interface implemented by a C or C++ compiler
44020 affects code generation and runtime support for:
44022 * size and alignment of data types
44024 * layout of structured types
44026 * calling conventions
44028 * register usage conventions
44030 * interfaces for runtime arithmetic support
44032 * object file formats
44034 In addition, the application binary interface implemented by a C++
44035 compiler affects code generation and runtime support for:
44038 * exception handling
44040 * invoking constructors and destructors
44042 * layout, alignment, and padding of classes
44044 * layout and alignment of virtual tables
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.
44054 Most platforms have a well-defined ABI that covers C code, but ABIs
44055 that cover C++ functionality are not yet common.
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.
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.
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
44090 -IGCC_INSTALL_DIRECTORY/include/c++/3.3
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.
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.
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'.
44111 File: gcc.info, Node: Gcov, Next: Trouble, Prev: Compatibility, Up: Top
44113 10 `gcov'--a Test Coverage Program
44114 **********************************
44116 `gcov' is a tool you can use in conjunction with GCC to test code
44117 coverage in your programs.
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.
44128 File: gcc.info, Node: Gcov Intro, Next: Invoking Gcov, Up: Gcov
44130 10.1 Introduction to `gcov'
44131 ===========================
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.
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:
44145 * how often each line of code executes
44147 * what lines of code are actually executed
44149 * how much computing time each section of code uses
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.
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
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.
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'.
44181 `gcov' works only on code compiled with GCC. It is not compatible
44182 with any other profiling or test coverage mechanism.
44185 File: gcc.info, Node: Invoking Gcov, Next: Gcov and Optimization, Prev: Gcov Intro, Up: Gcov
44187 10.2 Invoking `gcov'
44188 ====================
44190 gcov [OPTIONS] FILES
44192 `gcov' accepts the following options:
44196 Display help about using `gcov' (on the standard output), and exit
44197 without doing any further processing.
44201 Display the `gcov' version number (on the standard output), and
44202 exit without doing any further processing.
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.
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
44221 Write branch frequencies as the number of branches taken, rather
44222 than the percentage of branches taken.
44226 Do not create the `gcov' output file.
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.
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.
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.
44256 `--function-summaries'
44257 Output summaries for each function in addition to the file level
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.
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
44280 `--unconditional-branches'
44281 When branch probabilities are given, include those of
44282 unconditional branches. Unconditional branches are normally not
44286 `--display-progress'
44287 Display the progress on the standard output.
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.
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.
44305 The `.gcov' files contain the `:' separated fields along with program
44306 source code. The format is
44308 EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
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.
44316 Some lines of information at the start have LINE_NUMBER of zero.
44317 These preamble lines are of the form
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.
44325 The additional block information is of the form
44329 The INFORMATION is human readable, but designed to be simple enough
44330 for machine parsing too.
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.
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.
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.
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:
44354 $ gcc -fprofile-arcs -ftest-coverage tmp.c
44357 90.00% of 10 source lines executed in file tmp.c
44358 Creating tmp.c.gcov.
44360 The file `tmp.c.gcov' contains output from `gcov'. Here is a sample:
44363 -: 0:Graph:tmp.gcno
44367 -: 1:#include <stdio.h>
44369 -: 3:int main (void)
44371 1: 5: int i, total;
44375 11: 9: for (i = 0; i < 10; i++)
44376 10: 10: total += i;
44378 1: 12: if (total != 45)
44379 #####: 13: printf ("Failure\n");
44381 1: 15: printf ("Success\n");
44385 When you use the `-a' option, you will get individual block counts,
44386 and the output looks like this:
44389 -: 0:Graph:tmp.gcno
44393 -: 1:#include <stdio.h>
44395 -: 3:int main (void)
44398 1: 5: int i, total;
44402 11: 9: for (i = 0; i < 10; i++)
44404 10: 10: total += i;
44407 1: 12: if (total != 45)
44409 #####: 13: printf ("Failure\n");
44412 1: 15: printf ("Success\n");
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.
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.
44431 When you use the `-b' option, your output looks like this:
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.
44440 Here is a sample of a resulting `tmp.c.gcov' file:
44443 -: 0:Graph:tmp.gcno
44447 -: 1:#include <stdio.h>
44449 -: 3:int main (void)
44450 function main called 1 returned 1 blocks executed 75%
44452 1: 5: int i, total;
44456 11: 9: for (i = 0; i < 10; i++)
44457 branch 0 taken 91% (fallthrough)
44459 10: 10: total += i;
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
44467 1: 15: printf ("Success\n");
44468 call 0 called 1 returned 100%
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.
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.
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.
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.
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
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.
44513 File: gcc.info, Node: Gcov and Optimization, Next: Gcov Data Files, Prev: Invoking Gcov, Up: Gcov
44515 10.3 Using `gcov' with GCC Optimization
44516 =======================================
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:
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
44537 100: 12:if (a != b)
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.
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
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.
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.
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
44578 File: gcc.info, Node: Gcov Data Files, Next: Cross-profiling, Prev: Gcov and Optimization, Up: Gcov
44580 10.4 Brief description of `gcov' data files
44581 ===========================================
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.
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
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.
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
44608 File: gcc.info, Node: Cross-profiling, Prev: Gcov Data Files, Up: Gcov
44610 10.5 Data file relocation to support cross-profiling
44611 ====================================================
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
44621 To support cross-profiling, a program compiled with `-fprofile-arcs'
44622 can relocate the data files based on two environment variables:
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
44628 * GCOV_PREFIX_STRIP indicates the how many initial directory names
44629 to strip off the hardwired absolute paths. Default value is 0.
44631 _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is
44632 undefined, then a relative path is made out of the hardwired
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'.
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.
44648 File: gcc.info, Node: Trouble, Next: Bugs, Prev: Gcov, Up: Top
44650 11 Known Causes of Trouble with GCC
44651 ***********************************
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.
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.
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.
44678 File: gcc.info, Node: Actual Bugs, Next: Interoperation, Up: Trouble
44680 11.1 Actual Bugs We Haven't Fixed Yet
44681 =====================================
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
44690 File: gcc.info, Node: Interoperation, Next: Incompatibilities, Prev: Actual Bugs, Up: Trouble
44692 11.2 Interoperation
44693 ===================
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.
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.
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
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.
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.
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.
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
44737 access_double (double *unaligned_ptr)
44739 union d2i { double d; int i[2]; };
44741 union d2i *p = (union d2i *) unaligned_ptr;
44750 Storing into the pointer can be done likewise with the same union.
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.
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
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.
44768 * Debugging (`-g') is not supported on the HP PA machine, unless you
44769 use the preliminary GNU tools.
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.
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.
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
44787 * GCC compiled code sometimes emits warnings from the HP-UX
44788 assembler of the form:
44790 (warning) Use of GR3 when
44791 frame >= 8192 may cause conflict.
44793 These warnings are harmless and can be safely ignored.
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.
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.
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').
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'.
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.
44836 File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: Interoperation, Up: Trouble
44838 11.3 Incompatibilities of GCC
44839 =============================
44841 There are several noteworthy incompatibilities between GNU C and K&R
44842 (non-ISO) versions of C.
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.
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.
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'.
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.
44861 * `-2147483648' is positive.
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.
44867 * GCC does not substitute macro arguments when they appear inside of
44868 string constants. For example, the following macro in GCC
44872 will produce output `"a"' regardless of what the argument A is.
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
44890 /* `longjmp (j)' may occur in `fun3'. */
44891 return a + fun3 ();
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
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.
44902 * Programs that use preprocessing directives in the middle of macro
44903 arguments do not work with GCC. For example, a program like this
44910 ISO C does not permit such a construct.
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).
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
44920 In some other C compilers, an `extern' declaration affects all the
44921 rest of the file even if it happens within a block.
44923 * In traditional C, you can combine `long', etc., with a typedef
44924 name, as shown here:
44927 typedef long foo bar;
44929 In ISO C, this is not allowed: `long' and other type modifiers
44930 require an explicit `int'.
44932 * PCC allows typedef names to be used as function parameters.
44934 * Traditional C allows the following erroneous pair of declarations
44935 to appear together in a given scope:
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.
44947 * PCC allows whitespace in the middle of compound assignment
44948 operators such as `+='. GCC, following the ISO standard, does not
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:
44958 You can't expect this to work.
44961 The best solution to such a problem is to put the text into an
44962 actual C comment delimited by `/*...*/'.
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.
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'.
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.
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.
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.
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.
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.
45005 You can tell GCC to use a compatible convention for all structure
45006 and union returning with the option `-fpcc-struct-return'.
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.
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.)
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.
45027 File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble
45029 11.4 Fixed Header Files
45030 =======================
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
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.
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/'.
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.
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
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
45064 File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble
45066 11.5 Standard Libraries
45067 =======================
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.
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
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.
45092 File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble
45094 11.6 Disappointments and Misunderstandings
45095 ==========================================
45097 These problems are perhaps regrettable, but we don't know any practical
45100 * Certain local variables aren't recognized by debuggers when you
45101 compile with optimization.
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.
45109 You have to expect a certain amount of disagreement between the
45110 executable and your source code, when you use optimization.
45112 * Users often think it is a bug when GCC reports an error for code
45115 int foo (struct mumble *);
45117 struct mumble { ... };
45119 int foo (struct mumble *x)
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.
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.
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.
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
45144 If you care about controlling the amount of memory that is
45145 accessed, use volatile but do not use bit-fields.
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
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/'.
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.
45168 You can partially avoid this problem by using the `-ffloat-store'
45169 option (*note Optimize Options::).
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.
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.
45186 File: gcc.info, Node: C++ Misunderstandings, Next: Non-bugs, Prev: Disappointments, Up: Trouble
45188 11.7 Common Misunderstandings with GNU C++
45189 ==========================================
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.
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
45205 File: gcc.info, Node: Static Definitions, Next: Name lookup, Up: C++ Misunderstandings
45207 11.7.1 Declare _and_ Define Static Members
45208 ------------------------------------------
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:
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:
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.
45235 File: gcc.info, Node: Name lookup, Next: Temporaries, Prev: Static Definitions, Up: C++ Misunderstandings
45237 11.7.2 Name lookup, templates, and accessing members of base classes
45238 --------------------------------------------------------------------
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
45248 template <typename T>
45257 static const int N;
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)'.
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'.
45275 This distinction between lookup of dependent and non-dependent names is
45276 called two-stage (or dependent) name lookup. G++ implements it since
45279 Two-stage name lookup sometimes leads to situations with behavior
45280 different from non-template codes. The most common is probably this:
45282 template <typename T> struct Base {
45286 template <typename T> struct Derived : public Base<T> {
45287 int get_i() { return i; }
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
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.
45306 Another, similar example involves calling member functions of a base
45309 template <typename T> struct Base {
45313 template <typename T> struct Derived : Base<T> {
45314 int g() { return f(); };
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:
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)
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).
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.
45343 ---------- Footnotes ----------
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.
45350 File: gcc.info, Node: Temporaries, Next: Copy Assignment, Prev: Name lookup, Up: C++ Misunderstandings
45352 11.7.3 Temporaries May Vanish Before You Expect
45353 -----------------------------------------------
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.
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':
45370 void charfunc (const char *);
45375 const char *p = strfunc().c_str();
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.
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.
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
45398 const string& tmp = strfunc ();
45399 charfunc (tmp.c_str ());
45402 File: gcc.info, Node: Copy Assignment, Prev: Temporaries, Up: C++ Misunderstandings
45404 11.7.4 Implicit Copy-Assignment for Virtual Bases
45405 -------------------------------------------------
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:
45414 Base(char *n) : name(strdup(n)){}
45415 Base& operator= (const Base& other){
45417 name = strdup (other.name);
45421 struct A:virtual Base{
45426 struct B:virtual Base{
45431 struct Derived:public A, public B{
45432 Derived():Base("Derived"){}
45435 void func(Derived &d1, Derived &d2)
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'
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.
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.
45458 File: gcc.info, Node: Non-bugs, Next: Warnings and Errors, Prev: C++ Misunderstandings, Up: Trouble
45460 11.8 Certain Changes We Don't Want to Make
45461 ==========================================
45463 This section lists changes that people frequently request, but which we
45464 do not make because we think GCC is better without them.
45466 * Checking the number and type of arguments to a function which has
45467 an old-fashioned definition and no prototype.
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.
45475 * Warning about using an expression whose type is signed as a shift
45478 Shift count operands are probably signed more often than unsigned.
45479 Warning about this would cause far more annoyance than good.
45481 * Warning about assigning a signed value to an unsigned variable.
45483 Such assignments must be very common; warning about them would
45484 cause more annoyance than good.
45486 * Warning when a non-void function value is ignored.
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
45499 * Making `-fshort-enums' the default.
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.
45507 * Making bit-fields unsigned by default on particular machines where
45508 "the ABI standard" says to do so.
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.
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.
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.
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.
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.
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.
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.
45551 This is why GCC does and will treat plain bit-fields in the same
45552 fashion on all types of machines (by default).
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.
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
45564 * Undefining `__STDC__' when `-ansi' is not used.
45566 Currently, GCC defines `__STDC__' unconditionally. This provides
45567 good results in practice.
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
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
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.
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.
45601 * Undefining `__STDC__' in C++.
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.
45610 These programs work properly with GNU C++ if `__STDC__' is defined.
45611 They would not work otherwise.
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.
45619 * Deleting "empty" loops.
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.
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.
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.
45643 for (ix = 0; ix != 10000; ix++)
45644 sum += some_expression;
45647 Even though `sum' is accumulated in the loop, no use is made of
45648 that summation, so the accumulation can be removed.
45650 * Making side effects happen in the same order as in some other
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:
45657 void func (int, int);
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
45668 * Making certain warnings into errors by default.
45670 Some ISO C testsuites report failure when the compiler does not
45671 produce an error message for a certain program.
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.
45682 File: gcc.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble
45684 11.9 Warning Messages and Error Messages
45685 ========================================
45687 The GNU compiler can produce two kinds of diagnostics: errors and
45688 warnings. Each kind has a different purpose:
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.
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
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).
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.
45715 *Note Options to Request or Suppress Warnings: Warning Options, for
45716 more detail on these and related command-line options.
45719 File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top
45724 Your bug reports play an essential role in making GCC reliable.
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.
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.
45738 File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Up: Bugs
45740 12.1 Have You Found a Bug?
45741 ==========================
45743 If you are not sure whether you have found a bug, here are some
45746 * If the compiler gets a fatal signal, for any input whatever, that
45747 is a compiler bug. Reliable compilers never crash.
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.
45754 * If the compiler produces valid assembly code that does not
45755 correctly execute the input source code, that is a compiler bug.
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.
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.
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
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.
45776 * If the compiler produces an error message for valid input, that is
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".
45784 * If you are an experienced user of one of the languages GCC
45785 supports, your suggestions for improvement of GCC are welcome in
45789 File: gcc.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Bugs
45791 12.2 How and where to Report Bugs
45792 =================================
45794 Bugs should be reported to the bug database at
45795 `http://gcc.gnu.org/bugs.html'.
45798 File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top
45800 13 How To Get Help with GCC
45801 ***************************
45803 If you need help installing, using or changing GCC, there are two ways
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
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'.
45817 For further information, see `http://gcc.gnu.org/faq.html#support'.
45820 File: gcc.info, Node: Contributing, Next: Funding, Prev: Service, Up: Top
45822 14 Contributing to GCC Development
45823 **********************************
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'.
45830 If you would like to work on improvements to GCC, please read the
45831 advice at these URLs:
45833 `http://gcc.gnu.org/contribute.html'
45834 `http://gcc.gnu.org/contributewhy.html'
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/'.
45841 File: gcc.info, Node: Funding, Next: GNU Project, Prev: Contributing, Up: Top
45843 Funding Free Software
45844 *********************
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.
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.
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.
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
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.
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.
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.
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.
45891 File: gcc.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top
45893 The GNU Project and GNU/Linux
45894 *****************************
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.
45903 For more information, see:
45904 `http://www.gnu.org/'
45905 `http://www.gnu.org/gnu/linux-and-gnu.html'
45908 File: gcc.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top
45910 GNU General Public License
45911 **************************
45913 Version 3, 29 June 2007
45915 Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
45917 Everyone is permitted to copy and distribute verbatim copies of this
45918 license document, but changing it is not allowed.
45923 The GNU General Public License is a free, copyleft license for software
45924 and other kinds of works.
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.
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.
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.
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
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.
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.
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
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.
45982 The precise terms and conditions for copying, distribution and
45983 modification follow.
45985 TERMS AND CONDITIONS
45986 ====================
45990 "This License" refers to version 3 of the GNU General Public
45993 "Copyright" also means copyright-like laws that apply to other
45994 kinds of works, such as semiconductor masks.
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.
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.
46005 A "covered work" means either the unmodified Program or a work
46006 based on the Program.
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
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
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
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.
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
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.
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
46069 The Corresponding Source need not include anything that users can
46070 regenerate automatically from other parts of the Corresponding
46073 The Corresponding Source for a work in source code form is that
46076 2. Basic Permissions.
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.
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.
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.
46103 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
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
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.
46119 4. Conveying Verbatim Copies.
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.
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.
46132 5. Conveying Modified Source Versions.
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
46139 a. The work must carry prominent notices stating that you
46140 modified it, and giving a relevant date.
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".
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
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.
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.
46171 6. Conveying Non-Source Forms.
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:
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.
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
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.
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.
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.
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.
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.
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.
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).
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.
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.
46274 7. Additional Terms.
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.
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.
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
46298 a. Disclaiming warranty or limiting liability differently from
46299 the terms of sections 15 and 16 of this License; or
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
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
46310 d. Limiting the use for publicity purposes of names of licensors
46311 or authors of the material; or
46313 e. Declining to grant rights under trademark law for use of some
46314 trade names, trademarks, or service marks; or
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.
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
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.
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.
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).
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.
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.
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.
46370 9. Acceptance Not Required for Having Copies.
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.
46382 10. Automatic Licensing of Downstream Recipients.
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
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.
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
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
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.
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.
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.
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.
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.
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.
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.
46483 12. No Surrender of Others' Freedom.
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
46497 13. Use with the GNU Affero General Public License.
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.
46508 14. Revised Versions of this License.
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
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.
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.
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
46535 15. Disclaimer of Warranty.
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.
46547 16. Limitation of Liability.
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.
46560 17. Interpretation of Sections 15 and 16.
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.
46570 END OF TERMS AND CONDITIONS
46571 ===========================
46573 How to Apply These Terms to Your New Programs
46574 =============================================
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
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.
46586 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
46587 Copyright (C) YEAR NAME OF AUTHOR
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.
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.
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/'.
46602 Also add information on how to contact you by electronic and paper
46605 If the program does terminal interaction, make it output a short
46606 notice like this when it starts in an interactive mode:
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.
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".
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/'.
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'.
46631 File: gcc.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top
46633 GNU Free Documentation License
46634 ******************************
46636 Version 1.3, 3 November 2008
46638 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
46641 Everyone is permitted to copy and distribute verbatim copies
46642 of this license document, but changing it is not allowed.
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.
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.
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.
46668 1. APPLICABILITY AND DEFINITIONS
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.
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.
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
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.
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.
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".
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.
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.
46741 The "publisher" means any person or entity that distributes copies
46742 of the Document to the public.
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.
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.
46760 2. VERBATIM COPYING
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.
46773 You may also lend copies, under the same conditions stated above,
46774 and you may publicly display copies.
46776 3. COPYING IN QUANTITY
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
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
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.
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.
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:
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.
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.
46840 C. State on the Title page the name of the publisher of the
46841 Modified Version, as the publisher.
46843 D. Preserve all the copyright notices of the Document.
46845 E. Add an appropriate copyright notice for your modifications
46846 adjacent to the other copyright notices.
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.
46853 G. Preserve in that license notice the full lists of Invariant
46854 Sections and required Cover Texts given in the Document's
46857 H. Include an unaltered copy of this License.
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.
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.
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.
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
46887 M. Delete any section Entitled "Endorsements". Such a section
46888 may not be included in the Modified Version.
46890 N. Do not retitle any existing section to be Entitled
46891 "Endorsements" or to conflict in title with any Invariant
46894 O. Preserve any Warranty Disclaimers.
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.
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.
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.
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.
46925 5. COMBINING DOCUMENTS
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.
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
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."
46951 6. COLLECTIONS OF DOCUMENTS
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.
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
46966 7. AGGREGATION WITH INDEPENDENT WORKS
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.
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.
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
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
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.
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.
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.
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.
47033 10. FUTURE REVISIONS OF THIS LICENSE
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/'.
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.
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
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.
47070 "Incorporate" means to publish or republish a Document, in whole or
47071 in part, as part of another Document.
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.
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.
47085 ADDENDUM: How to use this License for your documents
47086 ====================================================
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:
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''.
47100 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
47101 replace the "with...Texts." line with this:
47103 with the Invariant Sections being LIST THEIR TITLES, with
47104 the Front-Cover Texts being LIST, and with the Back-Cover Texts
47107 If you have Invariant Sections without Cover Texts, or some other
47108 combination of the three, merge those two alternatives to suit the
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.
47117 File: gcc.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top
47119 Contributors to GCC
47120 *******************
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.
47129 * Analog Devices helped implement the support for complex data types
47132 * John David Anglin for threading-related fixes and improvements to
47133 libstdc++-v3, and the HP-UX port.
47135 * James van Artsdalen wrote the code that makes efficient use of the
47136 Intel 80387 register stack.
47138 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
47141 * Alasdair Baird for various bug fixes.
47143 * Giovanni Bajo for analyzing lots of complicated C++ problem
47146 * Peter Barada for his work to improve code generation for new
47149 * Gerald Baumgartner added the signature extension to the C++ front
47152 * Godmar Back for his Java improvements and encouragement.
47154 * Scott Bambrough for help porting the Java compiler.
47156 * Wolfgang Bangerth for processing tons of bug reports.
47158 * Jon Beniston for his Microsoft Windows port of Java and port to
47161 * Daniel Berlin for better DWARF2 support, faster/better
47162 optimizations, improved alias analysis, plus migrating GCC to
47165 * Geoff Berry for his Java object serialization work and various
47168 * David Binderman tests weekly snapshots of GCC trunk against Fedora
47169 Rawhide for several architectures.
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
47175 * Eric Blake for helping to make GCJ and libgcj conform to the
47178 * Janne Blomqvist for contributions to GNU Fortran.
47180 * Segher Boessenkool for various fixes.
47182 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
47185 * Neil Booth for work on cpplib, lang hooks, debug hooks and other
47186 miscellaneous clean-ups.
47188 * Steven Bosscher for integrating the GNU Fortran front end into GCC
47189 and for contributing to the tree-ssa branch.
47191 * Eric Botcazou for fixing middle- and backend bugs left and right.
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.
47200 * Devon Bowen helped port GCC to the Tahoe.
47202 * Don Bowman for mips-vxworks contributions.
47204 * Dave Brolley for work on cpplib and Chill.
47206 * Paul Brook for work on the ARM architecture and maintaining GNU
47209 * Robert Brown implemented the support for Encore 32000 systems.
47211 * Christian Bruel for improvements to local store elimination.
47213 * Herman A.J. ten Brugge for various fixes.
47215 * Joerg Brunsmann for Java compiler hacking and help with the GCJ
47218 * Joe Buck for his direction via the steering committee.
47220 * Craig Burley for leadership of the G77 Fortran effort.
47222 * Stephan Buys for contributing Doxygen notes for libstdc++.
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.
47229 * John Carr for his alias work, SPARC hacking, infrastructure
47230 improvements, previous contributions to the steering committee,
47231 loop optimizations, etc.
47233 * Stephane Carrez for 68HC11 and 68HC12 ports.
47235 * Steve Chamberlain for support for the Renesas SH and H8 processors
47236 and the PicoJava processor, and for GCJ config fixes.
47238 * Glenn Chambers for help with the GCJ FAQ.
47240 * John-Marc Chandonia for various libgcj patches.
47242 * Denis Chertykov for contributing and maintaining the AVR port, the
47243 first GCC port for an 8-bit architecture.
47245 * Scott Christley for his Objective-C contributions.
47247 * Eric Christopher for his Java porting help and clean-ups.
47249 * Branko Cibej for more warning contributions.
47251 * The GNU Classpath project for all of their merged runtime code.
47253 * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, `--help',
47254 and other random hacking.
47256 * Michael Cook for libstdc++ cleanup patches to reduce warnings.
47258 * R. Kelley Cook for making GCC buildable from a read-only directory
47259 as well as other miscellaneous build process and documentation
47262 * Ralf Corsepius for SH testing and minor bug fixing.
47264 * Stan Cox for care and feeding of the x86 port and lots of behind
47265 the scenes hacking.
47267 * Alex Crain provided changes for the 3b1.
47269 * Ian Dall for major improvements to the NS32k port.
47271 * Paul Dale for his work to add uClinux platform support to the m68k
47274 * Dario Dariol contributed the four varieties of sample programs
47275 that print a copy of their source.
47277 * Russell Davidson for fstream and stringstream fixes in libstdc++.
47279 * Bud Davis for work on the G77 and GNU Fortran compilers.
47281 * Mo DeJong for GCJ and libgcj bug fixes.
47283 * DJ Delorie for the DJGPP port, build and libiberty maintenance,
47284 various bug fixes, and the M32C, MeP, and RL78 ports.
47286 * Arnaud Desitter for helping to debug GNU Fortran.
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.
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.
47301 * Zdenek Dvorak for a new loop unroller and various fixes.
47303 * Michael Eager for his work on the Xilinx MicroBlaze port.
47305 * Richard Earnshaw for his ongoing work with the ARM.
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.
47312 * Kevin Ediger for the floating point formatting of num_put::do_put
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
47320 * Paul Eggert for random hacking all over GCC.
47322 * Mark Elbrecht for various DJGPP improvements, and for libstdc++
47323 configuration support for locales and fstream-related fixes.
47325 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
47328 * Christian Ehrhardt for dealing with bug reports.
47330 * Ben Elliston for his work to move the Objective-C runtime into its
47331 own subdirectory and for his work on autoconf.
47333 * Revital Eres for work on the PowerPC 750CL port.
47335 * Marc Espie for OpenBSD support.
47337 * Doug Evans for much of the global optimization framework, arc,
47338 m32r, and SPARC work.
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.
47343 * Fred Fish for BeOS support and Ada fixes.
47345 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
47347 * Peter Gerwinski for various bug fixes and the Pascal front end.
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
47356 * John Gilmore for a donation to the FSF earmarked improving GNU
47359 * Judy Goldberg for c++ contributions.
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.
47366 * Anthony Green for his `-Os' contributions, the moxie port, and
47367 Java front end work.
47369 * Stu Grossman for gdb hacking, allowing GCJ developers to debug
47372 * Michael K. Gschwind contributed the port to the PDP-11.
47374 * Richard Guenther for his ongoing middle-end contributions and bug
47375 fixes and for release management.
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.
47382 * Sumanth Gundapaneni for contributing the CR16 port.
47384 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
47387 * Bruno Haible for improvements in the runtime overhead for EH, new
47388 warnings and assorted bug fixes.
47390 * Andrew Haley for his amazing Java compiler and library efforts.
47392 * Chris Hanson assisted in making GCC work on HP-UX for the 9000
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.
47399 * Dara Hazeghi for wading through myriads of target-specific bug
47402 * Kate Hedstrom for staking the G77 folks with an initial testsuite.
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.
47409 * Aldy Hernandez for working on the PowerPC port, SIMD support, and
47412 * Nobuyuki Hikichi of Software Research Associates, Tokyo,
47413 contributed the support for the Sony NEWS machine.
47415 * Kazu Hirata for caring and feeding the Renesas H8/300 port and
47418 * Katherine Holcomb for work on GNU Fortran.
47420 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
47421 of testing and bug fixing, particularly of GCC configury code.
47423 * Steve Holmgren for MachTen patches.
47425 * Mat Hostetter for work on the TILE-Gx and TILEPro ports.
47427 * Jan Hubicka for his x86 port improvements.
47429 * Falk Hueffner for working on C and optimization bug reports.
47431 * Bernardo Innocenti for his m68k work, including merging of
47432 ColdFire improvements and uClinux support.
47434 * Christian Iseli for various bug fixes.
47436 * Kamil Iskra for general m68k hacking.
47438 * Lee Iverson for random fixes and MIPS testing.
47440 * Andreas Jaeger for testing and benchmarking of GCC and various bug
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
47447 * Janis Johnson for ia64 testing and fixes, her quality improvement
47448 sidetracks, and web page maintenance.
47450 * Kean Johnston for SCO OpenServer support and various fixes.
47452 * Tim Josling for the sample language treelang based originally on
47453 Richard Kenner's "toy" language.
47455 * Nicolai Josuttis for additional libstdc++ documentation.
47457 * Klaus Kaempf for his ongoing work to make alpha-vms a viable
47460 * Steven G. Kargl for work on GNU Fortran.
47462 * David Kashtan of SRI adapted GCC to VMS.
47464 * Ryszard Kabatek for many, many libstdc++ bug fixes and
47465 optimizations of strings, especially member functions, and for
47468 * Geoffrey Keating for his ongoing work to make the PPC work for
47469 GNU/Linux and his automatic regression tester.
47471 * Brendan Kehoe for his ongoing work with G++ and for a lot of early
47472 work in just about every part of libstdc++.
47474 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
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
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.
47492 * Robin Kirkham for cpu32 support.
47494 * Mark Klein for PA improvements.
47496 * Thomas Koenig for various bug fixes.
47498 * Bruce Korb for the new and improved fixincludes code.
47500 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
47503 * Charles LaBrec contributed the support for the Integrated Solutions
47506 * Asher Langton and Mike Kumbera for contributing Cray pointer
47507 support to GNU Fortran, and for other GNU Fortran improvements.
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.
47515 * Walter Lee for work on the TILE-Gx and TILEPro ports.
47517 * Marc Lehmann for his direction via the steering committee and
47518 helping with analysis and improvements of x86 performance.
47520 * Victor Leikehman for work on GNU Fortran.
47522 * Ted Lemon wrote parts of the RTL reader and printer.
47524 * Kriang Lerdsuwanakij for C++ improvements including template as
47525 template parameter support, and many C++ fixes.
47527 * Warren Levy for tremendous work on libgcj (Java Runtime Library)
47528 and random work on the Java front end.
47530 * Alain Lichnewsky ported GCC to the MIPS CPU.
47532 * Oskar Liljeblad for hacking on AWT and his many Java bug reports
47535 * Robert Lipe for OpenServer support, new testsuites, testing, etc.
47537 * Chen Liqin for various S+core related fixes/improvement, and for
47538 maintaining the S+core port.
47540 * Weiwen Liu for testing and various bug fixes.
47542 * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other
47543 diagnostics fixes and improvements.
47545 * Dave Love for his ongoing work with the Fortran front end and
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.
47552 * H.J. Lu for his previous contributions to the steering committee,
47553 many x86 bug reports, prototype patches, and keeping the GNU/Linux
47556 * Greg McGary for random fixes and (someday) bounded pointers.
47558 * Andrew MacLeod for his ongoing work in building a real EH system,
47559 various code generation improvements, work on the global
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
47568 * Bob Manson for his behind the scenes work on dejagnu.
47570 * Philip Martin for lots of libstdc++ string and vector iterator
47571 fixes and improvements, and string clean up and testsuites.
47573 * All of the Mauve project contributors, for Java test code.
47575 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
47577 * Adam Megacz for his work on the Microsoft Windows port of GCJ.
47579 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
47580 powerpc, haifa, ECOFF debug support, and other assorted hacking.
47582 * Jason Merrill for his direction via the steering committee and
47583 leading the G++ effort.
47585 * Martin Michlmayr for testing GCC on several architectures using the
47586 entire Debian archive.
47588 * David Miller for his direction via the steering committee, lots of
47589 SPARC work, improvements in jump.c and interfacing with the Linux
47592 * Gary Miller ported GCC to Charles River Data Systems machines.
47594 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
47595 the entire libstdc++ testsuite namespace-compatible.
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.
47602 * Alan Modra for various GNU/Linux bits and testing.
47604 * Toon Moene for his direction via the steering committee, Fortran
47605 maintenance, and his ongoing work to make us make Fortran run fast.
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
47613 * Catherine Moore for fixing various ugly problems we have sent her
47614 way, including the haifa bug which was killing the Alpha & PowerPC
47617 * Mike Moreton for his various Java patches.
47619 * David Mosberger-Tang for various Alpha improvements, and for the
47620 initial IA-64 port.
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.
47626 * Bill Moyer for his behind the scenes work on various issues.
47628 * Philippe De Muyter for his work on the m68k port.
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
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.
47640 * Felix Natter for documentation on porting libstdc++.
47642 * Nathanael Nerode for cleaning up the configuration/build process.
47644 * NeXT, Inc. donated the front end that supports the Objective-C
47647 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
47648 the search engine setup, various documentation fixes and other
47651 * Geoff Noer for his work on getting cygwin native builds working.
47653 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
47654 tracking web pages, GIMPLE tuples, and assorted fixes.
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.
47660 * Alexandre Oliva for various build infrastructure improvements,
47661 scripts and amazing testing work, including keeping libtool issues
47664 * Stefan Olsson for work on mt_alloc.
47666 * Melissa O'Neill for various NeXT fixes.
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.
47673 * Hartmut Penner for work on the s390 port.
47675 * Paul Petersen wrote the machine description for the Alliant FX/8.
47677 * Alexandre Petit-Bianco for implementing much of the Java compiler
47678 and continued Java maintainership.
47680 * Matthias Pfaller for major improvements to the NS32k port.
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.
47686 * Andrew Pinski for processing bug reports by the dozen.
47688 * Ovidiu Predescu for his work on the Objective-C front end and
47691 * Jerry Quinn for major performance improvements in C++ formatted
47694 * Ken Raeburn for various improvements to checker, MIPS ports and
47695 various cleanups in the compiler.
47697 * Rolf W. Rasmussen for hacking on AWT.
47699 * David Reese of Sun Microsystems contributed to the Solaris on
47702 * Volker Reichelt for keeping up with the problem reports.
47704 * Joern Rennecke for maintaining the sh port, loop, regmove & reload
47705 hacking and developing and maintaining the Epiphany port.
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.
47713 * Craig Rodrigues for processing tons of bug reports.
47715 * Ola Ro"nnerup for work on mt_alloc.
47717 * Gavin Romig-Koch for lots of behind the scenes MIPS work.
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.
47723 * Ken Rose for fixes to GCC's delay slot filling code.
47725 * Paul Rubin wrote most of the preprocessor.
47727 * Pe'tur Runo'lfsson for major performance improvements in C++
47728 formatted I/O and large file support in C++ filebuf.
47730 * Chip Salzenberg for libstdc++ patches and improvements to locales,
47731 traits, Makefiles, libio, libtool hackery, and "long long" support.
47733 * Juha Sarlin for improvements to the H8 code generator.
47735 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
47738 * Roger Sayle for improvements to constant folding and GCC's RTL
47739 optimizers as well as for fixing numerous bugs.
47741 * Bradley Schatz for his work on the GCJ FAQ.
47743 * Peter Schauer wrote the code to allow debugging to work on the
47746 * William Schelter did most of the work on the Intel 80386 support.
47748 * Tobias Schlu"ter for work on GNU Fortran.
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.
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.
47758 * Jason Schroeder for jcf-dump patches.
47760 * Andreas Schwab for his work on the m68k port.
47762 * Lars Segerlund for work on GNU Fortran.
47764 * Dodji Seketeli for numerous C++ bug fixes and debug info
47767 * Joel Sherrill for his direction via the steering committee, RTEMS
47768 contributions and RTEMS testing.
47770 * Nathan Sidwell for many C++ fixes/improvements.
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.
47776 * Kenny Simpson for prompting libstdc++ fixes due to defect reports
47777 from the LWG (thereby keeping GCC in line with updates from the
47780 * Franz Sirl for his ongoing work with making the PPC port stable
47783 * Andrey Slepuhin for assorted AIX hacking.
47785 * Trevor Smigiel for contributing the SPU port.
47787 * Christopher Smith did the port for Convex machines.
47789 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
47791 * Randy Smith finished the Sun FPA support.
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
47798 * Zdenek Sojka for running automated regression testing of GCC and
47799 reporting numerous bugs.
47801 * Jayant Sonar for contributing the CR16 port.
47803 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
47805 * Richard Stallman, for writing the original GCC and launching the
47808 * Jan Stein of the Chalmers Computer Society provided support for
47809 Genix, as well as part of the 32000 machine description.
47811 * Nigel Stephens for various mips16 related fixes/improvements.
47813 * Jonathan Stone wrote the machine description for the Pyramid
47816 * Graham Stott for various infrastructure improvements.
47818 * John Stracke for his Java HTTP protocol fixes.
47820 * Mike Stump for his Elxsi port, G++ contributions over the years
47821 and more recently his vxworks contributions
47823 * Jeff Sturm for Java porting help, bug fixes, and encouragement.
47825 * Shigeya Suzuki for this fixes for the bsdi platforms.
47827 * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
47828 support, general configury hacking, fixincludes, etc.
47830 * Holger Teutsch provided the support for the Clipper CPU.
47832 * Gary Thomas for his ongoing work to make the PPC work for
47835 * Philipp Thomas for random bug fixes throughout the compiler
47837 * Jason Thorpe for thread support in libstdc++ on NetBSD.
47839 * Kresten Krab Thorup wrote the run time support for the Objective-C
47840 language and the fantastic Java bytecode interpreter.
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.
47846 * Andreas Tobler for his work porting libgcj to Darwin.
47848 * Teemu Torma for thread safe exception handling support.
47850 * Leonard Tower wrote parts of the parser, RTL generator, and RTL
47851 definitions, and of the VAX machine description.
47853 * Daniel Towner and Hariharan Sandanagobalane contributed and
47854 maintain the picoChip port.
47856 * Tom Tromey for internationalization support and for his many Java
47857 contributions and libgcj maintainership.
47859 * Lassi Tuura for improvements to config.guess to determine HP
47862 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
47864 * Andy Vaught for the design and initial implementation of the GNU
47867 * Brent Verner for work with the libstdc++ cshadow files and their
47868 associated configure steps.
47870 * Todd Vierling for contributions for NetBSD ports.
47872 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
47875 * Dean Wakerley for converting the install documentation from HTML
47876 to texinfo in time for GCC 3.0.
47878 * Krister Walfridsson for random bug fixes.
47880 * Feng Wang for contributions to GNU Fortran.
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.
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.
47890 * Ulrich Weigand for work on the s390 port.
47892 * Zack Weinberg for major work on cpplib and various other bug fixes.
47894 * Matt Welsh for help with Linux Threads support in GCJ.
47896 * Urban Widmark for help fixing java.io.
47898 * Mark Wielaard for new Java library code and his work integrating
47901 * Dale Wiles helped port GCC to the Tahoe.
47903 * Bob Wilson from Tensilica, Inc. for the Xtensa port.
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.
47909 * Paul Woegerer and Tal Agmon for the CRX port.
47911 * Carlo Wood for various fixes.
47913 * Tom Wood for work on the m88k port.
47915 * Canqun Yang for work on GNU Fortran.
47917 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
47918 description for the Tron architecture (specifically, the Gmicro).
47920 * Kevin Zachmann helped port GCC to the Tahoe.
47922 * Ayal Zaks for Swing Modulo Scheduling (SMS).
47924 * Xiaoqiang Zhang for work on GNU Fortran.
47926 * Gilles Zunino for help porting Java to Irix.
47929 The following people are recognized for their contributions to GNAT,
47930 the Ada front end of GCC:
47933 * Romain Berrendonner
47983 * Hristian Kirtchev
48026 The following people are recognized for their contributions of new
48027 features, bug reports, testing and integration of classpath/libgcj for
48029 * Lillian Angel for `JTree' implementation and lots Free Swing
48030 additions and bug fixes.
48032 * Wolfgang Baer for `GapContent' bug fixes.
48034 * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse
48035 event fixes, lots of Free Swing work including `JTable' editing.
48037 * Stuart Ballard for RMI constant fixes.
48039 * Goffredo Baroncelli for `HTTPURLConnection' fixes.
48041 * Gary Benson for `MessageFormat' fixes.
48043 * Daniel Bonniot for `Serialization' fixes.
48045 * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX'
48046 and `DOM xml:id' support.
48048 * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes.
48050 * Archie Cobbs for build fixes, VM interface updates,
48051 `URLClassLoader' updates.
48053 * Kelley Cook for build fixes.
48055 * Martin Cordova for Suggestions for better `SocketTimeoutException'.
48057 * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite
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.
48064 * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
48065 fixes, better `Proxy' support, bug fixes and IKVM integration.
48067 * Santiago Gala for `AccessControlContext' fixes.
48069 * Nicolas Geoffray for `VMClassLoader' and `AccessController'
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.
48076 * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers.
48078 * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj
48081 * Kim Ho for `JFileChooser' implementation.
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.
48087 * Bastiaan Huisman for `TimeZone' bug fixing.
48089 * Andreas Jaeger for mprec updates.
48091 * Paul Jenner for better `-Werror' support.
48093 * Ito Kazumitsu for `NetworkInterface' implementation and updates.
48095 * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
48096 bug fixes all over. Lots of Free Swing work including styled text.
48098 * Simon Kitching for `String' cleanups and optimization suggestions.
48100 * Michael Koch for configuration fixes, `Locale' updates, bug and
48103 * Guilhem Lavaux for configuration, thread and channel fixes and
48104 Kaffe integration. JCL native `Pointer' updates. Logger bug fixes.
48106 * David Lichteblau for JCL support library global/local reference
48109 * Aaron Luchko for JDWP updates and documentation fixes.
48111 * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex
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.
48118 * Casey Marshall for crypto algorithm fixes, `FileChannel' lock,
48119 `SystemLogger' and `FileHandler' rotate implementations, NIO
48120 `FileChannel.map' support, security and policy updates.
48122 * Bryce McKinlay for RMI work.
48124 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
48125 testing and documenting.
48127 * Kalle Olavi Niemitalo for build fixes.
48129 * Rainer Orth for build fixes.
48131 * Andrew Overholt for `File' locking fixes.
48133 * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates.
48135 * Olga Rodimina for `MenuSelectionManager' implementation.
48137 * Jan Roehrich for `BasicTreeUI' and `JTree' fixes.
48139 * Julian Scheid for documentation updates and gjdoc support.
48141 * Christian Schlichtherle for zip fixes and cleanups.
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.
48147 * Keith Seitz for lots of JDWP work.
48149 * Christian Thalinger for 64-bit cleanups, Configuration and VM
48150 interface fixes and `CACAO' integration, `fdlibm' updates.
48152 * Gael Thomas for `VMClassLoader' boot packages support suggestions.
48154 * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4'
48155 support for Darwin/OS X, `Graphics2D' support, `gtk+' updates.
48157 * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe
48158 integration. `Qt4' build infrastructure, `SHA1PRNG' and
48159 `GdkPixbugDecoder' updates.
48161 * Tom Tromey for Eclipse integration, generics work, lots of bug
48162 fixes and gcj integration including coordinating The Big Merge.
48164 * Mark Wielaard for bug fixes, packaging and release management,
48165 `Clipboard' implementation, system call interrupts and network
48166 timeouts and `GdkPixpufDecoder' fixes.
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:
48173 * Michael Abd-El-Malek
48183 * David Billinghurst
48187 * Stephane Bortzmeyer
48197 * Bradford Castalia
48219 * Charles-Antoine Gauthier
48241 * Kevin B. Hendricks
48245 * Christian Joensson
48253 * Anand Krishnaswamy
48255 * A. O. V. Le Blanc
48319 * Pedro A. M. Vazquez
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
48334 File: gcc.info, Node: Option Index, Next: Keyword Index, Prev: Contributors, Up: Top
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.
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.
48354 * A: Preprocessor Options.
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.
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.
48368 * avx256-split-unaligned-store: i386 and x86-64 Options.
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.
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.
48386 * d: Debugging Options. (line 544)
48387 * dA: Debugging Options. (line 754)
48388 * da: Debugging Options. (line 751)
48389 * dD <1>: Preprocessor Options.
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.
48397 * dM: Preprocessor Options.
48399 * dN: Preprocessor Options.
48401 * dP: Debugging Options. (line 770)
48402 * dp: Debugging Options. (line 765)
48403 * dU: Preprocessor Options.
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.
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.
48440 * fcombine-stack-adjustments: Optimize Options. (line 841)
48441 * fcommon: Variable Attributes.
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.
48450 * fconstexpr-depth: C++ Dialect Options.
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.
48464 * fdebug-prefix-map: Debugging Options. (line 320)
48465 * fdebug-types-section: Debugging Options. (line 74)
48466 * fdeduce-init-list: C++ Dialect Options.
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.
48474 * fdiagnostics-show-location: Language Independent Options.
48476 * fdiagnostics-show-option: Language Independent Options.
48478 * fdirectives-only: Preprocessor Options.
48480 * fdisable-: Debugging Options. (line 475)
48481 * fdollars-in-identifiers <1>: Interoperation. (line 141)
48482 * fdollars-in-identifiers: Preprocessor Options.
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.
48599 * fexpensive-optimizations: Optimize Options. (line 587)
48600 * fext-numeric-literals: C++ Dialect Options.
48602 * fextended-identifiers: Preprocessor Options.
48604 * fextern-tls-init: C++ Dialect Options.
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.
48615 * fforward-propagate: Optimize Options. (line 185)
48616 * ffp-contract: Optimize Options. (line 194)
48617 * ffreestanding <1>: Function Attributes.
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.
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.
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.
48648 * finstrument-functions <1>: Function Attributes.
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.
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.
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.
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.
48698 * fno-access-control: C++ Dialect Options.
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.
48705 * fno-builtin <3>: Warning Options. (line 255)
48706 * fno-builtin: C Dialect Options. (line 205)
48707 * fno-canonical-system-headers: Preprocessor Options.
48709 * fno-common <1>: Variable Attributes.
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.
48718 * fno-defer-pop: Optimize Options. (line 177)
48719 * fno-diagnostics-show-caret: Language Independent Options.
48721 * fno-diagnostics-show-option: Language Independent Options.
48723 * fno-dwarf2-cfi-asm: Debugging Options. (line 324)
48724 * fno-elide-constructors: C++ Dialect Options.
48726 * fno-eliminate-unused-debug-types: Debugging Options. (line 1392)
48727 * fno-enforce-eh-specs: C++ Dialect Options.
48729 * fno-ext-numeric-literals: C++ Dialect Options.
48731 * fno-extern-tls-init: C++ Dialect Options.
48733 * fno-for-scope: C++ Dialect Options.
48735 * fno-function-cse: Optimize Options. (line 384)
48736 * fno-gnu-keywords: C++ Dialect Options.
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.
48743 * fno-implicit-inline-templates: C++ Dialect Options.
48745 * fno-implicit-templates <1>: Template Instantiation.
48747 * fno-implicit-templates: C++ Dialect Options.
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.
48757 * fno-nonansi-builtins: C++ Dialect Options.
48759 * fno-operator-names: C++ Dialect Options.
48761 * fno-optional-diags: C++ Dialect Options.
48763 * fno-peephole: Optimize Options. (line 1325)
48764 * fno-peephole2: Optimize Options. (line 1325)
48765 * fno-pretty-templates: C++ Dialect Options.
48767 * fno-rtti: C++ Dialect Options.
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.
48773 * fno-show-column: Preprocessor Options.
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.
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.
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.
48789 * fno-working-directory: Preprocessor Options.
48791 * fno-writable-relocated-rdata: i386 and x86-64 Windows Options.
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.
48797 * fobjc-abi-version: Objective-C and Objective-C++ Dialect Options.
48799 * fobjc-call-cxx-cdtors: Objective-C and Objective-C++ Dialect Options.
48801 * fobjc-direct-dispatch: Objective-C and Objective-C++ Dialect Options.
48803 * fobjc-exceptions: Objective-C and Objective-C++ Dialect Options.
48805 * fobjc-gc: Objective-C and Objective-C++ Dialect Options.
48807 * fobjc-nilcheck: Objective-C and Objective-C++ Dialect Options.
48809 * fobjc-std: Objective-C and Objective-C++ Dialect Options.
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.
48824 * fpch-preprocess: Preprocessor Options.
48826 * fpeel-loops: Optimize Options. (line 2153)
48827 * fpermissive: C++ Dialect Options.
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.
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.
48861 * frepo <1>: Template Instantiation.
48863 * frepo: C++ Dialect Options.
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.
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.
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.
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.
48917 * fstrict-aliasing: Optimize Options. (line 1381)
48918 * fstrict-enums: C++ Dialect Options.
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.
48926 * ftemplate-backtrace-limit: C++ Dialect Options.
48928 * ftemplate-depth: C++ Dialect Options.
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.
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.
48976 * funsigned-bitfields: C Dialect Options. (line 353)
48977 * funsigned-char <1>: Characters implementation.
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.
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.
48993 * fvisibility-ms-compat: C++ Dialect Options.
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.
49000 * fworking-directory: Preprocessor Options.
49002 * fwrapv: Code Gen Options. (line 100)
49003 * fzero-link: Objective-C and Objective-C++ Dialect Options.
49005 * G <1>: System V Options. (line 10)
49006 * G <2>: RS/6000 and PowerPC Options.
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.
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.
49032 * headerpad_max_install_names: Darwin Options. (line 196)
49033 * help <1>: Preprocessor Options.
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.
49040 * I- <1>: Directory Options. (line 119)
49041 * I-: Preprocessor Options.
49043 * idirafter: Preprocessor Options.
49045 * iframework: Darwin Options. (line 57)
49046 * imacros: Preprocessor Options.
49048 * image_base: Darwin Options. (line 196)
49049 * imultilib: Preprocessor Options.
49051 * include: Preprocessor Options.
49053 * init: Darwin Options. (line 196)
49054 * install_name: Darwin Options. (line 196)
49055 * iprefix: Preprocessor Options.
49057 * iquote <1>: Directory Options. (line 36)
49058 * iquote: Preprocessor Options.
49060 * isysroot: Preprocessor Options.
49062 * isystem: Preprocessor Options.
49064 * iwithprefix: Preprocessor Options.
49066 * iwithprefixbefore: Preprocessor Options.
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.
49074 * M: Preprocessor Options.
49076 * m1: SH Options. (line 9)
49077 * m10: PDP-11 Options. (line 29)
49078 * m128bit-long-double: i386 and x86-64 Options.
49080 * m16-bit: CRIS Options. (line 64)
49081 * m1reg-: Adapteva Epiphany Options.
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.
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.
49097 * m32: i386 and x86-64 Options.
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.
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.
49129 * m64 <4>: RS/6000 and PowerPC Options.
49131 * m64: i386 and x86-64 Options.
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.
49147 * mabi <1>: RS/6000 and PowerPC Options.
49149 * mabi <2>: i386 and x86-64 Options.
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.
49158 * mabi=ieeelongdouble: RS/6000 and PowerPC Options.
49160 * mabi=mmixware: MMIX Options. (line 20)
49161 * mabi=n32: MIPS Options. (line 131)
49162 * mabi=no-spe: RS/6000 and PowerPC Options.
49164 * mabi=o64: MIPS Options. (line 131)
49165 * mabi=spe: RS/6000 and PowerPC Options.
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.
49178 * maddress-mode=long: i386 and x86-64 Options.
49180 * maddress-mode=short: i386 and x86-64 Options.
49182 * maddress-space-conversion: SPU Options. (line 63)
49183 * mads: RS/6000 and PowerPC Options.
49185 * maix-struct-return: RS/6000 and PowerPC Options.
49187 * maix32: RS/6000 and PowerPC Options.
49189 * maix64: RS/6000 and PowerPC Options.
49191 * malign-300: H8/300 Options. (line 41)
49192 * malign-double: i386 and x86-64 Options.
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.
49199 * malign-power: RS/6000 and PowerPC Options.
49201 * mall-opts: MeP Options. (line 11)
49202 * malloc-cc: FRV Options. (line 25)
49203 * maltivec: RS/6000 and PowerPC Options.
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.
49215 * march <2>: MIPS Options. (line 14)
49216 * march <3>: M680x0 Options. (line 12)
49217 * march <4>: i386 and x86-64 Options.
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.
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.
49234 * max-vect-align: Adapteva Epiphany Options.
49236 * mb: SH Options. (line 74)
49237 * mbackchain: S/390 and zSeries Options.
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.
49246 * mbig-endian <1>: RS/6000 and PowerPC Options.
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.
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.
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.
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.
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.
49288 * mcall-freebsd: RS/6000 and PowerPC Options.
49290 * mcall-linux: RS/6000 and PowerPC Options.
49292 * mcall-netbsd: RS/6000 and PowerPC Options.
49294 * mcall-prologues: AVR Options. (line 159)
49295 * mcall-sysv: RS/6000 and PowerPC Options.
49297 * mcall-sysv-eabi: RS/6000 and PowerPC Options.
49299 * mcall-sysv-noeabi: RS/6000 and PowerPC Options.
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.
49312 * mclip: MeP Options. (line 35)
49313 * mcmodel: SPARC Options. (line 250)
49314 * mcmodel=kernel: i386 and x86-64 Options.
49316 * mcmodel=large <1>: TILE-Gx Options. (line 14)
49317 * mcmodel=large <2>: RS/6000 and PowerPC Options.
49319 * mcmodel=large <3>: i386 and x86-64 Options.
49321 * mcmodel=large: AArch64 Options. (line 33)
49322 * mcmodel=medium <1>: RS/6000 and PowerPC Options.
49324 * mcmodel=medium: i386 and x86-64 Options.
49326 * mcmodel=small <1>: TILE-Gx Options. (line 9)
49327 * mcmodel=small <2>: RS/6000 and PowerPC Options.
49329 * mcmodel=small <3>: i386 and x86-64 Options.
49331 * mcmodel=small: AArch64 Options. (line 27)
49332 * mcmodel=tiny: AArch64 Options. (line 20)
49333 * mcmove: Adapteva Epiphany Options.
49335 * mcmpb: RS/6000 and PowerPC Options.
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.
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.
49357 * mcpu <5>: picoChip Options. (line 9)
49358 * mcpu <6>: M680x0 Options. (line 28)
49359 * mcpu <7>: i386 and x86-64 Options.
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.
49374 * mcsync-anomaly: Blackfin Options. (line 60)
49375 * mcx16: i386 and x86-64 Options.
49377 * MD: Preprocessor Options.
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.
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.
49401 * mdlmzb: RS/6000 and PowerPC Options.
49403 * mdmx: MIPS Options. (line 290)
49404 * mdouble: FRV Options. (line 38)
49405 * mdouble-float <1>: RS/6000 and PowerPC Options.
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.
49415 * mea32: SPU Options. (line 55)
49416 * mea64: SPU Options. (line 55)
49417 * meabi: RS/6000 and PowerPC Options.
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.
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.
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.
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.
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.
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.
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.
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.
49498 * mfpu <1>: SPARC Options. (line 33)
49499 * mfpu <2>: RS/6000 and PowerPC Options.
49501 * mfpu <3>: PDP-11 Options. (line 9)
49502 * mfpu: ARM Options. (line 143)
49503 * mfriz: RS/6000 and PowerPC Options.
49505 * mfsca: SH Options. (line 428)
49506 * mfsrra: SH Options. (line 437)
49507 * mfull-toc: RS/6000 and PowerPC Options.
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.
49513 * mfused-madd <4>: RS/6000 and PowerPC Options.
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.
49520 * mgas: HPPA Options. (line 74)
49521 * mgcc-abi: V850 Options. (line 148)
49522 * mgen-cell-microcode: RS/6000 and PowerPC Options.
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.
49542 * mhard-dfp <1>: S/390 and zSeries Options.
49544 * mhard-dfp: RS/6000 and PowerPC Options.
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.
49550 * mhard-float <4>: RS/6000 and PowerPC Options.
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.
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.
49574 * mindexed-addressing: SH Options. (line 350)
49575 * minline-all-stringops: i386 and x86-64 Options.
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.
49588 * minsert-sched-nops: RS/6000 and PowerPC Options.
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.
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.
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.
49633 * mlittle-endian <1>: RS/6000 and PowerPC Options.
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.
49652 * mlong-double-128: S/390 and zSeries Options.
49654 * mlong-double-64 <1>: S/390 and zSeries Options.
49656 * mlong-double-64: i386 and x86-64 Options.
49658 * mlong-double-80: i386 and x86-64 Options.
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.
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.
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.
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.
49692 * mmfpgpr: RS/6000 and PowerPC Options.
49694 * mminimal-toc: RS/6000 and PowerPC Options.
49696 * mminmax: MeP Options. (line 87)
49697 * mmmx: i386 and x86-64 Options.
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.
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.
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.
49716 * mmvcle: S/390 and zSeries Options.
49718 * mmvme: RS/6000 and PowerPC Options.
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.
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.
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.
49737 * mno-altivec: RS/6000 and PowerPC Options.
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.
49746 * mno-backchain: S/390 and zSeries Options.
49748 * mno-base-addresses: MMIX Options. (line 54)
49749 * mno-bit-align: RS/6000 and PowerPC Options.
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.
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.
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.
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.
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.
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.
49810 * mno-fp-regs: DEC Alpha Options. (line 25)
49811 * mno-fp-ret-in-387: i386 and x86-64 Options.
49813 * mno-fprnd: RS/6000 and PowerPC Options.
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.
49822 * mno-fused-madd <4>: RS/6000 and PowerPC Options.
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.
49832 * mno-hard-dfp: RS/6000 and PowerPC Options.
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.
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.
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.
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.
49873 * mno-mfpgpr: RS/6000 and PowerPC Options.
49875 * mno-mips16: MIPS Options. (line 103)
49876 * mno-mips3d: MIPS Options. (line 296)
49877 * mno-mmx: i386 and x86-64 Options.
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.
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.
49888 * mno-mvcle: S/390 and zSeries Options.
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.
49897 * mno-paired: RS/6000 and PowerPC Options.
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.
49906 * mno-popcntd: RS/6000 and PowerPC Options.
49908 * mno-postinc: Adapteva Epiphany Options.
49910 * mno-postmodify: Adapteva Epiphany Options.
49912 * mno-powerpc-gfxopt: RS/6000 and PowerPC Options.
49914 * mno-powerpc-gpopt: RS/6000 and PowerPC Options.
49916 * mno-powerpc64: RS/6000 and PowerPC Options.
49918 * mno-prolog-function: V850 Options. (line 23)
49919 * mno-prologue-epilogue: CRIS Options. (line 71)
49920 * mno-prototype: RS/6000 and PowerPC Options.
49922 * mno-push-args: i386 and x86-64 Options.
49924 * mno-red-zone: i386 and x86-64 Options.
49926 * mno-register-names: IA-64 Options. (line 37)
49927 * mno-regnames: RS/6000 and PowerPC Options.
49929 * mno-relax: V850 Options. (line 103)
49930 * mno-relax-immediate: MCore Options. (line 19)
49931 * mno-relocatable: RS/6000 and PowerPC Options.
49933 * mno-relocatable-lib: RS/6000 and PowerPC Options.
49935 * mno-round-nearest: Adapteva Epiphany Options.
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.
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.
49961 * mno-smartmips: MIPS Options. (line 280)
49962 * mno-soft-cmpsf: Adapteva Epiphany Options.
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.
49968 * mno-specld-anomaly: Blackfin Options. (line 56)
49969 * mno-split-addresses: MIPS Options. (line 426)
49970 * mno-sse: i386 and x86-64 Options.
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.
49976 * mno-strict-align: M680x0 Options. (line 287)
49977 * mno-string: RS/6000 and PowerPC Options.
49979 * mno-sum-in-toc: RS/6000 and PowerPC Options.
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.
49986 * mno-toc: RS/6000 and PowerPC Options.
49988 * mno-toplevel-symbols: MMIX Options. (line 40)
49989 * mno-tpf-trace: S/390 and zSeries Options.
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.
49996 * mno-v8plus: SPARC Options. (line 187)
49997 * mno-vect-double: Adapteva Epiphany Options.
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.
50006 * mno-vsx: RS/6000 and PowerPC Options.
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.
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.
50022 * mnops: Adapteva Epiphany Options.
50024 * mnosetlb: MN10300 Options. (line 69)
50025 * mnosplit-lohi: Adapteva Epiphany Options.
50027 * momit-leaf-frame-pointer <1>: i386 and x86-64 Options.
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.
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.
50041 * mpadstruct: SH Options. (line 140)
50042 * mpaired: RS/6000 and PowerPC Options.
50044 * mpaired-single: MIPS Options. (line 284)
50045 * mpc32: i386 and x86-64 Options.
50047 * mpc64: i386 and x86-64 Options.
50049 * mpc80: i386 and x86-64 Options.
50051 * mpcrel: M680x0 Options. (line 279)
50052 * mpdebug: CRIS Options. (line 35)
50053 * mpe: RS/6000 and PowerPC Options.
50055 * mpe-aligned-commons: i386 and x86-64 Windows Options.
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.
50062 * mpoke-function-name: ARM Options. (line 222)
50063 * mpopc: SPARC Options. (line 223)
50064 * mpopcntb: RS/6000 and PowerPC Options.
50066 * mpopcntd: RS/6000 and PowerPC Options.
50068 * mportable-runtime: HPPA Options. (line 70)
50069 * mpowerpc-gfxopt: RS/6000 and PowerPC Options.
50071 * mpowerpc-gpopt: RS/6000 and PowerPC Options.
50073 * mpowerpc64: RS/6000 and PowerPC Options.
50075 * mprefer-avx128: i386 and x86-64 Options.
50077 * mprefer-short-insn-regs: Adapteva Epiphany Options.
50079 * mprefergot: SH Options. (line 225)
50080 * mpreferred-stack-boundary: i386 and x86-64 Options.
50082 * mpretend-cmove: SH Options. (line 446)
50083 * mprioritize-restricted-insns: RS/6000 and PowerPC Options.
50085 * mprolog-function: V850 Options. (line 23)
50086 * mprologue-epilogue: CRIS Options. (line 71)
50087 * mprototype: RS/6000 and PowerPC Options.
50089 * mpt-fixed: SH Options. (line 364)
50090 * mpush-args: i386 and x86-64 Options.
50092 * MQ: Preprocessor Options.
50094 * mr10k-cache-barrier: MIPS Options. (line 564)
50095 * mrecip <1>: RS/6000 and PowerPC Options.
50097 * mrecip: i386 and x86-64 Options.
50099 * mrecip-precision: RS/6000 and PowerPC Options.
50101 * mrecip=opt <1>: RS/6000 and PowerPC Options.
50103 * mrecip=opt: i386 and x86-64 Options.
50105 * mregister-names: IA-64 Options. (line 37)
50106 * mregnames: RS/6000 and PowerPC Options.
50108 * mregparm: i386 and x86-64 Options.
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.
50120 * mrelocatable-lib: RS/6000 and PowerPC Options.
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.
50127 * mrtd <2>: M680x0 Options. (line 240)
50128 * mrtd: i386 and x86-64 Options.
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.
50138 * msatur: MeP Options. (line 105)
50139 * msave-acc-in-interrupts: RX Options. (line 109)
50140 * msave-toc-indirect: RS/6000 and PowerPC Options.
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.
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.
50167 * msdata: IA-64 Options. (line 42)
50168 * msdata=all: C6X Options. (line 30)
50169 * msdata=data: RS/6000 and PowerPC Options.
50171 * msdata=default <1>: RS/6000 and PowerPC Options.
50173 * msdata=default: C6X Options. (line 22)
50174 * msdata=eabi: RS/6000 and PowerPC Options.
50176 * msdata=none <1>: RS/6000 and PowerPC Options.
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.
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.
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.
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.
50208 * msingle-exit: MMIX Options. (line 66)
50209 * msingle-float <1>: RS/6000 and PowerPC Options.
50211 * msingle-float: MIPS Options. (line 244)
50212 * msingle-pic-base <1>: RS/6000 and PowerPC Options.
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.
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.
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.
50232 * msoft-float <4>: RS/6000 and PowerPC Options.
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.
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.
50249 * mspecld-anomaly: Blackfin Options. (line 51)
50250 * msplit-addresses: MIPS Options. (line 426)
50251 * msplit-vecmove-early: Adapteva Epiphany Options.
50253 * msse: i386 and x86-64 Options.
50255 * msse2avx: i386 and x86-64 Options.
50257 * msseregparm: i386 and x86-64 Options.
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.
50264 * mstack-increment: MCore Options. (line 50)
50265 * mstack-offset: Adapteva Epiphany Options.
50267 * mstack-size: S/390 and zSeries Options.
50269 * mstackrealign: i386 and x86-64 Options.
50271 * mstdmain: SPU Options. (line 40)
50272 * mstrict-align <1>: RS/6000 and PowerPC Options.
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.
50279 * mstringop-strategy=ALG: i386 and x86-64 Options.
50281 * mstructure-size-boundary: ARM Options. (line 169)
50282 * msvr4-struct-return: RS/6000 and PowerPC Options.
50284 * msym32: MIPS Options. (line 323)
50285 * msynci: MIPS Options. (line 674)
50286 * MT: Preprocessor Options.
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.
50295 * mthreads: i386 and x86-64 Options.
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.
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.
50310 * mtls-markers: RS/6000 and PowerPC Options.
50312 * mtls-size: IA-64 Options. (line 112)
50313 * mtoc: RS/6000 and PowerPC Options.
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.
50322 * mtrap-precision: DEC Alpha Options. (line 109)
50323 * mtune <1>: SPARC Options. (line 173)
50324 * mtune <2>: S/390 and zSeries Options.
50326 * mtune <3>: RS/6000 and PowerPC Options.
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.
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.
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.
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.
50369 * mveclibabi: i386 and x86-64 Options.
50371 * mvect8-ret-in-mem: i386 and x86-64 Options.
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.
50382 * mvsx: RS/6000 and PowerPC Options.
50384 * mvxworks: RS/6000 and PowerPC Options.
50386 * mvzeroupper: i386 and x86-64 Options.
50388 * mwarn-cell-microcode: RS/6000 and PowerPC Options.
50390 * mwarn-dynamicstack: S/390 and zSeries Options.
50392 * mwarn-framesize: S/390 and zSeries Options.
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.
50399 * mwindows: i386 and x86-64 Windows Options.
50401 * mword-relocations: ARM Options. (line 296)
50402 * mwords-little-endian: ARM Options. (line 66)
50403 * mx32: i386 and x86-64 Options.
50405 * mxgot <1>: MIPS Options. (line 192)
50406 * mxgot: M680x0 Options. (line 319)
50407 * mxilinx-fpu: RS/6000 and PowerPC Options.
50409 * mxl-barrel-shift: MicroBlaze Options. (line 33)
50410 * mxl-compat: RS/6000 and PowerPC Options.
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.
50423 * mzarch: S/390 and zSeries Options.
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.
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.
50446 * nostdinc++ <1>: Preprocessor Options.
50448 * nostdinc++: C++ Dialect Options.
50450 * nostdlib: Link Options. (line 74)
50451 * o: Preprocessor Options.
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.
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.
50470 * pedantic <2>: Alternate Keywords. (line 30)
50471 * pedantic <3>: C Extensions. (line 6)
50472 * pedantic <4>: Preprocessor Options.
50474 * pedantic <5>: Warning Options. (line 73)
50475 * pedantic: Standards. (line 16)
50476 * pedantic-errors <1>: Warnings and Errors.
50478 * pedantic-errors <2>: Non-bugs. (line 216)
50479 * pedantic-errors <3>: Preprocessor Options.
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.
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.
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.
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.
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.
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.
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.
50563 * traditional-cpp: C Dialect Options. (line 309)
50564 * trigraphs <1>: Preprocessor Options.
50566 * trigraphs: C Dialect Options. (line 304)
50567 * twolevel_namespace: Darwin Options. (line 196)
50568 * u: Link Options. (line 231)
50569 * U: Preprocessor Options.
50571 * umbrella: Darwin Options. (line 196)
50572 * undef: Preprocessor Options.
50574 * undefined: Darwin Options. (line 196)
50575 * unexported_symbols_list: Darwin Options. (line 196)
50576 * v <1>: Preprocessor Options.
50578 * v: Overall Options. (line 203)
50579 * version <1>: Preprocessor Options.
50581 * version: Overall Options. (line 338)
50582 * W: Incompatibilities. (line 64)
50583 * w: Preprocessor Options.
50585 * W: Warning Options. (line 168)
50586 * w: Warning Options. (line 25)
50587 * Wa: Assembler Options. (line 9)
50588 * Wabi: C++ Dialect Options.
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.
50597 * Wall: Warning Options. (line 119)
50598 * Warray-bounds: Warning Options. (line 833)
50599 * Wassign-intercept: Objective-C and Objective-C++ Dialect Options.
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.
50610 * Wcomment: Warning Options. (line 212)
50611 * Wcomments: Preprocessor Options.
50613 * Wconversion: Warning Options. (line 1106)
50614 * Wconversion-null: Warning Options. (line 1124)
50615 * Wctor-dtor-privacy: C++ Dialect Options.
50617 * Wdeclaration-after-statement: Warning Options. (line 966)
50618 * Wdelete-non-virtual-dtor: C++ Dialect Options.
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.
50628 * Wempty-body: Warning Options. (line 1135)
50629 * Wendif-labels <1>: Preprocessor Options.
50631 * Wendif-labels: Warning Options. (line 976)
50632 * Wenum-compare: Warning Options. (line 1139)
50633 * Werror <1>: Preprocessor Options.
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.
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.
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.
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.
50687 * Wnested-externs: Warning Options. (line 1393)
50688 * Wno-abi: C++ Dialect Options.
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.
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.
50710 * Wno-declaration-after-statement: Warning Options. (line 966)
50711 * Wno-delete-non-virtual-dtor: C++ Dialect Options.
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.
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.
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.
50764 * Wno-nested-externs: Warning Options. (line 1393)
50765 * Wno-noexcept: C++ Dialect Options.
50767 * Wno-non-template-friend: C++ Dialect Options.
50769 * Wno-non-virtual-dtor: C++ Dialect Options.
50771 * Wno-nonnull: Warning Options. (line 341)
50772 * Wno-old-style-cast: C++ Dialect Options.
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.
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.
50788 * Wno-pmf-conversions: C++ Dialect Options.
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.
50796 * Wno-redundant-decls: Warning Options. (line 1388)
50797 * Wno-reorder: C++ Dialect Options.
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.
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.
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.
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.
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.
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.
50859 * Wnon-template-friend: C++ Dialect Options.
50861 * Wnon-virtual-dtor: C++ Dialect Options.
50863 * Wnonnull: Warning Options. (line 341)
50864 * Wnormalized=: Warning Options. (line 1284)
50865 * Wold-style-cast: C++ Dialect Options.
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.
50873 * Woverride-init: Warning Options. (line 1339)
50874 * Wp: Preprocessor Options.
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.
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.
50891 * wrapper: Overall Options. (line 341)
50892 * Wredundant-decls: Warning Options. (line 1388)
50893 * Wreorder: C++ Dialect Options.
50895 * Wreturn-local-addr: Warning Options. (line 504)
50896 * Wreturn-type: Warning Options. (line 508)
50897 * Wselector: Objective-C and Objective-C++ Dialect Options.
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.
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.
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.
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.
50927 * Wsystem-headers: Warning Options. (line 843)
50928 * Wtraditional <1>: Preprocessor Options.
50930 * Wtraditional: Warning Options. (line 880)
50931 * Wtraditional-conversion: Warning Options. (line 958)
50932 * Wtrampolines: Warning Options. (line 854)
50933 * Wtrigraphs <1>: Preprocessor Options.
50935 * Wtrigraphs: Warning Options. (line 548)
50936 * Wtype-limits: Warning Options. (line 1044)
50937 * Wundeclared-selector: Objective-C and Objective-C++ Dialect Options.
50939 * Wundef <1>: Preprocessor Options.
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.
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.
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.
50976 * Ym: System V Options. (line 26)
50977 * YP: System V Options. (line 22)
50980 File: gcc.info, Node: Keyword Index, Prev: Option Index, Up: Top
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.
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.
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.
51052 * __builtin___memcpy_chk: Object Size Checking.
51054 * __builtin___memmove_chk: Object Size Checking.
51056 * __builtin___mempcpy_chk: Object Size Checking.
51058 * __builtin___memset_chk: Object Size Checking.
51060 * __builtin___printf_chk: Object Size Checking.
51062 * __builtin___snprintf_chk: Object Size Checking.
51064 * __builtin___sprintf_chk: Object Size Checking.
51066 * __builtin___stpcpy_chk: Object Size Checking.
51068 * __builtin___strcat_chk: Object Size Checking.
51070 * __builtin___strcpy_chk: Object Size Checking.
51072 * __builtin___strncat_chk: Object Size Checking.
51074 * __builtin___strncpy_chk: Object Size Checking.
51076 * __builtin___vfprintf_chk: Object Size Checking.
51078 * __builtin___vprintf_chk: Object Size Checking.
51080 * __builtin___vsnprintf_chk: Object Size Checking.
51082 * __builtin___vsprintf_chk: Object Size Checking.
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.
51100 * __builtin_cpu_is: X86 Built-in Functions.
51102 * __builtin_cpu_supports: X86 Built-in Functions.
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.
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.
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.
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.
51166 * __builtin_rx_clrpsw: RX Built-in Functions.
51168 * __builtin_rx_int: RX Built-in Functions.
51170 * __builtin_rx_machi: RX Built-in Functions.
51172 * __builtin_rx_maclo: RX Built-in Functions.
51174 * __builtin_rx_mulhi: RX Built-in Functions.
51176 * __builtin_rx_mullo: RX Built-in Functions.
51178 * __builtin_rx_mvfachi: RX Built-in Functions.
51180 * __builtin_rx_mvfacmi: RX Built-in Functions.
51182 * __builtin_rx_mvfc: RX Built-in Functions.
51184 * __builtin_rx_mvtachi: RX Built-in Functions.
51186 * __builtin_rx_mvtaclo: RX Built-in Functions.
51188 * __builtin_rx_mvtc: RX Built-in Functions.
51190 * __builtin_rx_mvtipl: RX Built-in Functions.
51192 * __builtin_rx_racw: RX Built-in Functions.
51194 * __builtin_rx_revw: RX Built-in Functions.
51196 * __builtin_rx_rmpa: RX Built-in Functions.
51198 * __builtin_rx_round: RX Built-in Functions.
51200 * __builtin_rx_sat: RX Built-in Functions.
51202 * __builtin_rx_setpsw: RX Built-in Functions.
51204 * __builtin_rx_wait: RX Built-in Functions.
51206 * __builtin_set_thread_pointer: SH Built-in Functions.
51208 * __builtin_thread_pointer: SH Built-in Functions.
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.
51218 * __declspec(dllimport): Function Attributes.
51220 * __ea SPU Named Address Spaces: Named Address Spaces.
51222 * __extension__: Alternate Keywords. (line 30)
51223 * __far M32C Named Address Spaces: Named Address Spaces.
51225 * __far RL78 Named Address Spaces: Named Address Spaces.
51227 * __flash AVR Named Address Spaces: Named Address Spaces.
51229 * __flash1 AVR Named Address Spaces: Named Address Spaces.
51231 * __flash2 AVR Named Address Spaces: Named Address Spaces.
51233 * __flash3 AVR Named Address Spaces: Named Address Spaces.
51235 * __flash4 AVR Named Address Spaces: Named Address Spaces.
51237 * __flash5 AVR Named Address Spaces: Named Address Spaces.
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.
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.
51280 * _xbegin: X86 transactional memory intrinsics.
51282 * _xend: X86 transactional memory intrinsics.
51284 * _xtest: X86 transactional memory intrinsics.
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.
51306 * aligned attribute <1>: Type Attributes. (line 31)
51307 * aligned attribute <2>: Variable Attributes.
51309 * aligned attribute: Function Attributes.
51311 * alignment: Alignment. (line 6)
51312 * alloc_size attribute: Function Attributes.
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.
51318 * alternate keywords: Alternate Keywords. (line 6)
51319 * always_inline function attribute: Function Attributes.
51321 * AMD x86-64 Options: i386 and x86-64 Options.
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.
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.
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.
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.
51368 * base class members: Name lookup. (line 6)
51369 * bcmp: Other Builtins. (line 6)
51370 * below100 attribute: Variable Attributes.
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.
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.
51399 * C++ options, command-line: C++ Dialect Options.
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.
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.
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.
51427 * calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes.
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.
51465 * character set, input: Preprocessor Options.
51467 * character set, input normalization: Warning Options. (line 1284)
51468 * character set, wide execution: Preprocessor Options.
51470 * cimag: Other Builtins. (line 6)
51471 * cimagf: Other Builtins. (line 6)
51472 * cimagl: Other Builtins. (line 6)
51473 * cleanup attribute: Variable Attributes.
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.
51483 * cold label attribute: Function Attributes.
51485 * command options: Invoking GCC. (line 6)
51486 * comments, C++ style: C++ Comments. (line 6)
51487 * common attribute: Variable Attributes.
51489 * comparison of signed and unsigned values, warning: Warning Options.
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.
51495 * compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
51497 * compiler version, specifying: Target Options. (line 6)
51498 * COMPILER_PATH: Environment Variables.
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.
51511 * const function attribute: Function Attributes.
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.
51519 * constructing calls: Constructing Calls. (line 6)
51520 * constructor expressions: Compound Literals. (line 6)
51521 * constructor function attribute: Function Attributes.
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.
51536 * CPLUS_INCLUDE_PATH: Environment Variables.
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.
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.
51581 * dependencies, make: Preprocessor Options.
51583 * DEPENDENCIES_OUTPUT: Environment Variables.
51585 * dependent name lookup: Name lookup. (line 6)
51586 * deprecated attribute: Variable Attributes.
51588 * deprecated attribute.: Function Attributes.
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.
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.
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.
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.
51617 * EIND: AVR Options. (line 224)
51618 * empty structures: Empty Structures. (line 6)
51619 * environment variables: Environment Variables.
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.
51629 * error messages: Warnings and Errors.
51631 * escaped newlines: Escaped Newlines. (line 6)
51632 * exception handler functions on the Blackfin processor: Function Attributes.
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.
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.
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.
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.
51696 * format function attribute: Function Attributes.
51698 * format_arg function attribute: Function Attributes.
51700 * Fortran: G++ and GCC. (line 6)
51701 * forwarder_section attribute: Function Attributes.
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.
51719 * function attributes: Function Attributes.
51721 * function pointers, arithmetic: Pointer Arith. (line 6)
51722 * function prototype declarations: Function Prototypes.
51724 * function versions: Function Multiversioning.
51726 * function without a prologue/epilogue code: Function Attributes.
51728 * function, size of pointer to: Pointer Arith. (line 6)
51729 * functions called via pointer on the RS/6000 and PowerPC: Function Attributes.
51731 * functions in arbitrary sections: Function Attributes.
51733 * functions that are dynamically resolved: Function Attributes.
51735 * functions that are passed arguments in registers on the 386: Function Attributes.
51737 * functions that behave like malloc: Function Attributes.
51739 * functions that do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
51741 * functions that do not pop the argument stack on the 386: Function Attributes.
51743 * functions that do pop the argument stack on the 386: Function Attributes.
51745 * functions that handle memory bank switching: Function Attributes.
51747 * functions that have different compilation options on the 386: Function Attributes.
51749 * functions that have different optimization options: Function Attributes.
51751 * functions that have no side effects: Function Attributes.
51753 * functions that never return: Function Attributes.
51755 * functions that pop the argument stack on the 386: Function Attributes.
51757 * functions that return more than once: Function Attributes.
51759 * functions with non-null pointer arguments: Function Attributes.
51761 * functions with printf, scanf, strftime or strfmon style arguments: Function Attributes.
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.
51777 * GCC_EXEC_PREFIX: Environment Variables.
51779 * gcc_struct: Type Attributes. (line 324)
51780 * gcc_struct attribute: Variable Attributes.
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.
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.
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.
51808 * hot label attribute: Function Attributes.
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.
51820 * i386 Options: i386 and x86-64 Options.
51822 * IA-64 Options: IA-64 Options. (line 6)
51823 * IBM RS/6000 and PowerPC Options: RS/6000 and PowerPC Options.
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.
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.
51835 * implementation-defined behavior, C++ language: C++ Implementation.
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.
51843 * indirect calls on MIPS: Function Attributes.
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.
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.
51861 * interrupt handler functions on the AVR processors: Function Attributes.
51863 * interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes.
51865 * interrupt service routines on ARM: Function Attributes.
51867 * interrupt thread functions on fido: Function Attributes.
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.
51925 * keywords, alternate: Alternate Keywords. (line 6)
51926 * known causes of trouble: Trouble. (line 6)
51927 * l1_data variable attribute: Variable Attributes.
51929 * l1_data_A variable attribute: Variable Attributes.
51931 * l1_data_B variable attribute: Variable Attributes.
51933 * l1_text function attribute: Function Attributes.
51935 * l2 function attribute: Function Attributes.
51937 * l2 variable attribute: Variable Attributes.
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.
51944 * language dialect options: C Dialect Options. (line 6)
51945 * LC_ALL: Environment Variables.
51947 * LC_CTYPE: Environment Variables.
51949 * LC_MESSAGES: Environment Variables.
51951 * ldexp: Other Builtins. (line 6)
51952 * ldexpf: Other Builtins. (line 6)
51953 * ldexpl: Other Builtins. (line 6)
51954 * leaf function attribute: Function Attributes.
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.
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.
51989 * locale definition: Environment Variables.
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.
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.
52034 * malloc: Other Builtins. (line 6)
52035 * malloc attribute: Function Attributes.
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.
52050 * messages, warning: Warning Options. (line 6)
52051 * messages, warning and error: Warnings and Errors.
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.
52058 * misunderstandings in C++: C++ Misunderstandings.
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.
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.
52073 * ms_hook_prologue attribute: Function Attributes.
52075 * ms_struct: Type Attributes. (line 324)
52076 * ms_struct attribute: Variable Attributes.
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.
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.
52101 * no_instrument_function function attribute: Function Attributes.
52103 * no_sanitize_address function attribute: Function Attributes.
52105 * no_split_stack function attribute: Function Attributes.
52107 * noclone function attribute: Function Attributes.
52109 * nocommon attribute: Variable Attributes.
52111 * noinline function attribute: Function Attributes.
52113 * nomips16 attribute: Function Attributes.
52115 * non-constant initializers: Initializers. (line 6)
52116 * non-static inline function: Inline. (line 85)
52117 * nonnull function attribute: Function Attributes.
52119 * noreturn function attribute: Function Attributes.
52121 * nosave_low_regs attribute: Function Attributes.
52123 * nothrow function attribute: Function Attributes.
52125 * o in constraint: Simple Constraints. (line 23)
52126 * OBJC_INCLUDE_PATH: Environment Variables.
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.
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.
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.
52143 * optimize options: Optimize Options. (line 6)
52144 * options to control diagnostics formatting: Language Independent Options.
52146 * options to control warnings: Warning Options. (line 6)
52147 * options, C++: C++ Dialect Options.
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.
52158 * options, optimization: Optimize Options. (line 6)
52159 * options, order: Invoking GCC. (line 30)
52160 * options, preprocessor: Preprocessor Options.
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.
52166 * OS_task AVR function attribute: Function Attributes.
52168 * other register constraints: Simple Constraints. (line 163)
52169 * output file option: Overall Options. (line 191)
52170 * overloaded virtual function, warning: C++ Dialect Options.
52172 * p in constraint: Simple Constraints. (line 154)
52173 * packed attribute: Variable Attributes.
52175 * parameter forward declaration: Variable Length. (line 59)
52176 * Pascal: G++ and GCC. (line 23)
52177 * pcs function attribute: Function Attributes.
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.
52184 * pointer arguments: Function Attributes.
52186 * pointer to member function: Bound member functions.
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.
52198 * pragma GCC pop_options: Function Specific Option Pragmas.
52200 * pragma GCC push_options: Function Specific Option Pragmas.
52202 * pragma GCC reset_options: Function Specific Option Pragmas.
52204 * pragma GCC target: Function Specific Option Pragmas.
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.
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.
52227 * pragma, push_macro: Push/Pop Macro Pragmas.
52229 * pragma, reason for not using: Function Attributes.
52231 * pragma, redefine_extname: Symbol-Renaming Pragmas.
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.
52243 * preprocessing numbers: Incompatibilities. (line 173)
52244 * preprocessing tokens: Incompatibilities. (line 173)
52245 * preprocessor options: Preprocessor Options.
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.
52252 * promotion of formal parameters: Function Prototypes.
52254 * pure function attribute: Function Attributes.
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.
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.
52290 * reordering, warning: C++ Dialect Options.
52292 * reporting bugs: Bugs. (line 6)
52293 * resbank attribute: Function Attributes.
52295 * rest argument (in macro): Variadic Macros. (line 6)
52296 * restricted pointers: Restricted Pointers.
52298 * restricted references: Restricted Pointers.
52300 * restricted this pointer: Restricted Pointers.
52302 * returns_twice attribute: Function Attributes.
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.
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.
52320 * save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes.
52322 * save volatile registers on the MicroBlaze: Function Attributes.
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.
52340 * section variable attribute: Variable Attributes.
52342 * sentinel function attribute: Function Attributes.
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.
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.
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.
52377 * snprintf: Other Builtins. (line 6)
52378 * Solaris 2 options: Solaris 2 Options. (line 6)
52379 * sp_switch attribute: Function Attributes.
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.
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.
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.
52400 * statements inside expressions: Statement Exprs. (line 6)
52401 * static data in C++, declaring and defining: Static Definitions.
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.
52434 * suppressing warnings: Warning Options. (line 6)
52435 * surprises in C++: C++ Misunderstandings.
52437 * syntax checking: Warning Options. (line 13)
52438 * syscall_linkage attribute: Function Attributes.
52440 * system headers, warnings from: Warning Options. (line 843)
52441 * sysv_abi attribute: Function Attributes.
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.
52451 * target machine, specifying: Target Options. (line 6)
52452 * target options: Target Options. (line 6)
52453 * target("abm") attribute: Function Attributes.
52455 * target("aes") attribute: Function Attributes.
52457 * target("align-stringops") attribute: Function Attributes.
52459 * target("altivec") attribute: Function Attributes.
52461 * target("arch=ARCH") attribute: Function Attributes.
52463 * target("avoid-indexed-addresses") attribute: Function Attributes.
52465 * target("cld") attribute: Function Attributes.
52467 * target("cmpb") attribute: Function Attributes.
52469 * target("cpu=CPU") attribute: Function Attributes.
52471 * target("default") attribute: Function Attributes.
52473 * target("dlmzb") attribute: Function Attributes.
52475 * target("fancy-math-387") attribute: Function Attributes.
52477 * target("fma4") attribute: Function Attributes.
52479 * target("fpmath=FPMATH") attribute: Function Attributes.
52481 * target("fprnd") attribute: Function Attributes.
52483 * target("friz") attribute: Function Attributes.
52485 * target("fused-madd") attribute: Function Attributes.
52487 * target("hard-dfp") attribute: Function Attributes.
52489 * target("ieee-fp") attribute: Function Attributes.
52491 * target("inline-all-stringops") attribute: Function Attributes.
52493 * target("inline-stringops-dynamically") attribute: Function Attributes.
52495 * target("isel") attribute: Function Attributes.
52497 * target("longcall") attribute: Function Attributes.
52499 * target("lwp") attribute: Function Attributes.
52501 * target("mfcrf") attribute: Function Attributes.
52503 * target("mfpgpr") attribute: Function Attributes.
52505 * target("mmx") attribute: Function Attributes.
52507 * target("mulhw") attribute: Function Attributes.
52509 * target("multiple") attribute: Function Attributes.
52511 * target("paired") attribute: Function Attributes.
52513 * target("pclmul") attribute: Function Attributes.
52515 * target("popcnt") attribute: Function Attributes.
52517 * target("popcntb") attribute: Function Attributes.
52519 * target("popcntd") attribute: Function Attributes.
52521 * target("powerpc-gfxopt") attribute: Function Attributes.
52523 * target("powerpc-gpopt") attribute: Function Attributes.
52525 * target("recip") attribute: Function Attributes.
52527 * target("recip-precision") attribute: Function Attributes.
52529 * target("sse") attribute: Function Attributes.
52531 * target("sse2") attribute: Function Attributes.
52533 * target("sse3") attribute: Function Attributes.
52535 * target("sse4") attribute: Function Attributes.
52537 * target("sse4.1") attribute: Function Attributes.
52539 * target("sse4.2") attribute: Function Attributes.
52541 * target("sse4a") attribute: Function Attributes.
52543 * target("ssse3") attribute: Function Attributes.
52545 * target("string") attribute: Function Attributes.
52547 * target("tune=TUNE") attribute: Function Attributes.
52549 * target("update") attribute: Function Attributes.
52551 * target("vsx") attribute: Function Attributes.
52553 * target("xop") attribute: Function Attributes.
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.
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.
52574 * TLS: Thread-Local. (line 6)
52575 * tls_model attribute: Variable Attributes.
52577 * TMPDIR: Environment Variables.
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.
52587 * trapa_handler attribute: Function Attributes.
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.
52624 * UR fixed-suffix: Fixed-Point. (line 6)
52625 * ur fixed-suffix: Fixed-Point. (line 6)
52626 * use_debug_exception_return attribute: Function Attributes.
52628 * use_shadow_register_set attribute: Function Attributes.
52630 * used attribute.: Function Attributes.
52632 * User stack pointer in interrupts on the Blackfin: Function Attributes.
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.
52640 * variable addressability on the M32R/D: Variable Attributes.
52642 * variable alignment: Alignment. (line 6)
52643 * variable attributes: Variable Attributes.
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.
52654 * vfprintf: Other Builtins. (line 6)
52655 * vfscanf: Other Builtins. (line 6)
52656 * visibility attribute: Function Attributes.
52658 * VLAs: Variable Length. (line 6)
52659 * vliw attribute: Function Attributes.
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.
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.
52682 * warning for comparison of signed and unsigned values: Warning Options.
52684 * warning for overloaded virtual function: C++ Dialect Options.
52686 * warning for reordering of member initializers: C++ Dialect Options.
52688 * warning for unknown pragmas: Warning Options. (line 691)
52689 * warning function attribute: Function Attributes.
52691 * warning messages: Warning Options. (line 6)
52692 * warnings from system headers: Warning Options. (line 843)
52693 * warnings vs errors: Warnings and Errors.
52695 * weak attribute: Function Attributes.
52697 * weakref attribute: Function Attributes.
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.
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)
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