diff options
Diffstat (limited to 'gcc-4.9/gcc/doc/gcc.info')
-rw-r--r-- | gcc-4.9/gcc/doc/gcc.info | 56908 |
1 files changed, 0 insertions, 56908 deletions
diff --git a/gcc-4.9/gcc/doc/gcc.info b/gcc-4.9/gcc/doc/gcc.info deleted file mode 100644 index 29f054977..000000000 --- a/gcc-4.9/gcc/doc/gcc.info +++ /dev/null @@ -1,56908 +0,0 @@ -This is gcc.info, produced by makeinfo version 5.1 from gcc.texi. - -Copyright (C) 1988-2014 Free Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.3 or -any later version published by the Free Software Foundation; with the -Invariant Sections being "Funding Free Software", the Front-Cover Texts -being (a) (see below), and with the Back-Cover Texts being (b) (see -below). A copy of the license is included in the section entitled "GNU -Free Documentation License". - - (a) The FSF's Front-Cover Text is: - - A GNU Manual - - (b) The FSF's Back-Cover Text is: - - You have freedom to copy and modify this GNU Manual, like GNU software. -Copies published by the Free Software Foundation raise funds for GNU -development. -INFO-DIR-SECTION Software development -START-INFO-DIR-ENTRY -* gcc: (gcc). The GNU Compiler Collection. -* g++: (gcc). The GNU C++ compiler. -* gcov: (gcc) Gcov. 'gcov'--a test coverage program. -END-INFO-DIR-ENTRY - - This file documents the use of the GNU compilers. - - Copyright (C) 1988-2014 Free Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.3 or -any later version published by the Free Software Foundation; with the -Invariant Sections being "Funding Free Software", the Front-Cover Texts -being (a) (see below), and with the Back-Cover Texts being (b) (see -below). A copy of the license is included in the section entitled "GNU -Free Documentation License". - - (a) The FSF's Front-Cover Text is: - - A GNU Manual - - (b) The FSF's Back-Cover Text is: - - You have freedom to copy and modify this GNU Manual, like GNU software. -Copies published by the Free Software Foundation raise funds for GNU -development. - - -File: gcc.info, Node: Top, Next: G++ and GCC, Up: (DIR) - -Introduction -************ - -This manual documents how to use the GNU compilers, as well as their -features and incompatibilities, and how to report bugs. It corresponds -to the compilers (GCC) version 4.9.0. The internals of the GNU -compilers, including how to port them to new targets and some -information about how to write front ends for new languages, are -documented in a separate manual. *Note Introduction: (gccint)Top. - -* Menu: - -* G++ and GCC:: You can compile C or C++ programs. -* Standards:: Language standards supported by GCC. -* Invoking GCC:: Command options supported by 'gcc'. -* C Implementation:: How GCC implements the ISO C specification. -* C++ Implementation:: How GCC implements the ISO C++ specification. -* C Extensions:: GNU extensions to the C language family. -* C++ Extensions:: GNU extensions to the C++ language. -* Objective-C:: GNU Objective-C runtime features. -* Compatibility:: Binary Compatibility -* Gcov:: 'gcov'--a test coverage program. -* Trouble:: If you have trouble using GCC. -* Bugs:: How, why and where to report bugs. -* Service:: How To Get Help with GCC -* Contributing:: How to contribute to testing and developing GCC. - -* Funding:: How to help assure funding for free software. -* GNU Project:: The GNU Project and GNU/Linux. - -* Copying:: GNU General Public License says - how you can copy and share GCC. -* GNU Free Documentation License:: How you can copy and share this manual. -* Contributors:: People who have contributed to GCC. - -* Option Index:: Index to command line options. -* Keyword Index:: Index of concepts and symbol names. - - -File: gcc.info, Node: G++ and GCC, Next: Standards, Up: Top - -1 Programming Languages Supported by GCC -**************************************** - -GCC stands for "GNU Compiler Collection". GCC is an integrated -distribution of compilers for several major programming languages. -These languages currently include C, C++, Objective-C, Objective-C++, -Java, Fortran, Ada, and Go. - - The abbreviation "GCC" has multiple meanings in common use. The -current official meaning is "GNU Compiler Collection", which refers -generically to the complete suite of tools. The name historically stood -for "GNU C Compiler", and this usage is still common when the emphasis -is on compiling C programs. Finally, the name is also used when -speaking of the "language-independent" component of GCC: code shared -among the compilers for all supported languages. - - The language-independent component of GCC includes the majority of the -optimizers, as well as the "back ends" that generate machine code for -various processors. - - The part of a compiler that is specific to a particular language is -called the "front end". In addition to the front ends that are -integrated components of GCC, there are several other front ends that -are maintained separately. These support languages such as Pascal, -Mercury, and COBOL. To use these, they must be built together with GCC -proper. - - Most of the compilers for languages other than C have their own names. -The C++ compiler is G++, the Ada compiler is GNAT, and so on. When we -talk about compiling one of those languages, we might refer to that -compiler by its own name, or as GCC. Either is correct. - - Historically, compilers for many languages, including C++ and Fortran, -have been implemented as "preprocessors" which emit another high level -language such as C. None of the compilers included in GCC are -implemented this way; they all generate machine code directly. This -sort of preprocessor should not be confused with the "C preprocessor", -which is an integral feature of the C, C++, Objective-C and -Objective-C++ languages. - - -File: gcc.info, Node: Standards, Next: Invoking GCC, Prev: G++ and GCC, Up: Top - -2 Language Standards Supported by GCC -************************************* - -For each language compiled by GCC for which there is a standard, GCC -attempts to follow one or more versions of that standard, possibly with -some exceptions, and possibly with some extensions. - -2.1 C language -============== - -GCC supports three versions of the C standard, although support for the -most recent version is not yet complete. - - The original ANSI C standard (X3.159-1989) was ratified in 1989 and -published in 1990. This standard was ratified as an ISO standard -(ISO/IEC 9899:1990) later in 1990. There were no technical differences -between these publications, although the sections of the ANSI standard -were renumbered and became clauses in the ISO standard. This standard, -in both its forms, is commonly known as "C89", or occasionally as "C90", -from the dates of ratification. The ANSI standard, but not the ISO -standard, also came with a Rationale document. To select this standard -in GCC, use one of the options '-ansi', '-std=c90' or -'-std=iso9899:1990'; to obtain all the diagnostics required by the -standard, you should also specify '-pedantic' (or '-pedantic-errors' if -you want them to be errors rather than warnings). *Note Options -Controlling C Dialect: C Dialect Options. - - Errors in the 1990 ISO C standard were corrected in two Technical -Corrigenda published in 1994 and 1996. GCC does not support the -uncorrected version. - - An amendment to the 1990 standard was published in 1995. This -amendment added digraphs and '__STDC_VERSION__' to the language, but -otherwise concerned the library. This amendment is commonly known as -"AMD1"; the amended standard is sometimes known as "C94" or "C95". To -select this standard in GCC, use the option '-std=iso9899:199409' (with, -as for other standard versions, '-pedantic' to receive all required -diagnostics). - - A new edition of the ISO C standard was published in 1999 as ISO/IEC -9899:1999, and is commonly known as "C99". GCC has substantially -complete support for this standard version; see -<http://gcc.gnu.org/c99status.html> for details. To select this -standard, use '-std=c99' or '-std=iso9899:1999'. (While in development, -drafts of this standard version were referred to as "C9X".) - - Errors in the 1999 ISO C standard were corrected in three Technical -Corrigenda published in 2001, 2004 and 2007. GCC does not support the -uncorrected version. - - A fourth version of the C standard, known as "C11", was published in -2011 as ISO/IEC 9899:2011. GCC has substantially complete support for -this standard, enabled with '-std=c11' or '-std=iso9899:2011'. (While -in development, drafts of this standard version were referred to as -"C1X".) - - By default, GCC provides some extensions to the C language that on rare -occasions conflict with the C standard. *Note Extensions to the C -Language Family: C Extensions. Use of the '-std' options listed above -will disable these extensions where they conflict with the C standard -version selected. You may also select an extended version of the C -language explicitly with '-std=gnu90' (for C90 with GNU extensions), -'-std=gnu99' (for C99 with GNU extensions) or '-std=gnu11' (for C11 with -GNU extensions). The default, if no C language dialect options are -given, is '-std=gnu90'; this is intended to change to '-std=gnu11' in -some future release. Some features that are part of the C99 standard -are accepted as extensions in C90 mode, and some features that are part -of the C11 standard are accepted as extensions in C90 and C99 modes. - - The ISO C standard defines (in clause 4) two classes of conforming -implementation. A "conforming hosted implementation" supports the whole -standard including all the library facilities; a "conforming -freestanding implementation" is only required to provide certain library -facilities: those in '<float.h>', '<limits.h>', '<stdarg.h>', and -'<stddef.h>'; since AMD1, also those in '<iso646.h>'; since C99, also -those in '<stdbool.h>' and '<stdint.h>'; and since C11, also those in -'<stdalign.h>' and '<stdnoreturn.h>'. In addition, complex types, added -in C99, are not required for freestanding implementations. The standard -also defines two environments for programs, a "freestanding -environment", required of all implementations and which may not have -library facilities beyond those required of freestanding -implementations, where the handling of program startup and termination -are implementation-defined, and a "hosted environment", which is not -required, in which all the library facilities are provided and startup -is through a function 'int main (void)' or 'int main (int, char *[])'. -An OS kernel would be a freestanding environment; a program using the -facilities of an operating system would normally be in a hosted -implementation. - - GCC aims towards being usable as a conforming freestanding -implementation, or as the compiler for a conforming hosted -implementation. By default, it will act as the compiler for a hosted -implementation, defining '__STDC_HOSTED__' as '1' and presuming that -when the names of ISO C functions are used, they have the semantics -defined in the standard. To make it act as a conforming freestanding -implementation for a freestanding environment, use the option -'-ffreestanding'; it will then define '__STDC_HOSTED__' to '0' and not -make assumptions about the meanings of function names from the standard -library, with exceptions noted below. To build an OS kernel, you may -well still need to make your own arrangements for linking and startup. -*Note Options Controlling C Dialect: C Dialect Options. - - GCC does not provide the library facilities required only of hosted -implementations, nor yet all the facilities required by C99 of -freestanding implementations on all platforms; to use the facilities of -a hosted environment, you will need to find them elsewhere (for example, -in the GNU C library). *Note Standard Libraries: Standard Libraries. - - Most of the compiler support routines used by GCC are present in -'libgcc', but there are a few exceptions. GCC requires the freestanding -environment provide 'memcpy', 'memmove', 'memset' and 'memcmp'. -Finally, if '__builtin_trap' is used, and the target does not implement -the 'trap' pattern, then GCC will emit a call to 'abort'. - - For references to Technical Corrigenda, Rationale documents and -information concerning the history of C that is available online, see -<http://gcc.gnu.org/readings.html> - -2.2 C++ language -================ - -GCC supports the original ISO C++ standard (1998) and contains -experimental support for the second ISO C++ standard (2011). - - The original ISO C++ standard was published as the ISO standard -(ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in -2003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and -C++03, respectively. GCC implements the majority of C++98 ('export' is -a notable exception) and most of the changes in C++03. To select this -standard in GCC, use one of the options '-ansi', '-std=c++98', or -'-std=c++03'; to obtain all the diagnostics required by the standard, -you should also specify '-pedantic' (or '-pedantic-errors' if you want -them to be errors rather than warnings). - - A revised ISO C++ standard was published in 2011 as ISO/IEC 14882:2011, -and is referred to as C++11; before its publication it was commonly -referred to as C++0x. C++11 contains several changes to the C++ -language, most of which have been implemented in an experimental C++11 -mode in GCC. For information regarding the C++11 features available in -the experimental C++11 mode, see -<http://gcc.gnu.org/projects/cxx0x.html>. To select this standard in -GCC, use the option '-std=c++11'; to obtain all the diagnostics required -by the standard, you should also specify '-pedantic' (or -'-pedantic-errors' if you want them to be errors rather than warnings). - - More information about the C++ standards is available on the ISO C++ -committee's web site at <http://www.open-std.org/jtc1/sc22/wg21/>. - - By default, GCC provides some extensions to the C++ language; *Note -Options Controlling C++ Dialect: C++ Dialect Options. Use of the '-std' -option listed above will disable these extensions. You may also select -an extended version of the C++ language explicitly with '-std=gnu++98' -(for C++98 with GNU extensions) or '-std=gnu++11' (for C++11 with GNU -extensions). The default, if no C++ language dialect options are given, -is '-std=gnu++98'. - -2.3 Objective-C and Objective-C++ languages -=========================================== - -GCC supports "traditional" Objective-C (also known as "Objective-C 1.0") -and contains support for the Objective-C exception and synchronization -syntax. It has also support for a number of "Objective-C 2.0" language -extensions, including properties, fast enumeration (only for -Objective-C), method attributes and the @optional and @required keywords -in protocols. GCC supports Objective-C++ and features available in -Objective-C are also available in Objective-C++. - - GCC by default uses the GNU Objective-C runtime library, which is part -of GCC and is not the same as the Apple/NeXT Objective-C runtime library -used on Apple systems. There are a number of differences documented in -this manual. The options '-fgnu-runtime' and '-fnext-runtime' allow you -to switch between producing output that works with the GNU Objective-C -runtime library and output that works with the Apple/NeXT Objective-C -runtime library. - - There is no formal written standard for Objective-C or Objective-C++. -The authoritative manual on traditional Objective-C (1.0) is -"Object-Oriented Programming and the Objective-C Language", available at -a number of web sites: - * <http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf> - is the original NeXTstep document; - * <http://objc.toodarkpark.net> is the same document in another - format; - * - <http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/> - has an updated version but make sure you search for "Object - Oriented Programming and the Objective-C Programming Language 1.0", - not documentation on the newer "Objective-C 2.0" language - - The Objective-C exception and synchronization syntax (that is, the -keywords @try, @throw, @catch, @finally and @synchronized) is supported -by GCC and is enabled with the option '-fobjc-exceptions'. The syntax -is briefly documented in this manual and in the Objective-C 2.0 manuals -from Apple. - - The Objective-C 2.0 language extensions and features are automatically -enabled; they include properties (via the @property, @synthesize and -@dynamic keywords), fast enumeration (not available in Objective-C++), -attributes for methods (such as deprecated, noreturn, sentinel, format), -the unused attribute for method arguments, the @package keyword for -instance variables and the @optional and @required keywords in -protocols. You can disable all these Objective-C 2.0 language -extensions with the option '-fobjc-std=objc1', which causes the compiler -to recognize the same Objective-C language syntax recognized by GCC 4.0, -and to produce an error if one of the new features is used. - - GCC has currently no support for non-fragile instance variables. - - The authoritative manual on Objective-C 2.0 is available from Apple: - * - <http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/> - - For more information concerning the history of Objective-C that is -available online, see <http://gcc.gnu.org/readings.html> - -2.4 Go language -=============== - -As of the GCC 4.7.1 release, GCC supports the Go 1 language standard, -described at <http://golang.org/doc/go1.html>. - -2.5 References for other languages -================================== - -*Note GNAT Reference Manual: (gnat_rm)Top, for information on standard -conformance and compatibility of the Ada compiler. - - *Note Standards: (gfortran)Standards, for details of standards -supported by GNU Fortran. - - *Note Compatibility with the Java Platform: (gcj)Compatibility, for -details of compatibility between 'gcj' and the Java Platform. - - -File: gcc.info, Node: Invoking GCC, Next: C Implementation, Prev: Standards, Up: Top - -3 GCC Command Options -********************* - -When you invoke GCC, it normally does preprocessing, compilation, -assembly and linking. The "overall options" allow you to stop this -process at an intermediate stage. For example, the '-c' option says not -to run the linker. Then the output consists of object files output by -the assembler. - - Other options are passed on to one stage of processing. Some options -control the preprocessor and others the compiler itself. Yet other -options control the assembler and linker; most of these are not -documented here, since you rarely need to use any of them. - - Most of the command-line options that you can use with GCC are useful -for C programs; when an option is only useful with another language -(usually C++), the explanation says so explicitly. If the description -for a particular option does not mention a source language, you can use -that option with all supported languages. - - *Note Compiling C++ Programs: Invoking G++, for a summary of special -options for compiling C++ programs. - - The 'gcc' program accepts options and file names as operands. Many -options have multi-letter names; therefore multiple single-letter -options may _not_ be grouped: '-dv' is very different from '-d -v'. - - You can mix options and other arguments. For the most part, the order -you use doesn't matter. Order does matter when you use several options -of the same kind; for example, if you specify '-L' more than once, the -directories are searched in the order specified. Also, the placement of -the '-l' option is significant. - - Many options have long names starting with '-f' or with '-W'--for -example, '-fmove-loop-invariants', '-Wformat' and so on. Most of these -have both positive and negative forms; the negative form of '-ffoo' is -'-fno-foo'. This manual documents only one of these two forms, -whichever one is not the default. - - *Note Option Index::, for an index to GCC's options. - -* Menu: - -* Option Summary:: Brief list of all options, without explanations. -* Overall Options:: Controlling the kind of output: - an executable, object files, assembler files, - or preprocessed source. -* Invoking G++:: Compiling C++ programs. -* C Dialect Options:: Controlling the variant of C language compiled. -* C++ Dialect Options:: Variations on C++. -* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C - and Objective-C++. -* Language Independent Options:: Controlling how diagnostics should be - formatted. -* Warning Options:: How picky should the compiler be? -* Debugging Options:: Symbol tables, measurements, and debugging dumps. -* Optimize Options:: How much optimization? -* Preprocessor Options:: Controlling header files and macro definitions. - Also, getting dependency information for Make. -* Assembler Options:: Passing options to the assembler. -* Link Options:: Specifying libraries and so on. -* Directory Options:: Where to find header files and libraries. - Where to find the compiler executable files. -* Spec Files:: How to pass switches to sub-processes. -* Target Options:: Running a cross-compiler, or an old version of GCC. -* Submodel Options:: Specifying minor hardware or convention variations, - such as 68010 vs 68020. -* Code Gen Options:: Specifying conventions for function calls, data layout - and register usage. -* Environment Variables:: Env vars that affect GCC. -* Precompiled Headers:: Compiling a header once, and using it many times. - - -File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC - -3.1 Option Summary -================== - -Here is a summary of all the options, grouped by type. Explanations are -in the following sections. - -_Overall Options_ - *Note Options Controlling the Kind of Output: Overall Options. - -c -S -E -o FILE -no-canonical-prefixes - -pipe -pass-exit-codes - -x LANGUAGE -v -### --help[=CLASS[,...]] --target-help - --version -wrapper @FILE -fplugin=FILE -fplugin-arg-NAME=ARG - -fdump-ada-spec[-slim] -fada-spec-parent=UNIT -fdump-go-spec=FILE - -_C Language Options_ - *Note Options Controlling C Dialect: C Dialect Options. - -ansi -std=STANDARD -fgnu89-inline - -aux-info FILENAME -fallow-parameterless-variadic-functions - -fno-asm -fno-builtin -fno-builtin-FUNCTION - -fhosted -ffreestanding -fopenmp -fopenmp-simd -fms-extensions - -fplan9-extensions -trigraphs -traditional -traditional-cpp - -fallow-single-precision -fcond-mismatch -flax-vector-conversions - -fsigned-bitfields -fsigned-char - -funsigned-bitfields -funsigned-char - -_C++ Language Options_ - *Note Options Controlling C++ Dialect: C++ Dialect Options. - -fabi-version=N -fno-access-control -fcheck-new - -fconstexpr-depth=N -ffriend-injection - -fno-elide-constructors - -fno-enforce-eh-specs - -ffor-scope -fno-for-scope -fno-gnu-keywords - -fno-implicit-templates - -fno-implicit-inline-templates - -fno-implement-inlines -fms-extensions - -fno-nonansi-builtins -fnothrow-opt -fno-operator-names - -fno-optional-diags -fpermissive - -fno-pretty-templates - -frepo -fno-rtti -fstats -ftemplate-backtrace-limit=N - -ftemplate-depth=N - -fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++ - -fvisibility-inlines-hidden - -fvtable-verify=STD|PREINIT|NONE - -fvtv-counts -fvtv-debug - -fvisibility-ms-compat - -fext-numeric-literals - -Wabi -Wconversion-null -Wctor-dtor-privacy - -Wdelete-non-virtual-dtor -Wliteral-suffix -Wnarrowing - -Wnoexcept -Wnon-virtual-dtor -Wreorder - -Weffc++ -Wstrict-null-sentinel - -Wno-non-template-friend -Wold-style-cast - -Woverloaded-virtual -Wno-pmf-conversions - -Wsign-promo - -_Objective-C and Objective-C++ Language Options_ - *Note Options Controlling Objective-C and Objective-C++ Dialects: - Objective-C and Objective-C++ Dialect Options. - -fconstant-string-class=CLASS-NAME - -fgnu-runtime -fnext-runtime - -fno-nil-receivers - -fobjc-abi-version=N - -fobjc-call-cxx-cdtors - -fobjc-direct-dispatch - -fobjc-exceptions - -fobjc-gc - -fobjc-nilcheck - -fobjc-std=objc1 - -freplace-objc-classes - -fzero-link - -gen-decls - -Wassign-intercept - -Wno-protocol -Wselector - -Wstrict-selector-match - -Wundeclared-selector - -_Language Independent Options_ - *Note Options to Control Diagnostic Messages Formatting: Language - Independent Options. - -fmessage-length=N - -fdiagnostics-show-location=[once|every-line] - -fdiagnostics-color=[auto|never|always] - -fno-diagnostics-show-option -fno-diagnostics-show-caret - -_Warning Options_ - *Note Options to Request or Suppress Warnings: Warning Options. - -fsyntax-only -fmax-errors=N -Wpedantic - -pedantic-errors - -w -Wextra -Wall -Waddress -Waggregate-return - -Waggressive-loop-optimizations -Warray-bounds - -Wno-attributes -Wno-builtin-macro-redefined - -Wc++-compat -Wc++11-compat -Wcast-align -Wcast-qual - -Wchar-subscripts -Wclobbered -Wcomment -Wconditionally-supported - -Wconversion -Wcoverage-mismatch -Wdate-time -Wdelete-incomplete -Wno-cpp - -Wno-deprecated -Wno-deprecated-declarations -Wdisabled-optimization - -Wno-div-by-zero -Wdouble-promotion -Wempty-body -Wenum-compare - -Wno-endif-labels -Werror -Werror=* - -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 - -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral - -Wformat-security -Wformat-y2k - -Wframe-larger-than=LEN -Wno-free-nonheap-object -Wjump-misses-init - -Wignored-qualifiers - -Wimplicit -Wimplicit-function-declaration -Wimplicit-int - -Winit-self -Winline -Wmaybe-uninitialized - -Wno-int-to-pointer-cast -Wno-invalid-offsetof - -Winvalid-pch -Wlarger-than=LEN -Wunsafe-loop-optimizations - -Wlogical-op -Wlong-long - -Wmain -Wmaybe-uninitialized -Wmissing-braces -Wmissing-field-initializers - -Wmissing-include-dirs - -Wno-multichar -Wnonnull -Wno-overflow -Wopenmp-simd - -Woverlength-strings -Wpacked -Wpacked-bitfield-compat -Wpadded - -Wparentheses -Wpedantic-ms-format -Wno-pedantic-ms-format - -Wpointer-arith -Wno-pointer-to-int-cast - -Wredundant-decls -Wno-return-local-addr - -Wreturn-type -Wsequence-point -Wshadow - -Wsign-compare -Wsign-conversion -Wfloat-conversion - -Wsizeof-pointer-memaccess - -Wstack-protector -Wstack-usage=LEN -Wstrict-aliasing - -Wstrict-aliasing=n -Wstrict-overflow -Wstrict-overflow=N - -Wsuggest-attribute=[pure|const|noreturn|format] - -Wmissing-format-attribute - -Wswitch -Wswitch-default -Wswitch-enum -Wsync-nand - -Wsystem-headers -Wtrampolines -Wtrigraphs -Wtype-limits -Wundef - -Wuninitialized -Wunknown-pragmas -Wno-pragmas - -Wunsuffixed-float-constants -Wunused -Wunused-function - -Wunused-label -Wunused-local-typedefs -Wunused-parameter - -Wno-unused-result -Wunused-value -Wunused-variable - -Wunused-but-set-parameter -Wunused-but-set-variable - -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance - -Wvla -Wvolatile-register-var -Wwrite-strings -Wzero-as-null-pointer-constant - -_C and Objective-C-only Warning Options_ - -Wbad-function-cast -Wmissing-declarations - -Wmissing-parameter-type -Wmissing-prototypes -Wnested-externs - -Wold-style-declaration -Wold-style-definition - -Wstrict-prototypes -Wtraditional -Wtraditional-conversion - -Wdeclaration-after-statement -Wpointer-sign - -_Debugging Options_ - *Note Options for Debugging Your Program or GCC: Debugging Options. - -dLETTERS -dumpspecs -dumpmachine -dumpversion - -fsanitize=STYLE - -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST - -fdisable-ipa-PASS_NAME - -fdisable-rtl-PASS_NAME - -fdisable-rtl-PASS-NAME=RANGE-LIST - -fdisable-tree-PASS_NAME - -fdisable-tree-PASS-NAME=RANGE-LIST - -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links - -fdump-translation-unit[-N] - -fdump-class-hierarchy[-N] - -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline - -fdump-passes - -fdump-statistics - -fdump-tree-all - -fdump-tree-original[-N] - -fdump-tree-optimized[-N] - -fdump-tree-cfg -fdump-tree-alias - -fdump-tree-ch - -fdump-tree-ssa[-N] -fdump-tree-pre[-N] - -fdump-tree-ccp[-N] -fdump-tree-dce[-N] - -fdump-tree-gimple[-raw] - -fdump-tree-dom[-N] - -fdump-tree-dse[-N] - -fdump-tree-phiprop[-N] - -fdump-tree-phiopt[-N] - -fdump-tree-forwprop[-N] - -fdump-tree-copyrename[-N] - -fdump-tree-nrv -fdump-tree-vect - -fdump-tree-sink - -fdump-tree-sra[-N] - -fdump-tree-forwprop[-N] - -fdump-tree-fre[-N] - -fdump-tree-vtable-verify - -fdump-tree-vrp[-N] - -fdump-tree-storeccp[-N] - -fdump-final-insns=FILE - -fcompare-debug[=OPTS] -fcompare-debug-second - -feliminate-dwarf2-dups -fno-eliminate-unused-debug-types - -feliminate-unused-debug-symbols -femit-class-debug-always - -fenable-KIND-PASS - -fenable-KIND-PASS=RANGE-LIST - -fdebug-types-section -fmem-report-wpa - -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs - -fopt-info - -fopt-info-OPTIONS[=FILE] - -frandom-seed=STRING -fsched-verbose=N - -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose - -fstack-usage -ftest-coverage -ftime-report -fvar-tracking - -fvar-tracking-assignments -fvar-tracking-assignments-toggle - -g -gLEVEL -gtoggle -gcoff -gdwarf-VERSION - -ggdb -grecord-gcc-switches -gno-record-gcc-switches - -gstabs -gstabs+ -gstrict-dwarf -gno-strict-dwarf - -gvms -gxcoff -gxcoff+ - -fno-merge-debug-strings -fno-dwarf2-cfi-asm - -fdebug-prefix-map=OLD=NEW - -femit-struct-debug-baseonly -femit-struct-debug-reduced - -femit-struct-debug-detailed[=SPEC-LIST] - -p -pg -print-file-name=LIBRARY -print-libgcc-file-name - -print-multi-directory -print-multi-lib -print-multi-os-directory - -print-prog-name=PROGRAM -print-search-dirs -Q - -print-sysroot -print-sysroot-headers-suffix - -save-temps -save-temps=cwd -save-temps=obj -time[=FILE] - -_Optimization Options_ - *Note Options that Control Optimization: Optimize Options. - -faggressive-loop-optimizations -falign-functions[=N] - -falign-jumps[=N] - -falign-labels[=N] -falign-loops[=N] - -fassociative-math -fauto-inc-dec -fbranch-probabilities - -fbranch-target-load-optimize -fbranch-target-load-optimize2 - -fbtr-bb-exclusive -fcaller-saves - -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack - -fcompare-elim -fcprop-registers -fcrossjumping - -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules - -fcx-limited-range - -fdata-sections -fdce -fdelayed-branch - -fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-speculatively -fdse - -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects - -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=STYLE - -fforward-propagate -ffp-contract=STYLE -ffunction-sections - -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity - -fgcse-sm -fhoist-adjacent-loads -fif-conversion - -fif-conversion2 -findirect-inlining - -finline-functions -finline-functions-called-once -finline-limit=N - -finline-small-functions -fipa-cp -fipa-cp-clone - -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference - -fira-algorithm=ALGORITHM - -fira-region=REGION -fira-hoist-pressure - -fira-loop-pressure -fno-ira-share-save-slots - -fno-ira-share-spill-slots -fira-verbose=N - -fisolate-erroneous-paths-dereference -fisolate-erroneous-paths-attribute - -fivopts -fkeep-inline-functions -fkeep-static-consts -flive-range-shrinkage - -floop-block -floop-interchange -floop-strip-mine -floop-nest-optimize - -floop-parallelize-all -flto -flto-compression-level - -flto-partition=ALG -flto-report -flto-report-wpa -fmerge-all-constants - -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves - -fmove-loop-invariants -fno-branch-count-reg - -fno-defer-pop -fno-function-cse -fno-guess-branch-probability - -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 - -fno-sched-interblock -fno-sched-spec -fno-signed-zeros - -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss - -fomit-frame-pointer -foptimize-sibling-calls - -fpartial-inlining -fpeel-loops -fpredictive-commoning - -fprefetch-loop-arrays -fprofile-report - -fprofile-correction -fprofile-dir=PATH -fprofile-generate - -fprofile-generate=PATH - -fprofile-use -fprofile-use=PATH -fprofile-values -fprofile-reorder-functions - -freciprocal-math -free -frename-registers -freorder-blocks - -freorder-blocks-and-partition -freorder-functions - -frerun-cse-after-loop -freschedule-modulo-scheduled-loops - -frounding-math -fsched2-use-superblocks -fsched-pressure - -fsched-spec-load -fsched-spec-load-dangerous - -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N] - -fsched-group-heuristic -fsched-critical-path-heuristic - -fsched-spec-insn-heuristic -fsched-rank-heuristic - -fsched-last-insn-heuristic -fsched-dep-count-heuristic - -fschedule-insns -fschedule-insns2 -fsection-anchors - -fselective-scheduling -fselective-scheduling2 - -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops - -fshrink-wrap -fsignaling-nans -fsingle-precision-constant - -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector - -fstack-protector-all -fstack-protector-strong -fstrict-aliasing - -fstrict-overflow -fthread-jumps -ftracer -ftree-bit-ccp - -ftree-builtin-call-dce -ftree-ccp -ftree-ch - -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop - -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse - -ftree-forwprop -ftree-fre -ftree-loop-if-convert - -ftree-loop-if-convert-stores -ftree-loop-im - -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns - -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize - -ftree-loop-vectorize - -ftree-parallelize-loops=N -ftree-pre -ftree-partial-pre -ftree-pta - -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra - -ftree-switch-conversion -ftree-tail-merge -ftree-ter - -ftree-vectorize -ftree-vrp - -funit-at-a-time -funroll-all-loops -funroll-loops - -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops - -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb - -fwhole-program -fwpa -fuse-ld=LINKER -fuse-linker-plugin - --param NAME=VALUE - -O -O0 -O1 -O2 -O3 -Os -Ofast -Og - -_Preprocessor Options_ - *Note Options Controlling the Preprocessor: Preprocessor Options. - -AQUESTION=ANSWER - -A-QUESTION[=ANSWER] - -C -dD -dI -dM -dN - -DMACRO[=DEFN] -E -H - -idirafter DIR - -include FILE -imacros FILE - -iprefix FILE -iwithprefix DIR - -iwithprefixbefore DIR -isystem DIR - -imultilib DIR -isysroot DIR - -M -MM -MF -MG -MP -MQ -MT -nostdinc - -P -fdebug-cpp -ftrack-macro-expansion -fworking-directory - -remap -trigraphs -undef -UMACRO - -Wp,OPTION -Xpreprocessor OPTION -no-integrated-cpp - -_Assembler Option_ - *Note Passing Options to the Assembler: Assembler Options. - -Wa,OPTION -Xassembler OPTION - -_Linker Options_ - *Note Options for Linking: Link Options. - OBJECT-FILE-NAME -lLIBRARY - -nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic - -s -static -static-libgcc -static-libstdc++ - -static-libasan -static-libtsan -static-liblsan -static-libubsan - -shared -shared-libgcc -symbolic - -T SCRIPT -Wl,OPTION -Xlinker OPTION - -u SYMBOL - -_Directory Options_ - *Note Options for Directory Search: Directory Options. - -BPREFIX -IDIR -iplugindir=DIR - -iquoteDIR -LDIR -specs=FILE -I- - --sysroot=DIR --no-sysroot-suffix - -_Machine Dependent Options_ - *Note Hardware Models and Configurations: Submodel Options. - - _AArch64 Options_ - -mabi=NAME -mbig-endian -mlittle-endian - -mgeneral-regs-only - -mcmodel=tiny -mcmodel=small -mcmodel=large - -mstrict-align - -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer - -mtls-dialect=desc -mtls-dialect=traditional - -march=NAME -mcpu=NAME -mtune=NAME - - _Adapteva Epiphany Options_ - -mhalf-reg-file -mprefer-short-insn-regs - -mbranch-cost=NUM -mcmove -mnops=NUM -msoft-cmpsf - -msplit-lohi -mpost-inc -mpost-modify -mstack-offset=NUM - -mround-nearest -mlong-calls -mshort-calls -msmall16 - -mfp-mode=MODE -mvect-double -max-vect-align=NUM - -msplit-vecmove-early -m1reg-REG - - _ARC Options_ - -mbarrel-shifter - -mcpu=CPU -mA6 -mARC600 -mA7 -mARC700 - -mdpfp -mdpfp-compact -mdpfp-fast -mno-dpfp-lrsr - -mea -mno-mpy -mmul32x16 -mmul64 - -mnorm -mspfp -mspfp-compact -mspfp-fast -msimd -msoft-float -mswap - -mcrc -mdsp-packa -mdvbf -mlock -mmac-d16 -mmac-24 -mrtsc -mswape - -mtelephony -mxy -misize -mannotate-align -marclinux -marclinux_prof - -mepilogue-cfi -mlong-calls -mmedium-calls -msdata - -mucb-mcount -mvolatile-cache - -malign-call -mauto-modify-reg -mbbit-peephole -mno-brcc - -mcase-vector-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi - -mexpand-adddi -mindexed-loads -mlra -mlra-priority-none - -mlra-priority-compact mlra-priority-noncompact -mno-millicode - -mmixed-code -mq-class -mRcq -mRcw -msize-level=LEVEL - -mtune=CPU -mmultcost=NUM -munalign-prob-threshold=PROBABILITY - - _ARM Options_ - -mapcs-frame -mno-apcs-frame - -mabi=NAME - -mapcs-stack-check -mno-apcs-stack-check - -mapcs-float -mno-apcs-float - -mapcs-reentrant -mno-apcs-reentrant - -msched-prolog -mno-sched-prolog - -mlittle-endian -mbig-endian -mwords-little-endian - -mfloat-abi=NAME - -mfp16-format=NAME - -mthumb-interwork -mno-thumb-interwork - -mcpu=NAME -march=NAME -mfpu=NAME - -mstructure-size-boundary=N - -mabort-on-noreturn - -mlong-calls -mno-long-calls - -msingle-pic-base -mno-single-pic-base - -mpic-register=REG - -mnop-fun-dllimport - -mpoke-function-name - -mthumb -marm - -mtpcs-frame -mtpcs-leaf-frame - -mcaller-super-interworking -mcallee-super-interworking - -mtp=NAME -mtls-dialect=DIALECT - -mword-relocations - -mfix-cortex-m3-ldrd - -munaligned-access - -mneon-for-64bits - -mslow-flash-data - -mrestrict-it - - _AVR Options_ - -mmcu=MCU -maccumulate-args -mbranch-cost=COST - -mcall-prologues -mint8 -mno-interrupts -mrelax - -mstrict-X -mtiny-stack -Waddr-space-convert - - _Blackfin Options_ - -mcpu=CPU[-SIREVISION] - -msim -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer - -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly - -mlow-64k -mno-low64k -mstack-check-l1 -mid-shared-library - -mno-id-shared-library -mshared-library-id=N - -mleaf-id-shared-library -mno-leaf-id-shared-library - -msep-data -mno-sep-data -mlong-calls -mno-long-calls - -mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram - -micplb - - _C6X Options_ - -mbig-endian -mlittle-endian -march=CPU - -msim -msdata=SDATA-TYPE - - _CRIS Options_ - -mcpu=CPU -march=CPU -mtune=CPU - -mmax-stack-frame=N -melinux-stacksize=N - -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects - -mstack-align -mdata-align -mconst-align - -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt - -melf -maout -melinux -mlinux -sim -sim2 - -mmul-bug-workaround -mno-mul-bug-workaround - - _CR16 Options_ - -mmac - -mcr16cplus -mcr16c - -msim -mint32 -mbit-ops - -mdata-model=MODEL - - _Darwin Options_ - -all_load -allowable_client -arch -arch_errors_fatal - -arch_only -bind_at_load -bundle -bundle_loader - -client_name -compatibility_version -current_version - -dead_strip - -dependency-file -dylib_file -dylinker_install_name - -dynamic -dynamiclib -exported_symbols_list - -filelist -flat_namespace -force_cpusubtype_ALL - -force_flat_namespace -headerpad_max_install_names - -iframework - -image_base -init -install_name -keep_private_externs - -multi_module -multiply_defined -multiply_defined_unused - -noall_load -no_dead_strip_inits_and_terms - -nofixprebinding -nomultidefs -noprebind -noseglinkedit - -pagezero_size -prebind -prebind_all_twolevel_modules - -private_bundle -read_only_relocs -sectalign - -sectobjectsymbols -whyload -seg1addr - -sectcreate -sectobjectsymbols -sectorder - -segaddr -segs_read_only_addr -segs_read_write_addr - -seg_addr_table -seg_addr_table_filename -seglinkedit - -segprot -segs_read_only_addr -segs_read_write_addr - -single_module -static -sub_library -sub_umbrella - -twolevel_namespace -umbrella -undefined - -unexported_symbols_list -weak_reference_mismatches - -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION - -mkernel -mone-byte-bool - - _DEC Alpha Options_ - -mno-fp-regs -msoft-float - -mieee -mieee-with-inexact -mieee-conformant - -mfp-trap-mode=MODE -mfp-rounding-mode=MODE - -mtrap-precision=MODE -mbuild-constants - -mcpu=CPU-TYPE -mtune=CPU-TYPE - -mbwx -mmax -mfix -mcix - -mfloat-vax -mfloat-ieee - -mexplicit-relocs -msmall-data -mlarge-data - -msmall-text -mlarge-text - -mmemory-latency=TIME - - _FR30 Options_ - -msmall-model -mno-lsim - - _FRV Options_ - -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 - -mhard-float -msoft-float - -malloc-cc -mfixed-cc -mdword -mno-dword - -mdouble -mno-double - -mmedia -mno-media -mmuladd -mno-muladd - -mfdpic -minline-plt -mgprel-ro -multilib-library-pic - -mlinked-fp -mlong-calls -malign-labels - -mlibrary-pic -macc-4 -macc-8 - -mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move - -moptimize-membar -mno-optimize-membar - -mscc -mno-scc -mcond-exec -mno-cond-exec - -mvliw-branch -mno-vliw-branch - -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec - -mno-nested-cond-exec -mtomcat-stats - -mTLS -mtls - -mcpu=CPU - - _GNU/Linux Options_ - -mglibc -muclibc -mbionic -mandroid - -tno-android-cc -tno-android-ld - - _H8/300 Options_ - -mrelax -mh -ms -mn -mexr -mno-exr -mint32 -malign-300 - - _HPPA Options_ - -march=ARCHITECTURE-TYPE - -mdisable-fpregs -mdisable-indexing - -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld - -mfixed-range=REGISTER-RANGE - -mjump-in-delay -mlinker-opt -mlong-calls - -mlong-load-store -mno-disable-fpregs - -mno-disable-indexing -mno-fast-indirect-calls -mno-gas - -mno-jump-in-delay -mno-long-load-store - -mno-portable-runtime -mno-soft-float - -mno-space-regs -msoft-float -mpa-risc-1-0 - -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime - -mschedule=CPU-TYPE -mspace-regs -msio -mwsio - -munix=UNIX-STD -nolibdld -static -threads - - _i386 and x86-64 Options_ - -mtune=CPU-TYPE -march=CPU-TYPE - -mtune-ctrl=FEATURE-LIST -mdump-tune-features -mno-default - -mfpmath=UNIT - -masm=DIALECT -mno-fancy-math-387 - -mno-fp-ret-in-387 -msoft-float - -mno-wide-multiply -mrtd -malign-double - -mpreferred-stack-boundary=NUM - -mincoming-stack-boundary=NUM - -mcld -mcx16 -msahf -mmovbe -mcrc32 - -mrecip -mrecip=OPT - -mvzeroupper -mprefer-avx128 - -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx - -mavx2 -mavx512f -mavx512pf -mavx512er -mavx512cd -msha - -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -mprefetchwt1 - -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt - -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mthreads - -mno-align-stringops -minline-all-stringops - -minline-stringops-dynamically -mstringop-strategy=ALG - -mmemcpy-strategy=STRATEGY -mmemset-strategy=STRATEGY - -mpush-args -maccumulate-outgoing-args -m128bit-long-double - -m96bit-long-double -mlong-double-64 -mlong-double-80 -mlong-double-128 - -mregparm=NUM -msseregparm - -mveclibabi=TYPE -mvect8-ret-in-mem - -mpc32 -mpc64 -mpc80 -mstackrealign - -momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs - -mcmodel=CODE-MODEL -mabi=NAME -maddress-mode=MODE - -m32 -m64 -mx32 -m16 -mlarge-data-threshold=NUM - -msse2avx -mfentry -m8bit-idiv - -mavx256-split-unaligned-load -mavx256-split-unaligned-store - -mstack-protector-guard=GUARD - - _i386 and x86-64 Windows Options_ - -mconsole -mcygwin -mno-cygwin -mdll - -mnop-fun-dllimport -mthread - -municode -mwin32 -mwindows -fno-set-stack-executable - - _IA-64 Options_ - -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic - -mvolatile-asm-stop -mregister-names -msdata -mno-sdata - -mconstant-gp -mauto-pic -mfused-madd - -minline-float-divide-min-latency - -minline-float-divide-max-throughput - -mno-inline-float-divide - -minline-int-divide-min-latency - -minline-int-divide-max-throughput - -mno-inline-int-divide - -minline-sqrt-min-latency -minline-sqrt-max-throughput - -mno-inline-sqrt - -mdwarf2-asm -mearly-stop-bits - -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE - -mtune=CPU-TYPE -milp32 -mlp64 - -msched-br-data-spec -msched-ar-data-spec -msched-control-spec - -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec - -msched-spec-ldc -msched-spec-control-ldc - -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns - -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path - -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost - -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS - - _LM32 Options_ - -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled - -msign-extend-enabled -muser-enabled - - _M32R/D Options_ - -m32r2 -m32rx -m32r - -mdebug - -malign-loops -mno-align-loops - -missue-rate=NUMBER - -mbranch-cost=NUMBER - -mmodel=CODE-SIZE-MODEL-TYPE - -msdata=SDATA-TYPE - -mno-flush-func -mflush-func=NAME - -mno-flush-trap -mflush-trap=NUMBER - -G NUM - - _M32C Options_ - -mcpu=CPU -msim -memregs=NUMBER - - _M680x0 Options_ - -march=ARCH -mcpu=CPU -mtune=TUNE - -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 - -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407 - -mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 - -mnobitfield -mrtd -mno-rtd -mdiv -mno-div -mshort - -mno-short -mhard-float -m68881 -msoft-float -mpcrel - -malign-int -mstrict-align -msep-data -mno-sep-data - -mshared-library-id=n -mid-shared-library -mno-id-shared-library - -mxgot -mno-xgot - - _MCore Options_ - -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates - -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields - -m4byte-functions -mno-4byte-functions -mcallgraph-data - -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim - -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment - - _MeP Options_ - -mabsdiff -mall-opts -maverage -mbased=N -mbitops - -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2 - -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax - -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf - -mtiny=N - - _MicroBlaze Options_ - -msoft-float -mhard-float -msmall-divides -mcpu=CPU - -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift - -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss - -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt - -mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-APP-MODEL - - _MIPS Options_ - -EL -EB -march=ARCH -mtune=ARCH - -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 - -mips64 -mips64r2 - -mips16 -mno-mips16 -mflip-mips16 - -minterlink-compressed -mno-interlink-compressed - -minterlink-mips16 -mno-interlink-mips16 - -mabi=ABI -mabicalls -mno-abicalls - -mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot - -mgp32 -mgp64 -mfp32 -mfp64 -mhard-float -msoft-float - -mno-float -msingle-float -mdouble-float - -mabs=MODE -mnan=ENCODING - -mdsp -mno-dsp -mdspr2 -mno-dspr2 - -mmcu -mmno-mcu - -meva -mno-eva - -mvirt -mno-virt - -mmicromips -mno-micromips - -mfpu=FPU-TYPE - -msmartmips -mno-smartmips - -mpaired-single -mno-paired-single -mdmx -mno-mdmx - -mips3d -mno-mips3d -mmt -mno-mt -mllsc -mno-llsc - -mlong64 -mlong32 -msym32 -mno-sym32 - -GNUM -mlocal-sdata -mno-local-sdata - -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt - -membedded-data -mno-embedded-data - -muninit-const-in-rodata -mno-uninit-const-in-rodata - -mcode-readable=SETTING - -msplit-addresses -mno-split-addresses - -mexplicit-relocs -mno-explicit-relocs - -mcheck-zero-division -mno-check-zero-division - -mdivide-traps -mdivide-breaks - -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls - -mmad -mno-mad -mimadd -mno-imadd -mfused-madd -mno-fused-madd -nocpp - -mfix-24k -mno-fix-24k - -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 - -mfix-r10000 -mno-fix-r10000 -mfix-rm7000 -mno-fix-rm7000 - -mfix-vr4120 -mno-fix-vr4120 - -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1 - -mflush-func=FUNC -mno-flush-func - -mbranch-cost=NUM -mbranch-likely -mno-branch-likely - -mfp-exceptions -mno-fp-exceptions - -mvr4130-align -mno-vr4130-align -msynci -mno-synci - -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address - - _MMIX Options_ - -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu - -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols - -melf -mbranch-predict -mno-branch-predict -mbase-addresses - -mno-base-addresses -msingle-exit -mno-single-exit - - _MN10300 Options_ - -mmult-bug -mno-mult-bug - -mno-am33 -mam33 -mam33-2 -mam34 - -mtune=CPU-TYPE - -mreturn-pointer-on-d0 - -mno-crt0 -mrelax -mliw -msetlb - - _Moxie Options_ - -meb -mel -mno-crt0 - - _MSP430 Options_ - -msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax - - _NDS32 Options_ - -mbig-endian -mlittle-endian - -mreduced-regs -mfull-regs - -mcmov -mno-cmov - -mperf-ext -mno-perf-ext - -mv3push -mno-v3push - -m16bit -mno-16bit - -mgp-direct -mno-gp-direct - -misr-vector-size=NUM - -mcache-block-size=NUM - -march=ARCH - -mforce-fp-as-gp -mforbid-fp-as-gp - -mex9 -mctor-dtor -mrelax - - _Nios II Options_ - -G NUM -mgpopt -mno-gpopt -mel -meb - -mno-bypass-cache -mbypass-cache - -mno-cache-volatile -mcache-volatile - -mno-fast-sw-div -mfast-sw-div - -mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div - -mcustom-INSN=N -mno-custom-INSN - -mcustom-fpu-cfg=NAME - -mhal -msmallc -msys-crt0=NAME -msys-lib=NAME - - _PDP-11 Options_ - -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 - -mbcopy -mbcopy-builtin -mint32 -mno-int16 - -mint16 -mno-int32 -mfloat32 -mno-float64 - -mfloat64 -mno-float32 -mabshi -mno-abshi - -mbranch-expensive -mbranch-cheap - -munix-asm -mdec-asm - - _picoChip Options_ - -mae=AE_TYPE -mvliw-lookahead=N - -msymbol-as-address -mno-inefficient-warnings - - _PowerPC Options_ See RS/6000 and PowerPC Options. - - _RL78 Options_ - -msim -mmul=none -mmul=g13 -mmul=rl78 - - _RS/6000 and PowerPC Options_ - -mcpu=CPU-TYPE - -mtune=CPU-TYPE - -mcmodel=CODE-MODEL - -mpowerpc64 - -maltivec -mno-altivec - -mpowerpc-gpopt -mno-powerpc-gpopt - -mpowerpc-gfxopt -mno-powerpc-gfxopt - -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd - -mfprnd -mno-fprnd - -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp - -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc - -m64 -m32 -mxl-compat -mno-xl-compat -mpe - -malign-power -malign-natural - -msoft-float -mhard-float -mmultiple -mno-multiple - -msingle-float -mdouble-float -msimple-fpu - -mstring -mno-string -mupdate -mno-update - -mavoid-indexed-addresses -mno-avoid-indexed-addresses - -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align - -mstrict-align -mno-strict-align -mrelocatable - -mno-relocatable -mrelocatable-lib -mno-relocatable-lib - -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian - -mdynamic-no-pic -maltivec -mswdiv -msingle-pic-base - -mprioritize-restricted-insns=PRIORITY - -msched-costly-dep=DEPENDENCE_TYPE - -minsert-sched-nops=SCHEME - -mcall-sysv -mcall-netbsd - -maix-struct-return -msvr4-struct-return - -mabi=ABI-TYPE -msecure-plt -mbss-plt - -mblock-move-inline-limit=NUM - -misel -mno-isel - -misel=yes -misel=no - -mspe -mno-spe - -mspe=yes -mspe=no - -mpaired - -mgen-cell-microcode -mwarn-cell-microcode - -mvrsave -mno-vrsave - -mmulhw -mno-mulhw - -mdlmzb -mno-dlmzb - -mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double - -mprototype -mno-prototype - -msim -mmvme -mads -myellowknife -memb -msdata - -msdata=OPT -mvxworks -G NUM -pthread - -mrecip -mrecip=OPT -mno-recip -mrecip-precision - -mno-recip-precision - -mveclibabi=TYPE -mfriz -mno-friz - -mpointers-to-nested-functions -mno-pointers-to-nested-functions - -msave-toc-indirect -mno-save-toc-indirect - -mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector - -mcrypto -mno-crypto -mdirect-move -mno-direct-move - -mquad-memory -mno-quad-memory - -mquad-memory-atomic -mno-quad-memory-atomic - -mcompat-align-parm -mno-compat-align-parm - - _RX Options_ - -m64bit-doubles -m32bit-doubles -fpu -nofpu - -mcpu= - -mbig-endian-data -mlittle-endian-data - -msmall-data - -msim -mno-sim - -mas100-syntax -mno-as100-syntax - -mrelax - -mmax-constant-size= - -mint-register= - -mpid - -mno-warn-multiple-fast-interrupts - -msave-acc-in-interrupts - - _S/390 and zSeries Options_ - -mtune=CPU-TYPE -march=CPU-TYPE - -mhard-float -msoft-float -mhard-dfp -mno-hard-dfp - -mlong-double-64 -mlong-double-128 - -mbackchain -mno-backchain -mpacked-stack -mno-packed-stack - -msmall-exec -mno-small-exec -mmvcle -mno-mvcle - -m64 -m31 -mdebug -mno-debug -mesa -mzarch - -mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd - -mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard - -mhotpatch[=HALFWORDS] -mno-hotpatch - - _Score Options_ - -meb -mel - -mnhwloop - -muls - -mmac - -mscore5 -mscore5u -mscore7 -mscore7d - - _SH Options_ - -m1 -m2 -m2e - -m2a-nofpu -m2a-single-only -m2a-single -m2a - -m3 -m3e - -m4-nofpu -m4-single-only -m4-single -m4 - -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al - -m5-64media -m5-64media-nofpu - -m5-32media -m5-32media-nofpu - -m5-compact -m5-compact-nofpu - -mb -ml -mdalign -mrelax - -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave - -mieee -mno-ieee -mbitops -misize -minline-ic_invalidate -mpadstruct - -mspace -mprefergot -musermode -multcost=NUMBER -mdiv=STRATEGY - -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE - -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed - -maccumulate-outgoing-args -minvalid-symbols - -matomic-model=ATOMIC-MODEL - -mbranch-cost=NUM -mzdcbranch -mno-zdcbranch - -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra - -mpretend-cmove -mtas - - _Solaris 2 Options_ - -mimpure-text -mno-impure-text - -pthreads -pthread - - _SPARC Options_ - -mcpu=CPU-TYPE - -mtune=CPU-TYPE - -mcmodel=CODE-MODEL - -mmemory-model=MEM-MODEL - -m32 -m64 -mapp-regs -mno-app-regs - -mfaster-structs -mno-faster-structs -mflat -mno-flat - -mfpu -mno-fpu -mhard-float -msoft-float - -mhard-quad-float -msoft-quad-float - -mstack-bias -mno-stack-bias - -munaligned-doubles -mno-unaligned-doubles - -mv8plus -mno-v8plus -mvis -mno-vis - -mvis2 -mno-vis2 -mvis3 -mno-vis3 - -mcbcond -mno-cbcond - -mfmaf -mno-fmaf -mpopc -mno-popc - -mfix-at697f -mfix-ut699 - - _SPU Options_ - -mwarn-reloc -merror-reloc - -msafe-dma -munsafe-dma - -mbranch-hints - -msmall-mem -mlarge-mem -mstdmain - -mfixed-range=REGISTER-RANGE - -mea32 -mea64 - -maddress-space-conversion -mno-address-space-conversion - -mcache-size=CACHE-SIZE - -matomic-updates -mno-atomic-updates - - _System V Options_ - -Qy -Qn -YP,PATHS -Ym,DIR - - _TILE-Gx Options_ - -mcpu=CPU -m32 -m64 -mbig-endian -mlittle-endian - -mcmodel=CODE-MODEL - - _TILEPro Options_ - -mcpu=CPU -m32 - - _V850 Options_ - -mlong-calls -mno-long-calls -mep -mno-ep - -mprolog-function -mno-prolog-function -mspace - -mtda=N -msda=N -mzda=N - -mapp-regs -mno-app-regs - -mdisable-callt -mno-disable-callt - -mv850e2v3 -mv850e2 -mv850e1 -mv850es - -mv850e -mv850 -mv850e3v5 - -mloop - -mrelax - -mlong-jumps - -msoft-float - -mhard-float - -mgcc-abi - -mrh850-abi - -mbig-switch - - _VAX Options_ - -mg -mgnu -munix - - _VMS Options_ - -mvms-return-codes -mdebug-main=PREFIX -mmalloc64 - -mpointer-size=SIZE - - _VxWorks Options_ - -mrtp -non-static -Bstatic -Bdynamic - -Xbind-lazy -Xbind-now - - _x86-64 Options_ See i386 and x86-64 Options. - - _Xstormy16 Options_ - -msim - - _Xtensa Options_ - -mconst16 -mno-const16 - -mfused-madd -mno-fused-madd - -mforce-no-pic - -mserialize-volatile -mno-serialize-volatile - -mtext-section-literals -mno-text-section-literals - -mtarget-align -mno-target-align - -mlongcalls -mno-longcalls - - _zSeries Options_ See S/390 and zSeries Options. - -_Code Generation Options_ - *Note Options for Code Generation Conventions: Code Gen Options. - -fcall-saved-REG -fcall-used-REG - -ffixed-REG -fexceptions - -fnon-call-exceptions -fdelete-dead-exceptions -funwind-tables - -fasynchronous-unwind-tables - -fno-gnu-unique - -finhibit-size-directive -finstrument-functions - -finstrument-functions-exclude-function-list=SYM,SYM,... - -finstrument-functions-exclude-file-list=FILE,FILE,... - -fno-common -fno-ident - -fpcc-struct-return -fpic -fPIC -fpie -fPIE - -fno-jump-tables - -frecord-gcc-switches - -freg-struct-return -fshort-enums - -fshort-double -fshort-wchar - -fverbose-asm -fpack-struct[=N] -fstack-check - -fstack-limit-register=REG -fstack-limit-symbol=SYM - -fno-stack-limit -fsplit-stack - -fleading-underscore -ftls-model=MODEL - -fstack-reuse=REUSE_LEVEL - -ftrapv -fwrapv -fbounds-check - -fvisibility -fstrict-volatile-bitfields -fsync-libcalls - - -File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC - -3.2 Options Controlling the Kind of Output -========================================== - -Compilation can involve up to four stages: preprocessing, compilation -proper, assembly and linking, always in that order. GCC is capable of -preprocessing and compiling several files either into several assembler -input files, or into one assembler input file; then each assembler input -file produces an object file, and linking combines all the object files -(those newly compiled, and those specified as input) into an executable -file. - - For any given input file, the file name suffix determines what kind of -compilation is done: - -'FILE.c' - C source code that must be preprocessed. - -'FILE.i' - C source code that should not be preprocessed. - -'FILE.ii' - C++ source code that should not be preprocessed. - -'FILE.m' - Objective-C source code. Note that you must link with the - 'libobjc' library to make an Objective-C program work. - -'FILE.mi' - Objective-C source code that should not be preprocessed. - -'FILE.mm' -'FILE.M' - Objective-C++ source code. Note that you must link with the - 'libobjc' library to make an Objective-C++ program work. Note that - '.M' refers to a literal capital M. - -'FILE.mii' - Objective-C++ source code that should not be preprocessed. - -'FILE.h' - C, C++, Objective-C or Objective-C++ header file to be turned into - a precompiled header (default), or C, C++ header file to be turned - into an Ada spec (via the '-fdump-ada-spec' switch). - -'FILE.cc' -'FILE.cp' -'FILE.cxx' -'FILE.cpp' -'FILE.CPP' -'FILE.c++' -'FILE.C' - C++ source code that must be preprocessed. Note that in '.cxx', - the last two letters must both be literally 'x'. Likewise, '.C' - refers to a literal capital C. - -'FILE.mm' -'FILE.M' - Objective-C++ source code that must be preprocessed. - -'FILE.mii' - Objective-C++ source code that should not be preprocessed. - -'FILE.hh' -'FILE.H' -'FILE.hp' -'FILE.hxx' -'FILE.hpp' -'FILE.HPP' -'FILE.h++' -'FILE.tcc' - C++ header file to be turned into a precompiled header or Ada spec. - -'FILE.f' -'FILE.for' -'FILE.ftn' - Fixed form Fortran source code that should not be preprocessed. - -'FILE.F' -'FILE.FOR' -'FILE.fpp' -'FILE.FPP' -'FILE.FTN' - Fixed form Fortran source code that must be preprocessed (with the - traditional preprocessor). - -'FILE.f90' -'FILE.f95' -'FILE.f03' -'FILE.f08' - Free form Fortran source code that should not be preprocessed. - -'FILE.F90' -'FILE.F95' -'FILE.F03' -'FILE.F08' - Free form Fortran source code that must be preprocessed (with the - traditional preprocessor). - -'FILE.go' - Go source code. - -'FILE.ads' - Ada source code file that contains a library unit declaration (a - declaration of a package, subprogram, or generic, or a generic - instantiation), or a library unit renaming declaration (a package, - generic, or subprogram renaming declaration). Such files are also - called "specs". - -'FILE.adb' - Ada source code file containing a library unit body (a subprogram - or package body). Such files are also called "bodies". - -'FILE.s' - Assembler code. - -'FILE.S' -'FILE.sx' - Assembler code that must be preprocessed. - -'OTHER' - An object file to be fed straight into linking. Any file name with - no recognized suffix is treated this way. - - You can specify the input language explicitly with the '-x' option: - -'-x LANGUAGE' - Specify explicitly the LANGUAGE for the following input files - (rather than letting the compiler choose a default based on the - file name suffix). This option applies to all following input - files until the next '-x' option. Possible values for LANGUAGE - are: - c c-header cpp-output - c++ c++-header c++-cpp-output - objective-c objective-c-header objective-c-cpp-output - objective-c++ objective-c++-header objective-c++-cpp-output - assembler assembler-with-cpp - ada - f77 f77-cpp-input f95 f95-cpp-input - go - java - -'-x none' - Turn off any specification of a language, so that subsequent files - are handled according to their file name suffixes (as they are if - '-x' has not been used at all). - -'-pass-exit-codes' - Normally the 'gcc' program exits with the code of 1 if any phase of - the compiler returns a non-success return code. If you specify - '-pass-exit-codes', the 'gcc' program instead returns with the - numerically highest error produced by any phase returning an error - indication. The C, C++, and Fortran front ends return 4 if an - internal compiler error is encountered. - - If you only want some of the stages of compilation, you can use '-x' -(or filename suffixes) to tell 'gcc' where to start, and one of the -options '-c', '-S', or '-E' to say where 'gcc' is to stop. Note that -some combinations (for example, '-x cpp-output -E') instruct 'gcc' to do -nothing at all. - -'-c' - Compile or assemble the source files, but do not link. The linking - stage simply is not done. The ultimate output is in the form of an - object file for each source file. - - By default, the object file name for a source file is made by - replacing the suffix '.c', '.i', '.s', etc., with '.o'. - - Unrecognized input files, not requiring compilation or assembly, - are ignored. - -'-S' - Stop after the stage of compilation proper; do not assemble. The - output is in the form of an assembler code file for each - non-assembler input file specified. - - By default, the assembler file name for a source file is made by - replacing the suffix '.c', '.i', etc., with '.s'. - - Input files that don't require compilation are ignored. - -'-E' - Stop after the preprocessing stage; do not run the compiler proper. - The output is in the form of preprocessed source code, which is - sent to the standard output. - - Input files that don't require preprocessing are ignored. - -'-o FILE' - Place output in file FILE. This applies to whatever sort of output - is being produced, whether it be an executable file, an object - file, an assembler file or preprocessed C code. - - If '-o' is not specified, the default is to put an executable file - in 'a.out', the object file for 'SOURCE.SUFFIX' in 'SOURCE.o', its - assembler file in 'SOURCE.s', a precompiled header file in - 'SOURCE.SUFFIX.gch', and all preprocessed C source on standard - output. - -'-v' - Print (on standard error output) the commands executed to run the - stages of compilation. Also print the version number of the - compiler driver program and of the preprocessor and the compiler - proper. - -'-###' - Like '-v' except the commands are not executed and arguments are - quoted unless they contain only alphanumeric characters or './-_'. - This is useful for shell scripts to capture the driver-generated - command lines. - -'-pipe' - Use pipes rather than temporary files for communication between the - various stages of compilation. This fails to work on some systems - where the assembler is unable to read from a pipe; but the GNU - assembler has no trouble. - -'--help' - Print (on the standard output) a description of the command-line - options understood by 'gcc'. If the '-v' option is also specified - then '--help' is also passed on to the various processes invoked by - 'gcc', so that they can display the command-line options they - accept. If the '-Wextra' option has also been specified (prior to - the '--help' option), then command-line options that have no - documentation associated with them are also displayed. - -'--target-help' - Print (on the standard output) a description of target-specific - command-line options for each tool. For some targets extra - target-specific information may also be printed. - -'--help={CLASS|[^]QUALIFIER}[,...]' - Print (on the standard output) a description of the command-line - options understood by the compiler that fit into all specified - classes and qualifiers. These are the supported classes: - - 'optimizers' - Display all of the optimization options supported by the - compiler. - - 'warnings' - Display all of the options controlling warning messages - produced by the compiler. - - 'target' - Display target-specific options. Unlike the '--target-help' - option however, target-specific options of the linker and - assembler are not displayed. This is because those tools do - not currently support the extended '--help=' syntax. - - 'params' - Display the values recognized by the '--param' option. - - LANGUAGE - Display the options supported for LANGUAGE, where LANGUAGE is - the name of one of the languages supported in this version of - GCC. - - 'common' - Display the options that are common to all languages. - - These are the supported qualifiers: - - 'undocumented' - Display only those options that are undocumented. - - 'joined' - Display options taking an argument that appears after an equal - sign in the same continuous piece of text, such as: - '--help=target'. - - 'separate' - Display options taking an argument that appears as a separate - word following the original option, such as: '-o output-file'. - - Thus for example to display all the undocumented target-specific - switches supported by the compiler, use: - - --help=target,undocumented - - The sense of a qualifier can be inverted by prefixing it with the - '^' character, so for example to display all binary warning options - (i.e., ones that are either on or off and that do not take an - argument) that have a description, use: - - --help=warnings,^joined,^undocumented - - The argument to '--help=' should not consist solely of inverted - qualifiers. - - Combining several classes is possible, although this usually - restricts the output so much that there is nothing to display. One - case where it does work, however, is when one of the classes is - TARGET. For example, to display all the target-specific - optimization options, use: - - --help=target,optimizers - - The '--help=' option can be repeated on the command line. Each - successive use displays its requested class of options, skipping - those that have already been displayed. - - If the '-Q' option appears on the command line before the '--help=' - option, then the descriptive text displayed by '--help=' is - changed. Instead of describing the displayed options, an - indication is given as to whether the option is enabled, disabled - or set to a specific value (assuming that the compiler knows this - at the point where the '--help=' option is used). - - Here is a truncated example from the ARM port of 'gcc': - - % gcc -Q -mabi=2 --help=target -c - The following options are target specific: - -mabi= 2 - -mabort-on-noreturn [disabled] - -mapcs [disabled] - - The output is sensitive to the effects of previous command-line - options, so for example it is possible to find out which - optimizations are enabled at '-O2' by using: - - -Q -O2 --help=optimizers - - Alternatively you can discover which binary optimizations are - enabled by '-O3' by using: - - gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts - gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts - diff /tmp/O2-opts /tmp/O3-opts | grep enabled - -'-no-canonical-prefixes' - Do not expand any symbolic links, resolve references to '/../' or - '/./', or make the path absolute when generating a relative prefix. - -'--version' - Display the version number and copyrights of the invoked GCC. - -'-wrapper' - Invoke all subcommands under a wrapper program. The name of the - wrapper program and its parameters are passed as a comma separated - list. - - gcc -c t.c -wrapper gdb,--args - - This invokes all subprograms of 'gcc' under 'gdb --args', thus the - invocation of 'cc1' is 'gdb --args cc1 ...'. - -'-fplugin=NAME.so' - Load the plugin code in file NAME.so, assumed to be a shared object - to be dlopen'd by the compiler. The base name of the shared object - file is used to identify the plugin for the purposes of argument - parsing (See '-fplugin-arg-NAME-KEY=VALUE' below). Each plugin - should define the callback functions specified in the Plugins API. - -'-fplugin-arg-NAME-KEY=VALUE' - Define an argument called KEY with a value of VALUE for the plugin - called NAME. - -'-fdump-ada-spec[-slim]' - For C and C++ source and include files, generate corresponding Ada - specs. *Note (gnat_ugn)Generating Ada Bindings for C and C++ - headers::, which provides detailed documentation on this feature. - -'-fada-spec-parent=UNIT' - In conjunction with '-fdump-ada-spec[-slim]' above, generate Ada - specs as child units of parent UNIT. - -'-fdump-go-spec=FILE' - For input files in any language, generate corresponding Go - declarations in FILE. This generates Go 'const', 'type', 'var', - and 'func' declarations which may be a useful way to start writing - a Go interface to code written in some other language. - -'@FILE' - Read command-line options from FILE. The options read are inserted - in place of the original @FILE option. If FILE does not exist, or - cannot be read, then the option will be treated literally, and not - removed. - - Options in FILE are separated by whitespace. A whitespace - character may be included in an option by surrounding the entire - option in either single or double quotes. Any character (including - a backslash) may be included by prefixing the character to be - included with a backslash. The FILE may itself contain additional - @FILE options; any such options will be processed recursively. - - -File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC - -3.3 Compiling C++ Programs -========================== - -C++ source files conventionally use one of the suffixes '.C', '.cc', -'.cpp', '.CPP', '.c++', '.cp', or '.cxx'; C++ header files often use -'.hh', '.hpp', '.H', or (for shared template code) '.tcc'; and -preprocessed C++ files use the suffix '.ii'. GCC recognizes files with -these names and compiles them as C++ programs even if you call the -compiler the same way as for compiling C programs (usually with the name -'gcc'). - - However, the use of 'gcc' does not add the C++ library. 'g++' is a -program that calls GCC and automatically specifies linking against the -C++ library. It treats '.c', '.h' and '.i' files as C++ source files -instead of C source files unless '-x' is used. This program is also -useful when precompiling a C header file with a '.h' extension for use -in C++ compilations. On many systems, 'g++' is also installed with the -name 'c++'. - - When you compile C++ programs, you may specify many of the same -command-line options that you use for compiling programs in any -language; or command-line options meaningful for C and related -languages; or options that are meaningful only for C++ programs. *Note -Options Controlling C Dialect: C Dialect Options, for explanations of -options for languages related to C. *Note Options Controlling C++ -Dialect: C++ Dialect Options, for explanations of options that are -meaningful only for C++ programs. - - -File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC - -3.4 Options Controlling C Dialect -================================= - -The following options control the dialect of C (or languages derived -from C, such as C++, Objective-C and Objective-C++) that the compiler -accepts: - -'-ansi' - In C mode, this is equivalent to '-std=c90'. In C++ mode, it is - equivalent to '-std=c++98'. - - This turns off certain features of GCC that are incompatible with - ISO C90 (when compiling C code), or of standard C++ (when compiling - C++ code), such as the 'asm' and 'typeof' keywords, and predefined - macros such as 'unix' and 'vax' that identify the type of system - you are using. It also enables the undesirable and rarely used ISO - trigraph feature. For the C compiler, it disables recognition of - C++ style '//' comments as well as the 'inline' keyword. - - The alternate keywords '__asm__', '__extension__', '__inline__' and - '__typeof__' continue to work despite '-ansi'. You would not want - to use them in an ISO C program, of course, but it is useful to put - them in header files that might be included in compilations done - with '-ansi'. Alternate predefined macros such as '__unix__' and - '__vax__' are also available, with or without '-ansi'. - - The '-ansi' option does not cause non-ISO programs to be rejected - gratuitously. For that, '-Wpedantic' is required in addition to - '-ansi'. *Note Warning Options::. - - The macro '__STRICT_ANSI__' is predefined when the '-ansi' option - is used. Some header files may notice this macro and refrain from - declaring certain functions or defining certain macros that the ISO - standard doesn't call for; this is to avoid interfering with any - programs that might use these names for other things. - - Functions that are normally built in but do not have semantics - defined by ISO C (such as 'alloca' and 'ffs') are not built-in - functions when '-ansi' is used. *Note Other built-in functions - provided by GCC: Other Builtins, for details of the functions - affected. - -'-std=' - Determine the language standard. *Note Language Standards - Supported by GCC: Standards, for details of these standard - versions. This option is currently only supported when compiling C - or C++. - - The compiler can accept several base standards, such as 'c90' or - 'c++98', and GNU dialects of those standards, such as 'gnu90' or - 'gnu++98'. When a base standard is specified, the compiler accepts - all programs following that standard plus those using GNU - extensions that do not contradict it. For example, '-std=c90' - turns off certain features of GCC that are incompatible with ISO - C90, such as the 'asm' and 'typeof' keywords, but not other GNU - extensions that do not have a meaning in ISO C90, such as omitting - the middle term of a '?:' expression. On the other hand, when a - GNU dialect of a standard is specified, all features supported by - the compiler are enabled, even when those features change the - meaning of the base standard. As a result, some strict-conforming - programs may be rejected. The particular standard is used by - '-Wpedantic' to identify which features are GNU extensions given - that version of the standard. For example '-std=gnu90 -Wpedantic' - warns about C++ style '//' comments, while '-std=gnu99 -Wpedantic' - does not. - - A value for this option must be provided; possible values are - - 'c90' - 'c89' - 'iso9899:1990' - Support all ISO C90 programs (certain GNU extensions that - conflict with ISO C90 are disabled). Same as '-ansi' for C - code. - - 'iso9899:199409' - ISO C90 as modified in amendment 1. - - 'c99' - 'c9x' - 'iso9899:1999' - 'iso9899:199x' - ISO C99. This standard is substantially completely supported, - modulo bugs, extended identifiers (supported except for corner - cases when '-fextended-identifiers' is used) and - floating-point issues (mainly but not entirely relating to - optional C99 features from Annexes F and G). See <http://gcc.gnu.org/c99status.html> - for more information. The names 'c9x' and 'iso9899:199x' are - deprecated. - - 'c11' - 'c1x' - 'iso9899:2011' - ISO C11, the 2011 revision of the ISO C standard. This - standard is substantially completely supported, modulo bugs, - extended identifiers (supported except for corner cases when - '-fextended-identifiers' is used), floating-point issues - (mainly but not entirely relating to optional C11 features - from Annexes F and G) and the optional Annexes K - (Bounds-checking interfaces) and L (Analyzability). The name - 'c1x' is deprecated. - - 'gnu90' - 'gnu89' - GNU dialect of ISO C90 (including some C99 features). This is - the default for C code. - - 'gnu99' - 'gnu9x' - GNU dialect of ISO C99. The name 'gnu9x' is deprecated. - - 'gnu11' - 'gnu1x' - GNU dialect of ISO C11. This is intended to become the - default in a future release of GCC. The name 'gnu1x' is - deprecated. - - 'c++98' - 'c++03' - The 1998 ISO C++ standard plus the 2003 technical corrigendum - and some additional defect reports. Same as '-ansi' for C++ - code. - - 'gnu++98' - 'gnu++03' - GNU dialect of '-std=c++98'. This is the default for C++ - code. - - 'c++11' - 'c++0x' - The 2011 ISO C++ standard plus amendments. The name 'c++0x' - is deprecated. - - 'gnu++11' - 'gnu++0x' - GNU dialect of '-std=c++11'. The name 'gnu++0x' is - deprecated. - - 'c++1y' - The next revision of the ISO C++ standard, tentatively planned - for 2014. Support is highly experimental, and will almost - certainly change in incompatible ways in future releases. - - 'gnu++1y' - GNU dialect of '-std=c++1y'. Support is highly experimental, - and will almost certainly change in incompatible ways in - future releases. - -'-fgnu89-inline' - The option '-fgnu89-inline' tells GCC to use the traditional GNU - semantics for 'inline' functions when in C99 mode. *Note An Inline - Function is As Fast As a Macro: Inline. This option is accepted - and ignored by GCC versions 4.1.3 up to but not including 4.3. In - GCC versions 4.3 and later it changes the behavior of GCC in C99 - mode. Using this option is roughly equivalent to adding the - 'gnu_inline' function attribute to all inline functions (*note - Function Attributes::). - - The option '-fno-gnu89-inline' explicitly tells GCC to use the C99 - semantics for 'inline' when in C99 or gnu99 mode (i.e., it - specifies the default behavior). This option was first supported - in GCC 4.3. This option is not supported in '-std=c90' or - '-std=gnu90' mode. - - The preprocessor macros '__GNUC_GNU_INLINE__' and - '__GNUC_STDC_INLINE__' may be used to check which semantics are in - effect for 'inline' functions. *Note (cpp)Common Predefined - Macros::. - -'-aux-info FILENAME' - Output to the given filename prototyped declarations for all - functions declared and/or defined in a translation unit, including - those in header files. This option is silently ignored in any - language other than C. - - Besides declarations, the file indicates, in comments, the origin - of each declaration (source file and line), whether the declaration - was implicit, prototyped or unprototyped ('I', 'N' for new or 'O' - for old, respectively, in the first character after the line number - and the colon), and whether it came from a declaration or a - definition ('C' or 'F', respectively, in the following character). - In the case of function definitions, a K&R-style list of arguments - followed by their declarations is also provided, inside comments, - after the declaration. - -'-fallow-parameterless-variadic-functions' - Accept variadic functions without named parameters. - - Although it is possible to define such a function, this is not very - useful as it is not possible to read the arguments. This is only - supported for C as this construct is allowed by C++. - -'-fno-asm' - Do not recognize 'asm', 'inline' or 'typeof' as a keyword, so that - code can use these words as identifiers. You can use the keywords - '__asm__', '__inline__' and '__typeof__' instead. '-ansi' implies - '-fno-asm'. - - In C++, this switch only affects the 'typeof' keyword, since 'asm' - and 'inline' are standard keywords. You may want to use the - '-fno-gnu-keywords' flag instead, which has the same effect. In - C99 mode ('-std=c99' or '-std=gnu99'), this switch only affects the - 'asm' and 'typeof' keywords, since 'inline' is a standard keyword - in ISO C99. - -'-fno-builtin' -'-fno-builtin-FUNCTION' - Don't recognize built-in functions that do not begin with - '__builtin_' as prefix. *Note Other built-in functions provided by - GCC: Other Builtins, for details of the functions affected, - including those which are not built-in functions when '-ansi' or - '-std' options for strict ISO C conformance are used because they - do not have an ISO standard meaning. - - GCC normally generates special code to handle certain built-in - functions more efficiently; for instance, calls to 'alloca' may - become single instructions which adjust the stack directly, and - calls to 'memcpy' may become inline copy loops. The resulting code - is often both smaller and faster, but since the function calls no - longer appear as such, you cannot set a breakpoint on those calls, - nor can you change the behavior of the functions by linking with a - different library. In addition, when a function is recognized as a - built-in function, GCC may use information about that function to - warn about problems with calls to that function, or to generate - more efficient code, even if the resulting code still contains - calls to that function. For example, warnings are given with - '-Wformat' for bad calls to 'printf' when 'printf' is built in and - 'strlen' is known not to modify global memory. - - With the '-fno-builtin-FUNCTION' option only the built-in function - FUNCTION is disabled. FUNCTION must not begin with '__builtin_'. - If a function is named that is not built-in in this version of GCC, - this option is ignored. There is no corresponding - '-fbuiltin-FUNCTION' option; if you wish to enable built-in - functions selectively when using '-fno-builtin' or - '-ffreestanding', you may define macros such as: - - #define abs(n) __builtin_abs ((n)) - #define strcpy(d, s) __builtin_strcpy ((d), (s)) - -'-fhosted' - - Assert that compilation targets a hosted environment. This implies - '-fbuiltin'. A hosted environment is one in which the entire - standard library is available, and in which 'main' has a return - type of 'int'. Examples are nearly everything except a kernel. - This is equivalent to '-fno-freestanding'. - -'-ffreestanding' - - Assert that compilation targets a freestanding environment. This - implies '-fno-builtin'. A freestanding environment is one in which - the standard library may not exist, and program startup may not - necessarily be at 'main'. The most obvious example is an OS - kernel. This is equivalent to '-fno-hosted'. - - *Note Language Standards Supported by GCC: Standards, for details - of freestanding and hosted environments. - -'-fopenmp' - Enable handling of OpenMP directives '#pragma omp' in C/C++ and - '!$omp' in Fortran. When '-fopenmp' is specified, the compiler - generates parallel code according to the OpenMP Application Program - Interface v4.0 <http://www.openmp.org/>. This option implies - '-pthread', and thus is only supported on targets that have support - for '-pthread'. '-fopenmp' implies '-fopenmp-simd'. - -'-fopenmp-simd' - Enable handling of OpenMP's SIMD directives with '#pragma omp' in - C/C++ and '!$omp' in Fortran. Other OpenMP directives are ignored. - -'-fcilkplus' - Enable the usage of Cilk Plus language extension features for - C/C++. When the option '-fcilkplus' is specified, enable the usage - of the Cilk Plus Language extension features for C/C++. The - present implementation follows ABI version 1.2. This is an - experimental feature that is only partially complete, and whose - interface may change in future versions of GCC as the official - specification changes. Currently, all features but '_Cilk_for' - have been implemented. - -'-fgnu-tm' - When the option '-fgnu-tm' is specified, the compiler generates - code for the Linux variant of Intel's current Transactional Memory - ABI specification document (Revision 1.1, May 6 2009). This is an - experimental feature whose interface may change in future versions - of GCC, as the official specification changes. Please note that - not all architectures are supported for this feature. - - For more information on GCC's support for transactional memory, - *Note The GNU Transactional Memory Library: (libitm)Enabling - libitm. - - Note that the transactional memory feature is not supported with - non-call exceptions ('-fnon-call-exceptions'). - -'-fms-extensions' - Accept some non-standard constructs used in Microsoft header files. - - In C++ code, this allows member names in structures to be similar - to previous types declarations. - - typedef int UOW; - struct ABC { - UOW UOW; - }; - - Some cases of unnamed fields in structures and unions are only - accepted with this option. *Note Unnamed struct/union fields - within structs/unions: Unnamed Fields, for details. - - Note that this option is off for all targets but i?86 and x86_64 - targets using ms-abi. -'-fplan9-extensions' - Accept some non-standard constructs used in Plan 9 code. - - This enables '-fms-extensions', permits passing pointers to - structures with anonymous fields to functions that expect pointers - to elements of the type of the field, and permits referring to - anonymous fields declared using a typedef. *Note Unnamed - struct/union fields within structs/unions: Unnamed Fields, for - details. This is only supported for C, not C++. - -'-trigraphs' - Support ISO C trigraphs. The '-ansi' option (and '-std' options - for strict ISO C conformance) implies '-trigraphs'. - -'-traditional' -'-traditional-cpp' - Formerly, these options caused GCC to attempt to emulate a - pre-standard C compiler. They are now only supported with the '-E' - switch. The preprocessor continues to support a pre-standard mode. - See the GNU CPP manual for details. - -'-fcond-mismatch' - Allow conditional expressions with mismatched types in the second - and third arguments. The value of such an expression is void. - This option is not supported for C++. - -'-flax-vector-conversions' - Allow implicit conversions between vectors with differing numbers - of elements and/or incompatible element types. This option should - not be used for new code. - -'-funsigned-char' - Let the type 'char' be unsigned, like 'unsigned char'. - - Each kind of machine has a default for what 'char' should be. It - is either like 'unsigned char' by default or like 'signed char' by - default. - - Ideally, a portable program should always use 'signed char' or - 'unsigned char' when it depends on the signedness of an object. - But many programs have been written to use plain 'char' and expect - it to be signed, or expect it to be unsigned, depending on the - machines they were written for. This option, and its inverse, let - you make such a program work with the opposite default. - - The type 'char' is always a distinct type from each of 'signed - char' or 'unsigned char', even though its behavior is always just - like one of those two. - -'-fsigned-char' - Let the type 'char' be signed, like 'signed char'. - - Note that this is equivalent to '-fno-unsigned-char', which is the - negative form of '-funsigned-char'. Likewise, the option - '-fno-signed-char' is equivalent to '-funsigned-char'. - -'-fsigned-bitfields' -'-funsigned-bitfields' -'-fno-signed-bitfields' -'-fno-unsigned-bitfields' - These options control whether a bit-field is signed or unsigned, - when the declaration does not use either 'signed' or 'unsigned'. - By default, such a bit-field is signed, because this is consistent: - the basic integer types such as 'int' are signed types. - - -File: gcc.info, Node: C++ Dialect Options, Next: Objective-C and Objective-C++ Dialect Options, Prev: C Dialect Options, Up: Invoking GCC - -3.5 Options Controlling C++ Dialect -=================================== - -This section describes the command-line options that are only meaningful -for C++ programs. You can also use most of the GNU compiler options -regardless of what language your program is in. For example, you might -compile a file 'firstClass.C' like this: - - g++ -g -frepo -O -c firstClass.C - -In this example, only '-frepo' is an option meant only for C++ programs; -you can use the other options with any language supported by GCC. - - Here is a list of options that are _only_ for compiling C++ programs: - -'-fabi-version=N' - Use version N of the C++ ABI. The default is version 2. - - Version 0 refers to the version conforming most closely to the C++ - ABI specification. Therefore, the ABI obtained using version 0 - will change in different versions of G++ as ABI bugs are fixed. - - Version 1 is the version of the C++ ABI that first appeared in G++ - 3.2. - - Version 2 is the version of the C++ ABI that first appeared in G++ - 3.4. - - Version 3 corrects an error in mangling a constant address as a - template argument. - - Version 4, which first appeared in G++ 4.5, implements a standard - mangling for vector types. - - Version 5, which first appeared in G++ 4.6, corrects the mangling - of attribute const/volatile on function pointer types, decltype of - a plain decl, and use of a function parameter in the declaration of - another parameter. - - Version 6, which first appeared in G++ 4.7, corrects the promotion - behavior of C++11 scoped enums and the mangling of template - argument packs, const/static_cast, prefix ++ and -, and a class - scope function used as a template argument. - - See also '-Wabi'. - -'-fno-access-control' - Turn off all access checking. This switch is mainly useful for - working around bugs in the access control code. - -'-fcheck-new' - Check that the pointer returned by 'operator new' is non-null - before attempting to modify the storage allocated. This check is - normally unnecessary because the C++ standard specifies that - 'operator new' only returns '0' if it is declared 'throw()', in - which case the compiler always checks the return value even without - this option. In all other cases, when 'operator new' has a - non-empty exception specification, memory exhaustion is signalled - by throwing 'std::bad_alloc'. See also 'new (nothrow)'. - -'-fconstexpr-depth=N' - Set the maximum nested evaluation depth for C++11 constexpr - functions to N. A limit is needed to detect endless recursion - during constant expression evaluation. The minimum specified by - the standard is 512. - -'-fdeduce-init-list' - Enable deduction of a template type parameter as - 'std::initializer_list' from a brace-enclosed initializer list, - i.e. - - template <class T> auto forward(T t) -> decltype (realfn (t)) - { - return realfn (t); - } - - void f() - { - forward({1,2}); // call forward<std::initializer_list<int>> - } - - This deduction was implemented as a possible extension to the - originally proposed semantics for the C++11 standard, but was not - part of the final standard, so it is disabled by default. This - option is deprecated, and may be removed in a future version of - G++. - -'-ffriend-injection' - Inject friend functions into the enclosing namespace, so that they - are visible outside the scope of the class in which they are - declared. Friend functions were documented to work this way in the - old Annotated C++ Reference Manual, and versions of G++ before 4.1 - always worked that way. However, in ISO C++ a friend function that - is not declared in an enclosing scope can only be found using - argument dependent lookup. This option causes friends to be - injected as they were in earlier releases. - - This option is for compatibility, and may be removed in a future - release of G++. - -'-fno-elide-constructors' - The C++ standard allows an implementation to omit creating a - temporary that is only used to initialize another object of the - same type. Specifying this option disables that optimization, and - forces G++ to call the copy constructor in all cases. - -'-fno-enforce-eh-specs' - Don't generate code to check for violation of exception - specifications at run time. This option violates the C++ standard, - but may be useful for reducing code size in production builds, much - like defining 'NDEBUG'. This does not give user code permission to - throw exceptions in violation of the exception specifications; the - compiler still optimizes based on the specifications, so throwing - an unexpected exception results in undefined behavior at run time. - -'-fextern-tls-init' -'-fno-extern-tls-init' - The C++11 and OpenMP standards allow 'thread_local' and - 'threadprivate' variables to have dynamic (runtime) initialization. - To support this, any use of such a variable goes through a wrapper - function that performs any necessary initialization. When the use - and definition of the variable are in the same translation unit, - this overhead can be optimized away, but when the use is in a - different translation unit there is significant overhead even if - the variable doesn't actually need dynamic initialization. If the - programmer can be sure that no use of the variable in a - non-defining TU needs to trigger dynamic initialization (either - because the variable is statically initialized, or a use of the - variable in the defining TU will be executed before any uses in - another TU), they can avoid this overhead with the - '-fno-extern-tls-init' option. - - On targets that support symbol aliases, the default is - '-fextern-tls-init'. On targets that do not support symbol - aliases, the default is '-fno-extern-tls-init'. - -'-ffor-scope' -'-fno-for-scope' - If '-ffor-scope' is specified, the scope of variables declared in a - for-init-statement is limited to the 'for' loop itself, as - specified by the C++ standard. If '-fno-for-scope' is specified, - the scope of variables declared in a for-init-statement extends to - the end of the enclosing scope, as was the case in old versions of - G++, and other (traditional) implementations of C++. - - If neither flag is given, the default is to follow the standard, - but to allow and give a warning for old-style code that would - otherwise be invalid, or have different behavior. - -'-fno-gnu-keywords' - Do not recognize 'typeof' as a keyword, so that code can use this - word as an identifier. You can use the keyword '__typeof__' - instead. '-ansi' implies '-fno-gnu-keywords'. - -'-fno-implicit-templates' - Never emit code for non-inline templates that are instantiated - implicitly (i.e. by use); only emit code for explicit - instantiations. *Note Template Instantiation::, for more - information. - -'-fno-implicit-inline-templates' - Don't emit code for implicit instantiations of inline templates, - either. The default is to handle inlines differently so that - compiles with and without optimization need the same set of - explicit instantiations. - -'-fno-implement-inlines' - To save space, do not emit out-of-line copies of inline functions - controlled by '#pragma implementation'. This causes linker errors - if these functions are not inlined everywhere they are called. - -'-fms-extensions' - Disable Wpedantic warnings about constructs used in MFC, such as - implicit int and getting a pointer to member function via - non-standard syntax. - -'-fno-nonansi-builtins' - Disable built-in declarations of functions that are not mandated by - ANSI/ISO C. These include 'ffs', 'alloca', '_exit', 'index', - 'bzero', 'conjf', and other related functions. - -'-fnothrow-opt' - Treat a 'throw()' exception specification as if it were a - 'noexcept' specification to reduce or eliminate the text size - overhead relative to a function with no exception specification. - If the function has local variables of types with non-trivial - destructors, the exception specification actually makes the - function smaller because the EH cleanups for those variables can be - optimized away. The semantic effect is that an exception thrown - out of a function with such an exception specification results in a - call to 'terminate' rather than 'unexpected'. - -'-fno-operator-names' - Do not treat the operator name keywords 'and', 'bitand', 'bitor', - 'compl', 'not', 'or' and 'xor' as synonyms as keywords. - -'-fno-optional-diags' - Disable diagnostics that the standard says a compiler does not need - to issue. Currently, the only such diagnostic issued by G++ is the - one for a name having multiple meanings within a class. - -'-fpermissive' - Downgrade some diagnostics about nonconformant code from errors to - warnings. Thus, using '-fpermissive' allows some nonconforming - code to compile. - -'-fno-pretty-templates' - When an error message refers to a specialization of a function - template, the compiler normally prints the signature of the - template followed by the template arguments and any typedefs or - typenames in the signature (e.g. 'void f(T) [with T = int]' rather - than 'void f(int)') so that it's clear which template is involved. - When an error message refers to a specialization of a class - template, the compiler omits any template arguments that match the - default template arguments for that template. If either of these - behaviors make it harder to understand the error message rather - than easier, you can use '-fno-pretty-templates' to disable them. - -'-frepo' - Enable automatic template instantiation at link time. This option - also implies '-fno-implicit-templates'. *Note Template - Instantiation::, for more information. - -'-fno-rtti' - Disable generation of information about every class with virtual - functions for use by the C++ run-time type identification features - ('dynamic_cast' and 'typeid'). If you don't use those parts of the - language, you can save some space by using this flag. Note that - exception handling uses the same information, but G++ generates it - as needed. The 'dynamic_cast' operator can still be used for casts - that do not require run-time type information, i.e. casts to 'void - *' or to unambiguous base classes. - -'-fstats' - Emit statistics about front-end processing at the end of the - compilation. This information is generally only useful to the G++ - development team. - -'-fstrict-enums' - Allow the compiler to optimize using the assumption that a value of - enumerated type can only be one of the values of the enumeration - (as defined in the C++ standard; basically, a value that can be - represented in the minimum number of bits needed to represent all - the enumerators). This assumption may not be valid if the program - uses a cast to convert an arbitrary integer value to the enumerated - type. - -'-ftemplate-backtrace-limit=N' - Set the maximum number of template instantiation notes for a single - warning or error to N. The default value is 10. - -'-ftemplate-depth=N' - Set the maximum instantiation depth for template classes to N. A - limit on the template instantiation depth is needed to detect - endless recursions during template class instantiation. ANSI/ISO - C++ conforming programs must not rely on a maximum depth greater - than 17 (changed to 1024 in C++11). The default value is 900, as - the compiler can run out of stack space before hitting 1024 in some - situations. - -'-fno-threadsafe-statics' - Do not emit the extra code to use the routines specified in the C++ - ABI for thread-safe initialization of local statics. You can use - this option to reduce code size slightly in code that doesn't need - to be thread-safe. - -'-fuse-cxa-atexit' - Register destructors for objects with static storage duration with - the '__cxa_atexit' function rather than the 'atexit' function. - This option is required for fully standards-compliant handling of - static destructors, but only works if your C library supports - '__cxa_atexit'. - -'-fno-use-cxa-get-exception-ptr' - Don't use the '__cxa_get_exception_ptr' runtime routine. This - causes 'std::uncaught_exception' to be incorrect, but is necessary - if the runtime routine is not available. - -'-fvisibility-inlines-hidden' - This switch declares that the user does not attempt to compare - pointers to inline functions or methods where the addresses of the - two functions are taken in different shared objects. - - The effect of this is that GCC may, effectively, mark inline - methods with '__attribute__ ((visibility ("hidden")))' so that they - do not appear in the export table of a DSO and do not require a PLT - indirection when used within the DSO. Enabling this option can - have a dramatic effect on load and link times of a DSO as it - massively reduces the size of the dynamic export table when the - library makes heavy use of templates. - - The behavior of this switch is not quite the same as marking the - methods as hidden directly, because it does not affect static - variables local to the function or cause the compiler to deduce - that the function is defined in only one shared object. - - You may mark a method as having a visibility explicitly to negate - the effect of the switch for that method. For example, if you do - want to compare pointers to a particular inline method, you might - mark it as having default visibility. Marking the enclosing class - with explicit visibility has no effect. - - Explicitly instantiated inline methods are unaffected by this - option as their linkage might otherwise cross a shared library - boundary. *Note Template Instantiation::. - -'-fvisibility-ms-compat' - This flag attempts to use visibility settings to make GCC's C++ - linkage model compatible with that of Microsoft Visual Studio. - - The flag makes these changes to GCC's linkage model: - - 1. It sets the default visibility to 'hidden', like - '-fvisibility=hidden'. - - 2. Types, but not their members, are not hidden by default. - - 3. The One Definition Rule is relaxed for types without explicit - visibility specifications that are defined in more than one - shared object: those declarations are permitted if they are - permitted when this option is not used. - - In new code it is better to use '-fvisibility=hidden' and export - those classes that are intended to be externally visible. - Unfortunately it is possible for code to rely, perhaps - accidentally, on the Visual Studio behavior. - - Among the consequences of these changes are that static data - members of the same type with the same name but defined in - different shared objects are different, so changing one does not - change the other; and that pointers to function members defined in - different shared objects may not compare equal. When this flag is - given, it is a violation of the ODR to define types with the same - name differently. - -'-fvtable-verify=STD|PREINIT|NONE' - Turn on (or off, if using '-fvtable-verify=none') the security - feature that verifies at runtime, for every virtual call that is - made, that the vtable pointer through which the call is made is - valid for the type of the object, and has not been corrupted or - overwritten. If an invalid vtable pointer is detected (at - runtime), an error is reported and execution of the program is - immediately halted. - - This option causes runtime data structures to be built, at program - start up, for verifying the vtable pointers. The options 'std' and - 'preinit' control the timing of when these data structures are - built. In both cases the data structures are built before - execution reaches 'main'. The '-fvtable-verify=std' causes these - data structure to be built after the shared libraries have been - loaded and initialized. '-fvtable-verify=preinit' causes them to - be built before the shared libraries have been loaded and - initialized. - - If this option appears multiple times in the compiler line, with - different values specified, 'none' will take highest priority over - both 'std' and 'preinit'; 'preinit' will take priority over 'std'. - -'-fvtv-debug' - Causes debug versions of the runtime functions for the vtable - verification feature to be called. This assumes the - '-fvtable-verify=std' or '-fvtable-verify=preinit' has been used. - This flag will also cause the compiler to keep track of which - vtable pointers it found for each class, and record that - information in the file "vtv_set_ptr_data.log", in the dump file - directory on the user's machine. - - Note: This feature APPENDS data to the log file. If you want a - fresh log file, be sure to delete any existing one. - -'-fvtv-counts' - This is a debugging flag. When used in conjunction with - '-fvtable-verify=std' or '-fvtable-verify=preinit', this causes the - compiler to keep track of the total number of virtual calls it - encountered and the number of verifications it inserted. It also - counts the number of calls to certain runtime library functions - that it inserts. This information, for each compilation unit, is - written to a file named "vtv_count_data.log", in the dump_file - directory on the user's machine. It also counts the size of the - vtable pointer sets for each class, and writes this information to - "vtv_class_set_sizes.log" in the same directory. - - Note: This feature APPENDS data to the log files. To get a fresh - log files, be sure to delete any existing ones. - -'-fno-weak' - Do not use weak symbol support, even if it is provided by the - linker. By default, G++ uses weak symbols if they are available. - This option exists only for testing, and should not be used by - end-users; it results in inferior code and has no benefits. This - option may be removed in a future release of G++. - -'-nostdinc++' - Do not search for header files in the standard directories specific - to C++, but do still search the other standard directories. (This - option is used when building the C++ library.) - - In addition, these optimization, warning, and code generation options -have meanings only for C++ programs: - -'-Wabi (C, Objective-C, C++ and Objective-C++ only)' - Warn when G++ generates code that is probably not compatible with - the vendor-neutral C++ ABI. Although an effort has been made to - warn about all such cases, there are probably some cases that are - not warned about, even though G++ is generating incompatible code. - There may also be cases where warnings are emitted even though the - code that is generated is compatible. - - You should rewrite your code to avoid these warnings if you are - concerned about the fact that code generated by G++ may not be - binary compatible with code generated by other compilers. - - The known incompatibilities in '-fabi-version=2' (the default) - include: - - * A template with a non-type template parameter of reference - type is mangled incorrectly: - extern int N; - template <int &> struct S {}; - void n (S<N>) {2} - - This is fixed in '-fabi-version=3'. - - * SIMD vector types declared using '__attribute ((vector_size))' - are mangled in a non-standard way that does not allow for - overloading of functions taking vectors of different sizes. - - The mangling is changed in '-fabi-version=4'. - - The known incompatibilities in '-fabi-version=1' include: - - * Incorrect handling of tail-padding for bit-fields. G++ may - attempt to pack data into the same byte as a base class. For - example: - - struct A { virtual void f(); int f1 : 1; }; - struct B : public A { int f2 : 1; }; - - In this case, G++ places 'B::f2' into the same byte as - 'A::f1'; other compilers do not. You can avoid this problem - by explicitly padding 'A' so that its size is a multiple of - the byte size on your platform; that causes G++ and other - compilers to lay out 'B' identically. - - * Incorrect handling of tail-padding for virtual bases. G++ - does not use tail padding when laying out virtual bases. For - example: - - struct A { virtual void f(); char c1; }; - struct B { B(); char c2; }; - struct C : public A, public virtual B {}; - - In this case, G++ does not place 'B' into the tail-padding for - 'A'; other compilers do. You can avoid this problem by - explicitly padding 'A' so that its size is a multiple of its - alignment (ignoring virtual base classes); that causes G++ and - other compilers to lay out 'C' identically. - - * Incorrect handling of bit-fields with declared widths greater - than that of their underlying types, when the bit-fields - appear in a union. For example: - - union U { int i : 4096; }; - - Assuming that an 'int' does not have 4096 bits, G++ makes the - union too small by the number of bits in an 'int'. - - * Empty classes can be placed at incorrect offsets. For - example: - - struct A {}; - - struct B { - A a; - virtual void f (); - }; - - struct C : public B, public A {}; - - G++ places the 'A' base class of 'C' at a nonzero offset; it - should be placed at offset zero. G++ mistakenly believes that - the 'A' data member of 'B' is already at offset zero. - - * Names of template functions whose types involve 'typename' or - template template parameters can be mangled incorrectly. - - template <typename Q> - void f(typename Q::X) {} - - template <template <typename> class Q> - void f(typename Q<int>::X) {} - - Instantiations of these templates may be mangled incorrectly. - - It also warns about psABI-related changes. The known psABI changes - at this point include: - - * For SysV/x86-64, unions with 'long double' members are passed - in memory as specified in psABI. For example: - - union U { - long double ld; - int i; - }; - - 'union U' is always passed in memory. - -'-Wctor-dtor-privacy (C++ and Objective-C++ only)' - Warn when a class seems unusable because all the constructors or - destructors in that class are private, and it has neither friends - nor public static member functions. Also warn if there are no - non-private methods, and there's at least one private member - function that isn't a constructor or destructor. - -'-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)' - Warn when 'delete' is used to destroy an instance of a class that - has virtual functions and non-virtual destructor. It is unsafe to - delete an instance of a derived class through a pointer to a base - class if the base class does not have a virtual destructor. This - warning is enabled by '-Wall'. - -'-Wliteral-suffix (C++ and Objective-C++ only)' - Warn when a string or character literal is followed by a ud-suffix - which does not begin with an underscore. As a conforming - extension, GCC treats such suffixes as separate preprocessing - tokens in order to maintain backwards compatibility with code that - uses formatting macros from '<inttypes.h>'. For example: - - #define __STDC_FORMAT_MACROS - #include <inttypes.h> - #include <stdio.h> - - int main() { - int64_t i64 = 123; - printf("My int64: %"PRId64"\n", i64); - } - - In this case, 'PRId64' is treated as a separate preprocessing - token. - - This warning is enabled by default. - -'-Wnarrowing (C++ and Objective-C++ only)' - Warn when a narrowing conversion prohibited by C++11 occurs within - '{ }', e.g. - - int i = { 2.2 }; // error: narrowing from double to int - - This flag is included in '-Wall' and '-Wc++11-compat'. - - With '-std=c++11', '-Wno-narrowing' suppresses the diagnostic - required by the standard. Note that this does not affect the - meaning of well-formed code; narrowing conversions are still - considered ill-formed in SFINAE context. - -'-Wnoexcept (C++ and Objective-C++ only)' - Warn when a noexcept-expression evaluates to false because of a - call to a function that does not have a non-throwing exception - specification (i.e. 'throw()' or 'noexcept') but is known by the - compiler to never throw an exception. - -'-Wnon-virtual-dtor (C++ and Objective-C++ only)' - Warn when a class has virtual functions and an accessible - non-virtual destructor itself or in an accessible polymorphic base - class, in which case it is possible but unsafe to delete an - instance of a derived class through a pointer to the class itself - or base class. This warning is automatically enabled if '-Weffc++' - is specified. - -'-Wreorder (C++ and Objective-C++ only)' - Warn when the order of member initializers given in the code does - not match the order in which they must be executed. For instance: - - struct A { - int i; - int j; - A(): j (0), i (1) { } - }; - - The compiler rearranges the member initializers for 'i' and 'j' to - match the declaration order of the members, emitting a warning to - that effect. This warning is enabled by '-Wall'. - -'-fext-numeric-literals (C++ and Objective-C++ only)' - Accept imaginary, fixed-point, or machine-defined literal number - suffixes as GNU extensions. When this option is turned off these - suffixes are treated as C++11 user-defined literal numeric - suffixes. This is on by default for all pre-C++11 dialects and all - GNU dialects: '-std=c++98', '-std=gnu++98', '-std=gnu++11', - '-std=gnu++1y'. This option is off by default for ISO C++11 - onwards ('-std=c++11', ...). - - The following '-W...' options are not affected by '-Wall'. - -'-Weffc++ (C++ and Objective-C++ only)' - Warn about violations of the following style guidelines from Scott - Meyers' 'Effective C++' series of books: - - * Define a copy constructor and an assignment operator for - classes with dynamically-allocated memory. - - * Prefer initialization to assignment in constructors. - - * Have 'operator=' return a reference to '*this'. - - * Don't try to return a reference when you must return an - object. - - * Distinguish between prefix and postfix forms of increment and - decrement operators. - - * Never overload '&&', '||', or ','. - - This option also enables '-Wnon-virtual-dtor', which is also one of - the effective C++ recommendations. However, the check is extended - to warn about the lack of virtual destructor in accessible - non-polymorphic bases classes too. - - When selecting this option, be aware that the standard library - headers do not obey all of these guidelines; use 'grep -v' to - filter out those warnings. - -'-Wstrict-null-sentinel (C++ and Objective-C++ only)' - Warn about the use of an uncasted 'NULL' as sentinel. When - compiling only with GCC this is a valid sentinel, as 'NULL' is - defined to '__null'. Although it is a null pointer constant rather - than a null pointer, it is guaranteed to be of the same size as a - pointer. But this use is not portable across different compilers. - -'-Wno-non-template-friend (C++ and Objective-C++ only)' - Disable warnings when non-templatized friend functions are declared - within a template. Since the advent of explicit template - specification support in G++, if the name of the friend is an - unqualified-id (i.e., 'friend foo(int)'), the C++ language - specification demands that the friend declare or define an - ordinary, nontemplate function. (Section 14.5.3). Before G++ - implemented explicit specification, unqualified-ids could be - interpreted as a particular specialization of a templatized - function. Because this non-conforming behavior is no longer the - default behavior for G++, '-Wnon-template-friend' allows the - compiler to check existing code for potential trouble spots and is - on by default. This new compiler behavior can be turned off with - '-Wno-non-template-friend', which keeps the conformant compiler - code but disables the helpful warning. - -'-Wold-style-cast (C++ and Objective-C++ only)' - Warn if an old-style (C-style) cast to a non-void type is used - within a C++ program. The new-style casts ('dynamic_cast', - 'static_cast', 'reinterpret_cast', and 'const_cast') are less - vulnerable to unintended effects and much easier to search for. - -'-Woverloaded-virtual (C++ and Objective-C++ only)' - Warn when a function declaration hides virtual functions from a - base class. For example, in: - - struct A { - virtual void f(); - }; - - struct B: public A { - void f(int); - }; - - the 'A' class version of 'f' is hidden in 'B', and code like: - - B* b; - b->f(); - - fails to compile. - -'-Wno-pmf-conversions (C++ and Objective-C++ only)' - Disable the diagnostic for converting a bound pointer to member - function to a plain pointer. - -'-Wsign-promo (C++ and Objective-C++ only)' - Warn when overload resolution chooses a promotion from unsigned or - enumerated type to a signed type, over a conversion to an unsigned - type of the same size. Previous versions of G++ tried to preserve - unsignedness, but the standard mandates the current behavior. - - -File: gcc.info, Node: Objective-C and Objective-C++ Dialect Options, Next: Language Independent Options, Prev: C++ Dialect Options, Up: Invoking GCC - -3.6 Options Controlling Objective-C and Objective-C++ Dialects -============================================================== - -(NOTE: This manual does not describe the Objective-C and Objective-C++ -languages themselves. *Note Language Standards Supported by GCC: -Standards, for references.) - - This section describes the command-line options that are only -meaningful for Objective-C and Objective-C++ programs. You can also use -most of the language-independent GNU compiler options. For example, you -might compile a file 'some_class.m' like this: - - gcc -g -fgnu-runtime -O -c some_class.m - -In this example, '-fgnu-runtime' is an option meant only for Objective-C -and Objective-C++ programs; you can use the other options with any -language supported by GCC. - - Note that since Objective-C is an extension of the C language, -Objective-C compilations may also use options specific to the C -front-end (e.g., '-Wtraditional'). Similarly, Objective-C++ -compilations may use C++-specific options (e.g., '-Wabi'). - - Here is a list of options that are _only_ for compiling Objective-C and -Objective-C++ programs: - -'-fconstant-string-class=CLASS-NAME' - Use CLASS-NAME as the name of the class to instantiate for each - literal string specified with the syntax '@"..."'. The default - class name is 'NXConstantString' if the GNU runtime is being used, - and 'NSConstantString' if the NeXT runtime is being used (see - below). The '-fconstant-cfstrings' option, if also present, - overrides the '-fconstant-string-class' setting and cause '@"..."' - literals to be laid out as constant CoreFoundation strings. - -'-fgnu-runtime' - Generate object code compatible with the standard GNU Objective-C - runtime. This is the default for most types of systems. - -'-fnext-runtime' - Generate output compatible with the NeXT runtime. This is the - default for NeXT-based systems, including Darwin and Mac OS X. The - macro '__NEXT_RUNTIME__' is predefined if (and only if) this option - is used. - -'-fno-nil-receivers' - Assume that all Objective-C message dispatches ('[receiver - message:arg]') in this translation unit ensure that the receiver is - not 'nil'. This allows for more efficient entry points in the - runtime to be used. This option is only available in conjunction - with the NeXT runtime and ABI version 0 or 1. - -'-fobjc-abi-version=N' - Use version N of the Objective-C ABI for the selected runtime. - This option is currently supported only for the NeXT runtime. In - that case, Version 0 is the traditional (32-bit) ABI without - support for properties and other Objective-C 2.0 additions. - Version 1 is the traditional (32-bit) ABI with support for - properties and other Objective-C 2.0 additions. Version 2 is the - modern (64-bit) ABI. If nothing is specified, the default is - Version 0 on 32-bit target machines, and Version 2 on 64-bit target - machines. - -'-fobjc-call-cxx-cdtors' - For each Objective-C class, check if any of its instance variables - is a C++ object with a non-trivial default constructor. If so, - synthesize a special '- (id) .cxx_construct' instance method which - runs non-trivial default constructors on any such instance - variables, in order, and then return 'self'. Similarly, check if - any instance variable is a C++ object with a non-trivial - destructor, and if so, synthesize a special '- (void) - .cxx_destruct' method which runs all such default destructors, in - reverse order. - - The '- (id) .cxx_construct' and '- (void) .cxx_destruct' methods - thusly generated only operate on instance variables declared in the - current Objective-C class, and not those inherited from - superclasses. It is the responsibility of the Objective-C runtime - to invoke all such methods in an object's inheritance hierarchy. - The '- (id) .cxx_construct' methods are invoked by the runtime - immediately after a new object instance is allocated; the '- (void) - .cxx_destruct' methods are invoked immediately before the runtime - deallocates an object instance. - - As of this writing, only the NeXT runtime on Mac OS X 10.4 and - later has support for invoking the '- (id) .cxx_construct' and '- - (void) .cxx_destruct' methods. - -'-fobjc-direct-dispatch' - Allow fast jumps to the message dispatcher. On Darwin this is - accomplished via the comm page. - -'-fobjc-exceptions' - Enable syntactic support for structured exception handling in - Objective-C, similar to what is offered by C++ and Java. This - option is required to use the Objective-C keywords '@try', - '@throw', '@catch', '@finally' and '@synchronized'. This option is - available with both the GNU runtime and the NeXT runtime (but not - available in conjunction with the NeXT runtime on Mac OS X 10.2 and - earlier). - -'-fobjc-gc' - Enable garbage collection (GC) in Objective-C and Objective-C++ - programs. This option is only available with the NeXT runtime; the - GNU runtime has a different garbage collection implementation that - does not require special compiler flags. - -'-fobjc-nilcheck' - For the NeXT runtime with version 2 of the ABI, check for a nil - receiver in method invocations before doing the actual method call. - This is the default and can be disabled using '-fno-objc-nilcheck'. - Class methods and super calls are never checked for nil in this way - no matter what this flag is set to. Currently this flag does - nothing when the GNU runtime, or an older version of the NeXT - runtime ABI, is used. - -'-fobjc-std=objc1' - Conform to the language syntax of Objective-C 1.0, the language - recognized by GCC 4.0. This only affects the Objective-C additions - to the C/C++ language; it does not affect conformance to C/C++ - standards, which is controlled by the separate C/C++ dialect option - flags. When this option is used with the Objective-C or - Objective-C++ compiler, any Objective-C syntax that is not - recognized by GCC 4.0 is rejected. This is useful if you need to - make sure that your Objective-C code can be compiled with older - versions of GCC. - -'-freplace-objc-classes' - Emit a special marker instructing 'ld(1)' not to statically link in - the resulting object file, and allow 'dyld(1)' to load it in at run - time instead. This is used in conjunction with the - Fix-and-Continue debugging mode, where the object file in question - may be recompiled and dynamically reloaded in the course of program - execution, without the need to restart the program itself. - Currently, Fix-and-Continue functionality is only available in - conjunction with the NeXT runtime on Mac OS X 10.3 and later. - -'-fzero-link' - When compiling for the NeXT runtime, the compiler ordinarily - replaces calls to 'objc_getClass("...")' (when the name of the - class is known at compile time) with static class references that - get initialized at load time, which improves run-time performance. - Specifying the '-fzero-link' flag suppresses this behavior and - causes calls to 'objc_getClass("...")' to be retained. This is - useful in Zero-Link debugging mode, since it allows for individual - class implementations to be modified during program execution. The - GNU runtime currently always retains calls to - 'objc_get_class("...")' regardless of command-line options. - -'-gen-decls' - Dump interface declarations for all classes seen in the source file - to a file named 'SOURCENAME.decl'. - -'-Wassign-intercept (Objective-C and Objective-C++ only)' - Warn whenever an Objective-C assignment is being intercepted by the - garbage collector. - -'-Wno-protocol (Objective-C and Objective-C++ only)' - If a class is declared to implement a protocol, a warning is issued - for every method in the protocol that is not implemented by the - class. The default behavior is to issue a warning for every method - not explicitly implemented in the class, even if a method - implementation is inherited from the superclass. If you use the - '-Wno-protocol' option, then methods inherited from the superclass - are considered to be implemented, and no warning is issued for - them. - -'-Wselector (Objective-C and Objective-C++ only)' - Warn if multiple methods of different types for the same selector - are found during compilation. The check is performed on the list - of methods in the final stage of compilation. Additionally, a - check is performed for each selector appearing in a - '@selector(...)' expression, and a corresponding method for that - selector has been found during compilation. Because these checks - scan the method table only at the end of compilation, these - warnings are not produced if the final stage of compilation is not - reached, for example because an error is found during compilation, - or because the '-fsyntax-only' option is being used. - -'-Wstrict-selector-match (Objective-C and Objective-C++ only)' - Warn if multiple methods with differing argument and/or return - types are found for a given selector when attempting to send a - message using this selector to a receiver of type 'id' or 'Class'. - When this flag is off (which is the default behavior), the compiler - omits such warnings if any differences found are confined to types - that share the same size and alignment. - -'-Wundeclared-selector (Objective-C and Objective-C++ only)' - Warn if a '@selector(...)' expression referring to an undeclared - selector is found. A selector is considered undeclared if no - method with that name has been declared before the '@selector(...)' - expression, either explicitly in an '@interface' or '@protocol' - declaration, or implicitly in an '@implementation' section. This - option always performs its checks as soon as a '@selector(...)' - expression is found, while '-Wselector' only performs its checks in - the final stage of compilation. This also enforces the coding - style convention that methods and selectors must be declared before - being used. - -'-print-objc-runtime-info' - Generate C header describing the largest structure that is passed - by value, if any. - - -File: gcc.info, Node: Language Independent Options, Next: Warning Options, Prev: Objective-C and Objective-C++ Dialect Options, Up: Invoking GCC - -3.7 Options to Control Diagnostic Messages Formatting -===================================================== - -Traditionally, diagnostic messages have been formatted irrespective of -the output device's aspect (e.g. its width, ...). You can use the -options described below to control the formatting algorithm for -diagnostic messages, e.g. how many characters per line, how often source -location information should be reported. Note that some language front -ends may not honor these options. - -'-fmessage-length=N' - Try to format error messages so that they fit on lines of about N - characters. The default is 72 characters for 'g++' and 0 for the - rest of the front ends supported by GCC. If N is zero, then no - line-wrapping is done; each error message appears on a single line. - -'-fdiagnostics-show-location=once' - Only meaningful in line-wrapping mode. Instructs the diagnostic - messages reporter to emit source location information _once_; that - is, in case the message is too long to fit on a single physical - line and has to be wrapped, the source location won't be emitted - (as prefix) again, over and over, in subsequent continuation lines. - This is the default behavior. - -'-fdiagnostics-show-location=every-line' - Only meaningful in line-wrapping mode. Instructs the diagnostic - messages reporter to emit the same source location information (as - prefix) for physical lines that result from the process of breaking - a message which is too long to fit on a single line. - -'-fdiagnostics-color[=WHEN]' -'-fno-diagnostics-color' - Use color in diagnostics. WHEN is 'never', 'always', or 'auto'. - The default is 'never' if 'GCC_COLORS' environment variable isn't - present in the environment, and 'auto' otherwise. 'auto' means to - use color only when the standard error is a terminal. The forms - '-fdiagnostics-color' and '-fno-diagnostics-color' are aliases for - '-fdiagnostics-color=always' and '-fdiagnostics-color=never', - respectively. - - The colors are defined by the environment variable 'GCC_COLORS'. - Its value is a colon-separated list of capabilities and Select - Graphic Rendition (SGR) substrings. SGR commands are interpreted - by the terminal or terminal emulator. (See the section in the - documentation of your text terminal for permitted values and their - meanings as character attributes.) These substring values are - integers in decimal representation and can be concatenated with - semicolons. Common values to concatenate include '1' for bold, '4' - for underline, '5' for blink, '7' for inverse, '39' for default - foreground color, '30' to '37' for foreground colors, '90' to '97' - for 16-color mode foreground colors, '38;5;0' to '38;5;255' for - 88-color and 256-color modes foreground colors, '49' for default - background color, '40' to '47' for background colors, '100' to - '107' for 16-color mode background colors, and '48;5;0' to - '48;5;255' for 88-color and 256-color modes background colors. - - The default 'GCC_COLORS' is - 'error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' - where '01;31' is bold red, '01;35' is bold magenta, '01;36' is bold - cyan, '01;32' is bold green and '01' is bold. Setting 'GCC_COLORS' - to the empty string disables colors. Supported capabilities are as - follows. - - 'error=' - SGR substring for error: markers. - - 'warning=' - SGR substring for warning: markers. - - 'note=' - SGR substring for note: markers. - - 'caret=' - SGR substring for caret line. - - 'locus=' - SGR substring for location information, 'file:line' or - 'file:line:column' etc. - - 'quote=' - SGR substring for information printed within quotes. - -'-fno-diagnostics-show-option' - By default, each diagnostic emitted includes text indicating the - command-line option that directly controls the diagnostic (if such - an option is known to the diagnostic machinery). Specifying the - '-fno-diagnostics-show-option' flag suppresses that behavior. - -'-fno-diagnostics-show-caret' - By default, each diagnostic emitted includes the original source - line and a caret '^' indicating the column. This option suppresses - this information. - - -File: gcc.info, Node: Warning Options, Next: Debugging Options, Prev: Language Independent Options, Up: Invoking GCC - -3.8 Options to Request or Suppress Warnings -=========================================== - -Warnings are diagnostic messages that report constructions that are not -inherently erroneous but that are risky or suggest there may have been -an error. - - The following language-independent options do not enable specific -warnings but control the kinds of diagnostics produced by GCC. - -'-fsyntax-only' - Check the code for syntax errors, but don't do anything beyond - that. - -'-fmax-errors=N' - Limits the maximum number of error messages to N, at which point - GCC bails out rather than attempting to continue processing the - source code. If N is 0 (the default), there is no limit on the - number of error messages produced. If '-Wfatal-errors' is also - specified, then '-Wfatal-errors' takes precedence over this option. - -'-w' - Inhibit all warning messages. - -'-Werror' - Make all warnings into errors. - -'-Werror=' - Make the specified warning into an error. The specifier for a - warning is appended; for example '-Werror=switch' turns the - warnings controlled by '-Wswitch' into errors. This switch takes a - negative form, to be used to negate '-Werror' for specific - warnings; for example '-Wno-error=switch' makes '-Wswitch' warnings - not be errors, even when '-Werror' is in effect. - - The warning message for each controllable warning includes the - option that controls the warning. That option can then be used - with '-Werror=' and '-Wno-error=' as described above. (Printing of - the option in the warning message can be disabled using the - '-fno-diagnostics-show-option' flag.) - - Note that specifying '-Werror='FOO automatically implies '-W'FOO. - However, '-Wno-error='FOO does not imply anything. - -'-Wfatal-errors' - This option causes the compiler to abort compilation on the first - error occurred rather than trying to keep going and printing - further error messages. - - You can request many specific warnings with options beginning with -'-W', for example '-Wimplicit' to request warnings on implicit -declarations. Each of these specific warning options also has a -negative form beginning '-Wno-' to turn off warnings; for example, -'-Wno-implicit'. This manual lists only one of the two forms, whichever -is not the default. For further language-specific options also refer to -*note C++ Dialect Options:: and *note Objective-C and Objective-C++ -Dialect Options::. - - When an unrecognized warning option is requested (e.g., -'-Wunknown-warning'), GCC emits a diagnostic stating that the option is -not recognized. However, if the '-Wno-' form is used, the behavior is -slightly different: no diagnostic is produced for '-Wno-unknown-warning' -unless other diagnostics are being produced. This allows the use of new -'-Wno-' options with old compilers, but if something goes wrong, the -compiler warns that an unrecognized option is present. - -'-Wpedantic' -'-pedantic' - Issue all the warnings demanded by strict ISO C and ISO C++; reject - all programs that use forbidden extensions, and some other programs - that do not follow ISO C and ISO C++. For ISO C, follows the - version of the ISO C standard specified by any '-std' option used. - - Valid ISO C and ISO C++ programs should compile properly with or - without this option (though a rare few require '-ansi' or a '-std' - option specifying the required version of ISO C). However, without - this option, certain GNU extensions and traditional C and C++ - features are supported as well. With this option, they are - rejected. - - '-Wpedantic' does not cause warning messages for use of the - alternate keywords whose names begin and end with '__'. Pedantic - warnings are also disabled in the expression that follows - '__extension__'. However, only system header files should use - these escape routes; application programs should avoid them. *Note - Alternate Keywords::. - - Some users try to use '-Wpedantic' to check programs for strict ISO - C conformance. They soon find that it does not do quite what they - want: it finds some non-ISO practices, but not all--only those for - which ISO C _requires_ a diagnostic, and some others for which - diagnostics have been added. - - A feature to report any failure to conform to ISO C might be useful - in some instances, but would require considerable additional work - and would be quite different from '-Wpedantic'. We don't have - plans to support such a feature in the near future. - - Where the standard specified with '-std' represents a GNU extended - dialect of C, such as 'gnu90' or 'gnu99', there is a corresponding - "base standard", the version of ISO C on which the GNU extended - dialect is based. Warnings from '-Wpedantic' are given where they - are required by the base standard. (It does not make sense for - such warnings to be given only for features not in the specified - GNU C dialect, since by definition the GNU dialects of C include - all features the compiler supports with the given option, and there - would be nothing to warn about.) - -'-pedantic-errors' - Like '-Wpedantic', except that errors are produced rather than - warnings. - -'-Wall' - This enables all the warnings about constructions that some users - consider questionable, and that are easy to avoid (or modify to - prevent the warning), even in conjunction with macros. This also - enables some language-specific warnings described in *note C++ - Dialect Options:: and *note Objective-C and Objective-C++ Dialect - Options::. - - '-Wall' turns on the following warning flags: - - -Waddress - -Warray-bounds (only with -O2) - -Wc++11-compat - -Wchar-subscripts - -Wenum-compare (in C/ObjC; this is on by default in C++) - -Wimplicit-int (C and Objective-C only) - -Wimplicit-function-declaration (C and Objective-C only) - -Wcomment - -Wformat - -Wmain (only for C/ObjC and unless -ffreestanding) - -Wmaybe-uninitialized - -Wmissing-braces (only for C/ObjC) - -Wnonnull - -Wopenmp-simd - -Wparentheses - -Wpointer-sign - -Wreorder - -Wreturn-type - -Wsequence-point - -Wsign-compare (only in C++) - -Wstrict-aliasing - -Wstrict-overflow=1 - -Wswitch - -Wtrigraphs - -Wuninitialized - -Wunknown-pragmas - -Wunused-function - -Wunused-label - -Wunused-value - -Wunused-variable - -Wvolatile-register-var - - Note that some warning flags are not implied by '-Wall'. Some of - them warn about constructions that users generally do not consider - questionable, but which occasionally you might wish to check for; - others warn about constructions that are necessary or hard to avoid - in some cases, and there is no simple way to modify the code to - suppress the warning. Some of them are enabled by '-Wextra' but - many of them must be enabled individually. - -'-Wextra' - This enables some extra warning flags that are not enabled by - '-Wall'. (This option used to be called '-W'. The older name is - still supported, but the newer name is more descriptive.) - - -Wclobbered - -Wempty-body - -Wignored-qualifiers - -Wmissing-field-initializers - -Wmissing-parameter-type (C only) - -Wold-style-declaration (C only) - -Woverride-init - -Wsign-compare - -Wtype-limits - -Wuninitialized - -Wunused-parameter (only with -Wunused or -Wall) - -Wunused-but-set-parameter (only with -Wunused or -Wall) - - The option '-Wextra' also prints warning messages for the following - cases: - - * A pointer is compared against integer zero with '<', '<=', - '>', or '>='. - - * (C++ only) An enumerator and a non-enumerator both appear in a - conditional expression. - - * (C++ only) Ambiguous virtual bases. - - * (C++ only) Subscripting an array that has been declared - 'register'. - - * (C++ only) Taking the address of a variable that has been - declared 'register'. - - * (C++ only) A base class is not initialized in a derived - class's copy constructor. - -'-Wchar-subscripts' - Warn if an array subscript has type 'char'. This is a common cause - of error, as programmers often forget that this type is signed on - some machines. This warning is enabled by '-Wall'. - -'-Wcomment' - Warn whenever a comment-start sequence '/*' appears in a '/*' - comment, or whenever a Backslash-Newline appears in a '//' comment. - This warning is enabled by '-Wall'. - -'-Wno-coverage-mismatch' - Warn if feedback profiles do not match when using the - '-fprofile-use' option. If a source file is changed between - compiling with '-fprofile-gen' and with '-fprofile-use', the files - with the profile feedback can fail to match the source file and GCC - cannot use the profile feedback information. By default, this - warning is enabled and is treated as an error. - '-Wno-coverage-mismatch' can be used to disable the warning or - '-Wno-error=coverage-mismatch' can be used to disable the error. - Disabling the error for this warning can result in poorly optimized - code and is useful only in the case of very minor changes such as - bug fixes to an existing code-base. Completely disabling the - warning is not recommended. - -'-Wno-cpp' - (C, Objective-C, C++, Objective-C++ and Fortran only) - - Suppress warning messages emitted by '#warning' directives. - -'-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)' - Give a warning when a value of type 'float' is implicitly promoted - to 'double'. CPUs with a 32-bit "single-precision" floating-point - unit implement 'float' in hardware, but emulate 'double' in - software. On such a machine, doing computations using 'double' - values is much more expensive because of the overhead required for - software emulation. - - It is easy to accidentally do computations with 'double' because - floating-point literals are implicitly of type 'double'. For - example, in: - float area(float radius) - { - return 3.14159 * radius * radius; - } - the compiler performs the entire computation with 'double' because - the floating-point literal is a 'double'. - -'-Wformat' -'-Wformat=N' - Check calls to 'printf' and 'scanf', etc., to make sure that the - arguments supplied have types appropriate to the format string - specified, and that the conversions specified in the format string - make sense. This includes standard functions, and others specified - by format attributes (*note Function Attributes::), in the - 'printf', 'scanf', 'strftime' and 'strfmon' (an X/Open extension, - not in the C standard) families (or other target-specific - families). Which functions are checked without format attributes - having been specified depends on the standard version selected, and - such checks of functions without the attribute specified are - disabled by '-ffreestanding' or '-fno-builtin'. - - The formats are checked against the format features supported by - GNU libc version 2.2. These include all ISO C90 and C99 features, - as well as features from the Single Unix Specification and some BSD - and GNU extensions. Other library implementations may not support - all these features; GCC does not support warning about features - that go beyond a particular library's limitations. However, if - '-Wpedantic' is used with '-Wformat', warnings are given about - format features not in the selected standard version (but not for - 'strfmon' formats, since those are not in any version of the C - standard). *Note Options Controlling C Dialect: C Dialect Options. - - '-Wformat=1' - '-Wformat' - Option '-Wformat' is equivalent to '-Wformat=1', and - '-Wno-format' is equivalent to '-Wformat=0'. Since '-Wformat' - also checks for null format arguments for several functions, - '-Wformat' also implies '-Wnonnull'. Some aspects of this - level of format checking can be disabled by the options: - '-Wno-format-contains-nul', '-Wno-format-extra-args', and - '-Wno-format-zero-length'. '-Wformat' is enabled by '-Wall'. - - '-Wno-format-contains-nul' - If '-Wformat' is specified, do not warn about format strings - that contain NUL bytes. - - '-Wno-format-extra-args' - If '-Wformat' is specified, do not warn about excess arguments - to a 'printf' or 'scanf' format function. The C standard - specifies that such arguments are ignored. - - Where the unused arguments lie between used arguments that are - specified with '$' operand number specifications, normally - warnings are still given, since the implementation could not - know what type to pass to 'va_arg' to skip the unused - arguments. However, in the case of 'scanf' formats, this - option suppresses the warning if the unused arguments are all - pointers, since the Single Unix Specification says that such - unused arguments are allowed. - - '-Wno-format-zero-length' - If '-Wformat' is specified, do not warn about zero-length - formats. The C standard specifies that zero-length formats - are allowed. - - '-Wformat=2' - Enable '-Wformat' plus additional format checks. Currently - equivalent to '-Wformat -Wformat-nonliteral -Wformat-security - -Wformat-y2k'. - - '-Wformat-nonliteral' - If '-Wformat' is specified, also warn if the format string is - not a string literal and so cannot be checked, unless the - format function takes its format arguments as a 'va_list'. - - '-Wformat-security' - If '-Wformat' is specified, also warn about uses of format - functions that represent possible security problems. At - present, this warns about calls to 'printf' and 'scanf' - functions where the format string is not a string literal and - there are no format arguments, as in 'printf (foo);'. This - may be a security hole if the format string came from - untrusted input and contains '%n'. (This is currently a - subset of what '-Wformat-nonliteral' warns about, but in - future warnings may be added to '-Wformat-security' that are - not included in '-Wformat-nonliteral'.) - - '-Wformat-y2k' - If '-Wformat' is specified, also warn about 'strftime' formats - that may yield only a two-digit year. - -'-Wnonnull' - Warn about passing a null pointer for arguments marked as requiring - a non-null value by the 'nonnull' function attribute. - - '-Wnonnull' is included in '-Wall' and '-Wformat'. It can be - disabled with the '-Wno-nonnull' option. - -'-Winit-self (C, C++, Objective-C and Objective-C++ only)' - Warn about uninitialized variables that are initialized with - themselves. Note this option can only be used with the - '-Wuninitialized' option. - - For example, GCC warns about 'i' being uninitialized in the - following snippet only when '-Winit-self' has been specified: - int f() - { - int i = i; - return i; - } - - This warning is enabled by '-Wall' in C++. - -'-Wimplicit-int (C and Objective-C only)' - Warn when a declaration does not specify a type. This warning is - enabled by '-Wall'. - -'-Wimplicit-function-declaration (C and Objective-C only)' - Give a warning whenever a function is used before being declared. - In C99 mode ('-std=c99' or '-std=gnu99'), this warning is enabled - by default and it is made into an error by '-pedantic-errors'. - This warning is also enabled by '-Wall'. - -'-Wimplicit (C and Objective-C only)' - Same as '-Wimplicit-int' and '-Wimplicit-function-declaration'. - This warning is enabled by '-Wall'. - -'-Wignored-qualifiers (C and C++ only)' - Warn if the return type of a function has a type qualifier such as - 'const'. For ISO C such a type qualifier has no effect, since the - value returned by a function is not an lvalue. For C++, the - warning is only emitted for scalar types or 'void'. ISO C - prohibits qualified 'void' return types on function definitions, so - such return types always receive a warning even without this - option. - - This warning is also enabled by '-Wextra'. - -'-Wmain' - Warn if the type of 'main' is suspicious. 'main' should be a - function with external linkage, returning int, taking either zero - arguments, two, or three arguments of appropriate types. This - warning is enabled by default in C++ and is enabled by either - '-Wall' or '-Wpedantic'. - -'-Wmissing-braces' - Warn if an aggregate or union initializer is not fully bracketed. - In the following example, the initializer for 'a' is not fully - bracketed, but that for 'b' is fully bracketed. This warning is - enabled by '-Wall' in C. - - int a[2][2] = { 0, 1, 2, 3 }; - int b[2][2] = { { 0, 1 }, { 2, 3 } }; - - This warning is enabled by '-Wall'. - -'-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)' - Warn if a user-supplied include directory does not exist. - -'-Wparentheses' - Warn if parentheses are omitted in certain contexts, such as when - there is an assignment in a context where a truth value is - expected, or when operators are nested whose precedence people - often get confused about. - - Also warn if a comparison like 'x<=y<=z' appears; this is - equivalent to '(x<=y ? 1 : 0) <= z', which is a different - interpretation from that of ordinary mathematical notation. - - Also warn about constructions where there may be confusion to which - 'if' statement an 'else' branch belongs. Here is an example of - such a case: - - { - if (a) - if (b) - foo (); - else - bar (); - } - - In C/C++, every 'else' branch belongs to the innermost possible - 'if' statement, which in this example is 'if (b)'. This is often - not what the programmer expected, as illustrated in the above - example by indentation the programmer chose. When there is the - potential for this confusion, GCC issues a warning when this flag - is specified. To eliminate the warning, add explicit braces around - the innermost 'if' statement so there is no way the 'else' can - belong to the enclosing 'if'. The resulting code looks like this: - - { - if (a) - { - if (b) - foo (); - else - bar (); - } - } - - Also warn for dangerous uses of the GNU extension to '?:' with - omitted middle operand. When the condition in the '?': operator is - a boolean expression, the omitted value is always 1. Often - programmers expect it to be a value computed inside the conditional - expression instead. - - This warning is enabled by '-Wall'. - -'-Wsequence-point' - Warn about code that may have undefined semantics because of - violations of sequence point rules in the C and C++ standards. - - The C and C++ standards define the order in which expressions in a - C/C++ program are evaluated in terms of "sequence points", which - represent a partial ordering between the execution of parts of the - program: those executed before the sequence point, and those - executed after it. These occur after the evaluation of a full - expression (one which is not part of a larger expression), after - the evaluation of the first operand of a '&&', '||', '? :' or ',' - (comma) operator, before a function is called (but after the - evaluation of its arguments and the expression denoting the called - function), and in certain other places. Other than as expressed by - the sequence point rules, the order of evaluation of subexpressions - of an expression is not specified. All these rules describe only a - partial order rather than a total order, since, for example, if two - functions are called within one expression with no sequence point - between them, the order in which the functions are called is not - specified. However, the standards committee have ruled that - function calls do not overlap. - - It is not specified when between sequence points modifications to - the values of objects take effect. Programs whose behavior depends - on this have undefined behavior; the C and C++ standards specify - that "Between the previous and next sequence point an object shall - have its stored value modified at most once by the evaluation of an - expression. Furthermore, the prior value shall be read only to - determine the value to be stored.". If a program breaks these - rules, the results on any particular implementation are entirely - unpredictable. - - Examples of code with undefined behavior are 'a = a++;', 'a[n] = - b[n++]' and 'a[i++] = i;'. Some more complicated cases are not - diagnosed by this option, and it may give an occasional false - positive result, but in general it has been found fairly effective - at detecting this sort of problem in programs. - - The standard is worded confusingly, therefore there is some debate - over the precise meaning of the sequence point rules in subtle - cases. Links to discussions of the problem, including proposed - formal definitions, may be found on the GCC readings page, at - <http://gcc.gnu.org/readings.html>. - - This warning is enabled by '-Wall' for C and C++. - -'-Wno-return-local-addr' - Do not warn about returning a pointer (or in C++, a reference) to a - variable that goes out of scope after the function returns. - -'-Wreturn-type' - Warn whenever a function is defined with a return type that - defaults to 'int'. Also warn about any 'return' statement with no - return value in a function whose return type is not 'void' (falling - off the end of the function body is considered returning without a - value), and about a 'return' statement with an expression in a - function whose return type is 'void'. - - For C++, a function without return type always produces a - diagnostic message, even when '-Wno-return-type' is specified. The - only exceptions are 'main' and functions defined in system headers. - - This warning is enabled by '-Wall'. - -'-Wswitch' - Warn whenever a 'switch' statement has an index of enumerated type - and lacks a 'case' for one or more of the named codes of that - enumeration. (The presence of a 'default' label prevents this - warning.) 'case' labels outside the enumeration range also provoke - warnings when this option is used (even if there is a 'default' - label). This warning is enabled by '-Wall'. - -'-Wswitch-default' - Warn whenever a 'switch' statement does not have a 'default' case. - -'-Wswitch-enum' - Warn whenever a 'switch' statement has an index of enumerated type - and lacks a 'case' for one or more of the named codes of that - enumeration. 'case' labels outside the enumeration range also - provoke warnings when this option is used. The only difference - between '-Wswitch' and this option is that this option gives a - warning about an omitted enumeration code even if there is a - 'default' label. - -'-Wsync-nand (C and C++ only)' - Warn when '__sync_fetch_and_nand' and '__sync_nand_and_fetch' - built-in functions are used. These functions changed semantics in - GCC 4.4. - -'-Wtrigraphs' - Warn if any trigraphs are encountered that might change the meaning - of the program (trigraphs within comments are not warned about). - This warning is enabled by '-Wall'. - -'-Wunused-but-set-parameter' - Warn whenever a function parameter is assigned to, but otherwise - unused (aside from its declaration). - - To suppress this warning use the 'unused' attribute (*note Variable - Attributes::). - - This warning is also enabled by '-Wunused' together with '-Wextra'. - -'-Wunused-but-set-variable' - Warn whenever a local variable is assigned to, but otherwise unused - (aside from its declaration). This warning is enabled by '-Wall'. - - To suppress this warning use the 'unused' attribute (*note Variable - Attributes::). - - This warning is also enabled by '-Wunused', which is enabled by - '-Wall'. - -'-Wunused-function' - Warn whenever a static function is declared but not defined or a - non-inline static function is unused. This warning is enabled by - '-Wall'. - -'-Wunused-label' - Warn whenever a label is declared but not used. This warning is - enabled by '-Wall'. - - To suppress this warning use the 'unused' attribute (*note Variable - Attributes::). - -'-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)' - Warn when a typedef locally defined in a function is not used. - This warning is enabled by '-Wall'. - -'-Wunused-parameter' - Warn whenever a function parameter is unused aside from its - declaration. - - To suppress this warning use the 'unused' attribute (*note Variable - Attributes::). - -'-Wno-unused-result' - Do not warn if a caller of a function marked with attribute - 'warn_unused_result' (*note Function Attributes::) does not use its - return value. The default is '-Wunused-result'. - -'-Wunused-variable' - Warn whenever a local variable or non-constant static variable is - unused aside from its declaration. This warning is enabled by - '-Wall'. - - To suppress this warning use the 'unused' attribute (*note Variable - Attributes::). - -'-Wunused-value' - Warn whenever a statement computes a result that is explicitly not - used. To suppress this warning cast the unused expression to - 'void'. This includes an expression-statement or the left-hand - side of a comma expression that contains no side effects. For - example, an expression such as 'x[i,j]' causes a warning, while - 'x[(void)i,j]' does not. - - This warning is enabled by '-Wall'. - -'-Wunused' - All the above '-Wunused' options combined. - - In order to get a warning about an unused function parameter, you - must either specify '-Wextra -Wunused' (note that '-Wall' implies - '-Wunused'), or separately specify '-Wunused-parameter'. - -'-Wuninitialized' - Warn if an automatic variable is used without first being - initialized or if a variable may be clobbered by a 'setjmp' call. - In C++, warn if a non-static reference or non-static 'const' member - appears in a class without constructors. - - If you want to warn about code that uses the uninitialized value of - the variable in its own initializer, use the '-Winit-self' option. - - These warnings occur for individual uninitialized or clobbered - elements of structure, union or array variables as well as for - variables that are uninitialized or clobbered as a whole. They do - not occur for variables or elements declared 'volatile'. Because - these warnings depend on optimization, the exact variables or - elements for which there are warnings depends on the precise - optimization options and version of GCC used. - - Note that there may be no warning about a variable that is used - only to compute a value that itself is never used, because such - computations may be deleted by data flow analysis before the - warnings are printed. - -'-Wmaybe-uninitialized' - For an automatic variable, if there exists a path from the function - entry to a use of the variable that is initialized, but there exist - some other paths for which the variable is not initialized, the - compiler emits a warning if it cannot prove the uninitialized paths - are not executed at run time. These warnings are made optional - because GCC is not smart enough to see all the reasons why the code - might be correct in spite of appearing to have an error. Here is - one example of how this can happen: - - { - int x; - switch (y) - { - case 1: x = 1; - break; - case 2: x = 4; - break; - case 3: x = 5; - } - foo (x); - } - - If the value of 'y' is always 1, 2 or 3, then 'x' is always - initialized, but GCC doesn't know this. To suppress the warning, - you need to provide a default case with assert(0) or similar code. - - This option also warns when a non-volatile automatic variable might - be changed by a call to 'longjmp'. These warnings as well are - possible only in optimizing compilation. - - The compiler sees only the calls to 'setjmp'. It cannot know where - 'longjmp' will be called; in fact, a signal handler could call it - at any point in the code. As a result, you may get a warning even - when there is in fact no problem because 'longjmp' cannot in fact - be called at the place that would cause a problem. - - Some spurious warnings can be avoided if you declare all the - functions you use that never return as 'noreturn'. *Note Function - Attributes::. - - This warning is enabled by '-Wall' or '-Wextra'. - -'-Wunknown-pragmas' - Warn when a '#pragma' directive is encountered that is not - understood by GCC. If this command-line option is used, warnings - are even issued for unknown pragmas in system header files. This - is not the case if the warnings are only enabled by the '-Wall' - command-line option. - -'-Wno-pragmas' - Do not warn about misuses of pragmas, such as incorrect parameters, - invalid syntax, or conflicts between pragmas. See also - '-Wunknown-pragmas'. - -'-Wstrict-aliasing' - This option is only active when '-fstrict-aliasing' is active. It - warns about code that might break the strict aliasing rules that - the compiler is using for optimization. The warning does not catch - all cases, but does attempt to catch the more common pitfalls. It - is included in '-Wall'. It is equivalent to '-Wstrict-aliasing=3' - -'-Wstrict-aliasing=n' - This option is only active when '-fstrict-aliasing' is active. It - warns about code that might break the strict aliasing rules that - the compiler is using for optimization. Higher levels correspond - to higher accuracy (fewer false positives). Higher levels also - correspond to more effort, similar to the way '-O' works. - '-Wstrict-aliasing' is equivalent to '-Wstrict-aliasing=3'. - - Level 1: Most aggressive, quick, least accurate. Possibly useful - when higher levels do not warn but '-fstrict-aliasing' still breaks - the code, as it has very few false negatives. However, it has many - false positives. Warns for all pointer conversions between - possibly incompatible types, even if never dereferenced. Runs in - the front end only. - - Level 2: Aggressive, quick, not too precise. May still have many - false positives (not as many as level 1 though), and few false - negatives (but possibly more than level 1). Unlike level 1, it - only warns when an address is taken. Warns about incomplete types. - Runs in the front end only. - - Level 3 (default for '-Wstrict-aliasing'): Should have very few - false positives and few false negatives. Slightly slower than - levels 1 or 2 when optimization is enabled. Takes care of the - common pun+dereference pattern in the front end: - '*(int*)&some_float'. If optimization is enabled, it also runs in - the back end, where it deals with multiple statement cases using - flow-sensitive points-to information. Only warns when the - converted pointer is dereferenced. Does not warn about incomplete - types. - -'-Wstrict-overflow' -'-Wstrict-overflow=N' - This option is only active when '-fstrict-overflow' is active. It - warns about cases where the compiler optimizes based on the - assumption that signed overflow does not occur. Note that it does - not warn about all cases where the code might overflow: it only - warns about cases where the compiler implements some optimization. - Thus this warning depends on the optimization level. - - An optimization that assumes that signed overflow does not occur is - perfectly safe if the values of the variables involved are such - that overflow never does, in fact, occur. Therefore this warning - can easily give a false positive: a warning about code that is not - actually a problem. To help focus on important issues, several - warning levels are defined. No warnings are issued for the use of - undefined signed overflow when estimating how many iterations a - loop requires, in particular when determining whether a loop will - be executed at all. - - '-Wstrict-overflow=1' - Warn about cases that are both questionable and easy to avoid. - For example, with '-fstrict-overflow', the compiler simplifies - 'x + 1 > x' to '1'. This level of '-Wstrict-overflow' is - enabled by '-Wall'; higher levels are not, and must be - explicitly requested. - - '-Wstrict-overflow=2' - Also warn about other cases where a comparison is simplified - to a constant. For example: 'abs (x) >= 0'. This can only be - simplified when '-fstrict-overflow' is in effect, because 'abs - (INT_MIN)' overflows to 'INT_MIN', which is less than zero. - '-Wstrict-overflow' (with no level) is the same as - '-Wstrict-overflow=2'. - - '-Wstrict-overflow=3' - Also warn about other cases where a comparison is simplified. - For example: 'x + 1 > 1' is simplified to 'x > 0'. - - '-Wstrict-overflow=4' - Also warn about other simplifications not covered by the above - cases. For example: '(x * 10) / 5' is simplified to 'x * 2'. - - '-Wstrict-overflow=5' - Also warn about cases where the compiler reduces the magnitude - of a constant involved in a comparison. For example: 'x + 2 > - y' is simplified to 'x + 1 >= y'. This is reported only at - the highest warning level because this simplification applies - to many comparisons, so this warning level gives a very large - number of false positives. - -'-Wsuggest-attribute=[pure|const|noreturn|format]' - Warn for cases where adding an attribute may be beneficial. The - attributes currently supported are listed below. - - '-Wsuggest-attribute=pure' - '-Wsuggest-attribute=const' - '-Wsuggest-attribute=noreturn' - - Warn about functions that might be candidates for attributes - 'pure', 'const' or 'noreturn'. The compiler only warns for - functions visible in other compilation units or (in the case - of 'pure' and 'const') if it cannot prove that the function - returns normally. A function returns normally if it doesn't - contain an infinite loop or return abnormally by throwing, - calling 'abort()' or trapping. This analysis requires option - '-fipa-pure-const', which is enabled by default at '-O' and - higher. Higher optimization levels improve the accuracy of - the analysis. - - '-Wsuggest-attribute=format' - '-Wmissing-format-attribute' - - Warn about function pointers that might be candidates for - 'format' attributes. Note these are only possible candidates, - not absolute ones. GCC guesses that function pointers with - 'format' attributes that are used in assignment, - initialization, parameter passing or return statements should - have a corresponding 'format' attribute in the resulting type. - I.e. the left-hand side of the assignment or initialization, - the type of the parameter variable, or the return type of the - containing function respectively should also have a 'format' - attribute to avoid the warning. - - GCC also warns about function definitions that might be - candidates for 'format' attributes. Again, these are only - possible candidates. GCC guesses that 'format' attributes - might be appropriate for any function that calls a function - like 'vprintf' or 'vscanf', but this might not always be the - case, and some functions for which 'format' attributes are - appropriate may not be detected. - -'-Warray-bounds' - This option is only active when '-ftree-vrp' is active (default for - '-O2' and above). It warns about subscripts to arrays that are - always out of bounds. This warning is enabled by '-Wall'. - -'-Wno-div-by-zero' - Do not warn about compile-time integer division by zero. - Floating-point division by zero is not warned about, as it can be a - legitimate way of obtaining infinities and NaNs. - -'-Wsystem-headers' - Print warning messages for constructs found in system header files. - Warnings from system headers are normally suppressed, on the - assumption that they usually do not indicate real problems and - would only make the compiler output harder to read. Using this - command-line option tells GCC to emit warnings from system headers - as if they occurred in user code. However, note that using '-Wall' - in conjunction with this option does _not_ warn about unknown - pragmas in system headers--for that, '-Wunknown-pragmas' must also - be used. - -'-Wtrampolines' - Warn about trampolines generated for pointers to nested functions. - - A trampoline is a small piece of data or code that is created at - run time on the stack when the address of a nested function is - taken, and is used to call the nested function indirectly. For - some targets, it is made up of data only and thus requires no - special treatment. But, for most targets, it is made up of code - and thus requires the stack to be made executable in order for the - program to work properly. - -'-Wfloat-equal' - Warn if floating-point values are used in equality comparisons. - - The idea behind this is that sometimes it is convenient (for the - programmer) to consider floating-point values as approximations to - infinitely precise real numbers. If you are doing this, then you - need to compute (by analyzing the code, or in some other way) the - maximum or likely maximum error that the computation introduces, - and allow for it when performing comparisons (and when producing - output, but that's a different problem). In particular, instead of - testing for equality, you should check to see whether the two - values have ranges that overlap; and this is done with the - relational operators, so equality comparisons are probably - mistaken. - -'-Wtraditional (C and Objective-C only)' - Warn about certain constructs that behave differently in - traditional and ISO C. Also warn about ISO C constructs that have - no traditional C equivalent, and/or problematic constructs that - should be avoided. - - * Macro parameters that appear within string literals in the - macro body. In traditional C macro replacement takes place - within string literals, but in ISO C it does not. - - * In traditional C, some preprocessor directives did not exist. - Traditional preprocessors only considered a line to be a - directive if the '#' appeared in column 1 on the line. - Therefore '-Wtraditional' warns about directives that - traditional C understands but ignores because the '#' does not - appear as the first character on the line. It also suggests - you hide directives like '#pragma' not understood by - traditional C by indenting them. Some traditional - implementations do not recognize '#elif', so this option - suggests avoiding it altogether. - - * A function-like macro that appears without arguments. - - * The unary plus operator. - - * The 'U' integer constant suffix, or the 'F' or 'L' - floating-point constant suffixes. (Traditional C does support - the 'L' suffix on integer constants.) Note, these suffixes - appear in macros defined in the system headers of most modern - systems, e.g. the '_MIN'/'_MAX' macros in '<limits.h>'. Use - of these macros in user code might normally lead to spurious - warnings, however GCC's integrated preprocessor has enough - context to avoid warning in these cases. - - * A function declared external in one block and then used after - the end of the block. - - * A 'switch' statement has an operand of type 'long'. - - * A non-'static' function declaration follows a 'static' one. - This construct is not accepted by some traditional C - compilers. - - * The ISO type of an integer constant has a different width or - signedness from its traditional type. This warning is only - issued if the base of the constant is ten. I.e. hexadecimal - or octal values, which typically represent bit patterns, are - not warned about. - - * Usage of ISO string concatenation is detected. - - * Initialization of automatic aggregates. - - * Identifier conflicts with labels. Traditional C lacks a - separate namespace for labels. - - * Initialization of unions. If the initializer is zero, the - warning is omitted. This is done under the assumption that - the zero initializer in user code appears conditioned on e.g. - '__STDC__' to avoid missing initializer warnings and relies on - default initialization to zero in the traditional C case. - - * Conversions by prototypes between fixed/floating-point values - and vice versa. The absence of these prototypes when - compiling with traditional C causes serious problems. This is - a subset of the possible conversion warnings; for the full set - use '-Wtraditional-conversion'. - - * Use of ISO C style function definitions. This warning - intentionally is _not_ issued for prototype declarations or - variadic functions because these ISO C features appear in your - code when using libiberty's traditional C compatibility - macros, 'PARAMS' and 'VPARAMS'. This warning is also bypassed - for nested functions because that feature is already a GCC - extension and thus not relevant to traditional C - compatibility. - -'-Wtraditional-conversion (C and Objective-C only)' - Warn if a prototype causes a type conversion that is different from - what would happen to the same argument in the absence of a - prototype. This includes conversions of fixed point to floating - and vice versa, and conversions changing the width or signedness of - a fixed-point argument except when the same as the default - promotion. - -'-Wdeclaration-after-statement (C and Objective-C only)' - Warn when a declaration is found after a statement in a block. - This construct, known from C++, was introduced with ISO C99 and is - by default allowed in GCC. It is not supported by ISO C90 and was - not supported by GCC versions before GCC 3.0. *Note Mixed - Declarations::. - -'-Wundef' - Warn if an undefined identifier is evaluated in an '#if' directive. - -'-Wno-endif-labels' - Do not warn whenever an '#else' or an '#endif' are followed by - text. - -'-Wshadow' - Warn whenever a local variable or type declaration shadows another - variable, parameter, type, or class member (in C++), or whenever a - built-in function is shadowed. Note that in C++, the compiler - warns if a local variable shadows an explicit typedef, but not if - it shadows a struct/class/enum. - -'-Wlarger-than=LEN' - Warn whenever an object of larger than LEN bytes is defined. - -'-Wframe-larger-than=LEN' - Warn if the size of a function frame is larger than LEN bytes. The - computation done to determine the stack frame size is approximate - and not conservative. The actual requirements may be somewhat - greater than LEN even if you do not get a warning. In addition, - any space allocated via 'alloca', variable-length arrays, or - related constructs is not included by the compiler when determining - whether or not to issue a warning. - -'-Wno-free-nonheap-object' - Do not warn when attempting to free an object that was not - allocated on the heap. - -'-Wstack-usage=LEN' - Warn if the stack usage of a function might be larger than LEN - bytes. The computation done to determine the stack usage is - conservative. Any space allocated via 'alloca', variable-length - arrays, or related constructs is included by the compiler when - determining whether or not to issue a warning. - - The message is in keeping with the output of '-fstack-usage'. - - * If the stack usage is fully static but exceeds the specified - amount, it's: - - warning: stack usage is 1120 bytes - * If the stack usage is (partly) dynamic but bounded, it's: - - warning: stack usage might be 1648 bytes - * If the stack usage is (partly) dynamic and not bounded, it's: - - warning: stack usage might be unbounded - -'-Wunsafe-loop-optimizations' - Warn if the loop cannot be optimized because the compiler cannot - assume anything on the bounds of the loop indices. With - '-funsafe-loop-optimizations' warn if the compiler makes such - assumptions. - -'-Wno-pedantic-ms-format (MinGW targets only)' - When used in combination with '-Wformat' and '-pedantic' without - GNU extensions, this option disables the warnings about non-ISO - 'printf' / 'scanf' format width specifiers 'I32', 'I64', and 'I' - used on Windows targets, which depend on the MS runtime. - -'-Wpointer-arith' - Warn about anything that depends on the "size of" a function type - or of 'void'. GNU C assigns these types a size of 1, for - convenience in calculations with 'void *' pointers and pointers to - functions. In C++, warn also when an arithmetic operation involves - 'NULL'. This warning is also enabled by '-Wpedantic'. - -'-Wtype-limits' - Warn if a comparison is always true or always false due to the - limited range of the data type, but do not warn for constant - expressions. For example, warn if an unsigned variable is compared - against zero with '<' or '>='. This warning is also enabled by - '-Wextra'. - -'-Wbad-function-cast (C and Objective-C only)' - Warn whenever a function call is cast to a non-matching type. For - example, warn if 'int malloc()' is cast to 'anything *'. - -'-Wc++-compat (C and Objective-C only)' - Warn about ISO C constructs that are outside of the common subset - of ISO C and ISO C++, e.g. request for implicit conversion from - 'void *' to a pointer to non-'void' type. - -'-Wc++11-compat (C++ and Objective-C++ only)' - Warn about C++ constructs whose meaning differs between ISO C++ - 1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are - keywords in ISO C++ 2011. This warning turns on '-Wnarrowing' and - is enabled by '-Wall'. - -'-Wcast-qual' - Warn whenever a pointer is cast so as to remove a type qualifier - from the target type. For example, warn if a 'const char *' is - cast to an ordinary 'char *'. - - Also warn when making a cast that introduces a type qualifier in an - unsafe way. For example, casting 'char **' to 'const char **' is - unsafe, as in this example: - - /* p is char ** value. */ - const char **q = (const char **) p; - /* Assignment of readonly string to const char * is OK. */ - *q = "string"; - /* Now char** pointer points to read-only memory. */ - **p = 'b'; - -'-Wcast-align' - Warn whenever a pointer is cast such that the required alignment of - the target is increased. For example, warn if a 'char *' is cast - to an 'int *' on machines where integers can only be accessed at - two- or four-byte boundaries. - -'-Wwrite-strings' - When compiling C, give string constants the type 'const - char[LENGTH]' so that copying the address of one into a non-'const' - 'char *' pointer produces a warning. These warnings help you find - at compile time code that can try to write into a string constant, - but only if you have been very careful about using 'const' in - declarations and prototypes. Otherwise, it is just a nuisance. - This is why we did not make '-Wall' request these warnings. - - When compiling C++, warn about the deprecated conversion from - string literals to 'char *'. This warning is enabled by default - for C++ programs. - -'-Wclobbered' - Warn for variables that might be changed by 'longjmp' or 'vfork'. - This warning is also enabled by '-Wextra'. - -'-Wconditionally-supported (C++ and Objective-C++ only)' - Warn for conditionally-supported (C++11 [intro.defs]) constructs. - -'-Wconversion' - Warn for implicit conversions that may alter a value. This - includes conversions between real and integer, like 'abs (x)' when - 'x' is 'double'; conversions between signed and unsigned, like - 'unsigned ui = -1'; and conversions to smaller types, like 'sqrtf - (M_PI)'. Do not warn for explicit casts like 'abs ((int) x)' and - 'ui = (unsigned) -1', or if the value is not changed by the - conversion like in 'abs (2.0)'. Warnings about conversions between - signed and unsigned integers can be disabled by using - '-Wno-sign-conversion'. - - For C++, also warn for confusing overload resolution for - user-defined conversions; and conversions that never use a type - conversion operator: conversions to 'void', the same type, a base - class or a reference to them. Warnings about conversions between - signed and unsigned integers are disabled by default in C++ unless - '-Wsign-conversion' is explicitly enabled. - -'-Wno-conversion-null (C++ and Objective-C++ only)' - Do not warn for conversions between 'NULL' and non-pointer types. - '-Wconversion-null' is enabled by default. - -'-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)' - Warn when a literal '0' is used as null pointer constant. This can - be useful to facilitate the conversion to 'nullptr' in C++11. - -'-Wdate-time' - Warn when macros '__TIME__', '__DATE__' or '__TIMESTAMP__' are - encountered as they might prevent bit-wise-identical reproducible - compilations. - -'-Wdelete-incomplete (C++ and Objective-C++ only)' - Warn when deleting a pointer to incomplete type, which may cause - undefined behavior at runtime. This warning is enabled by default. - -'-Wuseless-cast (C++ and Objective-C++ only)' - Warn when an expression is casted to its own type. - -'-Wempty-body' - Warn if an empty body occurs in an 'if', 'else' or 'do while' - statement. This warning is also enabled by '-Wextra'. - -'-Wenum-compare' - Warn about a comparison between values of different enumerated - types. In C++ enumeral mismatches in conditional expressions are - also diagnosed and the warning is enabled by default. In C this - warning is enabled by '-Wall'. - -'-Wjump-misses-init (C, Objective-C only)' - Warn if a 'goto' statement or a 'switch' statement jumps forward - across the initialization of a variable, or jumps backward to a - label after the variable has been initialized. This only warns - about variables that are initialized when they are declared. This - warning is only supported for C and Objective-C; in C++ this sort - of branch is an error in any case. - - '-Wjump-misses-init' is included in '-Wc++-compat'. It can be - disabled with the '-Wno-jump-misses-init' option. - -'-Wsign-compare' - Warn when a comparison between signed and unsigned values could - produce an incorrect result when the signed value is converted to - unsigned. This warning is also enabled by '-Wextra'; to get the - other warnings of '-Wextra' without this warning, use '-Wextra - -Wno-sign-compare'. - -'-Wsign-conversion' - Warn for implicit conversions that may change the sign of an - integer value, like assigning a signed integer expression to an - unsigned integer variable. An explicit cast silences the warning. - In C, this option is enabled also by '-Wconversion'. - -'-Wfloat-conversion' - Warn for implicit conversions that reduce the precision of a real - value. This includes conversions from real to integer, and from - higher precision real to lower precision real values. This option - is also enabled by '-Wconversion'. - -'-Wsizeof-pointer-memaccess' - Warn for suspicious length parameters to certain string and memory - built-in functions if the argument uses 'sizeof'. This warning - warns e.g. about 'memset (ptr, 0, sizeof (ptr));' if 'ptr' is not - an array, but a pointer, and suggests a possible fix, or about - 'memcpy (&foo, ptr, sizeof (&foo));'. This warning is enabled by - '-Wall'. - -'-Waddress' - Warn about suspicious uses of memory addresses. These include - using the address of a function in a conditional expression, such - as 'void func(void); if (func)', and comparisons against the memory - address of a string literal, such as 'if (x == "abc")'. Such uses - typically indicate a programmer error: the address of a function - always evaluates to true, so their use in a conditional usually - indicate that the programmer forgot the parentheses in a function - call; and comparisons against string literals result in unspecified - behavior and are not portable in C, so they usually indicate that - the programmer intended to use 'strcmp'. This warning is enabled - by '-Wall'. - -'-Wlogical-op' - Warn about suspicious uses of logical operators in expressions. - This includes using logical operators in contexts where a bit-wise - operator is likely to be expected. - -'-Waggregate-return' - Warn if any functions that return structures or unions are defined - or called. (In languages where you can return an array, this also - elicits a warning.) - -'-Wno-aggressive-loop-optimizations' - Warn if in a loop with constant number of iterations the compiler - detects undefined behavior in some statement during one or more of - the iterations. - -'-Wno-attributes' - Do not warn if an unexpected '__attribute__' is used, such as - unrecognized attributes, function attributes applied to variables, - etc. This does not stop errors for incorrect use of supported - attributes. - -'-Wno-builtin-macro-redefined' - Do not warn if certain built-in macros are redefined. This - suppresses warnings for redefinition of '__TIMESTAMP__', - '__TIME__', '__DATE__', '__FILE__', and '__BASE_FILE__'. - -'-Wstrict-prototypes (C and Objective-C only)' - Warn if a function is declared or defined without specifying the - argument types. (An old-style function definition is permitted - without a warning if preceded by a declaration that specifies the - argument types.) - -'-Wold-style-declaration (C and Objective-C only)' - Warn for obsolescent usages, according to the C Standard, in a - declaration. For example, warn if storage-class specifiers like - 'static' are not the first things in a declaration. This warning - is also enabled by '-Wextra'. - -'-Wold-style-definition (C and Objective-C only)' - Warn if an old-style function definition is used. A warning is - given even if there is a previous prototype. - -'-Wmissing-parameter-type (C and Objective-C only)' - A function parameter is declared without a type specifier in - K&R-style functions: - - void foo(bar) { } - - This warning is also enabled by '-Wextra'. - -'-Wmissing-prototypes (C and Objective-C only)' - Warn if a global function is defined without a previous prototype - declaration. This warning is issued even if the definition itself - provides a prototype. Use this option to detect global functions - that do not have a matching prototype declaration in a header file. - This option is not valid for C++ because all function declarations - provide prototypes and a non-matching declaration will declare an - overload rather than conflict with an earlier declaration. Use - '-Wmissing-declarations' to detect missing declarations in C++. - -'-Wmissing-declarations' - Warn if a global function is defined without a previous - declaration. Do so even if the definition itself provides a - prototype. Use this option to detect global functions that are not - declared in header files. In C, no warnings are issued for - functions with previous non-prototype declarations; use - '-Wmissing-prototype' to detect missing prototypes. In C++, no - warnings are issued for function templates, or for inline - functions, or for functions in anonymous namespaces. - -'-Wmissing-field-initializers' - Warn if a structure's initializer has some fields missing. For - example, the following code causes such a warning, because 'x.h' is - implicitly zero: - - struct s { int f, g, h; }; - struct s x = { 3, 4 }; - - This option does not warn about designated initializers, so the - following modification does not trigger a warning: - - struct s { int f, g, h; }; - struct s x = { .f = 3, .g = 4 }; - - This warning is included in '-Wextra'. To get other '-Wextra' - warnings without this one, use '-Wextra - -Wno-missing-field-initializers'. - -'-Wno-multichar' - Do not warn if a multicharacter constant (''FOOF'') is used. - Usually they indicate a typo in the user's code, as they have - implementation-defined values, and should not be used in portable - code. - -'-Wnormalized=<none|id|nfc|nfkc>' - In ISO C and ISO C++, two identifiers are different if they are - different sequences of characters. However, sometimes when - characters outside the basic ASCII character set are used, you can - have two different character sequences that look the same. To - avoid confusion, the ISO 10646 standard sets out some - "normalization rules" which when applied ensure that two sequences - that look the same are turned into the same sequence. GCC can warn - you if you are using identifiers that have not been normalized; - this option controls that warning. - - There are four levels of warning supported by GCC. The default is - '-Wnormalized=nfc', which warns about any identifier that is not in - the ISO 10646 "C" normalized form, "NFC". NFC is the recommended - form for most uses. - - Unfortunately, there are some characters allowed in identifiers by - ISO C and ISO C++ that, when turned into NFC, are not allowed in - identifiers. That is, there's no way to use these symbols in - portable ISO C or C++ and have all your identifiers in NFC. - '-Wnormalized=id' suppresses the warning for these characters. It - is hoped that future versions of the standards involved will - correct this, which is why this option is not the default. - - You can switch the warning off for all characters by writing - '-Wnormalized=none'. You should only do this if you are using some - other normalization scheme (like "D"), because otherwise you can - easily create bugs that are literally impossible to see. - - Some characters in ISO 10646 have distinct meanings but look - identical in some fonts or display methodologies, especially once - formatting has been applied. For instance '\u207F', "SUPERSCRIPT - LATIN SMALL LETTER N", displays just like a regular 'n' that has - been placed in a superscript. ISO 10646 defines the "NFKC" - normalization scheme to convert all these into a standard form as - well, and GCC warns if your code is not in NFKC if you use - '-Wnormalized=nfkc'. This warning is comparable to warning about - every identifier that contains the letter O because it might be - confused with the digit 0, and so is not the default, but may be - useful as a local coding convention if the programming environment - cannot be fixed to display these characters distinctly. - -'-Wno-deprecated' - Do not warn about usage of deprecated features. *Note Deprecated - Features::. - -'-Wno-deprecated-declarations' - Do not warn about uses of functions (*note Function Attributes::), - variables (*note Variable Attributes::), and types (*note Type - Attributes::) marked as deprecated by using the 'deprecated' - attribute. - -'-Wno-overflow' - Do not warn about compile-time overflow in constant expressions. - -'-Wopenmp-simd' - Warn if the vectorizer cost model overrides the OpenMP or the Cilk - Plus simd directive set by user. The '-fsimd-cost-model=unlimited' - can be used to relax the cost model. - -'-Woverride-init (C and Objective-C only)' - Warn if an initialized field without side effects is overridden - when using designated initializers (*note Designated Initializers: - Designated Inits.). - - This warning is included in '-Wextra'. To get other '-Wextra' - warnings without this one, use '-Wextra -Wno-override-init'. - -'-Wpacked' - Warn if a structure is given the packed attribute, but the packed - attribute has no effect on the layout or size of the structure. - Such structures may be mis-aligned for little benefit. For - instance, in this code, the variable 'f.x' in 'struct bar' is - misaligned even though 'struct bar' does not itself have the packed - attribute: - - struct foo { - int x; - char a, b, c, d; - } __attribute__((packed)); - struct bar { - char z; - struct foo f; - }; - -'-Wpacked-bitfield-compat' - The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed' attribute on - bit-fields of type 'char'. This has been fixed in GCC 4.4 but the - change can lead to differences in the structure layout. GCC - informs you when the offset of such a field has changed in GCC 4.4. - For example there is no longer a 4-bit padding between field 'a' - and 'b' in this structure: - - struct foo - { - char a:4; - char b:8; - } __attribute__ ((packed)); - - This warning is enabled by default. Use - '-Wno-packed-bitfield-compat' to disable this warning. - -'-Wpadded' - Warn if padding is included in a structure, either to align an - element of the structure or to align the whole structure. - Sometimes when this happens it is possible to rearrange the fields - of the structure to reduce the padding and so make the structure - smaller. - -'-Wredundant-decls' - Warn if anything is declared more than once in the same scope, even - in cases where multiple declaration is valid and changes nothing. - -'-Wnested-externs (C and Objective-C only)' - Warn if an 'extern' declaration is encountered within a function. - -'-Wno-inherited-variadic-ctor' - Suppress warnings about use of C++11 inheriting constructors when - the base class inherited from has a C variadic constructor; the - warning is on by default because the ellipsis is not inherited. - -'-Winline' - Warn if a function that is declared as inline cannot be inlined. - Even with this option, the compiler does not warn about failures to - inline functions declared in system headers. - - The compiler uses a variety of heuristics to determine whether or - not to inline a function. For example, the compiler takes into - account the size of the function being inlined and the amount of - inlining that has already been done in the current function. - Therefore, seemingly insignificant changes in the source program - can cause the warnings produced by '-Winline' to appear or - disappear. - -'-Wno-invalid-offsetof (C++ and Objective-C++ only)' - Suppress warnings from applying the 'offsetof' macro to a non-POD - type. According to the 1998 ISO C++ standard, applying 'offsetof' - to a non-POD type is undefined. In existing C++ implementations, - however, 'offsetof' typically gives meaningful results even when - applied to certain kinds of non-POD types (such as a simple - 'struct' that fails to be a POD type only by virtue of having a - constructor). This flag is for users who are aware that they are - writing nonportable code and who have deliberately chosen to ignore - the warning about it. - - The restrictions on 'offsetof' may be relaxed in a future version - of the C++ standard. - -'-Wno-int-to-pointer-cast' - Suppress warnings from casts to pointer type of an integer of a - different size. In C++, casting to a pointer type of smaller size - is an error. 'Wint-to-pointer-cast' is enabled by default. - -'-Wno-pointer-to-int-cast (C and Objective-C only)' - Suppress warnings from casts from a pointer to an integer type of a - different size. - -'-Winvalid-pch' - Warn if a precompiled header (*note Precompiled Headers::) is found - in the search path but can't be used. - -'-Wlong-long' - Warn if 'long long' type is used. This is enabled by either - '-Wpedantic' or '-Wtraditional' in ISO C90 and C++98 modes. To - inhibit the warning messages, use '-Wno-long-long'. - -'-Wvariadic-macros' - Warn if variadic macros are used in pedantic ISO C90 mode, or the - GNU alternate syntax when in pedantic ISO C99 mode. This is - default. To inhibit the warning messages, use - '-Wno-variadic-macros'. - -'-Wvarargs' - Warn upon questionable usage of the macros used to handle variable - arguments like 'va_start'. This is default. To inhibit the - warning messages, use '-Wno-varargs'. - -'-Wvector-operation-performance' - Warn if vector operation is not implemented via SIMD capabilities - of the architecture. Mainly useful for the performance tuning. - Vector operation can be implemented 'piecewise', which means that - the scalar operation is performed on every vector element; 'in - parallel', which means that the vector operation is implemented - using scalars of wider type, which normally is more performance - efficient; and 'as a single scalar', which means that vector fits - into a scalar type. - -'-Wno-virtual-move-assign' - Suppress warnings about inheriting from a virtual base with a - non-trivial C++11 move assignment operator. This is dangerous - because if the virtual base is reachable along more than one path, - it will be moved multiple times, which can mean both objects end up - in the moved-from state. If the move assignment operator is - written to avoid moving from a moved-from object, this warning can - be disabled. - -'-Wvla' - Warn if variable length array is used in the code. '-Wno-vla' - prevents the '-Wpedantic' warning of the variable length array. - -'-Wvolatile-register-var' - Warn if a register variable is declared volatile. The volatile - modifier does not inhibit all optimizations that may eliminate - reads and/or writes to register variables. This warning is enabled - by '-Wall'. - -'-Wdisabled-optimization' - Warn if a requested optimization pass is disabled. This warning - does not generally indicate that there is anything wrong with your - code; it merely indicates that GCC's optimizers are unable to - handle the code effectively. Often, the problem is that your code - is too big or too complex; GCC refuses to optimize programs when - the optimization itself is likely to take inordinate amounts of - time. - -'-Wpointer-sign (C and Objective-C only)' - Warn for pointer argument passing or assignment with different - signedness. This option is only supported for C and Objective-C. - It is implied by '-Wall' and by '-Wpedantic', which can be disabled - with '-Wno-pointer-sign'. - -'-Wstack-protector' - This option is only active when '-fstack-protector' is active. It - warns about functions that are not protected against stack - smashing. - -'-Woverlength-strings' - Warn about string constants that are longer than the "minimum - maximum" length specified in the C standard. Modern compilers - generally allow string constants that are much longer than the - standard's minimum limit, but very portable programs should avoid - using longer strings. - - The limit applies _after_ string constant concatenation, and does - not count the trailing NUL. In C90, the limit was 509 characters; - in C99, it was raised to 4095. C++98 does not specify a normative - minimum maximum, so we do not diagnose overlength strings in C++. - - This option is implied by '-Wpedantic', and can be disabled with - '-Wno-overlength-strings'. - -'-Wunsuffixed-float-constants (C and Objective-C only)' - - Issue a warning for any floating constant that does not have a - suffix. When used together with '-Wsystem-headers' it warns about - such constants in system header files. This can be useful when - preparing code to use with the 'FLOAT_CONST_DECIMAL64' pragma from - the decimal floating-point extension to C99. - - -File: gcc.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking GCC - -3.9 Options for Debugging Your Program or GCC -============================================= - -GCC has various special options that are used for debugging either your -program or GCC: - -'-g' - Produce debugging information in the operating system's native - format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this - debugging information. - - On most systems that use stabs format, '-g' enables use of extra - debugging information that only GDB can use; this extra information - makes debugging work better in GDB but probably makes other - debuggers crash or refuse to read the program. If you want to - control for certain whether to generate the extra information, use - '-gstabs+', '-gstabs', '-gxcoff+', '-gxcoff', or '-gvms' (see - below). - - GCC allows you to use '-g' with '-O'. The shortcuts taken by - optimized code may occasionally produce surprising results: some - variables you declared may not exist at all; flow of control may - briefly move where you did not expect it; some statements may not - be executed because they compute constant results or their values - are already at hand; some statements may execute in different - places because they have been moved out of loops. - - Nevertheless it proves possible to debug optimized output. This - makes it reasonable to use the optimizer for programs that might - have bugs. - - The following options are useful when GCC is generated with the - capability for more than one debugging format. - -'-gsplit-dwarf' - Separate as much dwarf debugging information as possible into a - separate output file with the extension .dwo. This option allows - the build system to avoid linking files with debug information. To - be useful, this option requires a debugger capable of reading .dwo - files. - -'-ggdb' - Produce debugging information for use by GDB. This means to use - the most expressive format available (DWARF 2, stabs, or the native - format if neither of those are supported), including GDB extensions - if at all possible. - -'-gpubnames' - Generate dwarf .debug_pubnames and .debug_pubtypes sections. - -'-ggnu-pubnames' - Generate .debug_pubnames and .debug_pubtypes sections in a format - suitable for conversion into a GDB index. This option is only - useful with a linker that can produce GDB index version 7. - -'-gstabs' - Produce debugging information in stabs format (if that is - supported), without GDB extensions. This is the format used by DBX - on most BSD systems. On MIPS, Alpha and System V Release 4 systems - this option produces stabs debugging output that is not understood - by DBX or SDB. On System V Release 4 systems this option requires - the GNU assembler. - -'-feliminate-unused-debug-symbols' - Produce debugging information in stabs format (if that is - supported), for only symbols that are actually used. - -'-femit-class-debug-always' - Instead of emitting debugging information for a C++ class in only - one object file, emit it in all object files using the class. This - option should be used only with debuggers that are unable to handle - the way GCC normally emits debugging information for classes - because using this option increases the size of debugging - information by as much as a factor of two. - -'-fdebug-types-section' - When using DWARF Version 4 or higher, type DIEs can be put into - their own '.debug_types' section instead of making them part of the - '.debug_info' section. It is more efficient to put them in a - separate comdat sections since the linker can then remove - duplicates. But not all DWARF consumers support '.debug_types' - sections yet and on some objects '.debug_types' produces larger - instead of smaller debugging information. - -'-gstabs+' - Produce debugging information in stabs format (if that is - supported), using GNU extensions understood only by the GNU - debugger (GDB). The use of these extensions is likely to make - other debuggers crash or refuse to read the program. - -'-gcoff' - Produce debugging information in COFF format (if that is - supported). This is the format used by SDB on most System V - systems prior to System V Release 4. - -'-gxcoff' - Produce debugging information in XCOFF format (if that is - supported). This is the format used by the DBX debugger on IBM - RS/6000 systems. - -'-gxcoff+' - Produce debugging information in XCOFF format (if that is - supported), using GNU extensions understood only by the GNU - debugger (GDB). The use of these extensions is likely to make - other debuggers crash or refuse to read the program, and may cause - assemblers other than the GNU assembler (GAS) to fail with an - error. - -'-gdwarf-VERSION' - Produce debugging information in DWARF format (if that is - supported). The value of VERSION may be either 2, 3 or 4; the - default version for most targets is 4. - - Note that with DWARF Version 2, some ports require and always use - some non-conflicting DWARF 3 extensions in the unwind tables. - - Version 4 may require GDB 7.0 and '-fvar-tracking-assignments' for - maximum benefit. - -'-grecord-gcc-switches' - This switch causes the command-line options used to invoke the - compiler that may affect code generation to be appended to the - DW_AT_producer attribute in DWARF debugging information. The - options are concatenated with spaces separating them from each - other and from the compiler version. See also - '-frecord-gcc-switches' for another way of storing compiler options - into the object file. This is the default. - -'-gno-record-gcc-switches' - Disallow appending command-line options to the DW_AT_producer - attribute in DWARF debugging information. - -'-gstrict-dwarf' - Disallow using extensions of later DWARF standard version than - selected with '-gdwarf-VERSION'. On most targets using - non-conflicting DWARF extensions from later standard versions is - allowed. - -'-gno-strict-dwarf' - Allow using extensions of later DWARF standard version than - selected with '-gdwarf-VERSION'. - -'-gvms' - Produce debugging information in Alpha/VMS debug format (if that is - supported). This is the format used by DEBUG on Alpha/VMS systems. - -'-gLEVEL' -'-ggdbLEVEL' -'-gstabsLEVEL' -'-gcoffLEVEL' -'-gxcoffLEVEL' -'-gvmsLEVEL' - Request debugging information and also use LEVEL to specify how - much information. The default level is 2. - - Level 0 produces no debug information at all. Thus, '-g0' negates - '-g'. - - Level 1 produces minimal information, enough for making backtraces - in parts of the program that you don't plan to debug. This - includes descriptions of functions and external variables, and line - number tables, but no information about local variables. - - Level 3 includes extra information, such as all the macro - definitions present in the program. Some debuggers support macro - expansion when you use '-g3'. - - '-gdwarf-2' does not accept a concatenated debug level, because GCC - used to support an option '-gdwarf' that meant to generate debug - information in version 1 of the DWARF format (which is very - different from version 2), and it would have been too confusing. - That debug format is long obsolete, but the option cannot be - changed now. Instead use an additional '-gLEVEL' option to change - the debug level for DWARF. - -'-gtoggle' - Turn off generation of debug info, if leaving out this option - generates it, or turn it on at level 2 otherwise. The position of - this argument in the command line does not matter; it takes effect - after all other options are processed, and it does so only once, no - matter how many times it is given. This is mainly intended to be - used with '-fcompare-debug'. - -'-fsanitize=address' - Enable AddressSanitizer, a fast memory error detector. Memory - access instructions will be instrumented to detect out-of-bounds - and use-after-free bugs. See - <http://code.google.com/p/address-sanitizer/> for more details. - The run-time behavior can be influenced using the 'ASAN_OPTIONS' - environment variable; see - <https://code.google.com/p/address-sanitizer/wiki/Flags#Run-time_flags> - for a list of supported options. - -'-fsanitize=thread' - Enable ThreadSanitizer, a fast data race detector. Memory access - instructions will be instrumented to detect data race bugs. See - <http://code.google.com/p/thread-sanitizer/> for more details. The - run-time behavior can be influenced using the 'TSAN_OPTIONS' - environment variable; see - <https://code.google.com/p/thread-sanitizer/wiki/Flags> for a list - of supported options. - -'-fsanitize=leak' - Enable LeakSanitizer, a memory leak detector. This option only - matters for linking of executables and if neither - '-fsanitize=address' nor '-fsanitize=thread' is used. In that case - it will link the executable against a library that overrides - 'malloc' and other allocator functions. See - <https://code.google.com/p/address-sanitizer/wiki/LeakSanitizer> - for more details. The run-time behavior can be influenced using - the 'LSAN_OPTIONS' environment variable. - -'-fsanitize=undefined' - Enable UndefinedBehaviorSanitizer, a fast undefined behavior - detector. Various computations will be instrumented to detect - undefined behavior at runtime. Current suboptions are: - - '-fsanitize=shift' - - This option enables checking that the result of a shift - operation is not undefined. Note that what exactly is - considered undefined differs slightly between C and C++, as - well as between ISO C90 and C99, etc. - - '-fsanitize=integer-divide-by-zero' - - Detect integer division by zero as well as 'INT_MIN / -1' - division. - - '-fsanitize=unreachable' - - With this option, the compiler will turn the - '__builtin_unreachable' call into a diagnostics message call - instead. When reaching the '__builtin_unreachable' call, the - behavior is undefined. - - '-fsanitize=vla-bound' - - This option instructs the compiler to check that the size of a - variable length array is positive. This option does not have - any effect in '-std=c++1y' mode, as the standard requires the - exception be thrown instead. - - '-fsanitize=null' - - This option enables pointer checking. Particularly, the - application built with this option turned on will issue an - error message when it tries to dereference a NULL pointer, or - if a reference (possibly an rvalue reference) is bound to a - NULL pointer. - - '-fsanitize=return' - - This option enables return statement checking. Programs built - with this option turned on will issue an error message when - the end of a non-void function is reached without actually - returning a value. This option works in C++ only. - - '-fsanitize=signed-integer-overflow' - - This option enables signed integer overflow checking. We - check that the result of '+', '*', and both unary and binary - '-' does not overflow in the signed arithmetics. Note, - integer promotion rules must be taken into account. That is, - the following is not an overflow: - signed char a = SCHAR_MAX; - a++; - - While '-ftrapv' causes traps for signed overflows to be emitted, - '-fsanitize=undefined' gives a diagnostic message. This currently - works only for the C family of languages. - -'-fdump-final-insns[=FILE]' - Dump the final internal representation (RTL) to FILE. If the - optional argument is omitted (or if FILE is '.'), the name of the - dump file is determined by appending '.gkd' to the compilation - output file name. - -'-fcompare-debug[=OPTS]' - If no error occurs during compilation, run the compiler a second - time, adding OPTS and '-fcompare-debug-second' to the arguments - passed to the second compilation. Dump the final internal - representation in both compilations, and print an error if they - differ. - - If the equal sign is omitted, the default '-gtoggle' is used. - - The environment variable 'GCC_COMPARE_DEBUG', if defined, non-empty - and nonzero, implicitly enables '-fcompare-debug'. If - 'GCC_COMPARE_DEBUG' is defined to a string starting with a dash, - then it is used for OPTS, otherwise the default '-gtoggle' is used. - - '-fcompare-debug=', with the equal sign but without OPTS, is - equivalent to '-fno-compare-debug', which disables the dumping of - the final representation and the second compilation, preventing - even 'GCC_COMPARE_DEBUG' from taking effect. - - To verify full coverage during '-fcompare-debug' testing, set - 'GCC_COMPARE_DEBUG' to say '-fcompare-debug-not-overridden', which - GCC rejects as an invalid option in any actual compilation (rather - than preprocessing, assembly or linking). To get just a warning, - setting 'GCC_COMPARE_DEBUG' to '-w%n-fcompare-debug not overridden' - will do. - -'-fcompare-debug-second' - This option is implicitly passed to the compiler for the second - compilation requested by '-fcompare-debug', along with options to - silence warnings, and omitting other options that would cause - side-effect compiler outputs to files or to the standard output. - Dump files and preserved temporary files are renamed so as to - contain the '.gk' additional extension during the second - compilation, to avoid overwriting those generated by the first. - - When this option is passed to the compiler driver, it causes the - _first_ compilation to be skipped, which makes it useful for little - other than debugging the compiler proper. - -'-feliminate-dwarf2-dups' - Compress DWARF 2 debugging information by eliminating duplicated - information about each symbol. This option only makes sense when - generating DWARF 2 debugging information with '-gdwarf-2'. - -'-femit-struct-debug-baseonly' - Emit debug information for struct-like types only when the base - name of the compilation source file matches the base name of file - in which the struct is defined. - - This option substantially reduces the size of debugging - information, but at significant potential loss in type information - to the debugger. See '-femit-struct-debug-reduced' for a less - aggressive option. See '-femit-struct-debug-detailed' for more - detailed control. - - This option works only with DWARF 2. - -'-femit-struct-debug-reduced' - Emit debug information for struct-like types only when the base - name of the compilation source file matches the base name of file - in which the type is defined, unless the struct is a template or - defined in a system header. - - This option significantly reduces the size of debugging - information, with some potential loss in type information to the - debugger. See '-femit-struct-debug-baseonly' for a more aggressive - option. See '-femit-struct-debug-detailed' for more detailed - control. - - This option works only with DWARF 2. - -'-femit-struct-debug-detailed[=SPEC-LIST]' - Specify the struct-like types for which the compiler generates - debug information. The intent is to reduce duplicate struct debug - information between different object files within the same program. - - This option is a detailed version of '-femit-struct-debug-reduced' - and '-femit-struct-debug-baseonly', which serves for most needs. - - A specification has the syntax - ['dir:'|'ind:']['ord:'|'gen:']('any'|'sys'|'base'|'none') - - The optional first word limits the specification to structs that - are used directly ('dir:') or used indirectly ('ind:'). A struct - type is used directly when it is the type of a variable, member. - Indirect uses arise through pointers to structs. That is, when use - of an incomplete struct is valid, the use is indirect. An example - is 'struct one direct; struct two * indirect;'. - - The optional second word limits the specification to ordinary - structs ('ord:') or generic structs ('gen:'). Generic structs are - a bit complicated to explain. For C++, these are non-explicit - specializations of template classes, or non-template classes within - the above. Other programming languages have generics, but - '-femit-struct-debug-detailed' does not yet implement them. - - The third word specifies the source files for those structs for - which the compiler should emit debug information. The values - 'none' and 'any' have the normal meaning. The value 'base' means - that the base of name of the file in which the type declaration - appears must match the base of the name of the main compilation - file. In practice, this means that when compiling 'foo.c', debug - information is generated for types declared in that file and - 'foo.h', but not other header files. The value 'sys' means those - types satisfying 'base' or declared in system or compiler headers. - - You may need to experiment to determine the best settings for your - application. - - The default is '-femit-struct-debug-detailed=all'. - - This option works only with DWARF 2. - -'-fno-merge-debug-strings' - Direct the linker to not merge together strings in the debugging - information that are identical in different object files. Merging - is not supported by all assemblers or linkers. Merging decreases - the size of the debug information in the output file at the cost of - increasing link processing time. Merging is enabled by default. - -'-fdebug-prefix-map=OLD=NEW' - When compiling files in directory 'OLD', record debugging - information describing them as in 'NEW' instead. - -'-fno-dwarf2-cfi-asm' - Emit DWARF 2 unwind info as compiler generated '.eh_frame' section - instead of using GAS '.cfi_*' directives. - -'-p' - Generate extra code to write profile information suitable for the - analysis program 'prof'. You must use this option when compiling - the source files you want data about, and you must also use it when - linking. - -'-pg' - Generate extra code to write profile information suitable for the - analysis program 'gprof'. You must use this option when compiling - the source files you want data about, and you must also use it when - linking. - -'-Q' - Makes the compiler print out each function name as it is compiled, - and print some statistics about each pass when it finishes. - -'-ftime-report' - Makes the compiler print some statistics about the time consumed by - each pass when it finishes. - -'-fmem-report' - Makes the compiler print some statistics about permanent memory - allocation when it finishes. - -'-fmem-report-wpa' - Makes the compiler print some statistics about permanent memory - allocation for the WPA phase only. - -'-fpre-ipa-mem-report' -'-fpost-ipa-mem-report' - Makes the compiler print some statistics about permanent memory - allocation before or after interprocedural optimization. - -'-fprofile-report' - Makes the compiler print some statistics about consistency of the - (estimated) profile and effect of individual passes. - -'-fstack-usage' - Makes the compiler output stack usage information for the program, - on a per-function basis. The filename for the dump is made by - appending '.su' to the AUXNAME. AUXNAME is generated from the name - of the output file, if explicitly specified and it is not an - executable, otherwise it is the basename of the source file. An - entry is made up of three fields: - - * The name of the function. - * A number of bytes. - * One or more qualifiers: 'static', 'dynamic', 'bounded'. - - The qualifier 'static' means that the function manipulates the - stack statically: a fixed number of bytes are allocated for the - frame on function entry and released on function exit; no stack - adjustments are otherwise made in the function. The second field - is this fixed number of bytes. - - The qualifier 'dynamic' means that the function manipulates the - stack dynamically: in addition to the static allocation described - above, stack adjustments are made in the body of the function, for - example to push/pop arguments around function calls. If the - qualifier 'bounded' is also present, the amount of these - adjustments is bounded at compile time and the second field is an - upper bound of the total amount of stack used by the function. If - it is not present, the amount of these adjustments is not bounded - at compile time and the second field only represents the bounded - part. - -'-fprofile-arcs' - Add code so that program flow "arcs" are instrumented. During - execution the program records how many times each branch and call - is executed and how many times it is taken or returns. When the - compiled program exits it saves this data to a file called - 'AUXNAME.gcda' for each source file. The data may be used for - profile-directed optimizations ('-fbranch-probabilities'), or for - test coverage analysis ('-ftest-coverage'). Each object file's - AUXNAME is generated from the name of the output file, if - explicitly specified and it is not the final executable, otherwise - it is the basename of the source file. In both cases any suffix is - removed (e.g. 'foo.gcda' for input file 'dir/foo.c', or - 'dir/foo.gcda' for output file specified as '-o dir/foo.o'). *Note - Cross-profiling::. - -'--coverage' - - This option is used to compile and link code instrumented for - coverage analysis. The option is a synonym for '-fprofile-arcs' - '-ftest-coverage' (when compiling) and '-lgcov' (when linking). - See the documentation for those options for more details. - - * Compile the source files with '-fprofile-arcs' plus - optimization and code generation options. For test coverage - analysis, use the additional '-ftest-coverage' option. You do - not need to profile every source file in a program. - - * Link your object files with '-lgcov' or '-fprofile-arcs' (the - latter implies the former). - - * Run the program on a representative workload to generate the - arc profile information. This may be repeated any number of - times. You can run concurrent instances of your program, and - provided that the file system supports locking, the data files - will be correctly updated. Also 'fork' calls are detected and - correctly handled (double counting will not happen). - - * For profile-directed optimizations, compile the source files - again with the same optimization and code generation options - plus '-fbranch-probabilities' (*note Options that Control - Optimization: Optimize Options.). - - * For test coverage analysis, use 'gcov' to produce human - readable information from the '.gcno' and '.gcda' files. - Refer to the 'gcov' documentation for further information. - - With '-fprofile-arcs', for each function of your program GCC - creates a program flow graph, then finds a spanning tree for the - graph. Only arcs that are not on the spanning tree have to be - instrumented: the compiler adds code to count the number of times - that these arcs are executed. When an arc is the only exit or only - entrance to a block, the instrumentation code can be added to the - block; otherwise, a new basic block must be created to hold the - instrumentation code. - -'-ftest-coverage' - Produce a notes file that the 'gcov' code-coverage utility (*note - 'gcov'--a Test Coverage Program: Gcov.) can use to show program - coverage. Each source file's note file is called 'AUXNAME.gcno'. - Refer to the '-fprofile-arcs' option above for a description of - AUXNAME and instructions on how to generate test coverage data. - Coverage data matches the source files more closely if you do not - optimize. - -'-fdbg-cnt-list' - Print the name and the counter upper bound for all debug counters. - -'-fdbg-cnt=COUNTER-VALUE-LIST' - Set the internal debug counter upper bound. COUNTER-VALUE-LIST is - a comma-separated list of NAME:VALUE pairs which sets the upper - bound of each debug counter NAME to VALUE. All debug counters have - the initial upper bound of 'UINT_MAX'; thus 'dbg_cnt()' returns - true always unless the upper bound is set by this option. For - example, with '-fdbg-cnt=dce:10,tail_call:0', 'dbg_cnt(dce)' - returns true only for first 10 invocations. - -'-fenable-KIND-PASS' -'-fdisable-KIND-PASS=RANGE-LIST' - - This is a set of options that are used to explicitly disable/enable - optimization passes. These options are intended for use for - debugging GCC. Compiler users should use regular options for - enabling/disabling passes instead. - - '-fdisable-ipa-PASS' - Disable IPA pass PASS. PASS is the pass name. If the same - pass is statically invoked in the compiler multiple times, the - pass name should be appended with a sequential number starting - from 1. - - '-fdisable-rtl-PASS' - '-fdisable-rtl-PASS=RANGE-LIST' - Disable RTL pass PASS. PASS is the pass name. If the same - pass is statically invoked in the compiler multiple times, the - pass name should be appended with a sequential number starting - from 1. RANGE-LIST is a comma-separated list of function - ranges or assembler names. Each range is a number pair - separated by a colon. The range is inclusive in both ends. - If the range is trivial, the number pair can be simplified as - a single number. If the function's call graph node's UID - falls within one of the specified ranges, the PASS is disabled - for that function. The UID is shown in the function header of - a dump file, and the pass names can be dumped by using option - '-fdump-passes'. - - '-fdisable-tree-PASS' - '-fdisable-tree-PASS=RANGE-LIST' - Disable tree pass PASS. See '-fdisable-rtl' for the - description of option arguments. - - '-fenable-ipa-PASS' - Enable IPA pass PASS. PASS is the pass name. If the same - pass is statically invoked in the compiler multiple times, the - pass name should be appended with a sequential number starting - from 1. - - '-fenable-rtl-PASS' - '-fenable-rtl-PASS=RANGE-LIST' - Enable RTL pass PASS. See '-fdisable-rtl' for option argument - description and examples. - - '-fenable-tree-PASS' - '-fenable-tree-PASS=RANGE-LIST' - Enable tree pass PASS. See '-fdisable-rtl' for the - description of option arguments. - - Here are some examples showing uses of these options. - - - # disable ccp1 for all functions - -fdisable-tree-ccp1 - # disable complete unroll for function whose cgraph node uid is 1 - -fenable-tree-cunroll=1 - # disable gcse2 for functions at the following ranges [1,1], - # [300,400], and [400,1000] - # disable gcse2 for functions foo and foo2 - -fdisable-rtl-gcse2=foo,foo2 - # disable early inlining - -fdisable-tree-einline - # disable ipa inlining - -fdisable-ipa-inline - # enable tree full unroll - -fenable-tree-unroll - -'-dLETTERS' -'-fdump-rtl-PASS' -'-fdump-rtl-PASS=FILENAME' - Says to make debugging dumps during compilation at times specified - by LETTERS. This is used for debugging the RTL-based passes of the - compiler. The file names for most of the dumps are made by - appending a pass number and a word to the DUMPNAME, and the files - are created in the directory of the output file. In case of - '=FILENAME' option, the dump is output on the given file instead of - the pass numbered dump files. Note that the pass number is - computed statically as passes get registered into the pass manager. - Thus the numbering is not related to the dynamic order of execution - of passes. In particular, a pass installed by a plugin could have - a number over 200 even if it executed quite early. DUMPNAME is - generated from the name of the output file, if explicitly specified - and it is not an executable, otherwise it is the basename of the - source file. These switches may have different effects when '-E' - is used for preprocessing. - - Debug dumps can be enabled with a '-fdump-rtl' switch or some '-d' - option LETTERS. Here are the possible letters for use in PASS and - LETTERS, and their meanings: - - '-fdump-rtl-alignments' - Dump after branch alignments have been computed. - - '-fdump-rtl-asmcons' - Dump after fixing rtl statements that have unsatisfied in/out - constraints. - - '-fdump-rtl-auto_inc_dec' - Dump after auto-inc-dec discovery. This pass is only run on - architectures that have auto inc or auto dec instructions. - - '-fdump-rtl-barriers' - Dump after cleaning up the barrier instructions. - - '-fdump-rtl-bbpart' - Dump after partitioning hot and cold basic blocks. - - '-fdump-rtl-bbro' - Dump after block reordering. - - '-fdump-rtl-btl1' - '-fdump-rtl-btl2' - '-fdump-rtl-btl1' and '-fdump-rtl-btl2' enable dumping after - the two branch target load optimization passes. - - '-fdump-rtl-bypass' - Dump after jump bypassing and control flow optimizations. - - '-fdump-rtl-combine' - Dump after the RTL instruction combination pass. - - '-fdump-rtl-compgotos' - Dump after duplicating the computed gotos. - - '-fdump-rtl-ce1' - '-fdump-rtl-ce2' - '-fdump-rtl-ce3' - '-fdump-rtl-ce1', '-fdump-rtl-ce2', and '-fdump-rtl-ce3' - enable dumping after the three if conversion passes. - - '-fdump-rtl-cprop_hardreg' - Dump after hard register copy propagation. - - '-fdump-rtl-csa' - Dump after combining stack adjustments. - - '-fdump-rtl-cse1' - '-fdump-rtl-cse2' - '-fdump-rtl-cse1' and '-fdump-rtl-cse2' enable dumping after - the two common subexpression elimination passes. - - '-fdump-rtl-dce' - Dump after the standalone dead code elimination passes. - - '-fdump-rtl-dbr' - Dump after delayed branch scheduling. - - '-fdump-rtl-dce1' - '-fdump-rtl-dce2' - '-fdump-rtl-dce1' and '-fdump-rtl-dce2' enable dumping after - the two dead store elimination passes. - - '-fdump-rtl-eh' - Dump after finalization of EH handling code. - - '-fdump-rtl-eh_ranges' - Dump after conversion of EH handling range regions. - - '-fdump-rtl-expand' - Dump after RTL generation. - - '-fdump-rtl-fwprop1' - '-fdump-rtl-fwprop2' - '-fdump-rtl-fwprop1' and '-fdump-rtl-fwprop2' enable dumping - after the two forward propagation passes. - - '-fdump-rtl-gcse1' - '-fdump-rtl-gcse2' - '-fdump-rtl-gcse1' and '-fdump-rtl-gcse2' enable dumping after - global common subexpression elimination. - - '-fdump-rtl-init-regs' - Dump after the initialization of the registers. - - '-fdump-rtl-initvals' - Dump after the computation of the initial value sets. - - '-fdump-rtl-into_cfglayout' - Dump after converting to cfglayout mode. - - '-fdump-rtl-ira' - Dump after iterated register allocation. - - '-fdump-rtl-jump' - Dump after the second jump optimization. - - '-fdump-rtl-loop2' - '-fdump-rtl-loop2' enables dumping after the rtl loop - optimization passes. - - '-fdump-rtl-mach' - Dump after performing the machine dependent reorganization - pass, if that pass exists. - - '-fdump-rtl-mode_sw' - Dump after removing redundant mode switches. - - '-fdump-rtl-rnreg' - Dump after register renumbering. - - '-fdump-rtl-outof_cfglayout' - Dump after converting from cfglayout mode. - - '-fdump-rtl-peephole2' - Dump after the peephole pass. - - '-fdump-rtl-postreload' - Dump after post-reload optimizations. - - '-fdump-rtl-pro_and_epilogue' - Dump after generating the function prologues and epilogues. - - '-fdump-rtl-sched1' - '-fdump-rtl-sched2' - '-fdump-rtl-sched1' and '-fdump-rtl-sched2' enable dumping - after the basic block scheduling passes. - - '-fdump-rtl-ree' - Dump after sign/zero extension elimination. - - '-fdump-rtl-seqabstr' - Dump after common sequence discovery. - - '-fdump-rtl-shorten' - Dump after shortening branches. - - '-fdump-rtl-sibling' - Dump after sibling call optimizations. - - '-fdump-rtl-split1' - '-fdump-rtl-split2' - '-fdump-rtl-split3' - '-fdump-rtl-split4' - '-fdump-rtl-split5' - '-fdump-rtl-split1', '-fdump-rtl-split2', '-fdump-rtl-split3', - '-fdump-rtl-split4' and '-fdump-rtl-split5' enable dumping - after five rounds of instruction splitting. - - '-fdump-rtl-sms' - Dump after modulo scheduling. This pass is only run on some - architectures. - - '-fdump-rtl-stack' - Dump after conversion from GCC's "flat register file" - registers to the x87's stack-like registers. This pass is - only run on x86 variants. - - '-fdump-rtl-subreg1' - '-fdump-rtl-subreg2' - '-fdump-rtl-subreg1' and '-fdump-rtl-subreg2' enable dumping - after the two subreg expansion passes. - - '-fdump-rtl-unshare' - Dump after all rtl has been unshared. - - '-fdump-rtl-vartrack' - Dump after variable tracking. - - '-fdump-rtl-vregs' - Dump after converting virtual registers to hard registers. - - '-fdump-rtl-web' - Dump after live range splitting. - - '-fdump-rtl-regclass' - '-fdump-rtl-subregs_of_mode_init' - '-fdump-rtl-subregs_of_mode_finish' - '-fdump-rtl-dfinit' - '-fdump-rtl-dfinish' - These dumps are defined but always produce empty files. - - '-da' - '-fdump-rtl-all' - Produce all the dumps listed above. - - '-dA' - Annotate the assembler output with miscellaneous debugging - information. - - '-dD' - Dump all macro definitions, at the end of preprocessing, in - addition to normal output. - - '-dH' - Produce a core dump whenever an error occurs. - - '-dp' - Annotate the assembler output with a comment indicating which - pattern and alternative is used. The length of each - instruction is also printed. - - '-dP' - Dump the RTL in the assembler output as a comment before each - instruction. Also turns on '-dp' annotation. - - '-dx' - Just generate RTL for a function instead of compiling it. - Usually used with '-fdump-rtl-expand'. - -'-fdump-noaddr' - When doing debugging dumps, suppress address output. This makes it - more feasible to use diff on debugging dumps for compiler - invocations with different compiler binaries and/or different text - / bss / data / heap / stack / dso start locations. - -'-fdump-unnumbered' - When doing debugging dumps, suppress instruction numbers and - address output. This makes it more feasible to use diff on - debugging dumps for compiler invocations with different options, in - particular with and without '-g'. - -'-fdump-unnumbered-links' - When doing debugging dumps (see '-d' option above), suppress - instruction numbers for the links to the previous and next - instructions in a sequence. - -'-fdump-translation-unit (C++ only)' -'-fdump-translation-unit-OPTIONS (C++ only)' - Dump a representation of the tree structure for the entire - translation unit to a file. The file name is made by appending - '.tu' to the source file name, and the file is created in the same - directory as the output file. If the '-OPTIONS' form is used, - OPTIONS controls the details of the dump as described for the - '-fdump-tree' options. - -'-fdump-class-hierarchy (C++ only)' -'-fdump-class-hierarchy-OPTIONS (C++ only)' - Dump a representation of each class's hierarchy and virtual - function table layout to a file. The file name is made by - appending '.class' to the source file name, and the file is created - in the same directory as the output file. If the '-OPTIONS' form - is used, OPTIONS controls the details of the dump as described for - the '-fdump-tree' options. - -'-fdump-ipa-SWITCH' - Control the dumping at various stages of inter-procedural analysis - language tree to a file. The file name is generated by appending a - switch specific suffix to the source file name, and the file is - created in the same directory as the output file. The following - dumps are possible: - - 'all' - Enables all inter-procedural analysis dumps. - - 'cgraph' - Dumps information about call-graph optimization, unused - function removal, and inlining decisions. - - 'inline' - Dump after function inlining. - -'-fdump-passes' - Dump the list of optimization passes that are turned on and off by - the current command-line options. - -'-fdump-statistics-OPTION' - Enable and control dumping of pass statistics in a separate file. - The file name is generated by appending a suffix ending in - '.statistics' to the source file name, and the file is created in - the same directory as the output file. If the '-OPTION' form is - used, '-stats' causes counters to be summed over the whole - compilation unit while '-details' dumps every event as the passes - generate them. The default with no option is to sum counters for - each function compiled. - -'-fdump-tree-SWITCH' -'-fdump-tree-SWITCH-OPTIONS' -'-fdump-tree-SWITCH-OPTIONS=FILENAME' - Control the dumping at various stages of processing the - intermediate language tree to a file. The file name is generated - by appending a switch-specific suffix to the source file name, and - the file is created in the same directory as the output file. In - case of '=FILENAME' option, the dump is output on the given file - instead of the auto named dump files. If the '-OPTIONS' form is - used, OPTIONS is a list of '-' separated options which control the - details of the dump. Not all options are applicable to all dumps; - those that are not meaningful are ignored. The following options - are available - - 'address' - Print the address of each node. Usually this is not - meaningful as it changes according to the environment and - source file. Its primary use is for tying up a dump file with - a debug environment. - 'asmname' - If 'DECL_ASSEMBLER_NAME' has been set for a given decl, use - that in the dump instead of 'DECL_NAME'. Its primary use is - ease of use working backward from mangled names in the - assembly file. - 'slim' - When dumping front-end intermediate representations, inhibit - dumping of members of a scope or body of a function merely - because that scope has been reached. Only dump such items - when they are directly reachable by some other path. - - When dumping pretty-printed trees, this option inhibits - dumping the bodies of control structures. - - When dumping RTL, print the RTL in slim (condensed) form - instead of the default LISP-like representation. - 'raw' - Print a raw representation of the tree. By default, trees are - pretty-printed into a C-like representation. - 'details' - Enable more detailed dumps (not honored by every dump option). - Also include information from the optimization passes. - 'stats' - Enable dumping various statistics about the pass (not honored - by every dump option). - 'blocks' - Enable showing basic block boundaries (disabled in raw dumps). - 'graph' - For each of the other indicated dump files - ('-fdump-rtl-PASS'), dump a representation of the control flow - graph suitable for viewing with GraphViz to - 'FILE.PASSID.PASS.dot'. Each function in the file is - pretty-printed as a subgraph, so that GraphViz can render them - all in a single plot. - - This option currently only works for RTL dumps, and the RTL is - always dumped in slim form. - 'vops' - Enable showing virtual operands for every statement. - 'lineno' - Enable showing line numbers for statements. - 'uid' - Enable showing the unique ID ('DECL_UID') for each variable. - 'verbose' - Enable showing the tree dump for each statement. - 'eh' - Enable showing the EH region number holding each statement. - 'scev' - Enable showing scalar evolution analysis details. - 'optimized' - Enable showing optimization information (only available in - certain passes). - 'missed' - Enable showing missed optimization information (only available - in certain passes). - 'notes' - Enable other detailed optimization information (only available - in certain passes). - '=FILENAME' - Instead of an auto named dump file, output into the given file - name. The file names 'stdout' and 'stderr' are treated - specially and are considered already open standard streams. - For example, - - gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump - -fdump-tree-pre=stderr file.c - - outputs vectorizer dump into 'foo.dump', while the PRE dump is - output on to 'stderr'. If two conflicting dump filenames are - given for the same pass, then the latter option overrides the - earlier one. - - 'all' - Turn on all options, except 'raw', 'slim', 'verbose' and - 'lineno'. - - 'optall' - Turn on all optimization options, i.e., 'optimized', 'missed', - and 'note'. - - The following tree dumps are possible: - - 'original' - Dump before any tree based optimization, to 'FILE.original'. - - 'optimized' - Dump after all tree based optimization, to 'FILE.optimized'. - - 'gimple' - Dump each function before and after the gimplification pass to - a file. The file name is made by appending '.gimple' to the - source file name. - - 'cfg' - Dump the control flow graph of each function to a file. The - file name is made by appending '.cfg' to the source file name. - - 'ch' - Dump each function after copying loop headers. The file name - is made by appending '.ch' to the source file name. - - 'ssa' - Dump SSA related information to a file. The file name is made - by appending '.ssa' to the source file name. - - 'alias' - Dump aliasing information for each function. The file name is - made by appending '.alias' to the source file name. - - 'ccp' - Dump each function after CCP. The file name is made by - appending '.ccp' to the source file name. - - 'storeccp' - Dump each function after STORE-CCP. The file name is made by - appending '.storeccp' to the source file name. - - 'pre' - Dump trees after partial redundancy elimination. The file - name is made by appending '.pre' to the source file name. - - 'fre' - Dump trees after full redundancy elimination. The file name - is made by appending '.fre' to the source file name. - - 'copyprop' - Dump trees after copy propagation. The file name is made by - appending '.copyprop' to the source file name. - - 'store_copyprop' - Dump trees after store copy-propagation. The file name is - made by appending '.store_copyprop' to the source file name. - - 'dce' - Dump each function after dead code elimination. The file name - is made by appending '.dce' to the source file name. - - 'sra' - Dump each function after performing scalar replacement of - aggregates. The file name is made by appending '.sra' to the - source file name. - - 'sink' - Dump each function after performing code sinking. The file - name is made by appending '.sink' to the source file name. - - 'dom' - Dump each function after applying dominator tree - optimizations. The file name is made by appending '.dom' to - the source file name. - - 'dse' - Dump each function after applying dead store elimination. The - file name is made by appending '.dse' to the source file name. - - 'phiopt' - Dump each function after optimizing PHI nodes into - straightline code. The file name is made by appending - '.phiopt' to the source file name. - - 'forwprop' - Dump each function after forward propagating single use - variables. The file name is made by appending '.forwprop' to - the source file name. - - 'copyrename' - Dump each function after applying the copy rename - optimization. The file name is made by appending - '.copyrename' to the source file name. - - 'nrv' - Dump each function after applying the named return value - optimization on generic trees. The file name is made by - appending '.nrv' to the source file name. - - 'vect' - Dump each function after applying vectorization of loops. The - file name is made by appending '.vect' to the source file - name. - - 'slp' - Dump each function after applying vectorization of basic - blocks. The file name is made by appending '.slp' to the - source file name. - - 'vrp' - Dump each function after Value Range Propagation (VRP). The - file name is made by appending '.vrp' to the source file name. - - 'all' - Enable all the available tree dumps with the flags provided in - this option. - -'-fopt-info' -'-fopt-info-OPTIONS' -'-fopt-info-OPTIONS=FILENAME' - Controls optimization dumps from various optimization passes. If - the '-OPTIONS' form is used, OPTIONS is a list of '-' separated - options to select the dump details and optimizations. If OPTIONS - is not specified, it defaults to 'optimized' for details and - 'optall' for optimization groups. If the FILENAME is not - specified, it defaults to 'stderr'. Note that the output FILENAME - will be overwritten in case of multiple translation units. If a - combined output from multiple translation units is desired, - 'stderr' should be used instead. - - The options can be divided into two groups, 1) options describing - the verbosity of the dump, and 2) options describing which - optimizations should be included. The options from both the groups - can be freely mixed as they are non-overlapping. However, in case - of any conflicts, the latter options override the earlier options - on the command line. Though multiple -fopt-info options are - accepted, only one of them can have '=filename'. If other - filenames are provided then all but the first one are ignored. - - The dump verbosity has the following options - - 'optimized' - Print information when an optimization is successfully - applied. It is up to a pass to decide which information is - relevant. For example, the vectorizer passes print the source - location of loops which got successfully vectorized. - 'missed' - Print information about missed optimizations. Individual - passes control which information to include in the output. - For example, - - gcc -O2 -ftree-vectorize -fopt-info-vec-missed - - will print information about missed optimization opportunities - from vectorization passes on stderr. - 'note' - Print verbose information about optimizations, such as certain - transformations, more detailed messages about decisions etc. - 'all' - Print detailed optimization information. This includes - OPTIMIZED, MISSED, and NOTE. - - The second set of options describes a group of optimizations and - may include one or more of the following. - - 'ipa' - Enable dumps from all interprocedural optimizations. - 'loop' - Enable dumps from all loop optimizations. - 'inline' - Enable dumps from all inlining optimizations. - 'vec' - Enable dumps from all vectorization optimizations. - 'optall' - Enable dumps from all optimizations. This is a superset of - the optimization groups listed above. - - For example, - gcc -O3 -fopt-info-missed=missed.all - - outputs missed optimization report from all the passes into - 'missed.all'. - - As another example, - gcc -O3 -fopt-info-inline-optimized-missed=inline.txt - - will output information about missed optimizations as well as - optimized locations from all the inlining passes into 'inline.txt'. - - If the FILENAME is provided, then the dumps from all the applicable - optimizations are concatenated into the 'filename'. Otherwise the - dump is output onto 'stderr'. If OPTIONS is omitted, it defaults - to 'all-optall', which means dump all available optimization info - from all the passes. In the following example, all optimization - info is output on to 'stderr'. - - gcc -O3 -fopt-info - - Note that '-fopt-info-vec-missed' behaves the same as - '-fopt-info-missed-vec'. - - As another example, consider - - gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt - - Here the two output filenames 'vec.miss' and 'loop.opt' are in - conflict since only one output file is allowed. In this case, only - the first option takes effect and the subsequent options are - ignored. Thus only the 'vec.miss' is produced which contains dumps - from the vectorizer about missed opportunities. - -'-frandom-seed=STRING' - This option provides a seed that GCC uses in place of random - numbers in generating certain symbol names that have to be - different in every compiled file. It is also used to place unique - stamps in coverage data files and the object files that produce - them. You can use the '-frandom-seed' option to produce - reproducibly identical object files. - - The STRING should be different for every file you compile. - -'-fsched-verbose=N' - On targets that use instruction scheduling, this option controls - the amount of debugging output the scheduler prints. This - information is written to standard error, unless - '-fdump-rtl-sched1' or '-fdump-rtl-sched2' is specified, in which - case it is output to the usual dump listing file, '.sched1' or - '.sched2' respectively. However for N greater than nine, the - output is always printed to standard error. - - For N greater than zero, '-fsched-verbose' outputs the same - information as '-fdump-rtl-sched1' and '-fdump-rtl-sched2'. For N - greater than one, it also output basic block probabilities, - detailed ready list information and unit/insn info. For N greater - than two, it includes RTL at abort point, control-flow and regions - info. And for N over four, '-fsched-verbose' also includes - dependence info. - -'-save-temps' -'-save-temps=cwd' - Store the usual "temporary" intermediate files permanently; place - them in the current directory and name them based on the source - file. Thus, compiling 'foo.c' with '-c -save-temps' produces files - 'foo.i' and 'foo.s', as well as 'foo.o'. This creates a - preprocessed 'foo.i' output file even though the compiler now - normally uses an integrated preprocessor. - - When used in combination with the '-x' command-line option, - '-save-temps' is sensible enough to avoid over writing an input - source file with the same extension as an intermediate file. The - corresponding intermediate file may be obtained by renaming the - source file before using '-save-temps'. - - If you invoke GCC in parallel, compiling several different source - files that share a common base name in different subdirectories or - the same source file compiled for multiple output destinations, it - is likely that the different parallel compilers will interfere with - each other, and overwrite the temporary files. For instance: - - gcc -save-temps -o outdir1/foo.o indir1/foo.c& - gcc -save-temps -o outdir2/foo.o indir2/foo.c& - - may result in 'foo.i' and 'foo.o' being written to simultaneously - by both compilers. - -'-save-temps=obj' - Store the usual "temporary" intermediate files permanently. If the - '-o' option is used, the temporary files are based on the object - file. If the '-o' option is not used, the '-save-temps=obj' switch - behaves like '-save-temps'. - - For example: - - gcc -save-temps=obj -c foo.c - gcc -save-temps=obj -c bar.c -o dir/xbar.o - gcc -save-temps=obj foobar.c -o dir2/yfoobar - - creates 'foo.i', 'foo.s', 'dir/xbar.i', 'dir/xbar.s', - 'dir2/yfoobar.i', 'dir2/yfoobar.s', and 'dir2/yfoobar.o'. - -'-time[=FILE]' - Report the CPU time taken by each subprocess in the compilation - sequence. For C source files, this is the compiler proper and - assembler (plus the linker if linking is done). - - Without the specification of an output file, the output looks like - this: - - # cc1 0.12 0.01 - # as 0.00 0.01 - - The first number on each line is the "user time", that is time - spent executing the program itself. The second number is "system - time", time spent executing operating system routines on behalf of - the program. Both numbers are in seconds. - - With the specification of an output file, the output is appended to - the named file, and it looks like this: - - 0.12 0.01 cc1 OPTIONS - 0.00 0.01 as OPTIONS - - The "user time" and the "system time" are moved before the program - name, and the options passed to the program are displayed, so that - one can later tell what file was being compiled, and with which - options. - -'-fvar-tracking' - Run variable tracking pass. It computes where variables are stored - at each position in code. Better debugging information is then - generated (if the debugging information format supports this - information). - - It is enabled by default when compiling with optimization ('-Os', - '-O', '-O2', ...), debugging information ('-g') and the debug info - format supports it. - -'-fvar-tracking-assignments' - Annotate assignments to user variables early in the compilation and - attempt to carry the annotations over throughout the compilation - all the way to the end, in an attempt to improve debug information - while optimizing. Use of '-gdwarf-4' is recommended along with it. - - It can be enabled even if var-tracking is disabled, in which case - annotations are created and maintained, but discarded at the end. - -'-fvar-tracking-assignments-toggle' - Toggle '-fvar-tracking-assignments', in the same way that - '-gtoggle' toggles '-g'. - -'-print-file-name=LIBRARY' - Print the full absolute name of the library file LIBRARY that would - be used when linking--and don't do anything else. With this - option, GCC does not compile or link anything; it just prints the - file name. - -'-print-multi-directory' - Print the directory name corresponding to the multilib selected by - any other switches present in the command line. This directory is - supposed to exist in 'GCC_EXEC_PREFIX'. - -'-print-multi-lib' - Print the mapping from multilib directory names to compiler - switches that enable them. The directory name is separated from - the switches by ';', and each switch starts with an '@' instead of - the '-', without spaces between multiple switches. This is - supposed to ease shell processing. - -'-print-multi-os-directory' - Print the path to OS libraries for the selected multilib, relative - to some 'lib' subdirectory. If OS libraries are present in the - 'lib' subdirectory and no multilibs are used, this is usually just - '.', if OS libraries are present in 'libSUFFIX' sibling directories - this prints e.g. '../lib64', '../lib' or '../lib32', or if OS - libraries are present in 'lib/SUBDIR' subdirectories it prints e.g. - 'amd64', 'sparcv9' or 'ev6'. - -'-print-multiarch' - Print the path to OS libraries for the selected multiarch, relative - to some 'lib' subdirectory. - -'-print-prog-name=PROGRAM' - Like '-print-file-name', but searches for a program such as 'cpp'. - -'-print-libgcc-file-name' - Same as '-print-file-name=libgcc.a'. - - This is useful when you use '-nostdlib' or '-nodefaultlibs' but you - do want to link with 'libgcc.a'. You can do: - - gcc -nostdlib FILES... `gcc -print-libgcc-file-name` - -'-print-search-dirs' - Print the name of the configured installation directory and a list - of program and library directories 'gcc' searches--and don't do - anything else. - - This is useful when 'gcc' prints the error message 'installation - problem, cannot exec cpp0: No such file or directory'. To resolve - this you either need to put 'cpp0' and the other compiler - components where 'gcc' expects to find them, or you can set the - environment variable 'GCC_EXEC_PREFIX' to the directory where you - installed them. Don't forget the trailing '/'. *Note Environment - Variables::. - -'-print-sysroot' - Print the target sysroot directory that is used during compilation. - This is the target sysroot specified either at configure time or - using the '--sysroot' option, possibly with an extra suffix that - depends on compilation options. If no target sysroot is specified, - the option prints nothing. - -'-print-sysroot-headers-suffix' - Print the suffix added to the target sysroot when searching for - headers, or give an error if the compiler is not configured with - such a suffix--and don't do anything else. - -'-dumpmachine' - Print the compiler's target machine (for example, - 'i686-pc-linux-gnu')--and don't do anything else. - -'-dumpversion' - Print the compiler version (for example, '3.0')--and don't do - anything else. - -'-dumpspecs' - Print the compiler's built-in specs--and don't do anything else. - (This is used when GCC itself is being built.) *Note Spec Files::. - -'-fno-eliminate-unused-debug-types' - Normally, when producing DWARF 2 output, GCC avoids producing debug - symbol output for types that are nowhere used in the source file - being compiled. Sometimes it is useful to have GCC emit debugging - information for all types declared in a compilation unit, - regardless of whether or not they are actually used in that - compilation unit, for example if, in the debugger, you want to cast - a value to a type that is not actually used in your program (but is - declared). More often, however, this results in a significant - amount of wasted space. - - -File: gcc.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking GCC - -3.10 Options That Control Optimization -====================================== - -These options control various sorts of optimizations. - - Without any optimization option, the compiler's goal is to reduce the -cost of compilation and to make debugging produce the expected results. -Statements are independent: if you stop the program with a breakpoint -between statements, you can then assign a new value to any variable or -change the program counter to any other statement in the function and -get exactly the results you expect from the source code. - - Turning on optimization flags makes the compiler attempt to improve the -performance and/or code size at the expense of compilation time and -possibly the ability to debug the program. - - The compiler performs optimization based on the knowledge it has of the -program. Compiling multiple files at once to a single output file mode -allows the compiler to use information gained from all of the files when -compiling each of them. - - Not all optimizations are controlled directly by a flag. Only -optimizations that have a flag are listed in this section. - - Most optimizations are only enabled if an '-O' level is set on the -command line. Otherwise they are disabled, even if individual -optimization flags are specified. - - Depending on the target and how GCC was configured, a slightly -different set of optimizations may be enabled at each '-O' level than -those listed here. You can invoke GCC with '-Q --help=optimizers' to -find out the exact set of optimizations that are enabled at each level. -*Note Overall Options::, for examples. - -'-O' -'-O1' - Optimize. Optimizing compilation takes somewhat more time, and a - lot more memory for a large function. - - With '-O', the compiler tries to reduce code size and execution - time, without performing any optimizations that take a great deal - of compilation time. - - '-O' turns on the following optimization flags: - -fauto-inc-dec - -fcompare-elim - -fcprop-registers - -fdce - -fdefer-pop - -fdelayed-branch - -fdse - -fguess-branch-probability - -fif-conversion2 - -fif-conversion - -fipa-pure-const - -fipa-profile - -fipa-reference - -fmerge-constants - -fsplit-wide-types - -ftree-bit-ccp - -ftree-builtin-call-dce - -ftree-ccp - -ftree-ch - -ftree-copyrename - -ftree-dce - -ftree-dominator-opts - -ftree-dse - -ftree-forwprop - -ftree-fre - -ftree-phiprop - -ftree-slsr - -ftree-sra - -ftree-pta - -ftree-ter - -funit-at-a-time - - '-O' also turns on '-fomit-frame-pointer' on machines where doing - so does not interfere with debugging. - -'-O2' - Optimize even more. GCC performs nearly all supported - optimizations that do not involve a space-speed tradeoff. As - compared to '-O', this option increases both compilation time and - the performance of the generated code. - - '-O2' turns on all optimization flags specified by '-O'. It also - turns on the following optimization flags: - -fthread-jumps - -falign-functions -falign-jumps - -falign-loops -falign-labels - -fcaller-saves - -fcrossjumping - -fcse-follow-jumps -fcse-skip-blocks - -fdelete-null-pointer-checks - -fdevirtualize -fdevirtualize-speculatively - -fexpensive-optimizations - -fgcse -fgcse-lm - -fhoist-adjacent-loads - -finline-small-functions - -findirect-inlining - -fipa-sra - -fisolate-erroneous-paths-dereference - -foptimize-sibling-calls - -fpartial-inlining - -fpeephole2 - -freorder-blocks -freorder-functions - -frerun-cse-after-loop - -fsched-interblock -fsched-spec - -fschedule-insns -fschedule-insns2 - -fstrict-aliasing -fstrict-overflow - -ftree-switch-conversion -ftree-tail-merge - -ftree-pre - -ftree-vrp - - Please note the warning under '-fgcse' about invoking '-O2' on - programs that use computed gotos. - -'-O3' - Optimize yet more. '-O3' turns on all optimizations specified by - '-O2' and also turns on the '-finline-functions', - '-funswitch-loops', '-fpredictive-commoning', - '-fgcse-after-reload', '-ftree-loop-vectorize', - '-ftree-slp-vectorize', '-fvect-cost-model', '-ftree-partial-pre' - and '-fipa-cp-clone' options. - -'-O0' - Reduce compilation time and make debugging produce the expected - results. This is the default. - -'-Os' - Optimize for size. '-Os' enables all '-O2' optimizations that do - not typically increase code size. It also performs further - optimizations designed to reduce code size. - - '-Os' disables the following optimization flags: - -falign-functions -falign-jumps -falign-loops - -falign-labels -freorder-blocks -freorder-blocks-and-partition - -fprefetch-loop-arrays - -'-Ofast' - Disregard strict standards compliance. '-Ofast' enables all '-O3' - optimizations. It also enables optimizations that are not valid - for all standard-compliant programs. It turns on '-ffast-math' and - the Fortran-specific '-fno-protect-parens' and '-fstack-arrays'. - -'-Og' - Optimize debugging experience. '-Og' enables optimizations that do - not interfere with debugging. It should be the optimization level - of choice for the standard edit-compile-debug cycle, offering a - reasonable level of optimization while maintaining fast compilation - and a good debugging experience. - - If you use multiple '-O' options, with or without level numbers, - the last such option is the one that is effective. - - Options of the form '-fFLAG' specify machine-independent flags. Most -flags have both positive and negative forms; the negative form of -'-ffoo' is '-fno-foo'. In the table below, only one of the forms is -listed--the one you typically use. You can figure out the other form by -either removing 'no-' or adding it. - - The following options control specific optimizations. They are either -activated by '-O' options or are related to ones that are. You can use -the following flags in the rare cases when "fine-tuning" of -optimizations to be performed is desired. - -'-fno-defer-pop' - Always pop the arguments to each function call as soon as that - function returns. For machines that must pop arguments after a - function call, the compiler normally lets arguments accumulate on - the stack for several function calls and pops them all at once. - - Disabled at levels '-O', '-O2', '-O3', '-Os'. - -'-fforward-propagate' - Perform a forward propagation pass on RTL. The pass tries to - combine two instructions and checks if the result can be - simplified. If loop unrolling is active, two passes are performed - and the second is scheduled after loop unrolling. - - This option is enabled by default at optimization levels '-O', - '-O2', '-O3', '-Os'. - -'-ffp-contract=STYLE' - '-ffp-contract=off' disables floating-point expression contraction. - '-ffp-contract=fast' enables floating-point expression contraction - such as forming of fused multiply-add operations if the target has - native support for them. '-ffp-contract=on' enables floating-point - expression contraction if allowed by the language standard. This - is currently not implemented and treated equal to - '-ffp-contract=off'. - - The default is '-ffp-contract=fast'. - -'-fomit-frame-pointer' - Don't keep the frame pointer in a register for functions that don't - need one. This avoids the instructions to save, set up and restore - frame pointers; it also makes an extra register available in many - functions. *It also makes debugging impossible on some machines.* - - On some machines, such as the VAX, this flag has no effect, because - the standard calling sequence automatically handles the frame - pointer and nothing is saved by pretending it doesn't exist. The - machine-description macro 'FRAME_POINTER_REQUIRED' controls whether - a target machine supports this flag. *Note Register Usage: - (gccint)Registers. - - Starting with GCC version 4.6, the default setting (when not - optimizing for size) for 32-bit GNU/Linux x86 and 32-bit Darwin x86 - targets has been changed to '-fomit-frame-pointer'. The default - can be reverted to '-fno-omit-frame-pointer' by configuring GCC - with the '--enable-frame-pointer' configure option. - - Enabled at levels '-O', '-O2', '-O3', '-Os'. - -'-foptimize-sibling-calls' - Optimize sibling and tail recursive calls. - - Enabled at levels '-O2', '-O3', '-Os'. - -'-fno-inline' - Do not expand any functions inline apart from those marked with the - 'always_inline' attribute. This is the default when not - optimizing. - - Single functions can be exempted from inlining by marking them with - the 'noinline' attribute. - -'-finline-small-functions' - Integrate functions into their callers when their body is smaller - than expected function call code (so overall size of program gets - smaller). The compiler heuristically decides which functions are - simple enough to be worth integrating in this way. This inlining - applies to all functions, even those not declared inline. - - Enabled at level '-O2'. - -'-findirect-inlining' - Inline also indirect calls that are discovered to be known at - compile time thanks to previous inlining. This option has any - effect only when inlining itself is turned on by the - '-finline-functions' or '-finline-small-functions' options. - - Enabled at level '-O2'. - -'-finline-functions' - Consider all functions for inlining, even if they are not declared - inline. The compiler heuristically decides which functions are - worth integrating in this way. - - If all calls to a given function are integrated, and the function - is declared 'static', then the function is normally not output as - assembler code in its own right. - - Enabled at level '-O3'. - -'-finline-functions-called-once' - Consider all 'static' functions called once for inlining into their - caller even if they are not marked 'inline'. If a call to a given - function is integrated, then the function is not output as - assembler code in its own right. - - Enabled at levels '-O1', '-O2', '-O3' and '-Os'. - -'-fearly-inlining' - Inline functions marked by 'always_inline' and functions whose body - seems smaller than the function call overhead early before doing - '-fprofile-generate' instrumentation and real inlining pass. Doing - so makes profiling significantly cheaper and usually inlining - faster on programs having large chains of nested wrapper functions. - - Enabled by default. - -'-fipa-sra' - Perform interprocedural scalar replacement of aggregates, removal - of unused parameters and replacement of parameters passed by - reference by parameters passed by value. - - Enabled at levels '-O2', '-O3' and '-Os'. - -'-finline-limit=N' - By default, GCC limits the size of functions that can be inlined. - This flag allows coarse control of this limit. N is the size of - functions that can be inlined in number of pseudo instructions. - - Inlining is actually controlled by a number of parameters, which - may be specified individually by using '--param NAME=VALUE'. The - '-finline-limit=N' option sets some of these parameters as follows: - - 'max-inline-insns-single' - is set to N/2. - 'max-inline-insns-auto' - is set to N/2. - - See below for a documentation of the individual parameters - controlling inlining and for the defaults of these parameters. - - _Note:_ there may be no value to '-finline-limit' that results in - default behavior. - - _Note:_ pseudo instruction represents, in this particular context, - an abstract measurement of function's size. In no way does it - represent a count of assembly instructions and as such its exact - meaning might change from one release to an another. - -'-fno-keep-inline-dllexport' - This is a more fine-grained version of '-fkeep-inline-functions', - which applies only to functions that are declared using the - 'dllexport' attribute or declspec (*Note Declaring Attributes of - Functions: Function Attributes.) - -'-fkeep-inline-functions' - In C, emit 'static' functions that are declared 'inline' into the - object file, even if the function has been inlined into all of its - callers. This switch does not affect functions using the 'extern - inline' extension in GNU C90. In C++, emit any and all inline - functions into the object file. - -'-fkeep-static-consts' - Emit variables declared 'static const' when optimization isn't - turned on, even if the variables aren't referenced. - - GCC enables this option by default. If you want to force the - compiler to check if a variable is referenced, regardless of - whether or not optimization is turned on, use the - '-fno-keep-static-consts' option. - -'-fmerge-constants' - Attempt to merge identical constants (string constants and - floating-point constants) across compilation units. - - This option is the default for optimized compilation if the - assembler and linker support it. Use '-fno-merge-constants' to - inhibit this behavior. - - Enabled at levels '-O', '-O2', '-O3', '-Os'. - -'-fmerge-all-constants' - Attempt to merge identical constants and identical variables. - - This option implies '-fmerge-constants'. In addition to - '-fmerge-constants' this considers e.g. even constant initialized - arrays or initialized constant variables with integral or - floating-point types. Languages like C or C++ require each - variable, including multiple instances of the same variable in - recursive calls, to have distinct locations, so using this option - results in non-conforming behavior. - -'-fmodulo-sched' - Perform swing modulo scheduling immediately before the first - scheduling pass. This pass looks at innermost loops and reorders - their instructions by overlapping different iterations. - -'-fmodulo-sched-allow-regmoves' - Perform more aggressive SMS-based modulo scheduling with register - moves allowed. By setting this flag certain anti-dependences edges - are deleted, which triggers the generation of reg-moves based on - the life-range analysis. This option is effective only with - '-fmodulo-sched' enabled. - -'-fno-branch-count-reg' - Do not use "decrement and branch" instructions on a count register, - but instead generate a sequence of instructions that decrement a - register, compare it against zero, then branch based upon the - result. This option is only meaningful on architectures that - support such instructions, which include x86, PowerPC, IA-64 and - S/390. - - The default is '-fbranch-count-reg'. - -'-fno-function-cse' - Do not put function addresses in registers; make each instruction - that calls a constant function contain the function's address - explicitly. - - This option results in less efficient code, but some strange hacks - that alter the assembler output may be confused by the - optimizations performed when this option is not used. - - The default is '-ffunction-cse' - -'-fno-zero-initialized-in-bss' - If the target supports a BSS section, GCC by default puts variables - that are initialized to zero into BSS. This can save space in the - resulting code. - - This option turns off this behavior because some programs - explicitly rely on variables going to the data section--e.g., so - that the resulting executable can find the beginning of that - section and/or make assumptions based on that. - - The default is '-fzero-initialized-in-bss'. - -'-fthread-jumps' - Perform optimizations that check to see if a jump branches to a - location where another comparison subsumed by the first is found. - If so, the first branch is redirected to either the destination of - the second branch or a point immediately following it, depending on - whether the condition is known to be true or false. - - Enabled at levels '-O2', '-O3', '-Os'. - -'-fsplit-wide-types' - When using a type that occupies multiple registers, such as 'long - long' on a 32-bit system, split the registers apart and allocate - them independently. This normally generates better code for those - types, but may make debugging more difficult. - - Enabled at levels '-O', '-O2', '-O3', '-Os'. - -'-fcse-follow-jumps' - In common subexpression elimination (CSE), scan through jump - instructions when the target of the jump is not reached by any - other path. For example, when CSE encounters an 'if' statement - with an 'else' clause, CSE follows the jump when the condition - tested is false. - - Enabled at levels '-O2', '-O3', '-Os'. - -'-fcse-skip-blocks' - This is similar to '-fcse-follow-jumps', but causes CSE to follow - jumps that conditionally skip over blocks. When CSE encounters a - simple 'if' statement with no else clause, '-fcse-skip-blocks' - causes CSE to follow the jump around the body of the 'if'. - - Enabled at levels '-O2', '-O3', '-Os'. - -'-frerun-cse-after-loop' - Re-run common subexpression elimination after loop optimizations - are performed. - - Enabled at levels '-O2', '-O3', '-Os'. - -'-fgcse' - Perform a global common subexpression elimination pass. This pass - also performs global constant and copy propagation. - - _Note:_ When compiling a program using computed gotos, a GCC - extension, you may get better run-time performance if you disable - the global common subexpression elimination pass by adding - '-fno-gcse' to the command line. - - Enabled at levels '-O2', '-O3', '-Os'. - -'-fgcse-lm' - When '-fgcse-lm' is enabled, global common subexpression - elimination attempts to move loads that are only killed by stores - into themselves. This allows a loop containing a load/store - sequence to be changed to a load outside the loop, and a copy/store - within the loop. - - Enabled by default when '-fgcse' is enabled. - -'-fgcse-sm' - When '-fgcse-sm' is enabled, a store motion pass is run after - global common subexpression elimination. This pass attempts to - move stores out of loops. When used in conjunction with - '-fgcse-lm', loops containing a load/store sequence can be changed - to a load before the loop and a store after the loop. - - Not enabled at any optimization level. - -'-fgcse-las' - When '-fgcse-las' is enabled, the global common subexpression - elimination pass eliminates redundant loads that come after stores - to the same memory location (both partial and full redundancies). - - Not enabled at any optimization level. - -'-fgcse-after-reload' - When '-fgcse-after-reload' is enabled, a redundant load elimination - pass is performed after reload. The purpose of this pass is to - clean up redundant spilling. - -'-faggressive-loop-optimizations' - This option tells the loop optimizer to use language constraints to - derive bounds for the number of iterations of a loop. This assumes - that loop code does not invoke undefined behavior by for example - causing signed integer overflows or out-of-bound array accesses. - The bounds for the number of iterations of a loop are used to guide - loop unrolling and peeling and loop exit test optimizations. This - option is enabled by default. - -'-funsafe-loop-optimizations' - This option tells the loop optimizer to assume that loop indices do - not overflow, and that loops with nontrivial exit condition are not - infinite. This enables a wider range of loop optimizations even if - the loop optimizer itself cannot prove that these assumptions are - valid. If you use '-Wunsafe-loop-optimizations', the compiler - warns you if it finds this kind of loop. - -'-fcrossjumping' - Perform cross-jumping transformation. This transformation unifies - equivalent code and saves code size. The resulting code may or may - not perform better than without cross-jumping. - - Enabled at levels '-O2', '-O3', '-Os'. - -'-fauto-inc-dec' - Combine increments or decrements of addresses with memory accesses. - This pass is always skipped on architectures that do not have - instructions to support this. Enabled by default at '-O' and - higher on architectures that support this. - -'-fdce' - Perform dead code elimination (DCE) on RTL. Enabled by default at - '-O' and higher. - -'-fdse' - Perform dead store elimination (DSE) on RTL. Enabled by default at - '-O' and higher. - -'-fif-conversion' - Attempt to transform conditional jumps into branch-less - equivalents. This includes use of conditional moves, min, max, set - flags and abs instructions, and some tricks doable by standard - arithmetics. The use of conditional execution on chips where it is - available is controlled by 'if-conversion2'. - - Enabled at levels '-O', '-O2', '-O3', '-Os'. - -'-fif-conversion2' - Use conditional execution (where available) to transform - conditional jumps into branch-less equivalents. - - Enabled at levels '-O', '-O2', '-O3', '-Os'. - -'-fdeclone-ctor-dtor' - The C++ ABI requires multiple entry points for constructors and - destructors: one for a base subobject, one for a complete object, - and one for a virtual destructor that calls operator delete - afterwards. For a hierarchy with virtual bases, the base and - complete variants are clones, which means two copies of the - function. With this option, the base and complete variants are - changed to be thunks that call a common implementation. - - Enabled by '-Os'. - -'-fdelete-null-pointer-checks' - Assume that programs cannot safely dereference null pointers, and - that no code or data element resides there. This enables simple - constant folding optimizations at all optimization levels. In - addition, other optimization passes in GCC use this flag to control - global dataflow analyses that eliminate useless checks for null - pointers; these assume that if a pointer is checked after it has - already been dereferenced, it cannot be null. - - Note however that in some environments this assumption is not true. - Use '-fno-delete-null-pointer-checks' to disable this optimization - for programs that depend on that behavior. - - Some targets, especially embedded ones, disable this option at all - levels. Otherwise it is enabled at all levels: '-O0', '-O1', - '-O2', '-O3', '-Os'. Passes that use the information are enabled - independently at different optimization levels. - -'-fdevirtualize' - Attempt to convert calls to virtual functions to direct calls. - This is done both within a procedure and interprocedurally as part - of indirect inlining ('-findirect-inlining') and interprocedural - constant propagation ('-fipa-cp'). Enabled at levels '-O2', '-O3', - '-Os'. - -'-fdevirtualize-speculatively' - Attempt to convert calls to virtual functions to speculative direct - calls. Based on the analysis of the type inheritance graph, - determine for a given call the set of likely targets. If the set - is small, preferably of size 1, change the call into an conditional - deciding on direct and indirect call. The speculative calls enable - more optimizations, such as inlining. When they seem useless after - further optimization, they are converted back into original form. - -'-fexpensive-optimizations' - Perform a number of minor optimizations that are relatively - expensive. - - Enabled at levels '-O2', '-O3', '-Os'. - -'-free' - Attempt to remove redundant extension instructions. This is - especially helpful for the x86-64 architecture, which implicitly - zero-extends in 64-bit registers after writing to their lower - 32-bit half. - - Enabled for AArch64 and x86 at levels '-O2', '-O3'. - -'-flive-range-shrinkage' - Attempt to decrease register pressure through register live range - shrinkage. This is helpful for fast processors with small or - moderate size register sets. - -'-fira-algorithm=ALGORITHM' - Use the specified coloring algorithm for the integrated register - allocator. The ALGORITHM argument can be 'priority', which - specifies Chow's priority coloring, or 'CB', which specifies - Chaitin-Briggs coloring. Chaitin-Briggs coloring is not - implemented for all architectures, but for those targets that do - support it, it is the default because it generates better code. - -'-fira-region=REGION' - Use specified regions for the integrated register allocator. The - REGION argument should be one of the following: - - 'all' - Use all loops as register allocation regions. This can give - the best results for machines with a small and/or irregular - register set. - - 'mixed' - Use all loops except for loops with small register pressure as - the regions. This value usually gives the best results in - most cases and for most architectures, and is enabled by - default when compiling with optimization for speed ('-O', - '-O2', ...). - - 'one' - Use all functions as a single region. This typically results - in the smallest code size, and is enabled by default for '-Os' - or '-O0'. - -'-fira-hoist-pressure' - Use IRA to evaluate register pressure in the code hoisting pass for - decisions to hoist expressions. This option usually results in - smaller code, but it can slow the compiler down. - - This option is enabled at level '-Os' for all targets. - -'-fira-loop-pressure' - Use IRA to evaluate register pressure in loops for decisions to - move loop invariants. This option usually results in generation of - faster and smaller code on machines with large register files (>= - 32 registers), but it can slow the compiler down. - - This option is enabled at level '-O3' for some targets. - -'-fno-ira-share-save-slots' - Disable sharing of stack slots used for saving call-used hard - registers living through a call. Each hard register gets a - separate stack slot, and as a result function stack frames are - larger. - -'-fno-ira-share-spill-slots' - Disable sharing of stack slots allocated for pseudo-registers. - Each pseudo-register that does not get a hard register gets a - separate stack slot, and as a result function stack frames are - larger. - -'-fira-verbose=N' - Control the verbosity of the dump file for the integrated register - allocator. The default value is 5. If the value N is greater or - equal to 10, the dump output is sent to stderr using the same - format as N minus 10. - -'-fdelayed-branch' - If supported for the target machine, attempt to reorder - instructions to exploit instruction slots available after delayed - branch instructions. - - Enabled at levels '-O', '-O2', '-O3', '-Os'. - -'-fschedule-insns' - If supported for the target machine, attempt to reorder - instructions to eliminate execution stalls due to required data - being unavailable. This helps machines that have slow floating - point or memory load instructions by allowing other instructions to - be issued until the result of the load or floating-point - instruction is required. - - Enabled at levels '-O2', '-O3'. - -'-fschedule-insns2' - Similar to '-fschedule-insns', but requests an additional pass of - instruction scheduling after register allocation has been done. - This is especially useful on machines with a relatively small - number of registers and where memory load instructions take more - than one cycle. - - Enabled at levels '-O2', '-O3', '-Os'. - -'-fno-sched-interblock' - Don't schedule instructions across basic blocks. This is normally - enabled by default when scheduling before register allocation, i.e. - with '-fschedule-insns' or at '-O2' or higher. - -'-fno-sched-spec' - Don't allow speculative motion of non-load instructions. This is - normally enabled by default when scheduling before register - allocation, i.e. with '-fschedule-insns' or at '-O2' or higher. - -'-fsched-pressure' - Enable register pressure sensitive insn scheduling before register - allocation. This only makes sense when scheduling before register - allocation is enabled, i.e. with '-fschedule-insns' or at '-O2' or - higher. Usage of this option can improve the generated code and - decrease its size by preventing register pressure increase above - the number of available hard registers and subsequent spills in - register allocation. - -'-fsched-spec-load' - Allow speculative motion of some load instructions. This only - makes sense when scheduling before register allocation, i.e. with - '-fschedule-insns' or at '-O2' or higher. - -'-fsched-spec-load-dangerous' - Allow speculative motion of more load instructions. This only - makes sense when scheduling before register allocation, i.e. with - '-fschedule-insns' or at '-O2' or higher. - -'-fsched-stalled-insns' -'-fsched-stalled-insns=N' - Define how many insns (if any) can be moved prematurely from the - queue of stalled insns into the ready list during the second - scheduling pass. '-fno-sched-stalled-insns' means that no insns - are moved prematurely, '-fsched-stalled-insns=0' means there is no - limit on how many queued insns can be moved prematurely. - '-fsched-stalled-insns' without a value is equivalent to - '-fsched-stalled-insns=1'. - -'-fsched-stalled-insns-dep' -'-fsched-stalled-insns-dep=N' - Define how many insn groups (cycles) are examined for a dependency - on a stalled insn that is a candidate for premature removal from - the queue of stalled insns. This has an effect only during the - second scheduling pass, and only if '-fsched-stalled-insns' is - used. '-fno-sched-stalled-insns-dep' is equivalent to - '-fsched-stalled-insns-dep=0'. '-fsched-stalled-insns-dep' without - a value is equivalent to '-fsched-stalled-insns-dep=1'. - -'-fsched2-use-superblocks' - When scheduling after register allocation, use superblock - scheduling. This allows motion across basic block boundaries, - resulting in faster schedules. This option is experimental, as not - all machine descriptions used by GCC model the CPU closely enough - to avoid unreliable results from the algorithm. - - This only makes sense when scheduling after register allocation, - i.e. with '-fschedule-insns2' or at '-O2' or higher. - -'-fsched-group-heuristic' - Enable the group heuristic in the scheduler. This heuristic favors - the instruction that belongs to a schedule group. This is enabled - by default when scheduling is enabled, i.e. with '-fschedule-insns' - or '-fschedule-insns2' or at '-O2' or higher. - -'-fsched-critical-path-heuristic' - Enable the critical-path heuristic in the scheduler. This - heuristic favors instructions on the critical path. This is - enabled by default when scheduling is enabled, i.e. with - '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or higher. - -'-fsched-spec-insn-heuristic' - Enable the speculative instruction heuristic in the scheduler. - This heuristic favors speculative instructions with greater - dependency weakness. This is enabled by default when scheduling is - enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at - '-O2' or higher. - -'-fsched-rank-heuristic' - Enable the rank heuristic in the scheduler. This heuristic favors - the instruction belonging to a basic block with greater size or - frequency. This is enabled by default when scheduling is enabled, - i.e. with '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or - higher. - -'-fsched-last-insn-heuristic' - Enable the last-instruction heuristic in the scheduler. This - heuristic favors the instruction that is less dependent on the last - instruction scheduled. This is enabled by default when scheduling - is enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or - at '-O2' or higher. - -'-fsched-dep-count-heuristic' - Enable the dependent-count heuristic in the scheduler. This - heuristic favors the instruction that has more instructions - depending on it. This is enabled by default when scheduling is - enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at - '-O2' or higher. - -'-freschedule-modulo-scheduled-loops' - Modulo scheduling is performed before traditional scheduling. If a - loop is modulo scheduled, later scheduling passes may change its - schedule. Use this option to control that behavior. - -'-fselective-scheduling' - Schedule instructions using selective scheduling algorithm. - Selective scheduling runs instead of the first scheduler pass. - -'-fselective-scheduling2' - Schedule instructions using selective scheduling algorithm. - Selective scheduling runs instead of the second scheduler pass. - -'-fsel-sched-pipelining' - Enable software pipelining of innermost loops during selective - scheduling. This option has no effect unless one of - '-fselective-scheduling' or '-fselective-scheduling2' is turned on. - -'-fsel-sched-pipelining-outer-loops' - When pipelining loops during selective scheduling, also pipeline - outer loops. This option has no effect unless - '-fsel-sched-pipelining' is turned on. - -'-fshrink-wrap' - Emit function prologues only before parts of the function that need - it, rather than at the top of the function. This flag is enabled - by default at '-O' and higher. - -'-fcaller-saves' - Enable allocation of values to registers that are clobbered by - function calls, by emitting extra instructions to save and restore - the registers around such calls. Such allocation is done only when - it seems to result in better code. - - This option is always enabled by default on certain machines, - usually those which have no call-preserved registers to use - instead. - - Enabled at levels '-O2', '-O3', '-Os'. - -'-fcombine-stack-adjustments' - Tracks stack adjustments (pushes and pops) and stack memory - references and then tries to find ways to combine them. - - Enabled by default at '-O1' and higher. - -'-fconserve-stack' - Attempt to minimize stack usage. The compiler attempts to use less - stack space, even if that makes the program slower. This option - implies setting the 'large-stack-frame' parameter to 100 and the - 'large-stack-frame-growth' parameter to 400. - -'-ftree-reassoc' - Perform reassociation on trees. This flag is enabled by default at - '-O' and higher. - -'-ftree-pre' - Perform partial redundancy elimination (PRE) on trees. This flag - is enabled by default at '-O2' and '-O3'. - -'-ftree-partial-pre' - Make partial redundancy elimination (PRE) more aggressive. This - flag is enabled by default at '-O3'. - -'-ftree-forwprop' - Perform forward propagation on trees. This flag is enabled by - default at '-O' and higher. - -'-ftree-fre' - Perform full redundancy elimination (FRE) on trees. The difference - between FRE and PRE is that FRE only considers expressions that are - computed on all paths leading to the redundant computation. This - analysis is faster than PRE, though it exposes fewer redundancies. - This flag is enabled by default at '-O' and higher. - -'-ftree-phiprop' - Perform hoisting of loads from conditional pointers on trees. This - pass is enabled by default at '-O' and higher. - -'-fhoist-adjacent-loads' - Speculatively hoist loads from both branches of an if-then-else if - the loads are from adjacent locations in the same structure and the - target architecture has a conditional move instruction. This flag - is enabled by default at '-O2' and higher. - -'-ftree-copy-prop' - Perform copy propagation on trees. This pass eliminates - unnecessary copy operations. This flag is enabled by default at - '-O' and higher. - -'-fipa-pure-const' - Discover which functions are pure or constant. Enabled by default - at '-O' and higher. - -'-fipa-reference' - Discover which static variables do not escape the compilation unit. - Enabled by default at '-O' and higher. - -'-fipa-pta' - Perform interprocedural pointer analysis and interprocedural - modification and reference analysis. This option can cause - excessive memory and compile-time usage on large compilation units. - It is not enabled by default at any optimization level. - -'-fipa-profile' - Perform interprocedural profile propagation. The functions called - only from cold functions are marked as cold. Also functions - executed once (such as 'cold', 'noreturn', static constructors or - destructors) are identified. Cold functions and loop less parts of - functions executed once are then optimized for size. Enabled by - default at '-O' and higher. - -'-fipa-cp' - Perform interprocedural constant propagation. This optimization - analyzes the program to determine when values passed to functions - are constants and then optimizes accordingly. This optimization - can substantially increase performance if the application has - constants passed to functions. This flag is enabled by default at - '-O2', '-Os' and '-O3'. - -'-fipa-cp-clone' - Perform function cloning to make interprocedural constant - propagation stronger. When enabled, interprocedural constant - propagation performs function cloning when externally visible - function can be called with constant arguments. Because this - optimization can create multiple copies of functions, it may - significantly increase code size (see '--param - ipcp-unit-growth=VALUE'). This flag is enabled by default at - '-O3'. - -'-fisolate-erroneous-paths-dereference' - Detect paths which trigger erroneous or undefined behaviour due to - dereferencing a NULL pointer. Isolate those paths from the main - control flow and turn the statement with erroneous or undefined - behaviour into a trap. - -'-fisolate-erroneous-paths-attribute' - Detect paths which trigger erroneous or undefined behaviour due a - NULL value being used in a way which is forbidden by a - 'returns_nonnull' or 'nonnull' attribute. Isolate those paths from - the main control flow and turn the statement with erroneous or - undefined behaviour into a trap. This is not currently enabled, - but may be enabled by '-O2' in the future. - -'-ftree-sink' - Perform forward store motion on trees. This flag is enabled by - default at '-O' and higher. - -'-ftree-bit-ccp' - Perform sparse conditional bit constant propagation on trees and - propagate pointer alignment information. This pass only operates - on local scalar variables and is enabled by default at '-O' and - higher. It requires that '-ftree-ccp' is enabled. - -'-ftree-ccp' - Perform sparse conditional constant propagation (CCP) on trees. - This pass only operates on local scalar variables and is enabled by - default at '-O' and higher. - -'-ftree-switch-conversion' - Perform conversion of simple initializations in a switch to - initializations from a scalar array. This flag is enabled by - default at '-O2' and higher. - -'-ftree-tail-merge' - Look for identical code sequences. When found, replace one with a - jump to the other. This optimization is known as tail merging or - cross jumping. This flag is enabled by default at '-O2' and - higher. The compilation time in this pass can be limited using - 'max-tail-merge-comparisons' parameter and - 'max-tail-merge-iterations' parameter. - -'-ftree-dce' - Perform dead code elimination (DCE) on trees. This flag is enabled - by default at '-O' and higher. - -'-ftree-builtin-call-dce' - Perform conditional dead code elimination (DCE) for calls to - built-in functions that may set 'errno' but are otherwise - side-effect free. This flag is enabled by default at '-O2' and - higher if '-Os' is not also specified. - -'-ftree-dominator-opts' - Perform a variety of simple scalar cleanups (constant/copy - propagation, redundancy elimination, range propagation and - expression simplification) based on a dominator tree traversal. - This also performs jump threading (to reduce jumps to jumps). This - flag is enabled by default at '-O' and higher. - -'-ftree-dse' - Perform dead store elimination (DSE) on trees. A dead store is a - store into a memory location that is later overwritten by another - store without any intervening loads. In this case the earlier - store can be deleted. This flag is enabled by default at '-O' and - higher. - -'-ftree-ch' - Perform loop header copying on trees. This is beneficial since it - increases effectiveness of code motion optimizations. It also - saves one jump. This flag is enabled by default at '-O' and - higher. It is not enabled for '-Os', since it usually increases - code size. - -'-ftree-loop-optimize' - Perform loop optimizations on trees. This flag is enabled by - default at '-O' and higher. - -'-ftree-loop-linear' - Perform loop interchange transformations on tree. Same as - '-floop-interchange'. To use this code transformation, GCC has to - be configured with '--with-ppl' and '--with-cloog' to enable the - Graphite loop transformation infrastructure. - -'-floop-interchange' - Perform loop interchange transformations on loops. Interchanging - two nested loops switches the inner and outer loops. For example, - given a loop like: - DO J = 1, M - DO I = 1, N - A(J, I) = A(J, I) * C - ENDDO - ENDDO - loop interchange transforms the loop as if it were written: - DO I = 1, N - DO J = 1, M - A(J, I) = A(J, I) * C - ENDDO - ENDDO - which can be beneficial when 'N' is larger than the caches, because - in Fortran, the elements of an array are stored in memory - contiguously by column, and the original loop iterates over rows, - potentially creating at each access a cache miss. This - optimization applies to all the languages supported by GCC and is - not limited to Fortran. To use this code transformation, GCC has - to be configured with '--with-ppl' and '--with-cloog' to enable the - Graphite loop transformation infrastructure. - -'-floop-strip-mine' - Perform loop strip mining transformations on loops. Strip mining - splits a loop into two nested loops. The outer loop has strides - equal to the strip size and the inner loop has strides of the - original loop within a strip. The strip length can be changed - using the 'loop-block-tile-size' parameter. For example, given a - loop like: - DO I = 1, N - A(I) = A(I) + C - ENDDO - loop strip mining transforms the loop as if it were written: - DO II = 1, N, 51 - DO I = II, min (II + 50, N) - A(I) = A(I) + C - ENDDO - ENDDO - This optimization applies to all the languages supported by GCC and - is not limited to Fortran. To use this code transformation, GCC - has to be configured with '--with-ppl' and '--with-cloog' to enable - the Graphite loop transformation infrastructure. - -'-floop-block' - Perform loop blocking transformations on loops. Blocking strip - mines each loop in the loop nest such that the memory accesses of - the element loops fit inside caches. The strip length can be - changed using the 'loop-block-tile-size' parameter. For example, - given a loop like: - DO I = 1, N - DO J = 1, M - A(J, I) = B(I) + C(J) - ENDDO - ENDDO - loop blocking transforms the loop as if it were written: - DO II = 1, N, 51 - DO JJ = 1, M, 51 - DO I = II, min (II + 50, N) - DO J = JJ, min (JJ + 50, M) - A(J, I) = B(I) + C(J) - ENDDO - ENDDO - ENDDO - ENDDO - which can be beneficial when 'M' is larger than the caches, because - the innermost loop iterates over a smaller amount of data which can - be kept in the caches. This optimization applies to all the - languages supported by GCC and is not limited to Fortran. To use - this code transformation, GCC has to be configured with - '--with-ppl' and '--with-cloog' to enable the Graphite loop - transformation infrastructure. - -'-fgraphite-identity' - Enable the identity transformation for graphite. For every SCoP we - generate the polyhedral representation and transform it back to - gimple. Using '-fgraphite-identity' we can check the costs or - benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation. Some - minimal optimizations are also performed by the code generator - CLooG, like index splitting and dead code elimination in loops. - -'-floop-nest-optimize' - Enable the ISL based loop nest optimizer. This is a generic loop - nest optimizer based on the Pluto optimization algorithms. It - calculates a loop structure optimized for data-locality and - parallelism. This option is experimental. - -'-floop-parallelize-all' - Use the Graphite data dependence analysis to identify loops that - can be parallelized. Parallelize all the loops that can be - analyzed to not contain loop carried dependences without checking - that it is profitable to parallelize the loops. - -'-fcheck-data-deps' - Compare the results of several data dependence analyzers. This - option is used for debugging the data dependence analyzers. - -'-ftree-loop-if-convert' - Attempt to transform conditional jumps in the innermost loops to - branch-less equivalents. The intent is to remove control-flow from - the innermost loops in order to improve the ability of the - vectorization pass to handle these loops. This is enabled by - default if vectorization is enabled. - -'-ftree-loop-if-convert-stores' - Attempt to also if-convert conditional jumps containing memory - writes. This transformation can be unsafe for multi-threaded - programs as it transforms conditional memory writes into - unconditional memory writes. For example, - for (i = 0; i < N; i++) - if (cond) - A[i] = expr; - is transformed to - for (i = 0; i < N; i++) - A[i] = cond ? expr : A[i]; - potentially producing data races. - -'-ftree-loop-distribution' - Perform loop distribution. This flag can improve cache performance - on big loop bodies and allow further loop optimizations, like - parallelization or vectorization, to take place. For example, the - loop - DO I = 1, N - A(I) = B(I) + C - D(I) = E(I) * F - ENDDO - is transformed to - DO I = 1, N - A(I) = B(I) + C - ENDDO - DO I = 1, N - D(I) = E(I) * F - ENDDO - -'-ftree-loop-distribute-patterns' - Perform loop distribution of patterns that can be code generated - with calls to a library. This flag is enabled by default at '-O3'. - - This pass distributes the initialization loops and generates a call - to memset zero. For example, the loop - DO I = 1, N - A(I) = 0 - B(I) = A(I) + I - ENDDO - is transformed to - DO I = 1, N - A(I) = 0 - ENDDO - DO I = 1, N - B(I) = A(I) + I - ENDDO - and the initialization loop is transformed into a call to memset - zero. - -'-ftree-loop-im' - Perform loop invariant motion on trees. This pass moves only - invariants that are hard to handle at RTL level (function calls, - operations that expand to nontrivial sequences of insns). With - '-funswitch-loops' it also moves operands of conditions that are - invariant out of the loop, so that we can use just trivial - invariantness analysis in loop unswitching. The pass also includes - store motion. - -'-ftree-loop-ivcanon' - Create a canonical counter for number of iterations in loops for - which determining number of iterations requires complicated - analysis. Later optimizations then may determine the number - easily. Useful especially in connection with unrolling. - -'-fivopts' - Perform induction variable optimizations (strength reduction, - induction variable merging and induction variable elimination) on - trees. - -'-ftree-parallelize-loops=n' - Parallelize loops, i.e., split their iteration space to run in n - threads. This is only possible for loops whose iterations are - independent and can be arbitrarily reordered. The optimization is - only profitable on multiprocessor machines, for loops that are - CPU-intensive, rather than constrained e.g. by memory bandwidth. - This option implies '-pthread', and thus is only supported on - targets that have support for '-pthread'. - -'-ftree-pta' - Perform function-local points-to analysis on trees. This flag is - enabled by default at '-O' and higher. - -'-ftree-sra' - Perform scalar replacement of aggregates. This pass replaces - structure references with scalars to prevent committing structures - to memory too early. This flag is enabled by default at '-O' and - higher. - -'-ftree-copyrename' - Perform copy renaming on trees. This pass attempts to rename - compiler temporaries to other variables at copy locations, usually - resulting in variable names which more closely resemble the - original variables. This flag is enabled by default at '-O' and - higher. - -'-ftree-coalesce-inlined-vars' - Tell the copyrename pass (see '-ftree-copyrename') to attempt to - combine small user-defined variables too, but only if they were - inlined from other functions. It is a more limited form of - '-ftree-coalesce-vars'. This may harm debug information of such - inlined variables, but it will keep variables of the inlined-into - function apart from each other, such that they are more likely to - contain the expected values in a debugging session. This was the - default in GCC versions older than 4.7. - -'-ftree-coalesce-vars' - Tell the copyrename pass (see '-ftree-copyrename') to attempt to - combine small user-defined variables too, instead of just compiler - temporaries. This may severely limit the ability to debug an - optimized program compiled with '-fno-var-tracking-assignments'. - In the negated form, this flag prevents SSA coalescing of user - variables, including inlined ones. This option is enabled by - default. - -'-ftree-ter' - Perform temporary expression replacement during the SSA->normal - phase. Single use/single def temporaries are replaced at their use - location with their defining expression. This results in - non-GIMPLE code, but gives the expanders much more complex trees to - work on resulting in better RTL generation. This is enabled by - default at '-O' and higher. - -'-ftree-slsr' - Perform straight-line strength reduction on trees. This recognizes - related expressions involving multiplications and replaces them by - less expensive calculations when possible. This is enabled by - default at '-O' and higher. - -'-ftree-vectorize' - Perform vectorization on trees. This flag enables - '-ftree-loop-vectorize' and '-ftree-slp-vectorize' if not - explicitly specified. - -'-ftree-loop-vectorize' - Perform loop vectorization on trees. This flag is enabled by - default at '-O3' and when '-ftree-vectorize' is enabled. - -'-ftree-slp-vectorize' - Perform basic block vectorization on trees. This flag is enabled - by default at '-O3' and when '-ftree-vectorize' is enabled. - -'-fvect-cost-model=MODEL' - Alter the cost model used for vectorization. The MODEL argument - should be one of 'unlimited', 'dynamic' or 'cheap'. With the - 'unlimited' model the vectorized code-path is assumed to be - profitable while with the 'dynamic' model a runtime check will - guard the vectorized code-path to enable it only for iteration - counts that will likely execute faster than when executing the - original scalar loop. The 'cheap' model will disable vectorization - of loops where doing so would be cost prohibitive for example due - to required runtime checks for data dependence or alignment but - otherwise is equal to the 'dynamic' model. The default cost model - depends on other optimization flags and is either 'dynamic' or - 'cheap'. - -'-fsimd-cost-model=MODEL' - Alter the cost model used for vectorization of loops marked with - the OpenMP or Cilk Plus simd directive. The MODEL argument should - be one of 'unlimited', 'dynamic', 'cheap'. All values of MODEL - have the same meaning as described in '-fvect-cost-model' and by - default a cost model defined with '-fvect-cost-model' is used. - -'-ftree-vrp' - Perform Value Range Propagation on trees. This is similar to the - constant propagation pass, but instead of values, ranges of values - are propagated. This allows the optimizers to remove unnecessary - range checks like array bound checks and null pointer checks. This - is enabled by default at '-O2' and higher. Null pointer check - elimination is only done if '-fdelete-null-pointer-checks' is - enabled. - -'-ftracer' - Perform tail duplication to enlarge superblock size. This - transformation simplifies the control flow of the function allowing - other optimizations to do a better job. - -'-funroll-loops' - Unroll loops whose number of iterations can be determined at - compile time or upon entry to the loop. '-funroll-loops' implies - '-frerun-cse-after-loop'. This option makes code larger, and may - or may not make it run faster. - -'-funroll-all-loops' - Unroll all loops, even if their number of iterations is uncertain - when the loop is entered. This usually makes programs run more - slowly. '-funroll-all-loops' implies the same options as - '-funroll-loops', - -'-fsplit-ivs-in-unroller' - Enables expression of values of induction variables in later - iterations of the unrolled loop using the value in the first - iteration. This breaks long dependency chains, thus improving - efficiency of the scheduling passes. - - A combination of '-fweb' and CSE is often sufficient to obtain the - same effect. However, that is not reliable in cases where the loop - body is more complicated than a single basic block. It also does - not work at all on some architectures due to restrictions in the - CSE pass. - - This optimization is enabled by default. - -'-fvariable-expansion-in-unroller' - With this option, the compiler creates multiple copies of some - local variables when unrolling a loop, which can result in superior - code. - -'-fpartial-inlining' - Inline parts of functions. This option has any effect only when - inlining itself is turned on by the '-finline-functions' or - '-finline-small-functions' options. - - Enabled at level '-O2'. - -'-fpredictive-commoning' - Perform predictive commoning optimization, i.e., reusing - computations (especially memory loads and stores) performed in - previous iterations of loops. - - This option is enabled at level '-O3'. - -'-fprefetch-loop-arrays' - If supported by the target machine, generate instructions to - prefetch memory to improve the performance of loops that access - large arrays. - - This option may generate better or worse code; results are highly - dependent on the structure of loops within the source code. - - Disabled at level '-Os'. - -'-fno-peephole' -'-fno-peephole2' - Disable any machine-specific peephole optimizations. The - difference between '-fno-peephole' and '-fno-peephole2' is in how - they are implemented in the compiler; some targets use one, some - use the other, a few use both. - - '-fpeephole' is enabled by default. '-fpeephole2' enabled at - levels '-O2', '-O3', '-Os'. - -'-fno-guess-branch-probability' - Do not guess branch probabilities using heuristics. - - GCC uses heuristics to guess branch probabilities if they are not - provided by profiling feedback ('-fprofile-arcs'). These - heuristics are based on the control flow graph. If some branch - probabilities are specified by '__builtin_expect', then the - heuristics are used to guess branch probabilities for the rest of - the control flow graph, taking the '__builtin_expect' info into - account. The interactions between the heuristics and - '__builtin_expect' can be complex, and in some cases, it may be - useful to disable the heuristics so that the effects of - '__builtin_expect' are easier to understand. - - The default is '-fguess-branch-probability' at levels '-O', '-O2', - '-O3', '-Os'. - -'-freorder-blocks' - Reorder basic blocks in the compiled function in order to reduce - number of taken branches and improve code locality. - - Enabled at levels '-O2', '-O3'. - -'-freorder-blocks-and-partition' - In addition to reordering basic blocks in the compiled function, in - order to reduce number of taken branches, partitions hot and cold - basic blocks into separate sections of the assembly and .o files, - to improve paging and cache locality performance. - - This optimization is automatically turned off in the presence of - exception handling, for linkonce sections, for functions with a - user-defined section attribute and on any architecture that does - not support named sections. - - Enabled for x86 at levels '-O2', '-O3'. - -'-freorder-functions' - Reorder functions in the object file in order to improve code - locality. This is implemented by using special subsections - '.text.hot' for most frequently executed functions and - '.text.unlikely' for unlikely executed functions. Reordering is - done by the linker so object file format must support named - sections and linker must place them in a reasonable way. - - Also profile feedback must be available to make this option - effective. See '-fprofile-arcs' for details. - - Enabled at levels '-O2', '-O3', '-Os'. - -'-fstrict-aliasing' - Allow the compiler to assume the strictest aliasing rules - applicable to the language being compiled. For C (and C++), this - activates optimizations based on the type of expressions. In - particular, an object of one type is assumed never to reside at the - same address as an object of a different type, unless the types are - almost the same. For example, an 'unsigned int' can alias an - 'int', but not a 'void*' or a 'double'. A character type may alias - any other type. - - Pay special attention to code like this: - union a_union { - int i; - double d; - }; - - int f() { - union a_union t; - t.d = 3.0; - return t.i; - } - The practice of reading from a different union member than the one - most recently written to (called "type-punning") is common. Even - with '-fstrict-aliasing', type-punning is allowed, provided the - memory is accessed through the union type. So, the code above - works as expected. *Note Structures unions enumerations and - bit-fields implementation::. However, this code might not: - int f() { - union a_union t; - int* ip; - t.d = 3.0; - ip = &t.i; - return *ip; - } - - Similarly, access by taking the address, casting the resulting - pointer and dereferencing the result has undefined behavior, even - if the cast uses a union type, e.g.: - int f() { - double d = 3.0; - return ((union a_union *) &d)->i; - } - - The '-fstrict-aliasing' option is enabled at levels '-O2', '-O3', - '-Os'. - -'-fstrict-overflow' - Allow the compiler to assume strict signed overflow rules, - depending on the language being compiled. For C (and C++) this - means that overflow when doing arithmetic with signed numbers is - undefined, which means that the compiler may assume that it does - not happen. This permits various optimizations. For example, the - compiler assumes that an expression like 'i + 10 > i' is always - true for signed 'i'. This assumption is only valid if signed - overflow is undefined, as the expression is false if 'i + 10' - overflows when using twos complement arithmetic. When this option - is in effect any attempt to determine whether an operation on - signed numbers overflows must be written carefully to not actually - involve overflow. - - This option also allows the compiler to assume strict pointer - semantics: given a pointer to an object, if adding an offset to - that pointer does not produce a pointer to the same object, the - addition is undefined. This permits the compiler to conclude that - 'p + u > p' is always true for a pointer 'p' and unsigned integer - 'u'. This assumption is only valid because pointer wraparound is - undefined, as the expression is false if 'p + u' overflows using - twos complement arithmetic. - - See also the '-fwrapv' option. Using '-fwrapv' means that integer - signed overflow is fully defined: it wraps. When '-fwrapv' is - used, there is no difference between '-fstrict-overflow' and - '-fno-strict-overflow' for integers. With '-fwrapv' certain types - of overflow are permitted. For example, if the compiler gets an - overflow when doing arithmetic on constants, the overflowed value - can still be used with '-fwrapv', but not otherwise. - - The '-fstrict-overflow' option is enabled at levels '-O2', '-O3', - '-Os'. - -'-falign-functions' -'-falign-functions=N' - Align the start of functions to the next power-of-two greater than - N, skipping up to N bytes. For instance, '-falign-functions=32' - aligns functions to the next 32-byte boundary, but - '-falign-functions=24' aligns to the next 32-byte boundary only if - this can be done by skipping 23 bytes or less. - - '-fno-align-functions' and '-falign-functions=1' are equivalent and - mean that functions are not aligned. - - Some assemblers only support this flag when N is a power of two; in - that case, it is rounded up. - - If N is not specified or is zero, use a machine-dependent default. - - Enabled at levels '-O2', '-O3'. - -'-falign-labels' -'-falign-labels=N' - Align all branch targets to a power-of-two boundary, skipping up to - N bytes like '-falign-functions'. This option can easily make code - slower, because it must insert dummy operations for when the branch - target is reached in the usual flow of the code. - - '-fno-align-labels' and '-falign-labels=1' are equivalent and mean - that labels are not aligned. - - If '-falign-loops' or '-falign-jumps' are applicable and are - greater than this value, then their values are used instead. - - If N is not specified or is zero, use a machine-dependent default - which is very likely to be '1', meaning no alignment. - - Enabled at levels '-O2', '-O3'. - -'-falign-loops' -'-falign-loops=N' - Align loops to a power-of-two boundary, skipping up to N bytes like - '-falign-functions'. If the loops are executed many times, this - makes up for any execution of the dummy operations. - - '-fno-align-loops' and '-falign-loops=1' are equivalent and mean - that loops are not aligned. - - If N is not specified or is zero, use a machine-dependent default. - - Enabled at levels '-O2', '-O3'. - -'-falign-jumps' -'-falign-jumps=N' - Align branch targets to a power-of-two boundary, for branch targets - where the targets can only be reached by jumping, skipping up to N - bytes like '-falign-functions'. In this case, no dummy operations - need be executed. - - '-fno-align-jumps' and '-falign-jumps=1' are equivalent and mean - that loops are not aligned. - - If N is not specified or is zero, use a machine-dependent default. - - Enabled at levels '-O2', '-O3'. - -'-funit-at-a-time' - This option is left for compatibility reasons. '-funit-at-a-time' - has no effect, while '-fno-unit-at-a-time' implies - '-fno-toplevel-reorder' and '-fno-section-anchors'. - - Enabled by default. - -'-fno-toplevel-reorder' - Do not reorder top-level functions, variables, and 'asm' - statements. Output them in the same order that they appear in the - input file. When this option is used, unreferenced static - variables are not removed. This option is intended to support - existing code that relies on a particular ordering. For new code, - it is better to use attributes when possible. - - Enabled at level '-O0'. When disabled explicitly, it also implies - '-fno-section-anchors', which is otherwise enabled at '-O0' on some - targets. - -'-fweb' - Constructs webs as commonly used for register allocation purposes - and assign each web individual pseudo register. This allows the - register allocation pass to operate on pseudos directly, but also - strengthens several other optimization passes, such as CSE, loop - optimizer and trivial dead code remover. It can, however, make - debugging impossible, since variables no longer stay in a "home - register". - - Enabled by default with '-funroll-loops'. - -'-fwhole-program' - Assume that the current compilation unit represents the whole - program being compiled. All public functions and variables with - the exception of 'main' and those merged by attribute - 'externally_visible' become static functions and in effect are - optimized more aggressively by interprocedural optimizers. - - This option should not be used in combination with '-flto'. - Instead relying on a linker plugin should provide safer and more - precise information. - -'-flto[=N]' - This option runs the standard link-time optimizer. When invoked - with source code, it generates GIMPLE (one of GCC's internal - representations) and writes it to special ELF sections in the - object file. When the object files are linked together, all the - function bodies are read from these ELF sections and instantiated - as if they had been part of the same translation unit. - - To use the link-time optimizer, '-flto' and optimization options - should be specified at compile time and during the final link. For - example: - - gcc -c -O2 -flto foo.c - gcc -c -O2 -flto bar.c - gcc -o myprog -flto -O2 foo.o bar.o - - The first two invocations to GCC save a bytecode representation of - GIMPLE into special ELF sections inside 'foo.o' and 'bar.o'. The - final invocation reads the GIMPLE bytecode from 'foo.o' and - 'bar.o', merges the two files into a single internal image, and - compiles the result as usual. Since both 'foo.o' and 'bar.o' are - merged into a single image, this causes all the interprocedural - analyses and optimizations in GCC to work across the two files as - if they were a single one. This means, for example, that the - inliner is able to inline functions in 'bar.o' into functions in - 'foo.o' and vice-versa. - - Another (simpler) way to enable link-time optimization is: - - gcc -o myprog -flto -O2 foo.c bar.c - - The above generates bytecode for 'foo.c' and 'bar.c', merges them - together into a single GIMPLE representation and optimizes them as - usual to produce 'myprog'. - - The only important thing to keep in mind is that to enable - link-time optimizations you need to use the GCC driver to perform - the link-step. GCC then automatically performs link-time - optimization if any of the objects involved were compiled with the - '-flto'. You generally should specify the optimization options to - be used for link-time optimization though GCC will try to be clever - at guessing an optimization level to use from the options used at - compile-time if you fail to specify one at link-time. You can - always override the automatic decision to do link-time optimization - at link-time by passing '-fno-lto' to the link command. - - To make whole program optimization effective, it is necessary to - make certain whole program assumptions. The compiler needs to know - what functions and variables can be accessed by libraries and - runtime outside of the link-time optimized unit. When supported by - the linker, the linker plugin (see '-fuse-linker-plugin') passes - information to the compiler about used and externally visible - symbols. When the linker plugin is not available, - '-fwhole-program' should be used to allow the compiler to make - these assumptions, which leads to more aggressive optimization - decisions. - - When '-fuse-linker-plugin' is not enabled then, when a file is - compiled with '-flto', the generated object file is larger than a - regular object file because it contains GIMPLE bytecodes and the - usual final code (see '-ffat-lto-objects'. This means that object - files with LTO information can be linked as normal object files; if - '-fno-lto' is passed to the linker, no interprocedural - optimizations are applied. Note that when '-fno-fat-lto-objects' - is enabled the compile-stage is faster but you cannot perform a - regular, non-LTO link on them. - - Additionally, the optimization flags used to compile individual - files are not necessarily related to those used at link time. For - instance, - - gcc -c -O0 -ffat-lto-objects -flto foo.c - gcc -c -O0 -ffat-lto-objects -flto bar.c - gcc -o myprog -O3 foo.o bar.o - - This produces individual object files with unoptimized assembler - code, but the resulting binary 'myprog' is optimized at '-O3'. If, - instead, the final binary is generated with '-fno-lto', then - 'myprog' is not optimized. - - When producing the final binary, GCC only applies link-time - optimizations to those files that contain bytecode. Therefore, you - can mix and match object files and libraries with GIMPLE bytecodes - and final object code. GCC automatically selects which files to - optimize in LTO mode and which files to link without further - processing. - - There are some code generation flags preserved by GCC when - generating bytecodes, as they need to be used during the final link - stage. Generally options specified at link-time override those - specified at compile-time. - - If you do not specify an optimization level option '-O' at - link-time then GCC will compute one based on the optimization - levels used when compiling the object files. The highest - optimization level will win here. - - Currently, the following options and their setting are take from - the first object file that explicitely specified it: '-fPIC', - '-fpic', '-fpie', '-fcommon', '-fexceptions', - '-fnon-call-exceptions', '-fgnu-tm' and all the '-m' target flags. - - Certain ABI changing flags are required to match in all - compilation-units and trying to override this at link-time with a - conflicting value is ignored. This includes options such as - '-freg-struct-return' and '-fpcc-struct-return'. - - Other options such as '-ffp-contract', '-fno-strict-overflow', - '-fwrapv', '-fno-trapv' or '-fno-strict-aliasing' are passed - through to the link stage and merged conservatively for conflicting - translation units. Specifically '-fno-strict-overflow', '-fwrapv' - and '-fno-trapv' take precedence and for example - '-ffp-contract=off' takes precedence over '-ffp-contract=fast'. - You can override them at linke-time. - - It is recommended that you compile all the files participating in - the same link with the same options and also specify those options - at link time. - - If LTO encounters objects with C linkage declared with incompatible - types in separate translation units to be linked together - (undefined behavior according to ISO C99 6.2.7), a non-fatal - diagnostic may be issued. The behavior is still undefined at run - time. Similar diagnostics may be raised for other languages. - - Another feature of LTO is that it is possible to apply - interprocedural optimizations on files written in different - languages: - - gcc -c -flto foo.c - g++ -c -flto bar.cc - gfortran -c -flto baz.f90 - g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran - - Notice that the final link is done with 'g++' to get the C++ - runtime libraries and '-lgfortran' is added to get the Fortran - runtime libraries. In general, when mixing languages in LTO mode, - you should use the same link command options as when mixing - languages in a regular (non-LTO) compilation. - - If object files containing GIMPLE bytecode are stored in a library - archive, say 'libfoo.a', it is possible to extract and use them in - an LTO link if you are using a linker with plugin support. To - create static libraries suitable for LTO, use 'gcc-ar' and - 'gcc-ranlib' instead of 'ar' and 'ranlib'; to show the symbols of - object files with GIMPLE bytecode, use 'gcc-nm'. Those commands - require that 'ar', 'ranlib' and 'nm' have been compiled with plugin - support. At link time, use the the flag '-fuse-linker-plugin' to - ensure that the library participates in the LTO optimization - process: - - gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo - - With the linker plugin enabled, the linker extracts the needed - GIMPLE files from 'libfoo.a' and passes them on to the running GCC - to make them part of the aggregated GIMPLE image to be optimized. - - If you are not using a linker with plugin support and/or do not - enable the linker plugin, then the objects inside 'libfoo.a' are - extracted and linked as usual, but they do not participate in the - LTO optimization process. In order to make a static library - suitable for both LTO optimization and usual linkage, compile its - object files with '-flto' '-ffat-lto-objects'. - - Link-time optimizations do not require the presence of the whole - program to operate. If the program does not require any symbols to - be exported, it is possible to combine '-flto' and - '-fwhole-program' to allow the interprocedural optimizers to use - more aggressive assumptions which may lead to improved optimization - opportunities. Use of '-fwhole-program' is not needed when linker - plugin is active (see '-fuse-linker-plugin'). - - The current implementation of LTO makes no attempt to generate - bytecode that is portable between different types of hosts. The - bytecode files are versioned and there is a strict version check, - so bytecode files generated in one version of GCC will not work - with an older or newer version of GCC. - - Link-time optimization does not work well with generation of - debugging information. Combining '-flto' with '-g' is currently - experimental and expected to produce unexpected results. - - If you specify the optional N, the optimization and code generation - done at link time is executed in parallel using N parallel jobs by - utilizing an installed 'make' program. The environment variable - 'MAKE' may be used to override the program used. The default value - for N is 1. - - You can also specify '-flto=jobserver' to use GNU make's job server - mode to determine the number of parallel jobs. This is useful when - the Makefile calling GCC is already executing in parallel. You - must prepend a '+' to the command recipe in the parent Makefile for - this to work. This option likely only works if 'MAKE' is GNU make. - -'-flto-partition=ALG' - Specify the partitioning algorithm used by the link-time optimizer. - The value is either '1to1' to specify a partitioning mirroring the - original source files or 'balanced' to specify partitioning into - equally sized chunks (whenever possible) or 'max' to create new - partition for every symbol where possible. Specifying 'none' as an - algorithm disables partitioning and streaming completely. The - default value is 'balanced'. While '1to1' can be used as an - workaround for various code ordering issues, the 'max' partitioning - is intended for internal testing only. - -'-flto-compression-level=N' - This option specifies the level of compression used for - intermediate language written to LTO object files, and is only - meaningful in conjunction with LTO mode ('-flto'). Valid values - are 0 (no compression) to 9 (maximum compression). Values outside - this range are clamped to either 0 or 9. If the option is not - given, a default balanced compression setting is used. - -'-flto-report' - Prints a report with internal details on the workings of the - link-time optimizer. The contents of this report vary from version - to version. It is meant to be useful to GCC developers when - processing object files in LTO mode (via '-flto'). - - Disabled by default. - -'-flto-report-wpa' - Like '-flto-report', but only print for the WPA phase of Link Time - Optimization. - -'-fuse-linker-plugin' - Enables the use of a linker plugin during link-time optimization. - This option relies on plugin support in the linker, which is - available in gold or in GNU ld 2.21 or newer. - - This option enables the extraction of object files with GIMPLE - bytecode out of library archives. This improves the quality of - optimization by exposing more code to the link-time optimizer. - This information specifies what symbols can be accessed externally - (by non-LTO object or during dynamic linking). Resulting code - quality improvements on binaries (and shared libraries that use - hidden visibility) are similar to '-fwhole-program'. See '-flto' - for a description of the effect of this flag and how to use it. - - This option is enabled by default when LTO support in GCC is - enabled and GCC was configured for use with a linker supporting - plugins (GNU ld 2.21 or newer or gold). - -'-ffat-lto-objects' - Fat LTO objects are object files that contain both the intermediate - language and the object code. This makes them usable for both LTO - linking and normal linking. This option is effective only when - compiling with '-flto' and is ignored at link time. - - '-fno-fat-lto-objects' improves compilation time over plain LTO, - but requires the complete toolchain to be aware of LTO. It requires - a linker with linker plugin support for basic functionality. - Additionally, 'nm', 'ar' and 'ranlib' need to support linker - plugins to allow a full-featured build environment (capable of - building static libraries etc). GCC provides the 'gcc-ar', - 'gcc-nm', 'gcc-ranlib' wrappers to pass the right options to these - tools. With non fat LTO makefiles need to be modified to use them. - - The default is '-fno-fat-lto-objects' on targets with linker plugin - support. - -'-fcompare-elim' - After register allocation and post-register allocation instruction - splitting, identify arithmetic instructions that compute processor - flags similar to a comparison operation based on that arithmetic. - If possible, eliminate the explicit comparison operation. - - This pass only applies to certain targets that cannot explicitly - represent the comparison operation before register allocation is - complete. - - Enabled at levels '-O', '-O2', '-O3', '-Os'. - -'-fuse-ld=bfd' - Use the 'bfd' linker instead of the default linker. - -'-fuse-ld=gold' - Use the 'gold' linker instead of the default linker. - -'-fcprop-registers' - After register allocation and post-register allocation instruction - splitting, perform a copy-propagation pass to try to reduce - scheduling dependencies and occasionally eliminate the copy. - - Enabled at levels '-O', '-O2', '-O3', '-Os'. - -'-fprofile-correction' - Profiles collected using an instrumented binary for multi-threaded - programs may be inconsistent due to missed counter updates. When - this option is specified, GCC uses heuristics to correct or smooth - out such inconsistencies. By default, GCC emits an error message - when an inconsistent profile is detected. - -'-fprofile-dir=PATH' - - Set the directory to search for the profile data files in to PATH. - This option affects only the profile data generated by - '-fprofile-generate', '-ftest-coverage', '-fprofile-arcs' and used - by '-fprofile-use' and '-fbranch-probabilities' and its related - options. Both absolute and relative paths can be used. By - default, GCC uses the current directory as PATH, thus the profile - data file appears in the same directory as the object file. - -'-fprofile-generate' -'-fprofile-generate=PATH' - - Enable options usually used for instrumenting application to - produce profile useful for later recompilation with profile - feedback based optimization. You must use '-fprofile-generate' - both when compiling and when linking your program. - - The following options are enabled: '-fprofile-arcs', - '-fprofile-values', '-fvpt'. - - If PATH is specified, GCC looks at the PATH to find the profile - feedback data files. See '-fprofile-dir'. - -'-fprofile-use' -'-fprofile-use=PATH' - Enable profile feedback directed optimizations, and optimizations - generally profitable only with profile feedback available. - - The following options are enabled: '-fbranch-probabilities', - '-fvpt', '-funroll-loops', '-fpeel-loops', '-ftracer', - '-ftree-vectorize', 'ftree-loop-distribute-patterns' - - By default, GCC emits an error message if the feedback profiles do - not match the source code. This error can be turned into a warning - by using '-Wcoverage-mismatch'. Note this may result in poorly - optimized code. - - If PATH is specified, GCC looks at the PATH to find the profile - feedback data files. See '-fprofile-dir'. - - The following options control compiler behavior regarding -floating-point arithmetic. These options trade off between speed and -correctness. All must be specifically enabled. - -'-ffloat-store' - Do not store floating-point variables in registers, and inhibit - other options that might change whether a floating-point value is - taken from a register or memory. - - This option prevents undesirable excess precision on machines such - as the 68000 where the floating registers (of the 68881) keep more - precision than a 'double' is supposed to have. Similarly for the - x86 architecture. For most programs, the excess precision does - only good, but a few programs rely on the precise definition of - IEEE floating point. Use '-ffloat-store' for such programs, after - modifying them to store all pertinent intermediate computations - into variables. - -'-fexcess-precision=STYLE' - This option allows further control over excess precision on - machines where floating-point registers have more precision than - the IEEE 'float' and 'double' types and the processor does not - support operations rounding to those types. By default, - '-fexcess-precision=fast' is in effect; this means that operations - are carried out in the precision of the registers and that it is - unpredictable when rounding to the types specified in the source - code takes place. When compiling C, if - '-fexcess-precision=standard' is specified then excess precision - follows the rules specified in ISO C99; in particular, both casts - and assignments cause values to be rounded to their semantic types - (whereas '-ffloat-store' only affects assignments). This option is - enabled by default for C if a strict conformance option such as - '-std=c99' is used. - - '-fexcess-precision=standard' is not implemented for languages - other than C, and has no effect if '-funsafe-math-optimizations' or - '-ffast-math' is specified. On the x86, it also has no effect if - '-mfpmath=sse' or '-mfpmath=sse+387' is specified; in the former - case, IEEE semantics apply without excess precision, and in the - latter, rounding is unpredictable. - -'-ffast-math' - Sets '-fno-math-errno', '-funsafe-math-optimizations', - '-ffinite-math-only', '-fno-rounding-math', '-fno-signaling-nans' - and '-fcx-limited-range'. - - This option causes the preprocessor macro '__FAST_MATH__' to be - defined. - - This option is not turned on by any '-O' option besides '-Ofast' - since it can result in incorrect output for programs that depend on - an exact implementation of IEEE or ISO rules/specifications for - math functions. It may, however, yield faster code for programs - that do not require the guarantees of these specifications. - -'-fno-math-errno' - Do not set 'errno' after calling math functions that are executed - with a single instruction, e.g., 'sqrt'. A program that relies on - IEEE exceptions for math error handling may want to use this flag - for speed while maintaining IEEE arithmetic compatibility. - - This option is not turned on by any '-O' option since it can result - in incorrect output for programs that depend on an exact - implementation of IEEE or ISO rules/specifications for math - functions. It may, however, yield faster code for programs that do - not require the guarantees of these specifications. - - The default is '-fmath-errno'. - - On Darwin systems, the math library never sets 'errno'. There is - therefore no reason for the compiler to consider the possibility - that it might, and '-fno-math-errno' is the default. - -'-funsafe-math-optimizations' - - Allow optimizations for floating-point arithmetic that (a) assume - that arguments and results are valid and (b) may violate IEEE or - ANSI standards. When used at link-time, it may include libraries - or startup files that change the default FPU control word or other - similar optimizations. - - This option is not turned on by any '-O' option since it can result - in incorrect output for programs that depend on an exact - implementation of IEEE or ISO rules/specifications for math - functions. It may, however, yield faster code for programs that do - not require the guarantees of these specifications. Enables - '-fno-signed-zeros', '-fno-trapping-math', '-fassociative-math' and - '-freciprocal-math'. - - The default is '-fno-unsafe-math-optimizations'. - -'-fassociative-math' - - Allow re-association of operands in series of floating-point - operations. This violates the ISO C and C++ language standard by - possibly changing computation result. NOTE: re-ordering may change - the sign of zero as well as ignore NaNs and inhibit or create - underflow or overflow (and thus cannot be used on code that relies - on rounding behavior like '(x + 2**52) - 2**52'. May also reorder - floating-point comparisons and thus may not be used when ordered - comparisons are required. This option requires that both - '-fno-signed-zeros' and '-fno-trapping-math' be in effect. - Moreover, it doesn't make much sense with '-frounding-math'. For - Fortran the option is automatically enabled when both - '-fno-signed-zeros' and '-fno-trapping-math' are in effect. - - The default is '-fno-associative-math'. - -'-freciprocal-math' - - Allow the reciprocal of a value to be used instead of dividing by - the value if this enables optimizations. For example 'x / y' can - be replaced with 'x * (1/y)', which is useful if '(1/y)' is subject - to common subexpression elimination. Note that this loses - precision and increases the number of flops operating on the value. - - The default is '-fno-reciprocal-math'. - -'-ffinite-math-only' - Allow optimizations for floating-point arithmetic that assume that - arguments and results are not NaNs or +-Infs. - - This option is not turned on by any '-O' option since it can result - in incorrect output for programs that depend on an exact - implementation of IEEE or ISO rules/specifications for math - functions. It may, however, yield faster code for programs that do - not require the guarantees of these specifications. - - The default is '-fno-finite-math-only'. - -'-fno-signed-zeros' - Allow optimizations for floating-point arithmetic that ignore the - signedness of zero. IEEE arithmetic specifies the behavior of - distinct +0.0 and -0.0 values, which then prohibits simplification - of expressions such as x+0.0 or 0.0*x (even with - '-ffinite-math-only'). This option implies that the sign of a zero - result isn't significant. - - The default is '-fsigned-zeros'. - -'-fno-trapping-math' - Compile code assuming that floating-point operations cannot - generate user-visible traps. These traps include division by zero, - overflow, underflow, inexact result and invalid operation. This - option requires that '-fno-signaling-nans' be in effect. Setting - this option may allow faster code if one relies on "non-stop" IEEE - arithmetic, for example. - - This option should never be turned on by any '-O' option since it - can result in incorrect output for programs that depend on an exact - implementation of IEEE or ISO rules/specifications for math - functions. - - The default is '-ftrapping-math'. - -'-frounding-math' - Disable transformations and optimizations that assume default - floating-point rounding behavior. This is round-to-zero for all - floating point to integer conversions, and round-to-nearest for all - other arithmetic truncations. This option should be specified for - programs that change the FP rounding mode dynamically, or that may - be executed with a non-default rounding mode. This option disables - constant folding of floating-point expressions at compile time - (which may be affected by rounding mode) and arithmetic - transformations that are unsafe in the presence of sign-dependent - rounding modes. - - The default is '-fno-rounding-math'. - - This option is experimental and does not currently guarantee to - disable all GCC optimizations that are affected by rounding mode. - Future versions of GCC may provide finer control of this setting - using C99's 'FENV_ACCESS' pragma. This command-line option will be - used to specify the default state for 'FENV_ACCESS'. - -'-fsignaling-nans' - Compile code assuming that IEEE signaling NaNs may generate - user-visible traps during floating-point operations. Setting this - option disables optimizations that may change the number of - exceptions visible with signaling NaNs. This option implies - '-ftrapping-math'. - - This option causes the preprocessor macro '__SUPPORT_SNAN__' to be - defined. - - The default is '-fno-signaling-nans'. - - This option is experimental and does not currently guarantee to - disable all GCC optimizations that affect signaling NaN behavior. - -'-fsingle-precision-constant' - Treat floating-point constants as single precision instead of - implicitly converting them to double-precision constants. - -'-fcx-limited-range' - When enabled, this option states that a range reduction step is not - needed when performing complex division. Also, there is no - checking whether the result of a complex multiplication or division - is 'NaN + I*NaN', with an attempt to rescue the situation in that - case. The default is '-fno-cx-limited-range', but is enabled by - '-ffast-math'. - - This option controls the default setting of the ISO C99 - 'CX_LIMITED_RANGE' pragma. Nevertheless, the option applies to all - languages. - -'-fcx-fortran-rules' - Complex multiplication and division follow Fortran rules. Range - reduction is done as part of complex division, but there is no - checking whether the result of a complex multiplication or division - is 'NaN + I*NaN', with an attempt to rescue the situation in that - case. - - The default is '-fno-cx-fortran-rules'. - - The following options control optimizations that may improve -performance, but are not enabled by any '-O' options. This section -includes experimental options that may produce broken code. - -'-fbranch-probabilities' - After running a program compiled with '-fprofile-arcs' (*note - Options for Debugging Your Program or 'gcc': Debugging Options.), - you can compile it a second time using '-fbranch-probabilities', to - improve optimizations based on the number of times each branch was - taken. When a program compiled with '-fprofile-arcs' exits, it - saves arc execution counts to a file called 'SOURCENAME.gcda' for - each source file. The information in this data file is very - dependent on the structure of the generated code, so you must use - the same source code and the same optimization options for both - compilations. - - With '-fbranch-probabilities', GCC puts a 'REG_BR_PROB' note on - each 'JUMP_INSN' and 'CALL_INSN'. These can be used to improve - optimization. Currently, they are only used in one place: in - 'reorg.c', instead of guessing which path a branch is most likely - to take, the 'REG_BR_PROB' values are used to exactly determine - which path is taken more often. - -'-fprofile-values' - If combined with '-fprofile-arcs', it adds code so that some data - about values of expressions in the program is gathered. - - With '-fbranch-probabilities', it reads back the data gathered from - profiling values of expressions for usage in optimizations. - - Enabled with '-fprofile-generate' and '-fprofile-use'. - -'-fprofile-reorder-functions' - Function reordering based on profile instrumentation collects first - time of execution of a function and orders these functions in - ascending order. - - Enabled with '-fprofile-use'. - -'-fvpt' - If combined with '-fprofile-arcs', this option instructs the - compiler to add code to gather information about values of - expressions. - - With '-fbranch-probabilities', it reads back the data gathered and - actually performs the optimizations based on them. Currently the - optimizations include specialization of division operations using - the knowledge about the value of the denominator. - -'-frename-registers' - Attempt to avoid false dependencies in scheduled code by making use - of registers left over after register allocation. This - optimization most benefits processors with lots of registers. - Depending on the debug information format adopted by the target, - however, it can make debugging impossible, since variables no - longer stay in a "home register". - - Enabled by default with '-funroll-loops' and '-fpeel-loops'. - -'-ftracer' - Perform tail duplication to enlarge superblock size. This - transformation simplifies the control flow of the function allowing - other optimizations to do a better job. - - Enabled with '-fprofile-use'. - -'-funroll-loops' - Unroll loops whose number of iterations can be determined at - compile time or upon entry to the loop. '-funroll-loops' implies - '-frerun-cse-after-loop', '-fweb' and '-frename-registers'. It - also turns on complete loop peeling (i.e. complete removal of loops - with a small constant number of iterations). This option makes - code larger, and may or may not make it run faster. - - Enabled with '-fprofile-use'. - -'-funroll-all-loops' - Unroll all loops, even if their number of iterations is uncertain - when the loop is entered. This usually makes programs run more - slowly. '-funroll-all-loops' implies the same options as - '-funroll-loops'. - -'-fpeel-loops' - Peels loops for which there is enough information that they do not - roll much (from profile feedback). It also turns on complete loop - peeling (i.e. complete removal of loops with small constant number - of iterations). - - Enabled with '-fprofile-use'. - -'-fmove-loop-invariants' - Enables the loop invariant motion pass in the RTL loop optimizer. - Enabled at level '-O1' - -'-funswitch-loops' - Move branches with loop invariant conditions out of the loop, with - duplicates of the loop on both branches (modified according to - result of the condition). - -'-ffunction-sections' -'-fdata-sections' - Place each function or data item into its own section in the output - file if the target supports arbitrary sections. The name of the - function or the name of the data item determines the section's name - in the output file. - - Use these options on systems where the linker can perform - optimizations to improve locality of reference in the instruction - space. Most systems using the ELF object format and SPARC - processors running Solaris 2 have linkers with such optimizations. - AIX may have these optimizations in the future. - - Only use these options when there are significant benefits from - doing so. When you specify these options, the assembler and linker - create larger object and executable files and are also slower. You - cannot use 'gprof' on all systems if you specify this option, and - you may have problems with debugging if you specify both this - option and '-g'. - -'-fbranch-target-load-optimize' - Perform branch target register load optimization before prologue / - epilogue threading. The use of target registers can typically be - exposed only during reload, thus hoisting loads out of loops and - doing inter-block scheduling needs a separate optimization pass. - -'-fbranch-target-load-optimize2' - Perform branch target register load optimization after prologue / - epilogue threading. - -'-fbtr-bb-exclusive' - When performing branch target register load optimization, don't - reuse branch target registers within any basic block. - -'-fstack-protector' - Emit extra code to check for buffer overflows, such as stack - smashing attacks. This is done by adding a guard variable to - functions with vulnerable objects. This includes functions that - call 'alloca', and functions with buffers larger than 8 bytes. The - guards are initialized when a function is entered and then checked - when the function exits. If a guard check fails, an error message - is printed and the program exits. - -'-fstack-protector-all' - Like '-fstack-protector' except that all functions are protected. - -'-fstack-protector-strong' - Like '-fstack-protector' but includes additional functions to be - protected -- those that have local array definitions, or have - references to local frame addresses. - -'-fsection-anchors' - Try to reduce the number of symbolic address calculations by using - shared "anchor" symbols to address nearby objects. This - transformation can help to reduce the number of GOT entries and GOT - accesses on some targets. - - For example, the implementation of the following function 'foo': - - static int a, b, c; - int foo (void) { return a + b + c; } - - usually calculates the addresses of all three variables, but if you - compile it with '-fsection-anchors', it accesses the variables from - a common anchor point instead. The effect is similar to the - following pseudocode (which isn't valid C): - - int foo (void) - { - register int *xr = &x; - return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; - } - - Not all targets support this option. - -'--param NAME=VALUE' - In some places, GCC uses various constants to control the amount of - optimization that is done. For example, GCC does not inline - functions that contain more than a certain number of instructions. - You can control some of these constants on the command line using - the '--param' option. - - The names of specific parameters, and the meaning of the values, - are tied to the internals of the compiler, and are subject to - change without notice in future releases. - - In each case, the VALUE is an integer. The allowable choices for - NAME are: - - 'predictable-branch-outcome' - When branch is predicted to be taken with probability lower - than this threshold (in percent), then it is considered well - predictable. The default is 10. - - 'max-crossjump-edges' - The maximum number of incoming edges to consider for - cross-jumping. The algorithm used by '-fcrossjumping' is - O(N^2) in the number of edges incoming to each block. - Increasing values mean more aggressive optimization, making - the compilation time increase with probably small improvement - in executable size. - - 'min-crossjump-insns' - The minimum number of instructions that must be matched at the - end of two blocks before cross-jumping is performed on them. - This value is ignored in the case where all instructions in - the block being cross-jumped from are matched. The default - value is 5. - - 'max-grow-copy-bb-insns' - The maximum code size expansion factor when copying basic - blocks instead of jumping. The expansion is relative to a - jump instruction. The default value is 8. - - 'max-goto-duplication-insns' - The maximum number of instructions to duplicate to a block - that jumps to a computed goto. To avoid O(N^2) behavior in a - number of passes, GCC factors computed gotos early in the - compilation process, and unfactors them as late as possible. - Only computed jumps at the end of a basic blocks with no more - than max-goto-duplication-insns are unfactored. The default - value is 8. - - 'max-delay-slot-insn-search' - The maximum number of instructions to consider when looking - for an instruction to fill a delay slot. If more than this - arbitrary number of instructions are searched, the time - savings from filling the delay slot are minimal, so stop - searching. Increasing values mean more aggressive - optimization, making the compilation time increase with - probably small improvement in execution time. - - 'max-delay-slot-live-search' - When trying to fill delay slots, the maximum number of - instructions to consider when searching for a block with valid - live register information. Increasing this arbitrarily chosen - value means more aggressive optimization, increasing the - compilation time. This parameter should be removed when the - delay slot code is rewritten to maintain the control-flow - graph. - - 'max-gcse-memory' - The approximate maximum amount of memory that can be allocated - in order to perform the global common subexpression - elimination optimization. If more memory than specified is - required, the optimization is not done. - - 'max-gcse-insertion-ratio' - If the ratio of expression insertions to deletions is larger - than this value for any expression, then RTL PRE inserts or - removes the expression and thus leaves partially redundant - computations in the instruction stream. The default value is - 20. - - 'max-pending-list-length' - The maximum number of pending dependencies scheduling allows - before flushing the current state and starting over. Large - functions with few branches or calls can create excessively - large lists which needlessly consume memory and resources. - - 'max-modulo-backtrack-attempts' - The maximum number of backtrack attempts the scheduler should - make when modulo scheduling a loop. Larger values can - exponentially increase compilation time. - - 'max-inline-insns-single' - Several parameters control the tree inliner used in GCC. This - number sets the maximum number of instructions (counted in - GCC's internal representation) in a single function that the - tree inliner considers for inlining. This only affects - functions declared inline and methods implemented in a class - declaration (C++). The default value is 400. - - 'max-inline-insns-auto' - When you use '-finline-functions' (included in '-O3'), a lot - of functions that would otherwise not be considered for - inlining by the compiler are investigated. To those - functions, a different (more restrictive) limit compared to - functions declared inline can be applied. The default value - is 40. - - 'inline-min-speedup' - When estimated performance improvement of caller + callee - runtime exceeds this threshold (in precent), the function can - be inlined regardless the limit on '--param - max-inline-insns-single' and '--param max-inline-insns-auto'. - - 'large-function-insns' - The limit specifying really large functions. For functions - larger than this limit after inlining, inlining is constrained - by '--param large-function-growth'. This parameter is useful - primarily to avoid extreme compilation time caused by - non-linear algorithms used by the back end. The default value - is 2700. - - 'large-function-growth' - Specifies maximal growth of large function caused by inlining - in percents. The default value is 100 which limits large - function growth to 2.0 times the original size. - - 'large-unit-insns' - The limit specifying large translation unit. Growth caused by - inlining of units larger than this limit is limited by - '--param inline-unit-growth'. For small units this might be - too tight. For example, consider a unit consisting of - function A that is inline and B that just calls A three times. - If B is small relative to A, the growth of unit is 300\% and - yet such inlining is very sane. For very large units - consisting of small inlineable functions, however, the overall - unit growth limit is needed to avoid exponential explosion of - code size. Thus for smaller units, the size is increased to - '--param large-unit-insns' before applying '--param - inline-unit-growth'. The default is 10000. - - 'inline-unit-growth' - Specifies maximal overall growth of the compilation unit - caused by inlining. The default value is 30 which limits unit - growth to 1.3 times the original size. - - 'ipcp-unit-growth' - Specifies maximal overall growth of the compilation unit - caused by interprocedural constant propagation. The default - value is 10 which limits unit growth to 1.1 times the original - size. - - 'large-stack-frame' - The limit specifying large stack frames. While inlining the - algorithm is trying to not grow past this limit too much. The - default value is 256 bytes. - - 'large-stack-frame-growth' - Specifies maximal growth of large stack frames caused by - inlining in percents. The default value is 1000 which limits - large stack frame growth to 11 times the original size. - - 'max-inline-insns-recursive' - 'max-inline-insns-recursive-auto' - Specifies the maximum number of instructions an out-of-line - copy of a self-recursive inline function can grow into by - performing recursive inlining. - - For functions declared inline, '--param - max-inline-insns-recursive' is taken into account. For - functions not declared inline, recursive inlining happens only - when '-finline-functions' (included in '-O3') is enabled and - '--param max-inline-insns-recursive-auto' is used. The - default value is 450. - - 'max-inline-recursive-depth' - 'max-inline-recursive-depth-auto' - Specifies the maximum recursion depth used for recursive - inlining. - - For functions declared inline, '--param - max-inline-recursive-depth' is taken into account. For - functions not declared inline, recursive inlining happens only - when '-finline-functions' (included in '-O3') is enabled and - '--param max-inline-recursive-depth-auto' is used. The - default value is 8. - - 'min-inline-recursive-probability' - Recursive inlining is profitable only for function having deep - recursion in average and can hurt for function having little - recursion depth by increasing the prologue size or complexity - of function body to other optimizers. - - When profile feedback is available (see '-fprofile-generate') - the actual recursion depth can be guessed from probability - that function recurses via a given call expression. This - parameter limits inlining only to call expressions whose - probability exceeds the given threshold (in percents). The - default value is 10. - - 'early-inlining-insns' - Specify growth that the early inliner can make. In effect it - increases the amount of inlining for code having a large - abstraction penalty. The default value is 10. - - 'max-early-inliner-iterations' - 'max-early-inliner-iterations' - Limit of iterations of the early inliner. This basically - bounds the number of nested indirect calls the early inliner - can resolve. Deeper chains are still handled by late - inlining. - - 'comdat-sharing-probability' - 'comdat-sharing-probability' - Probability (in percent) that C++ inline function with comdat - visibility are shared across multiple compilation units. The - default value is 20. - - 'min-vect-loop-bound' - The minimum number of iterations under which loops are not - vectorized when '-ftree-vectorize' is used. The number of - iterations after vectorization needs to be greater than the - value specified by this option to allow vectorization. The - default value is 0. - - 'gcse-cost-distance-ratio' - Scaling factor in calculation of maximum distance an - expression can be moved by GCSE optimizations. This is - currently supported only in the code hoisting pass. The - bigger the ratio, the more aggressive code hoisting is with - simple expressions, i.e., the expressions that have cost less - than 'gcse-unrestricted-cost'. Specifying 0 disables hoisting - of simple expressions. The default value is 10. - - 'gcse-unrestricted-cost' - Cost, roughly measured as the cost of a single typical machine - instruction, at which GCSE optimizations do not constrain the - distance an expression can travel. This is currently - supported only in the code hoisting pass. The lesser the - cost, the more aggressive code hoisting is. Specifying 0 - allows all expressions to travel unrestricted distances. The - default value is 3. - - 'max-hoist-depth' - The depth of search in the dominator tree for expressions to - hoist. This is used to avoid quadratic behavior in hoisting - algorithm. The value of 0 does not limit on the search, but - may slow down compilation of huge functions. The default - value is 30. - - 'max-tail-merge-comparisons' - The maximum amount of similar bbs to compare a bb with. This - is used to avoid quadratic behavior in tree tail merging. The - default value is 10. - - 'max-tail-merge-iterations' - The maximum amount of iterations of the pass over the - function. This is used to limit compilation time in tree tail - merging. The default value is 2. - - 'max-unrolled-insns' - The maximum number of instructions that a loop may have to be - unrolled. If a loop is unrolled, this parameter also - determines how many times the loop code is unrolled. - - 'max-average-unrolled-insns' - The maximum number of instructions biased by probabilities of - their execution that a loop may have to be unrolled. If a - loop is unrolled, this parameter also determines how many - times the loop code is unrolled. - - 'max-unroll-times' - The maximum number of unrollings of a single loop. - - 'max-peeled-insns' - The maximum number of instructions that a loop may have to be - peeled. If a loop is peeled, this parameter also determines - how many times the loop code is peeled. - - 'max-peel-times' - The maximum number of peelings of a single loop. - - 'max-peel-branches' - The maximum number of branches on the hot path through the - peeled sequence. - - 'max-completely-peeled-insns' - The maximum number of insns of a completely peeled loop. - - 'max-completely-peel-times' - The maximum number of iterations of a loop to be suitable for - complete peeling. - - 'max-completely-peel-loop-nest-depth' - The maximum depth of a loop nest suitable for complete - peeling. - - 'max-unswitch-insns' - The maximum number of insns of an unswitched loop. - - 'max-unswitch-level' - The maximum number of branches unswitched in a single loop. - - 'lim-expensive' - The minimum cost of an expensive expression in the loop - invariant motion. - - 'iv-consider-all-candidates-bound' - Bound on number of candidates for induction variables, below - which all candidates are considered for each use in induction - variable optimizations. If there are more candidates than - this, only the most relevant ones are considered to avoid - quadratic time complexity. - - 'iv-max-considered-uses' - The induction variable optimizations give up on loops that - contain more induction variable uses. - - 'iv-always-prune-cand-set-bound' - If the number of candidates in the set is smaller than this - value, always try to remove unnecessary ivs from the set when - adding a new one. - - 'scev-max-expr-size' - Bound on size of expressions used in the scalar evolutions - analyzer. Large expressions slow the analyzer. - - 'scev-max-expr-complexity' - Bound on the complexity of the expressions in the scalar - evolutions analyzer. Complex expressions slow the analyzer. - - 'omega-max-vars' - The maximum number of variables in an Omega constraint system. - The default value is 128. - - 'omega-max-geqs' - The maximum number of inequalities in an Omega constraint - system. The default value is 256. - - 'omega-max-eqs' - The maximum number of equalities in an Omega constraint - system. The default value is 128. - - 'omega-max-wild-cards' - The maximum number of wildcard variables that the Omega solver - is able to insert. The default value is 18. - - 'omega-hash-table-size' - The size of the hash table in the Omega solver. The default - value is 550. - - 'omega-max-keys' - The maximal number of keys used by the Omega solver. The - default value is 500. - - 'omega-eliminate-redundant-constraints' - When set to 1, use expensive methods to eliminate all - redundant constraints. The default value is 0. - - 'vect-max-version-for-alignment-checks' - The maximum number of run-time checks that can be performed - when doing loop versioning for alignment in the vectorizer. - - 'vect-max-version-for-alias-checks' - The maximum number of run-time checks that can be performed - when doing loop versioning for alias in the vectorizer. - - 'vect-max-peeling-for-alignment' - The maximum number of loop peels to enhance access alignment - for vectorizer. Value -1 means 'no limit'. - - 'max-iterations-to-track' - The maximum number of iterations of a loop the brute-force - algorithm for analysis of the number of iterations of the loop - tries to evaluate. - - 'hot-bb-count-ws-permille' - A basic block profile count is considered hot if it - contributes to the given permillage (i.e. 0...1000) of the - entire profiled execution. - - 'hot-bb-frequency-fraction' - Select fraction of the entry block frequency of executions of - basic block in function given basic block needs to have to be - considered hot. - - 'max-predicted-iterations' - The maximum number of loop iterations we predict statically. - This is useful in cases where a function contains a single - loop with known bound and another loop with unknown bound. - The known number of iterations is predicted correctly, while - the unknown number of iterations average to roughly 10. This - means that the loop without bounds appears artificially cold - relative to the other one. - - 'builtin-expect-probability' - Control the probability of the expression having the specified - value. This parameter takes a percentage (i.e. 0 ... 100) - as input. The default probability of 90 is obtained - empirically. - - 'align-threshold' - - Select fraction of the maximal frequency of executions of a - basic block in a function to align the basic block. - - 'align-loop-iterations' - - A loop expected to iterate at least the selected number of - iterations is aligned. - - 'tracer-dynamic-coverage' - 'tracer-dynamic-coverage-feedback' - - This value is used to limit superblock formation once the - given percentage of executed instructions is covered. This - limits unnecessary code size expansion. - - The 'tracer-dynamic-coverage-feedback' is used only when - profile feedback is available. The real profiles (as opposed - to statically estimated ones) are much less balanced allowing - the threshold to be larger value. - - 'tracer-max-code-growth' - Stop tail duplication once code growth has reached given - percentage. This is a rather artificial limit, as most of the - duplicates are eliminated later in cross jumping, so it may be - set to much higher values than is the desired code growth. - - 'tracer-min-branch-ratio' - - Stop reverse growth when the reverse probability of best edge - is less than this threshold (in percent). - - 'tracer-min-branch-ratio' - 'tracer-min-branch-ratio-feedback' - - Stop forward growth if the best edge has probability lower - than this threshold. - - Similarly to 'tracer-dynamic-coverage' two values are present, - one for compilation for profile feedback and one for - compilation without. The value for compilation with profile - feedback needs to be more conservative (higher) in order to - make tracer effective. - - 'max-cse-path-length' - - The maximum number of basic blocks on path that CSE considers. - The default is 10. - - 'max-cse-insns' - The maximum number of instructions CSE processes before - flushing. The default is 1000. - - 'ggc-min-expand' - - GCC uses a garbage collector to manage its own memory - allocation. This parameter specifies the minimum percentage - by which the garbage collector's heap should be allowed to - expand between collections. Tuning this may improve - compilation speed; it has no effect on code generation. - - The default is 30% + 70% * (RAM/1GB) with an upper bound of - 100% when RAM >= 1GB. If 'getrlimit' is available, the notion - of "RAM" is the smallest of actual RAM and 'RLIMIT_DATA' or - 'RLIMIT_AS'. If GCC is not able to calculate RAM on a - particular platform, the lower bound of 30% is used. Setting - this parameter and 'ggc-min-heapsize' to zero causes a full - collection to occur at every opportunity. This is extremely - slow, but can be useful for debugging. - - 'ggc-min-heapsize' - - Minimum size of the garbage collector's heap before it begins - bothering to collect garbage. The first collection occurs - after the heap expands by 'ggc-min-expand'% beyond - 'ggc-min-heapsize'. Again, tuning this may improve - compilation speed, and has no effect on code generation. - - The default is the smaller of RAM/8, RLIMIT_RSS, or a limit - that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not - exceeded, but with a lower bound of 4096 (four megabytes) and - an upper bound of 131072 (128 megabytes). If GCC is not able - to calculate RAM on a particular platform, the lower bound is - used. Setting this parameter very large effectively disables - garbage collection. Setting this parameter and - 'ggc-min-expand' to zero causes a full collection to occur at - every opportunity. - - 'max-reload-search-insns' - The maximum number of instruction reload should look backward - for equivalent register. Increasing values mean more - aggressive optimization, making the compilation time increase - with probably slightly better performance. The default value - is 100. - - 'max-cselib-memory-locations' - The maximum number of memory locations cselib should take into - account. Increasing values mean more aggressive optimization, - making the compilation time increase with probably slightly - better performance. The default value is 500. - - 'reorder-blocks-duplicate' - 'reorder-blocks-duplicate-feedback' - - Used by the basic block reordering pass to decide whether to - use unconditional branch or duplicate the code on its - destination. Code is duplicated when its estimated size is - smaller than this value multiplied by the estimated size of - unconditional jump in the hot spots of the program. - - The 'reorder-block-duplicate-feedback' is used only when - profile feedback is available. It may be set to higher values - than 'reorder-block-duplicate' since information about the hot - spots is more accurate. - - 'max-sched-ready-insns' - The maximum number of instructions ready to be issued the - scheduler should consider at any given time during the first - scheduling pass. Increasing values mean more thorough - searches, making the compilation time increase with probably - little benefit. The default value is 100. - - 'max-sched-region-blocks' - The maximum number of blocks in a region to be considered for - interblock scheduling. The default value is 10. - - 'max-pipeline-region-blocks' - The maximum number of blocks in a region to be considered for - pipelining in the selective scheduler. The default value is - 15. - - 'max-sched-region-insns' - The maximum number of insns in a region to be considered for - interblock scheduling. The default value is 100. - - 'max-pipeline-region-insns' - The maximum number of insns in a region to be considered for - pipelining in the selective scheduler. The default value is - 200. - - 'min-spec-prob' - The minimum probability (in percents) of reaching a source - block for interblock speculative scheduling. The default - value is 40. - - 'max-sched-extend-regions-iters' - The maximum number of iterations through CFG to extend - regions. A value of 0 (the default) disables region - extensions. - - 'max-sched-insn-conflict-delay' - The maximum conflict delay for an insn to be considered for - speculative motion. The default value is 3. - - 'sched-spec-prob-cutoff' - The minimal probability of speculation success (in percents), - so that speculative insns are scheduled. The default value is - 40. - - 'sched-spec-state-edge-prob-cutoff' - The minimum probability an edge must have for the scheduler to - save its state across it. The default value is 10. - - 'sched-mem-true-dep-cost' - Minimal distance (in CPU cycles) between store and load - targeting same memory locations. The default value is 1. - - 'selsched-max-lookahead' - The maximum size of the lookahead window of selective - scheduling. It is a depth of search for available - instructions. The default value is 50. - - 'selsched-max-sched-times' - The maximum number of times that an instruction is scheduled - during selective scheduling. This is the limit on the number - of iterations through which the instruction may be pipelined. - The default value is 2. - - 'selsched-max-insns-to-rename' - The maximum number of best instructions in the ready list that - are considered for renaming in the selective scheduler. The - default value is 2. - - 'sms-min-sc' - The minimum value of stage count that swing modulo scheduler - generates. The default value is 2. - - 'max-last-value-rtl' - The maximum size measured as number of RTLs that can be - recorded in an expression in combiner for a pseudo register as - last known value of that register. The default is 10000. - - 'integer-share-limit' - Small integer constants can use a shared data structure, - reducing the compiler's memory usage and increasing its speed. - This sets the maximum value of a shared integer constant. The - default value is 256. - - 'ssp-buffer-size' - The minimum size of buffers (i.e. arrays) that receive stack - smashing protection when '-fstack-protection' is used. - - 'min-size-for-stack-sharing' - The minimum size of variables taking part in stack slot - sharing when not optimizing. The default value is 32. - - 'max-jump-thread-duplication-stmts' - Maximum number of statements allowed in a block that needs to - be duplicated when threading jumps. - - 'max-fields-for-field-sensitive' - Maximum number of fields in a structure treated in a field - sensitive manner during pointer analysis. The default is zero - for '-O0' and '-O1', and 100 for '-Os', '-O2', and '-O3'. - - 'prefetch-latency' - Estimate on average number of instructions that are executed - before prefetch finishes. The distance prefetched ahead is - proportional to this constant. Increasing this number may - also lead to less streams being prefetched (see - 'simultaneous-prefetches'). - - 'simultaneous-prefetches' - Maximum number of prefetches that can run at the same time. - - 'l1-cache-line-size' - The size of cache line in L1 cache, in bytes. - - 'l1-cache-size' - The size of L1 cache, in kilobytes. - - 'l2-cache-size' - The size of L2 cache, in kilobytes. - - 'min-insn-to-prefetch-ratio' - The minimum ratio between the number of instructions and the - number of prefetches to enable prefetching in a loop. - - 'prefetch-min-insn-to-mem-ratio' - The minimum ratio between the number of instructions and the - number of memory references to enable prefetching in a loop. - - 'use-canonical-types' - Whether the compiler should use the "canonical" type system. - By default, this should always be 1, which uses a more - efficient internal mechanism for comparing types in C++ and - Objective-C++. However, if bugs in the canonical type system - are causing compilation failures, set this value to 0 to - disable canonical types. - - 'switch-conversion-max-branch-ratio' - Switch initialization conversion refuses to create arrays that - are bigger than 'switch-conversion-max-branch-ratio' times the - number of branches in the switch. - - 'max-partial-antic-length' - Maximum length of the partial antic set computed during the - tree partial redundancy elimination optimization - ('-ftree-pre') when optimizing at '-O3' and above. For some - sorts of source code the enhanced partial redundancy - elimination optimization can run away, consuming all of the - memory available on the host machine. This parameter sets a - limit on the length of the sets that are computed, which - prevents the runaway behavior. Setting a value of 0 for this - parameter allows an unlimited set length. - - 'sccvn-max-scc-size' - Maximum size of a strongly connected component (SCC) during - SCCVN processing. If this limit is hit, SCCVN processing for - the whole function is not done and optimizations depending on - it are disabled. The default maximum SCC size is 10000. - - 'sccvn-max-alias-queries-per-access' - Maximum number of alias-oracle queries we perform when looking - for redundancies for loads and stores. If this limit is hit - the search is aborted and the load or store is not considered - redundant. The number of queries is algorithmically limited - to the number of stores on all paths from the load to the - function entry. The default maxmimum number of queries is - 1000. - - 'ira-max-loops-num' - IRA uses regional register allocation by default. If a - function contains more loops than the number given by this - parameter, only at most the given number of the most - frequently-executed loops form regions for regional register - allocation. The default value of the parameter is 100. - - 'ira-max-conflict-table-size' - Although IRA uses a sophisticated algorithm to compress the - conflict table, the table can still require excessive amounts - of memory for huge functions. If the conflict table for a - function could be more than the size in MB given by this - parameter, the register allocator instead uses a faster, - simpler, and lower-quality algorithm that does not require - building a pseudo-register conflict table. The default value - of the parameter is 2000. - - 'ira-loop-reserved-regs' - IRA can be used to evaluate more accurate register pressure in - loops for decisions to move loop invariants (see '-O3'). The - number of available registers reserved for some other purposes - is given by this parameter. The default value of the - parameter is 2, which is the minimal number of registers - needed by typical instructions. This value is the best found - from numerous experiments. - - 'loop-invariant-max-bbs-in-loop' - Loop invariant motion can be very expensive, both in - compilation time and in amount of needed compile-time memory, - with very large loops. Loops with more basic blocks than this - parameter won't have loop invariant motion optimization - performed on them. The default value of the parameter is 1000 - for '-O1' and 10000 for '-O2' and above. - - 'loop-max-datarefs-for-datadeps' - Building data dapendencies is expensive for very large loops. - This parameter limits the number of data references in loops - that are considered for data dependence analysis. These large - loops are no handled by the optimizations using loop data - dependencies. The default value is 1000. - - 'max-vartrack-size' - Sets a maximum number of hash table slots to use during - variable tracking dataflow analysis of any function. If this - limit is exceeded with variable tracking at assignments - enabled, analysis for that function is retried without it, - after removing all debug insns from the function. If the - limit is exceeded even without debug insns, var tracking - analysis is completely disabled for the function. Setting the - parameter to zero makes it unlimited. - - 'max-vartrack-expr-depth' - Sets a maximum number of recursion levels when attempting to - map variable names or debug temporaries to value expressions. - This trades compilation time for more complete debug - information. If this is set too low, value expressions that - are available and could be represented in debug information - may end up not being used; setting this higher may enable the - compiler to find more complex debug expressions, but compile - time and memory use may grow. The default is 12. - - 'min-nondebug-insn-uid' - Use uids starting at this parameter for nondebug insns. The - range below the parameter is reserved exclusively for debug - insns created by '-fvar-tracking-assignments', but debug insns - may get (non-overlapping) uids above it if the reserved range - is exhausted. - - 'ipa-sra-ptr-growth-factor' - IPA-SRA replaces a pointer to an aggregate with one or more - new parameters only when their cumulative size is less or - equal to 'ipa-sra-ptr-growth-factor' times the size of the - original pointer parameter. - - 'tm-max-aggregate-size' - When making copies of thread-local variables in a transaction, - this parameter specifies the size in bytes after which - variables are saved with the logging functions as opposed to - save/restore code sequence pairs. This option only applies - when using '-fgnu-tm'. - - 'graphite-max-nb-scop-params' - To avoid exponential effects in the Graphite loop transforms, - the number of parameters in a Static Control Part (SCoP) is - bounded. The default value is 10 parameters. A variable - whose value is unknown at compilation time and defined outside - a SCoP is a parameter of the SCoP. - - 'graphite-max-bbs-per-function' - To avoid exponential effects in the detection of SCoPs, the - size of the functions analyzed by Graphite is bounded. The - default value is 100 basic blocks. - - 'loop-block-tile-size' - Loop blocking or strip mining transforms, enabled with - '-floop-block' or '-floop-strip-mine', strip mine each loop in - the loop nest by a given number of iterations. The strip - length can be changed using the 'loop-block-tile-size' - parameter. The default value is 51 iterations. - - 'ipa-cp-value-list-size' - IPA-CP attempts to track all possible values and types passed - to a function's parameter in order to propagate them and - perform devirtualization. 'ipa-cp-value-list-size' is the - maximum number of values and types it stores per one formal - parameter of a function. - - 'lto-partitions' - Specify desired number of partitions produced during WHOPR - compilation. The number of partitions should exceed the - number of CPUs used for compilation. The default value is 32. - - 'lto-minpartition' - Size of minimal partition for WHOPR (in estimated - instructions). This prevents expenses of splitting very small - programs into too many partitions. - - 'cxx-max-namespaces-for-diagnostic-help' - The maximum number of namespaces to consult for suggestions - when C++ name lookup fails for an identifier. The default is - 1000. - - 'sink-frequency-threshold' - The maximum relative execution frequency (in percents) of the - target block relative to a statement's original block to allow - statement sinking of a statement. Larger numbers result in - more aggressive statement sinking. The default value is 75. - A small positive adjustment is applied for statements with - memory operands as those are even more profitable so sink. - - 'max-stores-to-sink' - The maximum number of conditional stores paires that can be - sunk. Set to 0 if either vectorization ('-ftree-vectorize') - or if-conversion ('-ftree-loop-if-convert') is disabled. The - default is 2. - - 'allow-load-data-races' - Allow optimizers to introduce new data races on loads. Set to - 1 to allow, otherwise to 0. This option is enabled by default - unless implicitly set by the '-fmemory-model=' option. - - 'allow-store-data-races' - Allow optimizers to introduce new data races on stores. Set - to 1 to allow, otherwise to 0. This option is enabled by - default unless implicitly set by the '-fmemory-model=' option. - - 'allow-packed-load-data-races' - Allow optimizers to introduce new data races on packed data - loads. Set to 1 to allow, otherwise to 0. This option is - enabled by default unless implicitly set by the - '-fmemory-model=' option. - - 'allow-packed-store-data-races' - Allow optimizers to introduce new data races on packed data - stores. Set to 1 to allow, otherwise to 0. This option is - enabled by default unless implicitly set by the - '-fmemory-model=' option. - - 'case-values-threshold' - The smallest number of different values for which it is best - to use a jump-table instead of a tree of conditional branches. - If the value is 0, use the default for the machine. The - default is 0. - - 'tree-reassoc-width' - Set the maximum number of instructions executed in parallel in - reassociated tree. This parameter overrides target dependent - heuristics used by default if has non zero value. - - 'sched-pressure-algorithm' - Choose between the two available implementations of - '-fsched-pressure'. Algorithm 1 is the original - implementation and is the more likely to prevent instructions - from being reordered. Algorithm 2 was designed to be a - compromise between the relatively conservative approach taken - by algorithm 1 and the rather aggressive approach taken by the - default scheduler. It relies more heavily on having a regular - register file and accurate register pressure classes. See - 'haifa-sched.c' in the GCC sources for more details. - - The default choice depends on the target. - - 'max-slsr-cand-scan' - Set the maximum number of existing candidates that will be - considered when seeking a basis for a new straight-line - strength reduction candidate. - - 'asan-globals' - Enable buffer overflow detection for global objects. This - kind of protection is enabled by default if you are using - '-fsanitize=address' option. To disable global objects - protection use '--param asan-globals=0'. - - 'asan-stack' - Enable buffer overflow detection for stack objects. This kind - of protection is enabled by default when - using'-fsanitize=address'. To disable stack protection use - '--param asan-stack=0' option. - - 'asan-instrument-reads' - Enable buffer overflow detection for memory reads. This kind - of protection is enabled by default when using - '-fsanitize=address'. To disable memory reads protection use - '--param asan-instrument-reads=0'. - - 'asan-instrument-writes' - Enable buffer overflow detection for memory writes. This kind - of protection is enabled by default when using - '-fsanitize=address'. To disable memory writes protection use - '--param asan-instrument-writes=0' option. - - 'asan-memintrin' - Enable detection for built-in functions. This kind of - protection is enabled by default when using - '-fsanitize=address'. To disable built-in functions - protection use '--param asan-memintrin=0'. - - 'asan-use-after-return' - Enable detection of use-after-return. This kind of protection - is enabled by default when using '-fsanitize=address' option. - To disable use-after-return detection use '--param - asan-use-after-return=0'. - - -File: gcc.info, Node: Preprocessor Options, Next: Assembler Options, Prev: Optimize Options, Up: Invoking GCC - -3.11 Options Controlling the Preprocessor -========================================= - -These options control the C preprocessor, which is run on each C source -file before actual compilation. - - If you use the '-E' option, nothing is done except preprocessing. Some -of these options make sense only together with '-E' because they cause -the preprocessor output to be unsuitable for actual compilation. - -'-Wp,OPTION' - You can use '-Wp,OPTION' to bypass the compiler driver and pass - OPTION directly through to the preprocessor. If OPTION contains - commas, it is split into multiple options at the commas. However, - many options are modified, translated or interpreted by the - compiler driver before being passed to the preprocessor, and '-Wp' - forcibly bypasses this phase. The preprocessor's direct interface - is undocumented and subject to change, so whenever possible you - should avoid using '-Wp' and let the driver handle the options - instead. - -'-Xpreprocessor OPTION' - Pass OPTION as an option to the preprocessor. You can use this to - supply system-specific preprocessor options that GCC does not - recognize. - - If you want to pass an option that takes an argument, you must use - '-Xpreprocessor' twice, once for the option and once for the - argument. - -'-no-integrated-cpp' - Perform preprocessing as a separate pass before compilation. By - default, GCC performs preprocessing as an integrated part of input - tokenization and parsing. If this option is provided, the - appropriate language front end ('cc1', 'cc1plus', or 'cc1obj' for - C, C++, and Objective-C, respectively) is instead invoked twice, - once for preprocessing only and once for actual compilation of the - preprocessed input. This option may be useful in conjunction with - the '-B' or '-wrapper' options to specify an alternate preprocessor - or perform additional processing of the program source between - normal preprocessing and compilation. - -'-D NAME' - Predefine NAME as a macro, with definition '1'. - -'-D NAME=DEFINITION' - The contents of DEFINITION are tokenized and processed as if they - appeared during translation phase three in a '#define' directive. - In particular, the definition will be truncated by embedded newline - characters. - - If you are invoking the preprocessor from a shell or shell-like - program you may need to use the shell's quoting syntax to protect - characters such as spaces that have a meaning in the shell syntax. - - If you wish to define a function-like macro on the command line, - write its argument list with surrounding parentheses before the - equals sign (if any). Parentheses are meaningful to most shells, - so you will need to quote the option. With 'sh' and 'csh', - '-D'NAME(ARGS...)=DEFINITION'' works. - - '-D' and '-U' options are processed in the order they are given on - the command line. All '-imacros FILE' and '-include FILE' options - are processed after all '-D' and '-U' options. - -'-U NAME' - Cancel any previous definition of NAME, either built in or provided - with a '-D' option. - -'-undef' - Do not predefine any system-specific or GCC-specific macros. The - standard predefined macros remain defined. - -'-I DIR' - Add the directory DIR to the list of directories to be searched for - header files. Directories named by '-I' are searched before the - standard system include directories. If the directory DIR is a - standard system include directory, the option is ignored to ensure - that the default search order for system directories and the - special treatment of system headers are not defeated . If DIR - begins with '=', then the '=' will be replaced by the sysroot - prefix; see '--sysroot' and '-isysroot'. - -'-o FILE' - Write output to FILE. This is the same as specifying FILE as the - second non-option argument to 'cpp'. 'gcc' has a different - interpretation of a second non-option argument, so you must use - '-o' to specify the output file. - -'-Wall' - Turns on all optional warnings which are desirable for normal code. - At present this is '-Wcomment', '-Wtrigraphs', '-Wmultichar' and a - warning about integer promotion causing a change of sign in '#if' - expressions. Note that many of the preprocessor's warnings are on - by default and have no options to control them. - -'-Wcomment' -'-Wcomments' - Warn whenever a comment-start sequence '/*' appears in a '/*' - comment, or whenever a backslash-newline appears in a '//' comment. - (Both forms have the same effect.) - -'-Wtrigraphs' - Most trigraphs in comments cannot affect the meaning of the - program. However, a trigraph that would form an escaped newline - ('??/' at the end of a line) can, by changing where the comment - begins or ends. Therefore, only trigraphs that would form escaped - newlines produce warnings inside a comment. - - This option is implied by '-Wall'. If '-Wall' is not given, this - option is still enabled unless trigraphs are enabled. To get - trigraph conversion without warnings, but get the other '-Wall' - warnings, use '-trigraphs -Wall -Wno-trigraphs'. - -'-Wtraditional' - Warn about certain constructs that behave differently in - traditional and ISO C. Also warn about ISO C constructs that have - no traditional C equivalent, and problematic constructs which - should be avoided. - -'-Wundef' - Warn whenever an identifier which is not a macro is encountered in - an '#if' directive, outside of 'defined'. Such identifiers are - replaced with zero. - -'-Wunused-macros' - Warn about macros defined in the main file that are unused. A - macro is "used" if it is expanded or tested for existence at least - once. The preprocessor will also warn if the macro has not been - used at the time it is redefined or undefined. - - Built-in macros, macros defined on the command line, and macros - defined in include files are not warned about. - - _Note:_ If a macro is actually used, but only used in skipped - conditional blocks, then CPP will report it as unused. To avoid - the warning in such a case, you might improve the scope of the - macro's definition by, for example, moving it into the first - skipped block. Alternatively, you could provide a dummy use with - something like: - - #if defined the_macro_causing_the_warning - #endif - -'-Wendif-labels' - Warn whenever an '#else' or an '#endif' are followed by text. This - usually happens in code of the form - - #if FOO - ... - #else FOO - ... - #endif FOO - - The second and third 'FOO' should be in comments, but often are not - in older programs. This warning is on by default. - -'-Werror' - Make all warnings into hard errors. Source code which triggers - warnings will be rejected. - -'-Wsystem-headers' - Issue warnings for code in system headers. These are normally - unhelpful in finding bugs in your own code, therefore suppressed. - If you are responsible for the system library, you may want to see - them. - -'-w' - Suppress all warnings, including those which GNU CPP issues by - default. - -'-pedantic' - Issue all the mandatory diagnostics listed in the C standard. Some - of them are left out by default, since they trigger frequently on - harmless code. - -'-pedantic-errors' - Issue all the mandatory diagnostics, and make all mandatory - diagnostics into errors. This includes mandatory diagnostics that - GCC issues without '-pedantic' but treats as warnings. - -'-M' - Instead of outputting the result of preprocessing, output a rule - suitable for 'make' describing the dependencies of the main source - file. The preprocessor outputs one 'make' rule containing the - object file name for that source file, a colon, and the names of - all the included files, including those coming from '-include' or - '-imacros' command line options. - - Unless specified explicitly (with '-MT' or '-MQ'), the object file - name consists of the name of the source file with any suffix - replaced with object file suffix and with any leading directory - parts removed. If there are many included files then the rule is - split into several lines using '\'-newline. The rule has no - commands. - - This option does not suppress the preprocessor's debug output, such - as '-dM'. To avoid mixing such debug output with the dependency - rules you should explicitly specify the dependency output file with - '-MF', or use an environment variable like 'DEPENDENCIES_OUTPUT' - (*note Environment Variables::). Debug output will still be sent - to the regular output stream as normal. - - Passing '-M' to the driver implies '-E', and suppresses warnings - with an implicit '-w'. - -'-MM' - Like '-M' but do not mention header files that are found in system - header directories, nor header files that are included, directly or - indirectly, from such a header. - - This implies that the choice of angle brackets or double quotes in - an '#include' directive does not in itself determine whether that - header will appear in '-MM' dependency output. This is a slight - change in semantics from GCC versions 3.0 and earlier. - -'-MF FILE' - When used with '-M' or '-MM', specifies a file to write the - dependencies to. If no '-MF' switch is given the preprocessor - sends the rules to the same place it would have sent preprocessed - output. - - When used with the driver options '-MD' or '-MMD', '-MF' overrides - the default dependency output file. - -'-MG' - In conjunction with an option such as '-M' requesting dependency - generation, '-MG' assumes missing header files are generated files - and adds them to the dependency list without raising an error. The - dependency filename is taken directly from the '#include' directive - without prepending any path. '-MG' also suppresses preprocessed - output, as a missing header file renders this useless. - - This feature is used in automatic updating of makefiles. - -'-MP' - This option instructs CPP to add a phony target for each dependency - other than the main file, causing each to depend on nothing. These - dummy rules work around errors 'make' gives if you remove header - files without updating the 'Makefile' to match. - - This is typical output: - - test.o: test.c test.h - - test.h: - -'-MT TARGET' - - Change the target of the rule emitted by dependency generation. By - default CPP takes the name of the main input file, deletes any - directory components and any file suffix such as '.c', and appends - the platform's usual object suffix. The result is the target. - - An '-MT' option will set the target to be exactly the string you - specify. If you want multiple targets, you can specify them as a - single argument to '-MT', or use multiple '-MT' options. - - For example, '-MT '$(objpfx)foo.o'' might give - - $(objpfx)foo.o: foo.c - -'-MQ TARGET' - - Same as '-MT', but it quotes any characters which are special to - Make. '-MQ '$(objpfx)foo.o'' gives - - $$(objpfx)foo.o: foo.c - - The default target is automatically quoted, as if it were given - with '-MQ'. - -'-MD' - '-MD' is equivalent to '-M -MF FILE', except that '-E' is not - implied. The driver determines FILE based on whether an '-o' - option is given. If it is, the driver uses its argument but with a - suffix of '.d', otherwise it takes the name of the input file, - removes any directory components and suffix, and applies a '.d' - suffix. - - If '-MD' is used in conjunction with '-E', any '-o' switch is - understood to specify the dependency output file (*note -MF: - dashMF.), but if used without '-E', each '-o' is understood to - specify a target object file. - - Since '-E' is not implied, '-MD' can be used to generate a - dependency output file as a side-effect of the compilation process. - -'-MMD' - Like '-MD' except mention only user header files, not system header - files. - -'-fpch-deps' - When using precompiled headers (*note Precompiled Headers::), this - flag will cause the dependency-output flags to also list the files - from the precompiled header's dependencies. If not specified only - the precompiled header would be listed and not the files that were - used to create it because those files are not consulted when a - precompiled header is used. - -'-fpch-preprocess' - This option allows use of a precompiled header (*note Precompiled - Headers::) together with '-E'. It inserts a special '#pragma', - '#pragma GCC pch_preprocess "FILENAME"' in the output to mark the - place where the precompiled header was found, and its FILENAME. - When '-fpreprocessed' is in use, GCC recognizes this '#pragma' and - loads the PCH. - - This option is off by default, because the resulting preprocessed - output is only really suitable as input to GCC. It is switched on - by '-save-temps'. - - You should not write this '#pragma' in your own code, but it is - safe to edit the filename if the PCH file is available in a - different location. The filename may be absolute or it may be - relative to GCC's current directory. - -'-x c' -'-x c++' -'-x objective-c' -'-x assembler-with-cpp' - Specify the source language: C, C++, Objective-C, or assembly. - This has nothing to do with standards conformance or extensions; it - merely selects which base syntax to expect. If you give none of - these options, cpp will deduce the language from the extension of - the source file: '.c', '.cc', '.m', or '.S'. Some other common - extensions for C++ and assembly are also recognized. If cpp does - not recognize the extension, it will treat the file as C; this is - the most generic mode. - - _Note:_ Previous versions of cpp accepted a '-lang' option which - selected both the language and the standards conformance level. - This option has been removed, because it conflicts with the '-l' - option. - -'-std=STANDARD' -'-ansi' - Specify the standard to which the code should conform. Currently - CPP knows about C and C++ standards; others may be added in the - future. - - STANDARD may be one of: - 'c90' - 'c89' - 'iso9899:1990' - The ISO C standard from 1990. 'c90' is the customary - shorthand for this version of the standard. - - The '-ansi' option is equivalent to '-std=c90'. - - 'iso9899:199409' - The 1990 C standard, as amended in 1994. - - 'iso9899:1999' - 'c99' - 'iso9899:199x' - 'c9x' - The revised ISO C standard, published in December 1999. - Before publication, this was known as C9X. - - 'iso9899:2011' - 'c11' - 'c1x' - The revised ISO C standard, published in December 2011. - Before publication, this was known as C1X. - - 'gnu90' - 'gnu89' - The 1990 C standard plus GNU extensions. This is the default. - - 'gnu99' - 'gnu9x' - The 1999 C standard plus GNU extensions. - - 'gnu11' - 'gnu1x' - The 2011 C standard plus GNU extensions. - - 'c++98' - The 1998 ISO C++ standard plus amendments. - - 'gnu++98' - The same as '-std=c++98' plus GNU extensions. This is the - default for C++ code. - -'-I-' - Split the include path. Any directories specified with '-I' - options before '-I-' are searched only for headers requested with - '#include "FILE"'; they are not searched for '#include <FILE>'. If - additional directories are specified with '-I' options after the - '-I-', those directories are searched for all '#include' - directives. - - In addition, '-I-' inhibits the use of the directory of the current - file directory as the first search directory for '#include "FILE"'. - This option has been deprecated. - -'-nostdinc' - Do not search the standard system directories for header files. - Only the directories you have specified with '-I' options (and the - directory of the current file, if appropriate) are searched. - -'-nostdinc++' - Do not search for header files in the C++-specific standard - directories, but do still search the other standard directories. - (This option is used when building the C++ library.) - -'-include FILE' - Process FILE as if '#include "file"' appeared as the first line of - the primary source file. However, the first directory searched for - FILE is the preprocessor's working directory _instead of_ the - directory containing the main source file. If not found there, it - is searched for in the remainder of the '#include "..."' search - chain as normal. - - If multiple '-include' options are given, the files are included in - the order they appear on the command line. - -'-imacros FILE' - Exactly like '-include', except that any output produced by - scanning FILE is thrown away. Macros it defines remain defined. - This allows you to acquire all the macros from a header without - also processing its declarations. - - All files specified by '-imacros' are processed before all files - specified by '-include'. - -'-idirafter DIR' - Search DIR for header files, but do it _after_ all directories - specified with '-I' and the standard system directories have been - exhausted. DIR is treated as a system include directory. If DIR - begins with '=', then the '=' will be replaced by the sysroot - prefix; see '--sysroot' and '-isysroot'. - -'-iprefix PREFIX' - Specify PREFIX as the prefix for subsequent '-iwithprefix' options. - If the prefix represents a directory, you should include the final - '/'. - -'-iwithprefix DIR' -'-iwithprefixbefore DIR' - Append DIR to the prefix specified previously with '-iprefix', and - add the resulting directory to the include search path. - '-iwithprefixbefore' puts it in the same place '-I' would; - '-iwithprefix' puts it where '-idirafter' would. - -'-isysroot DIR' - This option is like the '--sysroot' option, but applies only to - header files (except for Darwin targets, where it applies to both - header files and libraries). See the '--sysroot' option for more - information. - -'-imultilib DIR' - Use DIR as a subdirectory of the directory containing - target-specific C++ headers. - -'-isystem DIR' - Search DIR for header files, after all directories specified by - '-I' but before the standard system directories. Mark it as a - system directory, so that it gets the same special treatment as is - applied to the standard system directories. If DIR begins with - '=', then the '=' will be replaced by the sysroot prefix; see - '--sysroot' and '-isysroot'. - -'-iquote DIR' - Search DIR only for header files requested with '#include "FILE"'; - they are not searched for '#include <FILE>', before all directories - specified by '-I' and before the standard system directories. If - DIR begins with '=', then the '=' will be replaced by the sysroot - prefix; see '--sysroot' and '-isysroot'. - -'-fdirectives-only' - When preprocessing, handle directives, but do not expand macros. - - The option's behavior depends on the '-E' and '-fpreprocessed' - options. - - With '-E', preprocessing is limited to the handling of directives - such as '#define', '#ifdef', and '#error'. Other preprocessor - operations, such as macro expansion and trigraph conversion are not - performed. In addition, the '-dD' option is implicitly enabled. - - With '-fpreprocessed', predefinition of command line and most - builtin macros is disabled. Macros such as '__LINE__', which are - contextually dependent, are handled normally. This enables - compilation of files previously preprocessed with '-E - -fdirectives-only'. - - With both '-E' and '-fpreprocessed', the rules for '-fpreprocessed' - take precedence. This enables full preprocessing of files - previously preprocessed with '-E -fdirectives-only'. - -'-fdollars-in-identifiers' - Accept '$' in identifiers. - -'-fextended-identifiers' - Accept universal character names in identifiers. This option is - experimental; in a future version of GCC, it will be enabled by - default for C99 and C++. - -'-fno-canonical-system-headers' - When preprocessing, do not shorten system header paths with - canonicalization. - -'-fpreprocessed' - Indicate to the preprocessor that the input file has already been - preprocessed. This suppresses things like macro expansion, - trigraph conversion, escaped newline splicing, and processing of - most directives. The preprocessor still recognizes and removes - comments, so that you can pass a file preprocessed with '-C' to the - compiler without problems. In this mode the integrated - preprocessor is little more than a tokenizer for the front ends. - - '-fpreprocessed' is implicit if the input file has one of the - extensions '.i', '.ii' or '.mi'. These are the extensions that GCC - uses for preprocessed files created by '-save-temps'. - -'-ftabstop=WIDTH' - Set the distance between tab stops. This helps the preprocessor - report correct column numbers in warnings or errors, even if tabs - appear on the line. If the value is less than 1 or greater than - 100, the option is ignored. The default is 8. - -'-fdebug-cpp' - This option is only useful for debugging GCC. When used with '-E', - dumps debugging information about location maps. Every token in - the output is preceded by the dump of the map its location belongs - to. The dump of the map holding the location of a token would be: - {'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} - - When used without '-E', this option has no effect. - -'-ftrack-macro-expansion[=LEVEL]' - Track locations of tokens across macro expansions. This allows the - compiler to emit diagnostic about the current macro expansion stack - when a compilation error occurs in a macro expansion. Using this - option makes the preprocessor and the compiler consume more memory. - The LEVEL parameter can be used to choose the level of precision of - token location tracking thus decreasing the memory consumption if - necessary. Value '0' of LEVEL de-activates this option just as if - no '-ftrack-macro-expansion' was present on the command line. - Value '1' tracks tokens locations in a degraded mode for the sake - of minimal memory overhead. In this mode all tokens resulting from - the expansion of an argument of a function-like macro have the same - location. Value '2' tracks tokens locations completely. This - value is the most memory hungry. When this option is given no - argument, the default parameter value is '2'. - - Note that -ftrack-macro-expansion=2 is activated by default. - -'-fexec-charset=CHARSET' - Set the execution character set, used for string and character - constants. The default is UTF-8. CHARSET can be any encoding - supported by the system's 'iconv' library routine. - -'-fwide-exec-charset=CHARSET' - Set the wide execution character set, used for wide string and - character constants. The default is UTF-32 or UTF-16, whichever - corresponds to the width of 'wchar_t'. As with '-fexec-charset', - CHARSET can be any encoding supported by the system's 'iconv' - library routine; however, you will have problems with encodings - that do not fit exactly in 'wchar_t'. - -'-finput-charset=CHARSET' - Set the input character set, used for translation from the - character set of the input file to the source character set used by - GCC. If the locale does not specify, or GCC cannot get this - information from the locale, the default is UTF-8. This can be - overridden by either the locale or this command line option. - Currently the command line option takes precedence if there's a - conflict. CHARSET can be any encoding supported by the system's - 'iconv' library routine. - -'-fworking-directory' - Enable generation of linemarkers in the preprocessor output that - will let the compiler know the current working directory at the - time of preprocessing. When this option is enabled, the - preprocessor will emit, after the initial linemarker, a second - linemarker with the current working directory followed by two - slashes. GCC will use this directory, when it's present in the - preprocessed input, as the directory emitted as the current working - directory in some debugging information formats. This option is - implicitly enabled if debugging information is enabled, but this - can be inhibited with the negated form '-fno-working-directory'. - If the '-P' flag is present in the command line, this option has no - effect, since no '#line' directives are emitted whatsoever. - -'-fno-show-column' - Do not print column numbers in diagnostics. This may be necessary - if diagnostics are being scanned by a program that does not - understand the column numbers, such as 'dejagnu'. - -'-A PREDICATE=ANSWER' - Make an assertion with the predicate PREDICATE and answer ANSWER. - This form is preferred to the older form '-A PREDICATE(ANSWER)', - which is still supported, because it does not use shell special - characters. - -'-A -PREDICATE=ANSWER' - Cancel an assertion with the predicate PREDICATE and answer ANSWER. - -'-dCHARS' - CHARS is a sequence of one or more of the following characters, and - must not be preceded by a space. Other characters are interpreted - by the compiler proper, or reserved for future versions of GCC, and - so are silently ignored. If you specify characters whose behavior - conflicts, the result is undefined. - - 'M' - Instead of the normal output, generate a list of '#define' - directives for all the macros defined during the execution of - the preprocessor, including predefined macros. This gives you - a way of finding out what is predefined in your version of the - preprocessor. Assuming you have no file 'foo.h', the command - - touch foo.h; cpp -dM foo.h - - will show all the predefined macros. - - If you use '-dM' without the '-E' option, '-dM' is interpreted - as a synonym for '-fdump-rtl-mach'. *Note (gcc)Debugging - Options::. - - 'D' - Like 'M' except in two respects: it does _not_ include the - predefined macros, and it outputs _both_ the '#define' - directives and the result of preprocessing. Both kinds of - output go to the standard output file. - - 'N' - Like 'D', but emit only the macro names, not their expansions. - - 'I' - Output '#include' directives in addition to the result of - preprocessing. - - 'U' - Like 'D' except that only macros that are expanded, or whose - definedness is tested in preprocessor directives, are output; - the output is delayed until the use or test of the macro; and - '#undef' directives are also output for macros tested but - undefined at the time. - -'-P' - Inhibit generation of linemarkers in the output from the - preprocessor. This might be useful when running the preprocessor - on something that is not C code, and will be sent to a program - which might be confused by the linemarkers. - -'-C' - Do not discard comments. All comments are passed through to the - output file, except for comments in processed directives, which are - deleted along with the directive. - - You should be prepared for side effects when using '-C'; it causes - the preprocessor to treat comments as tokens in their own right. - For example, comments appearing at the start of what would be a - directive line have the effect of turning that line into an - ordinary source line, since the first token on the line is no - longer a '#'. - -'-CC' - Do not discard comments, including during macro expansion. This is - like '-C', except that comments contained within macros are also - passed through to the output file where the macro is expanded. - - In addition to the side-effects of the '-C' option, the '-CC' - option causes all C++-style comments inside a macro to be converted - to C-style comments. This is to prevent later use of that macro - from inadvertently commenting out the remainder of the source line. - - The '-CC' option is generally used to support lint comments. - -'-traditional-cpp' - Try to imitate the behavior of old-fashioned C preprocessors, as - opposed to ISO C preprocessors. - -'-trigraphs' - Process trigraph sequences. These are three-character sequences, - all starting with '??', that are defined by ISO C to stand for - single characters. For example, '??/' stands for '\', so ''??/n'' - is a character constant for a newline. By default, GCC ignores - trigraphs, but in standard-conforming modes it converts them. See - the '-std' and '-ansi' options. - - The nine trigraphs and their replacements are - - Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??- - Replacement: [ ] { } # \ ^ | ~ - -'-remap' - Enable special code to work around file systems which only permit - very short file names, such as MS-DOS. - -'--help' -'--target-help' - Print text describing all the command line options instead of - preprocessing anything. - -'-v' - Verbose mode. Print out GNU CPP's version number at the beginning - of execution, and report the final form of the include path. - -'-H' - Print the name of each header file used, in addition to other - normal activities. Each name is indented to show how deep in the - '#include' stack it is. Precompiled header files are also printed, - even if they are found to be invalid; an invalid precompiled header - file is printed with '...x' and a valid one with '...!' . - -'-version' -'--version' - Print out GNU CPP's version number. With one dash, proceed to - preprocess as normal. With two dashes, exit immediately. - - -File: gcc.info, Node: Assembler Options, Next: Link Options, Prev: Preprocessor Options, Up: Invoking GCC - -3.12 Passing Options to the Assembler -===================================== - -You can pass options to the assembler. - -'-Wa,OPTION' - Pass OPTION as an option to the assembler. If OPTION contains - commas, it is split into multiple options at the commas. - -'-Xassembler OPTION' - Pass OPTION as an option to the assembler. You can use this to - supply system-specific assembler options that GCC does not - recognize. - - If you want to pass an option that takes an argument, you must use - '-Xassembler' twice, once for the option and once for the argument. - - -File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC - -3.13 Options for Linking -======================== - -These options come into play when the compiler links object files into -an executable output file. They are meaningless if the compiler is not -doing a link step. - -'OBJECT-FILE-NAME' - A file name that does not end in a special recognized suffix is - considered to name an object file or library. (Object files are - distinguished from libraries by the linker according to the file - contents.) If linking is done, these object files are used as - input to the linker. - -'-c' -'-S' -'-E' - If any of these options is used, then the linker is not run, and - object file names should not be used as arguments. *Note Overall - Options::. - -'-lLIBRARY' -'-l LIBRARY' - Search the library named LIBRARY when linking. (The second - alternative with the library as a separate argument is only for - POSIX compliance and is not recommended.) - - It makes a difference where in the command you write this option; - the linker searches and processes libraries and object files in the - order they are specified. Thus, 'foo.o -lz bar.o' searches library - 'z' after file 'foo.o' but before 'bar.o'. If 'bar.o' refers to - functions in 'z', those functions may not be loaded. - - The linker searches a standard list of directories for the library, - which is actually a file named 'libLIBRARY.a'. The linker then - uses this file as if it had been specified precisely by name. - - The directories searched include several standard system - directories plus any that you specify with '-L'. - - Normally the files found this way are library files--archive files - whose members are object files. The linker handles an archive file - by scanning through it for members which define symbols that have - so far been referenced but not defined. But if the file that is - found is an ordinary object file, it is linked in the usual - fashion. The only difference between using an '-l' option and - specifying a file name is that '-l' surrounds LIBRARY with 'lib' - and '.a' and searches several directories. - -'-lobjc' - You need this special case of the '-l' option in order to link an - Objective-C or Objective-C++ program. - -'-nostartfiles' - Do not use the standard system startup files when linking. The - standard system libraries are used normally, unless '-nostdlib' or - '-nodefaultlibs' is used. - -'-nodefaultlibs' - Do not use the standard system libraries when linking. Only the - libraries you specify are passed to the linker, and options - specifying linkage of the system libraries, such as - '-static-libgcc' or '-shared-libgcc', are ignored. The standard - startup files are used normally, unless '-nostartfiles' is used. - - The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and - 'memmove'. These entries are usually resolved by entries in libc. - These entry points should be supplied through some other mechanism - when this option is specified. - -'-nostdlib' - Do not use the standard system startup files or libraries when - linking. No startup files and only the libraries you specify are - passed to the linker, and options specifying linkage of the system - libraries, such as '-static-libgcc' or '-shared-libgcc', are - ignored. - - The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and - 'memmove'. These entries are usually resolved by entries in libc. - These entry points should be supplied through some other mechanism - when this option is specified. - - One of the standard libraries bypassed by '-nostdlib' and - '-nodefaultlibs' is 'libgcc.a', a library of internal subroutines - which GCC uses to overcome shortcomings of particular machines, or - special needs for some languages. (*Note Interfacing to GCC - Output: (gccint)Interface, for more discussion of 'libgcc.a'.) In - most cases, you need 'libgcc.a' even when you want to avoid other - standard libraries. In other words, when you specify '-nostdlib' - or '-nodefaultlibs' you should usually specify '-lgcc' as well. - This ensures that you have no unresolved references to internal GCC - library subroutines. (An example of such an internal subroutine is - '__main', used to ensure C++ constructors are called; *note - 'collect2': (gccint)Collect2.) - -'-pie' - Produce a position independent executable on targets that support - it. For predictable results, you must also specify the same set of - options used for compilation ('-fpie', '-fPIE', or model - suboptions) when you specify this linker option. - -'-rdynamic' - Pass the flag '-export-dynamic' to the ELF linker, on targets that - support it. This instructs the linker to add all symbols, not only - used ones, to the dynamic symbol table. This option is needed for - some uses of 'dlopen' or to allow obtaining backtraces from within - a program. - -'-s' - Remove all symbol table and relocation information from the - executable. - -'-static' - On systems that support dynamic linking, this prevents linking with - the shared libraries. On other systems, this option has no effect. - -'-shared' - Produce a shared object which can then be linked with other objects - to form an executable. Not all systems support this option. For - predictable results, you must also specify the same set of options - used for compilation ('-fpic', '-fPIC', or model suboptions) when - you specify this linker option.(1) - -'-shared-libgcc' -'-static-libgcc' - On systems that provide 'libgcc' as a shared library, these options - force the use of either the shared or static version, respectively. - If no shared version of 'libgcc' was built when the compiler was - configured, these options have no effect. - - There are several situations in which an application should use the - shared 'libgcc' instead of the static version. The most common of - these is when the application wishes to throw and catch exceptions - across different shared libraries. In that case, each of the - libraries as well as the application itself should use the shared - 'libgcc'. - - Therefore, the G++ and GCJ drivers automatically add - '-shared-libgcc' whenever you build a shared library or a main - executable, because C++ and Java programs typically use exceptions, - so this is the right thing to do. - - If, instead, you use the GCC driver to create shared libraries, you - may find that they are not always linked with the shared 'libgcc'. - If GCC finds, at its configuration time, that you have a non-GNU - linker or a GNU linker that does not support option - '--eh-frame-hdr', it links the shared version of 'libgcc' into - shared libraries by default. Otherwise, it takes advantage of the - linker and optimizes away the linking with the shared version of - 'libgcc', linking with the static version of libgcc by default. - This allows exceptions to propagate through such shared libraries, - without incurring relocation costs at library load time. - - However, if a library or main executable is supposed to throw or - catch exceptions, you must link it using the G++ or GCJ driver, as - appropriate for the languages used in the program, or using the - option '-shared-libgcc', such that it is linked with the shared - 'libgcc'. - -'-static-libasan' - When the '-fsanitize=address' option is used to link a program, the - GCC driver automatically links against 'libasan'. If 'libasan' is - available as a shared library, and the '-static' option is not - used, then this links against the shared version of 'libasan'. The - '-static-libasan' option directs the GCC driver to link 'libasan' - statically, without necessarily linking other libraries statically. - -'-static-libtsan' - When the '-fsanitize=thread' option is used to link a program, the - GCC driver automatically links against 'libtsan'. If 'libtsan' is - available as a shared library, and the '-static' option is not - used, then this links against the shared version of 'libtsan'. The - '-static-libtsan' option directs the GCC driver to link 'libtsan' - statically, without necessarily linking other libraries statically. - -'-static-liblsan' - When the '-fsanitize=leak' option is used to link a program, the - GCC driver automatically links against 'liblsan'. If 'liblsan' is - available as a shared library, and the '-static' option is not - used, then this links against the shared version of 'liblsan'. The - '-static-liblsan' option directs the GCC driver to link 'liblsan' - statically, without necessarily linking other libraries statically. - -'-static-libubsan' - When the '-fsanitize=undefined' option is used to link a program, - the GCC driver automatically links against 'libubsan'. If - 'libubsan' is available as a shared library, and the '-static' - option is not used, then this links against the shared version of - 'libubsan'. The '-static-libubsan' option directs the GCC driver - to link 'libubsan' statically, without necessarily linking other - libraries statically. - -'-static-libstdc++' - When the 'g++' program is used to link a C++ program, it normally - automatically links against 'libstdc++'. If 'libstdc++' is - available as a shared library, and the '-static' option is not - used, then this links against the shared version of 'libstdc++'. - That is normally fine. However, it is sometimes useful to freeze - the version of 'libstdc++' used by the program without going all - the way to a fully static link. The '-static-libstdc++' option - directs the 'g++' driver to link 'libstdc++' statically, without - necessarily linking other libraries statically. - -'-symbolic' - Bind references to global symbols when building a shared object. - Warn about any unresolved references (unless overridden by the link - editor option '-Xlinker -z -Xlinker defs'). Only a few systems - support this option. - -'-T SCRIPT' - Use SCRIPT as the linker script. This option is supported by most - systems using the GNU linker. On some targets, such as bare-board - targets without an operating system, the '-T' option may be - required when linking to avoid references to undefined symbols. - -'-Xlinker OPTION' - Pass OPTION as an option to the linker. You can use this to supply - system-specific linker options that GCC does not recognize. - - If you want to pass an option that takes a separate argument, you - must use '-Xlinker' twice, once for the option and once for the - argument. For example, to pass '-assert definitions', you must - write '-Xlinker -assert -Xlinker definitions'. It does not work to - write '-Xlinker "-assert definitions"', because this passes the - entire string as a single argument, which is not what the linker - expects. - - When using the GNU linker, it is usually more convenient to pass - arguments to linker options using the 'OPTION=VALUE' syntax than as - separate arguments. For example, you can specify '-Xlinker - -Map=output.map' rather than '-Xlinker -Map -Xlinker output.map'. - Other linkers may not support this syntax for command-line options. - -'-Wl,OPTION' - Pass OPTION as an option to the linker. If OPTION contains commas, - it is split into multiple options at the commas. You can use this - syntax to pass an argument to the option. For example, - '-Wl,-Map,output.map' passes '-Map output.map' to the linker. When - using the GNU linker, you can also get the same effect with - '-Wl,-Map=output.map'. - -'-u SYMBOL' - Pretend the symbol SYMBOL is undefined, to force linking of library - modules to define it. You can use '-u' multiple times with - different symbols to force loading of additional library modules. - - ---------- Footnotes ---------- - - (1) On some systems, 'gcc -shared' needs to build supplementary stub -code for constructors to work. On multi-libbed systems, 'gcc -shared' -must select the correct support libraries to link against. Failing to -supply the correct flags may lead to subtle defects. Supplying them in -cases where they are not necessary is innocuous. - - -File: gcc.info, Node: Directory Options, Next: Spec Files, Prev: Link Options, Up: Invoking GCC - -3.14 Options for Directory Search -================================= - -These options specify directories to search for header files, for -libraries and for parts of the compiler: - -'-IDIR' - Add the directory DIR to the head of the list of directories to be - searched for header files. This can be used to override a system - header file, substituting your own version, since these directories - are searched before the system header file directories. However, - you should not use this option to add directories that contain - vendor-supplied system header files (use '-isystem' for that). If - you use more than one '-I' option, the directories are scanned in - left-to-right order; the standard system directories come after. - - If a standard system include directory, or a directory specified - with '-isystem', is also specified with '-I', the '-I' option is - ignored. The directory is still searched but as a system directory - at its normal position in the system include chain. This is to - ensure that GCC's procedure to fix buggy system headers and the - ordering for the 'include_next' directive are not inadvertently - changed. If you really need to change the search order for system - directories, use the '-nostdinc' and/or '-isystem' options. - -'-iplugindir=DIR' - Set the directory to search for plugins that are passed by - '-fplugin=NAME' instead of '-fplugin=PATH/NAME.so'. This option is - not meant to be used by the user, but only passed by the driver. - -'-iquoteDIR' - Add the directory DIR to the head of the list of directories to be - searched for header files only for the case of '#include "FILE"'; - they are not searched for '#include <FILE>', otherwise just like - '-I'. - -'-LDIR' - Add directory DIR to the list of directories to be searched for - '-l'. - -'-BPREFIX' - This option specifies where to find the executables, libraries, - include files, and data files of the compiler itself. - - The compiler driver program runs one or more of the subprograms - 'cpp', 'cc1', 'as' and 'ld'. It tries PREFIX as a prefix for each - program it tries to run, both with and without 'MACHINE/VERSION/' - (*note Target Options::). - - For each subprogram to be run, the compiler driver first tries the - '-B' prefix, if any. If that name is not found, or if '-B' is not - specified, the driver tries two standard prefixes, '/usr/lib/gcc/' - and '/usr/local/lib/gcc/'. If neither of those results in a file - name that is found, the unmodified program name is searched for - using the directories specified in your 'PATH' environment - variable. - - The compiler checks to see if the path provided by the '-B' refers - to a directory, and if necessary it adds a directory separator - character at the end of the path. - - '-B' prefixes that effectively specify directory names also apply - to libraries in the linker, because the compiler translates these - options into '-L' options for the linker. They also apply to - include files in the preprocessor, because the compiler translates - these options into '-isystem' options for the preprocessor. In - this case, the compiler appends 'include' to the prefix. - - The runtime support file 'libgcc.a' can also be searched for using - the '-B' prefix, if needed. If it is not found there, the two - standard prefixes above are tried, and that is all. The file is - left out of the link if it is not found by those means. - - Another way to specify a prefix much like the '-B' prefix is to use - the environment variable 'GCC_EXEC_PREFIX'. *Note Environment - Variables::. - - As a special kludge, if the path provided by '-B' is - '[dir/]stageN/', where N is a number in the range 0 to 9, then it - is replaced by '[dir/]include'. This is to help with - boot-strapping the compiler. - -'-specs=FILE' - Process FILE after the compiler reads in the standard 'specs' file, - in order to override the defaults which the 'gcc' driver program - uses when determining what switches to pass to 'cc1', 'cc1plus', - 'as', 'ld', etc. More than one '-specs=FILE' can be specified on - the command line, and they are processed in order, from left to - right. - -'--sysroot=DIR' - Use DIR as the logical root directory for headers and libraries. - For example, if the compiler normally searches for headers in - '/usr/include' and libraries in '/usr/lib', it instead searches - 'DIR/usr/include' and 'DIR/usr/lib'. - - If you use both this option and the '-isysroot' option, then the - '--sysroot' option applies to libraries, but the '-isysroot' option - applies to header files. - - The GNU linker (beginning with version 2.16) has the necessary - support for this option. If your linker does not support this - option, the header file aspect of '--sysroot' still works, but the - library aspect does not. - -'--no-sysroot-suffix' - For some targets, a suffix is added to the root directory specified - with '--sysroot', depending on the other options used, so that - headers may for example be found in 'DIR/SUFFIX/usr/include' - instead of 'DIR/usr/include'. This option disables the addition of - such a suffix. - -'-I-' - This option has been deprecated. Please use '-iquote' instead for - '-I' directories before the '-I-' and remove the '-I-'. Any - directories you specify with '-I' options before the '-I-' option - are searched only for the case of '#include "FILE"'; they are not - searched for '#include <FILE>'. - - If additional directories are specified with '-I' options after the - '-I-', these directories are searched for all '#include' - directives. (Ordinarily _all_ '-I' directories are used this way.) - - In addition, the '-I-' option inhibits the use of the current - directory (where the current input file came from) as the first - search directory for '#include "FILE"'. There is no way to - override this effect of '-I-'. With '-I.' you can specify - searching the directory that is current when the compiler is - invoked. That is not exactly the same as what the preprocessor - does by default, but it is often satisfactory. - - '-I-' does not inhibit the use of the standard system directories - for header files. Thus, '-I-' and '-nostdinc' are independent. - - -File: gcc.info, Node: Spec Files, Next: Target Options, Prev: Directory Options, Up: Invoking GCC - -3.15 Specifying subprocesses and the switches to pass to them -============================================================= - -'gcc' is a driver program. It performs its job by invoking a sequence -of other programs to do the work of compiling, assembling and linking. -GCC interprets its command-line parameters and uses these to deduce -which programs it should invoke, and which command-line options it ought -to place on their command lines. This behavior is controlled by "spec -strings". In most cases there is one spec string for each program that -GCC can invoke, but a few programs have multiple spec strings to control -their behavior. The spec strings built into GCC can be overridden by -using the '-specs=' command-line switch to specify a spec file. - - "Spec files" are plaintext files that are used to construct spec -strings. They consist of a sequence of directives separated by blank -lines. The type of directive is determined by the first non-whitespace -character on the line, which can be one of the following: - -'%COMMAND' - Issues a COMMAND to the spec file processor. The commands that can - appear here are: - - '%include <FILE>' - Search for FILE and insert its text at the current point in - the specs file. - - '%include_noerr <FILE>' - Just like '%include', but do not generate an error message if - the include file cannot be found. - - '%rename OLD_NAME NEW_NAME' - Rename the spec string OLD_NAME to NEW_NAME. - -'*[SPEC_NAME]:' - This tells the compiler to create, override or delete the named - spec string. All lines after this directive up to the next - directive or blank line are considered to be the text for the spec - string. If this results in an empty string then the spec is - deleted. (Or, if the spec did not exist, then nothing happens.) - Otherwise, if the spec does not currently exist a new spec is - created. If the spec does exist then its contents are overridden - by the text of this directive, unless the first character of that - text is the '+' character, in which case the text is appended to - the spec. - -'[SUFFIX]:' - Creates a new '[SUFFIX] spec' pair. All lines after this directive - and up to the next directive or blank line are considered to make - up the spec string for the indicated suffix. When the compiler - encounters an input file with the named suffix, it processes the - spec string in order to work out how to compile that file. For - example: - - .ZZ: - z-compile -input %i - - This says that any input file whose name ends in '.ZZ' should be - passed to the program 'z-compile', which should be invoked with the - command-line switch '-input' and with the result of performing the - '%i' substitution. (See below.) - - As an alternative to providing a spec string, the text following a - suffix directive can be one of the following: - - '@LANGUAGE' - This says that the suffix is an alias for a known LANGUAGE. - This is similar to using the '-x' command-line switch to GCC - to specify a language explicitly. For example: - - .ZZ: - @c++ - - Says that .ZZ files are, in fact, C++ source files. - - '#NAME' - This causes an error messages saying: - - NAME compiler not installed on this system. - - GCC already has an extensive list of suffixes built into it. This - directive adds an entry to the end of the list of suffixes, but - since the list is searched from the end backwards, it is - effectively possible to override earlier entries using this - technique. - - GCC has the following spec strings built into it. Spec files can -override these strings or create their own. Note that individual -targets can also add their own spec strings to this list. - - asm Options to pass to the assembler - asm_final Options to pass to the assembler post-processor - cpp Options to pass to the C preprocessor - cc1 Options to pass to the C compiler - cc1plus Options to pass to the C++ compiler - endfile Object files to include at the end of the link - link Options to pass to the linker - lib Libraries to include on the command line to the linker - libgcc Decides which GCC support library to pass to the linker - linker Sets the name of the linker - predefines Defines to be passed to the C preprocessor - signed_char Defines to pass to CPP to say whether char is signed - by default - startfile Object files to include at the start of the link - - Here is a small example of a spec file: - - %rename lib old_lib - - *lib: - --start-group -lgcc -lc -leval1 --end-group %(old_lib) - - This example renames the spec called 'lib' to 'old_lib' and then -overrides the previous definition of 'lib' with a new one. The new -definition adds in some extra command-line options before including the -text of the old definition. - - "Spec strings" are a list of command-line options to be passed to their -corresponding program. In addition, the spec strings can contain -'%'-prefixed sequences to substitute variable text or to conditionally -insert text into the command line. Using these constructs it is -possible to generate quite complex command lines. - - Here is a table of all defined '%'-sequences for spec strings. Note -that spaces are not generated automatically around the results of -expanding these sequences. Therefore you can concatenate them together -or combine them with constant text in a single argument. - -'%%' - Substitute one '%' into the program name or argument. - -'%i' - Substitute the name of the input file being processed. - -'%b' - Substitute the basename of the input file being processed. This is - the substring up to (and not including) the last period and not - including the directory. - -'%B' - This is the same as '%b', but include the file suffix (text after - the last period). - -'%d' - Marks the argument containing or following the '%d' as a temporary - file name, so that that file is deleted if GCC exits successfully. - Unlike '%g', this contributes no text to the argument. - -'%gSUFFIX' - Substitute a file name that has suffix SUFFIX and is chosen once - per compilation, and mark the argument in the same way as '%d'. To - reduce exposure to denial-of-service attacks, the file name is now - chosen in a way that is hard to predict even when previously chosen - file names are known. For example, '%g.s ... %g.o ... %g.s' might - turn into 'ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX matches the - regexp '[.A-Za-z]*' or the special string '%O', which is treated - exactly as if '%O' had been preprocessed. Previously, '%g' was - simply substituted with a file name chosen once per compilation, - without regard to any appended suffix (which was therefore treated - just like ordinary text), making such attacks more likely to - succeed. - -'%uSUFFIX' - Like '%g', but generates a new temporary file name each time it - appears instead of once per compilation. - -'%USUFFIX' - Substitutes the last file name generated with '%uSUFFIX', - generating a new one if there is no such last file name. In the - absence of any '%uSUFFIX', this is just like '%gSUFFIX', except - they don't share the same suffix _space_, so '%g.s ... %U.s ... - %g.s ... %U.s' involves the generation of two distinct file names, - one for each '%g.s' and another for each '%U.s'. Previously, '%U' - was simply substituted with a file name chosen for the previous - '%u', without regard to any appended suffix. - -'%jSUFFIX' - Substitutes the name of the 'HOST_BIT_BUCKET', if any, and if it is - writable, and if '-save-temps' is not used; otherwise, substitute - the name of a temporary file, just like '%u'. This temporary file - is not meant for communication between processes, but rather as a - junk disposal mechanism. - -'%|SUFFIX' -'%mSUFFIX' - Like '%g', except if '-pipe' is in effect. In that case '%|' - substitutes a single dash and '%m' substitutes nothing at all. - These are the two most common ways to instruct a program that it - should read from standard input or write to standard output. If - you need something more elaborate you can use an '%{pipe:'X'}' - construct: see for example 'f/lang-specs.h'. - -'%.SUFFIX' - Substitutes .SUFFIX for the suffixes of a matched switch's args - when it is subsequently output with '%*'. SUFFIX is terminated by - the next space or %. - -'%w' - Marks the argument containing or following the '%w' as the - designated output file of this compilation. This puts the argument - into the sequence of arguments that '%o' substitutes. - -'%o' - Substitutes the names of all the output files, with spaces - automatically placed around them. You should write spaces around - the '%o' as well or the results are undefined. '%o' is for use in - the specs for running the linker. Input files whose names have no - recognized suffix are not compiled at all, but they are included - among the output files, so they are linked. - -'%O' - Substitutes the suffix for object files. Note that this is handled - specially when it immediately follows '%g, %u, or %U', because of - the need for those to form complete file names. The handling is - such that '%O' is treated exactly as if it had already been - substituted, except that '%g, %u, and %U' do not currently support - additional SUFFIX characters following '%O' as they do following, - for example, '.o'. - -'%p' - Substitutes the standard macro predefinitions for the current - target machine. Use this when running 'cpp'. - -'%P' - Like '%p', but puts '__' before and after the name of each - predefined macro, except for macros that start with '__' or with - '_L', where L is an uppercase letter. This is for ISO C. - -'%I' - Substitute any of '-iprefix' (made from 'GCC_EXEC_PREFIX'), - '-isysroot' (made from 'TARGET_SYSTEM_ROOT'), '-isystem' (made from - 'COMPILER_PATH' and '-B' options) and '-imultilib' as necessary. - -'%s' - Current argument is the name of a library or startup file of some - sort. Search for that file in a standard list of directories and - substitute the full name found. The current working directory is - included in the list of directories scanned. - -'%T' - Current argument is the name of a linker script. Search for that - file in the current list of directories to scan for libraries. If - the file is located insert a '--script' option into the command - line followed by the full path name found. If the file is not - found then generate an error message. Note: the current working - directory is not searched. - -'%eSTR' - Print STR as an error message. STR is terminated by a newline. - Use this when inconsistent options are detected. - -'%(NAME)' - Substitute the contents of spec string NAME at this point. - -'%x{OPTION}' - Accumulate an option for '%X'. - -'%X' - Output the accumulated linker options specified by '-Wl' or a '%x' - spec string. - -'%Y' - Output the accumulated assembler options specified by '-Wa'. - -'%Z' - Output the accumulated preprocessor options specified by '-Wp'. - -'%a' - Process the 'asm' spec. This is used to compute the switches to be - passed to the assembler. - -'%A' - Process the 'asm_final' spec. This is a spec string for passing - switches to an assembler post-processor, if such a program is - needed. - -'%l' - Process the 'link' spec. This is the spec for computing the - command line passed to the linker. Typically it makes use of the - '%L %G %S %D and %E' sequences. - -'%D' - Dump out a '-L' option for each directory that GCC believes might - contain startup files. If the target supports multilibs then the - current multilib directory is prepended to each of these paths. - -'%L' - Process the 'lib' spec. This is a spec string for deciding which - libraries are included on the command line to the linker. - -'%G' - Process the 'libgcc' spec. This is a spec string for deciding - which GCC support library is included on the command line to the - linker. - -'%S' - Process the 'startfile' spec. This is a spec for deciding which - object files are the first ones passed to the linker. Typically - this might be a file named 'crt0.o'. - -'%E' - Process the 'endfile' spec. This is a spec string that specifies - the last object files that are passed to the linker. - -'%C' - Process the 'cpp' spec. This is used to construct the arguments to - be passed to the C preprocessor. - -'%1' - Process the 'cc1' spec. This is used to construct the options to - be passed to the actual C compiler ('cc1'). - -'%2' - Process the 'cc1plus' spec. This is used to construct the options - to be passed to the actual C++ compiler ('cc1plus'). - -'%*' - Substitute the variable part of a matched option. See below. Note - that each comma in the substituted string is replaced by a single - space. - -'%<S' - Remove all occurrences of '-S' from the command line. Note--this - command is position dependent. '%' commands in the spec string - before this one see '-S', '%' commands in the spec string after - this one do not. - -'%:FUNCTION(ARGS)' - Call the named function FUNCTION, passing it ARGS. ARGS is first - processed as a nested spec string, then split into an argument - vector in the usual fashion. The function returns a string which - is processed as if it had appeared literally as part of the current - spec. - - The following built-in spec functions are provided: - - 'getenv' - The 'getenv' spec function takes two arguments: an environment - variable name and a string. If the environment variable is - not defined, a fatal error is issued. Otherwise, the return - value is the value of the environment variable concatenated - with the string. For example, if 'TOPDIR' is defined as - '/path/to/top', then: - - %:getenv(TOPDIR /include) - - expands to '/path/to/top/include'. - - 'if-exists' - The 'if-exists' spec function takes one argument, an absolute - pathname to a file. If the file exists, 'if-exists' returns - the pathname. Here is a small example of its usage: - - *startfile: - crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s - - 'if-exists-else' - The 'if-exists-else' spec function is similar to the - 'if-exists' spec function, except that it takes two arguments. - The first argument is an absolute pathname to a file. If the - file exists, 'if-exists-else' returns the pathname. If it - does not exist, it returns the second argument. This way, - 'if-exists-else' can be used to select one file or another, - based on the existence of the first. Here is a small example - of its usage: - - *startfile: - crt0%O%s %:if-exists(crti%O%s) \ - %:if-exists-else(crtbeginT%O%s crtbegin%O%s) - - 'replace-outfile' - The 'replace-outfile' spec function takes two arguments. It - looks for the first argument in the outfiles array and - replaces it with the second argument. Here is a small example - of its usage: - - %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)} - - 'remove-outfile' - The 'remove-outfile' spec function takes one argument. It - looks for the first argument in the outfiles array and removes - it. Here is a small example its usage: - - %:remove-outfile(-lm) - - 'pass-through-libs' - The 'pass-through-libs' spec function takes any number of - arguments. It finds any '-l' options and any non-options - ending in '.a' (which it assumes are the names of linker input - library archive files) and returns a result containing all the - found arguments each prepended by '-plugin-opt=-pass-through=' - and joined by spaces. This list is intended to be passed to - the LTO linker plugin. - - %:pass-through-libs(%G %L %G) - - 'print-asm-header' - The 'print-asm-header' function takes no arguments and simply - prints a banner like: - - Assembler options - ================= - - Use "-Wa,OPTION" to pass "OPTION" to the assembler. - - It is used to separate compiler options from assembler options - in the '--target-help' output. - -'%{S}' - Substitutes the '-S' switch, if that switch is given to GCC. If - that switch is not specified, this substitutes nothing. Note that - the leading dash is omitted when specifying this option, and it is - automatically inserted if the substitution is performed. Thus the - spec string '%{foo}' matches the command-line option '-foo' and - outputs the command-line option '-foo'. - -'%W{S}' - Like %{'S'} but mark last argument supplied within as a file to be - deleted on failure. - -'%{S*}' - Substitutes all the switches specified to GCC whose names start - with '-S', but which also take an argument. This is used for - switches like '-o', '-D', '-I', etc. GCC considers '-o foo' as - being one switch whose name starts with 'o'. %{o*} substitutes - this text, including the space. Thus two arguments are generated. - -'%{S*&T*}' - Like %{'S'*}, but preserve order of 'S' and 'T' options (the order - of 'S' and 'T' in the spec is not significant). There can be any - number of ampersand-separated variables; for each the wild card is - optional. Useful for CPP as '%{D*&U*&A*}'. - -'%{S:X}' - Substitutes 'X', if the '-S' switch is given to GCC. - -'%{!S:X}' - Substitutes 'X', if the '-S' switch is _not_ given to GCC. - -'%{S*:X}' - Substitutes 'X' if one or more switches whose names start with '-S' - are specified to GCC. Normally 'X' is substituted only once, no - matter how many such switches appeared. However, if '%*' appears - somewhere in 'X', then 'X' is substituted once for each matching - switch, with the '%*' replaced by the part of that switch matching - the '*'. - - If '%*' appears as the last part of a spec sequence then a space - will be added after the end of the last substitution. If there is - more text in the sequence however then a space will not be - generated. This allows the '%*' substitution to be used as part of - a larger string. For example, a spec string like this: - - %{mcu=*:--script=%*/memory.ld} - - when matching an option like '-mcu=newchip' will produce: - - --script=newchip/memory.ld - -'%{.S:X}' - Substitutes 'X', if processing a file with suffix 'S'. - -'%{!.S:X}' - Substitutes 'X', if _not_ processing a file with suffix 'S'. - -'%{,S:X}' - Substitutes 'X', if processing a file for language 'S'. - -'%{!,S:X}' - Substitutes 'X', if not processing a file for language 'S'. - -'%{S|P:X}' - Substitutes 'X' if either '-S' or '-P' is given to GCC. This may - be combined with '!', '.', ',', and '*' sequences as well, although - they have a stronger binding than the '|'. If '%*' appears in 'X', - all of the alternatives must be starred, and only the first - matching alternative is substituted. - - For example, a spec string like this: - - %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle} - - outputs the following command-line options from the following input - command-line options: - - fred.c -foo -baz - jim.d -bar -boggle - -d fred.c -foo -baz -boggle - -d jim.d -bar -baz -boggle - -'%{S:X; T:Y; :D}' - - If 'S' is given to GCC, substitutes 'X'; else if 'T' is given to - GCC, substitutes 'Y'; else substitutes 'D'. There can be as many - clauses as you need. This may be combined with '.', ',', '!', '|', - and '*' as needed. - - The conditional text 'X' in a %{'S':'X'} or similar construct may -contain other nested '%' constructs or spaces, or even newlines. They -are processed as usual, as described above. Trailing white space in 'X' -is ignored. White space may also appear anywhere on the left side of -the colon in these constructs, except between '.' or '*' and the -corresponding word. - - The '-O', '-f', '-m', and '-W' switches are handled specifically in -these constructs. If another value of '-O' or the negated form of a -'-f', '-m', or '-W' switch is found later in the command line, the -earlier switch value is ignored, except with {'S'*} where 'S' is just -one letter, which passes all matching options. - - The character '|' at the beginning of the predicate text is used to -indicate that a command should be piped to the following command, but -only if '-pipe' is specified. - - It is built into GCC which switches take arguments and which do not. -(You might think it would be useful to generalize this to allow each -compiler's spec to say which switches take arguments. But this cannot -be done in a consistent fashion. GCC cannot even decide which input -files have been specified without knowing which switches take arguments, -and it must know which input files to compile in order to tell which -compilers to run). - - GCC also knows implicitly that arguments starting in '-l' are to be -treated as compiler output files, and passed to the linker in their -proper position among the other output files. - - -File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Spec Files, Up: Invoking GCC - -3.16 Specifying Target Machine and Compiler Version -=================================================== - -The usual way to run GCC is to run the executable called 'gcc', or -'MACHINE-gcc' when cross-compiling, or 'MACHINE-gcc-VERSION' to run a -version other than the one that was installed last. - - -File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC - -3.17 Hardware Models and Configurations -======================================= - -Each target machine types can have its own special options, starting -with '-m', to choose among various hardware models or -configurations--for example, 68010 vs 68020, floating coprocessor or -none. A single installed version of the compiler can compile for any -model or configuration, according to the options specified. - - Some configurations of the compiler also support additional special -options, usually for compatibility with other compilers on the same -platform. - -* Menu: - -* AArch64 Options:: -* Adapteva Epiphany Options:: -* ARC Options:: -* ARM Options:: -* AVR Options:: -* Blackfin Options:: -* C6X Options:: -* CRIS Options:: -* CR16 Options:: -* Darwin Options:: -* DEC Alpha Options:: -* FR30 Options:: -* FRV Options:: -* GNU/Linux Options:: -* H8/300 Options:: -* HPPA Options:: -* i386 and x86-64 Options:: -* i386 and x86-64 Windows Options:: -* IA-64 Options:: -* LM32 Options:: -* M32C Options:: -* M32R/D Options:: -* M680x0 Options:: -* MCore Options:: -* MeP Options:: -* MicroBlaze Options:: -* MIPS Options:: -* MMIX Options:: -* MN10300 Options:: -* Moxie Options:: -* MSP430 Options:: -* NDS32 Options:: -* Nios II Options:: -* PDP-11 Options:: -* picoChip Options:: -* PowerPC Options:: -* RL78 Options:: -* RS/6000 and PowerPC Options:: -* RX Options:: -* S/390 and zSeries Options:: -* Score Options:: -* SH Options:: -* Solaris 2 Options:: -* SPARC Options:: -* SPU Options:: -* System V Options:: -* TILE-Gx Options:: -* TILEPro Options:: -* V850 Options:: -* VAX Options:: -* VMS Options:: -* VxWorks Options:: -* x86-64 Options:: -* Xstormy16 Options:: -* Xtensa Options:: -* zSeries Options:: - - -File: gcc.info, Node: AArch64 Options, Next: Adapteva Epiphany Options, Up: Submodel Options - -3.17.1 AArch64 Options ----------------------- - -These options are defined for AArch64 implementations: - -'-mabi=NAME' - Generate code for the specified data model. Permissible values are - 'ilp32' for SysV-like data model where int, long int and pointer - are 32-bit, and 'lp64' for SysV-like data model where int is - 32-bit, but long int and pointer are 64-bit. - - The default depends on the specific target configuration. Note - that the LP64 and ILP32 ABIs are not link-compatible; you must - compile your entire program with the same ABI, and link with a - compatible set of libraries. - -'-mbig-endian' - Generate big-endian code. This is the default when GCC is - configured for an 'aarch64_be-*-*' target. - -'-mgeneral-regs-only' - Generate code which uses only the general registers. - -'-mlittle-endian' - Generate little-endian code. This is the default when GCC is - configured for an 'aarch64-*-*' but not an 'aarch64_be-*-*' target. - -'-mcmodel=tiny' - Generate code for the tiny code model. The program and its - statically defined symbols must be within 1GB of each other. - Pointers are 64 bits. Programs can be statically or dynamically - linked. This model is not fully implemented and mostly treated as - 'small'. - -'-mcmodel=small' - Generate code for the small code model. The program and its - statically defined symbols must be within 4GB of each other. - Pointers are 64 bits. Programs can be statically or dynamically - linked. This is the default code model. - -'-mcmodel=large' - Generate code for the large code model. This makes no assumptions - about addresses and sizes of sections. Pointers are 64 bits. - Programs can be statically linked only. - -'-mstrict-align' - Do not assume that unaligned memory references will be handled by - the system. - -'-momit-leaf-frame-pointer' -'-mno-omit-leaf-frame-pointer' - Omit or keep the frame pointer in leaf functions. The former - behaviour is the default. - -'-mtls-dialect=desc' - Use TLS descriptors as the thread-local storage mechanism for - dynamic accesses of TLS variables. This is the default. - -'-mtls-dialect=traditional' - Use traditional TLS as the thread-local storage mechanism for - dynamic accesses of TLS variables. - -'-march=NAME' - Specify the name of the target architecture, optionally suffixed by - one or more feature modifiers. This option has the form - '-march=ARCH{+[no]FEATURE}*', where the only permissible value for - ARCH is 'armv8-a'. The permissible values for FEATURE are - documented in the sub-section below. - - Where conflicting feature modifiers are specified, the right-most - feature is used. - - GCC uses this name to determine what kind of instructions it can - emit when generating assembly code. - - Where '-march' is specified without either of '-mtune' or '-mcpu' - also being specified, the code will be tuned to perform well across - a range of target processors implementing the target architecture. - -'-mtune=NAME' - Specify the name of the target processor for which GCC should tune - the performance of the code. Permissible values for this option - are: 'generic', 'cortex-a53', 'cortex-a57'. - - Additionally, this option can specify that GCC should tune the - performance of the code for a big.LITTLE system. The only - permissible value is 'cortex-a57.cortex-a53'. - - Where none of '-mtune=', '-mcpu=' or '-march=' are specified, the - code will be tuned to perform well across a range of target - processors. - - This option cannot be suffixed by feature modifiers. - -'-mcpu=NAME' - Specify the name of the target processor, optionally suffixed by - one or more feature modifiers. This option has the form - '-mcpu=CPU{+[no]FEATURE}*', where the permissible values for CPU - are the same as those available for '-mtune'. - - The permissible values for FEATURE are documented in the - sub-section below. - - Where conflicting feature modifiers are specified, the right-most - feature is used. - - GCC uses this name to determine what kind of instructions it can - emit when generating assembly code (as if by '-march') and to - determine the target processor for which to tune for performance - (as if by '-mtune'). Where this option is used in conjunction with - '-march' or '-mtune', those options take precedence over the - appropriate part of this option. - -3.17.1.1 '-march' and '-mcpu' feature modifiers -............................................... - -Feature modifiers used with '-march' and '-mcpu' can be one the -following: - -'crc' - Enable CRC extension. -'crypto' - Enable Crypto extension. This implies Advanced SIMD is enabled. -'fp' - Enable floating-point instructions. -'simd' - Enable Advanced SIMD instructions. This implies floating-point - instructions are enabled. This is the default for all current - possible values for options '-march' and '-mcpu='. - - -File: gcc.info, Node: Adapteva Epiphany Options, Next: ARC Options, Prev: AArch64 Options, Up: Submodel Options - -3.17.2 Adapteva Epiphany Options --------------------------------- - -These '-m' options are defined for Adapteva Epiphany: - -'-mhalf-reg-file' - Don't allocate any register in the range 'r32'...'r63'. That - allows code to run on hardware variants that lack these registers. - -'-mprefer-short-insn-regs' - Preferrentially allocate registers that allow short instruction - generation. This can result in increased instruction count, so - this may either reduce or increase overall code size. - -'-mbranch-cost=NUM' - Set the cost of branches to roughly NUM "simple" instructions. - This cost is only a heuristic and is not guaranteed to produce - consistent results across releases. - -'-mcmove' - Enable the generation of conditional moves. - -'-mnops=NUM' - Emit NUM NOPs before every other generated instruction. - -'-mno-soft-cmpsf' - For single-precision floating-point comparisons, emit an 'fsub' - instruction and test the flags. This is faster than a software - comparison, but can get incorrect results in the presence of NaNs, - or when two different small numbers are compared such that their - difference is calculated as zero. The default is '-msoft-cmpsf', - which uses slower, but IEEE-compliant, software comparisons. - -'-mstack-offset=NUM' - Set the offset between the top of the stack and the stack pointer. - E.g., a value of 8 means that the eight bytes in the range - 'sp+0...sp+7' can be used by leaf functions without stack - allocation. Values other than '8' or '16' are untested and - unlikely to work. Note also that this option changes the ABI; - compiling a program with a different stack offset than the - libraries have been compiled with generally does not work. This - option can be useful if you want to evaluate if a different stack - offset would give you better code, but to actually use a different - stack offset to build working programs, it is recommended to - configure the toolchain with the appropriate - '--with-stack-offset=NUM' option. - -'-mno-round-nearest' - Make the scheduler assume that the rounding mode has been set to - truncating. The default is '-mround-nearest'. - -'-mlong-calls' - If not otherwise specified by an attribute, assume all calls might - be beyond the offset range of the 'b' / 'bl' instructions, and - therefore load the function address into a register before - performing a (otherwise direct) call. This is the default. - -'-mshort-calls' - If not otherwise specified by an attribute, assume all direct calls - are in the range of the 'b' / 'bl' instructions, so use these - instructions for direct calls. The default is '-mlong-calls'. - -'-msmall16' - Assume addresses can be loaded as 16-bit unsigned values. This - does not apply to function addresses for which '-mlong-calls' - semantics are in effect. - -'-mfp-mode=MODE' - Set the prevailing mode of the floating-point unit. This - determines the floating-point mode that is provided and expected at - function call and return time. Making this mode match the mode you - predominantly need at function start can make your programs smaller - and faster by avoiding unnecessary mode switches. - - MODE can be set to one the following values: - - 'caller' - Any mode at function entry is valid, and retained or restored - when the function returns, and when it calls other functions. - This mode is useful for compiling libraries or other - compilation units you might want to incorporate into different - programs with different prevailing FPU modes, and the - convenience of being able to use a single object file - outweighs the size and speed overhead for any extra mode - switching that might be needed, compared with what would be - needed with a more specific choice of prevailing FPU mode. - - 'truncate' - This is the mode used for floating-point calculations with - truncating (i.e. round towards zero) rounding mode. That - includes conversion from floating point to integer. - - 'round-nearest' - This is the mode used for floating-point calculations with - round-to-nearest-or-even rounding mode. - - 'int' - This is the mode used to perform integer calculations in the - FPU, e.g. integer multiply, or integer - multiply-and-accumulate. - - The default is '-mfp-mode=caller' - -'-mnosplit-lohi' -'-mno-postinc' -'-mno-postmodify' - Code generation tweaks that disable, respectively, splitting of - 32-bit loads, generation of post-increment addresses, and - generation of post-modify addresses. The defaults are - 'msplit-lohi', '-mpost-inc', and '-mpost-modify'. - -'-mnovect-double' - Change the preferred SIMD mode to SImode. The default is - '-mvect-double', which uses DImode as preferred SIMD mode. - -'-max-vect-align=NUM' - The maximum alignment for SIMD vector mode types. NUM may be 4 or - 8. The default is 8. Note that this is an ABI change, even though - many library function interfaces are unaffected if they don't use - SIMD vector modes in places that affect size and/or alignment of - relevant types. - -'-msplit-vecmove-early' - Split vector moves into single word moves before reload. In theory - this can give better register allocation, but so far the reverse - seems to be generally the case. - -'-m1reg-REG' - Specify a register to hold the constant -1, which makes loading - small negative constants and certain bitmasks faster. Allowable - values for REG are 'r43' and 'r63', which specify use of that - register as a fixed register, and 'none', which means that no - register is used for this purpose. The default is '-m1reg-none'. - - -File: gcc.info, Node: ARC Options, Next: ARM Options, Prev: Adapteva Epiphany Options, Up: Submodel Options - -3.17.3 ARC Options ------------------- - -The following options control the architecture variant for which code is -being compiled: - -'-mbarrel-shifter' - Generate instructions supported by barrel shifter. This is the - default unless '-mcpu=ARC601' is in effect. - -'-mcpu=CPU' - Set architecture type, register usage, and instruction scheduling - parameters for CPU. There are also shortcut alias options - available for backward compatibility and convenience. Supported - values for CPU are - - 'ARC600' - Compile for ARC600. Aliases: '-mA6', '-mARC600'. - - 'ARC601' - Compile for ARC601. Alias: '-mARC601'. - - 'ARC700' - Compile for ARC700. Aliases: '-mA7', '-mARC700'. This is the - default when configured with '--with-cpu=arc700'. - -'-mdpfp' -'-mdpfp-compact' - FPX: Generate Double Precision FPX instructions, tuned for the - compact implementation. - -'-mdpfp-fast' - FPX: Generate Double Precision FPX instructions, tuned for the fast - implementation. - -'-mno-dpfp-lrsr' - Disable LR and SR instructions from using FPX extension aux - registers. - -'-mea' - Generate Extended arithmetic instructions. Currently only 'divaw', - 'adds', 'subs', and 'sat16' are supported. This is always enabled - for '-mcpu=ARC700'. - -'-mno-mpy' - Do not generate mpy instructions for ARC700. - -'-mmul32x16' - Generate 32x16 bit multiply and mac instructions. - -'-mmul64' - Generate mul64 and mulu64 instructions. Only valid for - '-mcpu=ARC600'. - -'-mnorm' - Generate norm instruction. This is the default if '-mcpu=ARC700' - is in effect. - -'-mspfp' -'-mspfp-compact' - FPX: Generate Single Precision FPX instructions, tuned for the - compact implementation. - -'-mspfp-fast' - FPX: Generate Single Precision FPX instructions, tuned for the fast - implementation. - -'-msimd' - Enable generation of ARC SIMD instructions via target-specific - builtins. Only valid for '-mcpu=ARC700'. - -'-msoft-float' - This option ignored; it is provided for compatibility purposes - only. Software floating point code is emitted by default, and this - default can overridden by FPX options; 'mspfp', 'mspfp-compact', or - 'mspfp-fast' for single precision, and 'mdpfp', 'mdpfp-compact', or - 'mdpfp-fast' for double precision. - -'-mswap' - Generate swap instructions. - - The following options are passed through to the assembler, and also -define preprocessor macro symbols. - -'-mdsp-packa' - Passed down to the assembler to enable the DSP Pack A extensions. - Also sets the preprocessor symbol '__Xdsp_packa'. - -'-mdvbf' - Passed down to the assembler to enable the dual viterbi butterfly - extension. Also sets the preprocessor symbol '__Xdvbf'. - -'-mlock' - Passed down to the assembler to enable the Locked Load/Store - Conditional extension. Also sets the preprocessor symbol - '__Xlock'. - -'-mmac-d16' - Passed down to the assembler. Also sets the preprocessor symbol - '__Xxmac_d16'. - -'-mmac-24' - Passed down to the assembler. Also sets the preprocessor symbol - '__Xxmac_24'. - -'-mrtsc' - Passed down to the assembler to enable the 64-bit Time-Stamp - Counter extension instruction. Also sets the preprocessor symbol - '__Xrtsc'. - -'-mswape' - Passed down to the assembler to enable the swap byte ordering - extension instruction. Also sets the preprocessor symbol - '__Xswape'. - -'-mtelephony' - Passed down to the assembler to enable dual and single operand - instructions for telephony. Also sets the preprocessor symbol - '__Xtelephony'. - -'-mxy' - Passed down to the assembler to enable the XY Memory extension. - Also sets the preprocessor symbol '__Xxy'. - - The following options control how the assembly code is annotated: - -'-misize' - Annotate assembler instructions with estimated addresses. - -'-mannotate-align' - Explain what alignment considerations lead to the decision to make - an instruction short or long. - - The following options are passed through to the linker: - -'-marclinux' - Passed through to the linker, to specify use of the 'arclinux' - emulation. This option is enabled by default in tool chains built - for 'arc-linux-uclibc' and 'arceb-linux-uclibc' targets when - profiling is not requested. - -'-marclinux_prof' - Passed through to the linker, to specify use of the 'arclinux_prof' - emulation. This option is enabled by default in tool chains built - for 'arc-linux-uclibc' and 'arceb-linux-uclibc' targets when - profiling is requested. - - The following options control the semantics of generated code: - -'-mepilogue-cfi' - Enable generation of call frame information for epilogues. - -'-mno-epilogue-cfi' - Disable generation of call frame information for epilogues. - -'-mlong-calls' - Generate call insns as register indirect calls, thus providing - access to the full 32-bit address range. - -'-mmedium-calls' - Don't use less than 25 bit addressing range for calls, which is the - offset available for an unconditional branch-and-link instruction. - Conditional execution of function calls is suppressed, to allow use - of the 25-bit range, rather than the 21-bit range with conditional - branch-and-link. This is the default for tool chains built for 'arc-linux-uclibc' - and 'arceb-linux-uclibc' targets. - -'-mno-sdata' - Do not generate sdata references. This is the default for tool - chains built for 'arc-linux-uclibc' and 'arceb-linux-uclibc' - targets. - -'-mucb-mcount' - Instrument with mcount calls as used in UCB code. I.e. do the - counting in the callee, not the caller. By default ARC - instrumentation counts in the caller. - -'-mvolatile-cache' - Use ordinarily cached memory accesses for volatile references. - This is the default. - -'-mno-volatile-cache' - Enable cache bypass for volatile references. - - The following options fine tune code generation: -'-malign-call' - Do alignment optimizations for call instructions. - -'-mauto-modify-reg' - Enable the use of pre/post modify with register displacement. - -'-mbbit-peephole' - Enable bbit peephole2. - -'-mno-brcc' - This option disables a target-specific pass in 'arc_reorg' to - generate 'BRcc' instructions. It has no effect on 'BRcc' - generation driven by the combiner pass. - -'-mcase-vector-pcrel' - Use pc-relative switch case tables - this enables case table - shortening. This is the default for '-Os'. - -'-mcompact-casesi' - Enable compact casesi pattern. This is the default for '-Os'. - -'-mno-cond-exec' - Disable ARCompact specific pass to generate conditional execution - instructions. Due to delay slot scheduling and interactions - between operand numbers, literal sizes, instruction lengths, and - the support for conditional execution, the target-independent pass - to generate conditional execution is often lacking, so the ARC port - has kept a special pass around that tries to find more conditional - execution generating opportunities after register allocation, - branch shortening, and delay slot scheduling have been done. This - pass generally, but not always, improves performance and code size, - at the cost of extra compilation time, which is why there is an - option to switch it off. If you have a problem with call - instructions exceeding their allowable offset range because they - are conditionalized, you should consider using '-mmedium-calls' - instead. - -'-mearly-cbranchsi' - Enable pre-reload use of the cbranchsi pattern. - -'-mexpand-adddi' - Expand 'adddi3' and 'subdi3' at rtl generation time into 'add.f', - 'adc' etc. - -'-mindexed-loads' - Enable the use of indexed loads. This can be problematic because - some optimizers will then assume the that indexed stores exist, - which is not the case. - -'-mlra' - Enable Local Register Allocation. This is still experimental for - ARC, so by default the compiler uses standard reload (i.e. - '-mno-lra'). - -'-mlra-priority-none' - Don't indicate any priority for target registers. - -'-mlra-priority-compact' - Indicate target register priority for r0..r3 / r12..r15. - -'-mlra-priority-noncompact' - Reduce target regsiter priority for r0..r3 / r12..r15. - -'-mno-millicode' - When optimizing for size (using '-Os'), prologues and epilogues - that have to save or restore a large number of registers are often - shortened by using call to a special function in libgcc; this is - referred to as a _millicode_ call. As these calls can pose - performance issues, and/or cause linking issues when linking in a - nonstandard way, this option is provided to turn off millicode call - generation. - -'-mmixed-code' - Tweak register allocation to help 16-bit instruction generation. - This generally has the effect of decreasing the average instruction - size while increasing the instruction count. - -'-mq-class' - Enable 'q' instruction alternatives. This is the default for - '-Os'. - -'-mRcq' - Enable Rcq constraint handling - most short code generation depends - on this. This is the default. - -'-mRcw' - Enable Rcw constraint handling - ccfsm condexec mostly depends on - this. This is the default. - -'-msize-level=LEVEL' - Fine-tune size optimization with regards to instruction lengths and - alignment. The recognized values for LEVEL are: - '0' - No size optimization. This level is deprecated and treated - like '1'. - - '1' - Short instructions are used opportunistically. - - '2' - In addition, alignment of loops and of code after barriers are - dropped. - - '3' - In addition, optional data alignment is dropped, and the - option 'Os' is enabled. - - This defaults to '3' when '-Os' is in effect. Otherwise, the - behavior when this is not set is equivalent to level '1'. - -'-mtune=CPU' - Set instruction scheduling parameters for CPU, overriding any - implied by '-mcpu='. - - Supported values for CPU are - - 'ARC600' - Tune for ARC600 cpu. - - 'ARC601' - Tune for ARC601 cpu. - - 'ARC700' - Tune for ARC700 cpu with standard multiplier block. - - 'ARC700-xmac' - Tune for ARC700 cpu with XMAC block. - - 'ARC725D' - Tune for ARC725D cpu. - - 'ARC750D' - Tune for ARC750D cpu. - -'-mmultcost=NUM' - Cost to assume for a multiply instruction, with '4' being equal to - a normal instruction. - -'-munalign-prob-threshold=PROBABILITY' - Set probability threshold for unaligning branches. When tuning for - 'ARC700' and optimizing for speed, branches without filled delay - slot are preferably emitted unaligned and long, unless profiling - indicates that the probability for the branch to be taken is below - PROBABILITY. *Note Cross-profiling::. The default is - (REG_BR_PROB_BASE/2), i.e. 5000. - - The following options are maintained for backward compatibility, but -are now deprecated and will be removed in a future release: - -'-margonaut' - Obsolete FPX. - -'-mbig-endian' -'-EB' - Compile code for big endian targets. Use of these options is now - deprecated. Users wanting big-endian code, should use the 'arceb-elf32' - and 'arceb-linux-uclibc' targets when building the tool chain, for - which big-endian is the default. - -'-mlittle-endian' -'-EL' - Compile code for little endian targets. Use of these options is - now deprecated. Users wanting little-endian code should use the 'arc-elf32' - and 'arc-linux-uclibc' targets when building the tool chain, for - which little-endian is the default. - -'-mbarrel_shifter' - Replaced by '-mbarrel-shifter' - -'-mdpfp_compact' - Replaced by '-mdpfp-compact' - -'-mdpfp_fast' - Replaced by '-mdpfp-fast' - -'-mdsp_packa' - Replaced by '-mdsp-packa' - -'-mEA' - Replaced by '-mea' - -'-mmac_24' - Replaced by '-mmac-24' - -'-mmac_d16' - Replaced by '-mmac-d16' - -'-mspfp_compact' - Replaced by '-mspfp-compact' - -'-mspfp_fast' - Replaced by '-mspfp-fast' - -'-mtune=CPU' - Values 'arc600', 'arc601', 'arc700' and 'arc700-xmac' for CPU are - replaced by 'ARC600', 'ARC601', 'ARC700' and 'ARC700-xmac' - respectively - -'-multcost=NUM' - Replaced by '-mmultcost'. - - -File: gcc.info, Node: ARM Options, Next: AVR Options, Prev: ARC Options, Up: Submodel Options - -3.17.4 ARM Options ------------------- - -These '-m' options are defined for Advanced RISC Machines (ARM) -architectures: - -'-mabi=NAME' - Generate code for the specified ABI. Permissible values are: - 'apcs-gnu', 'atpcs', 'aapcs', 'aapcs-linux' and 'iwmmxt'. - -'-mapcs-frame' - Generate a stack frame that is compliant with the ARM Procedure - Call Standard for all functions, even if this is not strictly - necessary for correct execution of the code. Specifying - '-fomit-frame-pointer' with this option causes the stack frames not - to be generated for leaf functions. The default is - '-mno-apcs-frame'. - -'-mapcs' - This is a synonym for '-mapcs-frame'. - -'-mthumb-interwork' - Generate code that supports calling between the ARM and Thumb - instruction sets. Without this option, on pre-v5 architectures, - the two instruction sets cannot be reliably used inside one - program. The default is '-mno-thumb-interwork', since slightly - larger code is generated when '-mthumb-interwork' is specified. In - AAPCS configurations this option is meaningless. - -'-mno-sched-prolog' - Prevent the reordering of instructions in the function prologue, or - the merging of those instruction with the instructions in the - function's body. This means that all functions start with a - recognizable set of instructions (or in fact one of a choice from a - small set of different function prologues), and this information - can be used to locate the start of functions inside an executable - piece of code. The default is '-msched-prolog'. - -'-mfloat-abi=NAME' - Specifies which floating-point ABI to use. Permissible values are: - 'soft', 'softfp' and 'hard'. - - Specifying 'soft' causes GCC to generate output containing library - calls for floating-point operations. 'softfp' allows the - generation of code using hardware floating-point instructions, but - still uses the soft-float calling conventions. 'hard' allows - generation of floating-point instructions and uses FPU-specific - calling conventions. - - The default depends on the specific target configuration. Note - that the hard-float and soft-float ABIs are not link-compatible; - you must compile your entire program with the same ABI, and link - with a compatible set of libraries. - -'-mlittle-endian' - Generate code for a processor running in little-endian mode. This - is the default for all standard configurations. - -'-mbig-endian' - Generate code for a processor running in big-endian mode; the - default is to compile code for a little-endian processor. - -'-mwords-little-endian' - This option only applies when generating code for big-endian - processors. Generate code for a little-endian word order but a - big-endian byte order. That is, a byte order of the form - '32107654'. Note: this option should only be used if you require - compatibility with code for big-endian ARM processors generated by - versions of the compiler prior to 2.8. This option is now - deprecated. - -'-march=NAME' - This specifies the name of the target ARM architecture. GCC uses - this name to determine what kind of instructions it can emit when - generating assembly code. This option can be used in conjunction - with or instead of the '-mcpu=' option. Permissible names are: - 'armv2', 'armv2a', 'armv3', 'armv3m', 'armv4', 'armv4t', 'armv5', - 'armv5t', 'armv5e', 'armv5te', 'armv6', 'armv6j', 'armv6t2', - 'armv6z', 'armv6zk', 'armv6-m', 'armv7', 'armv7-a', 'armv7-r', - 'armv7-m', 'armv7e-m', 'armv7ve', 'armv8-a', 'armv8-a+crc', - 'iwmmxt', 'iwmmxt2', 'ep9312'. - - '-march=armv7ve' is the armv7-a architecture with virtualization - extensions. - - '-march=armv8-a+crc' enables code generation for the ARMv8-A - architecture together with the optional CRC32 extensions. - - '-march=native' causes the compiler to auto-detect the architecture - of the build computer. At present, this feature is only supported - on Linux, and not all architectures are recognized. If the - auto-detect is unsuccessful the option has no effect. - -'-mtune=NAME' - This option specifies the name of the target ARM processor for - which GCC should tune the performance of the code. For some ARM - implementations better performance can be obtained by using this - option. Permissible names are: 'arm2', 'arm250', 'arm3', 'arm6', - 'arm60', 'arm600', 'arm610', 'arm620', 'arm7', 'arm7m', 'arm7d', - 'arm7dm', 'arm7di', 'arm7dmi', 'arm70', 'arm700', 'arm700i', - 'arm710', 'arm710c', 'arm7100', 'arm720', 'arm7500', 'arm7500fe', - 'arm7tdmi', 'arm7tdmi-s', 'arm710t', 'arm720t', 'arm740t', - 'strongarm', 'strongarm110', 'strongarm1100', 'strongarm1110', - 'arm8', 'arm810', 'arm9', 'arm9e', 'arm920', 'arm920t', 'arm922t', - 'arm946e-s', 'arm966e-s', 'arm968e-s', 'arm926ej-s', 'arm940t', - 'arm9tdmi', 'arm10tdmi', 'arm1020t', 'arm1026ej-s', 'arm10e', - 'arm1020e', 'arm1022e', 'arm1136j-s', 'arm1136jf-s', 'mpcore', - 'mpcorenovfp', 'arm1156t2-s', 'arm1156t2f-s', 'arm1176jz-s', - 'arm1176jzf-s', 'cortex-a5', 'cortex-a7', 'cortex-a8', 'cortex-a9', - 'cortex-a12', 'cortex-a15', 'cortex-a53', 'cortex-a57', - 'cortex-r4', 'cortex-r4f', 'cortex-r5', 'cortex-r7', 'cortex-m4', - 'cortex-m3', 'cortex-m1', 'cortex-m0', 'cortex-m0plus', - 'marvell-pj4', 'xscale', 'iwmmxt', 'iwmmxt2', 'ep9312', 'fa526', - 'fa626', 'fa606te', 'fa626te', 'fmp626', 'fa726te'. - - Additionally, this option can specify that GCC should tune the - performance of the code for a big.LITTLE system. Permissible names - are: 'cortex-a15.cortex-a7', 'cortex-a57.cortex-a53'. - - '-mtune=generic-ARCH' specifies that GCC should tune the - performance for a blend of processors within architecture ARCH. - The aim is to generate code that run well on the current most - popular processors, balancing between optimizations that benefit - some CPUs in the range, and avoiding performance pitfalls of other - CPUs. The effects of this option may change in future GCC versions - as CPU models come and go. - - '-mtune=native' causes the compiler to auto-detect the CPU of the - build computer. At present, this feature is only supported on - Linux, and not all architectures are recognized. If the - auto-detect is unsuccessful the option has no effect. - -'-mcpu=NAME' - This specifies the name of the target ARM processor. GCC uses this - name to derive the name of the target ARM architecture (as if - specified by '-march') and the ARM processor type for which to tune - for performance (as if specified by '-mtune'). Where this option - is used in conjunction with '-march' or '-mtune', those options - take precedence over the appropriate part of this option. - - Permissible names for this option are the same as those for - '-mtune'. - - '-mcpu=generic-ARCH' is also permissible, and is equivalent to - '-march=ARCH -mtune=generic-ARCH'. See '-mtune' for more - information. - - '-mcpu=native' causes the compiler to auto-detect the CPU of the - build computer. At present, this feature is only supported on - Linux, and not all architectures are recognized. If the - auto-detect is unsuccessful the option has no effect. - -'-mfpu=NAME' - This specifies what floating-point hardware (or hardware emulation) - is available on the target. Permissible names are: 'vfp', 'vfpv3', - 'vfpv3-fp16', 'vfpv3-d16', 'vfpv3-d16-fp16', 'vfpv3xd', - 'vfpv3xd-fp16', 'neon', 'neon-fp16', 'vfpv4', 'vfpv4-d16', - 'fpv4-sp-d16', 'neon-vfpv4', 'fp-armv8', 'neon-fp-armv8', and - 'crypto-neon-fp-armv8'. - - If '-msoft-float' is specified this specifies the format of - floating-point values. - - If the selected floating-point hardware includes the NEON extension - (e.g. '-mfpu'='neon'), note that floating-point operations are not - generated by GCC's auto-vectorization pass unless - '-funsafe-math-optimizations' is also specified. This is because - NEON hardware does not fully implement the IEEE 754 standard for - floating-point arithmetic (in particular denormal values are - treated as zero), so the use of NEON instructions may lead to a - loss of precision. - -'-mfp16-format=NAME' - Specify the format of the '__fp16' half-precision floating-point - type. Permissible names are 'none', 'ieee', and 'alternative'; the - default is 'none', in which case the '__fp16' type is not defined. - *Note Half-Precision::, for more information. - -'-mstructure-size-boundary=N' - The sizes of all structures and unions are rounded up to a multiple - of the number of bits set by this option. Permissible values are - 8, 32 and 64. The default value varies for different toolchains. - For the COFF targeted toolchain the default value is 8. A value of - 64 is only allowed if the underlying ABI supports it. - - Specifying a larger number can produce faster, more efficient code, - but can also increase the size of the program. Different values - are potentially incompatible. Code compiled with one value cannot - necessarily expect to work with code or libraries compiled with - another value, if they exchange information using structures or - unions. - -'-mabort-on-noreturn' - Generate a call to the function 'abort' at the end of a 'noreturn' - function. It is executed if the function tries to return. - -'-mlong-calls' -'-mno-long-calls' - Tells the compiler to perform function calls by first loading the - address of the function into a register and then performing a - subroutine call on this register. This switch is needed if the - target function lies outside of the 64-megabyte addressing range of - the offset-based version of subroutine call instruction. - - Even if this switch is enabled, not all function calls are turned - into long calls. The heuristic is that static functions, functions - that have the 'short-call' attribute, functions that are inside the - scope of a '#pragma no_long_calls' directive, and functions whose - definitions have already been compiled within the current - compilation unit are not turned into long calls. The exceptions to - this rule are that weak function definitions, functions with the - 'long-call' attribute or the 'section' attribute, and functions - that are within the scope of a '#pragma long_calls' directive are - always turned into long calls. - - This feature is not enabled by default. Specifying - '-mno-long-calls' restores the default behavior, as does placing - the function calls within the scope of a '#pragma long_calls_off' - directive. Note these switches have no effect on how the compiler - generates code to handle function calls via function pointers. - -'-msingle-pic-base' - Treat the register used for PIC addressing as read-only, rather - than loading it in the prologue for each function. The runtime - system is responsible for initializing this register with an - appropriate value before execution begins. - -'-mpic-register=REG' - Specify the register to be used for PIC addressing. For standard - PIC base case, the default will be any suitable register determined - by compiler. For single PIC base case, the default is 'R9' if - target is EABI based or stack-checking is enabled, otherwise the - default is 'R10'. - -'-mpic-data-is-text-relative' - Assume that each data segments are relative to text segment at load - time. Therefore, it permits addressing data using PC-relative - operations. This option is on by default for targets other than - VxWorks RTP. - -'-mpoke-function-name' - Write the name of each function into the text section, directly - preceding the function prologue. The generated code is similar to - this: - - t0 - .ascii "arm_poke_function_name", 0 - .align - t1 - .word 0xff000000 + (t1 - t0) - arm_poke_function_name - mov ip, sp - stmfd sp!, {fp, ip, lr, pc} - sub fp, ip, #4 - - When performing a stack backtrace, code can inspect the value of - 'pc' stored at 'fp + 0'. If the trace function then looks at - location 'pc - 12' and the top 8 bits are set, then we know that - there is a function name embedded immediately preceding this - location and has length '((pc[-3]) & 0xff000000)'. - -'-mthumb' -'-marm' - - Select between generating code that executes in ARM and Thumb - states. The default for most configurations is to generate code - that executes in ARM state, but the default can be changed by - configuring GCC with the '--with-mode='STATE configure option. - -'-mtpcs-frame' - Generate a stack frame that is compliant with the Thumb Procedure - Call Standard for all non-leaf functions. (A leaf function is one - that does not call any other functions.) The default is - '-mno-tpcs-frame'. - -'-mtpcs-leaf-frame' - Generate a stack frame that is compliant with the Thumb Procedure - Call Standard for all leaf functions. (A leaf function is one that - does not call any other functions.) The default is - '-mno-apcs-leaf-frame'. - -'-mcallee-super-interworking' - Gives all externally visible functions in the file being compiled - an ARM instruction set header which switches to Thumb mode before - executing the rest of the function. This allows these functions to - be called from non-interworking code. This option is not valid in - AAPCS configurations because interworking is enabled by default. - -'-mcaller-super-interworking' - Allows calls via function pointers (including virtual functions) to - execute correctly regardless of whether the target code has been - compiled for interworking or not. There is a small overhead in the - cost of executing a function pointer if this option is enabled. - This option is not valid in AAPCS configurations because - interworking is enabled by default. - -'-mtp=NAME' - Specify the access model for the thread local storage pointer. The - valid models are 'soft', which generates calls to - '__aeabi_read_tp', 'cp15', which fetches the thread pointer from - 'cp15' directly (supported in the arm6k architecture), and 'auto', - which uses the best available method for the selected processor. - The default setting is 'auto'. - -'-mtls-dialect=DIALECT' - Specify the dialect to use for accessing thread local storage. Two - DIALECTs are supported--'gnu' and 'gnu2'. The 'gnu' dialect - selects the original GNU scheme for supporting local and global - dynamic TLS models. The 'gnu2' dialect selects the GNU descriptor - scheme, which provides better performance for shared libraries. - The GNU descriptor scheme is compatible with the original scheme, - but does require new assembler, linker and library support. - Initial and local exec TLS models are unaffected by this option and - always use the original scheme. - -'-mword-relocations' - Only generate absolute relocations on word-sized values (i.e. - R_ARM_ABS32). This is enabled by default on targets (uClinux, - SymbianOS) where the runtime loader imposes this restriction, and - when '-fpic' or '-fPIC' is specified. - -'-mfix-cortex-m3-ldrd' - Some Cortex-M3 cores can cause data corruption when 'ldrd' - instructions with overlapping destination and base registers are - used. This option avoids generating these instructions. This - option is enabled by default when '-mcpu=cortex-m3' is specified. - -'-munaligned-access' -'-mno-unaligned-access' - Enables (or disables) reading and writing of 16- and 32- bit values - from addresses that are not 16- or 32- bit aligned. By default - unaligned access is disabled for all pre-ARMv6 and all ARMv6-M - architectures, and enabled for all other architectures. If - unaligned access is not enabled then words in packed data - structures will be accessed a byte at a time. - - The ARM attribute 'Tag_CPU_unaligned_access' will be set in the - generated object file to either true or false, depending upon the - setting of this option. If unaligned access is enabled then the - preprocessor symbol '__ARM_FEATURE_UNALIGNED' will also be defined. - -'-mneon-for-64bits' - Enables using Neon to handle scalar 64-bits operations. This is - disabled by default since the cost of moving data from core - registers to Neon is high. - -'-mslow-flash-data' - Assume loading data from flash is slower than fetching instruction. - Therefore literal load is minimized for better performance. This - option is only supported when compiling for ARMv7 M-profile and off - by default. - -'-mrestrict-it' - Restricts generation of IT blocks to conform to the rules of ARMv8. - IT blocks can only contain a single 16-bit instruction from a - select set of instructions. This option is on by default for ARMv8 - Thumb mode. - - -File: gcc.info, Node: AVR Options, Next: Blackfin Options, Prev: ARM Options, Up: Submodel Options - -3.17.5 AVR Options ------------------- - -These options are defined for AVR implementations: - -'-mmcu=MCU' - Specify Atmel AVR instruction set architectures (ISA) or MCU type. - - The default for this option is 'avr2'. - - GCC supports the following AVR devices and ISAs: - - 'avr2' - "Classic" devices with up to 8 KiB of program memory. - MCU = 'attiny22', 'attiny26', 'at90c8534', 'at90s2313', - 'at90s2323', 'at90s2333', 'at90s2343', 'at90s4414', - 'at90s4433', 'at90s4434', 'at90s8515', 'at90s8535'. - - 'avr25' - "Classic" devices with up to 8 KiB of program memory and with - the 'MOVW' instruction. - MCU = 'ata5272', 'ata6289', 'attiny13', 'attiny13a', - 'attiny2313', 'attiny2313a', 'attiny24', 'attiny24a', - 'attiny25', 'attiny261', 'attiny261a', 'attiny43u', - 'attiny4313', 'attiny44', 'attiny44a', 'attiny45', - 'attiny461', 'attiny461a', 'attiny48', 'attiny84', - 'attiny84a', 'attiny85', 'attiny861', 'attiny861a', - 'attiny87', 'attiny88', 'at86rf401'. - - 'avr3' - "Classic" devices with 16 KiB up to 64 KiB of program memory. - MCU = 'at43usb355', 'at76c711'. - - 'avr31' - "Classic" devices with 128 KiB of program memory. - MCU = 'atmega103', 'at43usb320'. - - 'avr35' - "Classic" devices with 16 KiB up to 64 KiB of program memory - and with the 'MOVW' instruction. - MCU = 'ata5505', 'atmega16u2', 'atmega32u2', 'atmega8u2', - 'attiny1634', 'attiny167', 'at90usb162', 'at90usb82'. - - 'avr4' - "Enhanced" devices with up to 8 KiB of program memory. - MCU = 'ata6285', 'ata6286', 'atmega48', 'atmega48a', - 'atmega48p', 'atmega48pa', 'atmega8', 'atmega8a', - 'atmega8hva', 'atmega8515', 'atmega8535', 'atmega88', - 'atmega88a', 'atmega88p', 'atmega88pa', 'at90pwm1', - 'at90pwm2', 'at90pwm2b', 'at90pwm3', 'at90pwm3b', 'at90pwm81'. - - 'avr5' - "Enhanced" devices with 16 KiB up to 64 KiB of program memory. - - MCU = 'ata5790', 'ata5790n', 'ata5795', 'atmega16', - 'atmega16a', 'atmega16hva', 'atmega16hva2', 'atmega16hvb', - 'atmega16hvbrevb', 'atmega16m1', 'atmega16u4', 'atmega161', - 'atmega162', 'atmega163', 'atmega164a', 'atmega164p', - 'atmega164pa', 'atmega165', 'atmega165a', 'atmega165p', - 'atmega165pa', 'atmega168', 'atmega168a', 'atmega168p', - 'atmega168pa', 'atmega169', 'atmega169a', 'atmega169p', - 'atmega169pa', 'atmega26hvg', 'atmega32', 'atmega32a', - 'atmega32c1', 'atmega32hvb', 'atmega32hvbrevb', 'atmega32m1', - 'atmega32u4', 'atmega32u6', 'atmega323', 'atmega324a', - 'atmega324p', 'atmega324pa', 'atmega325', 'atmega325a', - 'atmega325p', 'atmega3250', 'atmega3250a', 'atmega3250p', - 'atmega3250pa', 'atmega328', 'atmega328p', 'atmega329', - 'atmega329a', 'atmega329p', 'atmega329pa', 'atmega3290', - 'atmega3290a', 'atmega3290p', 'atmega3290pa', 'atmega406', - 'atmega48hvf', 'atmega64', 'atmega64a', 'atmega64c1', - 'atmega64hve', 'atmega64m1', 'atmega64rfa2', 'atmega64rfr2', - 'atmega640', 'atmega644', 'atmega644a', 'atmega644p', - 'atmega644pa', 'atmega645', 'atmega645a', 'atmega645p', - 'atmega6450', 'atmega6450a', 'atmega6450p', 'atmega649', - 'atmega649a', 'atmega649p', 'atmega6490', 'atmega6490a', - 'atmega6490p', 'at90can32', 'at90can64', 'at90pwm161', - 'at90pwm216', 'at90pwm316', 'at90scr100', 'at90usb646', - 'at90usb647', 'at94k', 'm3000'. - - 'avr51' - "Enhanced" devices with 128 KiB of program memory. - MCU = 'atmega128', 'atmega128a', 'atmega128rfa1', - 'atmega1280', 'atmega1281', 'atmega1284', 'atmega1284p', - 'at90can128', 'at90usb1286', 'at90usb1287'. - - 'avr6' - "Enhanced" devices with 3-byte PC, i.e. with more than 128 KiB - of program memory. - MCU = 'atmega2560', 'atmega2561'. - - 'avrxmega2' - "XMEGA" devices with more than 8 KiB and up to 64 KiB of - program memory. - MCU = 'atmxt112sl', 'atmxt224', 'atmxt224e', 'atmxt336s', - 'atxmega16a4', 'atxmega16a4u', 'atxmega16c4', 'atxmega16d4', - 'atxmega32a4', 'atxmega32a4u', 'atxmega32c4', 'atxmega32d4', - 'atxmega32e5', 'atxmega32x1'. - - 'avrxmega4' - "XMEGA" devices with more than 64 KiB and up to 128 KiB of - program memory. - MCU = 'atxmega64a3', 'atxmega64a3u', 'atxmega64a4u', - 'atxmega64b1', 'atxmega64b3', 'atxmega64c3', 'atxmega64d3', - 'atxmega64d4'. - - 'avrxmega5' - "XMEGA" devices with more than 64 KiB and up to 128 KiB of - program memory and more than 64 KiB of RAM. - MCU = 'atxmega64a1', 'atxmega64a1u'. - - 'avrxmega6' - "XMEGA" devices with more than 128 KiB of program memory. - MCU = 'atmxt540s', 'atmxt540sreva', 'atxmega128a3', - 'atxmega128a3u', 'atxmega128b1', 'atxmega128b3', - 'atxmega128c3', 'atxmega128d3', 'atxmega128d4', - 'atxmega192a3', 'atxmega192a3u', 'atxmega192c3', - 'atxmega192d3', 'atxmega256a3', 'atxmega256a3b', - 'atxmega256a3bu', 'atxmega256a3u', 'atxmega256c3', - 'atxmega256d3', 'atxmega384c3', 'atxmega384d3'. - - 'avrxmega7' - "XMEGA" devices with more than 128 KiB of program memory and - more than 64 KiB of RAM. - MCU = 'atxmega128a1', 'atxmega128a1u', 'atxmega128a4u'. - - 'avr1' - This ISA is implemented by the minimal AVR core and supported - for assembler only. - MCU = 'attiny11', 'attiny12', 'attiny15', 'attiny28', - 'at90s1200'. - -'-maccumulate-args' - Accumulate outgoing function arguments and acquire/release the - needed stack space for outgoing function arguments once in function - prologue/epilogue. Without this option, outgoing arguments are - pushed before calling a function and popped afterwards. - - Popping the arguments after the function call can be expensive on - AVR so that accumulating the stack space might lead to smaller - executables because arguments need not to be removed from the stack - after such a function call. - - This option can lead to reduced code size for functions that - perform several calls to functions that get their arguments on the - stack like calls to printf-like functions. - -'-mbranch-cost=COST' - Set the branch costs for conditional branch instructions to COST. - Reasonable values for COST are small, non-negative integers. The - default branch cost is 0. - -'-mcall-prologues' - Functions prologues/epilogues are expanded as calls to appropriate - subroutines. Code size is smaller. - -'-mint8' - Assume 'int' to be 8-bit integer. This affects the sizes of all - types: a 'char' is 1 byte, an 'int' is 1 byte, a 'long' is 2 bytes, - and 'long long' is 4 bytes. Please note that this option does not - conform to the C standards, but it results in smaller code size. - -'-mno-interrupts' - Generated code is not compatible with hardware interrupts. Code - size is smaller. - -'-mrelax' - Try to replace 'CALL' resp. 'JMP' instruction by the shorter - 'RCALL' resp. 'RJMP' instruction if applicable. Setting '-mrelax' - just adds the '--relax' option to the linker command line when the - linker is called. - - Jump relaxing is performed by the linker because jump offsets are - not known before code is located. Therefore, the assembler code - generated by the compiler is the same, but the instructions in the - executable may differ from instructions in the assembler code. - - Relaxing must be turned on if linker stubs are needed, see the - section on 'EIND' and linker stubs below. - -'-msp8' - Treat the stack pointer register as an 8-bit register, i.e. assume - the high byte of the stack pointer is zero. In general, you don't - need to set this option by hand. - - This option is used internally by the compiler to select and build - multilibs for architectures 'avr2' and 'avr25'. These - architectures mix devices with and without 'SPH'. For any setting - other than '-mmcu=avr2' or '-mmcu=avr25' the compiler driver will - add or remove this option from the compiler proper's command line, - because the compiler then knows if the device or architecture has - an 8-bit stack pointer and thus no 'SPH' register or not. - -'-mstrict-X' - Use address register 'X' in a way proposed by the hardware. This - means that 'X' is only used in indirect, post-increment or - pre-decrement addressing. - - Without this option, the 'X' register may be used in the same way - as 'Y' or 'Z' which then is emulated by additional instructions. - For example, loading a value with 'X+const' addressing with a small - non-negative 'const < 64' to a register RN is performed as - - adiw r26, const ; X += const - ld RN, X ; RN = *X - sbiw r26, const ; X -= const - -'-mtiny-stack' - Only change the lower 8 bits of the stack pointer. - -'-Waddr-space-convert' - Warn about conversions between address spaces in the case where the - resulting address space is not contained in the incoming address - space. - -3.17.5.1 'EIND' and Devices with more than 128 Ki Bytes of Flash -................................................................ - -Pointers in the implementation are 16 bits wide. The address of a -function or label is represented as word address so that indirect jumps -and calls can target any code address in the range of 64 Ki words. - - In order to facilitate indirect jump on devices with more than 128 Ki -bytes of program memory space, there is a special function register -called 'EIND' that serves as most significant part of the target address -when 'EICALL' or 'EIJMP' instructions are used. - - Indirect jumps and calls on these devices are handled as follows by the -compiler and are subject to some limitations: - - * The compiler never sets 'EIND'. - - * The compiler uses 'EIND' implicitely in 'EICALL'/'EIJMP' - instructions or might read 'EIND' directly in order to emulate an - indirect call/jump by means of a 'RET' instruction. - - * The compiler assumes that 'EIND' never changes during the startup - code or during the application. In particular, 'EIND' is not - saved/restored in function or interrupt service routine - prologue/epilogue. - - * For indirect calls to functions and computed goto, the linker - generates _stubs_. Stubs are jump pads sometimes also called - _trampolines_. Thus, the indirect call/jump jumps to such a stub. - The stub contains a direct jump to the desired address. - - * Linker relaxation must be turned on so that the linker will - generate the stubs correctly an all situaltion. See the compiler - option '-mrelax' and the linler option '--relax'. There are corner - cases where the linker is supposed to generate stubs but aborts - without relaxation and without a helpful error message. - - * The default linker script is arranged for code with 'EIND = 0'. If - code is supposed to work for a setup with 'EIND != 0', a custom - linker script has to be used in order to place the sections whose - name start with '.trampolines' into the segment where 'EIND' points - to. - - * The startup code from libgcc never sets 'EIND'. Notice that - startup code is a blend of code from libgcc and AVR-LibC. For the - impact of AVR-LibC on 'EIND', see the - AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/). - - * It is legitimate for user-specific startup code to set up 'EIND' - early, for example by means of initialization code located in - section '.init3'. Such code runs prior to general startup code - that initializes RAM and calls constructors, but after the bit of - startup code from AVR-LibC that sets 'EIND' to the segment where - the vector table is located. - #include <avr/io.h> - - static void - __attribute__((section(".init3"),naked,used,no_instrument_function)) - init3_set_eind (void) - { - __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t" - "out %i0,r24" :: "n" (&EIND) : "r24","memory"); - } - - The '__trampolines_start' symbol is defined in the linker script. - - * Stubs are generated automatically by the linker if the following - two conditions are met: - - - The address of a label is taken by means of the 'gs' modifier - (short for _generate stubs_) like so: - LDI r24, lo8(gs(FUNC)) - LDI r25, hi8(gs(FUNC)) - - The final location of that label is in a code segment - _outside_ the segment where the stubs are located. - - * The compiler emits such 'gs' modifiers for code labels in the - following situations: - - Taking address of a function or code label. - - Computed goto. - - If prologue-save function is used, see '-mcall-prologues' - command-line option. - - Switch/case dispatch tables. If you do not want such dispatch - tables you can specify the '-fno-jump-tables' command-line - option. - - C and C++ constructors/destructors called during - startup/shutdown. - - If the tools hit a 'gs()' modifier explained above. - - * Jumping to non-symbolic addresses like so is _not_ supported: - - int main (void) - { - /* Call function at word address 0x2 */ - return ((int(*)(void)) 0x2)(); - } - - Instead, a stub has to be set up, i.e. the function has to be - called through a symbol ('func_4' in the example): - - int main (void) - { - extern int func_4 (void); - - /* Call function at byte address 0x4 */ - return func_4(); - } - - and the application be linked with '-Wl,--defsym,func_4=0x4'. - Alternatively, 'func_4' can be defined in the linker script. - -3.17.5.2 Handling of the 'RAMPD', 'RAMPX', 'RAMPY' and 'RAMPZ' Special Function Registers -......................................................................................... - -Some AVR devices support memories larger than the 64 KiB range that can -be accessed with 16-bit pointers. To access memory locations outside -this 64 KiB range, the contentent of a 'RAMP' register is used as high -part of the address: The 'X', 'Y', 'Z' address register is concatenated -with the 'RAMPX', 'RAMPY', 'RAMPZ' special function register, -respectively, to get a wide address. Similarly, 'RAMPD' is used -together with direct addressing. - - * The startup code initializes the 'RAMP' special function registers - with zero. - - * If a *note named address space: AVR Named Address Spaces. other - than generic or '__flash' is used, then 'RAMPZ' is set as needed - before the operation. - - * If the device supports RAM larger than 64 KiB and the compiler - needs to change 'RAMPZ' to accomplish an operation, 'RAMPZ' is - reset to zero after the operation. - - * If the device comes with a specific 'RAMP' register, the ISR - prologue/epilogue saves/restores that SFR and initializes it with - zero in case the ISR code might (implicitly) use it. - - * RAM larger than 64 KiB is not supported by GCC for AVR targets. If - you use inline assembler to read from locations outside the 16-bit - address range and change one of the 'RAMP' registers, you must - reset it to zero after the access. - -3.17.5.3 AVR Built-in Macros -............................ - -GCC defines several built-in macros so that the user code can test for -the presence or absence of features. Almost any of the following -built-in macros are deduced from device capabilities and thus triggered -by the '-mmcu=' command-line option. - - For even more AVR-specific built-in macros see *note AVR Named Address -Spaces:: and *note AVR Built-in Functions::. - -'__AVR_ARCH__' - Build-in macro that resolves to a decimal number that identifies - the architecture and depends on the '-mmcu=MCU' option. Possible - values are: - - '2', '25', '3', '31', '35', '4', '5', '51', '6', '102', '104', - '105', '106', '107' - - for MCU='avr2', 'avr25', 'avr3', 'avr31', 'avr35', 'avr4', 'avr5', - 'avr51', 'avr6', 'avrxmega2', 'avrxmega4', 'avrxmega5', - 'avrxmega6', 'avrxmega7', respectively. If MCU specifies a device, - this built-in macro is set accordingly. For example, with - '-mmcu=atmega8' the macro will be defined to '4'. - -'__AVR_DEVICE__' - Setting '-mmcu=DEVICE' defines this built-in macro which reflects - the device's name. For example, '-mmcu=atmega8' defines the - built-in macro '__AVR_ATmega8__', '-mmcu=attiny261a' defines - '__AVR_ATtiny261A__', etc. - - The built-in macros' names follow the scheme '__AVR_DEVICE__' where - DEVICE is the device name as from the AVR user manual. The - difference between DEVICE in the built-in macro and DEVICE in - '-mmcu=DEVICE' is that the latter is always lowercase. - - If DEVICE is not a device but only a core architecture like - 'avr51', this macro will not be defined. - -'__AVR_XMEGA__' - The device / architecture belongs to the XMEGA family of devices. - -'__AVR_HAVE_ELPM__' - The device has the the 'ELPM' instruction. - -'__AVR_HAVE_ELPMX__' - The device has the 'ELPM RN,Z' and 'ELPM RN,Z+' instructions. - -'__AVR_HAVE_MOVW__' - The device has the 'MOVW' instruction to perform 16-bit - register-register moves. - -'__AVR_HAVE_LPMX__' - The device has the 'LPM RN,Z' and 'LPM RN,Z+' instructions. - -'__AVR_HAVE_MUL__' - The device has a hardware multiplier. - -'__AVR_HAVE_JMP_CALL__' - The device has the 'JMP' and 'CALL' instructions. This is the case - for devices with at least 16 KiB of program memory. - -'__AVR_HAVE_EIJMP_EICALL__' -'__AVR_3_BYTE_PC__' - The device has the 'EIJMP' and 'EICALL' instructions. This is the - case for devices with more than 128 KiB of program memory. This - also means that the program counter (PC) is 3 bytes wide. - -'__AVR_2_BYTE_PC__' - The program counter (PC) is 2 bytes wide. This is the case for - devices with up to 128 KiB of program memory. - -'__AVR_HAVE_8BIT_SP__' -'__AVR_HAVE_16BIT_SP__' - The stack pointer (SP) register is treated as 8-bit respectively - 16-bit register by the compiler. The definition of these macros is - affected by '-mtiny-stack'. - -'__AVR_HAVE_SPH__' -'__AVR_SP8__' - The device has the SPH (high part of stack pointer) special - function register or has an 8-bit stack pointer, respectively. The - definition of these macros is affected by '-mmcu=' and in the cases - of '-mmcu=avr2' and '-mmcu=avr25' also by '-msp8'. - -'__AVR_HAVE_RAMPD__' -'__AVR_HAVE_RAMPX__' -'__AVR_HAVE_RAMPY__' -'__AVR_HAVE_RAMPZ__' - The device has the 'RAMPD', 'RAMPX', 'RAMPY', 'RAMPZ' special - function register, respectively. - -'__NO_INTERRUPTS__' - This macro reflects the '-mno-interrupts' command line option. - -'__AVR_ERRATA_SKIP__' -'__AVR_ERRATA_SKIP_JMP_CALL__' - Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit - instructions because of a hardware erratum. Skip instructions are - 'SBRS', 'SBRC', 'SBIS', 'SBIC' and 'CPSE'. The second macro is - only defined if '__AVR_HAVE_JMP_CALL__' is also set. - -'__AVR_ISA_RMW__' - The device has Read-Modify-Write instructions (XCH, LAC, LAS and - LAT). - -'__AVR_SFR_OFFSET__=OFFSET' - Instructions that can address I/O special function registers - directly like 'IN', 'OUT', 'SBI', etc. may use a different address - as if addressed by an instruction to access RAM like 'LD' or 'STS'. - This offset depends on the device architecture and has to be - subtracted from the RAM address in order to get the respective - I/O address. - -'__WITH_AVRLIBC__' - The compiler is configured to be used together with AVR-Libc. See - the '--with-avrlibc' configure option. - - -File: gcc.info, Node: Blackfin Options, Next: C6X Options, Prev: AVR Options, Up: Submodel Options - -3.17.6 Blackfin Options ------------------------ - -'-mcpu=CPU[-SIREVISION]' - Specifies the name of the target Blackfin processor. Currently, - CPU can be one of 'bf512', 'bf514', 'bf516', 'bf518', 'bf522', - 'bf523', 'bf524', 'bf525', 'bf526', 'bf527', 'bf531', 'bf532', - 'bf533', 'bf534', 'bf536', 'bf537', 'bf538', 'bf539', 'bf542', - 'bf544', 'bf547', 'bf548', 'bf549', 'bf542m', 'bf544m', 'bf547m', - 'bf548m', 'bf549m', 'bf561', 'bf592'. - - The optional SIREVISION specifies the silicon revision of the - target Blackfin processor. Any workarounds available for the - targeted silicon revision are enabled. If SIREVISION is 'none', no - workarounds are enabled. If SIREVISION is 'any', all workarounds - for the targeted processor are enabled. The '__SILICON_REVISION__' - macro is defined to two hexadecimal digits representing the major - and minor numbers in the silicon revision. If SIREVISION is - 'none', the '__SILICON_REVISION__' is not defined. If SIREVISION - is 'any', the '__SILICON_REVISION__' is defined to be '0xffff'. If - this optional SIREVISION is not used, GCC assumes the latest known - silicon revision of the targeted Blackfin processor. - - GCC defines a preprocessor macro for the specified CPU. For the - 'bfin-elf' toolchain, this option causes the hardware BSP provided - by libgloss to be linked in if '-msim' is not given. - - Without this option, 'bf532' is used as the processor by default. - - Note that support for 'bf561' is incomplete. For 'bf561', only the - preprocessor macro is defined. - -'-msim' - Specifies that the program will be run on the simulator. This - causes the simulator BSP provided by libgloss to be linked in. - This option has effect only for 'bfin-elf' toolchain. Certain - other options, such as '-mid-shared-library' and '-mfdpic', imply - '-msim'. - -'-momit-leaf-frame-pointer' - Don't keep the frame pointer in a register for leaf functions. - This avoids the instructions to save, set up and restore frame - pointers and makes an extra register available in leaf functions. - The option '-fomit-frame-pointer' removes the frame pointer for all - functions, which might make debugging harder. - -'-mspecld-anomaly' - When enabled, the compiler ensures that the generated code does not - contain speculative loads after jump instructions. If this option - is used, '__WORKAROUND_SPECULATIVE_LOADS' is defined. - -'-mno-specld-anomaly' - Don't generate extra code to prevent speculative loads from - occurring. - -'-mcsync-anomaly' - When enabled, the compiler ensures that the generated code does not - contain CSYNC or SSYNC instructions too soon after conditional - branches. If this option is used, '__WORKAROUND_SPECULATIVE_SYNCS' - is defined. - -'-mno-csync-anomaly' - Don't generate extra code to prevent CSYNC or SSYNC instructions - from occurring too soon after a conditional branch. - -'-mlow-64k' - When enabled, the compiler is free to take advantage of the - knowledge that the entire program fits into the low 64k of memory. - -'-mno-low-64k' - Assume that the program is arbitrarily large. This is the default. - -'-mstack-check-l1' - Do stack checking using information placed into L1 scratchpad - memory by the uClinux kernel. - -'-mid-shared-library' - Generate code that supports shared libraries via the library ID - method. This allows for execute in place and shared libraries in - an environment without virtual memory management. This option - implies '-fPIC'. With a 'bfin-elf' target, this option implies - '-msim'. - -'-mno-id-shared-library' - Generate code that doesn't assume ID-based shared libraries are - being used. This is the default. - -'-mleaf-id-shared-library' - Generate code that supports shared libraries via the library ID - method, but assumes that this library or executable won't link - against any other ID shared libraries. That allows the compiler to - use faster code for jumps and calls. - -'-mno-leaf-id-shared-library' - Do not assume that the code being compiled won't link against any - ID shared libraries. Slower code is generated for jump and call - insns. - -'-mshared-library-id=n' - Specifies the identification number of the ID-based shared library - being compiled. Specifying a value of 0 generates more compact - code; specifying other values forces the allocation of that number - to the current library but is no more space- or time-efficient than - omitting this option. - -'-msep-data' - Generate code that allows the data segment to be located in a - different area of memory from the text segment. This allows for - execute in place in an environment without virtual memory - management by eliminating relocations against the text section. - -'-mno-sep-data' - Generate code that assumes that the data segment follows the text - segment. This is the default. - -'-mlong-calls' -'-mno-long-calls' - Tells the compiler to perform function calls by first loading the - address of the function into a register and then performing a - subroutine call on this register. This switch is needed if the - target function lies outside of the 24-bit addressing range of the - offset-based version of subroutine call instruction. - - This feature is not enabled by default. Specifying - '-mno-long-calls' restores the default behavior. Note these - switches have no effect on how the compiler generates code to - handle function calls via function pointers. - -'-mfast-fp' - Link with the fast floating-point library. This library relaxes - some of the IEEE floating-point standard's rules for checking - inputs against Not-a-Number (NAN), in the interest of performance. - -'-minline-plt' - Enable inlining of PLT entries in function calls to functions that - are not known to bind locally. It has no effect without '-mfdpic'. - -'-mmulticore' - Build a standalone application for multicore Blackfin processors. - This option causes proper start files and link scripts supporting - multicore to be used, and defines the macro '__BFIN_MULTICORE'. It - can only be used with '-mcpu=bf561[-SIREVISION]'. - - This option can be used with '-mcorea' or '-mcoreb', which selects - the one-application-per-core programming model. Without '-mcorea' - or '-mcoreb', the single-application/dual-core programming model is - used. In this model, the main function of Core B should be named - as 'coreb_main'. - - If this option is not used, the single-core application programming - model is used. - -'-mcorea' - Build a standalone application for Core A of BF561 when using the - one-application-per-core programming model. Proper start files and - link scripts are used to support Core A, and the macro - '__BFIN_COREA' is defined. This option can only be used in - conjunction with '-mmulticore'. - -'-mcoreb' - Build a standalone application for Core B of BF561 when using the - one-application-per-core programming model. Proper start files and - link scripts are used to support Core B, and the macro - '__BFIN_COREB' is defined. When this option is used, 'coreb_main' - should be used instead of 'main'. This option can only be used in - conjunction with '-mmulticore'. - -'-msdram' - Build a standalone application for SDRAM. Proper start files and - link scripts are used to put the application into SDRAM, and the - macro '__BFIN_SDRAM' is defined. The loader should initialize - SDRAM before loading the application. - -'-micplb' - Assume that ICPLBs are enabled at run time. This has an effect on - certain anomaly workarounds. For Linux targets, the default is to - assume ICPLBs are enabled; for standalone applications the default - is off. - - -File: gcc.info, Node: C6X Options, Next: CRIS Options, Prev: Blackfin Options, Up: Submodel Options - -3.17.7 C6X Options ------------------- - -'-march=NAME' - This specifies the name of the target architecture. GCC uses this - name to determine what kind of instructions it can emit when - generating assembly code. Permissible names are: 'c62x', 'c64x', - 'c64x+', 'c67x', 'c67x+', 'c674x'. - -'-mbig-endian' - Generate code for a big-endian target. - -'-mlittle-endian' - Generate code for a little-endian target. This is the default. - -'-msim' - Choose startup files and linker script suitable for the simulator. - -'-msdata=default' - Put small global and static data in the '.neardata' section, which - is pointed to by register 'B14'. Put small uninitialized global - and static data in the '.bss' section, which is adjacent to the - '.neardata' section. Put small read-only data into the '.rodata' - section. The corresponding sections used for large pieces of data - are '.fardata', '.far' and '.const'. - -'-msdata=all' - Put all data, not just small objects, into the sections reserved - for small data, and use addressing relative to the 'B14' register - to access them. - -'-msdata=none' - Make no use of the sections reserved for small data, and use - absolute addresses to access all data. Put all initialized global - and static data in the '.fardata' section, and all uninitialized - data in the '.far' section. Put all constant data into the - '.const' section. - - -File: gcc.info, Node: CRIS Options, Next: CR16 Options, Prev: C6X Options, Up: Submodel Options - -3.17.8 CRIS Options -------------------- - -These options are defined specifically for the CRIS ports. - -'-march=ARCHITECTURE-TYPE' -'-mcpu=ARCHITECTURE-TYPE' - Generate code for the specified architecture. The choices for - ARCHITECTURE-TYPE are 'v3', 'v8' and 'v10' for respectively - ETRAX 4, ETRAX 100, and ETRAX 100 LX. Default is 'v0' except for - cris-axis-linux-gnu, where the default is 'v10'. - -'-mtune=ARCHITECTURE-TYPE' - Tune to ARCHITECTURE-TYPE everything applicable about the generated - code, except for the ABI and the set of available instructions. - The choices for ARCHITECTURE-TYPE are the same as for - '-march=ARCHITECTURE-TYPE'. - -'-mmax-stack-frame=N' - Warn when the stack frame of a function exceeds N bytes. - -'-metrax4' -'-metrax100' - The options '-metrax4' and '-metrax100' are synonyms for - '-march=v3' and '-march=v8' respectively. - -'-mmul-bug-workaround' -'-mno-mul-bug-workaround' - Work around a bug in the 'muls' and 'mulu' instructions for CPU - models where it applies. This option is active by default. - -'-mpdebug' - Enable CRIS-specific verbose debug-related information in the - assembly code. This option also has the effect of turning off the - '#NO_APP' formatted-code indicator to the assembler at the - beginning of the assembly file. - -'-mcc-init' - Do not use condition-code results from previous instruction; always - emit compare and test instructions before use of condition codes. - -'-mno-side-effects' - Do not emit instructions with side effects in addressing modes - other than post-increment. - -'-mstack-align' -'-mno-stack-align' -'-mdata-align' -'-mno-data-align' -'-mconst-align' -'-mno-const-align' - These options ('no-' options) arrange (eliminate arrangements) for - the stack frame, individual data and constants to be aligned for - the maximum single data access size for the chosen CPU model. The - default is to arrange for 32-bit alignment. ABI details such as - structure layout are not affected by these options. - -'-m32-bit' -'-m16-bit' -'-m8-bit' - Similar to the stack- data- and const-align options above, these - options arrange for stack frame, writable data and constants to all - be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit - alignment. - -'-mno-prologue-epilogue' -'-mprologue-epilogue' - With '-mno-prologue-epilogue', the normal function prologue and - epilogue which set up the stack frame are omitted and no return - instructions or return sequences are generated in the code. Use - this option only together with visual inspection of the compiled - code: no warnings or errors are generated when call-saved registers - must be saved, or storage for local variables needs to be - allocated. - -'-mno-gotplt' -'-mgotplt' - With '-fpic' and '-fPIC', don't generate (do generate) instruction - sequences that load addresses for functions from the PLT part of - the GOT rather than (traditional on other architectures) calls to - the PLT. The default is '-mgotplt'. - -'-melf' - Legacy no-op option only recognized with the cris-axis-elf and - cris-axis-linux-gnu targets. - -'-mlinux' - Legacy no-op option only recognized with the cris-axis-linux-gnu - target. - -'-sim' - This option, recognized for the cris-axis-elf, arranges to link - with input-output functions from a simulator library. Code, - initialized data and zero-initialized data are allocated - consecutively. - -'-sim2' - Like '-sim', but pass linker options to locate initialized data at - 0x40000000 and zero-initialized data at 0x80000000. - - -File: gcc.info, Node: CR16 Options, Next: Darwin Options, Prev: CRIS Options, Up: Submodel Options - -3.17.9 CR16 Options -------------------- - -These options are defined specifically for the CR16 ports. - -'-mmac' - Enable the use of multiply-accumulate instructions. Disabled by - default. - -'-mcr16cplus' -'-mcr16c' - Generate code for CR16C or CR16C+ architecture. CR16C+ - architecture is default. - -'-msim' - Links the library libsim.a which is in compatible with simulator. - Applicable to ELF compiler only. - -'-mint32' - Choose integer type as 32-bit wide. - -'-mbit-ops' - Generates 'sbit'/'cbit' instructions for bit manipulations. - -'-mdata-model=MODEL' - Choose a data model. The choices for MODEL are 'near', 'far' or - 'medium'. 'medium' is default. However, 'far' is not valid with - '-mcr16c', as the CR16C architecture does not support the far data - model. - - -File: gcc.info, Node: Darwin Options, Next: DEC Alpha Options, Prev: CR16 Options, Up: Submodel Options - -3.17.10 Darwin Options ----------------------- - -These options are defined for all architectures running the Darwin -operating system. - - FSF GCC on Darwin does not create "fat" object files; it creates an -object file for the single architecture that GCC was built to target. -Apple's GCC on Darwin does create "fat" files if multiple '-arch' -options are used; it does so by running the compiler or linker multiple -times and joining the results together with 'lipo'. - - The subtype of the file created (like 'ppc7400' or 'ppc970' or 'i686') -is determined by the flags that specify the ISA that GCC is targeting, -like '-mcpu' or '-march'. The '-force_cpusubtype_ALL' option can be -used to override this. - - The Darwin tools vary in their behavior when presented with an ISA -mismatch. The assembler, 'as', only permits instructions to be used -that are valid for the subtype of the file it is generating, so you -cannot put 64-bit instructions in a 'ppc750' object file. The linker -for shared libraries, '/usr/bin/libtool', fails and prints an error if -asked to create a shared library with a less restrictive subtype than -its input files (for instance, trying to put a 'ppc970' object file in a -'ppc7400' library). The linker for executables, 'ld', quietly gives the -executable the most restrictive subtype of any of its input files. - -'-FDIR' - Add the framework directory DIR to the head of the list of - directories to be searched for header files. These directories are - interleaved with those specified by '-I' options and are scanned in - a left-to-right order. - - A framework directory is a directory with frameworks in it. A - framework is a directory with a 'Headers' and/or 'PrivateHeaders' - directory contained directly in it that ends in '.framework'. The - name of a framework is the name of this directory excluding the - '.framework'. Headers associated with the framework are found in - one of those two directories, with 'Headers' being searched first. - A subframework is a framework directory that is in a framework's - 'Frameworks' directory. Includes of subframework headers can only - appear in a header of a framework that contains the subframework, - or in a sibling subframework header. Two subframeworks are - siblings if they occur in the same framework. A subframework - should not have the same name as a framework; a warning is issued - if this is violated. Currently a subframework cannot have - subframeworks; in the future, the mechanism may be extended to - support this. The standard frameworks can be found in - '/System/Library/Frameworks' and '/Library/Frameworks'. An example - include looks like '#include <Framework/header.h>', where - 'Framework' denotes the name of the framework and 'header.h' is - found in the 'PrivateHeaders' or 'Headers' directory. - -'-iframeworkDIR' - Like '-F' except the directory is a treated as a system directory. - The main difference between this '-iframework' and '-F' is that - with '-iframework' the compiler does not warn about constructs - contained within header files found via DIR. This option is valid - only for the C family of languages. - -'-gused' - Emit debugging information for symbols that are used. For stabs - debugging format, this enables '-feliminate-unused-debug-symbols'. - This is by default ON. - -'-gfull' - Emit debugging information for all symbols and types. - -'-mmacosx-version-min=VERSION' - The earliest version of MacOS X that this executable will run on is - VERSION. Typical values of VERSION include '10.1', '10.2', and - '10.3.9'. - - If the compiler was built to use the system's headers by default, - then the default for this option is the system version on which the - compiler is running, otherwise the default is to make choices that - are compatible with as many systems and code bases as possible. - -'-mkernel' - Enable kernel development mode. The '-mkernel' option sets - '-static', '-fno-common', '-fno-cxa-atexit', '-fno-exceptions', - '-fno-non-call-exceptions', '-fapple-kext', '-fno-weak' and - '-fno-rtti' where applicable. This mode also sets '-mno-altivec', - '-msoft-float', '-fno-builtin' and '-mlong-branch' for PowerPC - targets. - -'-mone-byte-bool' - Override the defaults for 'bool' so that 'sizeof(bool)==1'. By - default 'sizeof(bool)' is '4' when compiling for Darwin/PowerPC and - '1' when compiling for Darwin/x86, so this option has no effect on - x86. - - *Warning:* The '-mone-byte-bool' switch causes GCC to generate code - that is not binary compatible with code generated without that - switch. Using this switch may require recompiling all other - modules in a program, including system libraries. Use this switch - to conform to a non-default data model. - -'-mfix-and-continue' -'-ffix-and-continue' -'-findirect-data' - Generate code suitable for fast turnaround development, such as to - allow GDB to dynamically load '.o' files into already-running - programs. '-findirect-data' and '-ffix-and-continue' are provided - for backwards compatibility. - -'-all_load' - Loads all members of static archive libraries. See man ld(1) for - more information. - -'-arch_errors_fatal' - Cause the errors having to do with files that have the wrong - architecture to be fatal. - -'-bind_at_load' - Causes the output file to be marked such that the dynamic linker - will bind all undefined references when the file is loaded or - launched. - -'-bundle' - Produce a Mach-o bundle format file. See man ld(1) for more - information. - -'-bundle_loader EXECUTABLE' - This option specifies the EXECUTABLE that will load the build - output file being linked. See man ld(1) for more information. - -'-dynamiclib' - When passed this option, GCC produces a dynamic library instead of - an executable when linking, using the Darwin 'libtool' command. - -'-force_cpusubtype_ALL' - This causes GCC's output file to have the ALL subtype, instead of - one controlled by the '-mcpu' or '-march' option. - -'-allowable_client CLIENT_NAME' -'-client_name' -'-compatibility_version' -'-current_version' -'-dead_strip' -'-dependency-file' -'-dylib_file' -'-dylinker_install_name' -'-dynamic' -'-exported_symbols_list' -'-filelist' -'-flat_namespace' -'-force_flat_namespace' -'-headerpad_max_install_names' -'-image_base' -'-init' -'-install_name' -'-keep_private_externs' -'-multi_module' -'-multiply_defined' -'-multiply_defined_unused' -'-noall_load' -'-no_dead_strip_inits_and_terms' -'-nofixprebinding' -'-nomultidefs' -'-noprebind' -'-noseglinkedit' -'-pagezero_size' -'-prebind' -'-prebind_all_twolevel_modules' -'-private_bundle' -'-read_only_relocs' -'-sectalign' -'-sectobjectsymbols' -'-whyload' -'-seg1addr' -'-sectcreate' -'-sectobjectsymbols' -'-sectorder' -'-segaddr' -'-segs_read_only_addr' -'-segs_read_write_addr' -'-seg_addr_table' -'-seg_addr_table_filename' -'-seglinkedit' -'-segprot' -'-segs_read_only_addr' -'-segs_read_write_addr' -'-single_module' -'-static' -'-sub_library' -'-sub_umbrella' -'-twolevel_namespace' -'-umbrella' -'-undefined' -'-unexported_symbols_list' -'-weak_reference_mismatches' -'-whatsloaded' - These options are passed to the Darwin linker. The Darwin linker - man page describes them in detail. - - -File: gcc.info, Node: DEC Alpha Options, Next: FR30 Options, Prev: Darwin Options, Up: Submodel Options - -3.17.11 DEC Alpha Options -------------------------- - -These '-m' options are defined for the DEC Alpha implementations: - -'-mno-soft-float' -'-msoft-float' - Use (do not use) the hardware floating-point instructions for - floating-point operations. When '-msoft-float' is specified, - functions in 'libgcc.a' are used to perform floating-point - operations. Unless they are replaced by routines that emulate the - floating-point operations, or compiled in such a way as to call - such emulations routines, these routines issue floating-point - operations. If you are compiling for an Alpha without - floating-point operations, you must ensure that the library is - built so as not to call them. - - Note that Alpha implementations without floating-point operations - are required to have floating-point registers. - -'-mfp-reg' -'-mno-fp-regs' - Generate code that uses (does not use) the floating-point register - set. '-mno-fp-regs' implies '-msoft-float'. If the floating-point - register set is not used, floating-point operands are passed in - integer registers as if they were integers and floating-point - results are passed in '$0' instead of '$f0'. This is a - non-standard calling sequence, so any function with a - floating-point argument or return value called by code compiled - with '-mno-fp-regs' must also be compiled with that option. - - A typical use of this option is building a kernel that does not - use, and hence need not save and restore, any floating-point - registers. - -'-mieee' - The Alpha architecture implements floating-point hardware optimized - for maximum performance. It is mostly compliant with the IEEE - floating-point standard. However, for full compliance, software - assistance is required. This option generates code fully - IEEE-compliant code _except_ that the INEXACT-FLAG is not - maintained (see below). If this option is turned on, the - preprocessor macro '_IEEE_FP' is defined during compilation. The - resulting code is less efficient but is able to correctly support - denormalized numbers and exceptional IEEE values such as - not-a-number and plus/minus infinity. Other Alpha compilers call - this option '-ieee_with_no_inexact'. - -'-mieee-with-inexact' - This is like '-mieee' except the generated code also maintains the - IEEE INEXACT-FLAG. Turning on this option causes the generated - code to implement fully-compliant IEEE math. In addition to - '_IEEE_FP', '_IEEE_FP_EXACT' is defined as a preprocessor macro. - On some Alpha implementations the resulting code may execute - significantly slower than the code generated by default. Since - there is very little code that depends on the INEXACT-FLAG, you - should normally not specify this option. Other Alpha compilers - call this option '-ieee_with_inexact'. - -'-mfp-trap-mode=TRAP-MODE' - This option controls what floating-point related traps are enabled. - Other Alpha compilers call this option '-fptm TRAP-MODE'. The trap - mode can be set to one of four values: - - 'n' - This is the default (normal) setting. The only traps that are - enabled are the ones that cannot be disabled in software - (e.g., division by zero trap). - - 'u' - In addition to the traps enabled by 'n', underflow traps are - enabled as well. - - 'su' - Like 'u', but the instructions are marked to be safe for - software completion (see Alpha architecture manual for - details). - - 'sui' - Like 'su', but inexact traps are enabled as well. - -'-mfp-rounding-mode=ROUNDING-MODE' - Selects the IEEE rounding mode. Other Alpha compilers call this - option '-fprm ROUNDING-MODE'. The ROUNDING-MODE can be one of: - - 'n' - Normal IEEE rounding mode. Floating-point numbers are rounded - towards the nearest machine number or towards the even machine - number in case of a tie. - - 'm' - Round towards minus infinity. - - 'c' - Chopped rounding mode. Floating-point numbers are rounded - towards zero. - - 'd' - Dynamic rounding mode. A field in the floating-point control - register (FPCR, see Alpha architecture reference manual) - controls the rounding mode in effect. The C library - initializes this register for rounding towards plus infinity. - Thus, unless your program modifies the FPCR, 'd' corresponds - to round towards plus infinity. - -'-mtrap-precision=TRAP-PRECISION' - In the Alpha architecture, floating-point traps are imprecise. - This means without software assistance it is impossible to recover - from a floating trap and program execution normally needs to be - terminated. GCC can generate code that can assist operating system - trap handlers in determining the exact location that caused a - floating-point trap. Depending on the requirements of an - application, different levels of precisions can be selected: - - 'p' - Program precision. This option is the default and means a - trap handler can only identify which program caused a - floating-point exception. - - 'f' - Function precision. The trap handler can determine the - function that caused a floating-point exception. - - 'i' - Instruction precision. The trap handler can determine the - exact instruction that caused a floating-point exception. - - Other Alpha compilers provide the equivalent options called - '-scope_safe' and '-resumption_safe'. - -'-mieee-conformant' - This option marks the generated code as IEEE conformant. You must - not use this option unless you also specify '-mtrap-precision=i' - and either '-mfp-trap-mode=su' or '-mfp-trap-mode=sui'. Its only - effect is to emit the line '.eflag 48' in the function prologue of - the generated assembly file. - -'-mbuild-constants' - Normally GCC examines a 32- or 64-bit integer constant to see if it - can construct it from smaller constants in two or three - instructions. If it cannot, it outputs the constant as a literal - and generates code to load it from the data segment at run time. - - Use this option to require GCC to construct _all_ integer constants - using code, even if it takes more instructions (the maximum is - six). - - You typically use this option to build a shared library dynamic - loader. Itself a shared library, it must relocate itself in memory - before it can find the variables and constants in its own data - segment. - -'-mbwx' -'-mno-bwx' -'-mcix' -'-mno-cix' -'-mfix' -'-mno-fix' -'-mmax' -'-mno-max' - Indicate whether GCC should generate code to use the optional BWX, - CIX, FIX and MAX instruction sets. The default is to use the - instruction sets supported by the CPU type specified via '-mcpu=' - option or that of the CPU on which GCC was built if none is - specified. - -'-mfloat-vax' -'-mfloat-ieee' - Generate code that uses (does not use) VAX F and G floating-point - arithmetic instead of IEEE single and double precision. - -'-mexplicit-relocs' -'-mno-explicit-relocs' - Older Alpha assemblers provided no way to generate symbol - relocations except via assembler macros. Use of these macros does - not allow optimal instruction scheduling. GNU binutils as of - version 2.12 supports a new syntax that allows the compiler to - explicitly mark which relocations should apply to which - instructions. This option is mostly useful for debugging, as GCC - detects the capabilities of the assembler when it is built and sets - the default accordingly. - -'-msmall-data' -'-mlarge-data' - When '-mexplicit-relocs' is in effect, static data is accessed via - "gp-relative" relocations. When '-msmall-data' is used, objects 8 - bytes long or smaller are placed in a "small data area" (the - '.sdata' and '.sbss' sections) and are accessed via 16-bit - relocations off of the '$gp' register. This limits the size of the - small data area to 64KB, but allows the variables to be directly - accessed via a single instruction. - - The default is '-mlarge-data'. With this option the data area is - limited to just below 2GB. Programs that require more than 2GB of - data must use 'malloc' or 'mmap' to allocate the data in the heap - instead of in the program's data segment. - - When generating code for shared libraries, '-fpic' implies - '-msmall-data' and '-fPIC' implies '-mlarge-data'. - -'-msmall-text' -'-mlarge-text' - When '-msmall-text' is used, the compiler assumes that the code of - the entire program (or shared library) fits in 4MB, and is thus - reachable with a branch instruction. When '-msmall-data' is used, - the compiler can assume that all local symbols share the same '$gp' - value, and thus reduce the number of instructions required for a - function call from 4 to 1. - - The default is '-mlarge-text'. - -'-mcpu=CPU_TYPE' - Set the instruction set and instruction scheduling parameters for - machine type CPU_TYPE. You can specify either the 'EV' style name - or the corresponding chip number. GCC supports scheduling - parameters for the EV4, EV5 and EV6 family of processors and - chooses the default values for the instruction set from the - processor you specify. If you do not specify a processor type, GCC - defaults to the processor on which the compiler was built. - - Supported values for CPU_TYPE are - - 'ev4' - 'ev45' - '21064' - Schedules as an EV4 and has no instruction set extensions. - - 'ev5' - '21164' - Schedules as an EV5 and has no instruction set extensions. - - 'ev56' - '21164a' - Schedules as an EV5 and supports the BWX extension. - - 'pca56' - '21164pc' - '21164PC' - Schedules as an EV5 and supports the BWX and MAX extensions. - - 'ev6' - '21264' - Schedules as an EV6 and supports the BWX, FIX, and MAX - extensions. - - 'ev67' - '21264a' - Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX - extensions. - - Native toolchains also support the value 'native', which selects - the best architecture option for the host processor. - '-mcpu=native' has no effect if GCC does not recognize the - processor. - -'-mtune=CPU_TYPE' - Set only the instruction scheduling parameters for machine type - CPU_TYPE. The instruction set is not changed. - - Native toolchains also support the value 'native', which selects - the best architecture option for the host processor. - '-mtune=native' has no effect if GCC does not recognize the - processor. - -'-mmemory-latency=TIME' - Sets the latency the scheduler should assume for typical memory - references as seen by the application. This number is highly - dependent on the memory access patterns used by the application and - the size of the external cache on the machine. - - Valid options for TIME are - - 'NUMBER' - A decimal number representing clock cycles. - - 'L1' - 'L2' - 'L3' - 'main' - The compiler contains estimates of the number of clock cycles - for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches - (also called Dcache, Scache, and Bcache), as well as to main - memory. Note that L3 is only valid for EV5. - - -File: gcc.info, Node: FR30 Options, Next: FRV Options, Prev: DEC Alpha Options, Up: Submodel Options - -3.17.12 FR30 Options --------------------- - -These options are defined specifically for the FR30 port. - -'-msmall-model' - Use the small address space model. This can produce smaller code, - but it does assume that all symbolic values and addresses fit into - a 20-bit range. - -'-mno-lsim' - Assume that runtime support has been provided and so there is no - need to include the simulator library ('libsim.a') on the linker - command line. - - -File: gcc.info, Node: FRV Options, Next: GNU/Linux Options, Prev: FR30 Options, Up: Submodel Options - -3.17.13 FRV Options -------------------- - -'-mgpr-32' - - Only use the first 32 general-purpose registers. - -'-mgpr-64' - - Use all 64 general-purpose registers. - -'-mfpr-32' - - Use only the first 32 floating-point registers. - -'-mfpr-64' - - Use all 64 floating-point registers. - -'-mhard-float' - - Use hardware instructions for floating-point operations. - -'-msoft-float' - - Use library routines for floating-point operations. - -'-malloc-cc' - - Dynamically allocate condition code registers. - -'-mfixed-cc' - - Do not try to dynamically allocate condition code registers, only - use 'icc0' and 'fcc0'. - -'-mdword' - - Change ABI to use double word insns. - -'-mno-dword' - - Do not use double word instructions. - -'-mdouble' - - Use floating-point double instructions. - -'-mno-double' - - Do not use floating-point double instructions. - -'-mmedia' - - Use media instructions. - -'-mno-media' - - Do not use media instructions. - -'-mmuladd' - - Use multiply and add/subtract instructions. - -'-mno-muladd' - - Do not use multiply and add/subtract instructions. - -'-mfdpic' - - Select the FDPIC ABI, which uses function descriptors to represent - pointers to functions. Without any PIC/PIE-related options, it - implies '-fPIE'. With '-fpic' or '-fpie', it assumes GOT entries - and small data are within a 12-bit range from the GOT base address; - with '-fPIC' or '-fPIE', GOT offsets are computed with 32 bits. - With a 'bfin-elf' target, this option implies '-msim'. - -'-minline-plt' - - Enable inlining of PLT entries in function calls to functions that - are not known to bind locally. It has no effect without '-mfdpic'. - It's enabled by default if optimizing for speed and compiling for - shared libraries (i.e., '-fPIC' or '-fpic'), or when an - optimization option such as '-O3' or above is present in the - command line. - -'-mTLS' - - Assume a large TLS segment when generating thread-local code. - -'-mtls' - - Do not assume a large TLS segment when generating thread-local - code. - -'-mgprel-ro' - - Enable the use of 'GPREL' relocations in the FDPIC ABI for data - that is known to be in read-only sections. It's enabled by - default, except for '-fpic' or '-fpie': even though it may help - make the global offset table smaller, it trades 1 instruction for - 4. With '-fPIC' or '-fPIE', it trades 3 instructions for 4, one of - which may be shared by multiple symbols, and it avoids the need for - a GOT entry for the referenced symbol, so it's more likely to be a - win. If it is not, '-mno-gprel-ro' can be used to disable it. - -'-multilib-library-pic' - - Link with the (library, not FD) pic libraries. It's implied by - '-mlibrary-pic', as well as by '-fPIC' and '-fpic' without - '-mfdpic'. You should never have to use it explicitly. - -'-mlinked-fp' - - Follow the EABI requirement of always creating a frame pointer - whenever a stack frame is allocated. This option is enabled by - default and can be disabled with '-mno-linked-fp'. - -'-mlong-calls' - - Use indirect addressing to call functions outside the current - compilation unit. This allows the functions to be placed anywhere - within the 32-bit address space. - -'-malign-labels' - - Try to align labels to an 8-byte boundary by inserting NOPs into - the previous packet. This option only has an effect when VLIW - packing is enabled. It doesn't create new packets; it merely adds - NOPs to existing ones. - -'-mlibrary-pic' - - Generate position-independent EABI code. - -'-macc-4' - - Use only the first four media accumulator registers. - -'-macc-8' - - Use all eight media accumulator registers. - -'-mpack' - - Pack VLIW instructions. - -'-mno-pack' - - Do not pack VLIW instructions. - -'-mno-eflags' - - Do not mark ABI switches in e_flags. - -'-mcond-move' - - Enable the use of conditional-move instructions (default). - - This switch is mainly for debugging the compiler and will likely be - removed in a future version. - -'-mno-cond-move' - - Disable the use of conditional-move instructions. - - This switch is mainly for debugging the compiler and will likely be - removed in a future version. - -'-mscc' - - Enable the use of conditional set instructions (default). - - This switch is mainly for debugging the compiler and will likely be - removed in a future version. - -'-mno-scc' - - Disable the use of conditional set instructions. - - This switch is mainly for debugging the compiler and will likely be - removed in a future version. - -'-mcond-exec' - - Enable the use of conditional execution (default). - - This switch is mainly for debugging the compiler and will likely be - removed in a future version. - -'-mno-cond-exec' - - Disable the use of conditional execution. - - This switch is mainly for debugging the compiler and will likely be - removed in a future version. - -'-mvliw-branch' - - Run a pass to pack branches into VLIW instructions (default). - - This switch is mainly for debugging the compiler and will likely be - removed in a future version. - -'-mno-vliw-branch' - - Do not run a pass to pack branches into VLIW instructions. - - This switch is mainly for debugging the compiler and will likely be - removed in a future version. - -'-mmulti-cond-exec' - - Enable optimization of '&&' and '||' in conditional execution - (default). - - This switch is mainly for debugging the compiler and will likely be - removed in a future version. - -'-mno-multi-cond-exec' - - Disable optimization of '&&' and '||' in conditional execution. - - This switch is mainly for debugging the compiler and will likely be - removed in a future version. - -'-mnested-cond-exec' - - Enable nested conditional execution optimizations (default). - - This switch is mainly for debugging the compiler and will likely be - removed in a future version. - -'-mno-nested-cond-exec' - - Disable nested conditional execution optimizations. - - This switch is mainly for debugging the compiler and will likely be - removed in a future version. - -'-moptimize-membar' - - This switch removes redundant 'membar' instructions from the - compiler-generated code. It is enabled by default. - -'-mno-optimize-membar' - - This switch disables the automatic removal of redundant 'membar' - instructions from the generated code. - -'-mtomcat-stats' - - Cause gas to print out tomcat statistics. - -'-mcpu=CPU' - - Select the processor type for which to generate code. Possible - values are 'frv', 'fr550', 'tomcat', 'fr500', 'fr450', 'fr405', - 'fr400', 'fr300' and 'simple'. - - -File: gcc.info, Node: GNU/Linux Options, Next: H8/300 Options, Prev: FRV Options, Up: Submodel Options - -3.17.14 GNU/Linux Options -------------------------- - -These '-m' options are defined for GNU/Linux targets: - -'-mglibc' - Use the GNU C library. This is the default except on - '*-*-linux-*uclibc*' and '*-*-linux-*android*' targets. - -'-muclibc' - Use uClibc C library. This is the default on '*-*-linux-*uclibc*' - targets. - -'-mbionic' - Use Bionic C library. This is the default on '*-*-linux-*android*' - targets. - -'-mandroid' - Compile code compatible with Android platform. This is the default - on '*-*-linux-*android*' targets. - - When compiling, this option enables '-mbionic', '-fPIC', - '-fno-exceptions' and '-fno-rtti' by default. When linking, this - option makes the GCC driver pass Android-specific options to the - linker. Finally, this option causes the preprocessor macro - '__ANDROID__' to be defined. - -'-tno-android-cc' - Disable compilation effects of '-mandroid', i.e., do not enable - '-mbionic', '-fPIC', '-fno-exceptions' and '-fno-rtti' by default. - -'-tno-android-ld' - Disable linking effects of '-mandroid', i.e., pass standard Linux - linking options to the linker. - - -File: gcc.info, Node: H8/300 Options, Next: HPPA Options, Prev: GNU/Linux Options, Up: Submodel Options - -3.17.15 H8/300 Options ----------------------- - -These '-m' options are defined for the H8/300 implementations: - -'-mrelax' - Shorten some address references at link time, when possible; uses - the linker option '-relax'. *Note 'ld' and the H8/300: (ld)H8/300, - for a fuller description. - -'-mh' - Generate code for the H8/300H. - -'-ms' - Generate code for the H8S. - -'-mn' - Generate code for the H8S and H8/300H in the normal mode. This - switch must be used either with '-mh' or '-ms'. - -'-ms2600' - Generate code for the H8S/2600. This switch must be used with - '-ms'. - -'-mexr' - Extended registers are stored on stack before execution of function - with monitor attribute. Default option is '-mexr'. This option is - valid only for H8S targets. - -'-mno-exr' - Extended registers are not stored on stack before execution of - function with monitor attribute. Default option is '-mno-exr'. - This option is valid only for H8S targets. - -'-mint32' - Make 'int' data 32 bits by default. - -'-malign-300' - On the H8/300H and H8S, use the same alignment rules as for the - H8/300. The default for the H8/300H and H8S is to align longs and - floats on 4-byte boundaries. '-malign-300' causes them to be - aligned on 2-byte boundaries. This option has no effect on the - H8/300. - - -File: gcc.info, Node: HPPA Options, Next: i386 and x86-64 Options, Prev: H8/300 Options, Up: Submodel Options - -3.17.16 HPPA Options --------------------- - -These '-m' options are defined for the HPPA family of computers: - -'-march=ARCHITECTURE-TYPE' - Generate code for the specified architecture. The choices for - ARCHITECTURE-TYPE are '1.0' for PA 1.0, '1.1' for PA 1.1, and '2.0' - for PA 2.0 processors. Refer to '/usr/lib/sched.models' on an - HP-UX system to determine the proper architecture option for your - machine. Code compiled for lower numbered architectures runs on - higher numbered architectures, but not the other way around. - -'-mpa-risc-1-0' -'-mpa-risc-1-1' -'-mpa-risc-2-0' - Synonyms for '-march=1.0', '-march=1.1', and '-march=2.0' - respectively. - -'-mjump-in-delay' - Fill delay slots of function calls with unconditional jump - instructions by modifying the return pointer for the function call - to be the target of the conditional jump. - -'-mdisable-fpregs' - Prevent floating-point registers from being used in any manner. - This is necessary for compiling kernels that perform lazy context - switching of floating-point registers. If you use this option and - attempt to perform floating-point operations, the compiler aborts. - -'-mdisable-indexing' - Prevent the compiler from using indexing address modes. This - avoids some rather obscure problems when compiling MIG generated - code under MACH. - -'-mno-space-regs' - Generate code that assumes the target has no space registers. This - allows GCC to generate faster indirect calls and use unscaled index - address modes. - - Such code is suitable for level 0 PA systems and kernels. - -'-mfast-indirect-calls' - Generate code that assumes calls never cross space boundaries. - This allows GCC to emit code that performs faster indirect calls. - - This option does not work in the presence of shared libraries or - nested functions. - -'-mfixed-range=REGISTER-RANGE' - Generate code treating the given register range as fixed registers. - A fixed register is one that the register allocator cannot use. - This is useful when compiling kernel code. A register range is - specified as two registers separated by a dash. Multiple register - ranges can be specified separated by a comma. - -'-mlong-load-store' - Generate 3-instruction load and store sequences as sometimes - required by the HP-UX 10 linker. This is equivalent to the '+k' - option to the HP compilers. - -'-mportable-runtime' - Use the portable calling conventions proposed by HP for ELF - systems. - -'-mgas' - Enable the use of assembler directives only GAS understands. - -'-mschedule=CPU-TYPE' - Schedule code according to the constraints for the machine type - CPU-TYPE. The choices for CPU-TYPE are '700' '7100', '7100LC', - '7200', '7300' and '8000'. Refer to '/usr/lib/sched.models' on an - HP-UX system to determine the proper scheduling option for your - machine. The default scheduling is '8000'. - -'-mlinker-opt' - Enable the optimization pass in the HP-UX linker. Note this makes - symbolic debugging impossible. It also triggers a bug in the HP-UX - 8 and HP-UX 9 linkers in which they give bogus error messages when - linking some programs. - -'-msoft-float' - Generate output containing library calls for floating point. - *Warning:* the requisite libraries are not available for all HPPA - targets. Normally the facilities of the machine's usual C compiler - are used, but this cannot be done directly in cross-compilation. - You must make your own arrangements to provide suitable library - functions for cross-compilation. - - '-msoft-float' changes the calling convention in the output file; - therefore, it is only useful if you compile _all_ of a program with - this option. In particular, you need to compile 'libgcc.a', the - library that comes with GCC, with '-msoft-float' in order for this - to work. - -'-msio' - Generate the predefine, '_SIO', for server IO. The default is - '-mwsio'. This generates the predefines, '__hp9000s700', - '__hp9000s700__' and '_WSIO', for workstation IO. These options - are available under HP-UX and HI-UX. - -'-mgnu-ld' - Use options specific to GNU 'ld'. This passes '-shared' to 'ld' - when building a shared library. It is the default when GCC is - configured, explicitly or implicitly, with the GNU linker. This - option does not affect which 'ld' is called; it only changes what - parameters are passed to that 'ld'. The 'ld' that is called is - determined by the '--with-ld' configure option, GCC's program - search path, and finally by the user's 'PATH'. The linker used by - GCC can be printed using 'which `gcc -print-prog-name=ld`'. This - option is only available on the 64-bit HP-UX GCC, i.e. configured - with 'hppa*64*-*-hpux*'. - -'-mhp-ld' - Use options specific to HP 'ld'. This passes '-b' to 'ld' when - building a shared library and passes '+Accept TypeMismatch' to 'ld' - on all links. It is the default when GCC is configured, explicitly - or implicitly, with the HP linker. This option does not affect - which 'ld' is called; it only changes what parameters are passed to - that 'ld'. The 'ld' that is called is determined by the - '--with-ld' configure option, GCC's program search path, and - finally by the user's 'PATH'. The linker used by GCC can be - printed using 'which `gcc -print-prog-name=ld`'. This option is - only available on the 64-bit HP-UX GCC, i.e. configured with - 'hppa*64*-*-hpux*'. - -'-mlong-calls' - Generate code that uses long call sequences. This ensures that a - call is always able to reach linker generated stubs. The default - is to generate long calls only when the distance from the call site - to the beginning of the function or translation unit, as the case - may be, exceeds a predefined limit set by the branch type being - used. The limits for normal calls are 7,600,000 and 240,000 bytes, - respectively for the PA 2.0 and PA 1.X architectures. Sibcalls are - always limited at 240,000 bytes. - - Distances are measured from the beginning of functions when using - the '-ffunction-sections' option, or when using the '-mgas' and - '-mno-portable-runtime' options together under HP-UX with the SOM - linker. - - It is normally not desirable to use this option as it degrades - performance. However, it may be useful in large applications, - particularly when partial linking is used to build the application. - - The types of long calls used depends on the capabilities of the - assembler and linker, and the type of code being generated. The - impact on systems that support long absolute calls, and long pic - symbol-difference or pc-relative calls should be relatively small. - However, an indirect call is used on 32-bit ELF systems in pic code - and it is quite long. - -'-munix=UNIX-STD' - Generate compiler predefines and select a startfile for the - specified UNIX standard. The choices for UNIX-STD are '93', '95' - and '98'. '93' is supported on all HP-UX versions. '95' is - available on HP-UX 10.10 and later. '98' is available on HP-UX - 11.11 and later. The default values are '93' for HP-UX 10.00, '95' - for HP-UX 10.10 though to 11.00, and '98' for HP-UX 11.11 and - later. - - '-munix=93' provides the same predefines as GCC 3.3 and 3.4. - '-munix=95' provides additional predefines for 'XOPEN_UNIX' and - '_XOPEN_SOURCE_EXTENDED', and the startfile 'unix95.o'. - '-munix=98' provides additional predefines for '_XOPEN_UNIX', - '_XOPEN_SOURCE_EXTENDED', '_INCLUDE__STDC_A1_SOURCE' and - '_INCLUDE_XOPEN_SOURCE_500', and the startfile 'unix98.o'. - - It is _important_ to note that this option changes the interfaces - for various library routines. It also affects the operational - behavior of the C library. Thus, _extreme_ care is needed in using - this option. - - Library code that is intended to operate with more than one UNIX - standard must test, set and restore the variable - __XPG4_EXTENDED_MASK as appropriate. Most GNU software doesn't - provide this capability. - -'-nolibdld' - Suppress the generation of link options to search libdld.sl when - the '-static' option is specified on HP-UX 10 and later. - -'-static' - The HP-UX implementation of setlocale in libc has a dependency on - libdld.sl. There isn't an archive version of libdld.sl. Thus, - when the '-static' option is specified, special link options are - needed to resolve this dependency. - - On HP-UX 10 and later, the GCC driver adds the necessary options to - link with libdld.sl when the '-static' option is specified. This - causes the resulting binary to be dynamic. On the 64-bit port, the - linkers generate dynamic binaries by default in any case. The - '-nolibdld' option can be used to prevent the GCC driver from - adding these link options. - -'-threads' - Add support for multithreading with the "dce thread" library under - HP-UX. This option sets flags for both the preprocessor and - linker. - - -File: gcc.info, Node: i386 and x86-64 Options, Next: i386 and x86-64 Windows Options, Prev: HPPA Options, Up: Submodel Options - -3.17.17 Intel 386 and AMD x86-64 Options ----------------------------------------- - -These '-m' options are defined for the i386 and x86-64 family of -computers: - -'-march=CPU-TYPE' - Generate instructions for the machine type CPU-TYPE. In contrast - to '-mtune=CPU-TYPE', which merely tunes the generated code for the - specified CPU-TYPE, '-march=CPU-TYPE' allows GCC to generate code - that may not run at all on processors other than the one indicated. - Specifying '-march=CPU-TYPE' implies '-mtune=CPU-TYPE'. - - The choices for CPU-TYPE are: - - 'native' - This selects the CPU to generate code for at compilation time - by determining the processor type of the compiling machine. - Using '-march=native' enables all instruction subsets - supported by the local machine (hence the result might not run - on different machines). Using '-mtune=native' produces code - optimized for the local machine under the constraints of the - selected instruction set. - - 'i386' - Original Intel i386 CPU. - - 'i486' - Intel i486 CPU. (No scheduling is implemented for this chip.) - - 'i586' - 'pentium' - Intel Pentium CPU with no MMX support. - - 'pentium-mmx' - Intel Pentium MMX CPU, based on Pentium core with MMX - instruction set support. - - 'pentiumpro' - Intel Pentium Pro CPU. - - 'i686' - When used with '-march', the Pentium Pro instruction set is - used, so the code runs on all i686 family chips. When used - with '-mtune', it has the same meaning as 'generic'. - - 'pentium2' - Intel Pentium II CPU, based on Pentium Pro core with MMX - instruction set support. - - 'pentium3' - 'pentium3m' - Intel Pentium III CPU, based on Pentium Pro core with MMX and - SSE instruction set support. - - 'pentium-m' - Intel Pentium M; low-power version of Intel Pentium III CPU - with MMX, SSE and SSE2 instruction set support. Used by - Centrino notebooks. - - 'pentium4' - 'pentium4m' - Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set - support. - - 'prescott' - Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 - and SSE3 instruction set support. - - 'nocona' - Improved version of Intel Pentium 4 CPU with 64-bit - extensions, MMX, SSE, SSE2 and SSE3 instruction set support. - - 'core2' - Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 - and SSSE3 instruction set support. - - 'nehalem' - Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, - SSE3, SSSE3, SSE4.1, SSE4.2 and POPCNT instruction set - support. - - 'westmere' - Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2, - SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES and PCLMUL - instruction set support. - - 'sandybridge' - Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, - SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES and PCLMUL - instruction set support. - - 'ivybridge' - Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, - SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL, - FSGSBASE, RDRND and F16C instruction set support. - - 'haswell' - Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE, - SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, - PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction - set support. - - 'broadwell' - Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE, - SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, - PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX - and PREFETCHW instruction set support. - - 'bonnell' - Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE, - SSE2, SSE3 and SSSE3 instruction set support. - - 'silvermont' - Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE, - SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL and - RDRND instruction set support. - - 'k6' - AMD K6 CPU with MMX instruction set support. - - 'k6-2' - 'k6-3' - Improved versions of AMD K6 CPU with MMX and 3DNow! - instruction set support. - - 'athlon' - 'athlon-tbird' - AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE - prefetch instructions support. - - 'athlon-4' - 'athlon-xp' - 'athlon-mp' - Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and - full SSE instruction set support. - - 'k8' - 'opteron' - 'athlon64' - 'athlon-fx' - Processors based on the AMD K8 core with x86-64 instruction - set support, including the AMD Opteron, Athlon 64, and Athlon - 64 FX processors. (This supersets MMX, SSE, SSE2, 3DNow!, - enhanced 3DNow! and 64-bit instruction set extensions.) - - 'k8-sse3' - 'opteron-sse3' - 'athlon64-sse3' - Improved versions of AMD K8 cores with SSE3 instruction set - support. - - 'amdfam10' - 'barcelona' - CPUs based on AMD Family 10h cores with x86-64 instruction set - support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, - enhanced 3DNow!, ABM and 64-bit instruction set extensions.) - - 'bdver1' - CPUs based on AMD Family 15h cores with x86-64 instruction set - support. (This supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL, - CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM - and 64-bit instruction set extensions.) - 'bdver2' - AMD Family 15h core based CPUs with x86-64 instruction set - support. (This supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP, - LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, - SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.) - 'bdver3' - AMD Family 15h core based CPUs with x86-64 instruction set - support. (This supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE, - AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, - SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set - extensions. - 'bdver4' - AMD Family 15h core based CPUs with x86-64 instruction set - support. (This supersets BMI, BMI2, TBM, F16C, FMA, FMA4, - FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCL_MUL, CX16, MOVBE, MMX, - SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit - instruction set extensions. - - 'btver1' - CPUs based on AMD Family 14h cores with x86-64 instruction set - support. (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, - CX16, ABM and 64-bit instruction set extensions.) - - 'btver2' - CPUs based on AMD Family 16h cores with x86-64 instruction set - support. This includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES, - SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX - and 64-bit instruction set extensions. - - 'winchip-c6' - IDT WinChip C6 CPU, dealt in same way as i486 with additional - MMX instruction set support. - - 'winchip2' - IDT WinChip 2 CPU, dealt in same way as i486 with additional - MMX and 3DNow! instruction set support. - - 'c3' - VIA C3 CPU with MMX and 3DNow! instruction set support. (No - scheduling is implemented for this chip.) - - 'c3-2' - VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set - support. (No scheduling is implemented for this chip.) - - 'geode' - AMD Geode embedded processor with MMX and 3DNow! instruction - set support. - -'-mtune=CPU-TYPE' - Tune to CPU-TYPE everything applicable about the generated code, - except for the ABI and the set of available instructions. While - picking a specific CPU-TYPE schedules things appropriately for that - particular chip, the compiler does not generate any code that - cannot run on the default machine type unless you use a - '-march=CPU-TYPE' option. For example, if GCC is configured for - i686-pc-linux-gnu then '-mtune=pentium4' generates code that is - tuned for Pentium 4 but still runs on i686 machines. - - The choices for CPU-TYPE are the same as for '-march'. In - addition, '-mtune' supports 2 extra choices for CPU-TYPE: - - 'generic' - Produce code optimized for the most common IA32/AMD64/EM64T - processors. If you know the CPU on which your code will run, - then you should use the corresponding '-mtune' or '-march' - option instead of '-mtune=generic'. But, if you do not know - exactly what CPU users of your application will have, then you - should use this option. - - As new processors are deployed in the marketplace, the - behavior of this option will change. Therefore, if you - upgrade to a newer version of GCC, code generation controlled - by this option will change to reflect the processors that are - most common at the time that version of GCC is released. - - There is no '-march=generic' option because '-march' indicates - the instruction set the compiler can use, and there is no - generic instruction set applicable to all processors. In - contrast, '-mtune' indicates the processor (or, in this case, - collection of processors) for which the code is optimized. - - 'intel' - Produce code optimized for the most current Intel processors, - which are Haswell and Silvermont for this version of GCC. If - you know the CPU on which your code will run, then you should - use the corresponding '-mtune' or '-march' option instead of - '-mtune=intel'. But, if you want your application performs - better on both Haswell and Silvermont, then you should use - this option. - - As new Intel processors are deployed in the marketplace, the - behavior of this option will change. Therefore, if you - upgrade to a newer version of GCC, code generation controlled - by this option will change to reflect the most current Intel - processors at the time that version of GCC is released. - - There is no '-march=intel' option because '-march' indicates - the instruction set the compiler can use, and there is no - common instruction set applicable to all processors. In - contrast, '-mtune' indicates the processor (or, in this case, - collection of processors) for which the code is optimized. - -'-mcpu=CPU-TYPE' - A deprecated synonym for '-mtune'. - -'-mfpmath=UNIT' - Generate floating-point arithmetic for selected unit UNIT. The - choices for UNIT are: - - '387' - Use the standard 387 floating-point coprocessor present on the - majority of chips and emulated otherwise. Code compiled with - this option runs almost everywhere. The temporary results are - computed in 80-bit precision instead of the precision - specified by the type, resulting in slightly different results - compared to most of other chips. See '-ffloat-store' for more - detailed description. - - This is the default choice for i386 compiler. - - 'sse' - Use scalar floating-point instructions present in the SSE - instruction set. This instruction set is supported by Pentium - III and newer chips, and in the AMD line by Athlon-4, Athlon - XP and Athlon MP chips. The earlier version of the SSE - instruction set supports only single-precision arithmetic, - thus the double and extended-precision arithmetic are still - done using 387. A later version, present only in Pentium 4 - and AMD x86-64 chips, supports double-precision arithmetic - too. - - For the i386 compiler, you must use '-march=CPU-TYPE', '-msse' - or '-msse2' switches to enable SSE extensions and make this - option effective. For the x86-64 compiler, these extensions - are enabled by default. - - The resulting code should be considerably faster in the - majority of cases and avoid the numerical instability problems - of 387 code, but may break some existing code that expects - temporaries to be 80 bits. - - This is the default choice for the x86-64 compiler. - - 'sse,387' - 'sse+387' - 'both' - Attempt to utilize both instruction sets at once. This - effectively doubles the amount of available registers, and on - chips with separate execution units for 387 and SSE the - execution resources too. Use this option with care, as it is - still experimental, because the GCC register allocator does - not model separate functional units well, resulting in - unstable performance. - -'-masm=DIALECT' - Output assembly instructions using selected DIALECT. Supported - choices are 'intel' or 'att' (the default). Darwin does not - support 'intel'. - -'-mieee-fp' -'-mno-ieee-fp' - Control whether or not the compiler uses IEEE floating-point - comparisons. These correctly handle the case where the result of a - comparison is unordered. - -'-msoft-float' - Generate output containing library calls for floating point. - - *Warning:* the requisite libraries are not part of GCC. Normally - the facilities of the machine's usual C compiler are used, but this - can't be done directly in cross-compilation. You must make your - own arrangements to provide suitable library functions for - cross-compilation. - - On machines where a function returns floating-point results in the - 80387 register stack, some floating-point opcodes may be emitted - even if '-msoft-float' is used. - -'-mno-fp-ret-in-387' - Do not use the FPU registers for return values of functions. - - The usual calling convention has functions return values of types - 'float' and 'double' in an FPU register, even if there is no FPU. - The idea is that the operating system should emulate an FPU. - - The option '-mno-fp-ret-in-387' causes such values to be returned - in ordinary CPU registers instead. - -'-mno-fancy-math-387' - Some 387 emulators do not support the 'sin', 'cos' and 'sqrt' - instructions for the 387. Specify this option to avoid generating - those instructions. This option is the default on FreeBSD, OpenBSD - and NetBSD. This option is overridden when '-march' indicates that - the target CPU always has an FPU and so the instruction does not - need emulation. These instructions are not generated unless you - also use the '-funsafe-math-optimizations' switch. - -'-malign-double' -'-mno-align-double' - Control whether GCC aligns 'double', 'long double', and 'long long' - variables on a two-word boundary or a one-word boundary. Aligning - 'double' variables on a two-word boundary produces code that runs - somewhat faster on a Pentium at the expense of more memory. - - On x86-64, '-malign-double' is enabled by default. - - *Warning:* if you use the '-malign-double' switch, structures - containing the above types are aligned differently than the - published application binary interface specifications for the 386 - and are not binary compatible with structures in code compiled - without that switch. - -'-m96bit-long-double' -'-m128bit-long-double' - These switches control the size of 'long double' type. The i386 - application binary interface specifies the size to be 96 bits, so - '-m96bit-long-double' is the default in 32-bit mode. - - Modern architectures (Pentium and newer) prefer 'long double' to be - aligned to an 8- or 16-byte boundary. In arrays or structures - conforming to the ABI, this is not possible. So specifying - '-m128bit-long-double' aligns 'long double' to a 16-byte boundary - by padding the 'long double' with an additional 32-bit zero. - - In the x86-64 compiler, '-m128bit-long-double' is the default - choice as its ABI specifies that 'long double' is aligned on - 16-byte boundary. - - Notice that neither of these options enable any extra precision - over the x87 standard of 80 bits for a 'long double'. - - *Warning:* if you override the default value for your target ABI, - this changes the size of structures and arrays containing 'long - double' variables, as well as modifying the function calling - convention for functions taking 'long double'. Hence they are not - binary-compatible with code compiled without that switch. - -'-mlong-double-64' -'-mlong-double-80' -'-mlong-double-128' - These switches control the size of 'long double' type. A size of - 64 bits makes the 'long double' type equivalent to the 'double' - type. This is the default for 32-bit Bionic C library. A size of - 128 bits makes the 'long double' type equivalent to the - '__float128' type. This is the default for 64-bit Bionic C - library. - - *Warning:* if you override the default value for your target ABI, - this changes the size of structures and arrays containing 'long - double' variables, as well as modifying the function calling - convention for functions taking 'long double'. Hence they are not - binary-compatible with code compiled without that switch. - -'-mlarge-data-threshold=THRESHOLD' - When '-mcmodel=medium' is specified, data objects larger than - THRESHOLD are placed in the large data section. This value must be - the same across all objects linked into the binary, and defaults to - 65535. - -'-mrtd' - Use a different function-calling convention, in which functions - that take a fixed number of arguments return with the 'ret NUM' - instruction, which pops their arguments while returning. This - saves one instruction in the caller since there is no need to pop - the arguments there. - - You can specify that an individual function is called with this - calling sequence with the function attribute 'stdcall'. You can - also override the '-mrtd' option by using the function attribute - 'cdecl'. *Note Function Attributes::. - - *Warning:* this calling convention is incompatible with the one - normally used on Unix, so you cannot use it if you need to call - libraries compiled with the Unix compiler. - - Also, you must provide function prototypes for all functions that - take variable numbers of arguments (including 'printf'); otherwise - incorrect code is generated for calls to those functions. - - In addition, seriously incorrect code results if you call a - function with too many arguments. (Normally, extra arguments are - harmlessly ignored.) - -'-mregparm=NUM' - Control how many registers are used to pass integer arguments. By - default, no registers are used to pass arguments, and at most 3 - registers can be used. You can control this behavior for a - specific function by using the function attribute 'regparm'. *Note - Function Attributes::. - - *Warning:* if you use this switch, and NUM is nonzero, then you - must build all modules with the same value, including any - libraries. This includes the system libraries and startup modules. - -'-msseregparm' - Use SSE register passing conventions for float and double arguments - and return values. You can control this behavior for a specific - function by using the function attribute 'sseregparm'. *Note - Function Attributes::. - - *Warning:* if you use this switch then you must build all modules - with the same value, including any libraries. This includes the - system libraries and startup modules. - -'-mvect8-ret-in-mem' - Return 8-byte vectors in memory instead of MMX registers. This is - the default on Solaris 8 and 9 and VxWorks to match the ABI of the - Sun Studio compilers until version 12. Later compiler versions - (starting with Studio 12 Update 1) follow the ABI used by other x86 - targets, which is the default on Solaris 10 and later. _Only_ use - this option if you need to remain compatible with existing code - produced by those previous compiler versions or older versions of - GCC. - -'-mpc32' -'-mpc64' -'-mpc80' - - Set 80387 floating-point precision to 32, 64 or 80 bits. When - '-mpc32' is specified, the significands of results of - floating-point operations are rounded to 24 bits (single - precision); '-mpc64' rounds the significands of results of - floating-point operations to 53 bits (double precision) and - '-mpc80' rounds the significands of results of floating-point - operations to 64 bits (extended double precision), which is the - default. When this option is used, floating-point operations in - higher precisions are not available to the programmer without - setting the FPU control word explicitly. - - Setting the rounding of floating-point operations to less than the - default 80 bits can speed some programs by 2% or more. Note that - some mathematical libraries assume that extended-precision (80-bit) - floating-point operations are enabled by default; routines in such - libraries could suffer significant loss of accuracy, typically - through so-called "catastrophic cancellation", when this option is - used to set the precision to less than extended precision. - -'-mstackrealign' - Realign the stack at entry. On the Intel x86, the '-mstackrealign' - option generates an alternate prologue and epilogue that realigns - the run-time stack if necessary. This supports mixing legacy codes - that keep 4-byte stack alignment with modern codes that keep - 16-byte stack alignment for SSE compatibility. See also the - attribute 'force_align_arg_pointer', applicable to individual - functions. - -'-mpreferred-stack-boundary=NUM' - Attempt to keep the stack boundary aligned to a 2 raised to NUM - byte boundary. If '-mpreferred-stack-boundary' is not specified, - the default is 4 (16 bytes or 128 bits). - - *Warning:* When generating code for the x86-64 architecture with - SSE extensions disabled, '-mpreferred-stack-boundary=3' can be used - to keep the stack boundary aligned to 8 byte boundary. Since - x86-64 ABI require 16 byte stack alignment, this is ABI - incompatible and intended to be used in controlled environment - where stack space is important limitation. This option will lead - to wrong code when functions compiled with 16 byte stack alignment - (such as functions from a standard library) are called with - misaligned stack. In this case, SSE instructions may lead to - misaligned memory access traps. In addition, variable arguments - will be handled incorrectly for 16 byte aligned objects (including - x87 long double and __int128), leading to wrong results. You must - build all modules with '-mpreferred-stack-boundary=3', including - any libraries. This includes the system libraries and startup - modules. - -'-mincoming-stack-boundary=NUM' - Assume the incoming stack is aligned to a 2 raised to NUM byte - boundary. If '-mincoming-stack-boundary' is not specified, the one - specified by '-mpreferred-stack-boundary' is used. - - On Pentium and Pentium Pro, 'double' and 'long double' values - should be aligned to an 8-byte boundary (see '-malign-double') or - suffer significant run time performance penalties. On Pentium III, - the Streaming SIMD Extension (SSE) data type '__m128' may not work - properly if it is not 16-byte aligned. - - To ensure proper alignment of this values on the stack, the stack - boundary must be as aligned as that required by any value stored on - the stack. Further, every function must be generated such that it - keeps the stack aligned. Thus calling a function compiled with a - higher preferred stack boundary from a function compiled with a - lower preferred stack boundary most likely misaligns the stack. It - is recommended that libraries that use callbacks always use the - default setting. - - This extra alignment does consume extra stack space, and generally - increases code size. Code that is sensitive to stack space usage, - such as embedded systems and operating system kernels, may want to - reduce the preferred alignment to '-mpreferred-stack-boundary=2'. - -'-mmmx' -'-mno-mmx' -'-msse' -'-mno-sse' -'-msse2' -'-mno-sse2' -'-msse3' -'-mno-sse3' -'-mssse3' -'-mno-ssse3' -'-msse4.1' -'-mno-sse4.1' -'-msse4.2' -'-mno-sse4.2' -'-msse4' -'-mno-sse4' -'-mavx' -'-mno-avx' -'-mavx2' -'-mno-avx2' -'-mavx512f' -'-mno-avx512f' -'-mavx512pf' -'-mno-avx512pf' -'-mavx512er' -'-mno-avx512er' -'-mavx512cd' -'-mno-avx512cd' -'-msha' -'-mno-sha' -'-maes' -'-mno-aes' -'-mpclmul' -'-mno-pclmul' -'-mfsgsbase' -'-mno-fsgsbase' -'-mrdrnd' -'-mno-rdrnd' -'-mf16c' -'-mno-f16c' -'-mfma' -'-mno-fma' -'-mprefetchwt1' -'-mno-prefetchwt1' -'-msse4a' -'-mno-sse4a' -'-mfma4' -'-mno-fma4' -'-mxop' -'-mno-xop' -'-mlwp' -'-mno-lwp' -'-m3dnow' -'-mno-3dnow' -'-mpopcnt' -'-mno-popcnt' -'-mabm' -'-mno-abm' -'-mbmi' -'-mbmi2' -'-mno-bmi' -'-mno-bmi2' -'-mlzcnt' -'-mno-lzcnt' -'-mfxsr' -'-mxsave' -'-mxsaveopt' -'-mrtm' -'-mtbm' -'-mno-tbm' - These switches enable or disable the use of instructions in the - MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AVX512F, AVX512PF, - AVX512ER, AVX512CD, SHA, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, - SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2, FXSR, XSAVE, XSAVEOPT, - LZCNT, RTM, or 3DNow! extended instruction sets. These extensions - are also available as built-in functions: see *note X86 Built-in - Functions::, for details of the functions enabled and disabled by - these switches. - - To generate SSE/SSE2 instructions automatically from floating-point - code (as opposed to 387 instructions), see '-mfpmath=sse'. - - GCC depresses SSEx instructions when '-mavx' is used. Instead, it - generates new AVX instructions or AVX equivalence for all SSEx - instructions when needed. - - These options enable GCC to use these extended instructions in - generated code, even without '-mfpmath=sse'. Applications that - perform run-time CPU detection must compile separate files for each - supported architecture, using the appropriate flags. In - particular, the file containing the CPU detection code should be - compiled without these options. - -'-mdump-tune-features' - This option instructs GCC to dump the names of the x86 performance - tuning features and default settings. The names can be used in - '-mtune-ctrl=FEATURE-LIST'. - -'-mtune-ctrl=FEATURE-LIST' - This option is used to do fine grain control of x86 code generation - features. FEATURE-LIST is a comma separated list of FEATURE names. - See also '-mdump-tune-features'. When specified, the FEATURE will - be turned on if it is not preceded with '^', otherwise, it will be - turned off. '-mtune-ctrl=FEATURE-LIST' is intended to be used by - GCC developers. Using it may lead to code paths not covered by - testing and can potentially result in compiler ICEs or runtime - errors. - -'-mno-default' - This option instructs GCC to turn off all tunable features. See - also '-mtune-ctrl=FEATURE-LIST' and '-mdump-tune-features'. - -'-mcld' - This option instructs GCC to emit a 'cld' instruction in the - prologue of functions that use string instructions. String - instructions depend on the DF flag to select between autoincrement - or autodecrement mode. While the ABI specifies the DF flag to be - cleared on function entry, some operating systems violate this - specification by not clearing the DF flag in their exception - dispatchers. The exception handler can be invoked with the DF flag - set, which leads to wrong direction mode when string instructions - are used. This option can be enabled by default on 32-bit x86 - targets by configuring GCC with the '--enable-cld' configure - option. Generation of 'cld' instructions can be suppressed with - the '-mno-cld' compiler option in this case. - -'-mvzeroupper' - This option instructs GCC to emit a 'vzeroupper' instruction before - a transfer of control flow out of the function to minimize the AVX - to SSE transition penalty as well as remove unnecessary 'zeroupper' - intrinsics. - -'-mprefer-avx128' - This option instructs GCC to use 128-bit AVX instructions instead - of 256-bit AVX instructions in the auto-vectorizer. - -'-mcx16' - This option enables GCC to generate 'CMPXCHG16B' instructions. - 'CMPXCHG16B' allows for atomic operations on 128-bit double - quadword (or oword) data types. This is useful for high-resolution - counters that can be updated by multiple processors (or cores). - This instruction is generated as part of atomic built-in functions: - see *note __sync Builtins:: or *note __atomic Builtins:: for - details. - -'-msahf' - This option enables generation of 'SAHF' instructions in 64-bit - code. Early Intel Pentium 4 CPUs with Intel 64 support, prior to - the introduction of Pentium 4 G1 step in December 2005, lacked the - 'LAHF' and 'SAHF' instructions which were supported by AMD64. - These are load and store instructions, respectively, for certain - status flags. In 64-bit mode, the 'SAHF' instruction is used to - optimize 'fmod', 'drem', and 'remainder' built-in functions; see - *note Other Builtins:: for details. - -'-mmovbe' - This option enables use of the 'movbe' instruction to implement - '__builtin_bswap32' and '__builtin_bswap64'. - -'-mcrc32' - This option enables built-in functions '__builtin_ia32_crc32qi', - '__builtin_ia32_crc32hi', '__builtin_ia32_crc32si' and - '__builtin_ia32_crc32di' to generate the 'crc32' machine - instruction. - -'-mrecip' - This option enables use of 'RCPSS' and 'RSQRTSS' instructions (and - their vectorized variants 'RCPPS' and 'RSQRTPS') with an additional - Newton-Raphson step to increase precision instead of 'DIVSS' and - 'SQRTSS' (and their vectorized variants) for single-precision - floating-point arguments. These instructions are generated only - when '-funsafe-math-optimizations' is enabled together with - '-finite-math-only' and '-fno-trapping-math'. Note that while the - throughput of the sequence is higher than the throughput of the - non-reciprocal instruction, the precision of the sequence can be - decreased by up to 2 ulp (i.e. the inverse of 1.0 equals - 0.99999994). - - Note that GCC implements '1.0f/sqrtf(X)' in terms of 'RSQRTSS' (or - 'RSQRTPS') already with '-ffast-math' (or the above option - combination), and doesn't need '-mrecip'. - - Also note that GCC emits the above sequence with additional - Newton-Raphson step for vectorized single-float division and - vectorized 'sqrtf(X)' already with '-ffast-math' (or the above - option combination), and doesn't need '-mrecip'. - -'-mrecip=OPT' - This option controls which reciprocal estimate instructions may be - used. OPT is a comma-separated list of options, which may be - preceded by a '!' to invert the option: - - 'all' - Enable all estimate instructions. - - 'default' - Enable the default instructions, equivalent to '-mrecip'. - - 'none' - Disable all estimate instructions, equivalent to '-mno-recip'. - - 'div' - Enable the approximation for scalar division. - - 'vec-div' - Enable the approximation for vectorized division. - - 'sqrt' - Enable the approximation for scalar square root. - - 'vec-sqrt' - Enable the approximation for vectorized square root. - - So, for example, '-mrecip=all,!sqrt' enables all of the reciprocal - approximations, except for square root. - -'-mveclibabi=TYPE' - Specifies the ABI type to use for vectorizing intrinsics using an - external library. Supported values for TYPE are 'svml' for the - Intel short vector math library and 'acml' for the AMD math core - library. To use this option, both '-ftree-vectorize' and - '-funsafe-math-optimizations' have to be enabled, and an SVML or - ACML ABI-compatible library must be specified at link time. - - GCC currently emits calls to 'vmldExp2', 'vmldLn2', 'vmldLog102', - 'vmldLog102', 'vmldPow2', 'vmldTanh2', 'vmldTan2', 'vmldAtan2', - 'vmldAtanh2', 'vmldCbrt2', 'vmldSinh2', 'vmldSin2', 'vmldAsinh2', - 'vmldAsin2', 'vmldCosh2', 'vmldCos2', 'vmldAcosh2', 'vmldAcos2', - 'vmlsExp4', 'vmlsLn4', 'vmlsLog104', 'vmlsLog104', 'vmlsPow4', - 'vmlsTanh4', 'vmlsTan4', 'vmlsAtan4', 'vmlsAtanh4', 'vmlsCbrt4', - 'vmlsSinh4', 'vmlsSin4', 'vmlsAsinh4', 'vmlsAsin4', 'vmlsCosh4', - 'vmlsCos4', 'vmlsAcosh4' and 'vmlsAcos4' for corresponding function - type when '-mveclibabi=svml' is used, and '__vrd2_sin', - '__vrd2_cos', '__vrd2_exp', '__vrd2_log', '__vrd2_log2', - '__vrd2_log10', '__vrs4_sinf', '__vrs4_cosf', '__vrs4_expf', - '__vrs4_logf', '__vrs4_log2f', '__vrs4_log10f' and '__vrs4_powf' - for the corresponding function type when '-mveclibabi=acml' is - used. - -'-mabi=NAME' - Generate code for the specified calling convention. Permissible - values are 'sysv' for the ABI used on GNU/Linux and other systems, - and 'ms' for the Microsoft ABI. The default is to use the Microsoft - ABI when targeting Microsoft Windows and the SysV ABI on all other - systems. You can control this behavior for a specific function by - using the function attribute 'ms_abi'/'sysv_abi'. *Note Function - Attributes::. - -'-mtls-dialect=TYPE' - Generate code to access thread-local storage using the 'gnu' or - 'gnu2' conventions. 'gnu' is the conservative default; 'gnu2' is - more efficient, but it may add compile- and run-time requirements - that cannot be satisfied on all systems. - -'-mpush-args' -'-mno-push-args' - Use PUSH operations to store outgoing parameters. This method is - shorter and usually equally fast as method using SUB/MOV operations - and is enabled by default. In some cases disabling it may improve - performance because of improved scheduling and reduced - dependencies. - -'-maccumulate-outgoing-args' - If enabled, the maximum amount of space required for outgoing - arguments is computed in the function prologue. This is faster on - most modern CPUs because of reduced dependencies, improved - scheduling and reduced stack usage when the preferred stack - boundary is not equal to 2. The drawback is a notable increase in - code size. This switch implies '-mno-push-args'. - -'-mthreads' - Support thread-safe exception handling on MinGW. Programs that rely - on thread-safe exception handling must compile and link all code - with the '-mthreads' option. When compiling, '-mthreads' defines - '-D_MT'; when linking, it links in a special thread helper library - '-lmingwthrd' which cleans up per-thread exception-handling data. - -'-mno-align-stringops' - Do not align the destination of inlined string operations. This - switch reduces code size and improves performance in case the - destination is already aligned, but GCC doesn't know about it. - -'-minline-all-stringops' - By default GCC inlines string operations only when the destination - is known to be aligned to least a 4-byte boundary. This enables - more inlining and increases code size, but may improve performance - of code that depends on fast 'memcpy', 'strlen', and 'memset' for - short lengths. - -'-minline-stringops-dynamically' - For string operations of unknown size, use run-time checks with - inline code for small blocks and a library call for large blocks. - -'-mstringop-strategy=ALG' - Override the internal decision heuristic for the particular - algorithm to use for inlining string operations. The allowed - values for ALG are: - - 'rep_byte' - 'rep_4byte' - 'rep_8byte' - Expand using i386 'rep' prefix of the specified size. - - 'byte_loop' - 'loop' - 'unrolled_loop' - Expand into an inline loop. - - 'libcall' - Always use a library call. - -'-mmemcpy-strategy=STRATEGY' - Override the internal decision heuristic to decide if - '__builtin_memcpy' should be inlined and what inline algorithm to - use when the expected size of the copy operation is known. - STRATEGY is a comma-separated list of ALG:MAX_SIZE:DEST_ALIGN - triplets. ALG is specified in '-mstringop-strategy', MAX_SIZE - specifies the max byte size with which inline algorithm ALG is - allowed. For the last triplet, the MAX_SIZE must be '-1'. The - MAX_SIZE of the triplets in the list must be specified in - increasing order. The minimal byte size for ALG is '0' for the - first triplet and 'MAX_SIZE + 1' of the preceding range. - -'-mmemset-strategy=STRATEGY' - The option is similar to '-mmemcpy-strategy=' except that it is to - control '__builtin_memset' expansion. - -'-momit-leaf-frame-pointer' - Don't keep the frame pointer in a register for leaf functions. - This avoids the instructions to save, set up, and restore frame - pointers and makes an extra register available in leaf functions. - The option '-fomit-leaf-frame-pointer' removes the frame pointer - for leaf functions, which might make debugging harder. - -'-mtls-direct-seg-refs' -'-mno-tls-direct-seg-refs' - Controls whether TLS variables may be accessed with offsets from - the TLS segment register ('%gs' for 32-bit, '%fs' for 64-bit), or - whether the thread base pointer must be added. Whether or not this - is valid depends on the operating system, and whether it maps the - segment to cover the entire TLS area. - - For systems that use the GNU C Library, the default is on. - -'-msse2avx' -'-mno-sse2avx' - Specify that the assembler should encode SSE instructions with VEX - prefix. The option '-mavx' turns this on by default. - -'-mfentry' -'-mno-fentry' - If profiling is active ('-pg'), put the profiling counter call - before the prologue. Note: On x86 architectures the attribute - 'ms_hook_prologue' isn't possible at the moment for '-mfentry' and - '-pg'. - -'-m8bit-idiv' -'-mno-8bit-idiv' - On some processors, like Intel Atom, 8-bit unsigned integer divide - is much faster than 32-bit/64-bit integer divide. This option - generates a run-time check. If both dividend and divisor are - within range of 0 to 255, 8-bit unsigned integer divide is used - instead of 32-bit/64-bit integer divide. - -'-mavx256-split-unaligned-load' -'-mavx256-split-unaligned-store' - Split 32-byte AVX unaligned load and store. - -'-mstack-protector-guard=GUARD' - Generate stack protection code using canary at GUARD. Supported - locations are 'global' for global canary or 'tls' for per-thread - canary in the TLS block (the default). This option has effect only - when '-fstack-protector' or '-fstack-protector-all' is specified. - - These '-m' switches are supported in addition to the above on x86-64 -processors in 64-bit environments. - -'-m32' -'-m64' -'-mx32' -'-m16' - Generate code for a 16-bit, 32-bit or 64-bit environment. The - '-m32' option sets 'int', 'long', and pointer types to 32 bits, and - generates code that runs on any i386 system. - - The '-m64' option sets 'int' to 32 bits and 'long' and pointer - types to 64 bits, and generates code for the x86-64 architecture. - For Darwin only the '-m64' option also turns off the '-fno-pic' and - '-mdynamic-no-pic' options. - - The '-mx32' option sets 'int', 'long', and pointer types to 32 - bits, and generates code for the x86-64 architecture. - - The '-m16' option is the same as '-m32', except for that it outputs - the '.code16gcc' assembly directive at the beginning of the - assembly output so that the binary can run in 16-bit mode. - -'-mno-red-zone' - Do not use a so-called "red zone" for x86-64 code. The red zone is - mandated by the x86-64 ABI; it is a 128-byte area beyond the - location of the stack pointer that is not modified by signal or - interrupt handlers and therefore can be used for temporary data - without adjusting the stack pointer. The flag '-mno-red-zone' - disables this red zone. - -'-mcmodel=small' - Generate code for the small code model: the program and its symbols - must be linked in the lower 2 GB of the address space. Pointers - are 64 bits. Programs can be statically or dynamically linked. - This is the default code model. - -'-mcmodel=kernel' - Generate code for the kernel code model. The kernel runs in the - negative 2 GB of the address space. This model has to be used for - Linux kernel code. - -'-mcmodel=medium' - Generate code for the medium model: the program is linked in the - lower 2 GB of the address space. Small symbols are also placed - there. Symbols with sizes larger than '-mlarge-data-threshold' are - put into large data or BSS sections and can be located above 2GB. - Programs can be statically or dynamically linked. - -'-mcmodel=large' - Generate code for the large model. This model makes no assumptions - about addresses and sizes of sections. - -'-maddress-mode=long' - Generate code for long address mode. This is only supported for - 64-bit and x32 environments. It is the default address mode for - 64-bit environments. - -'-maddress-mode=short' - Generate code for short address mode. This is only supported for - 32-bit and x32 environments. It is the default address mode for - 32-bit and x32 environments. - - -File: gcc.info, Node: i386 and x86-64 Windows Options, Next: IA-64 Options, Prev: i386 and x86-64 Options, Up: Submodel Options - -3.17.18 i386 and x86-64 Windows Options ---------------------------------------- - -These additional options are available for Microsoft Windows targets: - -'-mconsole' - This option specifies that a console application is to be - generated, by instructing the linker to set the PE header subsystem - type required for console applications. This option is available - for Cygwin and MinGW targets and is enabled by default on those - targets. - -'-mdll' - This option is available for Cygwin and MinGW targets. It - specifies that a DLL--a dynamic link library--is to be generated, - enabling the selection of the required runtime startup object and - entry point. - -'-mnop-fun-dllimport' - This option is available for Cygwin and MinGW targets. It - specifies that the 'dllimport' attribute should be ignored. - -'-mthread' - This option is available for MinGW targets. It specifies that - MinGW-specific thread support is to be used. - -'-municode' - This option is available for MinGW-w64 targets. It causes the - 'UNICODE' preprocessor macro to be predefined, and chooses - Unicode-capable runtime startup code. - -'-mwin32' - This option is available for Cygwin and MinGW targets. It - specifies that the typical Microsoft Windows predefined macros are - to be set in the pre-processor, but does not influence the choice - of runtime library/startup code. - -'-mwindows' - This option is available for Cygwin and MinGW targets. It - specifies that a GUI application is to be generated by instructing - the linker to set the PE header subsystem type appropriately. - -'-fno-set-stack-executable' - This option is available for MinGW targets. It specifies that the - executable flag for the stack used by nested functions isn't set. - This is necessary for binaries running in kernel mode of Microsoft - Windows, as there the User32 API, which is used to set executable - privileges, isn't available. - -'-fwritable-relocated-rdata' - This option is available for MinGW and Cygwin targets. It - specifies that relocated-data in read-only section is put into - .data section. This is a necessary for older runtimes not - supporting modification of .rdata sections for pseudo-relocation. - -'-mpe-aligned-commons' - This option is available for Cygwin and MinGW targets. It - specifies that the GNU extension to the PE file format that permits - the correct alignment of COMMON variables should be used when - generating code. It is enabled by default if GCC detects that the - target assembler found during configuration supports the feature. - - See also under *note i386 and x86-64 Options:: for standard options. - - -File: gcc.info, Node: IA-64 Options, Next: LM32 Options, Prev: i386 and x86-64 Windows Options, Up: Submodel Options - -3.17.19 IA-64 Options ---------------------- - -These are the '-m' options defined for the Intel IA-64 architecture. - -'-mbig-endian' - Generate code for a big-endian target. This is the default for - HP-UX. - -'-mlittle-endian' - Generate code for a little-endian target. This is the default for - AIX5 and GNU/Linux. - -'-mgnu-as' -'-mno-gnu-as' - Generate (or don't) code for the GNU assembler. This is the - default. - -'-mgnu-ld' -'-mno-gnu-ld' - Generate (or don't) code for the GNU linker. This is the default. - -'-mno-pic' - Generate code that does not use a global pointer register. The - result is not position independent code, and violates the IA-64 - ABI. - -'-mvolatile-asm-stop' -'-mno-volatile-asm-stop' - Generate (or don't) a stop bit immediately before and after - volatile asm statements. - -'-mregister-names' -'-mno-register-names' - Generate (or don't) 'in', 'loc', and 'out' register names for the - stacked registers. This may make assembler output more readable. - -'-mno-sdata' -'-msdata' - Disable (or enable) optimizations that use the small data section. - This may be useful for working around optimizer bugs. - -'-mconstant-gp' - Generate code that uses a single constant global pointer value. - This is useful when compiling kernel code. - -'-mauto-pic' - Generate code that is self-relocatable. This implies - '-mconstant-gp'. This is useful when compiling firmware code. - -'-minline-float-divide-min-latency' - Generate code for inline divides of floating-point values using the - minimum latency algorithm. - -'-minline-float-divide-max-throughput' - Generate code for inline divides of floating-point values using the - maximum throughput algorithm. - -'-mno-inline-float-divide' - Do not generate inline code for divides of floating-point values. - -'-minline-int-divide-min-latency' - Generate code for inline divides of integer values using the - minimum latency algorithm. - -'-minline-int-divide-max-throughput' - Generate code for inline divides of integer values using the - maximum throughput algorithm. - -'-mno-inline-int-divide' - Do not generate inline code for divides of integer values. - -'-minline-sqrt-min-latency' - Generate code for inline square roots using the minimum latency - algorithm. - -'-minline-sqrt-max-throughput' - Generate code for inline square roots using the maximum throughput - algorithm. - -'-mno-inline-sqrt' - Do not generate inline code for 'sqrt'. - -'-mfused-madd' -'-mno-fused-madd' - Do (don't) generate code that uses the fused multiply/add or - multiply/subtract instructions. The default is to use these - instructions. - -'-mno-dwarf2-asm' -'-mdwarf2-asm' - Don't (or do) generate assembler code for the DWARF 2 line number - debugging info. This may be useful when not using the GNU - assembler. - -'-mearly-stop-bits' -'-mno-early-stop-bits' - Allow stop bits to be placed earlier than immediately preceding the - instruction that triggered the stop bit. This can improve - instruction scheduling, but does not always do so. - -'-mfixed-range=REGISTER-RANGE' - Generate code treating the given register range as fixed registers. - A fixed register is one that the register allocator cannot use. - This is useful when compiling kernel code. A register range is - specified as two registers separated by a dash. Multiple register - ranges can be specified separated by a comma. - -'-mtls-size=TLS-SIZE' - Specify bit size of immediate TLS offsets. Valid values are 14, - 22, and 64. - -'-mtune=CPU-TYPE' - Tune the instruction scheduling for a particular CPU, Valid values - are 'itanium', 'itanium1', 'merced', 'itanium2', and 'mckinley'. - -'-milp32' -'-mlp64' - Generate code for a 32-bit or 64-bit environment. The 32-bit - environment sets int, long and pointer to 32 bits. The 64-bit - environment sets int to 32 bits and long and pointer to 64 bits. - These are HP-UX specific flags. - -'-mno-sched-br-data-spec' -'-msched-br-data-spec' - (Dis/En)able data speculative scheduling before reload. This - results in generation of 'ld.a' instructions and the corresponding - check instructions ('ld.c' / 'chk.a'). The default is 'disable'. - -'-msched-ar-data-spec' -'-mno-sched-ar-data-spec' - (En/Dis)able data speculative scheduling after reload. This - results in generation of 'ld.a' instructions and the corresponding - check instructions ('ld.c' / 'chk.a'). The default is 'enable'. - -'-mno-sched-control-spec' -'-msched-control-spec' - (Dis/En)able control speculative scheduling. This feature is - available only during region scheduling (i.e. before reload). This - results in generation of the 'ld.s' instructions and the - corresponding check instructions 'chk.s'. The default is - 'disable'. - -'-msched-br-in-data-spec' -'-mno-sched-br-in-data-spec' - (En/Dis)able speculative scheduling of the instructions that are - dependent on the data speculative loads before reload. This is - effective only with '-msched-br-data-spec' enabled. The default is - 'enable'. - -'-msched-ar-in-data-spec' -'-mno-sched-ar-in-data-spec' - (En/Dis)able speculative scheduling of the instructions that are - dependent on the data speculative loads after reload. This is - effective only with '-msched-ar-data-spec' enabled. The default is - 'enable'. - -'-msched-in-control-spec' -'-mno-sched-in-control-spec' - (En/Dis)able speculative scheduling of the instructions that are - dependent on the control speculative loads. This is effective only - with '-msched-control-spec' enabled. The default is 'enable'. - -'-mno-sched-prefer-non-data-spec-insns' -'-msched-prefer-non-data-spec-insns' - If enabled, data-speculative instructions are chosen for schedule - only if there are no other choices at the moment. This makes the - use of the data speculation much more conservative. The default is - 'disable'. - -'-mno-sched-prefer-non-control-spec-insns' -'-msched-prefer-non-control-spec-insns' - If enabled, control-speculative instructions are chosen for - schedule only if there are no other choices at the moment. This - makes the use of the control speculation much more conservative. - The default is 'disable'. - -'-mno-sched-count-spec-in-critical-path' -'-msched-count-spec-in-critical-path' - If enabled, speculative dependencies are considered during - computation of the instructions priorities. This makes the use of - the speculation a bit more conservative. The default is 'disable'. - -'-msched-spec-ldc' - Use a simple data speculation check. This option is on by default. - -'-msched-control-spec-ldc' - Use a simple check for control speculation. This option is on by - default. - -'-msched-stop-bits-after-every-cycle' - Place a stop bit after every cycle when scheduling. This option is - on by default. - -'-msched-fp-mem-deps-zero-cost' - Assume that floating-point stores and loads are not likely to cause - a conflict when placed into the same instruction group. This - option is disabled by default. - -'-msel-sched-dont-check-control-spec' - Generate checks for control speculation in selective scheduling. - This flag is disabled by default. - -'-msched-max-memory-insns=MAX-INSNS' - Limit on the number of memory insns per instruction group, giving - lower priority to subsequent memory insns attempting to schedule in - the same instruction group. Frequently useful to prevent cache - bank conflicts. The default value is 1. - -'-msched-max-memory-insns-hard-limit' - Makes the limit specified by 'msched-max-memory-insns' a hard - limit, disallowing more than that number in an instruction group. - Otherwise, the limit is "soft", meaning that non-memory operations - are preferred when the limit is reached, but memory operations may - still be scheduled. - - -File: gcc.info, Node: LM32 Options, Next: M32C Options, Prev: IA-64 Options, Up: Submodel Options - -3.17.20 LM32 Options --------------------- - -These '-m' options are defined for the LatticeMico32 architecture: - -'-mbarrel-shift-enabled' - Enable barrel-shift instructions. - -'-mdivide-enabled' - Enable divide and modulus instructions. - -'-mmultiply-enabled' - Enable multiply instructions. - -'-msign-extend-enabled' - Enable sign extend instructions. - -'-muser-enabled' - Enable user-defined instructions. - - -File: gcc.info, Node: M32C Options, Next: M32R/D Options, Prev: LM32 Options, Up: Submodel Options - -3.17.21 M32C Options --------------------- - -'-mcpu=NAME' - Select the CPU for which code is generated. NAME may be one of - 'r8c' for the R8C/Tiny series, 'm16c' for the M16C (up to /60) - series, 'm32cm' for the M16C/80 series, or 'm32c' for the M32C/80 - series. - -'-msim' - Specifies that the program will be run on the simulator. This - causes an alternate runtime library to be linked in which supports, - for example, file I/O. You must not use this option when - generating programs that will run on real hardware; you must - provide your own runtime library for whatever I/O functions are - needed. - -'-memregs=NUMBER' - Specifies the number of memory-based pseudo-registers GCC uses - during code generation. These pseudo-registers are used like real - registers, so there is a tradeoff between GCC's ability to fit the - code into available registers, and the performance penalty of using - memory instead of registers. Note that all modules in a program - must be compiled with the same value for this option. Because of - that, you must not use this option with GCC's default runtime - libraries. - - -File: gcc.info, Node: M32R/D Options, Next: M680x0 Options, Prev: M32C Options, Up: Submodel Options - -3.17.22 M32R/D Options ----------------------- - -These '-m' options are defined for Renesas M32R/D architectures: - -'-m32r2' - Generate code for the M32R/2. - -'-m32rx' - Generate code for the M32R/X. - -'-m32r' - Generate code for the M32R. This is the default. - -'-mmodel=small' - Assume all objects live in the lower 16MB of memory (so that their - addresses can be loaded with the 'ld24' instruction), and assume - all subroutines are reachable with the 'bl' instruction. This is - the default. - - The addressability of a particular object can be set with the - 'model' attribute. - -'-mmodel=medium' - Assume objects may be anywhere in the 32-bit address space (the - compiler generates 'seth/add3' instructions to load their - addresses), and assume all subroutines are reachable with the 'bl' - instruction. - -'-mmodel=large' - Assume objects may be anywhere in the 32-bit address space (the - compiler generates 'seth/add3' instructions to load their - addresses), and assume subroutines may not be reachable with the - 'bl' instruction (the compiler generates the much slower - 'seth/add3/jl' instruction sequence). - -'-msdata=none' - Disable use of the small data area. Variables are put into one of - '.data', '.bss', or '.rodata' (unless the 'section' attribute has - been specified). This is the default. - - The small data area consists of sections '.sdata' and '.sbss'. - Objects may be explicitly put in the small data area with the - 'section' attribute using one of these sections. - -'-msdata=sdata' - Put small global and static data in the small data area, but do not - generate special code to reference them. - -'-msdata=use' - Put small global and static data in the small data area, and - generate special instructions to reference them. - -'-G NUM' - Put global and static objects less than or equal to NUM bytes into - the small data or BSS sections instead of the normal data or BSS - sections. The default value of NUM is 8. The '-msdata' option - must be set to one of 'sdata' or 'use' for this option to have any - effect. - - All modules should be compiled with the same '-G NUM' value. - Compiling with different values of NUM may or may not work; if it - doesn't the linker gives an error message--incorrect code is not - generated. - -'-mdebug' - Makes the M32R-specific code in the compiler display some - statistics that might help in debugging programs. - -'-malign-loops' - Align all loops to a 32-byte boundary. - -'-mno-align-loops' - Do not enforce a 32-byte alignment for loops. This is the default. - -'-missue-rate=NUMBER' - Issue NUMBER instructions per cycle. NUMBER can only be 1 or 2. - -'-mbranch-cost=NUMBER' - NUMBER can only be 1 or 2. If it is 1 then branches are preferred - over conditional code, if it is 2, then the opposite applies. - -'-mflush-trap=NUMBER' - Specifies the trap number to use to flush the cache. The default - is 12. Valid numbers are between 0 and 15 inclusive. - -'-mno-flush-trap' - Specifies that the cache cannot be flushed by using a trap. - -'-mflush-func=NAME' - Specifies the name of the operating system function to call to - flush the cache. The default is __flush_cache_, but a function - call is only used if a trap is not available. - -'-mno-flush-func' - Indicates that there is no OS function for flushing the cache. - - -File: gcc.info, Node: M680x0 Options, Next: MCore Options, Prev: M32R/D Options, Up: Submodel Options - -3.17.23 M680x0 Options ----------------------- - -These are the '-m' options defined for M680x0 and ColdFire processors. -The default settings depend on which architecture was selected when the -compiler was configured; the defaults for the most common choices are -given below. - -'-march=ARCH' - Generate code for a specific M680x0 or ColdFire instruction set - architecture. Permissible values of ARCH for M680x0 architectures - are: '68000', '68010', '68020', '68030', '68040', '68060' and - 'cpu32'. ColdFire architectures are selected according to - Freescale's ISA classification and the permissible values are: - 'isaa', 'isaaplus', 'isab' and 'isac'. - - GCC defines a macro '__mcfARCH__' whenever it is generating code - for a ColdFire target. The ARCH in this macro is one of the - '-march' arguments given above. - - When used together, '-march' and '-mtune' select code that runs on - a family of similar processors but that is optimized for a - particular microarchitecture. - -'-mcpu=CPU' - Generate code for a specific M680x0 or ColdFire processor. The - M680x0 CPUs are: '68000', '68010', '68020', '68030', '68040', - '68060', '68302', '68332' and 'cpu32'. The ColdFire CPUs are given - by the table below, which also classifies the CPUs into families: - - *Family* *'-mcpu' arguments* - '51' '51' '51ac' '51ag' '51cn' '51em' '51je' '51jf' '51jg' - '51jm' '51mm' '51qe' '51qm' - '5206' '5202' '5204' '5206' - '5206e' '5206e' - '5208' '5207' '5208' - '5211a' '5210a' '5211a' - '5213' '5211' '5212' '5213' - '5216' '5214' '5216' - '52235' '52230' '52231' '52232' '52233' '52234' '52235' - '5225' '5224' '5225' - '52259' '52252' '52254' '52255' '52256' '52258' '52259' - '5235' '5232' '5233' '5234' '5235' '523x' - '5249' '5249' - '5250' '5250' - '5271' '5270' '5271' - '5272' '5272' - '5275' '5274' '5275' - '5282' '5280' '5281' '5282' '528x' - '53017' '53011' '53012' '53013' '53014' '53015' '53016' '53017' - '5307' '5307' - '5329' '5327' '5328' '5329' '532x' - '5373' '5372' '5373' '537x' - '5407' '5407' - '5475' '5470' '5471' '5472' '5473' '5474' '5475' '547x' '5480' - '5481' '5482' '5483' '5484' '5485' - - '-mcpu=CPU' overrides '-march=ARCH' if ARCH is compatible with CPU. - Other combinations of '-mcpu' and '-march' are rejected. - - GCC defines the macro '__mcf_cpu_CPU' when ColdFire target CPU is - selected. It also defines '__mcf_family_FAMILY', where the value - of FAMILY is given by the table above. - -'-mtune=TUNE' - Tune the code for a particular microarchitecture within the - constraints set by '-march' and '-mcpu'. The M680x0 - microarchitectures are: '68000', '68010', '68020', '68030', - '68040', '68060' and 'cpu32'. The ColdFire microarchitectures are: - 'cfv1', 'cfv2', 'cfv3', 'cfv4' and 'cfv4e'. - - You can also use '-mtune=68020-40' for code that needs to run - relatively well on 68020, 68030 and 68040 targets. - '-mtune=68020-60' is similar but includes 68060 targets as well. - These two options select the same tuning decisions as '-m68020-40' - and '-m68020-60' respectively. - - GCC defines the macros '__mcARCH' and '__mcARCH__' when tuning for - 680x0 architecture ARCH. It also defines 'mcARCH' unless either - '-ansi' or a non-GNU '-std' option is used. If GCC is tuning for a - range of architectures, as selected by '-mtune=68020-40' or - '-mtune=68020-60', it defines the macros for every architecture in - the range. - - GCC also defines the macro '__mUARCH__' when tuning for ColdFire - microarchitecture UARCH, where UARCH is one of the arguments given - above. - -'-m68000' -'-mc68000' - Generate output for a 68000. This is the default when the compiler - is configured for 68000-based systems. It is equivalent to - '-march=68000'. - - Use this option for microcontrollers with a 68000 or EC000 core, - including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. - -'-m68010' - Generate output for a 68010. This is the default when the compiler - is configured for 68010-based systems. It is equivalent to - '-march=68010'. - -'-m68020' -'-mc68020' - Generate output for a 68020. This is the default when the compiler - is configured for 68020-based systems. It is equivalent to - '-march=68020'. - -'-m68030' - Generate output for a 68030. This is the default when the compiler - is configured for 68030-based systems. It is equivalent to - '-march=68030'. - -'-m68040' - Generate output for a 68040. This is the default when the compiler - is configured for 68040-based systems. It is equivalent to - '-march=68040'. - - This option inhibits the use of 68881/68882 instructions that have - to be emulated by software on the 68040. Use this option if your - 68040 does not have code to emulate those instructions. - -'-m68060' - Generate output for a 68060. This is the default when the compiler - is configured for 68060-based systems. It is equivalent to - '-march=68060'. - - This option inhibits the use of 68020 and 68881/68882 instructions - that have to be emulated by software on the 68060. Use this option - if your 68060 does not have code to emulate those instructions. - -'-mcpu32' - Generate output for a CPU32. This is the default when the compiler - is configured for CPU32-based systems. It is equivalent to - '-march=cpu32'. - - Use this option for microcontrollers with a CPU32 or CPU32+ core, - including the 68330, 68331, 68332, 68333, 68334, 68336, 68340, - 68341, 68349 and 68360. - -'-m5200' - Generate output for a 520X ColdFire CPU. This is the default when - the compiler is configured for 520X-based systems. It is - equivalent to '-mcpu=5206', and is now deprecated in favor of that - option. - - Use this option for microcontroller with a 5200 core, including the - MCF5202, MCF5203, MCF5204 and MCF5206. - -'-m5206e' - Generate output for a 5206e ColdFire CPU. The option is now - deprecated in favor of the equivalent '-mcpu=5206e'. - -'-m528x' - Generate output for a member of the ColdFire 528X family. The - option is now deprecated in favor of the equivalent '-mcpu=528x'. - -'-m5307' - Generate output for a ColdFire 5307 CPU. The option is now - deprecated in favor of the equivalent '-mcpu=5307'. - -'-m5407' - Generate output for a ColdFire 5407 CPU. The option is now - deprecated in favor of the equivalent '-mcpu=5407'. - -'-mcfv4e' - Generate output for a ColdFire V4e family CPU (e.g. 547x/548x). - This includes use of hardware floating-point instructions. The - option is equivalent to '-mcpu=547x', and is now deprecated in - favor of that option. - -'-m68020-40' - Generate output for a 68040, without using any of the new - instructions. This results in code that can run relatively - efficiently on either a 68020/68881 or a 68030 or a 68040. The - generated code does use the 68881 instructions that are emulated on - the 68040. - - The option is equivalent to '-march=68020' '-mtune=68020-40'. - -'-m68020-60' - Generate output for a 68060, without using any of the new - instructions. This results in code that can run relatively - efficiently on either a 68020/68881 or a 68030 or a 68040. The - generated code does use the 68881 instructions that are emulated on - the 68060. - - The option is equivalent to '-march=68020' '-mtune=68020-60'. - -'-mhard-float' -'-m68881' - Generate floating-point instructions. This is the default for - 68020 and above, and for ColdFire devices that have an FPU. It - defines the macro '__HAVE_68881__' on M680x0 targets and - '__mcffpu__' on ColdFire targets. - -'-msoft-float' - Do not generate floating-point instructions; use library calls - instead. This is the default for 68000, 68010, and 68832 targets. - It is also the default for ColdFire devices that have no FPU. - -'-mdiv' -'-mno-div' - Generate (do not generate) ColdFire hardware divide and remainder - instructions. If '-march' is used without '-mcpu', the default is - "on" for ColdFire architectures and "off" for M680x0 architectures. - Otherwise, the default is taken from the target CPU (either the - default CPU, or the one specified by '-mcpu'). For example, the - default is "off" for '-mcpu=5206' and "on" for '-mcpu=5206e'. - - GCC defines the macro '__mcfhwdiv__' when this option is enabled. - -'-mshort' - Consider type 'int' to be 16 bits wide, like 'short int'. - Additionally, parameters passed on the stack are also aligned to a - 16-bit boundary even on targets whose API mandates promotion to - 32-bit. - -'-mno-short' - Do not consider type 'int' to be 16 bits wide. This is the - default. - -'-mnobitfield' -'-mno-bitfield' - Do not use the bit-field instructions. The '-m68000', '-mcpu32' - and '-m5200' options imply '-mnobitfield'. - -'-mbitfield' - Do use the bit-field instructions. The '-m68020' option implies - '-mbitfield'. This is the default if you use a configuration - designed for a 68020. - -'-mrtd' - Use a different function-calling convention, in which functions - that take a fixed number of arguments return with the 'rtd' - instruction, which pops their arguments while returning. This - saves one instruction in the caller since there is no need to pop - the arguments there. - - This calling convention is incompatible with the one normally used - on Unix, so you cannot use it if you need to call libraries - compiled with the Unix compiler. - - Also, you must provide function prototypes for all functions that - take variable numbers of arguments (including 'printf'); otherwise - incorrect code is generated for calls to those functions. - - In addition, seriously incorrect code results if you call a - function with too many arguments. (Normally, extra arguments are - harmlessly ignored.) - - The 'rtd' instruction is supported by the 68010, 68020, 68030, - 68040, 68060 and CPU32 processors, but not by the 68000 or 5200. - -'-mno-rtd' - Do not use the calling conventions selected by '-mrtd'. This is - the default. - -'-malign-int' -'-mno-align-int' - Control whether GCC aligns 'int', 'long', 'long long', 'float', - 'double', and 'long double' variables on a 32-bit boundary - ('-malign-int') or a 16-bit boundary ('-mno-align-int'). Aligning - variables on 32-bit boundaries produces code that runs somewhat - faster on processors with 32-bit busses at the expense of more - memory. - - *Warning:* if you use the '-malign-int' switch, GCC aligns - structures containing the above types differently than most - published application binary interface specifications for the m68k. - -'-mpcrel' - Use the pc-relative addressing mode of the 68000 directly, instead - of using a global offset table. At present, this option implies - '-fpic', allowing at most a 16-bit offset for pc-relative - addressing. '-fPIC' is not presently supported with '-mpcrel', - though this could be supported for 68020 and higher processors. - -'-mno-strict-align' -'-mstrict-align' - Do not (do) assume that unaligned memory references are handled by - the system. - -'-msep-data' - Generate code that allows the data segment to be located in a - different area of memory from the text segment. This allows for - execute-in-place in an environment without virtual memory - management. This option implies '-fPIC'. - -'-mno-sep-data' - Generate code that assumes that the data segment follows the text - segment. This is the default. - -'-mid-shared-library' - Generate code that supports shared libraries via the library ID - method. This allows for execute-in-place and shared libraries in - an environment without virtual memory management. This option - implies '-fPIC'. - -'-mno-id-shared-library' - Generate code that doesn't assume ID-based shared libraries are - being used. This is the default. - -'-mshared-library-id=n' - Specifies the identification number of the ID-based shared library - being compiled. Specifying a value of 0 generates more compact - code; specifying other values forces the allocation of that number - to the current library, but is no more space- or time-efficient - than omitting this option. - -'-mxgot' -'-mno-xgot' - When generating position-independent code for ColdFire, generate - code that works if the GOT has more than 8192 entries. This code - is larger and slower than code generated without this option. On - M680x0 processors, this option is not needed; '-fPIC' suffices. - - GCC normally uses a single instruction to load values from the GOT. - While this is relatively efficient, it only works if the GOT is - smaller than about 64k. Anything larger causes the linker to - report an error such as: - - relocation truncated to fit: R_68K_GOT16O foobar - - If this happens, you should recompile your code with '-mxgot'. It - should then work with very large GOTs. However, code generated - with '-mxgot' is less efficient, since it takes 4 instructions to - fetch the value of a global symbol. - - Note that some linkers, including newer versions of the GNU linker, - can create multiple GOTs and sort GOT entries. If you have such a - linker, you should only need to use '-mxgot' when compiling a - single object file that accesses more than 8192 GOT entries. Very - few do. - - These options have no effect unless GCC is generating - position-independent code. - - -File: gcc.info, Node: MCore Options, Next: MeP Options, Prev: M680x0 Options, Up: Submodel Options - -3.17.24 MCore Options ---------------------- - -These are the '-m' options defined for the Motorola M*Core processors. - -'-mhardlit' -'-mno-hardlit' - Inline constants into the code stream if it can be done in two - instructions or less. - -'-mdiv' -'-mno-div' - Use the divide instruction. (Enabled by default). - -'-mrelax-immediate' -'-mno-relax-immediate' - Allow arbitrary-sized immediates in bit operations. - -'-mwide-bitfields' -'-mno-wide-bitfields' - Always treat bit-fields as 'int'-sized. - -'-m4byte-functions' -'-mno-4byte-functions' - Force all functions to be aligned to a 4-byte boundary. - -'-mcallgraph-data' -'-mno-callgraph-data' - Emit callgraph information. - -'-mslow-bytes' -'-mno-slow-bytes' - Prefer word access when reading byte quantities. - -'-mlittle-endian' -'-mbig-endian' - Generate code for a little-endian target. - -'-m210' -'-m340' - Generate code for the 210 processor. - -'-mno-lsim' - Assume that runtime support has been provided and so omit the - simulator library ('libsim.a)' from the linker command line. - -'-mstack-increment=SIZE' - Set the maximum amount for a single stack increment operation. - Large values can increase the speed of programs that contain - functions that need a large amount of stack space, but they can - also trigger a segmentation fault if the stack is extended too - much. The default value is 0x1000. - - -File: gcc.info, Node: MeP Options, Next: MicroBlaze Options, Prev: MCore Options, Up: Submodel Options - -3.17.25 MeP Options -------------------- - -'-mabsdiff' - Enables the 'abs' instruction, which is the absolute difference - between two registers. - -'-mall-opts' - Enables all the optional instructions--average, multiply, divide, - bit operations, leading zero, absolute difference, min/max, clip, - and saturation. - -'-maverage' - Enables the 'ave' instruction, which computes the average of two - registers. - -'-mbased=N' - Variables of size N bytes or smaller are placed in the '.based' - section by default. Based variables use the '$tp' register as a - base register, and there is a 128-byte limit to the '.based' - section. - -'-mbitops' - Enables the bit operation instructions--bit test ('btstm'), set - ('bsetm'), clear ('bclrm'), invert ('bnotm'), and test-and-set - ('tas'). - -'-mc=NAME' - Selects which section constant data is placed in. NAME may be - 'tiny', 'near', or 'far'. - -'-mclip' - Enables the 'clip' instruction. Note that '-mclip' is not useful - unless you also provide '-mminmax'. - -'-mconfig=NAME' - Selects one of the built-in core configurations. Each MeP chip has - one or more modules in it; each module has a core CPU and a variety - of coprocessors, optional instructions, and peripherals. The - 'MeP-Integrator' tool, not part of GCC, provides these - configurations through this option; using this option is the same - as using all the corresponding command-line options. The default - configuration is 'default'. - -'-mcop' - Enables the coprocessor instructions. By default, this is a 32-bit - coprocessor. Note that the coprocessor is normally enabled via the - '-mconfig=' option. - -'-mcop32' - Enables the 32-bit coprocessor's instructions. - -'-mcop64' - Enables the 64-bit coprocessor's instructions. - -'-mivc2' - Enables IVC2 scheduling. IVC2 is a 64-bit VLIW coprocessor. - -'-mdc' - Causes constant variables to be placed in the '.near' section. - -'-mdiv' - Enables the 'div' and 'divu' instructions. - -'-meb' - Generate big-endian code. - -'-mel' - Generate little-endian code. - -'-mio-volatile' - Tells the compiler that any variable marked with the 'io' attribute - is to be considered volatile. - -'-ml' - Causes variables to be assigned to the '.far' section by default. - -'-mleadz' - Enables the 'leadz' (leading zero) instruction. - -'-mm' - Causes variables to be assigned to the '.near' section by default. - -'-mminmax' - Enables the 'min' and 'max' instructions. - -'-mmult' - Enables the multiplication and multiply-accumulate instructions. - -'-mno-opts' - Disables all the optional instructions enabled by '-mall-opts'. - -'-mrepeat' - Enables the 'repeat' and 'erepeat' instructions, used for - low-overhead looping. - -'-ms' - Causes all variables to default to the '.tiny' section. Note that - there is a 65536-byte limit to this section. Accesses to these - variables use the '%gp' base register. - -'-msatur' - Enables the saturation instructions. Note that the compiler does - not currently generate these itself, but this option is included - for compatibility with other tools, like 'as'. - -'-msdram' - Link the SDRAM-based runtime instead of the default ROM-based - runtime. - -'-msim' - Link the simulator run-time libraries. - -'-msimnovec' - Link the simulator runtime libraries, excluding built-in support - for reset and exception vectors and tables. - -'-mtf' - Causes all functions to default to the '.far' section. Without - this option, functions default to the '.near' section. - -'-mtiny=N' - Variables that are N bytes or smaller are allocated to the '.tiny' - section. These variables use the '$gp' base register. The default - for this option is 4, but note that there's a 65536-byte limit to - the '.tiny' section. - - -File: gcc.info, Node: MicroBlaze Options, Next: MIPS Options, Prev: MeP Options, Up: Submodel Options - -3.17.26 MicroBlaze Options --------------------------- - -'-msoft-float' - Use software emulation for floating point (default). - -'-mhard-float' - Use hardware floating-point instructions. - -'-mmemcpy' - Do not optimize block moves, use 'memcpy'. - -'-mno-clearbss' - This option is deprecated. Use '-fno-zero-initialized-in-bss' - instead. - -'-mcpu=CPU-TYPE' - Use features of, and schedule code for, the given CPU. Supported - values are in the format 'vX.YY.Z', where X is a major version, YY - is the minor version, and Z is compatibility code. Example values - are 'v3.00.a', 'v4.00.b', 'v5.00.a', 'v5.00.b', 'v5.00.b', - 'v6.00.a'. - -'-mxl-soft-mul' - Use software multiply emulation (default). - -'-mxl-soft-div' - Use software emulation for divides (default). - -'-mxl-barrel-shift' - Use the hardware barrel shifter. - -'-mxl-pattern-compare' - Use pattern compare instructions. - -'-msmall-divides' - Use table lookup optimization for small signed integer divisions. - -'-mxl-stack-check' - This option is deprecated. Use '-fstack-check' instead. - -'-mxl-gp-opt' - Use GP-relative '.sdata'/'.sbss' sections. - -'-mxl-multiply-high' - Use multiply high instructions for high part of 32x32 multiply. - -'-mxl-float-convert' - Use hardware floating-point conversion instructions. - -'-mxl-float-sqrt' - Use hardware floating-point square root instruction. - -'-mbig-endian' - Generate code for a big-endian target. - -'-mlittle-endian' - Generate code for a little-endian target. - -'-mxl-reorder' - Use reorder instructions (swap and byte reversed load/store). - -'-mxl-mode-APP-MODEL' - Select application model APP-MODEL. Valid models are - 'executable' - normal executable (default), uses startup code 'crt0.o'. - - 'xmdstub' - for use with Xilinx Microprocessor Debugger (XMD) based - software intrusive debug agent called xmdstub. This uses - startup file 'crt1.o' and sets the start address of the - program to 0x800. - - 'bootstrap' - for applications that are loaded using a bootloader. This - model uses startup file 'crt2.o' which does not contain a - processor reset vector handler. This is suitable for - transferring control on a processor reset to the bootloader - rather than the application. - - 'novectors' - for applications that do not require any of the MicroBlaze - vectors. This option may be useful for applications running - within a monitoring application. This model uses 'crt3.o' as - a startup file. - - Option '-xl-mode-APP-MODEL' is a deprecated alias for - '-mxl-mode-APP-MODEL'. - - -File: gcc.info, Node: MIPS Options, Next: MMIX Options, Prev: MicroBlaze Options, Up: Submodel Options - -3.17.27 MIPS Options --------------------- - -'-EB' - Generate big-endian code. - -'-EL' - Generate little-endian code. This is the default for 'mips*el-*-*' - configurations. - -'-march=ARCH' - Generate code that runs on ARCH, which can be the name of a generic - MIPS ISA, or the name of a particular processor. The ISA names - are: 'mips1', 'mips2', 'mips3', 'mips4', 'mips32', 'mips32r2', - 'mips64' and 'mips64r2'. The processor names are: '4kc', '4km', - '4kp', '4ksc', '4kec', '4kem', '4kep', '4ksd', '5kc', '5kf', - '20kc', '24kc', '24kf2_1', '24kf1_1', '24kec', '24kef2_1', - '24kef1_1', '34kc', '34kf2_1', '34kf1_1', '34kn', '74kc', - '74kf2_1', '74kf1_1', '74kf3_2', '1004kc', '1004kf2_1', - '1004kf1_1', 'loongson2e', 'loongson2f', 'loongson3a', 'm4k', - 'm14k', 'm14kc', 'm14ke', 'm14kec', 'octeon', 'octeon+', 'octeon2', - 'orion', 'r2000', 'r3000', 'r3900', 'r4000', 'r4400', 'r4600', - 'r4650', 'r4700', 'r6000', 'r8000', 'rm7000', 'rm9000', 'r10000', - 'r12000', 'r14000', 'r16000', 'sb1', 'sr71000', 'vr4100', 'vr4111', - 'vr4120', 'vr4130', 'vr4300', 'vr5000', 'vr5400', 'vr5500', 'xlr' - and 'xlp'. The special value 'from-abi' selects the most - compatible architecture for the selected ABI (that is, 'mips1' for - 32-bit ABIs and 'mips3' for 64-bit ABIs). - - The native Linux/GNU toolchain also supports the value 'native', - which selects the best architecture option for the host processor. - '-march=native' has no effect if GCC does not recognize the - processor. - - In processor names, a final '000' can be abbreviated as 'k' (for - example, '-march=r2k'). Prefixes are optional, and 'vr' may be - written 'r'. - - Names of the form 'Nf2_1' refer to processors with FPUs clocked at - half the rate of the core, names of the form 'Nf1_1' refer to - processors with FPUs clocked at the same rate as the core, and - names of the form 'Nf3_2' refer to processors with FPUs clocked a - ratio of 3:2 with respect to the core. For compatibility reasons, - 'Nf' is accepted as a synonym for 'Nf2_1' while 'Nx' and 'Bfx' are - accepted as synonyms for 'Nf1_1'. - - GCC defines two macros based on the value of this option. The - first is '_MIPS_ARCH', which gives the name of target architecture, - as a string. The second has the form '_MIPS_ARCH_FOO', where FOO - is the capitalized value of '_MIPS_ARCH'. For example, - '-march=r2000' sets '_MIPS_ARCH' to '"r2000"' and defines the macro - '_MIPS_ARCH_R2000'. - - Note that the '_MIPS_ARCH' macro uses the processor names given - above. In other words, it has the full prefix and does not - abbreviate '000' as 'k'. In the case of 'from-abi', the macro - names the resolved architecture (either '"mips1"' or '"mips3"'). - It names the default architecture when no '-march' option is given. - -'-mtune=ARCH' - Optimize for ARCH. Among other things, this option controls the - way instructions are scheduled, and the perceived cost of - arithmetic operations. The list of ARCH values is the same as for - '-march'. - - When this option is not used, GCC optimizes for the processor - specified by '-march'. By using '-march' and '-mtune' together, it - is possible to generate code that runs on a family of processors, - but optimize the code for one particular member of that family. - - '-mtune' defines the macros '_MIPS_TUNE' and '_MIPS_TUNE_FOO', - which work in the same way as the '-march' ones described above. - -'-mips1' - Equivalent to '-march=mips1'. - -'-mips2' - Equivalent to '-march=mips2'. - -'-mips3' - Equivalent to '-march=mips3'. - -'-mips4' - Equivalent to '-march=mips4'. - -'-mips32' - Equivalent to '-march=mips32'. - -'-mips32r2' - Equivalent to '-march=mips32r2'. - -'-mips64' - Equivalent to '-march=mips64'. - -'-mips64r2' - Equivalent to '-march=mips64r2'. - -'-mips16' -'-mno-mips16' - Generate (do not generate) MIPS16 code. If GCC is targeting a - MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE. - - MIPS16 code generation can also be controlled on a per-function - basis by means of 'mips16' and 'nomips16' attributes. *Note - Function Attributes::, for more information. - -'-mflip-mips16' - Generate MIPS16 code on alternating functions. This option is - provided for regression testing of mixed MIPS16/non-MIPS16 code - generation, and is not intended for ordinary use in compiling user - code. - -'-minterlink-compressed' -'-mno-interlink-compressed' - Require (do not require) that code using the standard - (uncompressed) MIPS ISA be link-compatible with MIPS16 and - microMIPS code, and vice versa. - - For example, code using the standard ISA encoding cannot jump - directly to MIPS16 or microMIPS code; it must either use a call or - an indirect jump. '-minterlink-compressed' therefore disables - direct jumps unless GCC knows that the target of the jump is not - compressed. - -'-minterlink-mips16' -'-mno-interlink-mips16' - Aliases of '-minterlink-compressed' and - '-mno-interlink-compressed'. These options predate the microMIPS - ASE and are retained for backwards compatibility. - -'-mabi=32' -'-mabi=o64' -'-mabi=n32' -'-mabi=64' -'-mabi=eabi' - Generate code for the given ABI. - - Note that the EABI has a 32-bit and a 64-bit variant. GCC normally - generates 64-bit code when you select a 64-bit architecture, but - you can use '-mgp32' to get 32-bit code instead. - - For information about the O64 ABI, see - <http://gcc.gnu.org/projects/mipso64-abi.html>. - - GCC supports a variant of the o32 ABI in which floating-point - registers are 64 rather than 32 bits wide. You can select this - combination with '-mabi=32' '-mfp64'. This ABI relies on the - 'mthc1' and 'mfhc1' instructions and is therefore only supported - for MIPS32R2 processors. - - The register assignments for arguments and return values remain the - same, but each scalar value is passed in a single 64-bit register - rather than a pair of 32-bit registers. For example, scalar - floating-point values are returned in '$f0' only, not a '$f0'/'$f1' - pair. The set of call-saved registers also remains the same, but - all 64 bits are saved. - -'-mabicalls' -'-mno-abicalls' - Generate (do not generate) code that is suitable for SVR4-style - dynamic objects. '-mabicalls' is the default for SVR4-based - systems. - -'-mshared' -'-mno-shared' - Generate (do not generate) code that is fully position-independent, - and that can therefore be linked into shared libraries. This - option only affects '-mabicalls'. - - All '-mabicalls' code has traditionally been position-independent, - regardless of options like '-fPIC' and '-fpic'. However, as an - extension, the GNU toolchain allows executables to use absolute - accesses for locally-binding symbols. It can also use shorter GP - initialization sequences and generate direct calls to - locally-defined functions. This mode is selected by '-mno-shared'. - - '-mno-shared' depends on binutils 2.16 or higher and generates - objects that can only be linked by the GNU linker. However, the - option does not affect the ABI of the final executable; it only - affects the ABI of relocatable objects. Using '-mno-shared' - generally makes executables both smaller and quicker. - - '-mshared' is the default. - -'-mplt' -'-mno-plt' - Assume (do not assume) that the static and dynamic linkers support - PLTs and copy relocations. This option only affects '-mno-shared - -mabicalls'. For the n64 ABI, this option has no effect without - '-msym32'. - - You can make '-mplt' the default by configuring GCC with - '--with-mips-plt'. The default is '-mno-plt' otherwise. - -'-mxgot' -'-mno-xgot' - Lift (do not lift) the usual restrictions on the size of the global - offset table. - - GCC normally uses a single instruction to load values from the GOT. - While this is relatively efficient, it only works if the GOT is - smaller than about 64k. Anything larger causes the linker to - report an error such as: - - relocation truncated to fit: R_MIPS_GOT16 foobar - - If this happens, you should recompile your code with '-mxgot'. - This works with very large GOTs, although the code is also less - efficient, since it takes three instructions to fetch the value of - a global symbol. - - Note that some linkers can create multiple GOTs. If you have such - a linker, you should only need to use '-mxgot' when a single object - file accesses more than 64k's worth of GOT entries. Very few do. - - These options have no effect unless GCC is generating position - independent code. - -'-mgp32' - Assume that general-purpose registers are 32 bits wide. - -'-mgp64' - Assume that general-purpose registers are 64 bits wide. - -'-mfp32' - Assume that floating-point registers are 32 bits wide. - -'-mfp64' - Assume that floating-point registers are 64 bits wide. - -'-mhard-float' - Use floating-point coprocessor instructions. - -'-msoft-float' - Do not use floating-point coprocessor instructions. Implement - floating-point calculations using library calls instead. - -'-mno-float' - Equivalent to '-msoft-float', but additionally asserts that the - program being compiled does not perform any floating-point - operations. This option is presently supported only by some - bare-metal MIPS configurations, where it may select a special set - of libraries that lack all floating-point support (including, for - example, the floating-point 'printf' formats). If code compiled - with '-mno-float' accidentally contains floating-point operations, - it is likely to suffer a link-time or run-time failure. - -'-msingle-float' - Assume that the floating-point coprocessor only supports - single-precision operations. - -'-mdouble-float' - Assume that the floating-point coprocessor supports - double-precision operations. This is the default. - -'-mabs=2008' -'-mabs=legacy' - These options control the treatment of the special not-a-number - (NaN) IEEE 754 floating-point data with the 'abs.fmt' and 'neg.fmt' - machine instructions. - - By default or when the '-mabs=legacy' is used the legacy treatment - is selected. In this case these instructions are considered - arithmetic and avoided where correct operation is required and the - input operand might be a NaN. A longer sequence of instructions - that manipulate the sign bit of floating-point datum manually is - used instead unless the '-ffinite-math-only' option has also been - specified. - - The '-mabs=2008' option selects the IEEE 754-2008 treatment. In - this case these instructions are considered non-arithmetic and - therefore operating correctly in all cases, including in particular - where the input operand is a NaN. These instructions are therefore - always used for the respective operations. - -'-mnan=2008' -'-mnan=legacy' - These options control the encoding of the special not-a-number - (NaN) IEEE 754 floating-point data. - - The '-mnan=legacy' option selects the legacy encoding. In this - case quiet NaNs (qNaNs) are denoted by the first bit of their - trailing significand field being 0, whereas signalling NaNs (sNaNs) - are denoted by the first bit of their trailing significand field - being 1. - - The '-mnan=2008' option selects the IEEE 754-2008 encoding. In - this case qNaNs are denoted by the first bit of their trailing - significand field being 1, whereas sNaNs are denoted by the first - bit of their trailing significand field being 0. - - The default is '-mnan=legacy' unless GCC has been configured with - '--with-nan=2008'. - -'-mllsc' -'-mno-llsc' - Use (do not use) 'll', 'sc', and 'sync' instructions to implement - atomic memory built-in functions. When neither option is - specified, GCC uses the instructions if the target architecture - supports them. - - '-mllsc' is useful if the runtime environment can emulate the - instructions and '-mno-llsc' can be useful when compiling for - nonstandard ISAs. You can make either option the default by - configuring GCC with '--with-llsc' and '--without-llsc' - respectively. '--with-llsc' is the default for some - configurations; see the installation documentation for details. - -'-mdsp' -'-mno-dsp' - Use (do not use) revision 1 of the MIPS DSP ASE. *Note MIPS DSP - Built-in Functions::. This option defines the preprocessor macro - '__mips_dsp'. It also defines '__mips_dsp_rev' to 1. - -'-mdspr2' -'-mno-dspr2' - Use (do not use) revision 2 of the MIPS DSP ASE. *Note MIPS DSP - Built-in Functions::. This option defines the preprocessor macros - '__mips_dsp' and '__mips_dspr2'. It also defines '__mips_dsp_rev' - to 2. - -'-msmartmips' -'-mno-smartmips' - Use (do not use) the MIPS SmartMIPS ASE. - -'-mpaired-single' -'-mno-paired-single' - Use (do not use) paired-single floating-point instructions. *Note - MIPS Paired-Single Support::. This option requires hardware - floating-point support to be enabled. - -'-mdmx' -'-mno-mdmx' - Use (do not use) MIPS Digital Media Extension instructions. This - option can only be used when generating 64-bit code and requires - hardware floating-point support to be enabled. - -'-mips3d' -'-mno-mips3d' - Use (do not use) the MIPS-3D ASE. *Note MIPS-3D Built-in - Functions::. The option '-mips3d' implies '-mpaired-single'. - -'-mmicromips' -'-mno-micromips' - Generate (do not generate) microMIPS code. - - MicroMIPS code generation can also be controlled on a per-function - basis by means of 'micromips' and 'nomicromips' attributes. *Note - Function Attributes::, for more information. - -'-mmt' -'-mno-mt' - Use (do not use) MT Multithreading instructions. - -'-mmcu' -'-mno-mcu' - Use (do not use) the MIPS MCU ASE instructions. - -'-meva' -'-mno-eva' - Use (do not use) the MIPS Enhanced Virtual Addressing instructions. - -'-mvirt' -'-mno-virt' - Use (do not use) the MIPS Virtualization Application Specific - instructions. - -'-mlong64' - Force 'long' types to be 64 bits wide. See '-mlong32' for an - explanation of the default and the way that the pointer size is - determined. - -'-mlong32' - Force 'long', 'int', and pointer types to be 32 bits wide. - - The default size of 'int's, 'long's and pointers depends on the - ABI. All the supported ABIs use 32-bit 'int's. The n64 ABI uses - 64-bit 'long's, as does the 64-bit EABI; the others use 32-bit - 'long's. Pointers are the same size as 'long's, or the same size - as integer registers, whichever is smaller. - -'-msym32' -'-mno-sym32' - Assume (do not assume) that all symbols have 32-bit values, - regardless of the selected ABI. This option is useful in - combination with '-mabi=64' and '-mno-abicalls' because it allows - GCC to generate shorter and faster references to symbolic - addresses. - -'-G NUM' - Put definitions of externally-visible data in a small data section - if that data is no bigger than NUM bytes. GCC can then generate - more efficient accesses to the data; see '-mgpopt' for details. - - The default '-G' option depends on the configuration. - -'-mlocal-sdata' -'-mno-local-sdata' - Extend (do not extend) the '-G' behavior to local data too, such as - to static variables in C. '-mlocal-sdata' is the default for all - configurations. - - If the linker complains that an application is using too much small - data, you might want to try rebuilding the less - performance-critical parts with '-mno-local-sdata'. You might also - want to build large libraries with '-mno-local-sdata', so that the - libraries leave more room for the main program. - -'-mextern-sdata' -'-mno-extern-sdata' - Assume (do not assume) that externally-defined data is in a small - data section if the size of that data is within the '-G' limit. - '-mextern-sdata' is the default for all configurations. - - If you compile a module MOD with '-mextern-sdata' '-G NUM' - '-mgpopt', and MOD references a variable VAR that is no bigger than - NUM bytes, you must make sure that VAR is placed in a small data - section. If VAR is defined by another module, you must either - compile that module with a high-enough '-G' setting or attach a - 'section' attribute to VAR's definition. If VAR is common, you - must link the application with a high-enough '-G' setting. - - The easiest way of satisfying these restrictions is to compile and - link every module with the same '-G' option. However, you may wish - to build a library that supports several different small data - limits. You can do this by compiling the library with the highest - supported '-G' setting and additionally using '-mno-extern-sdata' - to stop the library from making assumptions about - externally-defined data. - -'-mgpopt' -'-mno-gpopt' - Use (do not use) GP-relative accesses for symbols that are known to - be in a small data section; see '-G', '-mlocal-sdata' and - '-mextern-sdata'. '-mgpopt' is the default for all configurations. - - '-mno-gpopt' is useful for cases where the '$gp' register might not - hold the value of '_gp'. For example, if the code is part of a - library that might be used in a boot monitor, programs that call - boot monitor routines pass an unknown value in '$gp'. (In such - situations, the boot monitor itself is usually compiled with - '-G0'.) - - '-mno-gpopt' implies '-mno-local-sdata' and '-mno-extern-sdata'. - -'-membedded-data' -'-mno-embedded-data' - Allocate variables to the read-only data section first if possible, - then next in the small data section if possible, otherwise in data. - This gives slightly slower code than the default, but reduces the - amount of RAM required when executing, and thus may be preferred - for some embedded systems. - -'-muninit-const-in-rodata' -'-mno-uninit-const-in-rodata' - Put uninitialized 'const' variables in the read-only data section. - This option is only meaningful in conjunction with - '-membedded-data'. - -'-mcode-readable=SETTING' - Specify whether GCC may generate code that reads from executable - sections. There are three possible settings: - - '-mcode-readable=yes' - Instructions may freely access executable sections. This is - the default setting. - - '-mcode-readable=pcrel' - MIPS16 PC-relative load instructions can access executable - sections, but other instructions must not do so. This option - is useful on 4KSc and 4KSd processors when the code TLBs have - the Read Inhibit bit set. It is also useful on processors - that can be configured to have a dual instruction/data SRAM - interface and that, like the M4K, automatically redirect - PC-relative loads to the instruction RAM. - - '-mcode-readable=no' - Instructions must not access executable sections. This option - can be useful on targets that are configured to have a dual - instruction/data SRAM interface but that (unlike the M4K) do - not automatically redirect PC-relative loads to the - instruction RAM. - -'-msplit-addresses' -'-mno-split-addresses' - Enable (disable) use of the '%hi()' and '%lo()' assembler - relocation operators. This option has been superseded by - '-mexplicit-relocs' but is retained for backwards compatibility. - -'-mexplicit-relocs' -'-mno-explicit-relocs' - Use (do not use) assembler relocation operators when dealing with - symbolic addresses. The alternative, selected by - '-mno-explicit-relocs', is to use assembler macros instead. - - '-mexplicit-relocs' is the default if GCC was configured to use an - assembler that supports relocation operators. - -'-mcheck-zero-division' -'-mno-check-zero-division' - Trap (do not trap) on integer division by zero. - - The default is '-mcheck-zero-division'. - -'-mdivide-traps' -'-mdivide-breaks' - MIPS systems check for division by zero by generating either a - conditional trap or a break instruction. Using traps results in - smaller code, but is only supported on MIPS II and later. Also, - some versions of the Linux kernel have a bug that prevents trap - from generating the proper signal ('SIGFPE'). Use '-mdivide-traps' - to allow conditional traps on architectures that support them and - '-mdivide-breaks' to force the use of breaks. - - The default is usually '-mdivide-traps', but this can be overridden - at configure time using '--with-divide=breaks'. Divide-by-zero - checks can be completely disabled using '-mno-check-zero-division'. - -'-mmemcpy' -'-mno-memcpy' - Force (do not force) the use of 'memcpy()' for non-trivial block - moves. The default is '-mno-memcpy', which allows GCC to inline - most constant-sized copies. - -'-mlong-calls' -'-mno-long-calls' - Disable (do not disable) use of the 'jal' instruction. Calling - functions using 'jal' is more efficient but requires the caller and - callee to be in the same 256 megabyte segment. - - This option has no effect on abicalls code. The default is - '-mno-long-calls'. - -'-mmad' -'-mno-mad' - Enable (disable) use of the 'mad', 'madu' and 'mul' instructions, - as provided by the R4650 ISA. - -'-mimadd' -'-mno-imadd' - Enable (disable) use of the 'madd' and 'msub' integer instructions. - The default is '-mimadd' on architectures that support 'madd' and - 'msub' except for the 74k architecture where it was found to - generate slower code. - -'-mfused-madd' -'-mno-fused-madd' - Enable (disable) use of the floating-point multiply-accumulate - instructions, when they are available. The default is - '-mfused-madd'. - - On the R8000 CPU when multiply-accumulate instructions are used, - the intermediate product is calculated to infinite precision and is - not subject to the FCSR Flush to Zero bit. This may be undesirable - in some circumstances. On other processors the result is - numerically identical to the equivalent computation using separate - multiply, add, subtract and negate instructions. - -'-nocpp' - Tell the MIPS assembler to not run its preprocessor over user - assembler files (with a '.s' suffix) when assembling them. - -'-mfix-24k' -'-mno-fix-24k' - Work around the 24K E48 (lost data on stores during refill) errata. - The workarounds are implemented by the assembler rather than by - GCC. - -'-mfix-r4000' -'-mno-fix-r4000' - Work around certain R4000 CPU errata: - - A double-word or a variable shift may give an incorrect result - if executed immediately after starting an integer division. - - A double-word or a variable shift may give an incorrect result - if executed while an integer multiplication is in progress. - - An integer division may give an incorrect result if started in - a delay slot of a taken branch or a jump. - -'-mfix-r4400' -'-mno-fix-r4400' - Work around certain R4400 CPU errata: - - A double-word or a variable shift may give an incorrect result - if executed immediately after starting an integer division. - -'-mfix-r10000' -'-mno-fix-r10000' - Work around certain R10000 errata: - - 'll'/'sc' sequences may not behave atomically on revisions - prior to 3.0. They may deadlock on revisions 2.6 and earlier. - - This option can only be used if the target architecture supports - branch-likely instructions. '-mfix-r10000' is the default when - '-march=r10000' is used; '-mno-fix-r10000' is the default - otherwise. - -'-mfix-rm7000' -'-mno-fix-rm7000' - Work around the RM7000 'dmult'/'dmultu' errata. The workarounds - are implemented by the assembler rather than by GCC. - -'-mfix-vr4120' -'-mno-fix-vr4120' - Work around certain VR4120 errata: - - 'dmultu' does not always produce the correct result. - - 'div' and 'ddiv' do not always produce the correct result if - one of the operands is negative. - The workarounds for the division errata rely on special functions - in 'libgcc.a'. At present, these functions are only provided by - the 'mips64vr*-elf' configurations. - - Other VR4120 errata require a NOP to be inserted between certain - pairs of instructions. These errata are handled by the assembler, - not by GCC itself. - -'-mfix-vr4130' - Work around the VR4130 'mflo'/'mfhi' errata. The workarounds are - implemented by the assembler rather than by GCC, although GCC - avoids using 'mflo' and 'mfhi' if the VR4130 'macc', 'macchi', - 'dmacc' and 'dmacchi' instructions are available instead. - -'-mfix-sb1' -'-mno-fix-sb1' - Work around certain SB-1 CPU core errata. (This flag currently - works around the SB-1 revision 2 "F1" and "F2" floating-point - errata.) - -'-mr10k-cache-barrier=SETTING' - Specify whether GCC should insert cache barriers to avoid the - side-effects of speculation on R10K processors. - - In common with many processors, the R10K tries to predict the - outcome of a conditional branch and speculatively executes - instructions from the "taken" branch. It later aborts these - instructions if the predicted outcome is wrong. However, on the - R10K, even aborted instructions can have side effects. - - This problem only affects kernel stores and, depending on the - system, kernel loads. As an example, a speculatively-executed - store may load the target memory into cache and mark the cache line - as dirty, even if the store itself is later aborted. If a DMA - operation writes to the same area of memory before the "dirty" line - is flushed, the cached data overwrites the DMA-ed data. See the - R10K processor manual for a full description, including other - potential problems. - - One workaround is to insert cache barrier instructions before every - memory access that might be speculatively executed and that might - have side effects even if aborted. '-mr10k-cache-barrier=SETTING' - controls GCC's implementation of this workaround. It assumes that - aborted accesses to any byte in the following regions does not have - side effects: - - 1. the memory occupied by the current function's stack frame; - - 2. the memory occupied by an incoming stack argument; - - 3. the memory occupied by an object with a link-time-constant - address. - - It is the kernel's responsibility to ensure that speculative - accesses to these regions are indeed safe. - - If the input program contains a function declaration such as: - - void foo (void); - - then the implementation of 'foo' must allow 'j foo' and 'jal foo' - to be executed speculatively. GCC honors this restriction for - functions it compiles itself. It expects non-GCC functions (such - as hand-written assembly code) to do the same. - - The option has three forms: - - '-mr10k-cache-barrier=load-store' - Insert a cache barrier before a load or store that might be - speculatively executed and that might have side effects even - if aborted. - - '-mr10k-cache-barrier=store' - Insert a cache barrier before a store that might be - speculatively executed and that might have side effects even - if aborted. - - '-mr10k-cache-barrier=none' - Disable the insertion of cache barriers. This is the default - setting. - -'-mflush-func=FUNC' -'-mno-flush-func' - Specifies the function to call to flush the I and D caches, or to - not call any such function. If called, the function must take the - same arguments as the common '_flush_func()', that is, the address - of the memory range for which the cache is being flushed, the size - of the memory range, and the number 3 (to flush both caches). The - default depends on the target GCC was configured for, but commonly - is either '_flush_func' or '__cpu_flush'. - -'mbranch-cost=NUM' - Set the cost of branches to roughly NUM "simple" instructions. - This cost is only a heuristic and is not guaranteed to produce - consistent results across releases. A zero cost redundantly - selects the default, which is based on the '-mtune' setting. - -'-mbranch-likely' -'-mno-branch-likely' - Enable or disable use of Branch Likely instructions, regardless of - the default for the selected architecture. By default, Branch - Likely instructions may be generated if they are supported by the - selected architecture. An exception is for the MIPS32 and MIPS64 - architectures and processors that implement those architectures; - for those, Branch Likely instructions are not be generated by - default because the MIPS32 and MIPS64 architectures specifically - deprecate their use. - -'-mfp-exceptions' -'-mno-fp-exceptions' - Specifies whether FP exceptions are enabled. This affects how FP - instructions are scheduled for some processors. The default is - that FP exceptions are enabled. - - For instance, on the SB-1, if FP exceptions are disabled, and we - are emitting 64-bit code, then we can use both FP pipes. - Otherwise, we can only use one FP pipe. - -'-mvr4130-align' -'-mno-vr4130-align' - The VR4130 pipeline is two-way superscalar, but can only issue two - instructions together if the first one is 8-byte aligned. When - this option is enabled, GCC aligns pairs of instructions that it - thinks should execute in parallel. - - This option only has an effect when optimizing for the VR4130. It - normally makes code faster, but at the expense of making it bigger. - It is enabled by default at optimization level '-O3'. - -'-msynci' -'-mno-synci' - Enable (disable) generation of 'synci' instructions on - architectures that support it. The 'synci' instructions (if - enabled) are generated when '__builtin___clear_cache()' is - compiled. - - This option defaults to '-mno-synci', but the default can be - overridden by configuring with '--with-synci'. - - When compiling code for single processor systems, it is generally - safe to use 'synci'. However, on many multi-core (SMP) systems, it - does not invalidate the instruction caches on all cores and may - lead to undefined behavior. - -'-mrelax-pic-calls' -'-mno-relax-pic-calls' - Try to turn PIC calls that are normally dispatched via register - '$25' into direct calls. This is only possible if the linker can - resolve the destination at link-time and if the destination is - within range for a direct call. - - '-mrelax-pic-calls' is the default if GCC was configured to use an - assembler and a linker that support the '.reloc' assembly directive - and '-mexplicit-relocs' is in effect. With '-mno-explicit-relocs', - this optimization can be performed by the assembler and the linker - alone without help from the compiler. - -'-mmcount-ra-address' -'-mno-mcount-ra-address' - Emit (do not emit) code that allows '_mcount' to modify the calling - function's return address. When enabled, this option extends the - usual '_mcount' interface with a new RA-ADDRESS parameter, which - has type 'intptr_t *' and is passed in register '$12'. '_mcount' - can then modify the return address by doing both of the following: - * Returning the new address in register '$31'. - * Storing the new address in '*RA-ADDRESS', if RA-ADDRESS is - nonnull. - - The default is '-mno-mcount-ra-address'. - - -File: gcc.info, Node: MMIX Options, Next: MN10300 Options, Prev: MIPS Options, Up: Submodel Options - -3.17.28 MMIX Options --------------------- - -These options are defined for the MMIX: - -'-mlibfuncs' -'-mno-libfuncs' - Specify that intrinsic library functions are being compiled, - passing all values in registers, no matter the size. - -'-mepsilon' -'-mno-epsilon' - Generate floating-point comparison instructions that compare with - respect to the 'rE' epsilon register. - -'-mabi=mmixware' -'-mabi=gnu' - Generate code that passes function parameters and return values - that (in the called function) are seen as registers '$0' and up, as - opposed to the GNU ABI which uses global registers '$231' and up. - -'-mzero-extend' -'-mno-zero-extend' - When reading data from memory in sizes shorter than 64 bits, use - (do not use) zero-extending load instructions by default, rather - than sign-extending ones. - -'-mknuthdiv' -'-mno-knuthdiv' - Make the result of a division yielding a remainder have the same - sign as the divisor. With the default, '-mno-knuthdiv', the sign - of the remainder follows the sign of the dividend. Both methods - are arithmetically valid, the latter being almost exclusively used. - -'-mtoplevel-symbols' -'-mno-toplevel-symbols' - Prepend (do not prepend) a ':' to all global symbols, so the - assembly code can be used with the 'PREFIX' assembly directive. - -'-melf' - Generate an executable in the ELF format, rather than the default - 'mmo' format used by the 'mmix' simulator. - -'-mbranch-predict' -'-mno-branch-predict' - Use (do not use) the probable-branch instructions, when static - branch prediction indicates a probable branch. - -'-mbase-addresses' -'-mno-base-addresses' - Generate (do not generate) code that uses _base addresses_. Using - a base address automatically generates a request (handled by the - assembler and the linker) for a constant to be set up in a global - register. The register is used for one or more base address - requests within the range 0 to 255 from the value held in the - register. The generally leads to short and fast code, but the - number of different data items that can be addressed is limited. - This means that a program that uses lots of static data may require - '-mno-base-addresses'. - -'-msingle-exit' -'-mno-single-exit' - Force (do not force) generated code to have a single exit point in - each function. - - -File: gcc.info, Node: MN10300 Options, Next: Moxie Options, Prev: MMIX Options, Up: Submodel Options - -3.17.29 MN10300 Options ------------------------ - -These '-m' options are defined for Matsushita MN10300 architectures: - -'-mmult-bug' - Generate code to avoid bugs in the multiply instructions for the - MN10300 processors. This is the default. - -'-mno-mult-bug' - Do not generate code to avoid bugs in the multiply instructions for - the MN10300 processors. - -'-mam33' - Generate code using features specific to the AM33 processor. - -'-mno-am33' - Do not generate code using features specific to the AM33 processor. - This is the default. - -'-mam33-2' - Generate code using features specific to the AM33/2.0 processor. - -'-mam34' - Generate code using features specific to the AM34 processor. - -'-mtune=CPU-TYPE' - Use the timing characteristics of the indicated CPU type when - scheduling instructions. This does not change the targeted - processor type. The CPU type must be one of 'mn10300', 'am33', - 'am33-2' or 'am34'. - -'-mreturn-pointer-on-d0' - When generating a function that returns a pointer, return the - pointer in both 'a0' and 'd0'. Otherwise, the pointer is returned - only in 'a0', and attempts to call such functions without a - prototype result in errors. Note that this option is on by - default; use '-mno-return-pointer-on-d0' to disable it. - -'-mno-crt0' - Do not link in the C run-time initialization object file. - -'-mrelax' - Indicate to the linker that it should perform a relaxation - optimization pass to shorten branches, calls and absolute memory - addresses. This option only has an effect when used on the command - line for the final link step. - - This option makes symbolic debugging impossible. - -'-mliw' - Allow the compiler to generate _Long Instruction Word_ instructions - if the target is the 'AM33' or later. This is the default. This - option defines the preprocessor macro '__LIW__'. - -'-mnoliw' - Do not allow the compiler to generate _Long Instruction Word_ - instructions. This option defines the preprocessor macro - '__NO_LIW__'. - -'-msetlb' - Allow the compiler to generate the _SETLB_ and _Lcc_ instructions - if the target is the 'AM33' or later. This is the default. This - option defines the preprocessor macro '__SETLB__'. - -'-mnosetlb' - Do not allow the compiler to generate _SETLB_ or _Lcc_ - instructions. This option defines the preprocessor macro - '__NO_SETLB__'. - - -File: gcc.info, Node: Moxie Options, Next: MSP430 Options, Prev: MN10300 Options, Up: Submodel Options - -3.17.30 Moxie Options ---------------------- - -'-meb' - Generate big-endian code. This is the default for 'moxie-*-*' - configurations. - -'-mel' - Generate little-endian code. - -'-mno-crt0' - Do not link in the C run-time initialization object file. - - -File: gcc.info, Node: MSP430 Options, Next: NDS32 Options, Prev: Moxie Options, Up: Submodel Options - -3.17.31 MSP430 Options ----------------------- - -These options are defined for the MSP430: - -'-masm-hex' - Force assembly output to always use hex constants. Normally such - constants are signed decimals, but this option is available for - testsuite and/or aesthetic purposes. - -'-mmcu=' - Select the MCU to target. This is used to create a C preprocessor - symbol based upon the MCU name, converted to upper case and pre- - and post- fixed with '__'. This in turn will be used by the - 'msp430.h' header file to select an MCU specific supplimentary - header file. - - The option also sets the ISA to use. If the MCU name is one that - is known to only support the 430 ISA then that is selected, - otherwise the 430X ISA is selected. A generic MCU name of 'msp430' - can also be used to select the 430 ISA. Similarly the generic - 'msp430x' MCU name will select the 430X ISA. - - In addition an MCU specific linker script will be added to the - linker command line. The script's name is the name of the MCU with - '.ld' appended. Thus specifying '-mmcu=xxx' on the gcc command - line will define the C preprocessor symbol '__XXX__' and cause the - linker to search for a script called 'xxx.ld'. - - This option is also passed on to the assembler. - -'-mcpu=' - Specifies the ISA to use. Accepted values are 'msp430', 'msp430x' - and 'msp430xv2'. This option is deprecated. The '-mmcu=' option - should be used to select the ISA. - -'-msim' - Link to the simulator runtime libraries and linker script. - Overrides any scripts that would be selected by the '-mmcu=' - option. - -'-mlarge' - Use large-model addressing (20-bit pointers, 32-bit 'size_t'). - -'-msmall' - Use small-model addressing (16-bit pointers, 16-bit 'size_t'). - -'-mrelax' - This option is passed to the assembler and linker, and allows the - linker to perform certain optimizations that cannot be done until - the final link. - - -File: gcc.info, Node: NDS32 Options, Next: Nios II Options, Prev: MSP430 Options, Up: Submodel Options - -3.17.32 NDS32 Options ---------------------- - -These options are defined for NDS32 implementations: - -'-mbig-endian' - Generate code in big-endian mode. - -'-mlittle-endian' - Generate code in little-endian mode. - -'-mreduced-regs' - Use reduced-set registers for register allocation. - -'-mfull-regs' - Use full-set registers for register allocation. - -'-mcmov' - Generate conditional move instructions. - -'-mno-cmov' - Do not generate conditional move instructions. - -'-mperf-ext' - Generate performance extension instructions. - -'-mno-perf-ext' - Do not generate performance extension instructions. - -'-mv3push' - Generate v3 push25/pop25 instructions. - -'-mno-v3push' - Do not generate v3 push25/pop25 instructions. - -'-m16-bit' - Generate 16-bit instructions. - -'-mno-16-bit' - Do not generate 16-bit instructions. - -'-mgp-direct' - Generate GP base instructions directly. - -'-mno-gp-direct' - Do no generate GP base instructions directly. - -'-misr-vector-size=NUM' - Specify the size of each interrupt vector, which must be 4 or 16. - -'-mcache-block-size=NUM' - Specify the size of each cache block, which must be a power of 2 - between 4 and 512. - -'-march=ARCH' - Specify the name of the target architecture. - -'-mforce-fp-as-gp' - Prevent $fp being allocated during register allocation so that - compiler is able to force performing fp-as-gp optimization. - -'-mforbid-fp-as-gp' - Forbid using $fp to access static and global variables. This - option strictly forbids fp-as-gp optimization regardless of - '-mforce-fp-as-gp'. - -'-mex9' - Use special directives to guide linker doing ex9 optimization. - -'-mctor-dtor' - Enable constructor/destructor feature. - -'-mrelax' - Guide linker to relax instructions. - - -File: gcc.info, Node: Nios II Options, Next: PDP-11 Options, Prev: NDS32 Options, Up: Submodel Options - -3.17.33 Nios II Options ------------------------ - -These are the options defined for the Altera Nios II processor. - -'-G NUM' - Put global and static objects less than or equal to NUM bytes into - the small data or BSS sections instead of the normal data or BSS - sections. The default value of NUM is 8. - -'-mgpopt' -'-mno-gpopt' - Generate (do not generate) GP-relative accesses for objects in the - small data or BSS sections. The default is '-mgpopt' except when - '-fpic' or '-fPIC' is specified to generate position-independent - code. Note that the Nios II ABI does not permit GP-relative - accesses from shared libraries. - - You may need to specify '-mno-gpopt' explicitly when building - programs that include large amounts of small data, including large - GOT data sections. In this case, the 16-bit offset for GP-relative - addressing may not be large enough to allow access to the entire - small data section. - -'-mel' -'-meb' - Generate little-endian (default) or big-endian (experimental) code, - respectively. - -'-mbypass-cache' -'-mno-bypass-cache' - Force all load and store instructions to always bypass cache by - using I/O variants of the instructions. The default is not to - bypass the cache. - -'-mno-cache-volatile' -'-mcache-volatile' - Volatile memory access bypass the cache using the I/O variants of - the load and store instructions. The default is not to bypass the - cache. - -'-mno-fast-sw-div' -'-mfast-sw-div' - Do not use table-based fast divide for small numbers. The default - is to use the fast divide at '-O3' and above. - -'-mno-hw-mul' -'-mhw-mul' -'-mno-hw-mulx' -'-mhw-mulx' -'-mno-hw-div' -'-mhw-div' - Enable or disable emitting 'mul', 'mulx' and 'div' family of - instructions by the compiler. The default is to emit 'mul' and not - emit 'div' and 'mulx'. - -'-mcustom-INSN=N' -'-mno-custom-INSN' - Each '-mcustom-INSN=N' option enables use of a custom instruction - with encoding N when generating code that uses INSN. For example, - '-mcustom-fadds=253' generates custom instruction 253 for - single-precision floating-point add operations instead of the - default behavior of using a library call. - - The following values of INSN are supported. Except as otherwise - noted, floating-point operations are expected to be implemented - with normal IEEE 754 semantics and correspond directly to the C - operators or the equivalent GCC built-in functions (*note Other - Builtins::). - - Single-precision floating point: - - 'fadds', 'fsubs', 'fdivs', 'fmuls' - Binary arithmetic operations. - - 'fnegs' - Unary negation. - - 'fabss' - Unary absolute value. - - 'fcmpeqs', 'fcmpges', 'fcmpgts', 'fcmples', 'fcmplts', 'fcmpnes' - Comparison operations. - - 'fmins', 'fmaxs' - Floating-point minimum and maximum. These instructions are - only generated if '-ffinite-math-only' is specified. - - 'fsqrts' - Unary square root operation. - - 'fcoss', 'fsins', 'ftans', 'fatans', 'fexps', 'flogs' - Floating-point trigonometric and exponential functions. These - instructions are only generated if - '-funsafe-math-optimizations' is also specified. - - Double-precision floating point: - - 'faddd', 'fsubd', 'fdivd', 'fmuld' - Binary arithmetic operations. - - 'fnegd' - Unary negation. - - 'fabsd' - Unary absolute value. - - 'fcmpeqd', 'fcmpged', 'fcmpgtd', 'fcmpled', 'fcmpltd', 'fcmpned' - Comparison operations. - - 'fmind', 'fmaxd' - Double-precision minimum and maximum. These instructions are - only generated if '-ffinite-math-only' is specified. - - 'fsqrtd' - Unary square root operation. - - 'fcosd', 'fsind', 'ftand', 'fatand', 'fexpd', 'flogd' - Double-precision trigonometric and exponential functions. - These instructions are only generated if - '-funsafe-math-optimizations' is also specified. - - Conversions: - 'fextsd' - Conversion from single precision to double precision. - - 'ftruncds' - Conversion from double precision to single precision. - - 'fixsi', 'fixsu', 'fixdi', 'fixdu' - Conversion from floating point to signed or unsigned integer - types, with truncation towards zero. - - 'floatis', 'floatus', 'floatid', 'floatud' - Conversion from signed or unsigned integer types to - floating-point types. - - In addition, all of the following transfer instructions for - internal registers X and Y must be provided to use any of the - double-precision floating-point instructions. Custom instructions - taking two double-precision source operands expect the first - operand in the 64-bit register X. The other operand (or only - operand of a unary operation) is given to the custom arithmetic - instruction with the least significant half in source register SRC1 - and the most significant half in SRC2. A custom instruction that - returns a double-precision result returns the most significant 32 - bits in the destination register and the other half in 32-bit - register Y. GCC automatically generates the necessary code - sequences to write register X and/or read register Y when - double-precision floating-point instructions are used. - - 'fwrx' - Write SRC1 into the least significant half of X and SRC2 into - the most significant half of X. - - 'fwry' - Write SRC1 into Y. - - 'frdxhi', 'frdxlo' - Read the most or least (respectively) significant half of X - and store it in DEST. - - 'frdy' - Read the value of Y and store it into DEST. - - Note that you can gain more local control over generation of Nios - II custom instructions by using the 'target("custom-INSN=N")' and - 'target("no-custom-INSN")' function attributes (*note Function - Attributes::) or pragmas (*note Function Specific Option - Pragmas::). - -'-mcustom-fpu-cfg=NAME' - - This option enables a predefined, named set of custom instruction - encodings (see '-mcustom-INSN' above). Currently, the following - sets are defined: - - '-mcustom-fpu-cfg=60-1' is equivalent to: - -mcustom-fmuls=252 - -mcustom-fadds=253 - -mcustom-fsubs=254 - -fsingle-precision-constant - - '-mcustom-fpu-cfg=60-2' is equivalent to: - -mcustom-fmuls=252 - -mcustom-fadds=253 - -mcustom-fsubs=254 - -mcustom-fdivs=255 - -fsingle-precision-constant - - '-mcustom-fpu-cfg=72-3' is equivalent to: - -mcustom-floatus=243 - -mcustom-fixsi=244 - -mcustom-floatis=245 - -mcustom-fcmpgts=246 - -mcustom-fcmples=249 - -mcustom-fcmpeqs=250 - -mcustom-fcmpnes=251 - -mcustom-fmuls=252 - -mcustom-fadds=253 - -mcustom-fsubs=254 - -mcustom-fdivs=255 - -fsingle-precision-constant - - Custom instruction assignments given by individual '-mcustom-INSN=' - options override those given by '-mcustom-fpu-cfg=', regardless of - the order of the options on the command line. - - Note that you can gain more local control over selection of a FPU - configuration by using the 'target("custom-fpu-cfg=NAME")' function - attribute (*note Function Attributes::) or pragma (*note Function - Specific Option Pragmas::). - - These additional '-m' options are available for the Altera Nios II ELF -(bare-metal) target: - -'-mhal' - Link with HAL BSP. This suppresses linking with the GCC-provided C - runtime startup and termination code, and is typically used in - conjunction with '-msys-crt0=' to specify the location of the - alternate startup code provided by the HAL BSP. - -'-msmallc' - Link with a limited version of the C library, '-lsmallc', rather - than Newlib. - -'-msys-crt0=STARTFILE' - STARTFILE is the file name of the startfile (crt0) to use when - linking. This option is only useful in conjunction with '-mhal'. - -'-msys-lib=SYSTEMLIB' - SYSTEMLIB is the library name of the library that provides - low-level system calls required by the C library, e.g. 'read' and - 'write'. This option is typically used to link with a library - provided by a HAL BSP. - - -File: gcc.info, Node: PDP-11 Options, Next: picoChip Options, Prev: Nios II Options, Up: Submodel Options - -3.17.34 PDP-11 Options ----------------------- - -These options are defined for the PDP-11: - -'-mfpu' - Use hardware FPP floating point. This is the default. (FIS - floating point on the PDP-11/40 is not supported.) - -'-msoft-float' - Do not use hardware floating point. - -'-mac0' - Return floating-point results in ac0 (fr0 in Unix assembler - syntax). - -'-mno-ac0' - Return floating-point results in memory. This is the default. - -'-m40' - Generate code for a PDP-11/40. - -'-m45' - Generate code for a PDP-11/45. This is the default. - -'-m10' - Generate code for a PDP-11/10. - -'-mbcopy-builtin' - Use inline 'movmemhi' patterns for copying memory. This is the - default. - -'-mbcopy' - Do not use inline 'movmemhi' patterns for copying memory. - -'-mint16' -'-mno-int32' - Use 16-bit 'int'. This is the default. - -'-mint32' -'-mno-int16' - Use 32-bit 'int'. - -'-mfloat64' -'-mno-float32' - Use 64-bit 'float'. This is the default. - -'-mfloat32' -'-mno-float64' - Use 32-bit 'float'. - -'-mabshi' - Use 'abshi2' pattern. This is the default. - -'-mno-abshi' - Do not use 'abshi2' pattern. - -'-mbranch-expensive' - Pretend that branches are expensive. This is for experimenting - with code generation only. - -'-mbranch-cheap' - Do not pretend that branches are expensive. This is the default. - -'-munix-asm' - Use Unix assembler syntax. This is the default when configured for - 'pdp11-*-bsd'. - -'-mdec-asm' - Use DEC assembler syntax. This is the default when configured for - any PDP-11 target other than 'pdp11-*-bsd'. - - -File: gcc.info, Node: picoChip Options, Next: PowerPC Options, Prev: PDP-11 Options, Up: Submodel Options - -3.17.35 picoChip Options ------------------------- - -These '-m' options are defined for picoChip implementations: - -'-mae=AE_TYPE' - Set the instruction set, register set, and instruction scheduling - parameters for array element type AE_TYPE. Supported values for - AE_TYPE are 'ANY', 'MUL', and 'MAC'. - - '-mae=ANY' selects a completely generic AE type. Code generated - with this option runs on any of the other AE types. The code is - not as efficient as it would be if compiled for a specific AE type, - and some types of operation (e.g., multiplication) do not work - properly on all types of AE. - - '-mae=MUL' selects a MUL AE type. This is the most useful AE type - for compiled code, and is the default. - - '-mae=MAC' selects a DSP-style MAC AE. Code compiled with this - option may suffer from poor performance of byte (char) - manipulation, since the DSP AE does not provide hardware support - for byte load/stores. - -'-msymbol-as-address' - Enable the compiler to directly use a symbol name as an address in - a load/store instruction, without first loading it into a register. - Typically, the use of this option generates larger programs, which - run faster than when the option isn't used. However, the results - vary from program to program, so it is left as a user option, - rather than being permanently enabled. - -'-mno-inefficient-warnings' - Disables warnings about the generation of inefficient code. These - warnings can be generated, for example, when compiling code that - performs byte-level memory operations on the MAC AE type. The MAC - AE has no hardware support for byte-level memory operations, so all - byte load/stores must be synthesized from word load/store - operations. This is inefficient and a warning is generated to - indicate that you should rewrite the code to avoid byte operations, - or to target an AE type that has the necessary hardware support. - This option disables these warnings. - - -File: gcc.info, Node: PowerPC Options, Next: RL78 Options, Prev: picoChip Options, Up: Submodel Options - -3.17.36 PowerPC Options ------------------------ - -These are listed under *Note RS/6000 and PowerPC Options::. - - -File: gcc.info, Node: RL78 Options, Next: RS/6000 and PowerPC Options, Prev: PowerPC Options, Up: Submodel Options - -3.17.37 RL78 Options --------------------- - -'-msim' - Links in additional target libraries to support operation within a - simulator. - -'-mmul=none' -'-mmul=g13' -'-mmul=rl78' - Specifies the type of hardware multiplication support to be used. - The default is 'none', which uses software multiplication - functions. The 'g13' option is for the hardware multiply/divide - peripheral only on the RL78/G13 targets. The 'rl78' option is for - the standard hardware multiplication defined in the RL78 software - manual. - - -File: gcc.info, Node: RS/6000 and PowerPC Options, Next: RX Options, Prev: RL78 Options, Up: Submodel Options - -3.17.38 IBM RS/6000 and PowerPC Options ---------------------------------------- - -These '-m' options are defined for the IBM RS/6000 and PowerPC: -'-mpowerpc-gpopt' -'-mno-powerpc-gpopt' -'-mpowerpc-gfxopt' -'-mno-powerpc-gfxopt' -'-mpowerpc64' -'-mno-powerpc64' -'-mmfcrf' -'-mno-mfcrf' -'-mpopcntb' -'-mno-popcntb' -'-mpopcntd' -'-mno-popcntd' -'-mfprnd' -'-mno-fprnd' -'-mcmpb' -'-mno-cmpb' -'-mmfpgpr' -'-mno-mfpgpr' -'-mhard-dfp' -'-mno-hard-dfp' - You use these options to specify which instructions are available - on the processor you are using. The default value of these options - is determined when configuring GCC. Specifying the - '-mcpu=CPU_TYPE' overrides the specification of these options. We - recommend you use the '-mcpu=CPU_TYPE' option rather than the - options listed above. - - Specifying '-mpowerpc-gpopt' allows GCC to use the optional PowerPC - architecture instructions in the General Purpose group, including - floating-point square root. Specifying '-mpowerpc-gfxopt' allows - GCC to use the optional PowerPC architecture instructions in the - Graphics group, including floating-point select. - - The '-mmfcrf' option allows GCC to generate the move from condition - register field instruction implemented on the POWER4 processor and - other processors that support the PowerPC V2.01 architecture. The - '-mpopcntb' option allows GCC to generate the popcount and - double-precision FP reciprocal estimate instruction implemented on - the POWER5 processor and other processors that support the PowerPC - V2.02 architecture. The '-mpopcntd' option allows GCC to generate - the popcount instruction implemented on the POWER7 processor and - other processors that support the PowerPC V2.06 architecture. The - '-mfprnd' option allows GCC to generate the FP round to integer - instructions implemented on the POWER5+ processor and other - processors that support the PowerPC V2.03 architecture. The - '-mcmpb' option allows GCC to generate the compare bytes - instruction implemented on the POWER6 processor and other - processors that support the PowerPC V2.05 architecture. The - '-mmfpgpr' option allows GCC to generate the FP move to/from - general-purpose register instructions implemented on the POWER6X - processor and other processors that support the extended PowerPC - V2.05 architecture. The '-mhard-dfp' option allows GCC to generate - the decimal floating-point instructions implemented on some POWER - processors. - - The '-mpowerpc64' option allows GCC to generate the additional - 64-bit instructions that are found in the full PowerPC64 - architecture and to treat GPRs as 64-bit, doubleword quantities. - GCC defaults to '-mno-powerpc64'. - -'-mcpu=CPU_TYPE' - Set architecture type, register usage, and instruction scheduling - parameters for machine type CPU_TYPE. Supported values for - CPU_TYPE are '401', '403', '405', '405fp', '440', '440fp', '464', - '464fp', '476', '476fp', '505', '601', '602', '603', '603e', '604', - '604e', '620', '630', '740', '7400', '7450', '750', '801', '821', - '823', '860', '970', '8540', 'a2', 'e300c2', 'e300c3', 'e500mc', - 'e500mc64', 'e5500', 'e6500', 'ec603e', 'G3', 'G4', 'G5', 'titan', - 'power3', 'power4', 'power5', 'power5+', 'power6', 'power6x', - 'power7', 'power8', 'powerpc', 'powerpc64', and 'rs64'. - - '-mcpu=powerpc', and '-mcpu=powerpc64' specify pure 32-bit PowerPC - and 64-bit PowerPC architecture machine types, with an appropriate, - generic processor model assumed for scheduling purposes. - - The other options specify a specific processor. Code generated - under those options runs best on that processor, and may not run at - all on others. - - The '-mcpu' options automatically enable or disable the following - options: - - -maltivec -mfprnd -mhard-float -mmfcrf -mmultiple - -mpopcntb -mpopcntd -mpowerpc64 - -mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float - -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx - -mcrypto -mdirect-move -mpower8-fusion -mpower8-vector - -mquad-memory -mquad-memory-atomic - - The particular options set for any particular CPU varies between - compiler versions, depending on what setting seems to produce - optimal code for that CPU; it doesn't necessarily reflect the - actual hardware's capabilities. If you wish to set an individual - option to a particular value, you may specify it after the '-mcpu' - option, like '-mcpu=970 -mno-altivec'. - - On AIX, the '-maltivec' and '-mpowerpc64' options are not enabled - or disabled by the '-mcpu' option at present because AIX does not - have full support for these options. You may still enable or - disable them individually if you're sure it'll work in your - environment. - -'-mtune=CPU_TYPE' - Set the instruction scheduling parameters for machine type - CPU_TYPE, but do not set the architecture type or register usage, - as '-mcpu=CPU_TYPE' does. The same values for CPU_TYPE are used - for '-mtune' as for '-mcpu'. If both are specified, the code - generated uses the architecture and registers set by '-mcpu', but - the scheduling parameters set by '-mtune'. - -'-mcmodel=small' - Generate PowerPC64 code for the small model: The TOC is limited to - 64k. - -'-mcmodel=medium' - Generate PowerPC64 code for the medium model: The TOC and other - static data may be up to a total of 4G in size. - -'-mcmodel=large' - Generate PowerPC64 code for the large model: The TOC may be up to - 4G in size. Other data and code is only limited by the 64-bit - address space. - -'-maltivec' -'-mno-altivec' - Generate code that uses (does not use) AltiVec instructions, and - also enable the use of built-in functions that allow more direct - access to the AltiVec instruction set. You may also need to set - '-mabi=altivec' to adjust the current ABI with AltiVec ABI - enhancements. - - When '-maltivec' is used, rather than '-maltivec=le' or - '-maltivec=be', the element order for Altivec intrinsics such as - 'vec_splat', 'vec_extract', and 'vec_insert' will match array - element order corresponding to the endianness of the target. That - is, element zero identifies the leftmost element in a vector - register when targeting a big-endian platform, and identifies the - rightmost element in a vector register when targeting a - little-endian platform. - -'-maltivec=be' - Generate Altivec instructions using big-endian element order, - regardless of whether the target is big- or little-endian. This is - the default when targeting a big-endian platform. - - The element order is used to interpret element numbers in Altivec - intrinsics such as 'vec_splat', 'vec_extract', and 'vec_insert'. - By default, these will match array element order corresponding to - the endianness for the target. - -'-maltivec=le' - Generate Altivec instructions using little-endian element order, - regardless of whether the target is big- or little-endian. This is - the default when targeting a little-endian platform. This option - is currently ignored when targeting a big-endian platform. - - The element order is used to interpret element numbers in Altivec - intrinsics such as 'vec_splat', 'vec_extract', and 'vec_insert'. - By default, these will match array element order corresponding to - the endianness for the target. - -'-mvrsave' -'-mno-vrsave' - Generate VRSAVE instructions when generating AltiVec code. - -'-mgen-cell-microcode' - Generate Cell microcode instructions. - -'-mwarn-cell-microcode' - Warn when a Cell microcode instruction is emitted. An example of a - Cell microcode instruction is a variable shift. - -'-msecure-plt' - Generate code that allows 'ld' and 'ld.so' to build executables and - shared libraries with non-executable '.plt' and '.got' sections. - This is a PowerPC 32-bit SYSV ABI option. - -'-mbss-plt' - Generate code that uses a BSS '.plt' section that 'ld.so' fills in, - and requires '.plt' and '.got' sections that are both writable and - executable. This is a PowerPC 32-bit SYSV ABI option. - -'-misel' -'-mno-isel' - This switch enables or disables the generation of ISEL - instructions. - -'-misel=YES/NO' - This switch has been deprecated. Use '-misel' and '-mno-isel' - instead. - -'-mspe' -'-mno-spe' - This switch enables or disables the generation of SPE simd - instructions. - -'-mpaired' -'-mno-paired' - This switch enables or disables the generation of PAIRED simd - instructions. - -'-mspe=YES/NO' - This option has been deprecated. Use '-mspe' and '-mno-spe' - instead. - -'-mvsx' -'-mno-vsx' - Generate code that uses (does not use) vector/scalar (VSX) - instructions, and also enable the use of built-in functions that - allow more direct access to the VSX instruction set. - -'-mcrypto' -'-mno-crypto' - Enable the use (disable) of the built-in functions that allow - direct access to the cryptographic instructions that were added in - version 2.07 of the PowerPC ISA. - -'-mdirect-move' -'-mno-direct-move' - Generate code that uses (does not use) the instructions to move - data between the general purpose registers and the vector/scalar - (VSX) registers that were added in version 2.07 of the PowerPC ISA. - -'-mpower8-fusion' -'-mno-power8-fusion' - Generate code that keeps (does not keeps) some integer operations - adjacent so that the instructions can be fused together on power8 - and later processors. - -'-mpower8-vector' -'-mno-power8-vector' - Generate code that uses (does not use) the vector and scalar - instructions that were added in version 2.07 of the PowerPC ISA. - Also enable the use of built-in functions that allow more direct - access to the vector instructions. - -'-mquad-memory' -'-mno-quad-memory' - Generate code that uses (does not use) the non-atomic quad word - memory instructions. The '-mquad-memory' option requires use of - 64-bit mode. - -'-mquad-memory-atomic' -'-mno-quad-memory-atomic' - Generate code that uses (does not use) the atomic quad word memory - instructions. The '-mquad-memory-atomic' option requires use of - 64-bit mode. - -'-mfloat-gprs=YES/SINGLE/DOUBLE/NO' -'-mfloat-gprs' - This switch enables or disables the generation of floating-point - operations on the general-purpose registers for architectures that - support it. - - The argument YES or SINGLE enables the use of single-precision - floating-point operations. - - The argument DOUBLE enables the use of single and double-precision - floating-point operations. - - The argument NO disables floating-point operations on the - general-purpose registers. - - This option is currently only available on the MPC854x. - -'-m32' -'-m64' - Generate code for 32-bit or 64-bit environments of Darwin and SVR4 - targets (including GNU/Linux). The 32-bit environment sets int, - long and pointer to 32 bits and generates code that runs on any - PowerPC variant. The 64-bit environment sets int to 32 bits and - long and pointer to 64 bits, and generates code for PowerPC64, as - for '-mpowerpc64'. - -'-mfull-toc' -'-mno-fp-in-toc' -'-mno-sum-in-toc' -'-mminimal-toc' - Modify generation of the TOC (Table Of Contents), which is created - for every executable file. The '-mfull-toc' option is selected by - default. In that case, GCC allocates at least one TOC entry for - each unique non-automatic variable reference in your program. GCC - also places floating-point constants in the TOC. However, only - 16,384 entries are available in the TOC. - - If you receive a linker error message that saying you have - overflowed the available TOC space, you can reduce the amount of - TOC space used with the '-mno-fp-in-toc' and '-mno-sum-in-toc' - options. '-mno-fp-in-toc' prevents GCC from putting floating-point - constants in the TOC and '-mno-sum-in-toc' forces GCC to generate - code to calculate the sum of an address and a constant at run time - instead of putting that sum into the TOC. You may specify one or - both of these options. Each causes GCC to produce very slightly - slower and larger code at the expense of conserving TOC space. - - If you still run out of space in the TOC even when you specify both - of these options, specify '-mminimal-toc' instead. This option - causes GCC to make only one TOC entry for every file. When you - specify this option, GCC produces code that is slower and larger - but which uses extremely little TOC space. You may wish to use - this option only on files that contain less frequently-executed - code. - -'-maix64' -'-maix32' - Enable 64-bit AIX ABI and calling convention: 64-bit pointers, - 64-bit 'long' type, and the infrastructure needed to support them. - Specifying '-maix64' implies '-mpowerpc64', while '-maix32' - disables the 64-bit ABI and implies '-mno-powerpc64'. GCC defaults - to '-maix32'. - -'-mxl-compat' -'-mno-xl-compat' - Produce code that conforms more closely to IBM XL compiler - semantics when using AIX-compatible ABI. Pass floating-point - arguments to prototyped functions beyond the register save area - (RSA) on the stack in addition to argument FPRs. Do not assume - that most significant double in 128-bit long double value is - properly rounded when comparing values and converting to double. - Use XL symbol names for long double support routines. - - The AIX calling convention was extended but not initially - documented to handle an obscure K&R C case of calling a function - that takes the address of its arguments with fewer arguments than - declared. IBM XL compilers access floating-point arguments that do - not fit in the RSA from the stack when a subroutine is compiled - without optimization. Because always storing floating-point - arguments on the stack is inefficient and rarely needed, this - option is not enabled by default and only is necessary when calling - subroutines compiled by IBM XL compilers without optimization. - -'-mpe' - Support "IBM RS/6000 SP" "Parallel Environment" (PE). Link an - application written to use message passing with special startup - code to enable the application to run. The system must have PE - installed in the standard location ('/usr/lpp/ppe.poe/'), or the - 'specs' file must be overridden with the '-specs=' option to - specify the appropriate directory location. The Parallel - Environment does not support threads, so the '-mpe' option and the - '-pthread' option are incompatible. - -'-malign-natural' -'-malign-power' - On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option - '-malign-natural' overrides the ABI-defined alignment of larger - types, such as floating-point doubles, on their natural size-based - boundary. The option '-malign-power' instructs GCC to follow the - ABI-specified alignment rules. GCC defaults to the standard - alignment defined in the ABI. - - On 64-bit Darwin, natural alignment is the default, and - '-malign-power' is not supported. - -'-msoft-float' -'-mhard-float' - Generate code that does not use (uses) the floating-point register - set. Software floating-point emulation is provided if you use the - '-msoft-float' option, and pass the option to GCC when linking. - -'-msingle-float' -'-mdouble-float' - Generate code for single- or double-precision floating-point - operations. '-mdouble-float' implies '-msingle-float'. - -'-msimple-fpu' - Do not generate 'sqrt' and 'div' instructions for hardware - floating-point unit. - -'-mfpu=NAME' - Specify type of floating-point unit. Valid values for NAME are - 'sp_lite' (equivalent to '-msingle-float -msimple-fpu'), 'dp_lite' - (equivalent to '-mdouble-float -msimple-fpu'), 'sp_full' - (equivalent to '-msingle-float'), and 'dp_full' (equivalent to - '-mdouble-float'). - -'-mxilinx-fpu' - Perform optimizations for the floating-point unit on Xilinx PPC - 405/440. - -'-mmultiple' -'-mno-multiple' - Generate code that uses (does not use) the load multiple word - instructions and the store multiple word instructions. These - instructions are generated by default on POWER systems, and not - generated on PowerPC systems. Do not use '-mmultiple' on - little-endian PowerPC systems, since those instructions do not work - when the processor is in little-endian mode. The exceptions are - PPC740 and PPC750 which permit these instructions in little-endian - mode. - -'-mstring' -'-mno-string' - Generate code that uses (does not use) the load string instructions - and the store string word instructions to save multiple registers - and do small block moves. These instructions are generated by - default on POWER systems, and not generated on PowerPC systems. Do - not use '-mstring' on little-endian PowerPC systems, since those - instructions do not work when the processor is in little-endian - mode. The exceptions are PPC740 and PPC750 which permit these - instructions in little-endian mode. - -'-mupdate' -'-mno-update' - Generate code that uses (does not use) the load or store - instructions that update the base register to the address of the - calculated memory location. These instructions are generated by - default. If you use '-mno-update', there is a small window between - the time that the stack pointer is updated and the address of the - previous frame is stored, which means code that walks the stack - frame across interrupts or signals may get corrupted data. - -'-mavoid-indexed-addresses' -'-mno-avoid-indexed-addresses' - Generate code that tries to avoid (not avoid) the use of indexed - load or store instructions. These instructions can incur a - performance penalty on Power6 processors in certain situations, - such as when stepping through large arrays that cross a 16M - boundary. This option is enabled by default when targeting Power6 - and disabled otherwise. - -'-mfused-madd' -'-mno-fused-madd' - Generate code that uses (does not use) the floating-point multiply - and accumulate instructions. These instructions are generated by - default if hardware floating point is used. The machine-dependent - '-mfused-madd' option is now mapped to the machine-independent - '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to - '-ffp-contract=off'. - -'-mmulhw' -'-mno-mulhw' - Generate code that uses (does not use) the half-word multiply and - multiply-accumulate instructions on the IBM 405, 440, 464 and 476 - processors. These instructions are generated by default when - targeting those processors. - -'-mdlmzb' -'-mno-dlmzb' - Generate code that uses (does not use) the string-search 'dlmzb' - instruction on the IBM 405, 440, 464 and 476 processors. This - instruction is generated by default when targeting those - processors. - -'-mno-bit-align' -'-mbit-align' - On System V.4 and embedded PowerPC systems do not (do) force - structures and unions that contain bit-fields to be aligned to the - base type of the bit-field. - - For example, by default a structure containing nothing but 8 - 'unsigned' bit-fields of length 1 is aligned to a 4-byte boundary - and has a size of 4 bytes. By using '-mno-bit-align', the - structure is aligned to a 1-byte boundary and is 1 byte in size. - -'-mno-strict-align' -'-mstrict-align' - On System V.4 and embedded PowerPC systems do not (do) assume that - unaligned memory references are handled by the system. - -'-mrelocatable' -'-mno-relocatable' - Generate code that allows (does not allow) a static executable to - be relocated to a different address at run time. A simple embedded - PowerPC system loader should relocate the entire contents of - '.got2' and 4-byte locations listed in the '.fixup' section, a - table of 32-bit addresses generated by this option. For this to - work, all objects linked together must be compiled with - '-mrelocatable' or '-mrelocatable-lib'. '-mrelocatable' code - aligns the stack to an 8-byte boundary. - -'-mrelocatable-lib' -'-mno-relocatable-lib' - Like '-mrelocatable', '-mrelocatable-lib' generates a '.fixup' - section to allow static executables to be relocated at run time, - but '-mrelocatable-lib' does not use the smaller stack alignment of - '-mrelocatable'. Objects compiled with '-mrelocatable-lib' may be - linked with objects compiled with any combination of the - '-mrelocatable' options. - -'-mno-toc' -'-mtoc' - On System V.4 and embedded PowerPC systems do not (do) assume that - register 2 contains a pointer to a global area pointing to the - addresses used in the program. - -'-mlittle' -'-mlittle-endian' - On System V.4 and embedded PowerPC systems compile code for the - processor in little-endian mode. The '-mlittle-endian' option is - the same as '-mlittle'. - -'-mbig' -'-mbig-endian' - On System V.4 and embedded PowerPC systems compile code for the - processor in big-endian mode. The '-mbig-endian' option is the - same as '-mbig'. - -'-mdynamic-no-pic' - On Darwin and Mac OS X systems, compile code so that it is not - relocatable, but that its external references are relocatable. The - resulting code is suitable for applications, but not shared - libraries. - -'-msingle-pic-base' - Treat the register used for PIC addressing as read-only, rather - than loading it in the prologue for each function. The runtime - system is responsible for initializing this register with an - appropriate value before execution begins. - -'-mprioritize-restricted-insns=PRIORITY' - This option controls the priority that is assigned to dispatch-slot - restricted instructions during the second scheduling pass. The - argument PRIORITY takes the value '0', '1', or '2' to assign no, - highest, or second-highest (respectively) priority to dispatch-slot - restricted instructions. - -'-msched-costly-dep=DEPENDENCE_TYPE' - This option controls which dependences are considered costly by the - target during instruction scheduling. The argument DEPENDENCE_TYPE - takes one of the following values: - - 'no' - No dependence is costly. - - 'all' - All dependences are costly. - - 'true_store_to_load' - A true dependence from store to load is costly. - - 'store_to_load' - Any dependence from store to load is costly. - - NUMBER - Any dependence for which the latency is greater than or equal - to NUMBER is costly. - -'-minsert-sched-nops=SCHEME' - This option controls which NOP insertion scheme is used during the - second scheduling pass. The argument SCHEME takes one of the - following values: - - 'no' - Don't insert NOPs. - - 'pad' - Pad with NOPs any dispatch group that has vacant issue slots, - according to the scheduler's grouping. - - 'regroup_exact' - Insert NOPs to force costly dependent insns into separate - groups. Insert exactly as many NOPs as needed to force an - insn to a new group, according to the estimated processor - grouping. - - NUMBER - Insert NOPs to force costly dependent insns into separate - groups. Insert NUMBER NOPs to force an insn to a new group. - -'-mcall-sysv' - On System V.4 and embedded PowerPC systems compile code using - calling conventions that adhere to the March 1995 draft of the - System V Application Binary Interface, PowerPC processor - supplement. This is the default unless you configured GCC using - 'powerpc-*-eabiaix'. - -'-mcall-sysv-eabi' -'-mcall-eabi' - Specify both '-mcall-sysv' and '-meabi' options. - -'-mcall-sysv-noeabi' - Specify both '-mcall-sysv' and '-mno-eabi' options. - -'-mcall-aixdesc' - On System V.4 and embedded PowerPC systems compile code for the AIX - operating system. - -'-mcall-linux' - On System V.4 and embedded PowerPC systems compile code for the - Linux-based GNU system. - -'-mcall-freebsd' - On System V.4 and embedded PowerPC systems compile code for the - FreeBSD operating system. - -'-mcall-netbsd' - On System V.4 and embedded PowerPC systems compile code for the - NetBSD operating system. - -'-mcall-openbsd' - On System V.4 and embedded PowerPC systems compile code for the - OpenBSD operating system. - -'-maix-struct-return' - Return all structures in memory (as specified by the AIX ABI). - -'-msvr4-struct-return' - Return structures smaller than 8 bytes in registers (as specified - by the SVR4 ABI). - -'-mabi=ABI-TYPE' - Extend the current ABI with a particular extension, or remove such - extension. Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE, - IBMLONGDOUBLE, IEEELONGDOUBLE, ELFV1, ELFV2. - -'-mabi=spe' - Extend the current ABI with SPE ABI extensions. This does not - change the default ABI, instead it adds the SPE ABI extensions to - the current ABI. - -'-mabi=no-spe' - Disable Book-E SPE ABI extensions for the current ABI. - -'-mabi=ibmlongdouble' - Change the current ABI to use IBM extended-precision long double. - This is a PowerPC 32-bit SYSV ABI option. - -'-mabi=ieeelongdouble' - Change the current ABI to use IEEE extended-precision long double. - This is a PowerPC 32-bit Linux ABI option. - -'-mabi=elfv1' - Change the current ABI to use the ELFv1 ABI. This is the default - ABI for big-endian PowerPC 64-bit Linux. Overriding the default - ABI requires special system support and is likely to fail in - spectacular ways. - -'-mabi=elfv2' - Change the current ABI to use the ELFv2 ABI. This is the default - ABI for little-endian PowerPC 64-bit Linux. Overriding the default - ABI requires special system support and is likely to fail in - spectacular ways. - -'-mprototype' -'-mno-prototype' - On System V.4 and embedded PowerPC systems assume that all calls to - variable argument functions are properly prototyped. Otherwise, - the compiler must insert an instruction before every non-prototyped - call to set or clear bit 6 of the condition code register (CR) to - indicate whether floating-point values are passed in the - floating-point registers in case the function takes variable - arguments. With '-mprototype', only calls to prototyped variable - argument functions set or clear the bit. - -'-msim' - On embedded PowerPC systems, assume that the startup module is - called 'sim-crt0.o' and that the standard C libraries are - 'libsim.a' and 'libc.a'. This is the default for - 'powerpc-*-eabisim' configurations. - -'-mmvme' - On embedded PowerPC systems, assume that the startup module is - called 'crt0.o' and the standard C libraries are 'libmvme.a' and - 'libc.a'. - -'-mads' - On embedded PowerPC systems, assume that the startup module is - called 'crt0.o' and the standard C libraries are 'libads.a' and - 'libc.a'. - -'-myellowknife' - On embedded PowerPC systems, assume that the startup module is - called 'crt0.o' and the standard C libraries are 'libyk.a' and - 'libc.a'. - -'-mvxworks' - On System V.4 and embedded PowerPC systems, specify that you are - compiling for a VxWorks system. - -'-memb' - On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags - header to indicate that 'eabi' extended relocations are used. - -'-meabi' -'-mno-eabi' - On System V.4 and embedded PowerPC systems do (do not) adhere to - the Embedded Applications Binary Interface (EABI), which is a set - of modifications to the System V.4 specifications. Selecting - '-meabi' means that the stack is aligned to an 8-byte boundary, a - function '__eabi' is called from 'main' to set up the EABI - environment, and the '-msdata' option can use both 'r2' and 'r13' - to point to two separate small data areas. Selecting '-mno-eabi' - means that the stack is aligned to a 16-byte boundary, no EABI - initialization function is called from 'main', and the '-msdata' - option only uses 'r13' to point to a single small data area. The - '-meabi' option is on by default if you configured GCC using one of - the 'powerpc*-*-eabi*' options. - -'-msdata=eabi' - On System V.4 and embedded PowerPC systems, put small initialized - 'const' global and static data in the '.sdata2' section, which is - pointed to by register 'r2'. Put small initialized non-'const' - global and static data in the '.sdata' section, which is pointed to - by register 'r13'. Put small uninitialized global and static data - in the '.sbss' section, which is adjacent to the '.sdata' section. - The '-msdata=eabi' option is incompatible with the '-mrelocatable' - option. The '-msdata=eabi' option also sets the '-memb' option. - -'-msdata=sysv' - On System V.4 and embedded PowerPC systems, put small global and - static data in the '.sdata' section, which is pointed to by - register 'r13'. Put small uninitialized global and static data in - the '.sbss' section, which is adjacent to the '.sdata' section. - The '-msdata=sysv' option is incompatible with the '-mrelocatable' - option. - -'-msdata=default' -'-msdata' - On System V.4 and embedded PowerPC systems, if '-meabi' is used, - compile code the same as '-msdata=eabi', otherwise compile code the - same as '-msdata=sysv'. - -'-msdata=data' - On System V.4 and embedded PowerPC systems, put small global data - in the '.sdata' section. Put small uninitialized global data in - the '.sbss' section. Do not use register 'r13' to address small - data however. This is the default behavior unless other '-msdata' - options are used. - -'-msdata=none' -'-mno-sdata' - On embedded PowerPC systems, put all initialized global and static - data in the '.data' section, and all uninitialized data in the - '.bss' section. - -'-mblock-move-inline-limit=NUM' - Inline all block moves (such as calls to 'memcpy' or structure - copies) less than or equal to NUM bytes. The minimum value for NUM - is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets. The - default value is target-specific. - -'-G NUM' - On embedded PowerPC systems, put global and static items less than - or equal to NUM bytes into the small data or BSS sections instead - of the normal data or BSS section. By default, NUM is 8. The '-G - NUM' switch is also passed to the linker. All modules should be - compiled with the same '-G NUM' value. - -'-mregnames' -'-mno-regnames' - On System V.4 and embedded PowerPC systems do (do not) emit - register names in the assembly language output using symbolic - forms. - -'-mlongcall' -'-mno-longcall' - By default assume that all calls are far away so that a longer and - more expensive calling sequence is required. This is required for - calls farther than 32 megabytes (33,554,432 bytes) from the current - location. A short call is generated if the compiler knows the call - cannot be that far away. This setting can be overridden by the - 'shortcall' function attribute, or by '#pragma longcall(0)'. - - Some linkers are capable of detecting out-of-range calls and - generating glue code on the fly. On these systems, long calls are - unnecessary and generate slower code. As of this writing, the AIX - linker can do this, as can the GNU linker for PowerPC/64. It is - planned to add this feature to the GNU linker for 32-bit PowerPC - systems as well. - - On Darwin/PPC systems, '#pragma longcall' generates 'jbsr callee, - L42', plus a "branch island" (glue code). The two target addresses - represent the callee and the branch island. The Darwin/PPC linker - prefers the first address and generates a 'bl callee' if the PPC - 'bl' instruction reaches the callee directly; otherwise, the linker - generates 'bl L42' to call the branch island. The branch island is - appended to the body of the calling function; it computes the full - 32-bit address of the callee and jumps to it. - - On Mach-O (Darwin) systems, this option directs the compiler emit - to the glue for every direct call, and the Darwin linker decides - whether to use or discard it. - - In the future, GCC may ignore all longcall specifications when the - linker is known to generate glue. - -'-mtls-markers' -'-mno-tls-markers' - Mark (do not mark) calls to '__tls_get_addr' with a relocation - specifying the function argument. The relocation allows the linker - to reliably associate function call with argument setup - instructions for TLS optimization, which in turn allows GCC to - better schedule the sequence. - -'-pthread' - Adds support for multithreading with the "pthreads" library. This - option sets flags for both the preprocessor and linker. - -'-mrecip' -'-mno-recip' - This option enables use of the reciprocal estimate and reciprocal - square root estimate instructions with additional Newton-Raphson - steps to increase precision instead of doing a divide or square - root and divide for floating-point arguments. You should use the - '-ffast-math' option when using '-mrecip' (or at least - '-funsafe-math-optimizations', '-finite-math-only', - '-freciprocal-math' and '-fno-trapping-math'). Note that while the - throughput of the sequence is generally higher than the throughput - of the non-reciprocal instruction, the precision of the sequence - can be decreased by up to 2 ulp (i.e. the inverse of 1.0 equals - 0.99999994) for reciprocal square roots. - -'-mrecip=OPT' - This option controls which reciprocal estimate instructions may be - used. OPT is a comma-separated list of options, which may be - preceded by a '!' to invert the option: 'all': enable all estimate - instructions, 'default': enable the default instructions, - equivalent to '-mrecip', 'none': disable all estimate instructions, - equivalent to '-mno-recip'; 'div': enable the reciprocal - approximation instructions for both single and double precision; - 'divf': enable the single-precision reciprocal approximation - instructions; 'divd': enable the double-precision reciprocal - approximation instructions; 'rsqrt': enable the reciprocal square - root approximation instructions for both single and double - precision; 'rsqrtf': enable the single-precision reciprocal square - root approximation instructions; 'rsqrtd': enable the - double-precision reciprocal square root approximation instructions; - - So, for example, '-mrecip=all,!rsqrtd' enables all of the - reciprocal estimate instructions, except for the 'FRSQRTE', - 'XSRSQRTEDP', and 'XVRSQRTEDP' instructions which handle the - double-precision reciprocal square root calculations. - -'-mrecip-precision' -'-mno-recip-precision' - Assume (do not assume) that the reciprocal estimate instructions - provide higher-precision estimates than is mandated by the PowerPC - ABI. Selecting '-mcpu=power6', '-mcpu=power7' or '-mcpu=power8' - automatically selects '-mrecip-precision'. The double-precision - square root estimate instructions are not generated by default on - low-precision machines, since they do not provide an estimate that - converges after three steps. - -'-mveclibabi=TYPE' - Specifies the ABI type to use for vectorizing intrinsics using an - external library. The only type supported at present is 'mass', - which specifies to use IBM's Mathematical Acceleration Subsystem - (MASS) libraries for vectorizing intrinsics using external - libraries. GCC currently emits calls to 'acosd2', 'acosf4', - 'acoshd2', 'acoshf4', 'asind2', 'asinf4', 'asinhd2', 'asinhf4', - 'atan2d2', 'atan2f4', 'atand2', 'atanf4', 'atanhd2', 'atanhf4', - 'cbrtd2', 'cbrtf4', 'cosd2', 'cosf4', 'coshd2', 'coshf4', 'erfcd2', - 'erfcf4', 'erfd2', 'erff4', 'exp2d2', 'exp2f4', 'expd2', 'expf4', - 'expm1d2', 'expm1f4', 'hypotd2', 'hypotf4', 'lgammad2', 'lgammaf4', - 'log10d2', 'log10f4', 'log1pd2', 'log1pf4', 'log2d2', 'log2f4', - 'logd2', 'logf4', 'powd2', 'powf4', 'sind2', 'sinf4', 'sinhd2', - 'sinhf4', 'sqrtd2', 'sqrtf4', 'tand2', 'tanf4', 'tanhd2', and - 'tanhf4' when generating code for power7. Both '-ftree-vectorize' - and '-funsafe-math-optimizations' must also be enabled. The MASS - libraries must be specified at link time. - -'-mfriz' -'-mno-friz' - Generate (do not generate) the 'friz' instruction when the - '-funsafe-math-optimizations' option is used to optimize rounding - of floating-point values to 64-bit integer and back to floating - point. The 'friz' instruction does not return the same value if - the floating-point number is too large to fit in an integer. - -'-mpointers-to-nested-functions' -'-mno-pointers-to-nested-functions' - Generate (do not generate) code to load up the static chain - register (R11) when calling through a pointer on AIX and 64-bit - Linux systems where a function pointer points to a 3-word - descriptor giving the function address, TOC value to be loaded in - register R2, and static chain value to be loaded in register R11. - The '-mpointers-to-nested-functions' is on by default. You cannot - call through pointers to nested functions or pointers to functions - compiled in other languages that use the static chain if you use - the '-mno-pointers-to-nested-functions'. - -'-msave-toc-indirect' -'-mno-save-toc-indirect' - Generate (do not generate) code to save the TOC value in the - reserved stack location in the function prologue if the function - calls through a pointer on AIX and 64-bit Linux systems. If the - TOC value is not saved in the prologue, it is saved just before the - call through the pointer. The '-mno-save-toc-indirect' option is - the default. - -'-mcompat-align-parm' -'-mno-compat-align-parm' - Generate (do not generate) code to pass structure parameters with a - maximum alignment of 64 bits, for compatibility with older versions - of GCC. - - Older versions of GCC (prior to 4.9.0) incorrectly did not align a - structure parameter on a 128-bit boundary when that structure - contained a member requiring 128-bit alignment. This is corrected - in more recent versions of GCC. This option may be used to generate - code that is compatible with functions compiled with older versions - of GCC. - - The '-mno-compat-align-parm' option is the default. - - -File: gcc.info, Node: RX Options, Next: S/390 and zSeries Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options - -3.17.39 RX Options ------------------- - -These command-line options are defined for RX targets: - -'-m64bit-doubles' -'-m32bit-doubles' - Make the 'double' data type be 64 bits ('-m64bit-doubles') or 32 - bits ('-m32bit-doubles') in size. The default is - '-m32bit-doubles'. _Note_ RX floating-point hardware only works on - 32-bit values, which is why the default is '-m32bit-doubles'. - -'-fpu' -'-nofpu' - Enables ('-fpu') or disables ('-nofpu') the use of RX - floating-point hardware. The default is enabled for the RX600 - series and disabled for the RX200 series. - - Floating-point instructions are only generated for 32-bit - floating-point values, however, so the FPU hardware is not used for - doubles if the '-m64bit-doubles' option is used. - - _Note_ If the '-fpu' option is enabled then - '-funsafe-math-optimizations' is also enabled automatically. This - is because the RX FPU instructions are themselves unsafe. - -'-mcpu=NAME' - Selects the type of RX CPU to be targeted. Currently three types - are supported, the generic RX600 and RX200 series hardware and the - specific RX610 CPU. The default is RX600. - - The only difference between RX600 and RX610 is that the RX610 does - not support the 'MVTIPL' instruction. - - The RX200 series does not have a hardware floating-point unit and - so '-nofpu' is enabled by default when this type is selected. - -'-mbig-endian-data' -'-mlittle-endian-data' - Store data (but not code) in the big-endian format. The default is - '-mlittle-endian-data', i.e. to store data in the little-endian - format. - -'-msmall-data-limit=N' - Specifies the maximum size in bytes of global and static variables - which can be placed into the small data area. Using the small data - area can lead to smaller and faster code, but the size of area is - limited and it is up to the programmer to ensure that the area does - not overflow. Also when the small data area is used one of the - RX's registers (usually 'r13') is reserved for use pointing to this - area, so it is no longer available for use by the compiler. This - could result in slower and/or larger code if variables are pushed - onto the stack instead of being held in this register. - - Note, common variables (variables that have not been initialized) - and constants are not placed into the small data area as they are - assigned to other sections in the output executable. - - The default value is zero, which disables this feature. Note, this - feature is not enabled by default with higher optimization levels - ('-O2' etc) because of the potentially detrimental effects of - reserving a register. It is up to the programmer to experiment and - discover whether this feature is of benefit to their program. See - the description of the '-mpid' option for a description of how the - actual register to hold the small data area pointer is chosen. - -'-msim' -'-mno-sim' - Use the simulator runtime. The default is to use the libgloss - board-specific runtime. - -'-mas100-syntax' -'-mno-as100-syntax' - When generating assembler output use a syntax that is compatible - with Renesas's AS100 assembler. This syntax can also be handled by - the GAS assembler, but it has some restrictions so it is not - generated by default. - -'-mmax-constant-size=N' - Specifies the maximum size, in bytes, of a constant that can be - used as an operand in a RX instruction. Although the RX - instruction set does allow constants of up to 4 bytes in length to - be used in instructions, a longer value equates to a longer - instruction. Thus in some circumstances it can be beneficial to - restrict the size of constants that are used in instructions. - Constants that are too big are instead placed into a constant pool - and referenced via register indirection. - - The value N can be between 0 and 4. A value of 0 (the default) or - 4 means that constants of any size are allowed. - -'-mrelax' - Enable linker relaxation. Linker relaxation is a process whereby - the linker attempts to reduce the size of a program by finding - shorter versions of various instructions. Disabled by default. - -'-mint-register=N' - Specify the number of registers to reserve for fast interrupt - handler functions. The value N can be between 0 and 4. A value of - 1 means that register 'r13' is reserved for the exclusive use of - fast interrupt handlers. A value of 2 reserves 'r13' and 'r12'. A - value of 3 reserves 'r13', 'r12' and 'r11', and a value of 4 - reserves 'r13' through 'r10'. A value of 0, the default, does not - reserve any registers. - -'-msave-acc-in-interrupts' - Specifies that interrupt handler functions should preserve the - accumulator register. This is only necessary if normal code might - use the accumulator register, for example because it performs - 64-bit multiplications. The default is to ignore the accumulator - as this makes the interrupt handlers faster. - -'-mpid' -'-mno-pid' - Enables the generation of position independent data. When enabled - any access to constant data is done via an offset from a base - address held in a register. This allows the location of constant - data to be determined at run time without requiring the executable - to be relocated, which is a benefit to embedded applications with - tight memory constraints. Data that can be modified is not - affected by this option. - - Note, using this feature reserves a register, usually 'r13', for - the constant data base address. This can result in slower and/or - larger code, especially in complicated functions. - - The actual register chosen to hold the constant data base address - depends upon whether the '-msmall-data-limit' and/or the - '-mint-register' command-line options are enabled. Starting with - register 'r13' and proceeding downwards, registers are allocated - first to satisfy the requirements of '-mint-register', then '-mpid' - and finally '-msmall-data-limit'. Thus it is possible for the - small data area register to be 'r8' if both '-mint-register=4' and - '-mpid' are specified on the command line. - - By default this feature is not enabled. The default can be - restored via the '-mno-pid' command-line option. - -'-mno-warn-multiple-fast-interrupts' -'-mwarn-multiple-fast-interrupts' - Prevents GCC from issuing a warning message if it finds more than - one fast interrupt handler when it is compiling a file. The - default is to issue a warning for each extra fast interrupt handler - found, as the RX only supports one such interrupt. - - _Note:_ The generic GCC command-line option '-ffixed-REG' has special -significance to the RX port when used with the 'interrupt' function -attribute. This attribute indicates a function intended to process fast -interrupts. GCC ensures that it only uses the registers 'r10', 'r11', -'r12' and/or 'r13' and only provided that the normal use of the -corresponding registers have been restricted via the '-ffixed-REG' or -'-mint-register' command-line options. - - -File: gcc.info, Node: S/390 and zSeries Options, Next: Score Options, Prev: RX Options, Up: Submodel Options - -3.17.40 S/390 and zSeries Options ---------------------------------- - -These are the '-m' options defined for the S/390 and zSeries -architecture. - -'-mhard-float' -'-msoft-float' - Use (do not use) the hardware floating-point instructions and - registers for floating-point operations. When '-msoft-float' is - specified, functions in 'libgcc.a' are used to perform - floating-point operations. When '-mhard-float' is specified, the - compiler generates IEEE floating-point instructions. This is the - default. - -'-mhard-dfp' -'-mno-hard-dfp' - Use (do not use) the hardware decimal-floating-point instructions - for decimal-floating-point operations. When '-mno-hard-dfp' is - specified, functions in 'libgcc.a' are used to perform - decimal-floating-point operations. When '-mhard-dfp' is specified, - the compiler generates decimal-floating-point hardware - instructions. This is the default for '-march=z9-ec' or higher. - -'-mlong-double-64' -'-mlong-double-128' - These switches control the size of 'long double' type. A size of - 64 bits makes the 'long double' type equivalent to the 'double' - type. This is the default. - -'-mbackchain' -'-mno-backchain' - Store (do not store) the address of the caller's frame as backchain - pointer into the callee's stack frame. A backchain may be needed - to allow debugging using tools that do not understand DWARF 2 call - frame information. When '-mno-packed-stack' is in effect, the - backchain pointer is stored at the bottom of the stack frame; when - '-mpacked-stack' is in effect, the backchain is placed into the - topmost word of the 96/160 byte register save area. - - In general, code compiled with '-mbackchain' is call-compatible - with code compiled with '-mmo-backchain'; however, use of the - backchain for debugging purposes usually requires that the whole - binary is built with '-mbackchain'. Note that the combination of - '-mbackchain', '-mpacked-stack' and '-mhard-float' is not - supported. In order to build a linux kernel use '-msoft-float'. - - The default is to not maintain the backchain. - -'-mpacked-stack' -'-mno-packed-stack' - Use (do not use) the packed stack layout. When '-mno-packed-stack' - is specified, the compiler uses the all fields of the 96/160 byte - register save area only for their default purpose; unused fields - still take up stack space. When '-mpacked-stack' is specified, - register save slots are densely packed at the top of the register - save area; unused space is reused for other purposes, allowing for - more efficient use of the available stack space. However, when - '-mbackchain' is also in effect, the topmost word of the save area - is always used to store the backchain, and the return address - register is always saved two words below the backchain. - - As long as the stack frame backchain is not used, code generated - with '-mpacked-stack' is call-compatible with code generated with - '-mno-packed-stack'. Note that some non-FSF releases of GCC 2.95 - for S/390 or zSeries generated code that uses the stack frame - backchain at run time, not just for debugging purposes. Such code - is not call-compatible with code compiled with '-mpacked-stack'. - Also, note that the combination of '-mbackchain', '-mpacked-stack' - and '-mhard-float' is not supported. In order to build a linux - kernel use '-msoft-float'. - - The default is to not use the packed stack layout. - -'-msmall-exec' -'-mno-small-exec' - Generate (or do not generate) code using the 'bras' instruction to - do subroutine calls. This only works reliably if the total - executable size does not exceed 64k. The default is to use the - 'basr' instruction instead, which does not have this limitation. - -'-m64' -'-m31' - When '-m31' is specified, generate code compliant to the GNU/Linux - for S/390 ABI. When '-m64' is specified, generate code compliant - to the GNU/Linux for zSeries ABI. This allows GCC in particular to - generate 64-bit instructions. For the 's390' targets, the default - is '-m31', while the 's390x' targets default to '-m64'. - -'-mzarch' -'-mesa' - When '-mzarch' is specified, generate code using the instructions - available on z/Architecture. When '-mesa' is specified, generate - code using the instructions available on ESA/390. Note that - '-mesa' is not possible with '-m64'. When generating code - compliant to the GNU/Linux for S/390 ABI, the default is '-mesa'. - When generating code compliant to the GNU/Linux for zSeries ABI, - the default is '-mzarch'. - -'-mmvcle' -'-mno-mvcle' - Generate (or do not generate) code using the 'mvcle' instruction to - perform block moves. When '-mno-mvcle' is specified, use a 'mvc' - loop instead. This is the default unless optimizing for size. - -'-mdebug' -'-mno-debug' - Print (or do not print) additional debug information when - compiling. The default is to not print debug information. - -'-march=CPU-TYPE' - Generate code that runs on CPU-TYPE, which is the name of a system - representing a certain processor type. Possible values for - CPU-TYPE are 'g5', 'g6', 'z900', 'z990', 'z9-109', 'z9-ec' and - 'z10'. When generating code using the instructions available on - z/Architecture, the default is '-march=z900'. Otherwise, the - default is '-march=g5'. - -'-mtune=CPU-TYPE' - Tune to CPU-TYPE everything applicable about the generated code, - except for the ABI and the set of available instructions. The list - of CPU-TYPE values is the same as for '-march'. The default is the - value used for '-march'. - -'-mtpf-trace' -'-mno-tpf-trace' - Generate code that adds (does not add) in TPF OS specific branches - to trace routines in the operating system. This option is off by - default, even when compiling for the TPF OS. - -'-mfused-madd' -'-mno-fused-madd' - Generate code that uses (does not use) the floating-point multiply - and accumulate instructions. These instructions are generated by - default if hardware floating point is used. - -'-mwarn-framesize=FRAMESIZE' - Emit a warning if the current function exceeds the given frame - size. Because this is a compile-time check it doesn't need to be a - real problem when the program runs. It is intended to identify - functions that most probably cause a stack overflow. It is useful - to be used in an environment with limited stack size e.g. the linux - kernel. - -'-mwarn-dynamicstack' - Emit a warning if the function calls 'alloca' or uses - dynamically-sized arrays. This is generally a bad idea with a - limited stack size. - -'-mstack-guard=STACK-GUARD' -'-mstack-size=STACK-SIZE' - If these options are provided the S/390 back end emits additional - instructions in the function prologue that trigger a trap if the - stack size is STACK-GUARD bytes above the STACK-SIZE (remember that - the stack on S/390 grows downward). If the STACK-GUARD option is - omitted the smallest power of 2 larger than the frame size of the - compiled function is chosen. These options are intended to be used - to help debugging stack overflow problems. The additionally - emitted code causes only little overhead and hence can also be used - in production-like systems without greater performance degradation. - The given values have to be exact powers of 2 and STACK-SIZE has to - be greater than STACK-GUARD without exceeding 64k. In order to be - efficient the extra code makes the assumption that the stack starts - at an address aligned to the value given by STACK-SIZE. The - STACK-GUARD option can only be used in conjunction with STACK-SIZE. - -'-mhotpatch[=HALFWORDS]' -'-mno-hotpatch' - If the hotpatch option is enabled, a "hot-patching" function - prologue is generated for all functions in the compilation unit. - The funtion label is prepended with the given number of two-byte - Nop instructions (HALFWORDS, maximum 1000000) or 12 Nop - instructions if no argument is present. Functions with a - hot-patching prologue are never inlined automatically, and a - hot-patching prologue is never generated for functions functions - that are explicitly inline. - - This option can be overridden for individual functions with the - 'hotpatch' attribute. - - -File: gcc.info, Node: Score Options, Next: SH Options, Prev: S/390 and zSeries Options, Up: Submodel Options - -3.17.41 Score Options ---------------------- - -These options are defined for Score implementations: - -'-meb' - Compile code for big-endian mode. This is the default. - -'-mel' - Compile code for little-endian mode. - -'-mnhwloop' - Disable generation of 'bcnz' instructions. - -'-muls' - Enable generation of unaligned load and store instructions. - -'-mmac' - Enable the use of multiply-accumulate instructions. Disabled by - default. - -'-mscore5' - Specify the SCORE5 as the target architecture. - -'-mscore5u' - Specify the SCORE5U of the target architecture. - -'-mscore7' - Specify the SCORE7 as the target architecture. This is the - default. - -'-mscore7d' - Specify the SCORE7D as the target architecture. - - -File: gcc.info, Node: SH Options, Next: Solaris 2 Options, Prev: Score Options, Up: Submodel Options - -3.17.42 SH Options ------------------- - -These '-m' options are defined for the SH implementations: - -'-m1' - Generate code for the SH1. - -'-m2' - Generate code for the SH2. - -'-m2e' - Generate code for the SH2e. - -'-m2a-nofpu' - Generate code for the SH2a without FPU, or for a SH2a-FPU in such a - way that the floating-point unit is not used. - -'-m2a-single-only' - Generate code for the SH2a-FPU, in such a way that no - double-precision floating-point operations are used. - -'-m2a-single' - Generate code for the SH2a-FPU assuming the floating-point unit is - in single-precision mode by default. - -'-m2a' - Generate code for the SH2a-FPU assuming the floating-point unit is - in double-precision mode by default. - -'-m3' - Generate code for the SH3. - -'-m3e' - Generate code for the SH3e. - -'-m4-nofpu' - Generate code for the SH4 without a floating-point unit. - -'-m4-single-only' - Generate code for the SH4 with a floating-point unit that only - supports single-precision arithmetic. - -'-m4-single' - Generate code for the SH4 assuming the floating-point unit is in - single-precision mode by default. - -'-m4' - Generate code for the SH4. - -'-m4a-nofpu' - Generate code for the SH4al-dsp, or for a SH4a in such a way that - the floating-point unit is not used. - -'-m4a-single-only' - Generate code for the SH4a, in such a way that no double-precision - floating-point operations are used. - -'-m4a-single' - Generate code for the SH4a assuming the floating-point unit is in - single-precision mode by default. - -'-m4a' - Generate code for the SH4a. - -'-m4al' - Same as '-m4a-nofpu', except that it implicitly passes '-dsp' to - the assembler. GCC doesn't generate any DSP instructions at the - moment. - -'-mb' - Compile code for the processor in big-endian mode. - -'-ml' - Compile code for the processor in little-endian mode. - -'-mdalign' - Align doubles at 64-bit boundaries. Note that this changes the - calling conventions, and thus some functions from the standard C - library do not work unless you recompile it first with '-mdalign'. - -'-mrelax' - Shorten some address references at link time, when possible; uses - the linker option '-relax'. - -'-mbigtable' - Use 32-bit offsets in 'switch' tables. The default is to use - 16-bit offsets. - -'-mbitops' - Enable the use of bit manipulation instructions on SH2A. - -'-mfmovd' - Enable the use of the instruction 'fmovd'. Check '-mdalign' for - alignment constraints. - -'-mhitachi' - Comply with the calling conventions defined by Renesas. - -'-mrenesas' - Comply with the calling conventions defined by Renesas. - -'-mno-renesas' - Comply with the calling conventions defined for GCC before the - Renesas conventions were available. This option is the default for - all targets of the SH toolchain. - -'-mnomacsave' - Mark the 'MAC' register as call-clobbered, even if '-mhitachi' is - given. - -'-mieee' -'-mno-ieee' - Control the IEEE compliance of floating-point comparisons, which - affects the handling of cases where the result of a comparison is - unordered. By default '-mieee' is implicitly enabled. If - '-ffinite-math-only' is enabled '-mno-ieee' is implicitly set, - which results in faster floating-point greater-equal and less-equal - comparisons. The implcit settings can be overridden by specifying - either '-mieee' or '-mno-ieee'. - -'-minline-ic_invalidate' - Inline code to invalidate instruction cache entries after setting - up nested function trampolines. This option has no effect if - '-musermode' is in effect and the selected code generation option - (e.g. '-m4') does not allow the use of the 'icbi' instruction. If - the selected code generation option does not allow the use of the - 'icbi' instruction, and '-musermode' is not in effect, the inlined - code manipulates the instruction cache address array directly with - an associative write. This not only requires privileged mode at - run time, but it also fails if the cache line had been mapped via - the TLB and has become unmapped. - -'-misize' - Dump instruction size and location in the assembly code. - -'-mpadstruct' - This option is deprecated. It pads structures to multiple of 4 - bytes, which is incompatible with the SH ABI. - -'-matomic-model=MODEL' - Sets the model of atomic operations and additional parameters as a - comma separated list. For details on the atomic built-in functions - see *note __atomic Builtins::. The following models and parameters - are supported: - - 'none' - Disable compiler generated atomic sequences and emit library - calls for atomic operations. This is the default if the - target is not 'sh-*-linux*'. - - 'soft-gusa' - Generate GNU/Linux compatible gUSA software atomic sequences - for the atomic built-in functions. The generated atomic - sequences require additional support from the - interrupt/exception handling code of the system and are only - suitable for SH3* and SH4* single-core systems. This option - is enabled by default when the target is 'sh-*-linux*' and - SH3* or SH4*. When the target is SH4A, this option will also - partially utilize the hardware atomic instructions 'movli.l' - and 'movco.l' to create more efficient code, unless 'strict' - is specified. - - 'soft-tcb' - Generate software atomic sequences that use a variable in the - thread control block. This is a variation of the gUSA - sequences which can also be used on SH1* and SH2* targets. - The generated atomic sequences require additional support from - the interrupt/exception handling code of the system and are - only suitable for single-core systems. When using this model, - the 'gbr-offset=' parameter has to be specified as well. - - 'soft-imask' - Generate software atomic sequences that temporarily disable - interrupts by setting 'SR.IMASK = 1111'. This model works - only when the program runs in privileged mode and is only - suitable for single-core systems. Additional support from the - interrupt/exception handling code of the system is not - required. This model is enabled by default when the target is - 'sh-*-linux*' and SH1* or SH2*. - - 'hard-llcs' - Generate hardware atomic sequences using the 'movli.l' and - 'movco.l' instructions only. This is only available on SH4A - and is suitable for multi-core systems. Since the hardware - instructions support only 32 bit atomic variables access to 8 - or 16 bit variables is emulated with 32 bit accesses. Code - compiled with this option will also be compatible with other - software atomic model interrupt/exception handling systems if - executed on an SH4A system. Additional support from the - interrupt/exception handling code of the system is not - required for this model. - - 'gbr-offset=' - This parameter specifies the offset in bytes of the variable - in the thread control block structure that should be used by - the generated atomic sequences when the 'soft-tcb' model has - been selected. For other models this parameter is ignored. - The specified value must be an integer multiple of four and in - the range 0-1020. - - 'strict' - This parameter prevents mixed usage of multiple atomic models, - even though they would be compatible, and will make the - compiler generate atomic sequences of the specified model - only. - -'-mtas' - Generate the 'tas.b' opcode for '__atomic_test_and_set'. Notice - that depending on the particular hardware and software - configuration this can degrade overall performance due to the - operand cache line flushes that are implied by the 'tas.b' - instruction. On multi-core SH4A processors the 'tas.b' instruction - must be used with caution since it can result in data corruption - for certain cache configurations. - -'-mspace' - Optimize for space instead of speed. Implied by '-Os'. - -'-mprefergot' - When generating position-independent code, emit function calls - using the Global Offset Table instead of the Procedure Linkage - Table. - -'-musermode' - Don't generate privileged mode only code. This option implies - '-mno-inline-ic_invalidate' if the inlined code would not work in - user mode. This is the default when the target is 'sh-*-linux*'. - -'-multcost=NUMBER' - Set the cost to assume for a multiply insn. - -'-mdiv=STRATEGY' - Set the division strategy to be used for integer division - operations. For SHmedia STRATEGY can be one of: - - 'fp' - Performs the operation in floating point. This has a very - high latency, but needs only a few instructions, so it might - be a good choice if your code has enough easily-exploitable - ILP to allow the compiler to schedule the floating-point - instructions together with other instructions. Division by - zero causes a floating-point exception. - - 'inv' - Uses integer operations to calculate the inverse of the - divisor, and then multiplies the dividend with the inverse. - This strategy allows CSE and hoisting of the inverse - calculation. Division by zero calculates an unspecified - result, but does not trap. - - 'inv:minlat' - A variant of 'inv' where, if no CSE or hoisting opportunities - have been found, or if the entire operation has been hoisted - to the same place, the last stages of the inverse calculation - are intertwined with the final multiply to reduce the overall - latency, at the expense of using a few more instructions, and - thus offering fewer scheduling opportunities with other code. - - 'call' - Calls a library function that usually implements the - 'inv:minlat' strategy. This gives high code density for - 'm5-*media-nofpu' compilations. - - 'call2' - Uses a different entry point of the same library function, - where it assumes that a pointer to a lookup table has already - been set up, which exposes the pointer load to CSE and code - hoisting optimizations. - - 'inv:call' - 'inv:call2' - 'inv:fp' - Use the 'inv' algorithm for initial code generation, but if - the code stays unoptimized, revert to the 'call', 'call2', or - 'fp' strategies, respectively. Note that the - potentially-trapping side effect of division by zero is - carried by a separate instruction, so it is possible that all - the integer instructions are hoisted out, but the marker for - the side effect stays where it is. A recombination to - floating-point operations or a call is not possible in that - case. - - 'inv20u' - 'inv20l' - Variants of the 'inv:minlat' strategy. In the case that the - inverse calculation is not separated from the multiply, they - speed up division where the dividend fits into 20 bits (plus - sign where applicable) by inserting a test to skip a number of - operations in this case; this test slows down the case of - larger dividends. 'inv20u' assumes the case of a such a small - dividend to be unlikely, and 'inv20l' assumes it to be likely. - - For targets other than SHmedia STRATEGY can be one of: - - 'call-div1' - Calls a library function that uses the single-step division - instruction 'div1' to perform the operation. Division by zero - calculates an unspecified result and does not trap. This is - the default except for SH4, SH2A and SHcompact. - - 'call-fp' - Calls a library function that performs the operation in double - precision floating point. Division by zero causes a - floating-point exception. This is the default for SHcompact - with FPU. Specifying this for targets that do not have a - double precision FPU will default to 'call-div1'. - - 'call-table' - Calls a library function that uses a lookup table for small - divisors and the 'div1' instruction with case distinction for - larger divisors. Division by zero calculates an unspecified - result and does not trap. This is the default for SH4. - Specifying this for targets that do not have dynamic shift - instructions will default to 'call-div1'. - - When a division strategy has not been specified the default - strategy will be selected based on the current target. For SH2A - the default strategy is to use the 'divs' and 'divu' instructions - instead of library function calls. - -'-maccumulate-outgoing-args' - Reserve space once for outgoing arguments in the function prologue - rather than around each call. Generally beneficial for performance - and size. Also needed for unwinding to avoid changing the stack - frame around conditional code. - -'-mdivsi3_libfunc=NAME' - Set the name of the library function used for 32-bit signed - division to NAME. This only affects the name used in the 'call' - and 'inv:call' division strategies, and the compiler still expects - the same sets of input/output/clobbered registers as if this option - were not present. - -'-mfixed-range=REGISTER-RANGE' - Generate code treating the given register range as fixed registers. - A fixed register is one that the register allocator can not use. - This is useful when compiling kernel code. A register range is - specified as two registers separated by a dash. Multiple register - ranges can be specified separated by a comma. - -'-mindexed-addressing' - Enable the use of the indexed addressing mode for - SHmedia32/SHcompact. This is only safe if the hardware and/or OS - implement 32-bit wrap-around semantics for the indexed addressing - mode. The architecture allows the implementation of processors - with 64-bit MMU, which the OS could use to get 32-bit addressing, - but since no current hardware implementation supports this or any - other way to make the indexed addressing mode safe to use in the - 32-bit ABI, the default is '-mno-indexed-addressing'. - -'-mgettrcost=NUMBER' - Set the cost assumed for the 'gettr' instruction to NUMBER. The - default is 2 if '-mpt-fixed' is in effect, 100 otherwise. - -'-mpt-fixed' - Assume 'pt*' instructions won't trap. This generally generates - better-scheduled code, but is unsafe on current hardware. The - current architecture definition says that 'ptabs' and 'ptrel' trap - when the target anded with 3 is 3. This has the unintentional - effect of making it unsafe to schedule these instructions before a - branch, or hoist them out of a loop. For example, - '__do_global_ctors', a part of 'libgcc' that runs constructors at - program startup, calls functions in a list which is delimited by - -1. With the '-mpt-fixed' option, the 'ptabs' is done before - testing against -1. That means that all the constructors run a bit - more quickly, but when the loop comes to the end of the list, the - program crashes because 'ptabs' loads -1 into a target register. - - Since this option is unsafe for any hardware implementing the - current architecture specification, the default is '-mno-pt-fixed'. - Unless specified explicitly with '-mgettrcost', '-mno-pt-fixed' - also implies '-mgettrcost=100'; this deters register allocation - from using target registers for storing ordinary integers. - -'-minvalid-symbols' - Assume symbols might be invalid. Ordinary function symbols - generated by the compiler are always valid to load with - 'movi'/'shori'/'ptabs' or 'movi'/'shori'/'ptrel', but with - assembler and/or linker tricks it is possible to generate symbols - that cause 'ptabs' or 'ptrel' to trap. This option is only - meaningful when '-mno-pt-fixed' is in effect. It prevents - cross-basic-block CSE, hoisting and most scheduling of symbol - loads. The default is '-mno-invalid-symbols'. - -'-mbranch-cost=NUM' - Assume NUM to be the cost for a branch instruction. Higher numbers - make the compiler try to generate more branch-free code if - possible. If not specified the value is selected depending on the - processor type that is being compiled for. - -'-mzdcbranch' -'-mno-zdcbranch' - Assume (do not assume) that zero displacement conditional branch - instructions 'bt' and 'bf' are fast. If '-mzdcbranch' is - specified, the compiler will try to prefer zero displacement branch - code sequences. This is enabled by default when generating code - for SH4 and SH4A. It can be explicitly disabled by specifying - '-mno-zdcbranch'. - -'-mfused-madd' -'-mno-fused-madd' - Generate code that uses (does not use) the floating-point multiply - and accumulate instructions. These instructions are generated by - default if hardware floating point is used. The machine-dependent - '-mfused-madd' option is now mapped to the machine-independent - '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to - '-ffp-contract=off'. - -'-mfsca' -'-mno-fsca' - Allow or disallow the compiler to emit the 'fsca' instruction for - sine and cosine approximations. The option '-mfsca' must be used - in combination with '-funsafe-math-optimizations'. It is enabled - by default when generating code for SH4A. Using '-mno-fsca' - disables sine and cosine approximations even if - '-funsafe-math-optimizations' is in effect. - -'-mfsrra' -'-mno-fsrra' - Allow or disallow the compiler to emit the 'fsrra' instruction for - reciprocal square root approximations. The option '-mfsrra' must - be used in combination with '-funsafe-math-optimizations' and - '-ffinite-math-only'. It is enabled by default when generating - code for SH4A. Using '-mno-fsrra' disables reciprocal square root - approximations even if '-funsafe-math-optimizations' and - '-ffinite-math-only' are in effect. - -'-mpretend-cmove' - Prefer zero-displacement conditional branches for conditional move - instruction patterns. This can result in faster code on the SH4 - processor. - - -File: gcc.info, Node: Solaris 2 Options, Next: SPARC Options, Prev: SH Options, Up: Submodel Options - -3.17.43 Solaris 2 Options -------------------------- - -These '-m' options are supported on Solaris 2: - -'-mimpure-text' - '-mimpure-text', used in addition to '-shared', tells the compiler - to not pass '-z text' to the linker when linking a shared object. - Using this option, you can link position-dependent code into a - shared object. - - '-mimpure-text' suppresses the "relocations remain against - allocatable but non-writable sections" linker error message. - However, the necessary relocations trigger copy-on-write, and the - shared object is not actually shared across processes. Instead of - using '-mimpure-text', you should compile all source code with - '-fpic' or '-fPIC'. - - These switches are supported in addition to the above on Solaris 2: - -'-pthreads' - Add support for multithreading using the POSIX threads library. - This option sets flags for both the preprocessor and linker. This - option does not affect the thread safety of object code produced by - the compiler or that of libraries supplied with it. - -'-pthread' - This is a synonym for '-pthreads'. - - -File: gcc.info, Node: SPARC Options, Next: SPU Options, Prev: Solaris 2 Options, Up: Submodel Options - -3.17.44 SPARC Options ---------------------- - -These '-m' options are supported on the SPARC: - -'-mno-app-regs' -'-mapp-regs' - Specify '-mapp-regs' to generate output using the global registers - 2 through 4, which the SPARC SVR4 ABI reserves for applications. - Like the global register 1, each global register 2 through 4 is - then treated as an allocable register that is clobbered by function - calls. This is the default. - - To be fully SVR4 ABI-compliant at the cost of some performance - loss, specify '-mno-app-regs'. You should compile libraries and - system software with this option. - -'-mflat' -'-mno-flat' - With '-mflat', the compiler does not generate save/restore - instructions and uses a "flat" or single register window model. - This model is compatible with the regular register window model. - The local registers and the input registers (0-5) are still treated - as "call-saved" registers and are saved on the stack as needed. - - With '-mno-flat' (the default), the compiler generates save/restore - instructions (except for leaf functions). This is the normal - operating mode. - -'-mfpu' -'-mhard-float' - Generate output containing floating-point instructions. This is - the default. - -'-mno-fpu' -'-msoft-float' - Generate output containing library calls for floating point. - *Warning:* the requisite libraries are not available for all SPARC - targets. Normally the facilities of the machine's usual C compiler - are used, but this cannot be done directly in cross-compilation. - You must make your own arrangements to provide suitable library - functions for cross-compilation. The embedded targets - 'sparc-*-aout' and 'sparclite-*-*' do provide software - floating-point support. - - '-msoft-float' changes the calling convention in the output file; - therefore, it is only useful if you compile _all_ of a program with - this option. In particular, you need to compile 'libgcc.a', the - library that comes with GCC, with '-msoft-float' in order for this - to work. - -'-mhard-quad-float' - Generate output containing quad-word (long double) floating-point - instructions. - -'-msoft-quad-float' - Generate output containing library calls for quad-word (long - double) floating-point instructions. The functions called are - those specified in the SPARC ABI. This is the default. - - As of this writing, there are no SPARC implementations that have - hardware support for the quad-word floating-point instructions. - They all invoke a trap handler for one of these instructions, and - then the trap handler emulates the effect of the instruction. - Because of the trap handler overhead, this is much slower than - calling the ABI library routines. Thus the '-msoft-quad-float' - option is the default. - -'-mno-unaligned-doubles' -'-munaligned-doubles' - Assume that doubles have 8-byte alignment. This is the default. - - With '-munaligned-doubles', GCC assumes that doubles have 8-byte - alignment only if they are contained in another type, or if they - have an absolute address. Otherwise, it assumes they have 4-byte - alignment. Specifying this option avoids some rare compatibility - problems with code generated by other compilers. It is not the - default because it results in a performance loss, especially for - floating-point code. - -'-mno-faster-structs' -'-mfaster-structs' - With '-mfaster-structs', the compiler assumes that structures - should have 8-byte alignment. This enables the use of pairs of - 'ldd' and 'std' instructions for copies in structure assignment, in - place of twice as many 'ld' and 'st' pairs. However, the use of - this changed alignment directly violates the SPARC ABI. Thus, it's - intended only for use on targets where the developer acknowledges - that their resulting code is not directly in line with the rules of - the ABI. - -'-mcpu=CPU_TYPE' - Set the instruction set, register set, and instruction scheduling - parameters for machine type CPU_TYPE. Supported values for - CPU_TYPE are 'v7', 'cypress', 'v8', 'supersparc', 'hypersparc', - 'leon', 'leon3', 'sparclite', 'f930', 'f934', 'sparclite86x', - 'sparclet', 'tsc701', 'v9', 'ultrasparc', 'ultrasparc3', 'niagara', - 'niagara2', 'niagara3' and 'niagara4'. - - Native Solaris and GNU/Linux toolchains also support the value - 'native', which selects the best architecture option for the host - processor. '-mcpu=native' has no effect if GCC does not recognize - the processor. - - Default instruction scheduling parameters are used for values that - select an architecture and not an implementation. These are 'v7', - 'v8', 'sparclite', 'sparclet', 'v9'. - - Here is a list of each supported architecture and their supported - implementations. - - v7 - cypress - - v8 - supersparc, hypersparc, leon, leon3 - - sparclite - f930, f934, sparclite86x - - sparclet - tsc701 - - v9 - ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4 - - By default (unless configured otherwise), GCC generates code for - the V7 variant of the SPARC architecture. With '-mcpu=cypress', - the compiler additionally optimizes it for the Cypress CY7C602 - chip, as used in the SPARCStation/SPARCServer 3xx series. This is - also appropriate for the older SPARCStation 1, 2, IPX etc. - - With '-mcpu=v8', GCC generates code for the V8 variant of the SPARC - architecture. The only difference from V7 code is that the - compiler emits the integer multiply and integer divide instructions - which exist in SPARC-V8 but not in SPARC-V7. With - '-mcpu=supersparc', the compiler additionally optimizes it for the - SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000 - series. - - With '-mcpu=sparclite', GCC generates code for the SPARClite - variant of the SPARC architecture. This adds the integer multiply, - integer divide step and scan ('ffs') instructions which exist in - SPARClite but not in SPARC-V7. With '-mcpu=f930', the compiler - additionally optimizes it for the Fujitsu MB86930 chip, which is - the original SPARClite, with no FPU. With '-mcpu=f934', the - compiler additionally optimizes it for the Fujitsu MB86934 chip, - which is the more recent SPARClite with FPU. - - With '-mcpu=sparclet', GCC generates code for the SPARClet variant - of the SPARC architecture. This adds the integer multiply, - multiply/accumulate, integer divide step and scan ('ffs') - instructions which exist in SPARClet but not in SPARC-V7. With - '-mcpu=tsc701', the compiler additionally optimizes it for the - TEMIC SPARClet chip. - - With '-mcpu=v9', GCC generates code for the V9 variant of the SPARC - architecture. This adds 64-bit integer and floating-point move - instructions, 3 additional floating-point condition code registers - and conditional move instructions. With '-mcpu=ultrasparc', the - compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi - chips. With '-mcpu=ultrasparc3', the compiler additionally - optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ - chips. With '-mcpu=niagara', the compiler additionally optimizes - it for Sun UltraSPARC T1 chips. With '-mcpu=niagara2', the - compiler additionally optimizes it for Sun UltraSPARC T2 chips. - With '-mcpu=niagara3', the compiler additionally optimizes it for - Sun UltraSPARC T3 chips. With '-mcpu=niagara4', the compiler - additionally optimizes it for Sun UltraSPARC T4 chips. - -'-mtune=CPU_TYPE' - Set the instruction scheduling parameters for machine type - CPU_TYPE, but do not set the instruction set or register set that - the option '-mcpu=CPU_TYPE' does. - - The same values for '-mcpu=CPU_TYPE' can be used for - '-mtune=CPU_TYPE', but the only useful values are those that select - a particular CPU implementation. Those are 'cypress', - 'supersparc', 'hypersparc', 'leon', 'leon3', 'f930', 'f934', - 'sparclite86x', 'tsc701', 'ultrasparc', 'ultrasparc3', 'niagara', - 'niagara2', 'niagara3' and 'niagara4'. With native Solaris and - GNU/Linux toolchains, 'native' can also be used. - -'-mv8plus' -'-mno-v8plus' - With '-mv8plus', GCC generates code for the SPARC-V8+ ABI. The - difference from the V8 ABI is that the global and out registers are - considered 64 bits wide. This is enabled by default on Solaris in - 32-bit mode for all SPARC-V9 processors. - -'-mvis' -'-mno-vis' - With '-mvis', GCC generates code that takes advantage of the - UltraSPARC Visual Instruction Set extensions. The default is - '-mno-vis'. - -'-mvis2' -'-mno-vis2' - With '-mvis2', GCC generates code that takes advantage of version - 2.0 of the UltraSPARC Visual Instruction Set extensions. The - default is '-mvis2' when targeting a cpu that supports such - instructions, such as UltraSPARC-III and later. Setting '-mvis2' - also sets '-mvis'. - -'-mvis3' -'-mno-vis3' - With '-mvis3', GCC generates code that takes advantage of version - 3.0 of the UltraSPARC Visual Instruction Set extensions. The - default is '-mvis3' when targeting a cpu that supports such - instructions, such as niagara-3 and later. Setting '-mvis3' also - sets '-mvis2' and '-mvis'. - -'-mcbcond' -'-mno-cbcond' - With '-mcbcond', GCC generates code that takes advantage of - compare-and-branch instructions, as defined in the Sparc - Architecture 2011. The default is '-mcbcond' when targeting a cpu - that supports such instructions, such as niagara-4 and later. - -'-mpopc' -'-mno-popc' - With '-mpopc', GCC generates code that takes advantage of the - UltraSPARC population count instruction. The default is '-mpopc' - when targeting a cpu that supports such instructions, such as - Niagara-2 and later. - -'-mfmaf' -'-mno-fmaf' - With '-mfmaf', GCC generates code that takes advantage of the - UltraSPARC Fused Multiply-Add Floating-point extensions. The - default is '-mfmaf' when targeting a cpu that supports such - instructions, such as Niagara-3 and later. - -'-mfix-at697f' - Enable the documented workaround for the single erratum of the - Atmel AT697F processor (which corresponds to erratum #13 of the - AT697E processor). - -'-mfix-ut699' - Enable the documented workarounds for the floating-point errata and - the data cache nullify errata of the UT699 processor. - - These '-m' options are supported in addition to the above on SPARC-V9 -processors in 64-bit environments: - -'-m32' -'-m64' - Generate code for a 32-bit or 64-bit environment. The 32-bit - environment sets int, long and pointer to 32 bits. The 64-bit - environment sets int to 32 bits and long and pointer to 64 bits. - -'-mcmodel=WHICH' - Set the code model to one of - - 'medlow' - The Medium/Low code model: 64-bit addresses, programs must be - linked in the low 32 bits of memory. Programs can be - statically or dynamically linked. - - 'medmid' - The Medium/Middle code model: 64-bit addresses, programs must - be linked in the low 44 bits of memory, the text and data - segments must be less than 2GB in size and the data segment - must be located within 2GB of the text segment. - - 'medany' - The Medium/Anywhere code model: 64-bit addresses, programs may - be linked anywhere in memory, the text and data segments must - be less than 2GB in size and the data segment must be located - within 2GB of the text segment. - - 'embmedany' - The Medium/Anywhere code model for embedded systems: 64-bit - addresses, the text and data segments must be less than 2GB in - size, both starting anywhere in memory (determined at link - time). The global register %g4 points to the base of the data - segment. Programs are statically linked and PIC is not - supported. - -'-mmemory-model=MEM-MODEL' - Set the memory model in force on the processor to one of - - 'default' - The default memory model for the processor and operating - system. - - 'rmo' - Relaxed Memory Order - - 'pso' - Partial Store Order - - 'tso' - Total Store Order - - 'sc' - Sequential Consistency - - These memory models are formally defined in Appendix D of the Sparc - V9 architecture manual, as set in the processor's 'PSTATE.MM' - field. - -'-mstack-bias' -'-mno-stack-bias' - With '-mstack-bias', GCC assumes that the stack pointer, and frame - pointer if present, are offset by -2047 which must be added back - when making stack frame references. This is the default in 64-bit - mode. Otherwise, assume no such offset is present. - - -File: gcc.info, Node: SPU Options, Next: System V Options, Prev: SPARC Options, Up: Submodel Options - -3.17.45 SPU Options -------------------- - -These '-m' options are supported on the SPU: - -'-mwarn-reloc' -'-merror-reloc' - - The loader for SPU does not handle dynamic relocations. By - default, GCC gives an error when it generates code that requires a - dynamic relocation. '-mno-error-reloc' disables the error, - '-mwarn-reloc' generates a warning instead. - -'-msafe-dma' -'-munsafe-dma' - - Instructions that initiate or test completion of DMA must not be - reordered with respect to loads and stores of the memory that is - being accessed. With '-munsafe-dma' you must use the 'volatile' - keyword to protect memory accesses, but that can lead to - inefficient code in places where the memory is known to not change. - Rather than mark the memory as volatile, you can use '-msafe-dma' - to tell the compiler to treat the DMA instructions as potentially - affecting all memory. - -'-mbranch-hints' - - By default, GCC generates a branch hint instruction to avoid - pipeline stalls for always-taken or probably-taken branches. A - hint is not generated closer than 8 instructions away from its - branch. There is little reason to disable them, except for - debugging purposes, or to make an object a little bit smaller. - -'-msmall-mem' -'-mlarge-mem' - - By default, GCC generates code assuming that addresses are never - larger than 18 bits. With '-mlarge-mem' code is generated that - assumes a full 32-bit address. - -'-mstdmain' - - By default, GCC links against startup code that assumes the - SPU-style main function interface (which has an unconventional - parameter list). With '-mstdmain', GCC links your program against - startup code that assumes a C99-style interface to 'main', - including a local copy of 'argv' strings. - -'-mfixed-range=REGISTER-RANGE' - Generate code treating the given register range as fixed registers. - A fixed register is one that the register allocator cannot use. - This is useful when compiling kernel code. A register range is - specified as two registers separated by a dash. Multiple register - ranges can be specified separated by a comma. - -'-mea32' -'-mea64' - Compile code assuming that pointers to the PPU address space - accessed via the '__ea' named address space qualifier are either 32 - or 64 bits wide. The default is 32 bits. As this is an - ABI-changing option, all object code in an executable must be - compiled with the same setting. - -'-maddress-space-conversion' -'-mno-address-space-conversion' - Allow/disallow treating the '__ea' address space as superset of the - generic address space. This enables explicit type casts between - '__ea' and generic pointer as well as implicit conversions of - generic pointers to '__ea' pointers. The default is to allow - address space pointer conversions. - -'-mcache-size=CACHE-SIZE' - This option controls the version of libgcc that the compiler links - to an executable and selects a software-managed cache for accessing - variables in the '__ea' address space with a particular cache size. - Possible options for CACHE-SIZE are '8', '16', '32', '64' and - '128'. The default cache size is 64KB. - -'-matomic-updates' -'-mno-atomic-updates' - This option controls the version of libgcc that the compiler links - to an executable and selects whether atomic updates to the - software-managed cache of PPU-side variables are used. If you use - atomic updates, changes to a PPU variable from SPU code using the - '__ea' named address space qualifier do not interfere with changes - to other PPU variables residing in the same cache line from PPU - code. If you do not use atomic updates, such interference may - occur; however, writing back cache lines is more efficient. The - default behavior is to use atomic updates. - -'-mdual-nops' -'-mdual-nops=N' - By default, GCC inserts nops to increase dual issue when it expects - it to increase performance. N can be a value from 0 to 10. A - smaller N inserts fewer nops. 10 is the default, 0 is the same as - '-mno-dual-nops'. Disabled with '-Os'. - -'-mhint-max-nops=N' - Maximum number of nops to insert for a branch hint. A branch hint - must be at least 8 instructions away from the branch it is - affecting. GCC inserts up to N nops to enforce this, otherwise it - does not generate the branch hint. - -'-mhint-max-distance=N' - The encoding of the branch hint instruction limits the hint to be - within 256 instructions of the branch it is affecting. By default, - GCC makes sure it is within 125. - -'-msafe-hints' - Work around a hardware bug that causes the SPU to stall - indefinitely. By default, GCC inserts the 'hbrp' instruction to - make sure this stall won't happen. - - -File: gcc.info, Node: System V Options, Next: TILE-Gx Options, Prev: SPU Options, Up: Submodel Options - -3.17.46 Options for System V ----------------------------- - -These additional options are available on System V Release 4 for -compatibility with other compilers on those systems: - -'-G' - Create a shared object. It is recommended that '-symbolic' or - '-shared' be used instead. - -'-Qy' - Identify the versions of each tool used by the compiler, in a - '.ident' assembler directive in the output. - -'-Qn' - Refrain from adding '.ident' directives to the output file (this is - the default). - -'-YP,DIRS' - Search the directories DIRS, and no others, for libraries specified - with '-l'. - -'-Ym,DIR' - Look in the directory DIR to find the M4 preprocessor. The - assembler uses this option. - - -File: gcc.info, Node: TILE-Gx Options, Next: TILEPro Options, Prev: System V Options, Up: Submodel Options - -3.17.47 TILE-Gx Options ------------------------ - -These '-m' options are supported on the TILE-Gx: - -'-mcmodel=small' - Generate code for the small model. The distance for direct calls - is limited to 500M in either direction. PC-relative addresses are - 32 bits. Absolute addresses support the full address range. - -'-mcmodel=large' - Generate code for the large model. There is no limitation on call - distance, pc-relative addresses, or absolute addresses. - -'-mcpu=NAME' - Selects the type of CPU to be targeted. Currently the only - supported type is 'tilegx'. - -'-m32' -'-m64' - Generate code for a 32-bit or 64-bit environment. The 32-bit - environment sets int, long, and pointer to 32 bits. The 64-bit - environment sets int to 32 bits and long and pointer to 64 bits. - -'-mbig-endian' -'-mlittle-endian' - Generate code in big/little endian mode, respectively. - - -File: gcc.info, Node: TILEPro Options, Next: V850 Options, Prev: TILE-Gx Options, Up: Submodel Options - -3.17.48 TILEPro Options ------------------------ - -These '-m' options are supported on the TILEPro: - -'-mcpu=NAME' - Selects the type of CPU to be targeted. Currently the only - supported type is 'tilepro'. - -'-m32' - Generate code for a 32-bit environment, which sets int, long, and - pointer to 32 bits. This is the only supported behavior so the - flag is essentially ignored. - - -File: gcc.info, Node: V850 Options, Next: VAX Options, Prev: TILEPro Options, Up: Submodel Options - -3.17.49 V850 Options --------------------- - -These '-m' options are defined for V850 implementations: - -'-mlong-calls' -'-mno-long-calls' - Treat all calls as being far away (near). If calls are assumed to - be far away, the compiler always loads the function's address into - a register, and calls indirect through the pointer. - -'-mno-ep' -'-mep' - Do not optimize (do optimize) basic blocks that use the same index - pointer 4 or more times to copy pointer into the 'ep' register, and - use the shorter 'sld' and 'sst' instructions. The '-mep' option is - on by default if you optimize. - -'-mno-prolog-function' -'-mprolog-function' - Do not use (do use) external functions to save and restore - registers at the prologue and epilogue of a function. The external - functions are slower, but use less code space if more than one - function saves the same number of registers. The - '-mprolog-function' option is on by default if you optimize. - -'-mspace' - Try to make the code as small as possible. At present, this just - turns on the '-mep' and '-mprolog-function' options. - -'-mtda=N' - Put static or global variables whose size is N bytes or less into - the tiny data area that register 'ep' points to. The tiny data - area can hold up to 256 bytes in total (128 bytes for byte - references). - -'-msda=N' - Put static or global variables whose size is N bytes or less into - the small data area that register 'gp' points to. The small data - area can hold up to 64 kilobytes. - -'-mzda=N' - Put static or global variables whose size is N bytes or less into - the first 32 kilobytes of memory. - -'-mv850' - Specify that the target processor is the V850. - -'-mv850e3v5' - Specify that the target processor is the V850E3V5. The - preprocessor constant '__v850e3v5__' is defined if this option is - used. - -'-mv850e2v4' - Specify that the target processor is the V850E3V5. This is an - alias for the '-mv850e3v5' option. - -'-mv850e2v3' - Specify that the target processor is the V850E2V3. The - preprocessor constant '__v850e2v3__' is defined if this option is - used. - -'-mv850e2' - Specify that the target processor is the V850E2. The preprocessor - constant '__v850e2__' is defined if this option is used. - -'-mv850e1' - Specify that the target processor is the V850E1. The preprocessor - constants '__v850e1__' and '__v850e__' are defined if this option - is used. - -'-mv850es' - Specify that the target processor is the V850ES. This is an alias - for the '-mv850e1' option. - -'-mv850e' - Specify that the target processor is the V850E. The preprocessor - constant '__v850e__' is defined if this option is used. - - If neither '-mv850' nor '-mv850e' nor '-mv850e1' nor '-mv850e2' nor - '-mv850e2v3' nor '-mv850e3v5' are defined then a default target - processor is chosen and the relevant '__v850*__' preprocessor - constant is defined. - - The preprocessor constants '__v850' and '__v851__' are always - defined, regardless of which processor variant is the target. - -'-mdisable-callt' -'-mno-disable-callt' - This option suppresses generation of the 'CALLT' instruction for - the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the - v850 architecture. - - This option is enabled by default when the RH850 ABI is in use (see - '-mrh850-abi'), and disabled by default when the GCC ABI is in use. - If 'CALLT' instructions are being generated then the C preprocessor - symbol '__V850_CALLT__' will be defined. - -'-mrelax' -'-mno-relax' - Pass on (or do not pass on) the '-mrelax' command line option to - the assembler. - -'-mlong-jumps' -'-mno-long-jumps' - Disable (or re-enable) the generation of PC-relative jump - instructions. - -'-msoft-float' -'-mhard-float' - Disable (or re-enable) the generation of hardware floating point - instructions. This option is only significant when the target - architecture is 'V850E2V3' or higher. If hardware floating point - instructions are being generated then the C preprocessor symbol - '__FPU_OK__' will be defined, otherwise the symbol '__NO_FPU__' - will be defined. - -'-mloop' - Enables the use of the e3v5 LOOP instruction. The use of this - instruction is not enabled by default when the e3v5 architecture is - selected because its use is still experimental. - -'-mrh850-abi' -'-mghs' - Enables support for the RH850 version of the V850 ABI. This is the - default. With this version of the ABI the following rules apply: - - * Integer sized structures and unions are returned via a memory - pointer rather than a register. - - * Large structures and unions (more than 8 bytes in size) are - passed by value. - - * Functions are aligned to 16-bit boundaries. - - * The '-m8byte-align' command line option is supported. - - * The '-mdisable-callt' command line option is enabled by - default. The '-mno-disable-callt' command line option is not - supported. - - When this version of the ABI is enabled the C preprocessor symbol - '__V850_RH850_ABI__' is defined. - -'-mgcc-abi' - Enables support for the old GCC version of the V850 ABI. With this - version of the ABI the following rules apply: - - * Integer sized structures and unions are returned in register - 'r10'. - - * Large structures and unions (more than 8 bytes in size) are - passed by reference. - - * Functions are aligned to 32-bit boundaries, unless optimizing - for size. - - * The '-m8byte-align' command line option is not supported. - - * The '-mdisable-callt' command line option is supported but not - enabled by default. - - When this version of the ABI is enabled the C preprocessor symbol - '__V850_GCC_ABI__' is defined. - -'-m8byte-align' -'-mno-8byte-align' - Enables support for 'doubles' and 'long long' types to be aligned - on 8-byte boundaries. The default is to restrict the alignment of - all objects to at most 4-bytes. When '-m8byte-align' is in effect - the C preprocessor symbol '__V850_8BYTE_ALIGN__' will be defined. - -'-mbig-switch' - Generate code suitable for big switch tables. Use this option only - if the assembler/linker complain about out of range branches within - a switch table. - -'-mapp-regs' - This option causes r2 and r5 to be used in the code generated by - the compiler. This setting is the default. - -'-mno-app-regs' - This option causes r2 and r5 to be treated as fixed registers. - - -File: gcc.info, Node: VAX Options, Next: VMS Options, Prev: V850 Options, Up: Submodel Options - -3.17.50 VAX Options -------------------- - -These '-m' options are defined for the VAX: - -'-munix' - Do not output certain jump instructions ('aobleq' and so on) that - the Unix assembler for the VAX cannot handle across long ranges. - -'-mgnu' - Do output those jump instructions, on the assumption that the GNU - assembler is being used. - -'-mg' - Output code for G-format floating-point numbers instead of - D-format. - - -File: gcc.info, Node: VMS Options, Next: VxWorks Options, Prev: VAX Options, Up: Submodel Options - -3.17.51 VMS Options -------------------- - -These '-m' options are defined for the VMS implementations: - -'-mvms-return-codes' - Return VMS condition codes from 'main'. The default is to return - POSIX-style condition (e.g. error) codes. - -'-mdebug-main=PREFIX' - Flag the first routine whose name starts with PREFIX as the main - routine for the debugger. - -'-mmalloc64' - Default to 64-bit memory allocation routines. - -'-mpointer-size=SIZE' - Set the default size of pointers. Possible options for SIZE are - '32' or 'short' for 32 bit pointers, '64' or 'long' for 64 bit - pointers, and 'no' for supporting only 32 bit pointers. The later - option disables 'pragma pointer_size'. - - -File: gcc.info, Node: VxWorks Options, Next: x86-64 Options, Prev: VMS Options, Up: Submodel Options - -3.17.52 VxWorks Options ------------------------ - -The options in this section are defined for all VxWorks targets. -Options specific to the target hardware are listed with the other -options for that target. - -'-mrtp' - GCC can generate code for both VxWorks kernels and real time - processes (RTPs). This option switches from the former to the - latter. It also defines the preprocessor macro '__RTP__'. - -'-non-static' - Link an RTP executable against shared libraries rather than static - libraries. The options '-static' and '-shared' can also be used - for RTPs (*note Link Options::); '-static' is the default. - -'-Bstatic' -'-Bdynamic' - These options are passed down to the linker. They are defined for - compatibility with Diab. - -'-Xbind-lazy' - Enable lazy binding of function calls. This option is equivalent - to '-Wl,-z,now' and is defined for compatibility with Diab. - -'-Xbind-now' - Disable lazy binding of function calls. This option is the default - and is defined for compatibility with Diab. - - -File: gcc.info, Node: x86-64 Options, Next: Xstormy16 Options, Prev: VxWorks Options, Up: Submodel Options - -3.17.53 x86-64 Options ----------------------- - -These are listed under *Note i386 and x86-64 Options::. - - -File: gcc.info, Node: Xstormy16 Options, Next: Xtensa Options, Prev: x86-64 Options, Up: Submodel Options - -3.17.54 Xstormy16 Options -------------------------- - -These options are defined for Xstormy16: - -'-msim' - Choose startup files and linker script suitable for the simulator. - - -File: gcc.info, Node: Xtensa Options, Next: zSeries Options, Prev: Xstormy16 Options, Up: Submodel Options - -3.17.55 Xtensa Options ----------------------- - -These options are supported for Xtensa targets: - -'-mconst16' -'-mno-const16' - Enable or disable use of 'CONST16' instructions for loading - constant values. The 'CONST16' instruction is currently not a - standard option from Tensilica. When enabled, 'CONST16' - instructions are always used in place of the standard 'L32R' - instructions. The use of 'CONST16' is enabled by default only if - the 'L32R' instruction is not available. - -'-mfused-madd' -'-mno-fused-madd' - Enable or disable use of fused multiply/add and multiply/subtract - instructions in the floating-point option. This has no effect if - the floating-point option is not also enabled. Disabling fused - multiply/add and multiply/subtract instructions forces the compiler - to use separate instructions for the multiply and add/subtract - operations. This may be desirable in some cases where strict IEEE - 754-compliant results are required: the fused multiply add/subtract - instructions do not round the intermediate result, thereby - producing results with _more_ bits of precision than specified by - the IEEE standard. Disabling fused multiply add/subtract - instructions also ensures that the program output is not sensitive - to the compiler's ability to combine multiply and add/subtract - operations. - -'-mserialize-volatile' -'-mno-serialize-volatile' - When this option is enabled, GCC inserts 'MEMW' instructions before - 'volatile' memory references to guarantee sequential consistency. - The default is '-mserialize-volatile'. Use - '-mno-serialize-volatile' to omit the 'MEMW' instructions. - -'-mforce-no-pic' - For targets, like GNU/Linux, where all user-mode Xtensa code must - be position-independent code (PIC), this option disables PIC for - compiling kernel code. - -'-mtext-section-literals' -'-mno-text-section-literals' - Control the treatment of literal pools. The default is - '-mno-text-section-literals', which places literals in a separate - section in the output file. This allows the literal pool to be - placed in a data RAM/ROM, and it also allows the linker to combine - literal pools from separate object files to remove redundant - literals and improve code size. With '-mtext-section-literals', - the literals are interspersed in the text section in order to keep - them as close as possible to their references. This may be - necessary for large assembly files. - -'-mtarget-align' -'-mno-target-align' - When this option is enabled, GCC instructs the assembler to - automatically align instructions to reduce branch penalties at the - expense of some code density. The assembler attempts to widen - density instructions to align branch targets and the instructions - following call instructions. If there are not enough preceding - safe density instructions to align a target, no widening is - performed. The default is '-mtarget-align'. These options do not - affect the treatment of auto-aligned instructions like 'LOOP', - which the assembler always aligns, either by widening density - instructions or by inserting NOP instructions. - -'-mlongcalls' -'-mno-longcalls' - When this option is enabled, GCC instructs the assembler to - translate direct calls to indirect calls unless it can determine - that the target of a direct call is in the range allowed by the - call instruction. This translation typically occurs for calls to - functions in other source files. Specifically, the assembler - translates a direct 'CALL' instruction into an 'L32R' followed by a - 'CALLX' instruction. The default is '-mno-longcalls'. This option - should be used in programs where the call target can potentially be - out of range. This option is implemented in the assembler, not the - compiler, so the assembly code generated by GCC still shows direct - call instructions--look at the disassembled object code to see the - actual instructions. Note that the assembler uses an indirect call - for every cross-file call, not just those that really are out of - range. - - -File: gcc.info, Node: zSeries Options, Prev: Xtensa Options, Up: Submodel Options - -3.17.56 zSeries Options ------------------------ - -These are listed under *Note S/390 and zSeries Options::. - - -File: gcc.info, Node: Code Gen Options, Next: Environment Variables, Prev: Submodel Options, Up: Invoking GCC - -3.18 Options for Code Generation Conventions -============================================ - -These machine-independent options control the interface conventions used -in code generation. - - Most of them have both positive and negative forms; the negative form -of '-ffoo' is '-fno-foo'. In the table below, only one of the forms is -listed--the one that is not the default. You can figure out the other -form by either removing 'no-' or adding it. - -'-fbounds-check' - For front ends that support it, generate additional code to check - that indices used to access arrays are within the declared range. - This is currently only supported by the Java and Fortran front - ends, where this option defaults to true and false respectively. - -'-fstack-reuse=REUSE-LEVEL' - This option controls stack space reuse for user declared local/auto - variables and compiler generated temporaries. REUSE_LEVEL can be - 'all', 'named_vars', or 'none'. 'all' enables stack reuse for all - local variables and temporaries, 'named_vars' enables the reuse - only for user defined local variables with names, and 'none' - disables stack reuse completely. The default value is 'all'. The - option is needed when the program extends the lifetime of a scoped - local variable or a compiler generated temporary beyond the end - point defined by the language. When a lifetime of a variable ends, - and if the variable lives in memory, the optimizing compiler has - the freedom to reuse its stack space with other temporaries or - scoped local variables whose live range does not overlap with it. - Legacy code extending local lifetime will likely to break with the - stack reuse optimization. - - For example, - - int *p; - { - int local1; - - p = &local1; - local1 = 10; - .... - } - { - int local2; - local2 = 20; - ... - } - - if (*p == 10) // out of scope use of local1 - { - - } - - Another example: - - struct A - { - A(int k) : i(k), j(k) { } - int i; - int j; - }; - - A *ap; - - void foo(const A& ar) - { - ap = &ar; - } - - void bar() - { - foo(A(10)); // temp object's lifetime ends when foo returns - - { - A a(20); - .... - } - ap->i+= 10; // ap references out of scope temp whose space - // is reused with a. What is the value of ap->i? - } - - The lifetime of a compiler generated temporary is well defined by - the C++ standard. When a lifetime of a temporary ends, and if the - temporary lives in memory, the optimizing compiler has the freedom - to reuse its stack space with other temporaries or scoped local - variables whose live range does not overlap with it. However some - of the legacy code relies on the behavior of older compilers in - which temporaries' stack space is not reused, the aggressive stack - reuse can lead to runtime errors. This option is used to control - the temporary stack reuse optimization. - -'-ftrapv' - This option generates traps for signed overflow on addition, - subtraction, multiplication operations. - -'-fwrapv' - This option instructs the compiler to assume that signed arithmetic - overflow of addition, subtraction and multiplication wraps around - using twos-complement representation. This flag enables some - optimizations and disables others. This option is enabled by - default for the Java front end, as required by the Java language - specification. - -'-fexceptions' - Enable exception handling. Generates extra code needed to - propagate exceptions. For some targets, this implies GCC generates - frame unwind information for all functions, which can produce - significant data size overhead, although it does not affect - execution. If you do not specify this option, GCC enables it by - default for languages like C++ that normally require exception - handling, and disables it for languages like C that do not normally - require it. However, you may need to enable this option when - compiling C code that needs to interoperate properly with exception - handlers written in C++. You may also wish to disable this option - if you are compiling older C++ programs that don't use exception - handling. - -'-fnon-call-exceptions' - Generate code that allows trapping instructions to throw - exceptions. Note that this requires platform-specific runtime - support that does not exist everywhere. Moreover, it only allows - _trapping_ instructions to throw exceptions, i.e. memory references - or floating-point instructions. It does not allow exceptions to be - thrown from arbitrary signal handlers such as 'SIGALRM'. - -'-fdelete-dead-exceptions' - Consider that instructions that may throw exceptions but don't - otherwise contribute to the execution of the program can be - optimized away. This option is enabled by default for the Ada - front end, as permitted by the Ada language specification. - Optimization passes that cause dead exceptions to be removed are - enabled independently at different optimization levels. - -'-funwind-tables' - Similar to '-fexceptions', except that it just generates any needed - static data, but does not affect the generated code in any other - way. You normally do not need to enable this option; instead, a - language processor that needs this handling enables it on your - behalf. - -'-fasynchronous-unwind-tables' - Generate unwind table in DWARF 2 format, if supported by target - machine. The table is exact at each instruction boundary, so it - can be used for stack unwinding from asynchronous events (such as - debugger or garbage collector). - -'-fno-gnu-unique' - On systems with recent GNU assembler and C library, the C++ - compiler uses the 'STB_GNU_UNIQUE' binding to make sure that - definitions of template static data members and static local - variables in inline functions are unique even in the presence of - 'RTLD_LOCAL'; this is necessary to avoid problems with a library - used by two different 'RTLD_LOCAL' plugins depending on a - definition in one of them and therefore disagreeing with the other - one about the binding of the symbol. But this causes 'dlclose' to - be ignored for affected DSOs; if your program relies on - reinitialization of a DSO via 'dlclose' and 'dlopen', you can use - '-fno-gnu-unique'. - -'-fpcc-struct-return' - Return "short" 'struct' and 'union' values in memory like longer - ones, rather than in registers. This convention is less efficient, - but it has the advantage of allowing intercallability between - GCC-compiled files and files compiled with other compilers, - particularly the Portable C Compiler (pcc). - - The precise convention for returning structures in memory depends - on the target configuration macros. - - Short structures and unions are those whose size and alignment - match that of some integer type. - - *Warning:* code compiled with the '-fpcc-struct-return' switch is - not binary compatible with code compiled with the - '-freg-struct-return' switch. Use it to conform to a non-default - application binary interface. - -'-freg-struct-return' - Return 'struct' and 'union' values in registers when possible. - This is more efficient for small structures than - '-fpcc-struct-return'. - - If you specify neither '-fpcc-struct-return' nor - '-freg-struct-return', GCC defaults to whichever convention is - standard for the target. If there is no standard convention, GCC - defaults to '-fpcc-struct-return', except on targets where GCC is - the principal compiler. In those cases, we can choose the - standard, and we chose the more efficient register return - alternative. - - *Warning:* code compiled with the '-freg-struct-return' switch is - not binary compatible with code compiled with the - '-fpcc-struct-return' switch. Use it to conform to a non-default - application binary interface. - -'-fshort-enums' - Allocate to an 'enum' type only as many bytes as it needs for the - declared range of possible values. Specifically, the 'enum' type - is equivalent to the smallest integer type that has enough room. - - *Warning:* the '-fshort-enums' switch causes GCC to generate code - that is not binary compatible with code generated without that - switch. Use it to conform to a non-default application binary - interface. - -'-fshort-double' - Use the same size for 'double' as for 'float'. - - *Warning:* the '-fshort-double' switch causes GCC to generate code - that is not binary compatible with code generated without that - switch. Use it to conform to a non-default application binary - interface. - -'-fshort-wchar' - Override the underlying type for 'wchar_t' to be 'short unsigned - int' instead of the default for the target. This option is useful - for building programs to run under WINE. - - *Warning:* the '-fshort-wchar' switch causes GCC to generate code - that is not binary compatible with code generated without that - switch. Use it to conform to a non-default application binary - interface. - -'-fno-common' - In C code, controls the placement of uninitialized global - variables. Unix C compilers have traditionally permitted multiple - definitions of such variables in different compilation units by - placing the variables in a common block. This is the behavior - specified by '-fcommon', and is the default for GCC on most - targets. On the other hand, this behavior is not required by ISO - C, and on some targets may carry a speed or code size penalty on - variable references. The '-fno-common' option specifies that the - compiler should place uninitialized global variables in the data - section of the object file, rather than generating them as common - blocks. This has the effect that if the same variable is declared - (without 'extern') in two different compilations, you get a - multiple-definition error when you link them. In this case, you - must compile with '-fcommon' instead. Compiling with '-fno-common' - is useful on targets for which it provides better performance, or - if you wish to verify that the program will work on other systems - that always treat uninitialized variable declarations this way. - -'-fno-ident' - Ignore the '#ident' directive. - -'-finhibit-size-directive' - Don't output a '.size' assembler directive, or anything else that - would cause trouble if the function is split in the middle, and the - two halves are placed at locations far apart in memory. This - option is used when compiling 'crtstuff.c'; you should not need to - use it for anything else. - -'-fverbose-asm' - Put extra commentary information in the generated assembly code to - make it more readable. This option is generally only of use to - those who actually need to read the generated assembly code - (perhaps while debugging the compiler itself). - - '-fno-verbose-asm', the default, causes the extra information to be - omitted and is useful when comparing two assembler files. - -'-frecord-gcc-switches' - This switch causes the command line used to invoke the compiler to - be recorded into the object file that is being created. This - switch is only implemented on some targets and the exact format of - the recording is target and binary file format dependent, but it - usually takes the form of a section containing ASCII text. This - switch is related to the '-fverbose-asm' switch, but that switch - only records information in the assembler output file as comments, - so it never reaches the object file. See also - '-grecord-gcc-switches' for another way of storing compiler options - into the object file. - -'-fpic' - Generate position-independent code (PIC) suitable for use in a - shared library, if supported for the target machine. Such code - accesses all constant addresses through a global offset table - (GOT). The dynamic loader resolves the GOT entries when the - program starts (the dynamic loader is not part of GCC; it is part - of the operating system). If the GOT size for the linked - executable exceeds a machine-specific maximum size, you get an - error message from the linker indicating that '-fpic' does not - work; in that case, recompile with '-fPIC' instead. (These - maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The - 386 has no such limit.) - - Position-independent code requires special support, and therefore - works only on certain machines. For the 386, GCC supports PIC for - System V but not for the Sun 386i. Code generated for the IBM - RS/6000 is always position-independent. - - When this flag is set, the macros '__pic__' and '__PIC__' are - defined to 1. - -'-fPIC' - If supported for the target machine, emit position-independent - code, suitable for dynamic linking and avoiding any limit on the - size of the global offset table. This option makes a difference on - the m68k, PowerPC and SPARC. - - Position-independent code requires special support, and therefore - works only on certain machines. - - When this flag is set, the macros '__pic__' and '__PIC__' are - defined to 2. - -'-fpie' -'-fPIE' - These options are similar to '-fpic' and '-fPIC', but generated - position independent code can be only linked into executables. - Usually these options are used when '-pie' GCC option is used - during linking. - - '-fpie' and '-fPIE' both define the macros '__pie__' and '__PIE__'. - The macros have the value 1 for '-fpie' and 2 for '-fPIE'. - -'-fno-jump-tables' - Do not use jump tables for switch statements even where it would be - more efficient than other code generation strategies. This option - is of use in conjunction with '-fpic' or '-fPIC' for building code - that forms part of a dynamic linker and cannot reference the - address of a jump table. On some targets, jump tables do not - require a GOT and this option is not needed. - -'-ffixed-REG' - Treat the register named REG as a fixed register; generated code - should never refer to it (except perhaps as a stack pointer, frame - pointer or in some other fixed role). - - REG must be the name of a register. The register names accepted - are machine-specific and are defined in the 'REGISTER_NAMES' macro - in the machine description macro file. - - This flag does not have a negative form, because it specifies a - three-way choice. - -'-fcall-used-REG' - Treat the register named REG as an allocable register that is - clobbered by function calls. It may be allocated for temporaries - or variables that do not live across a call. Functions compiled - this way do not save and restore the register REG. - - It is an error to use this flag with the frame pointer or stack - pointer. Use of this flag for other registers that have fixed - pervasive roles in the machine's execution model produces - disastrous results. - - This flag does not have a negative form, because it specifies a - three-way choice. - -'-fcall-saved-REG' - Treat the register named REG as an allocable register saved by - functions. It may be allocated even for temporaries or variables - that live across a call. Functions compiled this way save and - restore the register REG if they use it. - - It is an error to use this flag with the frame pointer or stack - pointer. Use of this flag for other registers that have fixed - pervasive roles in the machine's execution model produces - disastrous results. - - A different sort of disaster results from the use of this flag for - a register in which function values may be returned. - - This flag does not have a negative form, because it specifies a - three-way choice. - -'-fpack-struct[=N]' - Without a value specified, pack all structure members together - without holes. When a value is specified (which must be a small - power of two), pack structure members according to this value, - representing the maximum alignment (that is, objects with default - alignment requirements larger than this are output potentially - unaligned at the next fitting location. - - *Warning:* the '-fpack-struct' switch causes GCC to generate code - that is not binary compatible with code generated without that - switch. Additionally, it makes the code suboptimal. Use it to - conform to a non-default application binary interface. - -'-finstrument-functions' - Generate instrumentation calls for entry and exit to functions. - Just after function entry and just before function exit, the - following profiling functions are called with the address of the - current function and its call site. (On some platforms, - '__builtin_return_address' does not work beyond the current - function, so the call site information may not be available to the - profiling functions otherwise.) - - void __cyg_profile_func_enter (void *this_fn, - void *call_site); - void __cyg_profile_func_exit (void *this_fn, - void *call_site); - - The first argument is the address of the start of the current - function, which may be looked up exactly in the symbol table. - - This instrumentation is also done for functions expanded inline in - other functions. The profiling calls indicate where, conceptually, - the inline function is entered and exited. This means that - addressable versions of such functions must be available. If all - your uses of a function are expanded inline, this may mean an - additional expansion of code size. If you use 'extern inline' in - your C code, an addressable version of such functions must be - provided. (This is normally the case anyway, but if you get lucky - and the optimizer always expands the functions inline, you might - have gotten away without providing static copies.) - - A function may be given the attribute 'no_instrument_function', in - which case this instrumentation is not done. This can be used, for - example, for the profiling functions listed above, high-priority - interrupt routines, and any functions from which the profiling - functions cannot safely be called (perhaps signal handlers, if the - profiling routines generate output or allocate memory). - -'-finstrument-functions-exclude-file-list=FILE,FILE,...' - - Set the list of functions that are excluded from instrumentation - (see the description of '-finstrument-functions'). If the file - that contains a function definition matches with one of FILE, then - that function is not instrumented. The match is done on - substrings: if the FILE parameter is a substring of the file name, - it is considered to be a match. - - For example: - - -finstrument-functions-exclude-file-list=/bits/stl,include/sys - - excludes any inline function defined in files whose pathnames - contain '/bits/stl' or 'include/sys'. - - If, for some reason, you want to include letter '','' in one of - SYM, write ''\,''. For example, - '-finstrument-functions-exclude-file-list='\,\,tmp'' (note the - single quote surrounding the option). - -'-finstrument-functions-exclude-function-list=SYM,SYM,...' - - This is similar to '-finstrument-functions-exclude-file-list', but - this option sets the list of function names to be excluded from - instrumentation. The function name to be matched is its - user-visible name, such as 'vector<int> blah(const vector<int> &)', - not the internal mangled name (e.g., '_Z4blahRSt6vectorIiSaIiEE'). - The match is done on substrings: if the SYM parameter is a - substring of the function name, it is considered to be a match. - For C99 and C++ extended identifiers, the function name must be - given in UTF-8, not using universal character names. - -'-fstack-check' - Generate code to verify that you do not go beyond the boundary of - the stack. You should specify this flag if you are running in an - environment with multiple threads, but you only rarely need to - specify it in a single-threaded environment since stack overflow is - automatically detected on nearly all systems if there is only one - stack. - - Note that this switch does not actually cause checking to be done; - the operating system or the language runtime must do that. The - switch causes generation of code to ensure that they see the stack - being extended. - - You can additionally specify a string parameter: 'no' means no - checking, 'generic' means force the use of old-style checking, - 'specific' means use the best checking method and is equivalent to - bare '-fstack-check'. - - Old-style checking is a generic mechanism that requires no specific - target support in the compiler but comes with the following - drawbacks: - - 1. Modified allocation strategy for large objects: they are - always allocated dynamically if their size exceeds a fixed - threshold. - - 2. Fixed limit on the size of the static frame of functions: when - it is topped by a particular function, stack checking is not - reliable and a warning is issued by the compiler. - - 3. Inefficiency: because of both the modified allocation strategy - and the generic implementation, code performance is hampered. - - Note that old-style stack checking is also the fallback method for - 'specific' if no target support has been added in the compiler. - -'-fstack-limit-register=REG' -'-fstack-limit-symbol=SYM' -'-fno-stack-limit' - Generate code to ensure that the stack does not grow beyond a - certain value, either the value of a register or the address of a - symbol. If a larger stack is required, a signal is raised at run - time. For most targets, the signal is raised before the stack - overruns the boundary, so it is possible to catch the signal - without taking special precautions. - - For instance, if the stack starts at absolute address '0x80000000' - and grows downwards, you can use the flags - '-fstack-limit-symbol=__stack_limit' and - '-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit of - 128KB. Note that this may only work with the GNU linker. - -'-fsplit-stack' - Generate code to automatically split the stack before it overflows. - The resulting program has a discontiguous stack which can only - overflow if the program is unable to allocate any more memory. - This is most useful when running threaded programs, as it is no - longer necessary to calculate a good stack size to use for each - thread. This is currently only implemented for the i386 and x86_64 - back ends running GNU/Linux. - - When code compiled with '-fsplit-stack' calls code compiled without - '-fsplit-stack', there may not be much stack space available for - the latter code to run. If compiling all code, including library - code, with '-fsplit-stack' is not an option, then the linker can - fix up these calls so that the code compiled without - '-fsplit-stack' always has a large stack. Support for this is - implemented in the gold linker in GNU binutils release 2.21 and - later. - -'-fleading-underscore' - This option and its counterpart, '-fno-leading-underscore', - forcibly change the way C symbols are represented in the object - file. One use is to help link with legacy assembly code. - - *Warning:* the '-fleading-underscore' switch causes GCC to generate - code that is not binary compatible with code generated without that - switch. Use it to conform to a non-default application binary - interface. Not all targets provide complete support for this - switch. - -'-ftls-model=MODEL' - Alter the thread-local storage model to be used (*note - Thread-Local::). The MODEL argument should be one of - 'global-dynamic', 'local-dynamic', 'initial-exec' or 'local-exec'. - Note that the choice is subject to optimization: the compiler may - use a more efficient model for symbols not visible outside of the - translation unit, or if '-fpic' is not given on the command line. - - The default without '-fpic' is 'initial-exec'; with '-fpic' the - default is 'global-dynamic'. - -'-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED' - Set the default ELF image symbol visibility to the specified - option--all symbols are marked with this unless overridden within - the code. Using this feature can very substantially improve - linking and load times of shared object libraries, produce more - optimized code, provide near-perfect API export and prevent symbol - clashes. It is *strongly* recommended that you use this in any - shared objects you distribute. - - Despite the nomenclature, 'default' always means public; i.e., - available to be linked against from outside the shared object. - 'protected' and 'internal' are pretty useless in real-world usage - so the only other commonly used option is 'hidden'. The default if - '-fvisibility' isn't specified is 'default', i.e., make every - symbol public--this causes the same behavior as previous versions - of GCC. - - A good explanation of the benefits offered by ensuring ELF symbols - have the correct visibility is given by "How To Write Shared - Libraries" by Ulrich Drepper (which can be found at - <http://people.redhat.com/~drepper/>)--however a superior solution - made possible by this option to marking things hidden when the - default is public is to make the default hidden and mark things - public. This is the norm with DLLs on Windows and with - '-fvisibility=hidden' and '__attribute__ ((visibility("default")))' - instead of '__declspec(dllexport)' you get almost identical - semantics with identical syntax. This is a great boon to those - working with cross-platform projects. - - For those adding visibility support to existing code, you may find - '#pragma GCC visibility' of use. This works by you enclosing the - declarations you wish to set visibility for with (for example) - '#pragma GCC visibility push(hidden)' and '#pragma GCC visibility - pop'. Bear in mind that symbol visibility should be viewed *as - part of the API interface contract* and thus all new code should - always specify visibility when it is not the default; i.e., - declarations only for use within the local DSO should *always* be - marked explicitly as hidden as so to avoid PLT indirection - overheads--making this abundantly clear also aids readability and - self-documentation of the code. Note that due to ISO C++ - specification requirements, 'operator new' and 'operator delete' - must always be of default visibility. - - Be aware that headers from outside your project, in particular - system headers and headers from any other library you use, may not - be expecting to be compiled with visibility other than the default. - You may need to explicitly say '#pragma GCC visibility - push(default)' before including any such headers. - - 'extern' declarations are not affected by '-fvisibility', so a lot - of code can be recompiled with '-fvisibility=hidden' with no - modifications. However, this means that calls to 'extern' - functions with no explicit visibility use the PLT, so it is more - effective to use '__attribute ((visibility))' and/or '#pragma GCC - visibility' to tell the compiler which 'extern' declarations should - be treated as hidden. - - Note that '-fvisibility' does affect C++ vague linkage entities. - This means that, for instance, an exception class that is be thrown - between DSOs must be explicitly marked with default visibility so - that the 'type_info' nodes are unified between the DSOs. - - An overview of these techniques, their benefits and how to use them - is at <http://gcc.gnu.org/wiki/Visibility>. - -'-fstrict-volatile-bitfields' - This option should be used if accesses to volatile bit-fields (or - other structure fields, although the compiler usually honors those - types anyway) should use a single access of the width of the - field's type, aligned to a natural alignment if possible. For - example, targets with memory-mapped peripheral registers might - require all such accesses to be 16 bits wide; with this flag you - can declare all peripheral bit-fields as 'unsigned short' (assuming - short is 16 bits on these targets) to force GCC to use 16-bit - accesses instead of, perhaps, a more efficient 32-bit access. - - If this option is disabled, the compiler uses the most efficient - instruction. In the previous example, that might be a 32-bit load - instruction, even though that accesses bytes that do not contain - any portion of the bit-field, or memory-mapped registers unrelated - to the one being updated. - - In some cases, such as when the 'packed' attribute is applied to a - structure field, it may not be possible to access the field with a - single read or write that is correctly aligned for the target - machine. In this case GCC falls back to generating multiple - accesses rather than code that will fault or truncate the result at - run time. - - Note: Due to restrictions of the C/C++11 memory model, write - accesses are not allowed to touch non bit-field members. It is - therefore recommended to define all bits of the field's type as - bit-field members. - - The default value of this option is determined by the application - binary interface for the target processor. - -'-fsync-libcalls' - This option controls whether any out-of-line instance of the - '__sync' family of functions may be used to implement the C++11 - '__atomic' family of functions. - - The default value of this option is enabled, thus the only useful - form of the option is '-fno-sync-libcalls'. This option is used in - the implementation of the 'libatomic' runtime library. - - -File: gcc.info, Node: Environment Variables, Next: Precompiled Headers, Prev: Code Gen Options, Up: Invoking GCC - -3.19 Environment Variables Affecting GCC -======================================== - -This section describes several environment variables that affect how GCC -operates. Some of them work by specifying directories or prefixes to -use when searching for various kinds of files. Some are used to specify -other aspects of the compilation environment. - - Note that you can also specify places to search using options such as -'-B', '-I' and '-L' (*note Directory Options::). These take precedence -over places specified using environment variables, which in turn take -precedence over those specified by the configuration of GCC. *Note -Controlling the Compilation Driver 'gcc': (gccint)Driver. - -'LANG' -'LC_CTYPE' -'LC_MESSAGES' -'LC_ALL' - These environment variables control the way that GCC uses - localization information which allows GCC to work with different - national conventions. GCC inspects the locale categories - 'LC_CTYPE' and 'LC_MESSAGES' if it has been configured to do so. - These locale categories can be set to any value supported by your - installation. A typical value is 'en_GB.UTF-8' for English in the - United Kingdom encoded in UTF-8. - - The 'LC_CTYPE' environment variable specifies character - classification. GCC uses it to determine the character boundaries - in a string; this is needed for some multibyte encodings that - contain quote and escape characters that are otherwise interpreted - as a string end or escape. - - The 'LC_MESSAGES' environment variable specifies the language to - use in diagnostic messages. - - If the 'LC_ALL' environment variable is set, it overrides the value - of 'LC_CTYPE' and 'LC_MESSAGES'; otherwise, 'LC_CTYPE' and - 'LC_MESSAGES' default to the value of the 'LANG' environment - variable. If none of these variables are set, GCC defaults to - traditional C English behavior. - -'TMPDIR' - If 'TMPDIR' is set, it specifies the directory to use for temporary - files. GCC uses temporary files to hold the output of one stage of - compilation which is to be used as input to the next stage: for - example, the output of the preprocessor, which is the input to the - compiler proper. - -'GCC_COMPARE_DEBUG' - Setting 'GCC_COMPARE_DEBUG' is nearly equivalent to passing - '-fcompare-debug' to the compiler driver. See the documentation of - this option for more details. - -'GCC_EXEC_PREFIX' - If 'GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the - names of the subprograms executed by the compiler. No slash is - added when this prefix is combined with the name of a subprogram, - but you can specify a prefix that ends with a slash if you wish. - - If 'GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an - appropriate prefix to use based on the pathname it is invoked with. - - If GCC cannot find the subprogram using the specified prefix, it - tries looking in the usual places for the subprogram. - - The default value of 'GCC_EXEC_PREFIX' is 'PREFIX/lib/gcc/' where - PREFIX is the prefix to the installed compiler. In many cases - PREFIX is the value of 'prefix' when you ran the 'configure' - script. - - Other prefixes specified with '-B' take precedence over this - prefix. - - This prefix is also used for finding files such as 'crt0.o' that - are used for linking. - - In addition, the prefix is used in an unusual way in finding the - directories to search for header files. For each of the standard - directories whose name normally begins with '/usr/local/lib/gcc' - (more precisely, with the value of 'GCC_INCLUDE_DIR'), GCC tries - replacing that beginning with the specified prefix to produce an - alternate directory name. Thus, with '-Bfoo/', GCC searches - 'foo/bar' just before it searches the standard directory - '/usr/local/lib/bar'. If a standard directory begins with the - configured PREFIX then the value of PREFIX is replaced by - 'GCC_EXEC_PREFIX' when looking for header files. - -'COMPILER_PATH' - The value of 'COMPILER_PATH' is a colon-separated list of - directories, much like 'PATH'. GCC tries the directories thus - specified when searching for subprograms, if it can't find the - subprograms using 'GCC_EXEC_PREFIX'. - -'LIBRARY_PATH' - The value of 'LIBRARY_PATH' is a colon-separated list of - directories, much like 'PATH'. When configured as a native - compiler, GCC tries the directories thus specified when searching - for special linker files, if it can't find them using - 'GCC_EXEC_PREFIX'. Linking using GCC also uses these directories - when searching for ordinary libraries for the '-l' option (but - directories specified with '-L' come first). - -'LANG' - This variable is used to pass locale information to the compiler. - One way in which this information is used is to determine the - character set to be used when character literals, string literals - and comments are parsed in C and C++. When the compiler is - configured to allow multibyte characters, the following values for - 'LANG' are recognized: - - 'C-JIS' - Recognize JIS characters. - 'C-SJIS' - Recognize SJIS characters. - 'C-EUCJP' - Recognize EUCJP characters. - - If 'LANG' is not defined, or if it has some other value, then the - compiler uses 'mblen' and 'mbtowc' as defined by the default locale - to recognize and translate multibyte characters. - -Some additional environment variables affect the behavior of the -preprocessor. - -'CPATH' -'C_INCLUDE_PATH' -'CPLUS_INCLUDE_PATH' -'OBJC_INCLUDE_PATH' - Each variable's value is a list of directories separated by a - special character, much like 'PATH', in which to look for header - files. The special character, 'PATH_SEPARATOR', is - target-dependent and determined at GCC build time. For Microsoft - Windows-based targets it is a semicolon, and for almost all other - targets it is a colon. - - 'CPATH' specifies a list of directories to be searched as if - specified with '-I', but after any paths given with '-I' options on - the command line. This environment variable is used regardless of - which language is being preprocessed. - - The remaining environment variables apply only when preprocessing - the particular language indicated. Each specifies a list of - directories to be searched as if specified with '-isystem', but - after any paths given with '-isystem' options on the command line. - - In all these variables, an empty element instructs the compiler to - search its current working directory. Empty elements can appear at - the beginning or end of a path. For instance, if the value of - 'CPATH' is ':/special/include', that has the same effect as - '-I. -I/special/include'. - -'DEPENDENCIES_OUTPUT' - If this variable is set, its value specifies how to output - dependencies for Make based on the non-system header files - processed by the compiler. System header files are ignored in the - dependency output. - - The value of 'DEPENDENCIES_OUTPUT' can be just a file name, in - which case the Make rules are written to that file, guessing the - target name from the source file name. Or the value can have the - form 'FILE TARGET', in which case the rules are written to file - FILE using TARGET as the target name. - - In other words, this environment variable is equivalent to - combining the options '-MM' and '-MF' (*note Preprocessor - Options::), with an optional '-MT' switch too. - -'SUNPRO_DEPENDENCIES' - This variable is the same as 'DEPENDENCIES_OUTPUT' (see above), - except that system header files are not ignored, so it implies '-M' - rather than '-MM'. However, the dependence on the main input file - is omitted. *Note Preprocessor Options::. - - -File: gcc.info, Node: Precompiled Headers, Prev: Environment Variables, Up: Invoking GCC - -3.20 Using Precompiled Headers -============================== - -Often large projects have many header files that are included in every -source file. The time the compiler takes to process these header files -over and over again can account for nearly all of the time required to -build the project. To make builds faster, GCC allows you to -"precompile" a header file. - - To create a precompiled header file, simply compile it as you would any -other file, if necessary using the '-x' option to make the driver treat -it as a C or C++ header file. You may want to use a tool like 'make' to -keep the precompiled header up-to-date when the headers it contains -change. - - A precompiled header file is searched for when '#include' is seen in -the compilation. As it searches for the included file (*note Search -Path: (cpp)Search Path.) the compiler looks for a precompiled header in -each directory just before it looks for the include file in that -directory. The name searched for is the name specified in the -'#include' with '.gch' appended. If the precompiled header file can't -be used, it is ignored. - - For instance, if you have '#include "all.h"', and you have 'all.h.gch' -in the same directory as 'all.h', then the precompiled header file is -used if possible, and the original header is used otherwise. - - Alternatively, you might decide to put the precompiled header file in a -directory and use '-I' to ensure that directory is searched before (or -instead of) the directory containing the original header. Then, if you -want to check that the precompiled header file is always used, you can -put a file of the same name as the original header in this directory -containing an '#error' command. - - This also works with '-include'. So yet another way to use precompiled -headers, good for projects not designed with precompiled header files in -mind, is to simply take most of the header files used by a project, -include them from another header file, precompile that header file, and -'-include' the precompiled header. If the header files have guards -against multiple inclusion, they are skipped because they've already -been included (in the precompiled header). - - If you need to precompile the same header file for different languages, -targets, or compiler options, you can instead make a _directory_ named -like 'all.h.gch', and put each precompiled header in the directory, -perhaps using '-o'. It doesn't matter what you call the files in the -directory; every precompiled header in the directory is considered. The -first precompiled header encountered in the directory that is valid for -this compilation is used; they're searched in no particular order. - - There are many other possibilities, limited only by your imagination, -good sense, and the constraints of your build system. - - A precompiled header file can be used only when these conditions apply: - - * Only one precompiled header can be used in a particular - compilation. - - * A precompiled header can't be used once the first C token is seen. - You can have preprocessor directives before a precompiled header; - you cannot include a precompiled header from inside another header. - - * The precompiled header file must be produced for the same language - as the current compilation. You can't use a C precompiled header - for a C++ compilation. - - * The precompiled header file must have been produced by the same - compiler binary as the current compilation is using. - - * Any macros defined before the precompiled header is included must - either be defined in the same way as when the precompiled header - was generated, or must not affect the precompiled header, which - usually means that they don't appear in the precompiled header at - all. - - The '-D' option is one way to define a macro before a precompiled - header is included; using a '#define' can also do it. There are - also some options that define macros implicitly, like '-O' and - '-Wdeprecated'; the same rule applies to macros defined this way. - - * If debugging information is output when using the precompiled - header, using '-g' or similar, the same kind of debugging - information must have been output when building the precompiled - header. However, a precompiled header built using '-g' can be used - in a compilation when no debugging information is being output. - - * The same '-m' options must generally be used when building and - using the precompiled header. *Note Submodel Options::, for any - cases where this rule is relaxed. - - * Each of the following options must be the same when building and - using the precompiled header: - - -fexceptions - - * Some other command-line options starting with '-f', '-p', or '-O' - must be defined in the same way as when the precompiled header was - generated. At present, it's not clear which options are safe to - change and which are not; the safest choice is to use exactly the - same options when generating and using the precompiled header. The - following are known to be safe: - - -fmessage-length= -fpreprocessed -fsched-interblock - -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous - -fsched-verbose=NUMBER -fschedule-insns -fvisibility= - -pedantic-errors - - For all of these except the last, the compiler automatically ignores -the precompiled header if the conditions aren't met. If you find an -option combination that doesn't work and doesn't cause the precompiled -header to be ignored, please consider filing a bug report, see *note -Bugs::. - - If you do use differing options when generating and using the -precompiled header, the actual behavior is a mixture of the behavior for -the options. For instance, if you use '-g' to generate the precompiled -header but not when using it, you may or may not get debugging -information for routines in the precompiled header. - - -File: gcc.info, Node: C Implementation, Next: C++ Implementation, Prev: Invoking GCC, Up: Top - -4 C Implementation-defined behavior -*********************************** - -A conforming implementation of ISO C is required to document its choice -of behavior in each of the areas that are designated "implementation -defined". The following lists all such areas, along with the section -numbers from the ISO/IEC 9899:1990, ISO/IEC 9899:1999 and ISO/IEC -9899:2011 standards. Some areas are only implementation-defined in one -version of the standard. - - Some choices depend on the externally determined ABI for the platform -(including standard character encodings) which GCC follows; these are -listed as "determined by ABI" below. *Note Binary Compatibility: -Compatibility, and <http://gcc.gnu.org/readings.html>. Some choices are -documented in the preprocessor manual. *Note Implementation-defined -behavior: (cpp)Implementation-defined behavior. Some choices are made -by the library and operating system (or other environment when compiling -for a freestanding environment); refer to their documentation for -details. - -* Menu: - -* Translation implementation:: -* Environment implementation:: -* Identifiers implementation:: -* Characters implementation:: -* Integers implementation:: -* Floating point implementation:: -* Arrays and pointers implementation:: -* Hints implementation:: -* Structures unions enumerations and bit-fields implementation:: -* Qualifiers implementation:: -* Declarators implementation:: -* Statements implementation:: -* Preprocessing directives implementation:: -* Library functions implementation:: -* Architecture implementation:: -* Locale-specific behavior implementation:: - - -File: gcc.info, Node: Translation implementation, Next: Environment implementation, Up: C Implementation - -4.1 Translation -=============== - - * 'How a diagnostic is identified (C90 3.7, C99 and C11 3.10, C90, - C99 and C11 5.1.1.3).' - - Diagnostics consist of all the output sent to stderr by GCC. - - * 'Whether each nonempty sequence of white-space characters other - than new-line is retained or replaced by one space character in - translation phase 3 (C90, C99 and C11 5.1.1.2).' - - *Note Implementation-defined behavior: (cpp)Implementation-defined - behavior. - - -File: gcc.info, Node: Environment implementation, Next: Identifiers implementation, Prev: Translation implementation, Up: C Implementation - -4.2 Environment -=============== - -The behavior of most of these points are dependent on the implementation -of the C library, and are not defined by GCC itself. - - * 'The mapping between physical source file multibyte characters and - the source character set in translation phase 1 (C90, C99 and C11 - 5.1.1.2).' - - *Note Implementation-defined behavior: (cpp)Implementation-defined - behavior. - - -File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation - -4.3 Identifiers -=============== - - * 'Which additional multibyte characters may appear in identifiers - and their correspondence to universal character names (C99 and C11 - 6.4.2).' - - *Note Implementation-defined behavior: (cpp)Implementation-defined - behavior. - - * 'The number of significant initial characters in an identifier (C90 - 6.1.2, C90, C99 and C11 5.2.4.1, C99 and C11 6.4.2).' - - For internal names, all characters are significant. For external - names, the number of significant characters are defined by the - linker; for almost all targets, all characters are significant. - - * 'Whether case distinctions are significant in an identifier with - external linkage (C90 6.1.2).' - - This is a property of the linker. C99 and C11 require that case - distinctions are always significant in identifiers with external - linkage and systems without this property are not supported by GCC. - - -File: gcc.info, Node: Characters implementation, Next: Integers implementation, Prev: Identifiers implementation, Up: C Implementation - -4.4 Characters -============== - - * 'The number of bits in a byte (C90 3.4, C99 and C11 3.6).' - - Determined by ABI. - - * 'The values of the members of the execution character set (C90, C99 - and C11 5.2.1).' - - Determined by ABI. - - * 'The unique value of the member of the execution character set - produced for each of the standard alphabetic escape sequences (C90, - C99 and C11 5.2.2).' - - Determined by ABI. - - * 'The value of a 'char' object into which has been stored any - character other than a member of the basic execution character set - (C90 6.1.2.5, C99 and C11 6.2.5).' - - Determined by ABI. - - * 'Which of 'signed char' or 'unsigned char' has the same range, - representation, and behavior as "plain" 'char' (C90 6.1.2.5, C90 - 6.2.1.1, C99 and C11 6.2.5, C99 and C11 6.3.1.1).' - - Determined by ABI. The options '-funsigned-char' and - '-fsigned-char' change the default. *Note Options Controlling C - Dialect: C Dialect Options. - - * 'The mapping of members of the source character set (in character - constants and string literals) to members of the execution - character set (C90 6.1.3.4, C99 and C11 6.4.4.4, C90, C99 and C11 - 5.1.1.2).' - - Determined by ABI. - - * 'The value of an integer character constant containing more than - one character or containing a character or escape sequence that - does not map to a single-byte execution character (C90 6.1.3.4, C99 - and C11 6.4.4.4).' - - *Note Implementation-defined behavior: (cpp)Implementation-defined - behavior. - - * 'The value of a wide character constant containing more than one - multibyte character or a single multibyte character that maps to - multiple members of the extended execution character set, or - containing a multibyte character or escape sequence not represented - in the extended execution character set (C90 6.1.3.4, C99 and C11 - 6.4.4.4).' - - *Note Implementation-defined behavior: (cpp)Implementation-defined - behavior. - - * 'The current locale used to convert a wide character constant - consisting of a single multibyte character that maps to a member of - the extended execution character set into a corresponding wide - character code (C90 6.1.3.4, C99 and C11 6.4.4.4).' - - *Note Implementation-defined behavior: (cpp)Implementation-defined - behavior. - - * 'Whether differently-prefixed wide string literal tokens can be - concatenated and, if so, the treatment of the resulting multibyte - character sequence (C11 6.4.5).' - - Such tokens may not be concatenated. - - * 'The current locale used to convert a wide string literal into - corresponding wide character codes (C90 6.1.4, C99 and C11 6.4.5).' - - *Note Implementation-defined behavior: (cpp)Implementation-defined - behavior. - - * 'The value of a string literal containing a multibyte character or - escape sequence not represented in the execution character set (C90 - 6.1.4, C99 and C11 6.4.5).' - - *Note Implementation-defined behavior: (cpp)Implementation-defined - behavior. - - * 'The encoding of any of 'wchar_t', 'char16_t', and 'char32_t' where - the corresponding standard encoding macro ('__STDC_ISO_10646__', - '__STDC_UTF_16__', or '__STDC_UTF_32__') is not defined (C11 - 6.10.8.2).' - - *Note Implementation-defined behavior: (cpp)Implementation-defined - behavior. 'char16_t' and 'char32_t' literals are always encoded in - UTF-16 and UTF-32 respectively. - - -File: gcc.info, Node: Integers implementation, Next: Floating point implementation, Prev: Characters implementation, Up: C Implementation - -4.5 Integers -============ - - * 'Any extended integer types that exist in the implementation (C99 - and C11 6.2.5).' - - GCC does not support any extended integer types. - - * 'Whether signed integer types are represented using sign and - magnitude, two's complement, or one's complement, and whether the - extraordinary value is a trap representation or an ordinary value - (C99 and C11 6.2.6.2).' - - GCC supports only two's complement integer types, and all bit - patterns are ordinary values. - - * 'The rank of any extended integer type relative to another extended - integer type with the same precision (C99 and C11 6.3.1.1).' - - GCC does not support any extended integer types. - - * 'The result of, or the signal raised by, converting an integer to a - signed integer type when the value cannot be represented in an - object of that type (C90 6.2.1.2, C99 and C11 6.3.1.3).' - - For conversion to a type of width N, the value is reduced modulo - 2^N to be within range of the type; no signal is raised. - - * 'The results of some bitwise operations on signed integers (C90 - 6.3, C99 and C11 6.5).' - - Bitwise operators act on the representation of the value including - both the sign and value bits, where the sign bit is considered - immediately above the highest-value value bit. Signed '>>' acts on - negative numbers by sign extension. - - GCC does not use the latitude given in C99 and C11 only to treat - certain aspects of signed '<<' as undefined, but this is subject to - change. - - * 'The sign of the remainder on integer division (C90 6.3.5).' - - GCC always follows the C99 and C11 requirement that the result of - division is truncated towards zero. - - -File: gcc.info, Node: Floating point implementation, Next: Arrays and pointers implementation, Prev: Integers implementation, Up: C Implementation - -4.6 Floating point -================== - - * 'The accuracy of the floating-point operations and of the library - functions in '<math.h>' and '<complex.h>' that return - floating-point results (C90, C99 and C11 5.2.4.2.2).' - - The accuracy is unknown. - - * 'The rounding behaviors characterized by non-standard values of - 'FLT_ROUNDS' (C90, C99 and C11 5.2.4.2.2).' - - GCC does not use such values. - - * 'The evaluation methods characterized by non-standard negative - values of 'FLT_EVAL_METHOD' (C99 and C11 5.2.4.2.2).' - - GCC does not use such values. - - * 'The direction of rounding when an integer is converted to a - floating-point number that cannot exactly represent the original - value (C90 6.2.1.3, C99 and C11 6.3.1.4).' - - C99 Annex F is followed. - - * 'The direction of rounding when a floating-point number is - converted to a narrower floating-point number (C90 6.2.1.4, C99 and - C11 6.3.1.5).' - - C99 Annex F is followed. - - * 'How the nearest representable value or the larger or smaller - representable value immediately adjacent to the nearest - representable value is chosen for certain floating constants (C90 - 6.1.3.1, C99 and C11 6.4.4.2).' - - C99 Annex F is followed. - - * 'Whether and how floating expressions are contracted when not - disallowed by the 'FP_CONTRACT' pragma (C99 and C11 6.5).' - - Expressions are currently only contracted if '-ffp-contract=fast', - '-funsafe-math-optimizations' or '-ffast-math' are used. This is - subject to change. - - * 'The default state for the 'FENV_ACCESS' pragma (C99 and C11 - 7.6.1).' - - This pragma is not implemented, but the default is to "off" unless - '-frounding-math' is used in which case it is "on". - - * 'Additional floating-point exceptions, rounding modes, - environments, and classifications, and their macro names (C99 and - C11 7.6, C99 and C11 7.12).' - - This is dependent on the implementation of the C library, and is - not defined by GCC itself. - - * 'The default state for the 'FP_CONTRACT' pragma (C99 and C11 - 7.12.2).' - - This pragma is not implemented. Expressions are currently only - contracted if '-ffp-contract=fast', '-funsafe-math-optimizations' - or '-ffast-math' are used. This is subject to change. - - * 'Whether the "inexact" floating-point exception can be raised when - the rounded result actually does equal the mathematical result in - an IEC 60559 conformant implementation (C99 F.9).' - - This is dependent on the implementation of the C library, and is - not defined by GCC itself. - - * 'Whether the "underflow" (and "inexact") floating-point exception - can be raised when a result is tiny but not inexact in an IEC 60559 - conformant implementation (C99 F.9).' - - This is dependent on the implementation of the C library, and is - not defined by GCC itself. - - -File: gcc.info, Node: Arrays and pointers implementation, Next: Hints implementation, Prev: Floating point implementation, Up: C Implementation - -4.7 Arrays and pointers -======================= - - * 'The result of converting a pointer to an integer or vice versa - (C90 6.3.4, C99 and C11 6.3.2.3).' - - A cast from pointer to integer discards most-significant bits if - the pointer representation is larger than the integer type, - sign-extends(1) if the pointer representation is smaller than the - integer type, otherwise the bits are unchanged. - - A cast from integer to pointer discards most-significant bits if - the pointer representation is smaller than the integer type, - extends according to the signedness of the integer type if the - pointer representation is larger than the integer type, otherwise - the bits are unchanged. - - When casting from pointer to integer and back again, the resulting - pointer must reference the same object as the original pointer, - otherwise the behavior is undefined. That is, one may not use - integer arithmetic to avoid the undefined behavior of pointer - arithmetic as proscribed in C99 and C11 6.5.6/8. - - * 'The size of the result of subtracting two pointers to elements of - the same array (C90 6.3.6, C99 and C11 6.5.6).' - - The value is as specified in the standard and the type is - determined by the ABI. - - ---------- Footnotes ---------- - - (1) Future versions of GCC may zero-extend, or use a target-defined -'ptr_extend' pattern. Do not rely on sign extension. - - -File: gcc.info, Node: Hints implementation, Next: Structures unions enumerations and bit-fields implementation, Prev: Arrays and pointers implementation, Up: C Implementation - -4.8 Hints -========= - - * 'The extent to which suggestions made by using the 'register' - storage-class specifier are effective (C90 6.5.1, C99 and C11 - 6.7.1).' - - The 'register' specifier affects code generation only in these - ways: - - * When used as part of the register variable extension, see - *note Explicit Reg Vars::. - - * When '-O0' is in use, the compiler allocates distinct stack - memory for all variables that do not have the 'register' - storage-class specifier; if 'register' is specified, the - variable may have a shorter lifespan than the code would - indicate and may never be placed in memory. - - * On some rare x86 targets, 'setjmp' doesn't save the registers - in all circumstances. In those cases, GCC doesn't allocate - any variables in registers unless they are marked 'register'. - - * 'The extent to which suggestions made by using the inline function - specifier are effective (C99 and C11 6.7.4).' - - GCC will not inline any functions if the '-fno-inline' option is - used or if '-O0' is used. Otherwise, GCC may still be unable to - inline a function for many reasons; the '-Winline' option may be - used to determine if a function has not been inlined and why not. - - -File: gcc.info, Node: Structures unions enumerations and bit-fields implementation, Next: Qualifiers implementation, Prev: Hints implementation, Up: C Implementation - -4.9 Structures, unions, enumerations, and bit-fields -==================================================== - - * 'A member of a union object is accessed using a member of a - different type (C90 6.3.2.3).' - - The relevant bytes of the representation of the object are treated - as an object of the type used for the access. *Note - Type-punning::. This may be a trap representation. - - * 'Whether a "plain" 'int' bit-field is treated as a 'signed int' - bit-field or as an 'unsigned int' bit-field (C90 6.5.2, C90 - 6.5.2.1, C99 and C11 6.7.2, C99 and C11 6.7.2.1).' - - By default it is treated as 'signed int' but this may be changed by - the '-funsigned-bitfields' option. - - * 'Allowable bit-field types other than '_Bool', 'signed int', and - 'unsigned int' (C99 and C11 6.7.2.1).' - - Other integer types, such as 'long int', and enumerated types are - permitted even in strictly conforming mode. - - * 'Whether atomic types are permitted for bit-fields (C11 6.7.2.1).' - - Atomic types are not permitted for bit-fields. - - * 'Whether a bit-field can straddle a storage-unit boundary (C90 - 6.5.2.1, C99 and C11 6.7.2.1).' - - Determined by ABI. - - * 'The order of allocation of bit-fields within a unit (C90 6.5.2.1, - C99 and C11 6.7.2.1).' - - Determined by ABI. - - * 'The alignment of non-bit-field members of structures (C90 6.5.2.1, - C99 and C11 6.7.2.1).' - - Determined by ABI. - - * 'The integer type compatible with each enumerated type (C90 - 6.5.2.2, C99 and C11 6.7.2.2).' - - Normally, the type is 'unsigned int' if there are no negative - values in the enumeration, otherwise 'int'. If '-fshort-enums' is - specified, then if there are negative values it is the first of - 'signed char', 'short' and 'int' that can represent all the values, - otherwise it is the first of 'unsigned char', 'unsigned short' and - 'unsigned int' that can represent all the values. - - On some targets, '-fshort-enums' is the default; this is determined - by the ABI. - - -File: gcc.info, Node: Qualifiers implementation, Next: Declarators implementation, Prev: Structures unions enumerations and bit-fields implementation, Up: C Implementation - -4.10 Qualifiers -=============== - - * 'What constitutes an access to an object that has - volatile-qualified type (C90 6.5.3, C99 and C11 6.7.3).' - - Such an object is normally accessed by pointers and used for - accessing hardware. In most expressions, it is intuitively obvious - what is a read and what is a write. For example - - volatile int *dst = SOMEVALUE; - volatile int *src = SOMEOTHERVALUE; - *dst = *src; - - will cause a read of the volatile object pointed to by SRC and - store the value into the volatile object pointed to by DST. There - is no guarantee that these reads and writes are atomic, especially - for objects larger than 'int'. - - However, if the volatile storage is not being modified, and the - value of the volatile storage is not used, then the situation is - less obvious. For example - - volatile int *src = SOMEVALUE; - *src; - - According to the C standard, such an expression is an rvalue whose - type is the unqualified version of its original type, i.e. 'int'. - Whether GCC interprets this as a read of the volatile object being - pointed to or only as a request to evaluate the expression for its - side-effects depends on this type. - - If it is a scalar type, or on most targets an aggregate type whose - only member object is of a scalar type, or a union type whose - member objects are of scalar types, the expression is interpreted - by GCC as a read of the volatile object; in the other cases, the - expression is only evaluated for its side-effects. - - -File: gcc.info, Node: Declarators implementation, Next: Statements implementation, Prev: Qualifiers implementation, Up: C Implementation - -4.11 Declarators -================ - - * 'The maximum number of declarators that may modify an arithmetic, - structure or union type (C90 6.5.4).' - - GCC is only limited by available memory. - - -File: gcc.info, Node: Statements implementation, Next: Preprocessing directives implementation, Prev: Declarators implementation, Up: C Implementation - -4.12 Statements -=============== - - * 'The maximum number of 'case' values in a 'switch' statement (C90 - 6.6.4.2).' - - GCC is only limited by available memory. - - -File: gcc.info, Node: Preprocessing directives implementation, Next: Library functions implementation, Prev: Statements implementation, Up: C Implementation - -4.13 Preprocessing directives -============================= - -*Note Implementation-defined behavior: (cpp)Implementation-defined -behavior, for details of these aspects of implementation-defined -behavior. - - * 'The locations within '#pragma' directives where header name - preprocessing tokens are recognized (C11 6.4, C11 6.4.7).' - - * 'How sequences in both forms of header names are mapped to headers - or external source file names (C90 6.1.7, C99 and C11 6.4.7).' - - * 'Whether the value of a character constant in a constant expression - that controls conditional inclusion matches the value of the same - character constant in the execution character set (C90 6.8.1, C99 - and C11 6.10.1).' - - * 'Whether the value of a single-character character constant in a - constant expression that controls conditional inclusion may have a - negative value (C90 6.8.1, C99 and C11 6.10.1).' - - * 'The places that are searched for an included '<>' delimited - header, and how the places are specified or the header is - identified (C90 6.8.2, C99 and C11 6.10.2).' - - * 'How the named source file is searched for in an included '""' - delimited header (C90 6.8.2, C99 and C11 6.10.2).' - - * 'The method by which preprocessing tokens (possibly resulting from - macro expansion) in a '#include' directive are combined into a - header name (C90 6.8.2, C99 and C11 6.10.2).' - - * 'The nesting limit for '#include' processing (C90 6.8.2, C99 and - C11 6.10.2).' - - * 'Whether the '#' operator inserts a '\' character before the '\' - character that begins a universal character name in a character - constant or string literal (C99 and C11 6.10.3.2).' - - * 'The behavior on each recognized non-'STDC #pragma' directive (C90 - 6.8.6, C99 and C11 6.10.6).' - - *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by GCC - on all targets. *Note Pragmas Accepted by GCC: Pragmas, for - details of target-specific pragmas. - - * 'The definitions for '__DATE__' and '__TIME__' when respectively, - the date and time of translation are not available (C90 6.8.8, C99 - 6.10.8, C11 6.10.8.1).' - - -File: gcc.info, Node: Library functions implementation, Next: Architecture implementation, Prev: Preprocessing directives implementation, Up: C Implementation - -4.14 Library functions -====================== - -The behavior of most of these points are dependent on the implementation -of the C library, and are not defined by GCC itself. - - * 'The null pointer constant to which the macro 'NULL' expands (C90 - 7.1.6, C99 7.17, C11 7.19).' - - In '<stddef.h>', 'NULL' expands to '((void *)0)'. GCC does not - provide the other headers which define 'NULL' and some library - implementations may use other definitions in those headers. - - -File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation - -4.15 Architecture -================= - - * 'The values or expressions assigned to the macros specified in the - headers '<float.h>', '<limits.h>', and '<stdint.h>' (C90, C99 and - C11 5.2.4.2, C99 7.18.2, C99 7.18.3, C11 7.20.2, C11 7.20.3).' - - Determined by ABI. - - * 'The result of attempting to indirectly access an object with - automatic or thread storage duration from a thread other than the - one with which it is associated (C11 6.2.4).' - - Such accesses are supported, subject to the same requirements for - synchronization for concurrent accesses as for concurrent accesses - to any object. - - * 'The number, order, and encoding of bytes in any object (when not - explicitly specified in this International Standard) (C99 and C11 - 6.2.6.1).' - - Determined by ABI. - - * 'Whether any extended alignments are supported and the contexts in - which they are supported (C11 6.2.8).' - - Extended alignments up to 2^{28} (bytes) are supported for objects - of automatic storage duration. Alignments supported for objects of - static and thread storage duration are determined by the ABI. - - * 'Valid alignment values other than those returned by an _Alignof - expression for fundamental types, if any (C11 6.2.8).' - - Valid alignments are powers of 2 up to and including 2^{28}. - - * 'The value of the result of the 'sizeof' and '_Alignof' operators - (C90 6.3.3.4, C99 and C11 6.5.3.4).' - - Determined by ABI. - - -File: gcc.info, Node: Locale-specific behavior implementation, Prev: Architecture implementation, Up: C Implementation - -4.16 Locale-specific behavior -============================= - -The behavior of these points are dependent on the implementation of the -C library, and are not defined by GCC itself. - - -File: gcc.info, Node: C++ Implementation, Next: C Extensions, Prev: C Implementation, Up: Top - -5 C++ Implementation-defined behavior -************************************* - -A conforming implementation of ISO C++ is required to document its -choice of behavior in each of the areas that are designated -"implementation defined". The following lists all such areas, along -with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC -14882:2003 standards. Some areas are only implementation-defined in one -version of the standard. - - Some choices depend on the externally determined ABI for the platform -(including standard character encodings) which GCC follows; these are -listed as "determined by ABI" below. *Note Binary Compatibility: -Compatibility, and <http://gcc.gnu.org/readings.html>. Some choices are -documented in the preprocessor manual. *Note Implementation-defined -behavior: (cpp)Implementation-defined behavior. Some choices are -documented in the corresponding document for the C language. *Note C -Implementation::. Some choices are made by the library and operating -system (or other environment when compiling for a freestanding -environment); refer to their documentation for details. - -* Menu: - -* Conditionally-supported behavior:: -* Exception handling:: - - -File: gcc.info, Node: Conditionally-supported behavior, Next: Exception handling, Up: C++ Implementation - -5.1 Conditionally-supported behavior -==================================== - -'Each implementation shall include documentation that identifies all -conditionally-supported constructs that it does not support (C++0x -1.4).' - - * 'Whether an argument of class type with a non-trivial copy - constructor or destructor can be passed to ... (C++0x 5.2.2).' - - Such argument passing is not supported. - - -File: gcc.info, Node: Exception handling, Prev: Conditionally-supported behavior, Up: C++ Implementation - -5.2 Exception handling -====================== - - * 'In the situation where no matching handler is found, it is - implementation-defined whether or not the stack is unwound before - std::terminate() is called (C++98 15.5.1).' - - The stack is not unwound before std::terminate is called. - - -File: gcc.info, Node: C Extensions, Next: C++ Extensions, Prev: C++ Implementation, Up: Top - -6 Extensions to the C Language Family -************************************* - -GNU C provides several language features not found in ISO standard C. -(The '-pedantic' option directs GCC to print a warning message if any of -these features is used.) To test for the availability of these features -in conditional compilation, check for a predefined macro '__GNUC__', -which is always defined under GCC. - - These extensions are available in C and Objective-C. Most of them are -also available in C++. *Note Extensions to the C++ Language: C++ -Extensions, for extensions that apply _only_ to C++. - - Some features that are in ISO C99 but not C90 or C++ are also, as -extensions, accepted by GCC in C90 mode and in C++. - -* Menu: - -* Statement Exprs:: Putting statements and declarations inside expressions. -* Local Labels:: Labels local to a block. -* Labels as Values:: Getting pointers to labels, and computed gotos. -* Nested Functions:: As in Algol and Pascal, lexical scoping of functions. -* Constructing Calls:: Dispatching a call to another function. -* Typeof:: 'typeof': referring to the type of an expression. -* Conditionals:: Omitting the middle operand of a '?:' expression. -* __int128:: 128-bit integers--'__int128'. -* Long Long:: Double-word integers--'long long int'. -* Complex:: Data types for complex numbers. -* Floating Types:: Additional Floating Types. -* Half-Precision:: Half-Precision Floating Point. -* Decimal Float:: Decimal Floating Types. -* Hex Floats:: Hexadecimal floating-point constants. -* Fixed-Point:: Fixed-Point Types. -* Named Address Spaces::Named address spaces. -* Zero Length:: Zero-length arrays. -* Empty Structures:: Structures with no members. -* Variable Length:: Arrays whose length is computed at run time. -* Variadic Macros:: Macros with a variable number of arguments. -* Escaped Newlines:: Slightly looser rules for escaped newlines. -* Subscripting:: Any array can be subscripted, even if not an lvalue. -* Pointer Arith:: Arithmetic on 'void'-pointers and function pointers. -* Initializers:: Non-constant initializers. -* Compound Literals:: Compound literals give structures, unions - or arrays as values. -* Designated Inits:: Labeling elements of initializers. -* Case Ranges:: 'case 1 ... 9' and such. -* Cast to Union:: Casting to union type from any member of the union. -* Mixed Declarations:: Mixing declarations and code. -* Function Attributes:: Declaring that functions have no side effects, - or that they can never return. -* Attribute Syntax:: Formal syntax for attributes. -* Function Prototypes:: Prototype declarations and old-style definitions. -* C++ Comments:: C++ comments are recognized. -* Dollar Signs:: Dollar sign is allowed in identifiers. -* Character Escapes:: '\e' stands for the character <ESC>. -* Variable Attributes:: Specifying attributes of variables. -* Type Attributes:: Specifying attributes of types. -* Alignment:: Inquiring about the alignment of a type or variable. -* Inline:: Defining inline functions (as fast as macros). -* Volatiles:: What constitutes an access to a volatile object. -* Extended Asm:: Assembler instructions with C expressions as operands. - (With them you can define "built-in" functions.) -* Constraints:: Constraints for asm operands -* Asm Labels:: Specifying the assembler name to use for a C symbol. -* Explicit Reg Vars:: Defining variables residing in specified registers. -* Alternate Keywords:: '__const__', '__asm__', etc., for header files. -* Incomplete Enums:: 'enum foo;', with details to follow. -* Function Names:: Printable strings which are the name of the current - function. -* Return Address:: Getting the return or frame address of a function. -* Vector Extensions:: Using vector instructions through built-in functions. -* Offsetof:: Special syntax for implementing 'offsetof'. -* __sync Builtins:: Legacy built-in functions for atomic memory access. -* __atomic Builtins:: Atomic built-in functions with memory model. -* x86 specific memory model extensions for transactional memory:: x86 memory models. -* Object Size Checking:: Built-in functions for limited buffer overflow - checking. -* Cilk Plus Builtins:: Built-in functions for the Cilk Plus language extension. -* Other Builtins:: Other built-in functions. -* Target Builtins:: Built-in functions specific to particular targets. -* Target Format Checks:: Format checks specific to particular targets. -* Pragmas:: Pragmas accepted by GCC. -* Unnamed Fields:: Unnamed struct/union fields within structs/unions. -* Thread-Local:: Per-thread variables. -* Binary constants:: Binary constants using the '0b' prefix. - - -File: gcc.info, Node: Statement Exprs, Next: Local Labels, Up: C Extensions - -6.1 Statements and Declarations in Expressions -============================================== - -A compound statement enclosed in parentheses may appear as an expression -in GNU C. This allows you to use loops, switches, and local variables -within an expression. - - Recall that a compound statement is a sequence of statements surrounded -by braces; in this construct, parentheses go around the braces. For -example: - - ({ int y = foo (); int z; - if (y > 0) z = y; - else z = - y; - z; }) - -is a valid (though slightly more complex than necessary) expression for -the absolute value of 'foo ()'. - - The last thing in the compound statement should be an expression -followed by a semicolon; the value of this subexpression serves as the -value of the entire construct. (If you use some other kind of statement -last within the braces, the construct has type 'void', and thus -effectively no value.) - - This feature is especially useful in making macro definitions "safe" -(so that they evaluate each operand exactly once). For example, the -"maximum" function is commonly defined as a macro in standard C as -follows: - - #define max(a,b) ((a) > (b) ? (a) : (b)) - -But this definition computes either A or B twice, with bad results if -the operand has side effects. In GNU C, if you know the type of the -operands (here taken as 'int'), you can define the macro safely as -follows: - - #define maxint(a,b) \ - ({int _a = (a), _b = (b); _a > _b ? _a : _b; }) - - Embedded statements are not allowed in constant expressions, such as -the value of an enumeration constant, the width of a bit-field, or the -initial value of a static variable. - - If you don't know the type of the operand, you can still do this, but -you must use 'typeof' or '__auto_type' (*note Typeof::). - - In G++, the result value of a statement expression undergoes array and -function pointer decay, and is returned by value to the enclosing -expression. For instance, if 'A' is a class, then - - A a; - - ({a;}).Foo () - -constructs a temporary 'A' object to hold the result of the statement -expression, and that is used to invoke 'Foo'. Therefore the 'this' -pointer observed by 'Foo' is not the address of 'a'. - - In a statement expression, any temporaries created within a statement -are destroyed at that statement's end. This makes statement expressions -inside macros slightly different from function calls. In the latter -case temporaries introduced during argument evaluation are destroyed at -the end of the statement that includes the function call. In the -statement expression case they are destroyed during the statement -expression. For instance, - - #define macro(a) ({__typeof__(a) b = (a); b + 3; }) - template<typename T> T function(T a) { T b = a; return b + 3; } - - void foo () - { - macro (X ()); - function (X ()); - } - -has different places where temporaries are destroyed. For the 'macro' -case, the temporary 'X' is destroyed just after the initialization of -'b'. In the 'function' case that temporary is destroyed when the -function returns. - - These considerations mean that it is probably a bad idea to use -statement expressions of this form in header files that are designed to -work with C++. (Note that some versions of the GNU C Library contained -header files using statement expressions that lead to precisely this -bug.) - - Jumping into a statement expression with 'goto' or using a 'switch' -statement outside the statement expression with a 'case' or 'default' -label inside the statement expression is not permitted. Jumping into a -statement expression with a computed 'goto' (*note Labels as Values::) -has undefined behavior. Jumping out of a statement expression is -permitted, but if the statement expression is part of a larger -expression then it is unspecified which other subexpressions of that -expression have been evaluated except where the language definition -requires certain subexpressions to be evaluated before or after the -statement expression. In any case, as with a function call, the -evaluation of a statement expression is not interleaved with the -evaluation of other parts of the containing expression. For example, - - foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz(); - -calls 'foo' and 'bar1' and does not call 'baz' but may or may not call -'bar2'. If 'bar2' is called, it is called after 'foo' and before -'bar1'. - - -File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions - -6.2 Locally Declared Labels -=========================== - -GCC allows you to declare "local labels" in any nested block scope. A -local label is just like an ordinary label, but you can only reference -it (with a 'goto' statement, or by taking its address) within the block -in which it is declared. - - A local label declaration looks like this: - - __label__ LABEL; - -or - - __label__ LABEL1, LABEL2, /* ... */; - - Local label declarations must come at the beginning of the block, -before any ordinary declarations or statements. - - The label declaration defines the label _name_, but does not define the -label itself. You must do this in the usual way, with 'LABEL:', within -the statements of the statement expression. - - The local label feature is useful for complex macros. If a macro -contains nested loops, a 'goto' can be useful for breaking out of them. -However, an ordinary label whose scope is the whole function cannot be -used: if the macro can be expanded several times in one function, the -label is multiply defined in that function. A local label avoids this -problem. For example: - - #define SEARCH(value, array, target) \ - do { \ - __label__ found; \ - typeof (target) _SEARCH_target = (target); \ - typeof (*(array)) *_SEARCH_array = (array); \ - int i, j; \ - int value; \ - for (i = 0; i < max; i++) \ - for (j = 0; j < max; j++) \ - if (_SEARCH_array[i][j] == _SEARCH_target) \ - { (value) = i; goto found; } \ - (value) = -1; \ - found:; \ - } while (0) - - This could also be written using a statement expression: - - #define SEARCH(array, target) \ - ({ \ - __label__ found; \ - typeof (target) _SEARCH_target = (target); \ - typeof (*(array)) *_SEARCH_array = (array); \ - int i, j; \ - int value; \ - for (i = 0; i < max; i++) \ - for (j = 0; j < max; j++) \ - if (_SEARCH_array[i][j] == _SEARCH_target) \ - { value = i; goto found; } \ - value = -1; \ - found: \ - value; \ - }) - - Local label declarations also make the labels they declare visible to -nested functions, if there are any. *Note Nested Functions::, for -details. - - -File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions - -6.3 Labels as Values -==================== - -You can get the address of a label defined in the current function (or a -containing function) with the unary operator '&&'. The value has type -'void *'. This value is a constant and can be used wherever a constant -of that type is valid. For example: - - void *ptr; - /* ... */ - ptr = &&foo; - - To use these values, you need to be able to jump to one. This is done -with the computed goto statement(1), 'goto *EXP;'. For example, - - goto *ptr; - -Any expression of type 'void *' is allowed. - - One way of using these constants is in initializing a static array that -serves as a jump table: - - static void *array[] = { &&foo, &&bar, &&hack }; - -Then you can select a label with indexing, like this: - - goto *array[i]; - -Note that this does not check whether the subscript is in bounds--array -indexing in C never does that. - - Such an array of label values serves a purpose much like that of the -'switch' statement. The 'switch' statement is cleaner, so use that -rather than an array unless the problem does not fit a 'switch' -statement very well. - - Another use of label values is in an interpreter for threaded code. -The labels within the interpreter function can be stored in the threaded -code for super-fast dispatching. - - You may not use this mechanism to jump to code in a different function. -If you do that, totally unpredictable things happen. The best way to -avoid this is to store the label address only in automatic variables and -never pass it as an argument. - - An alternate way to write the above example is - - static const int array[] = { &&foo - &&foo, &&bar - &&foo, - &&hack - &&foo }; - goto *(&&foo + array[i]); - -This is more friendly to code living in shared libraries, as it reduces -the number of dynamic relocations that are needed, and by consequence, -allows the data to be read-only. - - The '&&foo' expressions for the same label might have different values -if the containing function is inlined or cloned. If a program relies on -them being always the same, '__attribute__((__noinline__,__noclone__))' -should be used to prevent inlining and cloning. If '&&foo' is used in a -static variable initializer, inlining and cloning is forbidden. - - ---------- Footnotes ---------- - - (1) The analogous feature in Fortran is called an assigned goto, but -that name seems inappropriate in C, where one can do more than simply -store label addresses in label variables. - - -File: gcc.info, Node: Nested Functions, Next: Constructing Calls, Prev: Labels as Values, Up: C Extensions - -6.4 Nested Functions -==================== - -A "nested function" is a function defined inside another function. -Nested functions are supported as an extension in GNU C, but are not -supported by GNU C++. - - The nested function's name is local to the block where it is defined. -For example, here we define a nested function named 'square', and call -it twice: - - foo (double a, double b) - { - double square (double z) { return z * z; } - - return square (a) + square (b); - } - - The nested function can access all the variables of the containing -function that are visible at the point of its definition. This is -called "lexical scoping". For example, here we show a nested function -which uses an inherited variable named 'offset': - - bar (int *array, int offset, int size) - { - int access (int *array, int index) - { return array[index + offset]; } - int i; - /* ... */ - for (i = 0; i < size; i++) - /* ... */ access (array, i) /* ... */ - } - - Nested function definitions are permitted within functions in the -places where variable definitions are allowed; that is, in any block, -mixed with the other declarations and statements in the block. - - It is possible to call the nested function from outside the scope of -its name by storing its address or passing the address to another -function: - - hack (int *array, int size) - { - void store (int index, int value) - { array[index] = value; } - - intermediate (store, size); - } - - Here, the function 'intermediate' receives the address of 'store' as an -argument. If 'intermediate' calls 'store', the arguments given to -'store' are used to store into 'array'. But this technique works only -so long as the containing function ('hack', in this example) does not -exit. - - If you try to call the nested function through its address after the -containing function exits, all hell breaks loose. If you try to call it -after a containing scope level exits, and if it refers to some of the -variables that are no longer in scope, you may be lucky, but it's not -wise to take the risk. If, however, the nested function does not refer -to anything that has gone out of scope, you should be safe. - - GCC implements taking the address of a nested function using a -technique called "trampolines". This technique was described in -'Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference -Proceedings, October 17-21, 1988). - - A nested function can jump to a label inherited from a containing -function, provided the label is explicitly declared in the containing -function (*note Local Labels::). Such a jump returns instantly to the -containing function, exiting the nested function that did the 'goto' and -any intermediate functions as well. Here is an example: - - bar (int *array, int offset, int size) - { - __label__ failure; - int access (int *array, int index) - { - if (index > size) - goto failure; - return array[index + offset]; - } - int i; - /* ... */ - for (i = 0; i < size; i++) - /* ... */ access (array, i) /* ... */ - /* ... */ - return 0; - - /* Control comes here from 'access' - if it detects an error. */ - failure: - return -1; - } - - A nested function always has no linkage. Declaring one with 'extern' -or 'static' is erroneous. If you need to declare the nested function -before its definition, use 'auto' (which is otherwise meaningless for -function declarations). - - bar (int *array, int offset, int size) - { - __label__ failure; - auto int access (int *, int); - /* ... */ - int access (int *array, int index) - { - if (index > size) - goto failure; - return array[index + offset]; - } - /* ... */ - } - - -File: gcc.info, Node: Constructing Calls, Next: Typeof, Prev: Nested Functions, Up: C Extensions - -6.5 Constructing Function Calls -=============================== - -Using the built-in functions described below, you can record the -arguments a function received, and call another function with the same -arguments, without knowing the number or types of the arguments. - - You can also record the return value of that function call, and later -return that value, without knowing what data type the function tried to -return (as long as your caller expects that data type). - - However, these built-in functions may interact badly with some -sophisticated features or other extensions of the language. It is, -therefore, not recommended to use them outside very simple functions -acting as mere forwarders for their arguments. - - -- Built-in Function: void * __builtin_apply_args () - This built-in function returns a pointer to data describing how to - perform a call with the same arguments as are passed to the current - function. - - The function saves the arg pointer register, structure value - address, and all registers that might be used to pass arguments to - a function into a block of memory allocated on the stack. Then it - returns the address of that block. - - -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void - *ARGUMENTS, size_t SIZE) - This built-in function invokes FUNCTION with a copy of the - parameters described by ARGUMENTS and SIZE. - - The value of ARGUMENTS should be the value returned by - '__builtin_apply_args'. The argument SIZE specifies the size of - the stack argument data, in bytes. - - This function returns a pointer to data describing how to return - whatever value is returned by FUNCTION. The data is saved in a - block of memory allocated on the stack. - - It is not always simple to compute the proper value for SIZE. The - value is used by '__builtin_apply' to compute the amount of data - that should be pushed on the stack and copied from the incoming - argument area. - - -- Built-in Function: void __builtin_return (void *RESULT) - This built-in function returns the value described by RESULT from - the containing function. You should specify, for RESULT, a value - returned by '__builtin_apply'. - - -- Built-in Function: __builtin_va_arg_pack () - This built-in function represents all anonymous arguments of an - inline function. It can be used only in inline functions that are - always inlined, never compiled as a separate function, such as - those using '__attribute__ ((__always_inline__))' or '__attribute__ - ((__gnu_inline__))' extern inline functions. It must be only - passed as last argument to some other function with variable - arguments. This is useful for writing small wrapper inlines for - variable argument functions, when using preprocessor macros is - undesirable. For example: - extern int myprintf (FILE *f, const char *format, ...); - extern inline __attribute__ ((__gnu_inline__)) int - myprintf (FILE *f, const char *format, ...) - { - int r = fprintf (f, "myprintf: "); - if (r < 0) - return r; - int s = fprintf (f, format, __builtin_va_arg_pack ()); - if (s < 0) - return s; - return r + s; - } - - -- Built-in Function: size_t __builtin_va_arg_pack_len () - This built-in function returns the number of anonymous arguments of - an inline function. It can be used only in inline functions that - are always inlined, never compiled as a separate function, such as - those using '__attribute__ ((__always_inline__))' or '__attribute__ - ((__gnu_inline__))' extern inline functions. For example following - does link- or run-time checking of open arguments for optimized - code: - #ifdef __OPTIMIZE__ - extern inline __attribute__((__gnu_inline__)) int - myopen (const char *path, int oflag, ...) - { - if (__builtin_va_arg_pack_len () > 1) - warn_open_too_many_arguments (); - - if (__builtin_constant_p (oflag)) - { - if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1) - { - warn_open_missing_mode (); - return __open_2 (path, oflag); - } - return open (path, oflag, __builtin_va_arg_pack ()); - } - - if (__builtin_va_arg_pack_len () < 1) - return __open_2 (path, oflag); - - return open (path, oflag, __builtin_va_arg_pack ()); - } - #endif - - -File: gcc.info, Node: Typeof, Next: Conditionals, Prev: Constructing Calls, Up: C Extensions - -6.6 Referring to a Type with 'typeof' -===================================== - -Another way to refer to the type of an expression is with 'typeof'. The -syntax of using of this keyword looks like 'sizeof', but the construct -acts semantically like a type name defined with 'typedef'. - - There are two ways of writing the argument to 'typeof': with an -expression or with a type. Here is an example with an expression: - - typeof (x[0](1)) - -This assumes that 'x' is an array of pointers to functions; the type -described is that of the values of the functions. - - Here is an example with a typename as the argument: - - typeof (int *) - -Here the type described is that of pointers to 'int'. - - If you are writing a header file that must work when included in ISO C -programs, write '__typeof__' instead of 'typeof'. *Note Alternate -Keywords::. - - A 'typeof' construct can be used anywhere a typedef name can be used. -For example, you can use it in a declaration, in a cast, or inside of -'sizeof' or 'typeof'. - - The operand of 'typeof' is evaluated for its side effects if and only -if it is an expression of variably modified type or the name of such a -type. - - 'typeof' is often useful in conjunction with statement expressions -(*note Statement Exprs::). Here is how the two together can be used to -define a safe "maximum" macro which operates on any arithmetic type and -evaluates each of its arguments exactly once: - - #define max(a,b) \ - ({ typeof (a) _a = (a); \ - typeof (b) _b = (b); \ - _a > _b ? _a : _b; }) - - The reason for using names that start with underscores for the local -variables is to avoid conflicts with variable names that occur within -the expressions that are substituted for 'a' and 'b'. Eventually we -hope to design a new form of declaration syntax that allows you to -declare variables whose scopes start only after their initializers; this -will be a more reliable way to prevent such conflicts. - -Some more examples of the use of 'typeof': - - * This declares 'y' with the type of what 'x' points to. - - typeof (*x) y; - - * This declares 'y' as an array of such values. - - typeof (*x) y[4]; - - * This declares 'y' as an array of pointers to characters: - - typeof (typeof (char *)[4]) y; - - It is equivalent to the following traditional C declaration: - - char *y[4]; - - To see the meaning of the declaration using 'typeof', and why it - might be a useful way to write, rewrite it with these macros: - - #define pointer(T) typeof(T *) - #define array(T, N) typeof(T [N]) - - Now the declaration can be rewritten this way: - - array (pointer (char), 4) y; - - Thus, 'array (pointer (char), 4)' is the type of arrays of 4 - pointers to 'char'. - - In GNU C, but not GNU C++, you may also declare the type of a variable -as '__auto_type'. In that case, the declaration must declare only one -variable, whose declarator must just be an identifier, the declaration -must be initialized, and the type of the variable is determined by the -initializer; the name of the variable is not in scope until after the -initializer. (In C++, you should use C++11 'auto' for this purpose.) -Using '__auto_type', the "maximum" macro above could be written as: - - #define max(a,b) \ - ({ __auto_type _a = (a); \ - __auto_type _b = (b); \ - _a > _b ? _a : _b; }) - - Using '__auto_type' instead of 'typeof' has two advantages: - - * Each argument to the macro appears only once in the expansion of - the macro. This prevents the size of the macro expansion growing - exponentially when calls to such macros are nested inside arguments - of such macros. - - * If the argument to the macro has variably modified type, it is - evaluated only once when using '__auto_type', but twice if 'typeof' - is used. - - _Compatibility Note:_ In addition to 'typeof', GCC 2 supported a more -limited extension that permitted one to write - - typedef T = EXPR; - -with the effect of declaring T to have the type of the expression EXPR. -This extension does not work with GCC 3 (versions between 3.0 and 3.2 -crash; 3.2.1 and later give an error). Code that relies on it should be -rewritten to use 'typeof': - - typedef typeof(EXPR) T; - -This works with all versions of GCC. - - -File: gcc.info, Node: Conditionals, Next: __int128, Prev: Typeof, Up: C Extensions - -6.7 Conditionals with Omitted Operands -====================================== - -The middle operand in a conditional expression may be omitted. Then if -the first operand is nonzero, its value is the value of the conditional -expression. - - Therefore, the expression - - x ? : y - -has the value of 'x' if that is nonzero; otherwise, the value of 'y'. - - This example is perfectly equivalent to - - x ? x : y - -In this simple case, the ability to omit the middle operand is not -especially useful. When it becomes useful is when the first operand -does, or may (if it is a macro argument), contain a side effect. Then -repeating the operand in the middle would perform the side effect twice. -Omitting the middle operand uses the value already computed without the -undesirable effects of recomputing it. - - -File: gcc.info, Node: __int128, Next: Long Long, Prev: Conditionals, Up: C Extensions - -6.8 128-bit integers -==================== - -As an extension the integer scalar type '__int128' is supported for -targets which have an integer mode wide enough to hold 128 bits. Simply -write '__int128' for a signed 128-bit integer, or 'unsigned __int128' -for an unsigned 128-bit integer. There is no support in GCC for -expressing an integer constant of type '__int128' for targets with 'long -long' integer less than 128 bits wide. - - -File: gcc.info, Node: Long Long, Next: Complex, Prev: __int128, Up: C Extensions - -6.9 Double-Word Integers -======================== - -ISO C99 supports data types for integers that are at least 64 bits wide, -and as an extension GCC supports them in C90 mode and in C++. Simply -write 'long long int' for a signed integer, or 'unsigned long long int' -for an unsigned integer. To make an integer constant of type 'long long -int', add the suffix 'LL' to the integer. To make an integer constant -of type 'unsigned long long int', add the suffix 'ULL' to the integer. - - You can use these types in arithmetic like any other integer types. -Addition, subtraction, and bitwise boolean operations on these types are -open-coded on all types of machines. Multiplication is open-coded if -the machine supports a fullword-to-doubleword widening multiply -instruction. Division and shifts are open-coded only on machines that -provide special support. The operations that are not open-coded use -special library routines that come with GCC. - - There may be pitfalls when you use 'long long' types for function -arguments without function prototypes. If a function expects type 'int' -for its argument, and you pass a value of type 'long long int', -confusion results because the caller and the subroutine disagree about -the number of bytes for the argument. Likewise, if the function expects -'long long int' and you pass 'int'. The best way to avoid such problems -is to use prototypes. - - -File: gcc.info, Node: Complex, Next: Floating Types, Prev: Long Long, Up: C Extensions - -6.10 Complex Numbers -==================== - -ISO C99 supports complex floating data types, and as an extension GCC -supports them in C90 mode and in C++. GCC also supports complex integer -data types which are not part of ISO C99. You can declare complex types -using the keyword '_Complex'. As an extension, the older GNU keyword -'__complex__' is also supported. - - For example, '_Complex double x;' declares 'x' as a variable whose real -part and imaginary part are both of type 'double'. '_Complex short int -y;' declares 'y' to have real and imaginary parts of type 'short int'; -this is not likely to be useful, but it shows that the set of complex -types is complete. - - To write a constant with a complex data type, use the suffix 'i' or 'j' -(either one; they are equivalent). For example, '2.5fi' has type -'_Complex float' and '3i' has type '_Complex int'. Such a constant -always has a pure imaginary value, but you can form any complex value -you like by adding one to a real constant. This is a GNU extension; if -you have an ISO C99 conforming C library (such as the GNU C Library), -and want to construct complex constants of floating type, you should -include '<complex.h>' and use the macros 'I' or '_Complex_I' instead. - - To extract the real part of a complex-valued expression EXP, write -'__real__ EXP'. Likewise, use '__imag__' to extract the imaginary part. -This is a GNU extension; for values of floating type, you should use the -ISO C99 functions 'crealf', 'creal', 'creall', 'cimagf', 'cimag' and -'cimagl', declared in '<complex.h>' and also provided as built-in -functions by GCC. - - The operator '~' performs complex conjugation when used on a value with -a complex type. This is a GNU extension; for values of floating type, -you should use the ISO C99 functions 'conjf', 'conj' and 'conjl', -declared in '<complex.h>' and also provided as built-in functions by -GCC. - - GCC can allocate complex automatic variables in a noncontiguous -fashion; it's even possible for the real part to be in a register while -the imaginary part is on the stack (or vice versa). Only the DWARF 2 -debug info format can represent this, so use of DWARF 2 is recommended. -If you are using the stabs debug info format, GCC describes a -noncontiguous complex variable as if it were two separate variables of -noncomplex type. If the variable's actual name is 'foo', the two -fictitious variables are named 'foo$real' and 'foo$imag'. You can -examine and set these two fictitious variables with your debugger. - - -File: gcc.info, Node: Floating Types, Next: Half-Precision, Prev: Complex, Up: C Extensions - -6.11 Additional Floating Types -============================== - -As an extension, GNU C supports additional floating types, '__float80' -and '__float128' to support 80-bit ('XFmode') and 128-bit ('TFmode') -floating types. Support for additional types includes the arithmetic -operators: add, subtract, multiply, divide; unary arithmetic operators; -relational operators; equality operators; and conversions to and from -integer and other floating types. Use a suffix 'w' or 'W' in a literal -constant of type '__float80' and 'q' or 'Q' for '_float128'. You can -declare complex types using the corresponding internal complex type, -'XCmode' for '__float80' type and 'TCmode' for '__float128' type: - - typedef _Complex float __attribute__((mode(TC))) _Complex128; - typedef _Complex float __attribute__((mode(XC))) _Complex80; - - Not all targets support additional floating-point types. '__float80' -and '__float128' types are supported on i386, x86_64 and IA-64 targets. -The '__float128' type is supported on hppa HP-UX targets. - - -File: gcc.info, Node: Half-Precision, Next: Decimal Float, Prev: Floating Types, Up: C Extensions - -6.12 Half-Precision Floating Point -================================== - -On ARM targets, GCC supports half-precision (16-bit) floating point via -the '__fp16' type. You must enable this type explicitly with the -'-mfp16-format' command-line option in order to use it. - - ARM supports two incompatible representations for half-precision -floating-point values. You must choose one of the representations and -use it consistently in your program. - - Specifying '-mfp16-format=ieee' selects the IEEE 754-2008 format. This -format can represent normalized values in the range of 2^{-14} to 65504. -There are 11 bits of significand precision, approximately 3 decimal -digits. - - Specifying '-mfp16-format=alternative' selects the ARM alternative -format. This representation is similar to the IEEE format, but does not -support infinities or NaNs. Instead, the range of exponents is -extended, so that this format can represent normalized values in the -range of 2^{-14} to 131008. - - The '__fp16' type is a storage format only. For purposes of arithmetic -and other operations, '__fp16' values in C or C++ expressions are -automatically promoted to 'float'. In addition, you cannot declare a -function with a return value or parameters of type '__fp16'. - - Note that conversions from 'double' to '__fp16' involve an intermediate -conversion to 'float'. Because of rounding, this can sometimes produce -a different result than a direct conversion. - - ARM provides hardware support for conversions between '__fp16' and -'float' values as an extension to VFP and NEON (Advanced SIMD). GCC -generates code using these hardware instructions if you compile with -options to select an FPU that provides them; for example, -'-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the '-mfp16-format' -option to select a half-precision format. - - Language-level support for the '__fp16' data type is independent of -whether GCC generates code using hardware floating-point instructions. -In cases where hardware support is not specified, GCC implements -conversions between '__fp16' and 'float' values as library calls. - - -File: gcc.info, Node: Decimal Float, Next: Hex Floats, Prev: Half-Precision, Up: C Extensions - -6.13 Decimal Floating Types -=========================== - -As an extension, GNU C supports decimal floating types as defined in the -N1312 draft of ISO/IEC WDTR24732. Support for decimal floating types in -GCC will evolve as the draft technical report changes. Calling -conventions for any target might also change. Not all targets support -decimal floating types. - - The decimal floating types are '_Decimal32', '_Decimal64', and -'_Decimal128'. They use a radix of ten, unlike the floating types -'float', 'double', and 'long double' whose radix is not specified by the -C standard but is usually two. - - Support for decimal floating types includes the arithmetic operators -add, subtract, multiply, divide; unary arithmetic operators; relational -operators; equality operators; and conversions to and from integer and -other floating types. Use a suffix 'df' or 'DF' in a literal constant -of type '_Decimal32', 'dd' or 'DD' for '_Decimal64', and 'dl' or 'DL' -for '_Decimal128'. - - GCC support of decimal float as specified by the draft technical report -is incomplete: - - * When the value of a decimal floating type cannot be represented in - the integer type to which it is being converted, the result is - undefined rather than the result value specified by the draft - technical report. - - * GCC does not provide the C library functionality associated with - 'math.h', 'fenv.h', 'stdio.h', 'stdlib.h', and 'wchar.h', which - must come from a separate C library implementation. Because of - this the GNU C compiler does not define macro '__STDC_DEC_FP__' to - indicate that the implementation conforms to the technical report. - - Types '_Decimal32', '_Decimal64', and '_Decimal128' are supported by -the DWARF 2 debug information format. - - -File: gcc.info, Node: Hex Floats, Next: Fixed-Point, Prev: Decimal Float, Up: C Extensions - -6.14 Hex Floats -=============== - -ISO C99 supports floating-point numbers written not only in the usual -decimal notation, such as '1.55e1', but also numbers such as '0x1.fp3' -written in hexadecimal format. As a GNU extension, GCC supports this in -C90 mode (except in some cases when strictly conforming) and in C++. In -that format the '0x' hex introducer and the 'p' or 'P' exponent field -are mandatory. The exponent is a decimal number that indicates the -power of 2 by which the significant part is multiplied. Thus '0x1.f' is -1 15/16, 'p3' multiplies it by 8, and the value of '0x1.fp3' is the same -as '1.55e1'. - - Unlike for floating-point numbers in the decimal notation the exponent -is always required in the hexadecimal notation. Otherwise the compiler -would not be able to resolve the ambiguity of, e.g., '0x1.f'. This -could mean '1.0f' or '1.9375' since 'f' is also the extension for -floating-point constants of type 'float'. - - -File: gcc.info, Node: Fixed-Point, Next: Named Address Spaces, Prev: Hex Floats, Up: C Extensions - -6.15 Fixed-Point Types -====================== - -As an extension, GNU C supports fixed-point types as defined in the -N1169 draft of ISO/IEC DTR 18037. Support for fixed-point types in GCC -will evolve as the draft technical report changes. Calling conventions -for any target might also change. Not all targets support fixed-point -types. - - The fixed-point types are 'short _Fract', '_Fract', 'long _Fract', -'long long _Fract', 'unsigned short _Fract', 'unsigned _Fract', -'unsigned long _Fract', 'unsigned long long _Fract', '_Sat short -_Fract', '_Sat _Fract', '_Sat long _Fract', '_Sat long long _Fract', -'_Sat unsigned short _Fract', '_Sat unsigned _Fract', '_Sat unsigned -long _Fract', '_Sat unsigned long long _Fract', 'short _Accum', -'_Accum', 'long _Accum', 'long long _Accum', 'unsigned short _Accum', -'unsigned _Accum', 'unsigned long _Accum', 'unsigned long long _Accum', -'_Sat short _Accum', '_Sat _Accum', '_Sat long _Accum', '_Sat long long -_Accum', '_Sat unsigned short _Accum', '_Sat unsigned _Accum', '_Sat -unsigned long _Accum', '_Sat unsigned long long _Accum'. - - Fixed-point data values contain fractional and optional integral parts. -The format of fixed-point data varies and depends on the target machine. - - Support for fixed-point types includes: - * prefix and postfix increment and decrement operators ('++', '--') - * unary arithmetic operators ('+', '-', '!') - * binary arithmetic operators ('+', '-', '*', '/') - * binary shift operators ('<<', '>>') - * relational operators ('<', '<=', '>=', '>') - * equality operators ('==', '!=') - * assignment operators ('+=', '-=', '*=', '/=', '<<=', '>>=') - * conversions to and from integer, floating-point, or fixed-point - types - - Use a suffix in a fixed-point literal constant: - * 'hr' or 'HR' for 'short _Fract' and '_Sat short _Fract' - * 'r' or 'R' for '_Fract' and '_Sat _Fract' - * 'lr' or 'LR' for 'long _Fract' and '_Sat long _Fract' - * 'llr' or 'LLR' for 'long long _Fract' and '_Sat long long _Fract' - * 'uhr' or 'UHR' for 'unsigned short _Fract' and '_Sat unsigned short - _Fract' - * 'ur' or 'UR' for 'unsigned _Fract' and '_Sat unsigned _Fract' - * 'ulr' or 'ULR' for 'unsigned long _Fract' and '_Sat unsigned long - _Fract' - * 'ullr' or 'ULLR' for 'unsigned long long _Fract' and '_Sat unsigned - long long _Fract' - * 'hk' or 'HK' for 'short _Accum' and '_Sat short _Accum' - * 'k' or 'K' for '_Accum' and '_Sat _Accum' - * 'lk' or 'LK' for 'long _Accum' and '_Sat long _Accum' - * 'llk' or 'LLK' for 'long long _Accum' and '_Sat long long _Accum' - * 'uhk' or 'UHK' for 'unsigned short _Accum' and '_Sat unsigned short - _Accum' - * 'uk' or 'UK' for 'unsigned _Accum' and '_Sat unsigned _Accum' - * 'ulk' or 'ULK' for 'unsigned long _Accum' and '_Sat unsigned long - _Accum' - * 'ullk' or 'ULLK' for 'unsigned long long _Accum' and '_Sat unsigned - long long _Accum' - - GCC support of fixed-point types as specified by the draft technical -report is incomplete: - - * Pragmas to control overflow and rounding behaviors are not - implemented. - - Fixed-point types are supported by the DWARF 2 debug information -format. - - -File: gcc.info, Node: Named Address Spaces, Next: Zero Length, Prev: Fixed-Point, Up: C Extensions - -6.16 Named Address Spaces -========================= - -As an extension, GNU C supports named address spaces as defined in the -N1275 draft of ISO/IEC DTR 18037. Support for named address spaces in -GCC will evolve as the draft technical report changes. Calling -conventions for any target might also change. At present, only the AVR, -SPU, M32C, and RL78 targets support address spaces other than the -generic address space. - - Address space identifiers may be used exactly like any other C type -qualifier (e.g., 'const' or 'volatile'). See the N1275 document for -more details. - -6.16.1 AVR Named Address Spaces -------------------------------- - -On the AVR target, there are several address spaces that can be used in -order to put read-only data into the flash memory and access that data -by means of the special instructions 'LPM' or 'ELPM' needed to read from -flash. - - Per default, any data including read-only data is located in RAM (the -generic address space) so that non-generic address spaces are needed to -locate read-only data in flash memory _and_ to generate the right -instructions to access this data without using (inline) assembler code. - -'__flash' - The '__flash' qualifier locates data in the '.progmem.data' - section. Data is read using the 'LPM' instruction. Pointers to - this address space are 16 bits wide. - -'__flash1' -'__flash2' -'__flash3' -'__flash4' -'__flash5' - These are 16-bit address spaces locating data in section - '.progmemN.data' where N refers to address space '__flashN'. The - compiler sets the 'RAMPZ' segment register appropriately before - reading data by means of the 'ELPM' instruction. - -'__memx' - This is a 24-bit address space that linearizes flash and RAM: If - the high bit of the address is set, data is read from RAM using the - lower two bytes as RAM address. If the high bit of the address is - clear, data is read from flash with 'RAMPZ' set according to the - high byte of the address. *Note '__builtin_avr_flash_segment': AVR - Built-in Functions. - - Objects in this address space are located in '.progmemx.data'. - - Example - - char my_read (const __flash char ** p) - { - /* p is a pointer to RAM that points to a pointer to flash. - The first indirection of p reads that flash pointer - from RAM and the second indirection reads a char from this - flash address. */ - - return **p; - } - - /* Locate array[] in flash memory */ - const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 }; - - int i = 1; - - int main (void) - { - /* Return 17 by reading from flash memory */ - return array[array[i]]; - } - -For each named address space supported by avr-gcc there is an equally -named but uppercase built-in macro defined. The purpose is to -facilitate testing if respective address space support is available or -not: - - #ifdef __FLASH - const __flash int var = 1; - - int read_var (void) - { - return var; - } - #else - #include <avr/pgmspace.h> /* From AVR-LibC */ - - const int var PROGMEM = 1; - - int read_var (void) - { - return (int) pgm_read_word (&var); - } - #endif /* __FLASH */ - -Notice that attribute *note 'progmem': AVR Variable Attributes. locates -data in flash but accesses to these data read from generic address -space, i.e. from RAM, so that you need special accessors like -'pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) -together with attribute 'progmem'. - -Limitations and caveats - - * Reading across the 64 KiB section boundary of the '__flash' or - '__flashN' address spaces shows undefined behavior. The only - address space that supports reading across the 64 KiB flash segment - boundaries is '__memx'. - - * If you use one of the '__flashN' address spaces you must arrange - your linker script to locate the '.progmemN.data' sections - according to your needs. - - * Any data or pointers to the non-generic address spaces must be - qualified as 'const', i.e. as read-only data. This still applies - if the data in one of these address spaces like software version - number or calibration lookup table are intended to be changed after - load time by, say, a boot loader. In this case the right - qualification is 'const' 'volatile' so that the compiler must not - optimize away known values or insert them as immediates into - operands of instructions. - - * The following code initializes a variable 'pfoo' located in static - storage with a 24-bit address: - extern const __memx char foo; - const __memx void *pfoo = &foo; - - Such code requires at least binutils 2.23, see - PR13503 (http://sourceware.org/PR13503). - -6.16.2 M32C Named Address Spaces --------------------------------- - -On the M32C target, with the R8C and M16C CPU variants, variables -qualified with '__far' are accessed using 32-bit addresses in order to -access memory beyond the first 64 Ki bytes. If '__far' is used with the -M32CM or M32C CPU variants, it has no effect. - -6.16.3 RL78 Named Address Spaces --------------------------------- - -On the RL78 target, variables qualified with '__far' are accessed with -32-bit pointers (20-bit addresses) rather than the default 16-bit -addresses. Non-far variables are assumed to appear in the topmost -64 KiB of the address space. - -6.16.4 SPU Named Address Spaces -------------------------------- - -On the SPU target variables may be declared as belonging to another -address space by qualifying the type with the '__ea' address space -identifier: - - extern int __ea i; - -The compiler generates special code to access the variable 'i'. It may -use runtime library support, or generate special machine instructions to -access that address space. - - -File: gcc.info, Node: Zero Length, Next: Empty Structures, Prev: Named Address Spaces, Up: C Extensions - -6.17 Arrays of Length Zero -========================== - -Zero-length arrays are allowed in GNU C. They are very useful as the -last element of a structure that is really a header for a -variable-length object: - - struct line { - int length; - char contents[0]; - }; - - struct line *thisline = (struct line *) - malloc (sizeof (struct line) + this_length); - thisline->length = this_length; - - In ISO C90, you would have to give 'contents' a length of 1, which -means either you waste space or complicate the argument to 'malloc'. - - In ISO C99, you would use a "flexible array member", which is slightly -different in syntax and semantics: - - * Flexible array members are written as 'contents[]' without the '0'. - - * Flexible array members have incomplete type, and so the 'sizeof' - operator may not be applied. As a quirk of the original - implementation of zero-length arrays, 'sizeof' evaluates to zero. - - * Flexible array members may only appear as the last member of a - 'struct' that is otherwise non-empty. - - * A structure containing a flexible array member, or a union - containing such a structure (possibly recursively), may not be a - member of a structure or an element of an array. (However, these - uses are permitted by GCC as extensions.) - - GCC versions before 3.0 allowed zero-length arrays to be statically -initialized, as if they were flexible arrays. In addition to those -cases that were useful, it also allowed initializations in situations -that would corrupt later data. Non-empty initialization of zero-length -arrays is now treated like any case where there are more initializer -elements than the array holds, in that a suitable warning about "excess -elements in array" is given, and the excess elements (all of them, in -this case) are ignored. - - Instead GCC allows static initialization of flexible array members. -This is equivalent to defining a new structure containing the original -structure followed by an array of sufficient size to contain the data. -E.g. in the following, 'f1' is constructed as if it were declared like -'f2'. - - struct f1 { - int x; int y[]; - } f1 = { 1, { 2, 3, 4 } }; - - struct f2 { - struct f1 f1; int data[3]; - } f2 = { { 1 }, { 2, 3, 4 } }; - -The convenience of this extension is that 'f1' has the desired type, -eliminating the need to consistently refer to 'f2.f1'. - - This has symmetry with normal static arrays, in that an array of -unknown size is also written with '[]'. - - Of course, this extension only makes sense if the extra data comes at -the end of a top-level object, as otherwise we would be overwriting data -at subsequent offsets. To avoid undue complication and confusion with -initialization of deeply nested arrays, we simply disallow any non-empty -initialization except when the structure is the top-level object. For -example: - - struct foo { int x; int y[]; }; - struct bar { struct foo z; }; - - struct foo a = { 1, { 2, 3, 4 } }; // Valid. - struct bar b = { { 1, { 2, 3, 4 } } }; // Invalid. - struct bar c = { { 1, { } } }; // Valid. - struct foo d[1] = { { 1 { 2, 3, 4 } } }; // Invalid. - - -File: gcc.info, Node: Empty Structures, Next: Variable Length, Prev: Zero Length, Up: C Extensions - -6.18 Structures With No Members -=============================== - -GCC permits a C structure to have no members: - - struct empty { - }; - - The structure has size zero. In C++, empty structures are part of the -language. G++ treats empty structures as if they had a single member of -type 'char'. - - -File: gcc.info, Node: Variable Length, Next: Variadic Macros, Prev: Empty Structures, Up: C Extensions - -6.19 Arrays of Variable Length -============================== - -Variable-length automatic arrays are allowed in ISO C99, and as an -extension GCC accepts them in C90 mode and in C++. These arrays are -declared like any other automatic arrays, but with a length that is not -a constant expression. The storage is allocated at the point of -declaration and deallocated when the block scope containing the -declaration exits. For example: - - FILE * - concat_fopen (char *s1, char *s2, char *mode) - { - char str[strlen (s1) + strlen (s2) + 1]; - strcpy (str, s1); - strcat (str, s2); - return fopen (str, mode); - } - - Jumping or breaking out of the scope of the array name deallocates the -storage. Jumping into the scope is not allowed; you get an error -message for it. - - As an extension, GCC accepts variable-length arrays as a member of a -structure or a union. For example: - - void - foo (int n) - { - struct S { int x[n]; }; - } - - You can use the function 'alloca' to get an effect much like -variable-length arrays. The function 'alloca' is available in many -other C implementations (but not in all). On the other hand, -variable-length arrays are more elegant. - - There are other differences between these two methods. Space allocated -with 'alloca' exists until the containing _function_ returns. The space -for a variable-length array is deallocated as soon as the array name's -scope ends. (If you use both variable-length arrays and 'alloca' in the -same function, deallocation of a variable-length array also deallocates -anything more recently allocated with 'alloca'.) - - You can also use variable-length arrays as arguments to functions: - - struct entry - tester (int len, char data[len][len]) - { - /* ... */ - } - - The length of an array is computed once when the storage is allocated -and is remembered for the scope of the array in case you access it with -'sizeof'. - - If you want to pass the array first and the length afterward, you can -use a forward declaration in the parameter list--another GNU extension. - - struct entry - tester (int len; char data[len][len], int len) - { - /* ... */ - } - - The 'int len' before the semicolon is a "parameter forward -declaration", and it serves the purpose of making the name 'len' known -when the declaration of 'data' is parsed. - - You can write any number of such parameter forward declarations in the -parameter list. They can be separated by commas or semicolons, but the -last one must end with a semicolon, which is followed by the "real" -parameter declarations. Each forward declaration must match a "real" -declaration in parameter name and data type. ISO C99 does not support -parameter forward declarations. - - -File: gcc.info, Node: Variadic Macros, Next: Escaped Newlines, Prev: Variable Length, Up: C Extensions - -6.20 Macros with a Variable Number of Arguments. -================================================ - -In the ISO C standard of 1999, a macro can be declared to accept a -variable number of arguments much as a function can. The syntax for -defining the macro is similar to that of a function. Here is an -example: - - #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__) - -Here '...' is a "variable argument". In the invocation of such a macro, -it represents the zero or more tokens until the closing parenthesis that -ends the invocation, including any commas. This set of tokens replaces -the identifier '__VA_ARGS__' in the macro body wherever it appears. See -the CPP manual for more information. - - GCC has long supported variadic macros, and used a different syntax -that allowed you to give a name to the variable arguments just like any -other argument. Here is an example: - - #define debug(format, args...) fprintf (stderr, format, args) - -This is in all ways equivalent to the ISO C example above, but arguably -more readable and descriptive. - - GNU CPP has two further variadic macro extensions, and permits them to -be used with either of the above forms of macro definition. - - In standard C, you are not allowed to leave the variable argument out -entirely; but you are allowed to pass an empty argument. For example, -this invocation is invalid in ISO C, because there is no comma after the -string: - - debug ("A message") - - GNU CPP permits you to completely omit the variable arguments in this -way. In the above examples, the compiler would complain, though since -the expansion of the macro still has the extra comma after the format -string. - - To help solve this problem, CPP behaves specially for variable -arguments used with the token paste operator, '##'. If instead you -write - - #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__) - -and if the variable arguments are omitted or empty, the '##' operator -causes the preprocessor to remove the comma before it. If you do -provide some variable arguments in your macro invocation, GNU CPP does -not complain about the paste operation and instead places the variable -arguments after the comma. Just like any other pasted macro argument, -these arguments are not macro expanded. - - -File: gcc.info, Node: Escaped Newlines, Next: Subscripting, Prev: Variadic Macros, Up: C Extensions - -6.21 Slightly Looser Rules for Escaped Newlines -=============================================== - -Recently, the preprocessor has relaxed its treatment of escaped -newlines. Previously, the newline had to immediately follow a -backslash. The current implementation allows whitespace in the form of -spaces, horizontal and vertical tabs, and form feeds between the -backslash and the subsequent newline. The preprocessor issues a -warning, but treats it as a valid escaped newline and combines the two -lines to form a single logical line. This works within comments and -tokens, as well as between tokens. Comments are _not_ treated as -whitespace for the purposes of this relaxation, since they have not yet -been replaced with spaces. - - -File: gcc.info, Node: Subscripting, Next: Pointer Arith, Prev: Escaped Newlines, Up: C Extensions - -6.22 Non-Lvalue Arrays May Have Subscripts -========================================== - -In ISO C99, arrays that are not lvalues still decay to pointers, and may -be subscripted, although they may not be modified or used after the next -sequence point and the unary '&' operator may not be applied to them. -As an extension, GNU C allows such arrays to be subscripted in C90 mode, -though otherwise they do not decay to pointers outside C99 mode. For -example, this is valid in GNU C though not valid in C90: - - struct foo {int a[4];}; - - struct foo f(); - - bar (int index) - { - return f().a[index]; - } - - -File: gcc.info, Node: Pointer Arith, Next: Initializers, Prev: Subscripting, Up: C Extensions - -6.23 Arithmetic on 'void'- and Function-Pointers -================================================ - -In GNU C, addition and subtraction operations are supported on pointers -to 'void' and on pointers to functions. This is done by treating the -size of a 'void' or of a function as 1. - - A consequence of this is that 'sizeof' is also allowed on 'void' and on -function types, and returns 1. - - The option '-Wpointer-arith' requests a warning if these extensions are -used. - - -File: gcc.info, Node: Initializers, Next: Compound Literals, Prev: Pointer Arith, Up: C Extensions - -6.24 Non-Constant Initializers -============================== - -As in standard C++ and ISO C99, the elements of an aggregate initializer -for an automatic variable are not required to be constant expressions in -GNU C. Here is an example of an initializer with run-time varying -elements: - - foo (float f, float g) - { - float beat_freqs[2] = { f-g, f+g }; - /* ... */ - } - - -File: gcc.info, Node: Compound Literals, Next: Designated Inits, Prev: Initializers, Up: C Extensions - -6.25 Compound Literals -====================== - -ISO C99 supports compound literals. A compound literal looks like a -cast containing an initializer. Its value is an object of the type -specified in the cast, containing the elements specified in the -initializer; it is an lvalue. As an extension, GCC supports compound -literals in C90 mode and in C++, though the semantics are somewhat -different in C++. - - Usually, the specified type is a structure. Assume that 'struct foo' -and 'structure' are declared as shown: - - struct foo {int a; char b[2];} structure; - -Here is an example of constructing a 'struct foo' with a compound -literal: - - structure = ((struct foo) {x + y, 'a', 0}); - -This is equivalent to writing the following: - - { - struct foo temp = {x + y, 'a', 0}; - structure = temp; - } - - You can also construct an array, though this is dangerous in C++, as -explained below. If all the elements of the compound literal are (made -up of) simple constant expressions, suitable for use in initializers of -objects of static storage duration, then the compound literal can be -coerced to a pointer to its first element and used in such an -initializer, as shown here: - - char **foo = (char *[]) { "x", "y", "z" }; - - Compound literals for scalar types and union types are also allowed, -but then the compound literal is equivalent to a cast. - - As a GNU extension, GCC allows initialization of objects with static -storage duration by compound literals (which is not possible in ISO C99, -because the initializer is not a constant). It is handled as if the -object is initialized only with the bracket enclosed list if the types -of the compound literal and the object match. The initializer list of -the compound literal must be constant. If the object being initialized -has array type of unknown size, the size is determined by compound -literal size. - - static struct foo x = (struct foo) {1, 'a', 'b'}; - static int y[] = (int []) {1, 2, 3}; - static int z[] = (int [3]) {1}; - -The above lines are equivalent to the following: - static struct foo x = {1, 'a', 'b'}; - static int y[] = {1, 2, 3}; - static int z[] = {1, 0, 0}; - - In C, a compound literal designates an unnamed object with static or -automatic storage duration. In C++, a compound literal designates a -temporary object, which only lives until the end of its full-expression. -As a result, well-defined C code that takes the address of a subobject -of a compound literal can be undefined in C++. For instance, if the -array compound literal example above appeared inside a function, any -subsequent use of 'foo' in C++ has undefined behavior because the -lifetime of the array ends after the declaration of 'foo'. As a result, -the C++ compiler now rejects the conversion of a temporary array to a -pointer. - - As an optimization, the C++ compiler sometimes gives array compound -literals longer lifetimes: when the array either appears outside a -function or has const-qualified type. If 'foo' and its initializer had -elements of 'char *const' type rather than 'char *', or if 'foo' were a -global variable, the array would have static storage duration. But it -is probably safest just to avoid the use of array compound literals in -code compiled as C++. - - -File: gcc.info, Node: Designated Inits, Next: Case Ranges, Prev: Compound Literals, Up: C Extensions - -6.26 Designated Initializers -============================ - -Standard C90 requires the elements of an initializer to appear in a -fixed order, the same as the order of the elements in the array or -structure being initialized. - - In ISO C99 you can give the elements in any order, specifying the array -indices or structure field names they apply to, and GNU C allows this as -an extension in C90 mode as well. This extension is not implemented in -GNU C++. - - To specify an array index, write '[INDEX] =' before the element value. -For example, - - int a[6] = { [4] = 29, [2] = 15 }; - -is equivalent to - - int a[6] = { 0, 0, 15, 0, 29, 0 }; - -The index values must be constant expressions, even if the array being -initialized is automatic. - - An alternative syntax for this that has been obsolete since GCC 2.5 but -GCC still accepts is to write '[INDEX]' before the element value, with -no '='. - - To initialize a range of elements to the same value, write '[FIRST ... -LAST] = VALUE'. This is a GNU extension. For example, - - int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; - -If the value in it has side-effects, the side-effects happen only once, -not for each initialized field by the range initializer. - -Note that the length of the array is the highest value specified plus -one. - - In a structure initializer, specify the name of a field to initialize -with '.FIELDNAME =' before the element value. For example, given the -following structure, - - struct point { int x, y; }; - -the following initialization - - struct point p = { .y = yvalue, .x = xvalue }; - -is equivalent to - - struct point p = { xvalue, yvalue }; - - Another syntax that has the same meaning, obsolete since GCC 2.5, is -'FIELDNAME:', as shown here: - - struct point p = { y: yvalue, x: xvalue }; - - Omitted field members are implicitly initialized the same as objects -that have static storage duration. - - The '[INDEX]' or '.FIELDNAME' is known as a "designator". You can also -use a designator (or the obsolete colon syntax) when initializing a -union, to specify which element of the union should be used. For -example, - - union foo { int i; double d; }; - - union foo f = { .d = 4 }; - -converts 4 to a 'double' to store it in the union using the second -element. By contrast, casting 4 to type 'union foo' stores it into the -union as the integer 'i', since it is an integer. (*Note Cast to -Union::.) - - You can combine this technique of naming elements with ordinary C -initialization of successive elements. Each initializer element that -does not have a designator applies to the next consecutive element of -the array or structure. For example, - - int a[6] = { [1] = v1, v2, [4] = v4 }; - -is equivalent to - - int a[6] = { 0, v1, v2, 0, v4, 0 }; - - Labeling the elements of an array initializer is especially useful when -the indices are characters or belong to an 'enum' type. For example: - - int whitespace[256] - = { [' '] = 1, ['\t'] = 1, ['\h'] = 1, - ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 }; - - You can also write a series of '.FIELDNAME' and '[INDEX]' designators -before an '=' to specify a nested subobject to initialize; the list is -taken relative to the subobject corresponding to the closest surrounding -brace pair. For example, with the 'struct point' declaration above: - - struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 }; - -If the same field is initialized multiple times, it has the value from -the last initialization. If any such overridden initialization has -side-effect, it is unspecified whether the side-effect happens or not. -Currently, GCC discards them and issues a warning. - - -File: gcc.info, Node: Case Ranges, Next: Cast to Union, Prev: Designated Inits, Up: C Extensions - -6.27 Case Ranges -================ - -You can specify a range of consecutive values in a single 'case' label, -like this: - - case LOW ... HIGH: - -This has the same effect as the proper number of individual 'case' -labels, one for each integer value from LOW to HIGH, inclusive. - - This feature is especially useful for ranges of ASCII character codes: - - case 'A' ... 'Z': - - *Be careful:* Write spaces around the '...', for otherwise it may be -parsed wrong when you use it with integer values. For example, write -this: - - case 1 ... 5: - -rather than this: - - case 1...5: - - -File: gcc.info, Node: Cast to Union, Next: Mixed Declarations, Prev: Case Ranges, Up: C Extensions - -6.28 Cast to a Union Type -========================= - -A cast to union type is similar to other casts, except that the type -specified is a union type. You can specify the type either with 'union -TAG' or with a typedef name. A cast to union is actually a constructor, -not a cast, and hence does not yield an lvalue like normal casts. -(*Note Compound Literals::.) - - The types that may be cast to the union type are those of the members -of the union. Thus, given the following union and variables: - - union foo { int i; double d; }; - int x; - double y; - -both 'x' and 'y' can be cast to type 'union foo'. - - Using the cast as the right-hand side of an assignment to a variable of -union type is equivalent to storing in a member of the union: - - union foo u; - /* ... */ - u = (union foo) x == u.i = x - u = (union foo) y == u.d = y - - You can also use the union cast as a function argument: - - void hack (union foo); - /* ... */ - hack ((union foo) x); - - -File: gcc.info, Node: Mixed Declarations, Next: Function Attributes, Prev: Cast to Union, Up: C Extensions - -6.29 Mixed Declarations and Code -================================ - -ISO C99 and ISO C++ allow declarations and code to be freely mixed -within compound statements. As an extension, GNU C also allows this in -C90 mode. For example, you could do: - - int i; - /* ... */ - i++; - int j = i + 2; - - Each identifier is visible from where it is declared until the end of -the enclosing block. - - -File: gcc.info, Node: Function Attributes, Next: Attribute Syntax, Prev: Mixed Declarations, Up: C Extensions - -6.30 Declaring Attributes of Functions -====================================== - -In GNU C, you declare certain things about functions called in your -program which help the compiler optimize function calls and check your -code more carefully. - - The keyword '__attribute__' allows you to specify special attributes -when making a declaration. This keyword is followed by an attribute -specification inside double parentheses. The following attributes are -currently defined for functions on all targets: 'aligned', 'alloc_size', -'alloc_align', 'assume_aligned', 'noreturn', 'returns_twice', -'noinline', 'noclone', 'always_inline', 'flatten', 'pure', 'const', -'nothrow', 'sentinel', 'format', 'format_arg', 'no_instrument_function', -'no_split_stack', 'section', 'constructor', 'destructor', 'used', -'unused', 'deprecated', 'weak', 'malloc', 'alias', 'ifunc', -'warn_unused_result', 'nonnull', 'returns_nonnull', 'gnu_inline', -'externally_visible', 'hot', 'cold', 'artificial', -'no_sanitize_address', 'no_address_safety_analysis', -'no_sanitize_undefined', 'error' and 'warning'. Several other -attributes are defined for functions on particular target systems. -Other attributes, including 'section' are supported for variables -declarations (*note Variable Attributes::) and for types (*note Type -Attributes::). - - GCC plugins may provide their own attributes. - - You may also specify attributes with '__' preceding and following each -keyword. This allows you to use them in header files without being -concerned about a possible macro of the same name. For example, you may -use '__noreturn__' instead of 'noreturn'. - - *Note Attribute Syntax::, for details of the exact syntax for using -attributes. - -'alias ("TARGET")' - The 'alias' attribute causes the declaration to be emitted as an - alias for another symbol, which must be specified. For instance, - - void __f () { /* Do something. */; } - void f () __attribute__ ((weak, alias ("__f"))); - - defines 'f' to be a weak alias for '__f'. In C++, the mangled name - for the target must be used. It is an error if '__f' is not - defined in the same translation unit. - - Not all target machines support this attribute. - -'aligned (ALIGNMENT)' - This attribute specifies a minimum alignment for the function, - measured in bytes. - - You cannot use this attribute to decrease the alignment of a - function, only to increase it. However, when you explicitly - specify a function alignment this overrides the effect of the - '-falign-functions' (*note Optimize Options::) option for this - function. - - Note that the effectiveness of 'aligned' attributes may be limited - by inherent limitations in your linker. On many systems, the - linker is only able to arrange for functions to be aligned up to a - certain maximum alignment. (For some linkers, the maximum - supported alignment may be very very small.) See your linker - documentation for further information. - - The 'aligned' attribute can also be used for variables and fields - (*note Variable Attributes::.) - -'alloc_size' - The 'alloc_size' attribute is used to tell the compiler that the - function return value points to memory, where the size is given by - one or two of the functions parameters. GCC uses this information - to improve the correctness of '__builtin_object_size'. - - The function parameter(s) denoting the allocated size are specified - by one or two integer arguments supplied to the attribute. The - allocated size is either the value of the single function argument - specified or the product of the two function arguments specified. - Argument numbering starts at one. - - For instance, - - void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2))) - void* my_realloc(void*, size_t) __attribute__((alloc_size(2))) - - declares that 'my_calloc' returns memory of the size given by the - product of parameter 1 and 2 and that 'my_realloc' returns memory - of the size given by parameter 2. - -'alloc_align' - The 'alloc_align' attribute is used to tell the compiler that the - function return value points to memory, where the returned pointer - minimum alignment is given by one of the functions parameters. GCC - uses this information to improve pointer alignment analysis. - - The function parameter denoting the allocated alignment is - specified by one integer argument, whose number is the argument of - the attribute. Argument numbering starts at one. - - For instance, - - void* my_memalign(size_t, size_t) __attribute__((alloc_align(1))) - - declares that 'my_memalign' returns memory with minimum alignment - given by parameter 1. - -'assume_aligned' - The 'assume_aligned' attribute is used to tell the compiler that - the function return value points to memory, where the returned - pointer minimum alignment is given by the first argument. If the - attribute has two arguments, the second argument is misalignment - offset. - - For instance - - void* my_alloc1(size_t) __attribute__((assume_aligned(16))) - void* my_alloc2(size_t) __attribute__((assume_aligned(32, 8))) - - declares that 'my_alloc1' returns 16-byte aligned pointer and that - 'my_alloc2' returns a pointer whose value modulo 32 is equal to 8. - -'always_inline' - Generally, functions are not inlined unless optimization is - specified. For functions declared inline, this attribute inlines - the function even if no optimization level is specified. - -'gnu_inline' - This attribute should be used with a function that is also declared - with the 'inline' keyword. It directs GCC to treat the function as - if it were defined in gnu90 mode even when compiling in C99 or - gnu99 mode. - - If the function is declared 'extern', then this definition of the - function is used only for inlining. In no case is the function - compiled as a standalone function, not even if you take its address - explicitly. Such an address becomes an external reference, as if - you had only declared the function, and had not defined it. This - has almost the effect of a macro. The way to use this is to put a - function definition in a header file with this attribute, and put - another copy of the function, without 'extern', in a library file. - The definition in the header file causes most calls to the function - to be inlined. If any uses of the function remain, they refer to - the single copy in the library. Note that the two definitions of - the functions need not be precisely the same, although if they do - not have the same effect your program may behave oddly. - - In C, if the function is neither 'extern' nor 'static', then the - function is compiled as a standalone function, as well as being - inlined where possible. - - This is how GCC traditionally handled functions declared 'inline'. - Since ISO C99 specifies a different semantics for 'inline', this - function attribute is provided as a transition measure and as a - useful feature in its own right. This attribute is available in - GCC 4.1.3 and later. It is available if either of the preprocessor - macros '__GNUC_GNU_INLINE__' or '__GNUC_STDC_INLINE__' are defined. - *Note An Inline Function is As Fast As a Macro: Inline. - - In C++, this attribute does not depend on 'extern' in any way, but - it still requires the 'inline' keyword to enable its special - behavior. - -'artificial' - This attribute is useful for small inline wrappers that if possible - should appear during debugging as a unit. Depending on the debug - info format it either means marking the function as artificial or - using the caller location for all instructions within the inlined - body. - -'bank_switch' - When added to an interrupt handler with the M32C port, causes the - prologue and epilogue to use bank switching to preserve the - registers rather than saving them on the stack. - -'flatten' - Generally, inlining into a function is limited. For a function - marked with this attribute, every call inside this function is - inlined, if possible. Whether the function itself is considered - for inlining depends on its size and the current inlining - parameters. - -'error ("MESSAGE")' - If this attribute is used on a function declaration and a call to - such a function is not eliminated through dead code elimination or - other optimizations, an error that includes MESSAGE is diagnosed. - This is useful for compile-time checking, especially together with - '__builtin_constant_p' and inline functions where checking the - inline function arguments is not possible through 'extern char - [(condition) ? 1 : -1];' tricks. While it is possible to leave the - function undefined and thus invoke a link failure, when using this - attribute the problem is diagnosed earlier and with exact location - of the call even in presence of inline functions or when not - emitting debugging information. - -'warning ("MESSAGE")' - If this attribute is used on a function declaration and a call to - such a function is not eliminated through dead code elimination or - other optimizations, a warning that includes MESSAGE is diagnosed. - This is useful for compile-time checking, especially together with - '__builtin_constant_p' and inline functions. While it is possible - to define the function with a message in '.gnu.warning*' section, - when using this attribute the problem is diagnosed earlier and with - exact location of the call even in presence of inline functions or - when not emitting debugging information. - -'cdecl' - On the Intel 386, the 'cdecl' attribute causes the compiler to - assume that the calling function pops off the stack space used to - pass arguments. This is useful to override the effects of the - '-mrtd' switch. - -'const' - Many functions do not examine any values except their arguments, - and have no effects except the return value. Basically this is - just slightly more strict class than the 'pure' attribute below, - since function is not allowed to read global memory. - - Note that a function that has pointer arguments and examines the - data pointed to must _not_ be declared 'const'. Likewise, a - function that calls a non-'const' function usually must not be - 'const'. It does not make sense for a 'const' function to return - 'void'. - - The attribute 'const' is not implemented in GCC versions earlier - than 2.5. An alternative way to declare that a function has no - side effects, which works in the current version and in some older - versions, is as follows: - - typedef int intfn (); - - extern const intfn square; - - This approach does not work in GNU C++ from 2.6.0 on, since the - language specifies that the 'const' must be attached to the return - value. - -'constructor' -'destructor' -'constructor (PRIORITY)' -'destructor (PRIORITY)' - The 'constructor' attribute causes the function to be called - automatically before execution enters 'main ()'. Similarly, the - 'destructor' attribute causes the function to be called - automatically after 'main ()' completes or 'exit ()' is called. - Functions with these attributes are useful for initializing data - that is used implicitly during the execution of the program. - - You may provide an optional integer priority to control the order - in which constructor and destructor functions are run. A - constructor with a smaller priority number runs before a - constructor with a larger priority number; the opposite - relationship holds for destructors. So, if you have a constructor - that allocates a resource and a destructor that deallocates the - same resource, both functions typically have the same priority. - The priorities for constructor and destructor functions are the - same as those specified for namespace-scope C++ objects (*note C++ - Attributes::). - - These attributes are not currently implemented for Objective-C. - -'deprecated' -'deprecated (MSG)' - The 'deprecated' attribute results in a warning if the function is - used anywhere in the source file. This is useful when identifying - functions that are expected to be removed in a future version of a - program. The warning also includes the location of the declaration - of the deprecated function, to enable users to easily find further - information about why the function is deprecated, or what they - should do instead. Note that the warnings only occurs for uses: - - int old_fn () __attribute__ ((deprecated)); - int old_fn (); - int (*fn_ptr)() = old_fn; - - results in a warning on line 3 but not line 2. The optional MSG - argument, which must be a string, is printed in the warning if - present. - - The 'deprecated' attribute can also be used for variables and types - (*note Variable Attributes::, *note Type Attributes::.) - -'disinterrupt' - On Epiphany and MeP targets, this attribute causes the compiler to - emit instructions to disable interrupts for the duration of the - given function. - -'dllexport' - On Microsoft Windows targets and Symbian OS targets the 'dllexport' - attribute causes the compiler to provide a global pointer to a - pointer in a DLL, so that it can be referenced with the 'dllimport' - attribute. On Microsoft Windows targets, the pointer name is - formed by combining '_imp__' and the function or variable name. - - You can use '__declspec(dllexport)' as a synonym for '__attribute__ - ((dllexport))' for compatibility with other compilers. - - On systems that support the 'visibility' attribute, this attribute - also implies "default" visibility. It is an error to explicitly - specify any other visibility. - - In previous versions of GCC, the 'dllexport' attribute was ignored - for inlined functions, unless the '-fkeep-inline-functions' flag - had been used. The default behavior now is to emit all dllexported - inline functions; however, this can cause object file-size bloat, - in which case the old behavior can be restored by using - '-fno-keep-inline-dllexport'. - - The attribute is also ignored for undefined symbols. - - When applied to C++ classes, the attribute marks defined - non-inlined member functions and static data members as exports. - Static consts initialized in-class are not marked unless they are - also defined out-of-class. - - For Microsoft Windows targets there are alternative methods for - including the symbol in the DLL's export table such as using a - '.def' file with an 'EXPORTS' section or, with GNU ld, using the - '--export-all' linker flag. - -'dllimport' - On Microsoft Windows and Symbian OS targets, the 'dllimport' - attribute causes the compiler to reference a function or variable - via a global pointer to a pointer that is set up by the DLL - exporting the symbol. The attribute implies 'extern'. On - Microsoft Windows targets, the pointer name is formed by combining - '_imp__' and the function or variable name. - - You can use '__declspec(dllimport)' as a synonym for '__attribute__ - ((dllimport))' for compatibility with other compilers. - - On systems that support the 'visibility' attribute, this attribute - also implies "default" visibility. It is an error to explicitly - specify any other visibility. - - Currently, the attribute is ignored for inlined functions. If the - attribute is applied to a symbol _definition_, an error is - reported. If a symbol previously declared 'dllimport' is later - defined, the attribute is ignored in subsequent references, and a - warning is emitted. The attribute is also overridden by a - subsequent declaration as 'dllexport'. - - When applied to C++ classes, the attribute marks non-inlined member - functions and static data members as imports. However, the - attribute is ignored for virtual methods to allow creation of - vtables using thunks. - - On the SH Symbian OS target the 'dllimport' attribute also has - another affect--it can cause the vtable and run-time type - information for a class to be exported. This happens when the - class has a dllimported constructor or a non-inline, non-pure - virtual function and, for either of those two conditions, the class - also has an inline constructor or destructor and has a key function - that is defined in the current translation unit. - - For Microsoft Windows targets the use of the 'dllimport' attribute - on functions is not necessary, but provides a small performance - benefit by eliminating a thunk in the DLL. The use of the - 'dllimport' attribute on imported variables was required on older - versions of the GNU linker, but can now be avoided by passing the - '--enable-auto-import' switch to the GNU linker. As with - functions, using the attribute for a variable eliminates a thunk in - the DLL. - - One drawback to using this attribute is that a pointer to a - _variable_ marked as 'dllimport' cannot be used as a constant - address. However, a pointer to a _function_ with the 'dllimport' - attribute can be used as a constant initializer; in this case, the - address of a stub function in the import lib is referenced. On - Microsoft Windows targets, the attribute can be disabled for - functions by setting the '-mnop-fun-dllimport' flag. - -'eightbit_data' - Use this attribute on the H8/300, H8/300H, and H8S to indicate that - the specified variable should be placed into the eight-bit data - section. The compiler generates more efficient code for certain - operations on data in the eight-bit data area. Note the eight-bit - data area is limited to 256 bytes of data. - - You must use GAS and GLD from GNU binutils version 2.7 or later for - this attribute to work correctly. - -'exception' - Use this attribute on the NDS32 target to indicate that the - specified function is an exception handler. The compiler will - generate corresponding sections for use in an exception handler. - -'exception_handler' - Use this attribute on the Blackfin to indicate that the specified - function is an exception handler. The compiler generates function - entry and exit sequences suitable for use in an exception handler - when this attribute is present. - -'externally_visible' - This attribute, attached to a global variable or function, - nullifies the effect of the '-fwhole-program' command-line option, - so the object remains visible outside the current compilation unit. - - If '-fwhole-program' is used together with '-flto' and 'gold' is - used as the linker plugin, 'externally_visible' attributes are - automatically added to functions (not variable yet due to a current - 'gold' issue) that are accessed outside of LTO objects according to - resolution file produced by 'gold'. For other linkers that cannot - generate resolution file, explicit 'externally_visible' attributes - are still necessary. - -'far' - On 68HC11 and 68HC12 the 'far' attribute causes the compiler to use - a calling convention that takes care of switching memory banks when - entering and leaving a function. This calling convention is also - the default when using the '-mlong-calls' option. - - On 68HC12 the compiler uses the 'call' and 'rtc' instructions to - call and return from a function. - - On 68HC11 the compiler generates a sequence of instructions to - invoke a board-specific routine to switch the memory bank and call - the real function. The board-specific routine simulates a 'call'. - At the end of a function, it jumps to a board-specific routine - instead of using 'rts'. The board-specific return routine - simulates the 'rtc'. - - On MeP targets this causes the compiler to use a calling convention - that assumes the called function is too far away for the built-in - addressing modes. - -'fast_interrupt' - Use this attribute on the M32C and RX ports to indicate that the - specified function is a fast interrupt handler. This is just like - the 'interrupt' attribute, except that 'freit' is used to return - instead of 'reit'. - -'fastcall' - On the Intel 386, the 'fastcall' attribute causes the compiler to - pass the first argument (if of integral type) in the register ECX - and the second argument (if of integral type) in the register EDX. - Subsequent and other typed arguments are passed on the stack. The - called function pops the arguments off the stack. If the number of - arguments is variable all arguments are pushed on the stack. - -'thiscall' - On the Intel 386, the 'thiscall' attribute causes the compiler to - pass the first argument (if of integral type) in the register ECX. - Subsequent and other typed arguments are passed on the stack. The - called function pops the arguments off the stack. If the number of - arguments is variable all arguments are pushed on the stack. The - 'thiscall' attribute is intended for C++ non-static member - functions. As a GCC extension, this calling convention can be used - for C functions and for static member methods. - -'format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)' - The 'format' attribute specifies that a function takes 'printf', - 'scanf', 'strftime' or 'strfmon' style arguments that should be - type-checked against a format string. For example, the - declaration: - - extern int - my_printf (void *my_object, const char *my_format, ...) - __attribute__ ((format (printf, 2, 3))); - - causes the compiler to check the arguments in calls to 'my_printf' - for consistency with the 'printf' style format string argument - 'my_format'. - - The parameter ARCHETYPE determines how the format string is - interpreted, and should be 'printf', 'scanf', 'strftime', - 'gnu_printf', 'gnu_scanf', 'gnu_strftime' or 'strfmon'. (You can - also use '__printf__', '__scanf__', '__strftime__' or - '__strfmon__'.) On MinGW targets, 'ms_printf', 'ms_scanf', and - 'ms_strftime' are also present. ARCHETYPE values such as 'printf' - refer to the formats accepted by the system's C runtime library, - while values prefixed with 'gnu_' always refer to the formats - accepted by the GNU C Library. On Microsoft Windows targets, - values prefixed with 'ms_' refer to the formats accepted by the - 'msvcrt.dll' library. The parameter STRING-INDEX specifies which - argument is the format string argument (starting from 1), while - FIRST-TO-CHECK is the number of the first argument to check against - the format string. For functions where the arguments are not - available to be checked (such as 'vprintf'), specify the third - parameter as zero. In this case the compiler only checks the - format string for consistency. For 'strftime' formats, the third - parameter is required to be zero. Since non-static C++ methods - have an implicit 'this' argument, the arguments of such methods - should be counted from two, not one, when giving values for - STRING-INDEX and FIRST-TO-CHECK. - - In the example above, the format string ('my_format') is the second - argument of the function 'my_print', and the arguments to check - start with the third argument, so the correct parameters for the - format attribute are 2 and 3. - - The 'format' attribute allows you to identify your own functions - that take format strings as arguments, so that GCC can check the - calls to these functions for errors. The compiler always (unless - '-ffreestanding' or '-fno-builtin' is used) checks formats for the - standard library functions 'printf', 'fprintf', 'sprintf', 'scanf', - 'fscanf', 'sscanf', 'strftime', 'vprintf', 'vfprintf' and - 'vsprintf' whenever such warnings are requested (using '-Wformat'), - so there is no need to modify the header file 'stdio.h'. In C99 - mode, the functions 'snprintf', 'vsnprintf', 'vscanf', 'vfscanf' - and 'vsscanf' are also checked. Except in strictly conforming C - standard modes, the X/Open function 'strfmon' is also checked as - are 'printf_unlocked' and 'fprintf_unlocked'. *Note Options - Controlling C Dialect: C Dialect Options. - - For Objective-C dialects, 'NSString' (or '__NSString__') is - recognized in the same context. Declarations including these - format attributes are parsed for correct syntax, however the result - of checking of such format strings is not yet defined, and is not - carried out by this version of the compiler. - - The target may also provide additional types of format checks. - *Note Format Checks Specific to Particular Target Machines: Target - Format Checks. - -'format_arg (STRING-INDEX)' - The 'format_arg' attribute specifies that a function takes a format - string for a 'printf', 'scanf', 'strftime' or 'strfmon' style - function and modifies it (for example, to translate it into another - language), so the result can be passed to a 'printf', 'scanf', - 'strftime' or 'strfmon' style function (with the remaining - arguments to the format function the same as they would have been - for the unmodified string). For example, the declaration: - - extern char * - my_dgettext (char *my_domain, const char *my_format) - __attribute__ ((format_arg (2))); - - causes the compiler to check the arguments in calls to a 'printf', - 'scanf', 'strftime' or 'strfmon' type function, whose format string - argument is a call to the 'my_dgettext' function, for consistency - with the format string argument 'my_format'. If the 'format_arg' - attribute had not been specified, all the compiler could tell in - such calls to format functions would be that the format string - argument is not constant; this would generate a warning when - '-Wformat-nonliteral' is used, but the calls could not be checked - without the attribute. - - The parameter STRING-INDEX specifies which argument is the format - string argument (starting from one). Since non-static C++ methods - have an implicit 'this' argument, the arguments of such methods - should be counted from two. - - The 'format_arg' attribute allows you to identify your own - functions that modify format strings, so that GCC can check the - calls to 'printf', 'scanf', 'strftime' or 'strfmon' type function - whose operands are a call to one of your own function. The - compiler always treats 'gettext', 'dgettext', and 'dcgettext' in - this manner except when strict ISO C support is requested by - '-ansi' or an appropriate '-std' option, or '-ffreestanding' or - '-fno-builtin' is used. *Note Options Controlling C Dialect: C - Dialect Options. - - For Objective-C dialects, the 'format-arg' attribute may refer to - an 'NSString' reference for compatibility with the 'format' - attribute above. - - The target may also allow additional types in 'format-arg' - attributes. *Note Format Checks Specific to Particular Target - Machines: Target Format Checks. - -'function_vector' - Use this attribute on the H8/300, H8/300H, and H8S to indicate that - the specified function should be called through the function - vector. Calling a function through the function vector reduces - code size, however; the function vector has a limited size (maximum - 128 entries on the H8/300 and 64 entries on the H8/300H and H8S) - and shares space with the interrupt vector. - - On SH2A targets, this attribute declares a function to be called - using the TBR relative addressing mode. The argument to this - attribute is the entry number of the same function in a vector - table containing all the TBR relative addressable functions. For - correct operation the TBR must be setup accordingly to point to the - start of the vector table before any functions with this attribute - are invoked. Usually a good place to do the initialization is the - startup routine. The TBR relative vector table can have at max 256 - function entries. The jumps to these functions are generated using - a SH2A specific, non delayed branch instruction JSR/N @(disp8,TBR). - You must use GAS and GLD from GNU binutils version 2.7 or later for - this attribute to work correctly. - - Please refer the example of M16C target, to see the use of this - attribute while declaring a function, - - In an application, for a function being called once, this attribute - saves at least 8 bytes of code; and if other successive calls are - being made to the same function, it saves 2 bytes of code per each - of these calls. - - On M16C/M32C targets, the 'function_vector' attribute declares a - special page subroutine call function. Use of this attribute - reduces the code size by 2 bytes for each call generated to the - subroutine. The argument to the attribute is the vector number - entry from the special page vector table which contains the 16 - low-order bits of the subroutine's entry address. Each vector - table has special page number (18 to 255) that is used in 'jsrs' - instructions. Jump addresses of the routines are generated by - adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of - M32C targets), to the 2-byte addresses set in the vector table. - Therefore you need to ensure that all the special page vector - routines should get mapped within the address range 0x0F0000 to - 0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C). - - In the following example 2 bytes are saved for each call to - function 'foo'. - - void foo (void) __attribute__((function_vector(0x18))); - void foo (void) - { - } - - void bar (void) - { - foo(); - } - - If functions are defined in one file and are called in another - file, then be sure to write this declaration in both files. - - This attribute is ignored for R8C target. - -'ifunc ("RESOLVER")' - The 'ifunc' attribute is used to mark a function as an indirect - function using the STT_GNU_IFUNC symbol type extension to the ELF - standard. This allows the resolution of the symbol value to be - determined dynamically at load time, and an optimized version of - the routine can be selected for the particular processor or other - system characteristics determined then. To use this attribute, - first define the implementation functions available, and a resolver - function that returns a pointer to the selected implementation - function. The implementation functions' declarations must match - the API of the function being implemented, the resolver's - declaration is be a function returning pointer to void function - returning void: - - void *my_memcpy (void *dst, const void *src, size_t len) - { - ... - } - - static void (*resolve_memcpy (void)) (void) - { - return my_memcpy; // we'll just always select this routine - } - - The exported header file declaring the function the user calls - would contain: - - extern void *memcpy (void *, const void *, size_t); - - allowing the user to call this as a regular function, unaware of - the implementation. Finally, the indirect function needs to be - defined in the same translation unit as the resolver function: - - void *memcpy (void *, const void *, size_t) - __attribute__ ((ifunc ("resolve_memcpy"))); - - Indirect functions cannot be weak, and require a recent binutils - (at least version 2.20.1), and GNU C library (at least version - 2.11.1). - -'interrupt' - Use this attribute on the ARC, ARM, AVR, CR16, Epiphany, M32C, - M32R/D, m68k, MeP, MIPS, MSP430, RL78, RX and Xstormy16 ports to - indicate that the specified function is an interrupt handler. The - compiler generates function entry and exit sequences suitable for - use in an interrupt handler when this attribute is present. With - Epiphany targets it may also generate a special section with code - to initialize the interrupt vector table. - - Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S, - MicroBlaze, and SH processors can be specified via the - 'interrupt_handler' attribute. - - Note, on the ARC, you must specify the kind of interrupt to be - handled in a parameter to the interrupt attribute like this: - - void f () __attribute__ ((interrupt ("ilink1"))); - - Permissible values for this parameter are: 'ilink1' and 'ilink2'. - - Note, on the AVR, the hardware globally disables interrupts when an - interrupt is executed. The first instruction of an interrupt - handler declared with this attribute is a 'SEI' instruction to - re-enable interrupts. See also the 'signal' function attribute - that does not insert a 'SEI' instruction. If both 'signal' and - 'interrupt' are specified for the same function, 'signal' is - silently ignored. - - Note, for the ARM, you can specify the kind of interrupt to be - handled by adding an optional parameter to the interrupt attribute - like this: - - void f () __attribute__ ((interrupt ("IRQ"))); - - Permissible values for this parameter are: 'IRQ', 'FIQ', 'SWI', - 'ABORT' and 'UNDEF'. - - On ARMv7-M the interrupt type is ignored, and the attribute means - the function may be called with a word-aligned stack pointer. - - Note, for the MSP430 you can provide an argument to the interrupt - attribute which specifies a name or number. If the argument is a - number it indicates the slot in the interrupt vector table (0 - 31) - to which this handler should be assigned. If the argument is a - name it is treated as a symbolic name for the vector slot. These - names should match up with appropriate entries in the linker - script. By default the names 'watchdog' for vector 26, 'nmi' for - vector 30 and 'reset' for vector 31 are recognised. - - You can also use the following function attributes to modify how - normal functions interact with interrupt functions: - - 'critical' - Critical functions disable interrupts upon entry and restore - the previous interrupt state upon exit. Critical functions - cannot also have the 'naked' or 'reentrant' attributes. They - can have the 'interrupt' attribute. - - 'reentrant' - Reentrant functions disable interrupts upon entry and enable - them upon exit. Reentrant functions cannot also have the - 'naked' or 'critical' attributes. They can have the - 'interrupt' attribute. - - 'wakeup' - This attribute only applies to interrupt functions. It is - silently ignored if applied to a non-interrupt function. A - wakeup interrupt function will rouse the processor from any - low-power state that it might be in when the function exits. - - On Epiphany targets one or more optional parameters can be added - like this: - - void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler (); - - Permissible values for these parameters are: 'reset', - 'software_exception', 'page_miss', 'timer0', 'timer1', 'message', - 'dma0', 'dma1', 'wand' and 'swi'. Multiple parameters indicate - that multiple entries in the interrupt vector table should be - initialized for this function, i.e. for each parameter NAME, a jump - to the function is emitted in the section ivt_entry_NAME. The - parameter(s) may be omitted entirely, in which case no interrupt - vector table entry is provided. - - Note, on Epiphany targets, interrupts are enabled inside the - function unless the 'disinterrupt' attribute is also specified. - - On Epiphany targets, you can also use the following attribute to - modify the behavior of an interrupt handler: - 'forwarder_section' - The interrupt handler may be in external memory which cannot - be reached by a branch instruction, so generate a local memory - trampoline to transfer control. The single parameter - identifies the section where the trampoline is placed. - - The following examples are all valid uses of these attributes on - Epiphany targets: - void __attribute__ ((interrupt)) universal_handler (); - void __attribute__ ((interrupt ("dma1"))) dma1_handler (); - void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler (); - void __attribute__ ((interrupt ("timer0"), disinterrupt)) - fast_timer_handler (); - void __attribute__ ((interrupt ("dma0, dma1"), forwarder_section ("tramp"))) - external_dma_handler (); - - On MIPS targets, you can use the following attributes to modify the - behavior of an interrupt handler: - 'use_shadow_register_set' - Assume that the handler uses a shadow register set, instead of - the main general-purpose registers. - - 'keep_interrupts_masked' - Keep interrupts masked for the whole function. Without this - attribute, GCC tries to reenable interrupts for as much of the - function as it can. - - 'use_debug_exception_return' - Return using the 'deret' instruction. Interrupt handlers that - don't have this attribute return using 'eret' instead. - - You can use any combination of these attributes, as shown below: - void __attribute__ ((interrupt)) v0 (); - void __attribute__ ((interrupt, use_shadow_register_set)) v1 (); - void __attribute__ ((interrupt, keep_interrupts_masked)) v2 (); - void __attribute__ ((interrupt, use_debug_exception_return)) v3 (); - void __attribute__ ((interrupt, use_shadow_register_set, - keep_interrupts_masked)) v4 (); - void __attribute__ ((interrupt, use_shadow_register_set, - use_debug_exception_return)) v5 (); - void __attribute__ ((interrupt, keep_interrupts_masked, - use_debug_exception_return)) v6 (); - void __attribute__ ((interrupt, use_shadow_register_set, - keep_interrupts_masked, - use_debug_exception_return)) v7 (); - - On NDS32 target, this attribute is to indicate that the specified - function is an interrupt handler. The compiler will generate - corresponding sections for use in an interrupt handler. You can - use the following attributes to modify the behavior: - 'nested' - This interrupt service routine is interruptible. - 'not_nested' - This interrupt service routine is not interruptible. - 'nested_ready' - This interrupt service routine is interruptible after - 'PSW.GIE' (global interrupt enable) is set. This allows - interrupt service routine to finish some short critical code - before enabling interrupts. - 'save_all' - The system will help save all registers into stack before - entering interrupt handler. - 'partial_save' - The system will help save caller registers into stack before - entering interrupt handler. - - On RL78, use 'brk_interrupt' instead of 'interrupt' for handlers - intended to be used with the 'BRK' opcode (i.e. those that must end - with 'RETB' instead of 'RETI'). - -'interrupt_handler' - Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, and - SH to indicate that the specified function is an interrupt handler. - The compiler generates function entry and exit sequences suitable - for use in an interrupt handler when this attribute is present. - -'interrupt_thread' - Use this attribute on fido, a subarchitecture of the m68k, to - indicate that the specified function is an interrupt handler that - is designed to run as a thread. The compiler omits generate - prologue/epilogue sequences and replaces the return instruction - with a 'sleep' instruction. This attribute is available only on - fido. - -'isr' - Use this attribute on ARM to write Interrupt Service Routines. - This is an alias to the 'interrupt' attribute above. - -'kspisusp' - When used together with 'interrupt_handler', 'exception_handler' or - 'nmi_handler', code is generated to load the stack pointer from the - USP register in the function prologue. - -'l1_text' - This attribute specifies a function to be placed into L1 - Instruction SRAM. The function is put into a specific section - named '.l1.text'. With '-mfdpic', function calls with a such - function as the callee or caller uses inlined PLT. - -'l2' - On the Blackfin, this attribute specifies a function to be placed - into L2 SRAM. The function is put into a specific section named - '.l1.text'. With '-mfdpic', callers of such functions use an - inlined PLT. - -'leaf' - Calls to external functions with this attribute must return to the - current compilation unit only by return or by exception handling. - In particular, leaf functions are not allowed to call callback - function passed to it from the current compilation unit or directly - call functions exported by the unit or longjmp into the unit. Leaf - function might still call functions from other compilation units - and thus they are not necessarily leaf in the sense that they - contain no function calls at all. - - The attribute is intended for library functions to improve dataflow - analysis. The compiler takes the hint that any data not escaping - the current compilation unit can not be used or modified by the - leaf function. For example, the 'sin' function is a leaf function, - but 'qsort' is not. - - Note that leaf functions might invoke signals and signal handlers - might be defined in the current compilation unit and use static - variables. The only compliant way to write such a signal handler - is to declare such variables 'volatile'. - - The attribute has no effect on functions defined within the current - compilation unit. This is to allow easy merging of multiple - compilation units into one, for example, by using the link-time - optimization. For this reason the attribute is not allowed on - types to annotate indirect calls. - -'long_call/medium_call/short_call' - These attributes specify how a particular function is called on - ARC, ARM and Epiphany - with 'medium_call' being specific to ARC. - These attributes override the '-mlong-calls' (*note ARM Options:: - and *note ARC Options::) and '-mmedium-calls' (*note ARC Options::) - command-line switches and '#pragma long_calls' settings. For ARM, - the 'long_call' attribute indicates that the function might be far - away from the call site and require a different (more expensive) - calling sequence. The 'short_call' attribute always places the - offset to the function from the call site into the 'BL' instruction - directly. - - For ARC, a function marked with the 'long_call' attribute is always - called using register-indirect jump-and-link instructions, thereby - enabling the called function to be placed anywhere within the - 32-bit address space. A function marked with the 'medium_call' - attribute will always be close enough to be called with an - unconditional branch-and-link instruction, which has a 25-bit - offset from the call site. A function marked with the 'short_call' - attribute will always be close enough to be called with a - conditional branch-and-link instruction, which has a 21-bit offset - from the call site. - -'longcall/shortcall' - On the Blackfin, RS/6000 and PowerPC, the 'longcall' attribute - indicates that the function might be far away from the call site - and require a different (more expensive) calling sequence. The - 'shortcall' attribute indicates that the function is always close - enough for the shorter calling sequence to be used. These - attributes override both the '-mlongcall' switch and, on the - RS/6000 and PowerPC, the '#pragma longcall' setting. - - *Note RS/6000 and PowerPC Options::, for more information on - whether long calls are necessary. - -'long_call/near/far' - These attributes specify how a particular function is called on - MIPS. The attributes override the '-mlong-calls' (*note MIPS - Options::) command-line switch. The 'long_call' and 'far' - attributes are synonyms, and cause the compiler to always call the - function by first loading its address into a register, and then - using the contents of that register. The 'near' attribute has the - opposite effect; it specifies that non-PIC calls should be made - using the more efficient 'jal' instruction. - -'malloc' - The 'malloc' attribute is used to tell the compiler that a function - may be treated as if any non-'NULL' pointer it returns cannot alias - any other pointer valid when the function returns and that the - memory has undefined content. This often improves optimization. - Standard functions with this property include 'malloc' and - 'calloc'. 'realloc'-like functions do not have this property as - the memory pointed to does not have undefined content. - -'mips16/nomips16' - - On MIPS targets, you can use the 'mips16' and 'nomips16' function - attributes to locally select or turn off MIPS16 code generation. A - function with the 'mips16' attribute is emitted as MIPS16 code, - while MIPS16 code generation is disabled for functions with the - 'nomips16' attribute. These attributes override the '-mips16' and - '-mno-mips16' options on the command line (*note MIPS Options::). - - When compiling files containing mixed MIPS16 and non-MIPS16 code, - the preprocessor symbol '__mips16' reflects the setting on the - command line, not that within individual functions. Mixed MIPS16 - and non-MIPS16 code may interact badly with some GCC extensions - such as '__builtin_apply' (*note Constructing Calls::). - -'micromips/nomicromips' - - On MIPS targets, you can use the 'micromips' and 'nomicromips' - function attributes to locally select or turn off microMIPS code - generation. A function with the 'micromips' attribute is emitted - as microMIPS code, while microMIPS code generation is disabled for - functions with the 'nomicromips' attribute. These attributes - override the '-mmicromips' and '-mno-micromips' options on the - command line (*note MIPS Options::). - - When compiling files containing mixed microMIPS and non-microMIPS - code, the preprocessor symbol '__mips_micromips' reflects the - setting on the command line, not that within individual functions. - Mixed microMIPS and non-microMIPS code may interact badly with some - GCC extensions such as '__builtin_apply' (*note Constructing - Calls::). - -'model (MODEL-NAME)' - - On the M32R/D, use this attribute to set the addressability of an - object, and of the code generated for a function. The identifier - MODEL-NAME is one of 'small', 'medium', or 'large', representing - each of the code models. - - Small model objects live in the lower 16MB of memory (so that their - addresses can be loaded with the 'ld24' instruction), and are - callable with the 'bl' instruction. - - Medium model objects may live anywhere in the 32-bit address space - (the compiler generates 'seth/add3' instructions to load their - addresses), and are callable with the 'bl' instruction. - - Large model objects may live anywhere in the 32-bit address space - (the compiler generates 'seth/add3' instructions to load their - addresses), and may not be reachable with the 'bl' instruction (the - compiler generates the much slower 'seth/add3/jl' instruction - sequence). - - On IA-64, use this attribute to set the addressability of an - object. At present, the only supported identifier for MODEL-NAME - is 'small', indicating addressability via "small" (22-bit) - addresses (so that their addresses can be loaded with the 'addl' - instruction). Caveat: such addressing is by definition not - position independent and hence this attribute must not be used for - objects defined by shared libraries. - -'ms_abi/sysv_abi' - - On 32-bit and 64-bit (i?86|x86_64)-*-* targets, you can use an ABI - attribute to indicate which calling convention should be used for a - function. The 'ms_abi' attribute tells the compiler to use the - Microsoft ABI, while the 'sysv_abi' attribute tells the compiler to - use the ABI used on GNU/Linux and other systems. The default is to - use the Microsoft ABI when targeting Windows. On all other - systems, the default is the x86/AMD ABI. - - Note, the 'ms_abi' attribute for Microsoft Windows 64-bit targets - currently requires the '-maccumulate-outgoing-args' option. - -'callee_pop_aggregate_return (NUMBER)' - - On 32-bit i?86-*-* targets, you can use this attribute to control - how aggregates are returned in memory. If the caller is - responsible for popping the hidden pointer together with the rest - of the arguments, specify NUMBER equal to zero. If callee is - responsible for popping the hidden pointer, specify NUMBER equal to - one. - - The default i386 ABI assumes that the callee pops the stack for - hidden pointer. However, on 32-bit i386 Microsoft Windows targets, - the compiler assumes that the caller pops the stack for hidden - pointer. - -'ms_hook_prologue' - - On 32-bit i[34567]86-*-* targets and 64-bit x86_64-*-* targets, you - can use this function attribute to make GCC generate the - "hot-patching" function prologue used in Win32 API functions in - Microsoft Windows XP Service Pack 2 and newer. - -'hotpatch [(PROLOGUE-HALFWORDS)]' - - On S/390 System z targets, you can use this function attribute to - make GCC generate a "hot-patching" function prologue. The - 'hotpatch' has no effect on funtions that are explicitly inline. - If the '-mhotpatch' or '-mno-hotpatch' command-line option is used - at the same time, the 'hotpatch' attribute takes precedence. If an - argument is given, the maximum allowed value is 1000000. - -'naked' - Use this attribute on the ARM, AVR, MCORE, MSP430, NDS32, RL78, RX - and SPU ports to indicate that the specified function does not need - prologue/epilogue sequences generated by the compiler. It is up to - the programmer to provide these sequences. The only statements - that can be safely included in naked functions are 'asm' statements - that do not have operands. All other statements, including - declarations of local variables, 'if' statements, and so forth, - should be avoided. Naked functions should be used to implement the - body of an assembly function, while allowing the compiler to - construct the requisite function declaration for the assembler. - -'near' - On 68HC11 and 68HC12 the 'near' attribute causes the compiler to - use the normal calling convention based on 'jsr' and 'rts'. This - attribute can be used to cancel the effect of the '-mlong-calls' - option. - - On MeP targets this attribute causes the compiler to assume the - called function is close enough to use the normal calling - convention, overriding the '-mtf' command-line option. - -'nesting' - Use this attribute together with 'interrupt_handler', - 'exception_handler' or 'nmi_handler' to indicate that the function - entry code should enable nested interrupts or exceptions. - -'nmi_handler' - Use this attribute on the Blackfin to indicate that the specified - function is an NMI handler. The compiler generates function entry - and exit sequences suitable for use in an NMI handler when this - attribute is present. - -'nocompression' - On MIPS targets, you can use the 'nocompression' function attribute - to locally turn off MIPS16 and microMIPS code generation. This - attribute overrides the '-mips16' and '-mmicromips' options on the - command line (*note MIPS Options::). - -'no_instrument_function' - If '-finstrument-functions' is given, profiling function calls are - generated at entry and exit of most user-compiled functions. - Functions with this attribute are not so instrumented. - -'no_split_stack' - If '-fsplit-stack' is given, functions have a small prologue which - decides whether to split the stack. Functions with the - 'no_split_stack' attribute do not have that prologue, and thus may - run with only a small amount of stack space available. - -'noinline' - This function attribute prevents a function from being considered - for inlining. If the function does not have side-effects, there - are optimizations other than inlining that cause function calls to - be optimized away, although the function call is live. To keep - such calls from being optimized away, put - asm (""); - - (*note Extended Asm::) in the called function, to serve as a - special side-effect. - -'noclone' - This function attribute prevents a function from being considered - for cloning--a mechanism that produces specialized copies of - functions and which is (currently) performed by interprocedural - constant propagation. - -'nonnull (ARG-INDEX, ...)' - The 'nonnull' attribute specifies that some function parameters - should be non-null pointers. For instance, the declaration: - - extern void * - my_memcpy (void *dest, const void *src, size_t len) - __attribute__((nonnull (1, 2))); - - causes the compiler to check that, in calls to 'my_memcpy', - arguments DEST and SRC are non-null. If the compiler determines - that a null pointer is passed in an argument slot marked as - non-null, and the '-Wnonnull' option is enabled, a warning is - issued. The compiler may also choose to make optimizations based - on the knowledge that certain function arguments will never be - null. - - If no argument index list is given to the 'nonnull' attribute, all - pointer arguments are marked as non-null. To illustrate, the - following declaration is equivalent to the previous example: - - extern void * - my_memcpy (void *dest, const void *src, size_t len) - __attribute__((nonnull)); - -'returns_nonnull' - The 'returns_nonnull' attribute specifies that the function return - value should be a non-null pointer. For instance, the declaration: - - extern void * - mymalloc (size_t len) __attribute__((returns_nonnull)); - - lets the compiler optimize callers based on the knowledge that the - return value will never be null. - -'noreturn' - A few standard library functions, such as 'abort' and 'exit', - cannot return. GCC knows this automatically. Some programs define - their own functions that never return. You can declare them - 'noreturn' to tell the compiler this fact. For example, - - void fatal () __attribute__ ((noreturn)); - - void - fatal (/* ... */) - { - /* ... */ /* Print error message. */ /* ... */ - exit (1); - } - - The 'noreturn' keyword tells the compiler to assume that 'fatal' - cannot return. It can then optimize without regard to what would - happen if 'fatal' ever did return. This makes slightly better - code. More importantly, it helps avoid spurious warnings of - uninitialized variables. - - The 'noreturn' keyword does not affect the exceptional path when - that applies: a 'noreturn'-marked function may still return to the - caller by throwing an exception or calling 'longjmp'. - - Do not assume that registers saved by the calling function are - restored before calling the 'noreturn' function. - - It does not make sense for a 'noreturn' function to have a return - type other than 'void'. - - The attribute 'noreturn' is not implemented in GCC versions earlier - than 2.5. An alternative way to declare that a function does not - return, which works in the current version and in some older - versions, is as follows: - - typedef void voidfn (); - - volatile voidfn fatal; - - This approach does not work in GNU C++. - -'nothrow' - The 'nothrow' attribute is used to inform the compiler that a - function cannot throw an exception. For example, most functions in - the standard C library can be guaranteed not to throw an exception - with the notable exceptions of 'qsort' and 'bsearch' that take - function pointer arguments. The 'nothrow' attribute is not - implemented in GCC versions earlier than 3.3. - -'nosave_low_regs' - Use this attribute on SH targets to indicate that an - 'interrupt_handler' function should not save and restore registers - R0..R7. This can be used on SH3* and SH4* targets that have a - second R0..R7 register bank for non-reentrant interrupt handlers. - -'optimize' - The 'optimize' attribute is used to specify that a function is to - be compiled with different optimization options than specified on - the command line. Arguments can either be numbers or strings. - Numbers are assumed to be an optimization level. Strings that - begin with 'O' are assumed to be an optimization option, while - other options are assumed to be used with a '-f' prefix. You can - also use the '#pragma GCC optimize' pragma to set the optimization - options that affect more than one function. *Note Function - Specific Option Pragmas::, for details about the '#pragma GCC - optimize' pragma. - - This can be used for instance to have frequently-executed functions - compiled with more aggressive optimization options that produce - faster and larger code, while other functions can be compiled with - less aggressive options. - -'OS_main/OS_task' - On AVR, functions with the 'OS_main' or 'OS_task' attribute do not - save/restore any call-saved register in their prologue/epilogue. - - The 'OS_main' attribute can be used when there _is guarantee_ that - interrupts are disabled at the time when the function is entered. - This saves resources when the stack pointer has to be changed to - set up a frame for local variables. - - The 'OS_task' attribute can be used when there is _no guarantee_ - that interrupts are disabled at that time when the function is - entered like for, e.g. task functions in a multi-threading - operating system. In that case, changing the stack pointer - register is guarded by save/clear/restore of the global interrupt - enable flag. - - The differences to the 'naked' function attribute are: - * 'naked' functions do not have a return instruction whereas - 'OS_main' and 'OS_task' functions have a 'RET' or 'RETI' - return instruction. - * 'naked' functions do not set up a frame for local variables or - a frame pointer whereas 'OS_main' and 'OS_task' do this as - needed. - -'pcs' - - The 'pcs' attribute can be used to control the calling convention - used for a function on ARM. The attribute takes an argument that - specifies the calling convention to use. - - When compiling using the AAPCS ABI (or a variant of it) then valid - values for the argument are '"aapcs"' and '"aapcs-vfp"'. In order - to use a variant other than '"aapcs"' then the compiler must be - permitted to use the appropriate co-processor registers (i.e., the - VFP registers must be available in order to use '"aapcs-vfp"'). - For example, - - /* Argument passed in r0, and result returned in r0+r1. */ - double f2d (float) __attribute__((pcs("aapcs"))); - - Variadic functions always use the '"aapcs"' calling convention and - the compiler rejects attempts to specify an alternative. - -'pure' - Many functions have no effects except the return value and their - return value depends only on the parameters and/or global - variables. Such a function can be subject to common subexpression - elimination and loop optimization just as an arithmetic operator - would be. These functions should be declared with the attribute - 'pure'. For example, - - int square (int) __attribute__ ((pure)); - - says that the hypothetical function 'square' is safe to call fewer - times than the program says. - - Some of common examples of pure functions are 'strlen' or 'memcmp'. - Interesting non-pure functions are functions with infinite loops or - those depending on volatile memory or other system resource, that - may change between two consecutive calls (such as 'feof' in a - multithreading environment). - - The attribute 'pure' is not implemented in GCC versions earlier - than 2.96. - -'hot' - The 'hot' attribute on a function is used to inform the compiler - that the function is a hot spot of the compiled program. The - function is optimized more aggressively and on many target it is - placed into special subsection of the text section so all hot - functions appears close together improving locality. - - When profile feedback is available, via '-fprofile-use', hot - functions are automatically detected and this attribute is ignored. - - The 'hot' attribute on functions is not implemented in GCC versions - earlier than 4.3. - - The 'hot' attribute on a label is used to inform the compiler that - path following the label are more likely than paths that are not so - annotated. This attribute is used in cases where - '__builtin_expect' cannot be used, for instance with computed goto - or 'asm goto'. - - The 'hot' attribute on labels is not implemented in GCC versions - earlier than 4.8. - -'cold' - The 'cold' attribute on functions is used to inform the compiler - that the function is unlikely to be executed. The function is - optimized for size rather than speed and on many targets it is - placed into special subsection of the text section so all cold - functions appears close together improving code locality of - non-cold parts of program. The paths leading to call of cold - functions within code are marked as unlikely by the branch - prediction mechanism. It is thus useful to mark functions used to - handle unlikely conditions, such as 'perror', as cold to improve - optimization of hot functions that do call marked functions in rare - occasions. - - When profile feedback is available, via '-fprofile-use', cold - functions are automatically detected and this attribute is ignored. - - The 'cold' attribute on functions is not implemented in GCC - versions earlier than 4.3. - - The 'cold' attribute on labels is used to inform the compiler that - the path following the label is unlikely to be executed. This - attribute is used in cases where '__builtin_expect' cannot be used, - for instance with computed goto or 'asm goto'. - - The 'cold' attribute on labels is not implemented in GCC versions - earlier than 4.8. - -'no_sanitize_address' -'no_address_safety_analysis' - The 'no_sanitize_address' attribute on functions is used to inform - the compiler that it should not instrument memory accesses in the - function when compiling with the '-fsanitize=address' option. The - 'no_address_safety_analysis' is a deprecated alias of the - 'no_sanitize_address' attribute, new code should use - 'no_sanitize_address'. - -'no_sanitize_undefined' - The 'no_sanitize_undefined' attribute on functions is used to - inform the compiler that it should not check for undefined behavior - in the function when compiling with the '-fsanitize=undefined' - option. - -'regparm (NUMBER)' - On the Intel 386, the 'regparm' attribute causes the compiler to - pass arguments number one to NUMBER if they are of integral type in - registers EAX, EDX, and ECX instead of on the stack. Functions - that take a variable number of arguments continue to be passed all - of their arguments on the stack. - - Beware that on some ELF systems this attribute is unsuitable for - global functions in shared libraries with lazy binding (which is - the default). Lazy binding sends the first call via resolving code - in the loader, which might assume EAX, EDX and ECX can be - clobbered, as per the standard calling conventions. Solaris 8 is - affected by this. Systems with the GNU C Library version 2.1 or - higher and FreeBSD are believed to be safe since the loaders there - save EAX, EDX and ECX. (Lazy binding can be disabled with the - linker or the loader if desired, to avoid the problem.) - -'reset' - Use this attribute on the NDS32 target to indicate that the - specified function is a reset handler. The compiler will generate - corresponding sections for use in a reset handler. You can use the - following attributes to provide extra exception handling: - 'nmi' - Provide a user-defined function to handle NMI exception. - 'warm' - Provide a user-defined function to handle warm reset - exception. - -'sseregparm' - On the Intel 386 with SSE support, the 'sseregparm' attribute - causes the compiler to pass up to 3 floating-point arguments in SSE - registers instead of on the stack. Functions that take a variable - number of arguments continue to pass all of their floating-point - arguments on the stack. - -'force_align_arg_pointer' - On the Intel x86, the 'force_align_arg_pointer' attribute may be - applied to individual function definitions, generating an alternate - prologue and epilogue that realigns the run-time stack if - necessary. This supports mixing legacy codes that run with a - 4-byte aligned stack with modern codes that keep a 16-byte stack - for SSE compatibility. - -'renesas' - On SH targets this attribute specifies that the function or struct - follows the Renesas ABI. - -'resbank' - On the SH2A target, this attribute enables the high-speed register - saving and restoration using a register bank for - 'interrupt_handler' routines. Saving to the bank is performed - automatically after the CPU accepts an interrupt that uses a - register bank. - - The nineteen 32-bit registers comprising general register R0 to - R14, control register GBR, and system registers MACH, MACL, and PR - and the vector table address offset are saved into a register bank. - Register banks are stacked in first-in last-out (FILO) sequence. - Restoration from the bank is executed by issuing a RESBANK - instruction. - -'returns_twice' - The 'returns_twice' attribute tells the compiler that a function - may return more than one time. The compiler ensures that all - registers are dead before calling such a function and emits a - warning about the variables that may be clobbered after the second - return from the function. Examples of such functions are 'setjmp' - and 'vfork'. The 'longjmp'-like counterpart of such function, if - any, might need to be marked with the 'noreturn' attribute. - -'saveall' - Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to - indicate that all registers except the stack pointer should be - saved in the prologue regardless of whether they are used or not. - -'save_volatiles' - Use this attribute on the MicroBlaze to indicate that the function - is an interrupt handler. All volatile registers (in addition to - non-volatile registers) are saved in the function prologue. If the - function is a leaf function, only volatiles used by the function - are saved. A normal function return is generated instead of a - return from interrupt. - -'section ("SECTION-NAME")' - Normally, the compiler places the code it generates in the 'text' - section. Sometimes, however, you need additional sections, or you - need certain particular functions to appear in special sections. - The 'section' attribute specifies that a function lives in a - particular section. For example, the declaration: - - extern void foobar (void) __attribute__ ((section ("bar"))); - - puts the function 'foobar' in the 'bar' section. - - Some file formats do not support arbitrary sections so the - 'section' attribute is not available on all platforms. If you need - to map the entire contents of a module to a particular section, - consider using the facilities of the linker instead. - -'sentinel' - This function attribute ensures that a parameter in a function call - is an explicit 'NULL'. The attribute is only valid on variadic - functions. By default, the sentinel is located at position zero, - the last parameter of the function call. If an optional integer - position argument P is supplied to the attribute, the sentinel must - be located at position P counting backwards from the end of the - argument list. - - __attribute__ ((sentinel)) - is equivalent to - __attribute__ ((sentinel(0))) - - The attribute is automatically set with a position of 0 for the - built-in functions 'execl' and 'execlp'. The built-in function - 'execle' has the attribute set with a position of 1. - - A valid 'NULL' in this context is defined as zero with any pointer - type. If your system defines the 'NULL' macro with an integer type - then you need to add an explicit cast. GCC replaces 'stddef.h' - with a copy that redefines NULL appropriately. - - The warnings for missing or incorrect sentinels are enabled with - '-Wformat'. - -'short_call' - See 'long_call/short_call'. - -'shortcall' - See 'longcall/shortcall'. - -'signal' - Use this attribute on the AVR to indicate that the specified - function is an interrupt handler. The compiler generates function - entry and exit sequences suitable for use in an interrupt handler - when this attribute is present. - - See also the 'interrupt' function attribute. - - The AVR hardware globally disables interrupts when an interrupt is - executed. Interrupt handler functions defined with the 'signal' - attribute do not re-enable interrupts. It is save to enable - interrupts in a 'signal' handler. This "save" only applies to the - code generated by the compiler and not to the IRQ layout of the - application which is responsibility of the application. - - If both 'signal' and 'interrupt' are specified for the same - function, 'signal' is silently ignored. - -'sp_switch' - Use this attribute on the SH to indicate an 'interrupt_handler' - function should switch to an alternate stack. It expects a string - argument that names a global variable holding the address of the - alternate stack. - - void *alt_stack; - void f () __attribute__ ((interrupt_handler, - sp_switch ("alt_stack"))); - -'stdcall' - On the Intel 386, the 'stdcall' attribute causes the compiler to - assume that the called function pops off the stack space used to - pass arguments, unless it takes a variable number of arguments. - -'syscall_linkage' - This attribute is used to modify the IA-64 calling convention by - marking all input registers as live at all function exits. This - makes it possible to restart a system call after an interrupt - without having to save/restore the input registers. This also - prevents kernel data from leaking into application code. - -'target' - The 'target' attribute is used to specify that a function is to be - compiled with different target options than specified on the - command line. This can be used for instance to have functions - compiled with a different ISA (instruction set architecture) than - the default. You can also use the '#pragma GCC target' pragma to - set more than one function to be compiled with specific target - options. *Note Function Specific Option Pragmas::, for details - about the '#pragma GCC target' pragma. - - For instance on a 386, you could compile one function with - 'target("sse4.1,arch=core2")' and another with - 'target("sse4a,arch=amdfam10")'. This is equivalent to compiling - the first function with '-msse4.1' and '-march=core2' options, and - the second function with '-msse4a' and '-march=amdfam10' options. - It is up to the user to make sure that a function is only invoked - on a machine that supports the particular ISA it is compiled for - (for example by using 'cpuid' on 386 to determine what feature bits - and architecture family are used). - - int core2_func (void) __attribute__ ((__target__ ("arch=core2"))); - int sse3_func (void) __attribute__ ((__target__ ("sse3"))); - - You can either use multiple strings to specify multiple options, or - separate the options with a comma (','). - - The 'target' attribute is presently implemented for i386/x86_64, - PowerPC, and Nios II targets only. The options supported are - specific to each target. - - On the 386, the following options are allowed: - - 'abm' - 'no-abm' - Enable/disable the generation of the advanced bit - instructions. - - 'aes' - 'no-aes' - Enable/disable the generation of the AES instructions. - - 'default' - *Note Function Multiversioning::, where it is used to specify - the default function version. - - 'mmx' - 'no-mmx' - Enable/disable the generation of the MMX instructions. - - 'pclmul' - 'no-pclmul' - Enable/disable the generation of the PCLMUL instructions. - - 'popcnt' - 'no-popcnt' - Enable/disable the generation of the POPCNT instruction. - - 'sse' - 'no-sse' - Enable/disable the generation of the SSE instructions. - - 'sse2' - 'no-sse2' - Enable/disable the generation of the SSE2 instructions. - - 'sse3' - 'no-sse3' - Enable/disable the generation of the SSE3 instructions. - - 'sse4' - 'no-sse4' - Enable/disable the generation of the SSE4 instructions (both - SSE4.1 and SSE4.2). - - 'sse4.1' - 'no-sse4.1' - Enable/disable the generation of the sse4.1 instructions. - - 'sse4.2' - 'no-sse4.2' - Enable/disable the generation of the sse4.2 instructions. - - 'sse4a' - 'no-sse4a' - Enable/disable the generation of the SSE4A instructions. - - 'fma4' - 'no-fma4' - Enable/disable the generation of the FMA4 instructions. - - 'xop' - 'no-xop' - Enable/disable the generation of the XOP instructions. - - 'lwp' - 'no-lwp' - Enable/disable the generation of the LWP instructions. - - 'ssse3' - 'no-ssse3' - Enable/disable the generation of the SSSE3 instructions. - - 'cld' - 'no-cld' - Enable/disable the generation of the CLD before string moves. - - 'fancy-math-387' - 'no-fancy-math-387' - Enable/disable the generation of the 'sin', 'cos', and 'sqrt' - instructions on the 387 floating-point unit. - - 'fused-madd' - 'no-fused-madd' - Enable/disable the generation of the fused multiply/add - instructions. - - 'ieee-fp' - 'no-ieee-fp' - Enable/disable the generation of floating point that depends - on IEEE arithmetic. - - 'inline-all-stringops' - 'no-inline-all-stringops' - Enable/disable inlining of string operations. - - 'inline-stringops-dynamically' - 'no-inline-stringops-dynamically' - Enable/disable the generation of the inline code to do small - string operations and calling the library routines for large - operations. - - 'align-stringops' - 'no-align-stringops' - Do/do not align destination of inlined string operations. - - 'recip' - 'no-recip' - Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and - RSQRTPS instructions followed an additional Newton-Raphson - step instead of doing a floating-point division. - - 'arch=ARCH' - Specify the architecture to generate code for in compiling the - function. - - 'tune=TUNE' - Specify the architecture to tune for in compiling the - function. - - 'fpmath=FPMATH' - Specify which floating-point unit to use. The - 'target("fpmath=sse,387")' option must be specified as - 'target("fpmath=sse+387")' because the comma would separate - different options. - - On the PowerPC, the following options are allowed: - - 'altivec' - 'no-altivec' - Generate code that uses (does not use) AltiVec instructions. - In 32-bit code, you cannot enable AltiVec instructions unless - '-mabi=altivec' is used on the command line. - - 'cmpb' - 'no-cmpb' - Generate code that uses (does not use) the compare bytes - instruction implemented on the POWER6 processor and other - processors that support the PowerPC V2.05 architecture. - - 'dlmzb' - 'no-dlmzb' - Generate code that uses (does not use) the string-search - 'dlmzb' instruction on the IBM 405, 440, 464 and 476 - processors. This instruction is generated by default when - targeting those processors. - - 'fprnd' - 'no-fprnd' - Generate code that uses (does not use) the FP round to integer - instructions implemented on the POWER5+ processor and other - processors that support the PowerPC V2.03 architecture. - - 'hard-dfp' - 'no-hard-dfp' - Generate code that uses (does not use) the decimal - floating-point instructions implemented on some POWER - processors. - - 'isel' - 'no-isel' - Generate code that uses (does not use) ISEL instruction. - - 'mfcrf' - 'no-mfcrf' - Generate code that uses (does not use) the move from condition - register field instruction implemented on the POWER4 processor - and other processors that support the PowerPC V2.01 - architecture. - - 'mfpgpr' - 'no-mfpgpr' - Generate code that uses (does not use) the FP move to/from - general purpose register instructions implemented on the - POWER6X processor and other processors that support the - extended PowerPC V2.05 architecture. - - 'mulhw' - 'no-mulhw' - Generate code that uses (does not use) the half-word multiply - and multiply-accumulate instructions on the IBM 405, 440, 464 - and 476 processors. These instructions are generated by - default when targeting those processors. - - 'multiple' - 'no-multiple' - Generate code that uses (does not use) the load multiple word - instructions and the store multiple word instructions. - - 'update' - 'no-update' - Generate code that uses (does not use) the load or store - instructions that update the base register to the address of - the calculated memory location. - - 'popcntb' - 'no-popcntb' - Generate code that uses (does not use) the popcount and - double-precision FP reciprocal estimate instruction - implemented on the POWER5 processor and other processors that - support the PowerPC V2.02 architecture. - - 'popcntd' - 'no-popcntd' - Generate code that uses (does not use) the popcount - instruction implemented on the POWER7 processor and other - processors that support the PowerPC V2.06 architecture. - - 'powerpc-gfxopt' - 'no-powerpc-gfxopt' - Generate code that uses (does not use) the optional PowerPC - architecture instructions in the Graphics group, including - floating-point select. - - 'powerpc-gpopt' - 'no-powerpc-gpopt' - Generate code that uses (does not use) the optional PowerPC - architecture instructions in the General Purpose group, - including floating-point square root. - - 'recip-precision' - 'no-recip-precision' - Assume (do not assume) that the reciprocal estimate - instructions provide higher-precision estimates than is - mandated by the powerpc ABI. - - 'string' - 'no-string' - Generate code that uses (does not use) the load string - instructions and the store string word instructions to save - multiple registers and do small block moves. - - 'vsx' - 'no-vsx' - Generate code that uses (does not use) vector/scalar (VSX) - instructions, and also enable the use of built-in functions - that allow more direct access to the VSX instruction set. In - 32-bit code, you cannot enable VSX or AltiVec instructions - unless '-mabi=altivec' is used on the command line. - - 'friz' - 'no-friz' - Generate (do not generate) the 'friz' instruction when the - '-funsafe-math-optimizations' option is used to optimize - rounding a floating-point value to 64-bit integer and back to - floating point. The 'friz' instruction does not return the - same value if the floating-point number is too large to fit in - an integer. - - 'avoid-indexed-addresses' - 'no-avoid-indexed-addresses' - Generate code that tries to avoid (not avoid) the use of - indexed load or store instructions. - - 'paired' - 'no-paired' - Generate code that uses (does not use) the generation of - PAIRED simd instructions. - - 'longcall' - 'no-longcall' - Generate code that assumes (does not assume) that all calls - are far away so that a longer more expensive calling sequence - is required. - - 'cpu=CPU' - Specify the architecture to generate code for when compiling - the function. If you select the 'target("cpu=power7")' - attribute when generating 32-bit code, VSX and AltiVec - instructions are not generated unless you use the - '-mabi=altivec' option on the command line. - - 'tune=TUNE' - Specify the architecture to tune for when compiling the - function. If you do not specify the 'target("tune=TUNE")' - attribute and you do specify the 'target("cpu=CPU")' - attribute, compilation tunes for the CPU architecture, and not - the default tuning specified on the command line. - - When compiling for Nios II, the following options are allowed: - - 'custom-INSN=N' - 'no-custom-INSN' - Each 'custom-INSN=N' attribute locally enables use of a custom - instruction with encoding N when generating code that uses - INSN. Similarly, 'no-custom-INSN' locally inhibits use of the - custom instruction INSN. These target attributes correspond - to the '-mcustom-INSN=N' and '-mno-custom-INSN' command-line - options, and support the same set of INSN keywords. *Note - Nios II Options::, for more information. - - 'custom-fpu-cfg=NAME' - This attribute corresponds to the '-mcustom-fpu-cfg=NAME' - command-line option, to select a predefined set of custom - instructions named NAME. *Note Nios II Options::, for more - information. - - On the 386/x86_64 and PowerPC back ends, the inliner does not - inline a function that has different target options than the - caller, unless the callee has a subset of the target options of the - caller. For example a function declared with 'target("sse3")' can - inline a function with 'target("sse2")', since '-msse3' implies - '-msse2'. - -'tiny_data' - Use this attribute on the H8/300H and H8S to indicate that the - specified variable should be placed into the tiny data section. - The compiler generates more efficient code for loads and stores on - data in the tiny data section. Note the tiny data area is limited - to slightly under 32KB of data. - -'trap_exit' - Use this attribute on the SH for an 'interrupt_handler' to return - using 'trapa' instead of 'rte'. This attribute expects an integer - argument specifying the trap number to be used. - -'trapa_handler' - On SH targets this function attribute is similar to - 'interrupt_handler' but it does not save and restore all registers. - -'unused' - This attribute, attached to a function, means that the function is - meant to be possibly unused. GCC does not produce a warning for - this function. - -'used' - This attribute, attached to a function, means that code must be - emitted for the function even if it appears that the function is - not referenced. This is useful, for example, when the function is - referenced only in inline assembly. - - When applied to a member function of a C++ class template, the - attribute also means that the function is instantiated if the class - itself is instantiated. - -'version_id' - This IA-64 HP-UX attribute, attached to a global variable or - function, renames a symbol to contain a version string, thus - allowing for function level versioning. HP-UX system header files - may use function level versioning for some system calls. - - extern int foo () __attribute__((version_id ("20040821"))); - - Calls to FOO are mapped to calls to FOO{20040821}. - -'visibility ("VISIBILITY_TYPE")' - This attribute affects the linkage of the declaration to which it - is attached. There are four supported VISIBILITY_TYPE values: - default, hidden, protected or internal visibility. - - void __attribute__ ((visibility ("protected"))) - f () { /* Do something. */; } - int i __attribute__ ((visibility ("hidden"))); - - The possible values of VISIBILITY_TYPE correspond to the visibility - settings in the ELF gABI. - - "default" - Default visibility is the normal case for the object file - format. This value is available for the visibility attribute - to override other options that may change the assumed - visibility of entities. - - On ELF, default visibility means that the declaration is - visible to other modules and, in shared libraries, means that - the declared entity may be overridden. - - On Darwin, default visibility means that the declaration is - visible to other modules. - - Default visibility corresponds to "external linkage" in the - language. - - "hidden" - Hidden visibility indicates that the entity declared has a new - form of linkage, which we call "hidden linkage". Two - declarations of an object with hidden linkage refer to the - same object if they are in the same shared object. - - "internal" - Internal visibility is like hidden visibility, but with - additional processor specific semantics. Unless otherwise - specified by the psABI, GCC defines internal visibility to - mean that a function is _never_ called from another module. - Compare this with hidden functions which, while they cannot be - referenced directly by other modules, can be referenced - indirectly via function pointers. By indicating that a - function cannot be called from outside the module, GCC may for - instance omit the load of a PIC register since it is known - that the calling function loaded the correct value. - - "protected" - Protected visibility is like default visibility except that it - indicates that references within the defining module bind to - the definition in that module. That is, the declared entity - cannot be overridden by another module. - - All visibilities are supported on many, but not all, ELF targets - (supported when the assembler supports the '.visibility' - pseudo-op). Default visibility is supported everywhere. Hidden - visibility is supported on Darwin targets. - - The visibility attribute should be applied only to declarations - that would otherwise have external linkage. The attribute should - be applied consistently, so that the same entity should not be - declared with different settings of the attribute. - - In C++, the visibility attribute applies to types as well as - functions and objects, because in C++ types have linkage. A class - must not have greater visibility than its non-static data member - types and bases, and class members default to the visibility of - their class. Also, a declaration without explicit visibility is - limited to the visibility of its type. - - In C++, you can mark member functions and static member variables - of a class with the visibility attribute. This is useful if you - know a particular method or static member variable should only be - used from one shared object; then you can mark it hidden while the - rest of the class has default visibility. Care must be taken to - avoid breaking the One Definition Rule; for example, it is usually - not useful to mark an inline method as hidden without marking the - whole class as hidden. - - A C++ namespace declaration can also have the visibility attribute. - - namespace nspace1 __attribute__ ((visibility ("protected"))) - { /* Do something. */; } - - This attribute applies only to the particular namespace body, not - to other definitions of the same namespace; it is equivalent to - using '#pragma GCC visibility' before and after the namespace - definition (*note Visibility Pragmas::). - - In C++, if a template argument has limited visibility, this - restriction is implicitly propagated to the template instantiation. - Otherwise, template instantiations and specializations default to - the visibility of their template. - - If both the template and enclosing class have explicit visibility, - the visibility from the template is used. - -'vliw' - On MeP, the 'vliw' attribute tells the compiler to emit - instructions in VLIW mode instead of core mode. Note that this - attribute is not allowed unless a VLIW coprocessor has been - configured and enabled through command-line options. - -'warn_unused_result' - The 'warn_unused_result' attribute causes a warning to be emitted - if a caller of the function with this attribute does not use its - return value. This is useful for functions where not checking the - result is either a security problem or always a bug, such as - 'realloc'. - - int fn () __attribute__ ((warn_unused_result)); - int foo () - { - if (fn () < 0) return -1; - fn (); - return 0; - } - - results in warning on line 5. - -'weak' - The 'weak' attribute causes the declaration to be emitted as a weak - symbol rather than a global. This is primarily useful in defining - library functions that can be overridden in user code, though it - can also be used with non-function declarations. Weak symbols are - supported for ELF targets, and also for a.out targets when using - the GNU assembler and linker. - -'weakref' -'weakref ("TARGET")' - The 'weakref' attribute marks a declaration as a weak reference. - Without arguments, it should be accompanied by an 'alias' attribute - naming the target symbol. Optionally, the TARGET may be given as - an argument to 'weakref' itself. In either case, 'weakref' - implicitly marks the declaration as 'weak'. Without a TARGET, - given as an argument to 'weakref' or to 'alias', 'weakref' is - equivalent to 'weak'. - - static int x() __attribute__ ((weakref ("y"))); - /* is equivalent to... */ - static int x() __attribute__ ((weak, weakref, alias ("y"))); - /* and to... */ - static int x() __attribute__ ((weakref)); - static int x() __attribute__ ((alias ("y"))); - - A weak reference is an alias that does not by itself require a - definition to be given for the target symbol. If the target symbol - is only referenced through weak references, then it becomes a - 'weak' undefined symbol. If it is directly referenced, however, - then such strong references prevail, and a definition is required - for the symbol, not necessarily in the same translation unit. - - The effect is equivalent to moving all references to the alias to a - separate translation unit, renaming the alias to the aliased - symbol, declaring it as weak, compiling the two separate - translation units and performing a reloadable link on them. - - At present, a declaration to which 'weakref' is attached can only - be 'static'. - - You can specify multiple attributes in a declaration by separating them -by commas within the double parentheses or by immediately following an -attribute declaration with another attribute declaration. - - Some people object to the '__attribute__' feature, suggesting that ISO -C's '#pragma' should be used instead. At the time '__attribute__' was -designed, there were two reasons for not doing this. - - 1. It is impossible to generate '#pragma' commands from a macro. - - 2. There is no telling what the same '#pragma' might mean in another - compiler. - - These two reasons applied to almost any application that might have -been proposed for '#pragma'. It was basically a mistake to use -'#pragma' for _anything_. - - The ISO C99 standard includes '_Pragma', which now allows pragmas to be -generated from macros. In addition, a '#pragma GCC' namespace is now in -use for GCC-specific pragmas. However, it has been found convenient to -use '__attribute__' to achieve a natural attachment of attributes to -their corresponding declarations, whereas '#pragma GCC' is of use for -constructs that do not naturally form part of the grammar. *Note -Pragmas Accepted by GCC: Pragmas. - - -File: gcc.info, Node: Attribute Syntax, Next: Function Prototypes, Prev: Function Attributes, Up: C Extensions - -6.31 Attribute Syntax -===================== - -This section describes the syntax with which '__attribute__' may be -used, and the constructs to which attribute specifiers bind, for the C -language. Some details may vary for C++ and Objective-C. Because of -infelicities in the grammar for attributes, some forms described here -may not be successfully parsed in all cases. - - There are some problems with the semantics of attributes in C++. For -example, there are no manglings for attributes, although they may affect -code generation, so problems may arise when attributed types are used in -conjunction with templates or overloading. Similarly, 'typeid' does not -distinguish between types with different attributes. Support for -attributes in C++ may be restricted in future to attributes on -declarations only, but not on nested declarators. - - *Note Function Attributes::, for details of the semantics of attributes -applying to functions. *Note Variable Attributes::, for details of the -semantics of attributes applying to variables. *Note Type Attributes::, -for details of the semantics of attributes applying to structure, union -and enumerated types. - - An "attribute specifier" is of the form '__attribute__ -((ATTRIBUTE-LIST))'. An "attribute list" is a possibly empty -comma-separated sequence of "attributes", where each attribute is one of -the following: - - * Empty. Empty attributes are ignored. - - * A word (which may be an identifier such as 'unused', or a reserved - word such as 'const'). - - * A word, followed by, in parentheses, parameters for the attribute. - These parameters take one of the following forms: - - * An identifier. For example, 'mode' attributes use this form. - - * An identifier followed by a comma and a non-empty - comma-separated list of expressions. For example, 'format' - attributes use this form. - - * A possibly empty comma-separated list of expressions. For - example, 'format_arg' attributes use this form with the list - being a single integer constant expression, and 'alias' - attributes use this form with the list being a single string - constant. - - An "attribute specifier list" is a sequence of one or more attribute -specifiers, not separated by any other tokens. - - In GNU C, an attribute specifier list may appear after the colon -following a label, other than a 'case' or 'default' label. The only -attribute it makes sense to use after a label is 'unused'. This feature -is intended for program-generated code that may contain unused labels, -but which is compiled with '-Wall'. It is not normally appropriate to -use in it human-written code, though it could be useful in cases where -the code that jumps to the label is contained within an '#ifdef' -conditional. GNU C++ only permits attributes on labels if the attribute -specifier is immediately followed by a semicolon (i.e., the label -applies to an empty statement). If the semicolon is missing, C++ label -attributes are ambiguous, as it is permissible for a declaration, which -could begin with an attribute list, to be labelled in C++. Declarations -cannot be labelled in C90 or C99, so the ambiguity does not arise there. - - An attribute specifier list may appear as part of a 'struct', 'union' -or 'enum' specifier. It may go either immediately after the 'struct', -'union' or 'enum' keyword, or after the closing brace. The former -syntax is preferred. Where attribute specifiers follow the closing -brace, they are considered to relate to the structure, union or -enumerated type defined, not to any enclosing declaration the type -specifier appears in, and the type defined is not complete until after -the attribute specifiers. - - Otherwise, an attribute specifier appears as part of a declaration, -counting declarations of unnamed parameters and type names, and relates -to that declaration (which may be nested in another declaration, for -example in the case of a parameter declaration), or to a particular -declarator within a declaration. Where an attribute specifier is -applied to a parameter declared as a function or an array, it should -apply to the function or array rather than the pointer to which the -parameter is implicitly converted, but this is not yet correctly -implemented. - - Any list of specifiers and qualifiers at the start of a declaration may -contain attribute specifiers, whether or not such a list may in that -context contain storage class specifiers. (Some attributes, however, -are essentially in the nature of storage class specifiers, and only make -sense where storage class specifiers may be used; for example, -'section'.) There is one necessary limitation to this syntax: the first -old-style parameter declaration in a function definition cannot begin -with an attribute specifier, because such an attribute applies to the -function instead by syntax described below (which, however, is not yet -implemented in this case). In some other cases, attribute specifiers -are permitted by this grammar but not yet supported by the compiler. -All attribute specifiers in this place relate to the declaration as a -whole. In the obsolescent usage where a type of 'int' is implied by the -absence of type specifiers, such a list of specifiers and qualifiers may -be an attribute specifier list with no other specifiers or qualifiers. - - At present, the first parameter in a function prototype must have some -type specifier that is not an attribute specifier; this resolves an -ambiguity in the interpretation of 'void f(int (__attribute__((foo)) -x))', but is subject to change. At present, if the parentheses of a -function declarator contain only attributes then those attributes are -ignored, rather than yielding an error or warning or implying a single -parameter of type int, but this is subject to change. - - An attribute specifier list may appear immediately before a declarator -(other than the first) in a comma-separated list of declarators in a -declaration of more than one identifier using a single list of -specifiers and qualifiers. Such attribute specifiers apply only to the -identifier before whose declarator they appear. For example, in - - __attribute__((noreturn)) void d0 (void), - __attribute__((format(printf, 1, 2))) d1 (const char *, ...), - d2 (void) - -the 'noreturn' attribute applies to all the functions declared; the -'format' attribute only applies to 'd1'. - - An attribute specifier list may appear immediately before the comma, -'=' or semicolon terminating the declaration of an identifier other than -a function definition. Such attribute specifiers apply to the declared -object or function. Where an assembler name for an object or function -is specified (*note Asm Labels::), the attribute must follow the 'asm' -specification. - - An attribute specifier list may, in future, be permitted to appear -after the declarator in a function definition (before any old-style -parameter declarations or the function body). - - Attribute specifiers may be mixed with type qualifiers appearing inside -the '[]' of a parameter array declarator, in the C99 construct by which -such qualifiers are applied to the pointer to which the array is -implicitly converted. Such attribute specifiers apply to the pointer, -not to the array, but at present this is not implemented and they are -ignored. - - An attribute specifier list may appear at the start of a nested -declarator. At present, there are some limitations in this usage: the -attributes correctly apply to the declarator, but for most individual -attributes the semantics this implies are not implemented. When -attribute specifiers follow the '*' of a pointer declarator, they may be -mixed with any type qualifiers present. The following describes the -formal semantics of this syntax. It makes the most sense if you are -familiar with the formal specification of declarators in the ISO C -standard. - - Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration 'T D1', -where 'T' contains declaration specifiers that specify a type TYPE (such -as 'int') and 'D1' is a declarator that contains an identifier IDENT. -The type specified for IDENT for derived declarators whose type does not -include an attribute specifier is as in the ISO C standard. - - If 'D1' has the form '( ATTRIBUTE-SPECIFIER-LIST D )', and the -declaration 'T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST TYPE" -for IDENT, then 'T D1' specifies the type "DERIVED-DECLARATOR-TYPE-LIST -ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. - - If 'D1' has the form '* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST D', -and the declaration 'T D' specifies the type -"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then 'T D1' specifies the -type "DERIVED-DECLARATOR-TYPE-LIST -TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT. - - For example, - - void (__attribute__((noreturn)) ****f) (void); - -specifies the type "pointer to pointer to pointer to pointer to -non-returning function returning 'void'". As another example, - - char *__attribute__((aligned(8))) *f; - -specifies the type "pointer to 8-byte-aligned pointer to 'char'". Note -again that this does not work with most attributes; for example, the -usage of 'aligned' and 'noreturn' attributes given above is not yet -supported. - - For compatibility with existing code written for compiler versions that -did not implement attributes on nested declarators, some laxity is -allowed in the placing of attributes. If an attribute that only applies -to types is applied to a declaration, it is treated as applying to the -type of that declaration. If an attribute that only applies to -declarations is applied to the type of a declaration, it is treated as -applying to that declaration; and, for compatibility with code placing -the attributes immediately before the identifier declared, such an -attribute applied to a function return type is treated as applying to -the function type, and such an attribute applied to an array element -type is treated as applying to the array type. If an attribute that -only applies to function types is applied to a pointer-to-function type, -it is treated as applying to the pointer target type; if such an -attribute is applied to a function return type that is not a -pointer-to-function type, it is treated as applying to the function -type. - - -File: gcc.info, Node: Function Prototypes, Next: C++ Comments, Prev: Attribute Syntax, Up: C Extensions - -6.32 Prototypes and Old-Style Function Definitions -================================================== - -GNU C extends ISO C to allow a function prototype to override a later -old-style non-prototype definition. Consider the following example: - - /* Use prototypes unless the compiler is old-fashioned. */ - #ifdef __STDC__ - #define P(x) x - #else - #define P(x) () - #endif - - /* Prototype function declaration. */ - int isroot P((uid_t)); - - /* Old-style function definition. */ - int - isroot (x) /* ??? lossage here ??? */ - uid_t x; - { - return x == 0; - } - - Suppose the type 'uid_t' happens to be 'short'. ISO C does not allow -this example, because subword arguments in old-style non-prototype -definitions are promoted. Therefore in this example the function -definition's argument is really an 'int', which does not match the -prototype argument type of 'short'. - - This restriction of ISO C makes it hard to write code that is portable -to traditional C compilers, because the programmer does not know whether -the 'uid_t' type is 'short', 'int', or 'long'. Therefore, in cases like -these GNU C allows a prototype to override a later old-style definition. -More precisely, in GNU C, a function prototype argument type overrides -the argument type specified by a later old-style definition if the -former type is the same as the latter type before promotion. Thus in -GNU C the above example is equivalent to the following: - - int isroot (uid_t); - - int - isroot (uid_t x) - { - return x == 0; - } - -GNU C++ does not support old-style function definitions, so this -extension is irrelevant. - - -File: gcc.info, Node: C++ Comments, Next: Dollar Signs, Prev: Function Prototypes, Up: C Extensions - -6.33 C++ Style Comments -======================= - -In GNU C, you may use C++ style comments, which start with '//' and -continue until the end of the line. Many other C implementations allow -such comments, and they are included in the 1999 C standard. However, -C++ style comments are not recognized if you specify an '-std' option -specifying a version of ISO C before C99, or '-ansi' (equivalent to -'-std=c90'). - - -File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: C++ Comments, Up: C Extensions - -6.34 Dollar Signs in Identifier Names -===================================== - -In GNU C, you may normally use dollar signs in identifier names. This -is because many traditional C implementations allow such identifiers. -However, dollar signs in identifiers are not supported on a few target -machines, typically because the target assembler does not allow them. - - -File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions - -6.35 The Character <ESC> in Constants -===================================== - -You can use the sequence '\e' in a string or character constant to stand -for the ASCII character <ESC>. - - -File: gcc.info, Node: Variable Attributes, Next: Type Attributes, Prev: Character Escapes, Up: C Extensions - -6.36 Specifying Attributes of Variables -======================================= - -The keyword '__attribute__' allows you to specify special attributes of -variables or structure fields. This keyword is followed by an attribute -specification inside double parentheses. Some attributes are currently -defined generically for variables. Other attributes are defined for -variables on particular target systems. Other attributes are available -for functions (*note Function Attributes::) and for types (*note Type -Attributes::). Other front ends might define more attributes (*note -Extensions to the C++ Language: C++ Extensions.). - - You may also specify attributes with '__' preceding and following each -keyword. This allows you to use them in header files without being -concerned about a possible macro of the same name. For example, you may -use '__aligned__' instead of 'aligned'. - - *Note Attribute Syntax::, for details of the exact syntax for using -attributes. - -'aligned (ALIGNMENT)' - This attribute specifies a minimum alignment for the variable or - structure field, measured in bytes. For example, the declaration: - - int x __attribute__ ((aligned (16))) = 0; - - causes the compiler to allocate the global variable 'x' on a - 16-byte boundary. On a 68040, this could be used in conjunction - with an 'asm' expression to access the 'move16' instruction which - requires 16-byte aligned operands. - - You can also specify the alignment of structure fields. For - example, to create a double-word aligned 'int' pair, you could - write: - - struct foo { int x[2] __attribute__ ((aligned (8))); }; - - This is an alternative to creating a union with a 'double' member, - which forces the union to be double-word aligned. - - As in the preceding examples, you can explicitly specify the - alignment (in bytes) that you wish the compiler to use for a given - variable or structure field. Alternatively, you can leave out the - alignment factor and just ask the compiler to align a variable or - field to the default alignment for the target architecture you are - compiling for. The default alignment is sufficient for all scalar - types, but may not be enough for all vector types on a target that - supports vector operations. The default alignment is fixed for a - particular target ABI. - - GCC also provides a target specific macro '__BIGGEST_ALIGNMENT__', - which is the largest alignment ever used for any data type on the - target machine you are compiling for. For example, you could - write: - - short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__))); - - The compiler automatically sets the alignment for the declared - variable or field to '__BIGGEST_ALIGNMENT__'. Doing this can often - make copy operations more efficient, because the compiler can use - whatever instructions copy the biggest chunks of memory when - performing copies to or from the variables or fields that you have - aligned this way. Note that the value of '__BIGGEST_ALIGNMENT__' - may change depending on command-line options. - - When used on a struct, or struct member, the 'aligned' attribute - can only increase the alignment; in order to decrease it, the - 'packed' attribute must be specified as well. When used as part of - a typedef, the 'aligned' attribute can both increase and decrease - alignment, and specifying the 'packed' attribute generates a - warning. - - Note that the effectiveness of 'aligned' attributes may be limited - by inherent limitations in your linker. On many systems, the - linker is only able to arrange for variables to be aligned up to a - certain maximum alignment. (For some linkers, the maximum - supported alignment may be very very small.) If your linker is - only able to align variables up to a maximum of 8-byte alignment, - then specifying 'aligned(16)' in an '__attribute__' still only - provides you with 8-byte alignment. See your linker documentation - for further information. - - The 'aligned' attribute can also be used for functions (*note - Function Attributes::.) - -'cleanup (CLEANUP_FUNCTION)' - The 'cleanup' attribute runs a function when the variable goes out - of scope. This attribute can only be applied to auto function - scope variables; it may not be applied to parameters or variables - with static storage duration. The function must take one - parameter, a pointer to a type compatible with the variable. The - return value of the function (if any) is ignored. - - If '-fexceptions' is enabled, then CLEANUP_FUNCTION is run during - the stack unwinding that happens during the processing of the - exception. Note that the 'cleanup' attribute does not allow the - exception to be caught, only to perform an action. It is undefined - what happens if CLEANUP_FUNCTION does not return normally. - -'common' -'nocommon' - The 'common' attribute requests GCC to place a variable in "common" - storage. The 'nocommon' attribute requests the opposite--to - allocate space for it directly. - - These attributes override the default chosen by the '-fno-common' - and '-fcommon' flags respectively. - -'deprecated' -'deprecated (MSG)' - The 'deprecated' attribute results in a warning if the variable is - used anywhere in the source file. This is useful when identifying - variables that are expected to be removed in a future version of a - program. The warning also includes the location of the declaration - of the deprecated variable, to enable users to easily find further - information about why the variable is deprecated, or what they - should do instead. Note that the warning only occurs for uses: - - extern int old_var __attribute__ ((deprecated)); - extern int old_var; - int new_fn () { return old_var; } - - results in a warning on line 3 but not line 2. The optional MSG - argument, which must be a string, is printed in the warning if - present. - - The 'deprecated' attribute can also be used for functions and types - (*note Function Attributes::, *note Type Attributes::.) - -'mode (MODE)' - This attribute specifies the data type for the - declaration--whichever type corresponds to the mode MODE. This in - effect lets you request an integer or floating-point type according - to its width. - - You may also specify a mode of 'byte' or '__byte__' to indicate the - mode corresponding to a one-byte integer, 'word' or '__word__' for - the mode of a one-word integer, and 'pointer' or '__pointer__' for - the mode used to represent pointers. - -'packed' - The 'packed' attribute specifies that a variable or structure field - should have the smallest possible alignment--one byte for a - variable, and one bit for a field, unless you specify a larger - value with the 'aligned' attribute. - - Here is a structure in which the field 'x' is packed, so that it - immediately follows 'a': - - struct foo - { - char a; - int x[2] __attribute__ ((packed)); - }; - - _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed' - attribute on bit-fields of type 'char'. This has been fixed in GCC - 4.4 but the change can lead to differences in the structure layout. - See the documentation of '-Wpacked-bitfield-compat' for more - information. - -'section ("SECTION-NAME")' - Normally, the compiler places the objects it generates in sections - like 'data' and 'bss'. Sometimes, however, you need additional - sections, or you need certain particular variables to appear in - special sections, for example to map to special hardware. The - 'section' attribute specifies that a variable (or function) lives - in a particular section. For example, this small program uses - several specific section names: - - struct duart a __attribute__ ((section ("DUART_A"))) = { 0 }; - struct duart b __attribute__ ((section ("DUART_B"))) = { 0 }; - char stack[10000] __attribute__ ((section ("STACK"))) = { 0 }; - int init_data __attribute__ ((section ("INITDATA"))); - - main() - { - /* Initialize stack pointer */ - init_sp (stack + sizeof (stack)); - - /* Initialize initialized data */ - memcpy (&init_data, &data, &edata - &data); - - /* Turn on the serial ports */ - init_duart (&a); - init_duart (&b); - } - - Use the 'section' attribute with _global_ variables and not _local_ - variables, as shown in the example. - - You may use the 'section' attribute with initialized or - uninitialized global variables but the linker requires each object - be defined once, with the exception that uninitialized variables - tentatively go in the 'common' (or 'bss') section and can be - multiply "defined". Using the 'section' attribute changes what - section the variable goes into and may cause the linker to issue an - error if an uninitialized variable has multiple definitions. You - can force a variable to be initialized with the '-fno-common' flag - or the 'nocommon' attribute. - - Some file formats do not support arbitrary sections so the - 'section' attribute is not available on all platforms. If you need - to map the entire contents of a module to a particular section, - consider using the facilities of the linker instead. - -'shared' - On Microsoft Windows, in addition to putting variable definitions - in a named section, the section can also be shared among all - running copies of an executable or DLL. For example, this small - program defines shared data by putting it in a named section - 'shared' and marking the section shareable: - - int foo __attribute__((section ("shared"), shared)) = 0; - - int - main() - { - /* Read and write foo. All running - copies see the same value. */ - return 0; - } - - You may only use the 'shared' attribute along with 'section' - attribute with a fully-initialized global definition because of the - way linkers work. See 'section' attribute for more information. - - The 'shared' attribute is only available on Microsoft Windows. - -'tls_model ("TLS_MODEL")' - The 'tls_model' attribute sets thread-local storage model (*note - Thread-Local::) of a particular '__thread' variable, overriding - '-ftls-model=' command-line switch on a per-variable basis. The - TLS_MODEL argument should be one of 'global-dynamic', - 'local-dynamic', 'initial-exec' or 'local-exec'. - - Not all targets support this attribute. - -'unused' - This attribute, attached to a variable, means that the variable is - meant to be possibly unused. GCC does not produce a warning for - this variable. - -'used' - This attribute, attached to a variable with the static storage, - means that the variable must be emitted even if it appears that the - variable is not referenced. - - When applied to a static data member of a C++ class template, the - attribute also means that the member is instantiated if the class - itself is instantiated. - -'vector_size (BYTES)' - This attribute specifies the vector size for the variable, measured - in bytes. For example, the declaration: - - int foo __attribute__ ((vector_size (16))); - - causes the compiler to set the mode for 'foo', to be 16 bytes, - divided into 'int' sized units. Assuming a 32-bit int (a vector of - 4 units of 4 bytes), the corresponding mode of 'foo' is V4SI. - - This attribute is only applicable to integral and float scalars, - although arrays, pointers, and function return values are allowed - in conjunction with this construct. - - Aggregates with this attribute are invalid, even if they are of the - same size as a corresponding scalar. For example, the declaration: - - struct S { int a; }; - struct S __attribute__ ((vector_size (16))) foo; - - is invalid even if the size of the structure is the same as the - size of the 'int'. - -'selectany' - The 'selectany' attribute causes an initialized global variable to - have link-once semantics. When multiple definitions of the - variable are encountered by the linker, the first is selected and - the remainder are discarded. Following usage by the Microsoft - compiler, the linker is told _not_ to warn about size or content - differences of the multiple definitions. - - Although the primary usage of this attribute is for POD types, the - attribute can also be applied to global C++ objects that are - initialized by a constructor. In this case, the static - initialization and destruction code for the object is emitted in - each translation defining the object, but the calls to the - constructor and destructor are protected by a link-once guard - variable. - - The 'selectany' attribute is only available on Microsoft Windows - targets. You can use '__declspec (selectany)' as a synonym for - '__attribute__ ((selectany))' for compatibility with other - compilers. - -'weak' - The 'weak' attribute is described in *note Function Attributes::. - -'dllimport' - The 'dllimport' attribute is described in *note Function - Attributes::. - -'dllexport' - The 'dllexport' attribute is described in *note Function - Attributes::. - -6.36.1 AVR Variable Attributes ------------------------------- - -'progmem' - The 'progmem' attribute is used on the AVR to place read-only data - in the non-volatile program memory (flash). The 'progmem' - attribute accomplishes this by putting respective variables into a - section whose name starts with '.progmem'. - - This attribute works similar to the 'section' attribute but adds - additional checking. Notice that just like the 'section' - attribute, 'progmem' affects the location of the data but not how - this data is accessed. - - In order to read data located with the 'progmem' attribute (inline) - assembler must be used. - /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */ - #include <avr/pgmspace.h> - - /* Locate var in flash memory */ - const int var[2] PROGMEM = { 1, 2 }; - - int read_var (int i) - { - /* Access var[] by accessor macro from avr/pgmspace.h */ - return (int) pgm_read_word (& var[i]); - } - - AVR is a Harvard architecture processor and data and read-only data - normally resides in the data memory (RAM). - - See also the *note AVR Named Address Spaces:: section for an - alternate way to locate and access data in flash memory. - -6.36.2 Blackfin Variable Attributes ------------------------------------ - -Three attributes are currently defined for the Blackfin. - -'l1_data' -'l1_data_A' -'l1_data_B' - Use these attributes on the Blackfin to place the variable into L1 - Data SRAM. Variables with 'l1_data' attribute are put into the - specific section named '.l1.data'. Those with 'l1_data_A' - attribute are put into the specific section named '.l1.data.A'. - Those with 'l1_data_B' attribute are put into the specific section - named '.l1.data.B'. - -'l2' - Use this attribute on the Blackfin to place the variable into L2 - SRAM. Variables with 'l2' attribute are put into the specific - section named '.l2.data'. - -6.36.3 M32R/D Variable Attributes ---------------------------------- - -One attribute is currently defined for the M32R/D. - -'model (MODEL-NAME)' - Use this attribute on the M32R/D to set the addressability of an - object. The identifier MODEL-NAME is one of 'small', 'medium', or - 'large', representing each of the code models. - - Small model objects live in the lower 16MB of memory (so that their - addresses can be loaded with the 'ld24' instruction). - - Medium and large model objects may live anywhere in the 32-bit - address space (the compiler generates 'seth/add3' instructions to - load their addresses). - -6.36.4 MeP Variable Attributes ------------------------------- - -The MeP target has a number of addressing modes and busses. The 'near' -space spans the standard memory space's first 16 megabytes (24 bits). -The 'far' space spans the entire 32-bit memory space. The 'based' space -is a 128-byte region in the memory space that is addressed relative to -the '$tp' register. The 'tiny' space is a 65536-byte region relative to -the '$gp' register. In addition to these memory regions, the MeP target -has a separate 16-bit control bus which is specified with 'cb' -attributes. - -'based' - Any variable with the 'based' attribute is assigned to the '.based' - section, and is accessed with relative to the '$tp' register. - -'tiny' - Likewise, the 'tiny' attribute assigned variables to the '.tiny' - section, relative to the '$gp' register. - -'near' - Variables with the 'near' attribute are assumed to have addresses - that fit in a 24-bit addressing mode. This is the default for - large variables ('-mtiny=4' is the default) but this attribute can - override '-mtiny=' for small variables, or override '-ml'. - -'far' - Variables with the 'far' attribute are addressed using a full - 32-bit address. Since this covers the entire memory space, this - allows modules to make no assumptions about where variables might - be stored. - -'io' -'io (ADDR)' - Variables with the 'io' attribute are used to address memory-mapped - peripherals. If an address is specified, the variable is assigned - that address, else it is not assigned an address (it is assumed - some other module assigns an address). Example: - - int timer_count __attribute__((io(0x123))); - -'cb' -'cb (ADDR)' - Variables with the 'cb' attribute are used to access the control - bus, using special instructions. 'addr' indicates the control bus - address. Example: - - int cpu_clock __attribute__((cb(0x123))); - -6.36.5 i386 Variable Attributes -------------------------------- - -Two attributes are currently defined for i386 configurations: -'ms_struct' and 'gcc_struct' - -'ms_struct' -'gcc_struct' - - If 'packed' is used on a structure, or if bit-fields are used, it - may be that the Microsoft ABI lays out the structure differently - than the way GCC normally does. Particularly when moving packed - data between functions compiled with GCC and the native Microsoft - compiler (either via function call or as data in a file), it may be - necessary to access either format. - - Currently '-m[no-]ms-bitfields' is provided for the Microsoft - Windows X86 compilers to match the native Microsoft compiler. - - The Microsoft structure layout algorithm is fairly simple with the - exception of the bit-field packing. The padding and alignment of - members of structures and whether a bit-field can straddle a - storage-unit boundary are determine by these rules: - - 1. Structure members are stored sequentially in the order in - which they are declared: the first member has the lowest - memory address and the last member the highest. - - 2. Every data object has an alignment requirement. The alignment - requirement for all data except structures, unions, and arrays - is either the size of the object or the current packing size - (specified with either the 'aligned' attribute or the 'pack' - pragma), whichever is less. For structures, unions, and - arrays, the alignment requirement is the largest alignment - requirement of its members. Every object is allocated an - offset so that: - - offset % alignment_requirement == 0 - - 3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte - allocation unit if the integral types are the same size and if - the next bit-field fits into the current allocation unit - without crossing the boundary imposed by the common alignment - requirements of the bit-fields. - - MSVC interprets zero-length bit-fields in the following ways: - - 1. If a zero-length bit-field is inserted between two bit-fields - that are normally coalesced, the bit-fields are not coalesced. - - For example: - - struct - { - unsigned long bf_1 : 12; - unsigned long : 0; - unsigned long bf_2 : 12; - } t1; - - The size of 't1' is 8 bytes with the zero-length bit-field. - If the zero-length bit-field were removed, 't1''s size would - be 4 bytes. - - 2. If a zero-length bit-field is inserted after a bit-field, - 'foo', and the alignment of the zero-length bit-field is - greater than the member that follows it, 'bar', 'bar' is - aligned as the type of the zero-length bit-field. - - For example: - - struct - { - char foo : 4; - short : 0; - char bar; - } t2; - - struct - { - char foo : 4; - short : 0; - double bar; - } t3; - - For 't2', 'bar' is placed at offset 2, rather than offset 1. - Accordingly, the size of 't2' is 4. For 't3', the zero-length - bit-field does not affect the alignment of 'bar' or, as a - result, the size of the structure. - - Taking this into account, it is important to note the - following: - - 1. If a zero-length bit-field follows a normal bit-field, - the type of the zero-length bit-field may affect the - alignment of the structure as whole. For example, 't2' - has a size of 4 bytes, since the zero-length bit-field - follows a normal bit-field, and is of type short. - - 2. Even if a zero-length bit-field is not followed by a - normal bit-field, it may still affect the alignment of - the structure: - - struct - { - char foo : 6; - long : 0; - } t4; - - Here, 't4' takes up 4 bytes. - - 3. Zero-length bit-fields following non-bit-field members are - ignored: - - struct - { - char foo; - long : 0; - char bar; - } t5; - - Here, 't5' takes up 2 bytes. - -6.36.6 PowerPC Variable Attributes ----------------------------------- - -Three attributes currently are defined for PowerPC configurations: -'altivec', 'ms_struct' and 'gcc_struct'. - - For full documentation of the struct attributes please see the -documentation in *note i386 Variable Attributes::. - - For documentation of 'altivec' attribute please see the documentation -in *note PowerPC Type Attributes::. - -6.36.7 SPU Variable Attributes ------------------------------- - -The SPU supports the 'spu_vector' attribute for variables. For -documentation of this attribute please see the documentation in *note -SPU Type Attributes::. - -6.36.8 Xstormy16 Variable Attributes ------------------------------------- - -One attribute is currently defined for xstormy16 configurations: -'below100'. - -'below100' - - If a variable has the 'below100' attribute ('BELOW100' is allowed - also), GCC places the variable in the first 0x100 bytes of memory - and use special opcodes to access it. Such variables are placed in - either the '.bss_below100' section or the '.data_below100' section. - - -File: gcc.info, Node: Type Attributes, Next: Alignment, Prev: Variable Attributes, Up: C Extensions - -6.37 Specifying Attributes of Types -=================================== - -The keyword '__attribute__' allows you to specify special attributes of -'struct' and 'union' types when you define such types. This keyword is -followed by an attribute specification inside double parentheses. Seven -attributes are currently defined for types: 'aligned', 'packed', -'transparent_union', 'unused', 'deprecated', 'visibility', and -'may_alias'. Other attributes are defined for functions (*note Function -Attributes::) and for variables (*note Variable Attributes::). - - You may also specify any one of these attributes with '__' preceding -and following its keyword. This allows you to use these attributes in -header files without being concerned about a possible macro of the same -name. For example, you may use '__aligned__' instead of 'aligned'. - - You may specify type attributes in an enum, struct or union type -declaration or definition, or for other types in a 'typedef' -declaration. - - For an enum, struct or union type, you may specify attributes either -between the enum, struct or union tag and the name of the type, or just -past the closing curly brace of the _definition_. The former syntax is -preferred. - - *Note Attribute Syntax::, for details of the exact syntax for using -attributes. - -'aligned (ALIGNMENT)' - This attribute specifies a minimum alignment (in bytes) for - variables of the specified type. For example, the declarations: - - struct S { short f[3]; } __attribute__ ((aligned (8))); - typedef int more_aligned_int __attribute__ ((aligned (8))); - - force the compiler to ensure (as far as it can) that each variable - whose type is 'struct S' or 'more_aligned_int' is allocated and - aligned _at least_ on a 8-byte boundary. On a SPARC, having all - variables of type 'struct S' aligned to 8-byte boundaries allows - the compiler to use the 'ldd' and 'std' (doubleword load and store) - instructions when copying one variable of type 'struct S' to - another, thus improving run-time efficiency. - - Note that the alignment of any given 'struct' or 'union' type is - required by the ISO C standard to be at least a perfect multiple of - the lowest common multiple of the alignments of all of the members - of the 'struct' or 'union' in question. This means that you _can_ - effectively adjust the alignment of a 'struct' or 'union' type by - attaching an 'aligned' attribute to any one of the members of such - a type, but the notation illustrated in the example above is a more - obvious, intuitive, and readable way to request the compiler to - adjust the alignment of an entire 'struct' or 'union' type. - - As in the preceding example, you can explicitly specify the - alignment (in bytes) that you wish the compiler to use for a given - 'struct' or 'union' type. Alternatively, you can leave out the - alignment factor and just ask the compiler to align a type to the - maximum useful alignment for the target machine you are compiling - for. For example, you could write: - - struct S { short f[3]; } __attribute__ ((aligned)); - - Whenever you leave out the alignment factor in an 'aligned' - attribute specification, the compiler automatically sets the - alignment for the type to the largest alignment that is ever used - for any data type on the target machine you are compiling for. - Doing this can often make copy operations more efficient, because - the compiler can use whatever instructions copy the biggest chunks - of memory when performing copies to or from the variables that have - types that you have aligned this way. - - In the example above, if the size of each 'short' is 2 bytes, then - the size of the entire 'struct S' type is 6 bytes. The smallest - power of two that is greater than or equal to that is 8, so the - compiler sets the alignment for the entire 'struct S' type to 8 - bytes. - - Note that although you can ask the compiler to select a - time-efficient alignment for a given type and then declare only - individual stand-alone objects of that type, the compiler's ability - to select a time-efficient alignment is primarily useful only when - you plan to create arrays of variables having the relevant - (efficiently aligned) type. If you declare or use arrays of - variables of an efficiently-aligned type, then it is likely that - your program also does pointer arithmetic (or subscripting, which - amounts to the same thing) on pointers to the relevant type, and - the code that the compiler generates for these pointer arithmetic - operations is often more efficient for efficiently-aligned types - than for other types. - - The 'aligned' attribute can only increase the alignment; but you - can decrease it by specifying 'packed' as well. See below. - - Note that the effectiveness of 'aligned' attributes may be limited - by inherent limitations in your linker. On many systems, the - linker is only able to arrange for variables to be aligned up to a - certain maximum alignment. (For some linkers, the maximum - supported alignment may be very very small.) If your linker is - only able to align variables up to a maximum of 8-byte alignment, - then specifying 'aligned(16)' in an '__attribute__' still only - provides you with 8-byte alignment. See your linker documentation - for further information. - -'packed' - This attribute, attached to 'struct' or 'union' type definition, - specifies that each member (other than zero-width bit-fields) of - the structure or union is placed to minimize the memory required. - When attached to an 'enum' definition, it indicates that the - smallest integral type should be used. - - Specifying this attribute for 'struct' and 'union' types is - equivalent to specifying the 'packed' attribute on each of the - structure or union members. Specifying the '-fshort-enums' flag on - the line is equivalent to specifying the 'packed' attribute on all - 'enum' definitions. - - In the following example 'struct my_packed_struct''s members are - packed closely together, but the internal layout of its 's' member - is not packed--to do that, 'struct my_unpacked_struct' needs to be - packed too. - - struct my_unpacked_struct - { - char c; - int i; - }; - - struct __attribute__ ((__packed__)) my_packed_struct - { - char c; - int i; - struct my_unpacked_struct s; - }; - - You may only specify this attribute on the definition of an 'enum', - 'struct' or 'union', not on a 'typedef' that does not also define - the enumerated type, structure or union. - -'transparent_union' - This attribute, attached to a 'union' type definition, indicates - that any function parameter having that union type causes calls to - that function to be treated in a special way. - - First, the argument corresponding to a transparent union type can - be of any type in the union; no cast is required. Also, if the - union contains a pointer type, the corresponding argument can be a - null pointer constant or a void pointer expression; and if the - union contains a void pointer type, the corresponding argument can - be any pointer expression. If the union member type is a pointer, - qualifiers like 'const' on the referenced type must be respected, - just as with normal pointer conversions. - - Second, the argument is passed to the function using the calling - conventions of the first member of the transparent union, not the - calling conventions of the union itself. All members of the union - must have the same machine representation; this is necessary for - this argument passing to work properly. - - Transparent unions are designed for library functions that have - multiple interfaces for compatibility reasons. For example, - suppose the 'wait' function must accept either a value of type 'int - *' to comply with POSIX, or a value of type 'union wait *' to - comply with the 4.1BSD interface. If 'wait''s parameter were 'void - *', 'wait' would accept both kinds of arguments, but it would also - accept any other pointer type and this would make argument type - checking less useful. Instead, '<sys/wait.h>' might define the - interface as follows: - - typedef union __attribute__ ((__transparent_union__)) - { - int *__ip; - union wait *__up; - } wait_status_ptr_t; - - pid_t wait (wait_status_ptr_t); - - This interface allows either 'int *' or 'union wait *' arguments to - be passed, using the 'int *' calling convention. The program can - call 'wait' with arguments of either type: - - int w1 () { int w; return wait (&w); } - int w2 () { union wait w; return wait (&w); } - - With this interface, 'wait''s implementation might look like this: - - pid_t wait (wait_status_ptr_t p) - { - return waitpid (-1, p.__ip, 0); - } - -'unused' - When attached to a type (including a 'union' or a 'struct'), this - attribute means that variables of that type are meant to appear - possibly unused. GCC does not produce a warning for any variables - of that type, even if the variable appears to do nothing. This is - often the case with lock or thread classes, which are usually - defined and then not referenced, but contain constructors and - destructors that have nontrivial bookkeeping functions. - -'deprecated' -'deprecated (MSG)' - The 'deprecated' attribute results in a warning if the type is used - anywhere in the source file. This is useful when identifying types - that are expected to be removed in a future version of a program. - If possible, the warning also includes the location of the - declaration of the deprecated type, to enable users to easily find - further information about why the type is deprecated, or what they - should do instead. Note that the warnings only occur for uses and - then only if the type is being applied to an identifier that itself - is not being declared as deprecated. - - typedef int T1 __attribute__ ((deprecated)); - T1 x; - typedef T1 T2; - T2 y; - typedef T1 T3 __attribute__ ((deprecated)); - T3 z __attribute__ ((deprecated)); - - results in a warning on line 2 and 3 but not lines 4, 5, or 6. No - warning is issued for line 4 because T2 is not explicitly - deprecated. Line 5 has no warning because T3 is explicitly - deprecated. Similarly for line 6. The optional MSG argument, - which must be a string, is printed in the warning if present. - - The 'deprecated' attribute can also be used for functions and - variables (*note Function Attributes::, *note Variable - Attributes::.) - -'may_alias' - Accesses through pointers to types with this attribute are not - subject to type-based alias analysis, but are instead assumed to be - able to alias any other type of objects. In the context of section - 6.5 paragraph 7 of the C99 standard, an lvalue expression - dereferencing such a pointer is treated like having a character - type. See '-fstrict-aliasing' for more information on aliasing - issues. This extension exists to support some vector APIs, in - which pointers to one vector type are permitted to alias pointers - to a different vector type. - - Note that an object of a type with this attribute does not have any - special semantics. - - Example of use: - - typedef short __attribute__((__may_alias__)) short_a; - - int - main (void) - { - int a = 0x12345678; - short_a *b = (short_a *) &a; - - b[1] = 0; - - if (a == 0x12345678) - abort(); - - exit(0); - } - - If you replaced 'short_a' with 'short' in the variable declaration, - the above program would abort when compiled with - '-fstrict-aliasing', which is on by default at '-O2' or above in - recent GCC versions. - -'visibility' - In C++, attribute visibility (*note Function Attributes::) can also - be applied to class, struct, union and enum types. Unlike other - type attributes, the attribute must appear between the initial - keyword and the name of the type; it cannot appear after the body - of the type. - - Note that the type visibility is applied to vague linkage entities - associated with the class (vtable, typeinfo node, etc.). In - particular, if a class is thrown as an exception in one shared - object and caught in another, the class must have default - visibility. Otherwise the two shared objects are unable to use the - same typeinfo node and exception handling will break. - - To specify multiple attributes, separate them by commas within the -double parentheses: for example, '__attribute__ ((aligned (16), -packed))'. - -6.37.1 ARM Type Attributes --------------------------- - -On those ARM targets that support 'dllimport' (such as Symbian OS), you -can use the 'notshared' attribute to indicate that the virtual table and -other similar data for a class should not be exported from a DLL. For -example: - - class __declspec(notshared) C { - public: - __declspec(dllimport) C(); - virtual void f(); - } - - __declspec(dllexport) - C::C() {} - -In this code, 'C::C' is exported from the current DLL, but the virtual -table for 'C' is not exported. (You can use '__attribute__' instead of -'__declspec' if you prefer, but most Symbian OS code uses '__declspec'.) - -6.37.2 MeP Type Attributes --------------------------- - -Many of the MeP variable attributes may be applied to types as well. -Specifically, the 'based', 'tiny', 'near', and 'far' attributes may be -applied to either. The 'io' and 'cb' attributes may not be applied to -types. - -6.37.3 i386 Type Attributes ---------------------------- - -Two attributes are currently defined for i386 configurations: -'ms_struct' and 'gcc_struct'. - -'ms_struct' -'gcc_struct' - - If 'packed' is used on a structure, or if bit-fields are used it - may be that the Microsoft ABI packs them differently than GCC - normally packs them. Particularly when moving packed data between - functions compiled with GCC and the native Microsoft compiler - (either via function call or as data in a file), it may be - necessary to access either format. - - Currently '-m[no-]ms-bitfields' is provided for the Microsoft - Windows X86 compilers to match the native Microsoft compiler. - -6.37.4 PowerPC Type Attributes ------------------------------- - -Three attributes currently are defined for PowerPC configurations: -'altivec', 'ms_struct' and 'gcc_struct'. - - For full documentation of the 'ms_struct' and 'gcc_struct' attributes -please see the documentation in *note i386 Type Attributes::. - - The 'altivec' attribute allows one to declare AltiVec vector data types -supported by the AltiVec Programming Interface Manual. The attribute -requires an argument to specify one of three vector types: 'vector__', -'pixel__' (always followed by unsigned short), and 'bool__' (always -followed by unsigned). - - __attribute__((altivec(vector__))) - __attribute__((altivec(pixel__))) unsigned short - __attribute__((altivec(bool__))) unsigned - - These attributes mainly are intended to support the '__vector', -'__pixel', and '__bool' AltiVec keywords. - -6.37.5 SPU Type Attributes --------------------------- - -The SPU supports the 'spu_vector' attribute for types. This attribute -allows one to declare vector data types supported by the -Sony/Toshiba/IBM SPU Language Extensions Specification. It is intended -to support the '__vector' keyword. - - -File: gcc.info, Node: Alignment, Next: Inline, Prev: Type Attributes, Up: C Extensions - -6.38 Inquiring on Alignment of Types or Variables -================================================= - -The keyword '__alignof__' allows you to inquire about how an object is -aligned, or the minimum alignment usually required by a type. Its -syntax is just like 'sizeof'. - - For example, if the target machine requires a 'double' value to be -aligned on an 8-byte boundary, then '__alignof__ (double)' is 8. This -is true on many RISC machines. On more traditional machine designs, -'__alignof__ (double)' is 4 or even 2. - - Some machines never actually require alignment; they allow reference to -any data type even at an odd address. For these machines, '__alignof__' -reports the smallest alignment that GCC gives the data type, usually as -mandated by the target ABI. - - If the operand of '__alignof__' is an lvalue rather than a type, its -value is the required alignment for its type, taking into account any -minimum alignment specified with GCC's '__attribute__' extension (*note -Variable Attributes::). For example, after this declaration: - - struct foo { int x; char y; } foo1; - -the value of '__alignof__ (foo1.y)' is 1, even though its actual -alignment is probably 2 or 4, the same as '__alignof__ (int)'. - - It is an error to ask for the alignment of an incomplete type. - - -File: gcc.info, Node: Inline, Next: Volatiles, Prev: Alignment, Up: C Extensions - -6.39 An Inline Function is As Fast As a Macro -============================================= - -By declaring a function inline, you can direct GCC to make calls to that -function faster. One way GCC can achieve this is to integrate that -function's code into the code for its callers. This makes execution -faster by eliminating the function-call overhead; in addition, if any of -the actual argument values are constant, their known values may permit -simplifications at compile time so that not all of the inline function's -code needs to be included. The effect on code size is less predictable; -object code may be larger or smaller with function inlining, depending -on the particular case. You can also direct GCC to try to integrate all -"simple enough" functions into their callers with the option -'-finline-functions'. - - GCC implements three different semantics of declaring a function -inline. One is available with '-std=gnu89' or '-fgnu89-inline' or when -'gnu_inline' attribute is present on all inline declarations, another -when '-std=c99', '-std=c11', '-std=gnu99' or '-std=gnu11' (without -'-fgnu89-inline'), and the third is used when compiling C++. - - To declare a function inline, use the 'inline' keyword in its -declaration, like this: - - static inline int - inc (int *a) - { - return (*a)++; - } - - If you are writing a header file to be included in ISO C90 programs, -write '__inline__' instead of 'inline'. *Note Alternate Keywords::. - - The three types of inlining behave similarly in two important cases: -when the 'inline' keyword is used on a 'static' function, like the -example above, and when a function is first declared without using the -'inline' keyword and then is defined with 'inline', like this: - - extern int inc (int *a); - inline int - inc (int *a) - { - return (*a)++; - } - - In both of these common cases, the program behaves the same as if you -had not used the 'inline' keyword, except for its speed. - - When a function is both inline and 'static', if all calls to the -function are integrated into the caller, and the function's address is -never used, then the function's own assembler code is never referenced. -In this case, GCC does not actually output assembler code for the -function, unless you specify the option '-fkeep-inline-functions'. Some -calls cannot be integrated for various reasons (in particular, calls -that precede the function's definition cannot be integrated, and neither -can recursive calls within the definition). If there is a nonintegrated -call, then the function is compiled to assembler code as usual. The -function must also be compiled as usual if the program refers to its -address, because that can't be inlined. - - Note that certain usages in a function definition can make it -unsuitable for inline substitution. Among these usages are: variadic -functions, use of 'alloca', use of variable-length data types (*note -Variable Length::), use of computed goto (*note Labels as Values::), use -of nonlocal goto, and nested functions (*note Nested Functions::). -Using '-Winline' warns when a function marked 'inline' could not be -substituted, and gives the reason for the failure. - - As required by ISO C++, GCC considers member functions defined within -the body of a class to be marked inline even if they are not explicitly -declared with the 'inline' keyword. You can override this with -'-fno-default-inline'; *note Options Controlling C++ Dialect: C++ -Dialect Options. - - GCC does not inline any functions when not optimizing unless you -specify the 'always_inline' attribute for the function, like this: - - /* Prototype. */ - inline void foo (const char) __attribute__((always_inline)); - - The remainder of this section is specific to GNU C90 inlining. - - When an inline function is not 'static', then the compiler must assume -that there may be calls from other source files; since a global symbol -can be defined only once in any program, the function must not be -defined in the other source files, so the calls therein cannot be -integrated. Therefore, a non-'static' inline function is always -compiled on its own in the usual fashion. - - If you specify both 'inline' and 'extern' in the function definition, -then the definition is used only for inlining. In no case is the -function compiled on its own, not even if you refer to its address -explicitly. Such an address becomes an external reference, as if you -had only declared the function, and had not defined it. - - This combination of 'inline' and 'extern' has almost the effect of a -macro. The way to use it is to put a function definition in a header -file with these keywords, and put another copy of the definition -(lacking 'inline' and 'extern') in a library file. The definition in -the header file causes most calls to the function to be inlined. If any -uses of the function remain, they refer to the single copy in the -library. - - -File: gcc.info, Node: Volatiles, Next: Extended Asm, Prev: Inline, Up: C Extensions - -6.40 When is a Volatile Object Accessed? -======================================== - -C has the concept of volatile objects. These are normally accessed by -pointers and used for accessing hardware or inter-thread communication. -The standard encourages compilers to refrain from optimizations -concerning accesses to volatile objects, but leaves it implementation -defined as to what constitutes a volatile access. The minimum -requirement is that at a sequence point all previous accesses to -volatile objects have stabilized and no subsequent accesses have -occurred. Thus an implementation is free to reorder and combine -volatile accesses that occur between sequence points, but cannot do so -for accesses across a sequence point. The use of volatile does not -allow you to violate the restriction on updating objects multiple times -between two sequence points. - - Accesses to non-volatile objects are not ordered with respect to -volatile accesses. You cannot use a volatile object as a memory barrier -to order a sequence of writes to non-volatile memory. For instance: - - int *ptr = SOMETHING; - volatile int vobj; - *ptr = SOMETHING; - vobj = 1; - -Unless *PTR and VOBJ can be aliased, it is not guaranteed that the write -to *PTR occurs by the time the update of VOBJ happens. If you need this -guarantee, you must use a stronger memory barrier such as: - - int *ptr = SOMETHING; - volatile int vobj; - *ptr = SOMETHING; - asm volatile ("" : : : "memory"); - vobj = 1; - - A scalar volatile object is read when it is accessed in a void context: - - volatile int *src = SOMEVALUE; - *src; - - Such expressions are rvalues, and GCC implements this as a read of the -volatile object being pointed to. - - Assignments are also expressions and have an rvalue. However when -assigning to a scalar volatile, the volatile object is not reread, -regardless of whether the assignment expression's rvalue is used or not. -If the assignment's rvalue is used, the value is that assigned to the -volatile object. For instance, there is no read of VOBJ in all the -following cases: - - int obj; - volatile int vobj; - vobj = SOMETHING; - obj = vobj = SOMETHING; - obj ? vobj = ONETHING : vobj = ANOTHERTHING; - obj = (SOMETHING, vobj = ANOTHERTHING); - - If you need to read the volatile object after an assignment has -occurred, you must use a separate expression with an intervening -sequence point. - - As bit-fields are not individually addressable, volatile bit-fields may -be implicitly read when written to, or when adjacent bit-fields are -accessed. Bit-field operations may be optimized such that adjacent -bit-fields are only partially accessed, if they straddle a storage unit -boundary. For these reasons it is unwise to use volatile bit-fields to -access hardware. - - -File: gcc.info, Node: Extended Asm, Next: Constraints, Prev: Volatiles, Up: C Extensions - -6.41 Assembler Instructions with C Expression Operands -====================================================== - -In an assembler instruction using 'asm', you can specify the operands of -the instruction using C expressions. This means you need not guess -which registers or memory locations contain the data you want to use. - - You must specify an assembler instruction template much like what -appears in a machine description, plus an operand constraint string for -each operand. - - For example, here is how to use the 68881's 'fsinx' instruction: - - asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); - -Here 'angle' is the C expression for the input operand while 'result' is -that of the output operand. Each has '"f"' as its operand constraint, -saying that a floating-point register is required. The '=' in '=f' -indicates that the operand is an output; all output operands' -constraints must use '='. The constraints use the same language used in -the machine description (*note Constraints::). - - Each operand is described by an operand-constraint string followed by -the C expression in parentheses. A colon separates the assembler -template from the first output operand and another separates the last -output operand from the first input, if any. Commas separate the -operands within each group. The total number of operands is currently -limited to 30; this limitation may be lifted in some future version of -GCC. - - If there are no output operands but there are input operands, you must -place two consecutive colons surrounding the place where the output -operands would go. - - As of GCC version 3.1, it is also possible to specify input and output -operands using symbolic names which can be referenced within the -assembler code. These names are specified inside square brackets -preceding the constraint string, and can be referenced inside the -assembler code using '%[NAME]' instead of a percentage sign followed by -the operand number. Using named operands the above example could look -like: - - asm ("fsinx %[angle],%[output]" - : [output] "=f" (result) - : [angle] "f" (angle)); - -Note that the symbolic operand names have no relation whatsoever to -other C identifiers. You may use any name you like, even those of -existing C symbols, but you must ensure that no two operands within the -same assembler construct use the same symbolic name. - - Output operand expressions must be lvalues; the compiler can check -this. The input operands need not be lvalues. The compiler cannot -check whether the operands have data types that are reasonable for the -instruction being executed. It does not parse the assembler instruction -template and does not know what it means or even whether it is valid -assembler input. The extended 'asm' feature is most often used for -machine instructions the compiler itself does not know exist. If the -output expression cannot be directly addressed (for example, it is a -bit-field), your constraint must allow a register. In that case, GCC -uses the register as the output of the 'asm', and then stores that -register into the output. - - The ordinary output operands must be write-only; GCC assumes that the -values in these operands before the instruction are dead and need not be -generated. Extended asm supports input-output or read-write operands. -Use the constraint character '+' to indicate such an operand and list it -with the output operands. - - You may, as an alternative, logically split its function into two -separate operands, one input operand and one write-only output operand. -The connection between them is expressed by constraints that say they -need to be in the same location when the instruction executes. You can -use the same C expression for both operands, or different expressions. -For example, here we write the (fictitious) 'combine' instruction with -'bar' as its read-only source operand and 'foo' as its read-write -destination: - - asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar)); - -The constraint '"0"' for operand 1 says that it must occupy the same -location as operand 0. A number in constraint is allowed only in an -input operand and it must refer to an output operand. - - Only a number in the constraint can guarantee that one operand is in -the same place as another. The mere fact that 'foo' is the value of -both operands is not enough to guarantee that they are in the same place -in the generated assembler code. The following does not work reliably: - - asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar)); - - Various optimizations or reloading could cause operands 0 and 1 to be -in different registers; GCC knows no reason not to do so. For example, -the compiler might find a copy of the value of 'foo' in one register and -use it for operand 1, but generate the output operand 0 in a different -register (copying it afterward to 'foo''s own address). Of course, -since the register for operand 1 is not even mentioned in the assembler -code, the result will not work, but GCC can't tell that. - - As of GCC version 3.1, one may write '[NAME]' instead of the operand -number for a matching constraint. For example: - - asm ("cmoveq %1,%2,%[result]" - : [result] "=r"(result) - : "r" (test), "r"(new), "[result]"(old)); - - Sometimes you need to make an 'asm' operand be a specific register, but -there's no matching constraint letter for that register _by itself_. To -force the operand into that register, use a local variable for the -operand and specify the register in the variable declaration. *Note -Explicit Reg Vars::. Then for the 'asm' operand, use any register -constraint letter that matches the register: - - register int *p1 asm ("r0") = ...; - register int *p2 asm ("r1") = ...; - register int *result asm ("r0"); - asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); - - In the above example, beware that a register that is call-clobbered by -the target ABI will be overwritten by any function call in the -assignment, including library calls for arithmetic operators. Also a -register may be clobbered when generating some operations, like variable -shift, memory copy or memory move on x86. Assuming it is a -call-clobbered register, this may happen to 'r0' above by the assignment -to 'p2'. If you have to use such a register, use temporary variables -for expressions between the register assignment and use: - - int t1 = ...; - register int *p1 asm ("r0") = ...; - register int *p2 asm ("r1") = t1; - register int *result asm ("r0"); - asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); - - Some instructions clobber specific hard registers. To describe this, -write a third colon after the input operands, followed by the names of -the clobbered hard registers (given as strings). Here is a realistic -example for the VAX: - - asm volatile ("movc3 %0,%1,%2" - : /* no outputs */ - : "g" (from), "g" (to), "g" (count) - : "r0", "r1", "r2", "r3", "r4", "r5"); - - You may not write a clobber description in a way that overlaps with an -input or output operand. For example, you may not have an operand -describing a register class with one member if you mention that register -in the clobber list. Variables declared to live in specific registers -(*note Explicit Reg Vars::), and used as asm input or output operands -must have no part mentioned in the clobber description. There is no way -for you to specify that an input operand is modified without also -specifying it as an output operand. Note that if all the output -operands you specify are for this purpose (and hence unused), you then -also need to specify 'volatile' for the 'asm' construct, as described -below, to prevent GCC from deleting the 'asm' statement as unused. - - If you refer to a particular hardware register from the assembler code, -you probably have to list the register after the third colon to tell the -compiler the register's value is modified. In some assemblers, the -register names begin with '%'; to produce one '%' in the assembler code, -you must write '%%' in the input. - - If your assembler instruction can alter the condition code register, -add 'cc' to the list of clobbered registers. GCC on some machines -represents the condition codes as a specific hardware register; 'cc' -serves to name this register. On other machines, the condition code is -handled differently, and specifying 'cc' has no effect. But it is valid -no matter what the machine. - - If your assembler instructions access memory in an unpredictable -fashion, add 'memory' to the list of clobbered registers. This causes -GCC to not keep memory values cached in registers across the assembler -instruction and not optimize stores or loads to that memory. You also -should add the 'volatile' keyword if the memory affected is not listed -in the inputs or outputs of the 'asm', as the 'memory' clobber does not -count as a side-effect of the 'asm'. If you know how large the accessed -memory is, you can add it as input or output but if this is not known, -you should add 'memory'. As an example, if you access ten bytes of a -string, you can use a memory input like: - - {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}. - - Note that in the following example the memory input is necessary, -otherwise GCC might optimize the store to 'x' away: - int foo () - { - int x = 42; - int *y = &x; - int result; - asm ("magic stuff accessing an 'int' pointed to by '%1'" - : "=&d" (result) : "a" (y), "m" (*y)); - return result; - } - - You can put multiple assembler instructions together in a single 'asm' -template, separated by the characters normally used in assembly code for -the system. A combination that works in most places is a newline to -break the line, plus a tab character to move to the instruction field -(written as '\n\t'). Sometimes semicolons can be used, if the assembler -allows semicolons as a line-breaking character. Note that some -assembler dialects use semicolons to start a comment. The input -operands are guaranteed not to use any of the clobbered registers, and -neither do the output operands' addresses, so you can read and write the -clobbered registers as many times as you like. Here is an example of -multiple instructions in a template; it assumes the subroutine '_foo' -accepts arguments in registers 9 and 10: - - asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo" - : /* no outputs */ - : "g" (from), "g" (to) - : "r9", "r10"); - - Unless an output operand has the '&' constraint modifier, GCC may -allocate it in the same register as an unrelated input operand, on the -assumption the inputs are consumed before the outputs are produced. -This assumption may be false if the assembler code actually consists of -more than one instruction. In such a case, use '&' for each output -operand that may not overlap an input. *Note Modifiers::. - - If you want to test the condition code produced by an assembler -instruction, you must include a branch and a label in the 'asm' -construct, as follows: - - asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:" - : "g" (result) - : "g" (input)); - -This assumes your assembler supports local labels, as the GNU assembler -and most Unix assemblers do. - - Speaking of labels, jumps from one 'asm' to another are not supported. -The compiler's optimizers do not know about these jumps, and therefore -they cannot take account of them when deciding how to optimize. *Note -Extended asm with goto::. - - Usually the most convenient way to use these 'asm' instructions is to -encapsulate them in macros that look like functions. For example, - - #define sin(x) \ - ({ double __value, __arg = (x); \ - asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \ - __value; }) - -Here the variable '__arg' is used to make sure that the instruction -operates on a proper 'double' value, and to accept only those arguments -'x' that can convert automatically to a 'double'. - - Another way to make sure the instruction operates on the correct data -type is to use a cast in the 'asm'. This is different from using a -variable '__arg' in that it converts more different types. For example, -if the desired type is 'int', casting the argument to 'int' accepts a -pointer with no complaint, while assigning the argument to an 'int' -variable named '__arg' warns about using a pointer unless the caller -explicitly casts it. - - If an 'asm' has output operands, GCC assumes for optimization purposes -the instruction has no side effects except to change the output -operands. This does not mean instructions with a side effect cannot be -used, but you must be careful, because the compiler may eliminate them -if the output operands aren't used, or move them out of loops, or -replace two with one if they constitute a common subexpression. Also, -if your instruction does have a side effect on a variable that otherwise -appears not to change, the old value of the variable may be reused later -if it happens to be found in a register. - - You can prevent an 'asm' instruction from being deleted by writing the -keyword 'volatile' after the 'asm'. For example: - - #define get_and_set_priority(new) \ - ({ int __old; \ - asm volatile ("get_and_set_priority %0, %1" \ - : "=g" (__old) : "g" (new)); \ - __old; }) - -The 'volatile' keyword indicates that the instruction has important -side-effects. GCC does not delete a volatile 'asm' if it is reachable. -(The instruction can still be deleted if GCC can prove that control flow -never reaches the location of the instruction.) Note that even a -volatile 'asm' instruction can be moved relative to other code, -including across jump instructions. For example, on many targets there -is a system register that can be set to control the rounding mode of -floating-point operations. You might try setting it with a volatile -'asm', like this PowerPC example: - - asm volatile("mtfsf 255,%0" : : "f" (fpenv)); - sum = x + y; - -This does not work reliably, as the compiler may move the addition back -before the volatile 'asm'. To make it work you need to add an -artificial dependency to the 'asm' referencing a variable in the code -you don't want moved, for example: - - asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv)); - sum = x + y; - - Similarly, you can't expect a sequence of volatile 'asm' instructions -to remain perfectly consecutive. If you want consecutive output, use a -single 'asm'. Also, GCC performs some optimizations across a volatile -'asm' instruction; GCC does not "forget everything" when it encounters a -volatile 'asm' instruction the way some other compilers do. - - An 'asm' instruction without any output operands is treated identically -to a volatile 'asm' instruction. - - It is a natural idea to look for a way to give access to the condition -code left by the assembler instruction. However, when we attempted to -implement this, we found no way to make it work reliably. The problem -is that output operands might need reloading, which result in additional -following "store" instructions. On most machines, these instructions -alter the condition code before there is time to test it. This problem -doesn't arise for ordinary "test" and "compare" instructions because -they don't have any output operands. - - For reasons similar to those described above, it is not possible to -give an assembler instruction access to the condition code left by -previous instructions. - - As of GCC version 4.5, 'asm goto' may be used to have the assembly jump -to one or more C labels. In this form, a fifth section after the -clobber list contains a list of all C labels to which the assembly may -jump. Each label operand is implicitly self-named. The 'asm' is also -assumed to fall through to the next statement. - - This form of 'asm' is restricted to not have outputs. This is due to a -internal restriction in the compiler that control transfer instructions -cannot have outputs. This restriction on 'asm goto' may be lifted in -some future version of the compiler. In the meantime, 'asm goto' may -include a memory clobber, and so leave outputs in memory. - - int frob(int x) - { - int y; - asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5" - : : "r"(x), "r"(&y) : "r5", "memory" : error); - return y; - error: - return -1; - } - -In this (inefficient) example, the 'frob' instruction sets the carry bit -to indicate an error. The 'jc' instruction detects this and branches to -the 'error' label. Finally, the output of the 'frob' instruction -('%r5') is stored into the memory for variable 'y', which is later read -by the 'return' statement. - - void doit(void) - { - int i = 0; - asm goto ("mfsr %%r1, 123; jmp %%r1;" - ".pushsection doit_table;" - ".long %l0, %l1, %l2, %l3;" - ".popsection" - : : : "r1" : label1, label2, label3, label4); - __builtin_unreachable (); - - label1: - f1(); - return; - label2: - f2(); - return; - label3: - i = 1; - label4: - f3(i); - } - -In this (also inefficient) example, the 'mfsr' instruction reads an -address from some out-of-band machine register, and the following 'jmp' -instruction branches to that address. The address read by the 'mfsr' -instruction is assumed to have been previously set via some -application-specific mechanism to be one of the four values stored in -the 'doit_table' section. Finally, the 'asm' is followed by a call to -'__builtin_unreachable' to indicate that the 'asm' does not in fact fall -through. - - #define TRACE1(NUM) \ - do { \ - asm goto ("0: nop;" \ - ".pushsection trace_table;" \ - ".long 0b, %l0;" \ - ".popsection" \ - : : : : trace#NUM); \ - if (0) { trace#NUM: trace(); } \ - } while (0) - #define TRACE TRACE1(__COUNTER__) - -In this example (which in fact inspired the 'asm goto' feature) we want -on rare occasions to call the 'trace' function; on other occasions we'd -like to keep the overhead to the absolute minimum. The normal code path -consists of a single 'nop' instruction. However, we record the address -of this 'nop' together with the address of a label that calls the -'trace' function. This allows the 'nop' instruction to be patched at -run time to be an unconditional branch to the stored label. It is -assumed that an optimizing compiler moves the labeled block out of line, -to optimize the fall through path from the 'asm'. - - If you are writing a header file that should be includable in ISO C -programs, write '__asm__' instead of 'asm'. *Note Alternate Keywords::. - -6.41.1 Size of an 'asm' ------------------------ - -Some targets require that GCC track the size of each instruction used in -order to generate correct code. Because the final length of an 'asm' is -only known by the assembler, GCC must make an estimate as to how big it -will be. The estimate is formed by counting the number of statements in -the pattern of the 'asm' and multiplying that by the length of the -longest instruction on that processor. Statements in the 'asm' are -identified by newline characters and whatever statement separator -characters are supported by the assembler; on most processors this is -the ';' character. - - Normally, GCC's estimate is perfectly adequate to ensure that correct -code is generated, but it is possible to confuse the compiler if you use -pseudo instructions or assembler macros that expand into multiple real -instructions or if you use assembler directives that expand to more -space in the object file than is needed for a single instruction. If -this happens then the assembler produces a diagnostic saying that a -label is unreachable. - -6.41.2 i386 floating-point asm operands ---------------------------------------- - -On i386 targets, there are several rules on the usage of stack-like -registers in the operands of an 'asm'. These rules apply only to the -operands that are stack-like registers: - - 1. Given a set of input registers that die in an 'asm', it is - necessary to know which are implicitly popped by the 'asm', and - which must be explicitly popped by GCC. - - An input register that is implicitly popped by the 'asm' must be - explicitly clobbered, unless it is constrained to match an output - operand. - - 2. For any input register that is implicitly popped by an 'asm', it is - necessary to know how to adjust the stack to compensate for the - pop. If any non-popped input is closer to the top of the reg-stack - than the implicitly popped register, it would not be possible to - know what the stack looked like--it's not clear how the rest of the - stack "slides up". - - All implicitly popped input registers must be closer to the top of - the reg-stack than any input that is not implicitly popped. - - It is possible that if an input dies in an 'asm', the compiler - might use the input register for an output reload. Consider this - example: - - asm ("foo" : "=t" (a) : "f" (b)); - - This code says that input 'b' is not popped by the 'asm', and that - the 'asm' pushes a result onto the reg-stack, i.e., the stack is - one deeper after the 'asm' than it was before. But, it is possible - that reload may think that it can use the same register for both - the input and the output. - - To prevent this from happening, if any input operand uses the 'f' - constraint, all output register constraints must use the '&' - early-clobber modifier. - - The example above would be correctly written as: - - asm ("foo" : "=&t" (a) : "f" (b)); - - 3. Some operands need to be in particular places on the stack. All - output operands fall in this category--GCC has no other way to know - which registers the outputs appear in unless you indicate this in - the constraints. - - Output operands must specifically indicate which register an output - appears in after an 'asm'. '=f' is not allowed: the operand - constraints must select a class with a single register. - - 4. Output operands may not be "inserted" between existing stack - registers. Since no 387 opcode uses a read/write operand, all - output operands are dead before the 'asm', and are pushed by the - 'asm'. It makes no sense to push anywhere but the top of the - reg-stack. - - Output operands must start at the top of the reg-stack: output - operands may not "skip" a register. - - 5. Some 'asm' statements may need extra stack space for internal - calculations. This can be guaranteed by clobbering stack registers - unrelated to the inputs and outputs. - - Here are a couple of reasonable 'asm's to want to write. This 'asm' -takes one input, which is internally popped, and produces two outputs. - - asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp)); - -This 'asm' takes two inputs, which are popped by the 'fyl2xp1' opcode, -and replaces them with one output. The 'st(1)' clobber is necessary for -the compiler to know that 'fyl2xp1' pops both inputs. - - asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)"); - - -File: gcc.info, Node: Constraints, Next: Asm Labels, Prev: Extended Asm, Up: C Extensions - -6.42 Constraints for 'asm' Operands -=================================== - -Here are specific details on what constraint letters you can use with -'asm' operands. Constraints can say whether an operand may be in a -register, and which kinds of register; whether the operand can be a -memory reference, and which kinds of address; whether the operand may be -an immediate constant, and which possible values it may have. -Constraints can also require two operands to match. Side-effects aren't -allowed in operands of inline 'asm', unless '<' or '>' constraints are -used, because there is no guarantee that the side-effects will happen -exactly once in an instruction that can update the addressing register. - -* Menu: - -* Simple Constraints:: Basic use of constraints. -* Multi-Alternative:: When an insn has two alternative constraint-patterns. -* Modifiers:: More precise control over effects of constraints. -* Machine Constraints:: Special constraints for some particular machines. - - -File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints - -6.42.1 Simple Constraints -------------------------- - -The simplest kind of constraint is a string full of letters, each of -which describes one kind of operand that is permitted. Here are the -letters that are allowed: - -whitespace - Whitespace characters are ignored and can be inserted at any - position except the first. This enables each alternative for - different operands to be visually aligned in the machine - description even if they have different number of constraints and - modifiers. - -'m' - A memory operand is allowed, with any kind of address that the - machine supports in general. Note that the letter used for the - general memory constraint can be re-defined by a back end using the - 'TARGET_MEM_CONSTRAINT' macro. - -'o' - A memory operand is allowed, but only if the address is - "offsettable". This means that adding a small integer (actually, - the width in bytes of the operand, as determined by its machine - mode) may be added to the address and the result is also a valid - memory address. - - For example, an address which is constant is offsettable; so is an - address that is the sum of a register and a constant (as long as a - slightly larger constant is also within the range of - address-offsets supported by the machine); but an autoincrement or - autodecrement address is not offsettable. More complicated - indirect/indexed addresses may or may not be offsettable depending - on the other addressing modes that the machine supports. - - Note that in an output operand which can be matched by another - operand, the constraint letter 'o' is valid only when accompanied - by both '<' (if the target machine has predecrement addressing) and - '>' (if the target machine has preincrement addressing). - -'V' - A memory operand that is not offsettable. In other words, anything - that would fit the 'm' constraint but not the 'o' constraint. - -'<' - A memory operand with autodecrement addressing (either predecrement - or postdecrement) is allowed. In inline 'asm' this constraint is - only allowed if the operand is used exactly once in an instruction - that can handle the side-effects. Not using an operand with '<' in - constraint string in the inline 'asm' pattern at all or using it in - multiple instructions isn't valid, because the side-effects - wouldn't be performed or would be performed more than once. - Furthermore, on some targets the operand with '<' in constraint - string must be accompanied by special instruction suffixes like - '%U0' instruction suffix on PowerPC or '%P0' on IA-64. - -'>' - A memory operand with autoincrement addressing (either preincrement - or postincrement) is allowed. In inline 'asm' the same - restrictions as for '<' apply. - -'r' - A register operand is allowed provided that it is in a general - register. - -'i' - An immediate integer operand (one with constant value) is allowed. - This includes symbolic constants whose values will be known only at - assembly time or later. - -'n' - An immediate integer operand with a known numeric value is allowed. - Many systems cannot support assembly-time constants for operands - less than a word wide. Constraints for these operands should use - 'n' rather than 'i'. - -'I', 'J', 'K', ... 'P' - Other letters in the range 'I' through 'P' may be defined in a - machine-dependent fashion to permit immediate integer operands with - explicit integer values in specified ranges. For example, on the - 68000, 'I' is defined to stand for the range of values 1 to 8. - This is the range permitted as a shift count in the shift - instructions. - -'E' - An immediate floating operand (expression code 'const_double') is - allowed, but only if the target floating point format is the same - as that of the host machine (on which the compiler is running). - -'F' - An immediate floating operand (expression code 'const_double' or - 'const_vector') is allowed. - -'G', 'H' - 'G' and 'H' may be defined in a machine-dependent fashion to permit - immediate floating operands in particular ranges of values. - -'s' - An immediate integer operand whose value is not an explicit integer - is allowed. - - This might appear strange; if an insn allows a constant operand - with a value not known at compile time, it certainly must allow any - known value. So why use 's' instead of 'i'? Sometimes it allows - better code to be generated. - - For example, on the 68000 in a fullword instruction it is possible - to use an immediate operand; but if the immediate value is between - -128 and 127, better code results from loading the value into a - register and using the register. This is because the load into the - register can be done with a 'moveq' instruction. We arrange for - this to happen by defining the letter 'K' to mean "any integer - outside the range -128 to 127", and then specifying 'Ks' in the - operand constraints. - -'g' - Any register, memory or immediate integer operand is allowed, - except for registers that are not general registers. - -'X' - Any operand whatsoever is allowed. - -'0', '1', '2', ... '9' - An operand that matches the specified operand number is allowed. - If a digit is used together with letters within the same - alternative, the digit should come last. - - This number is allowed to be more than a single digit. If multiple - digits are encountered consecutively, they are interpreted as a - single decimal integer. There is scant chance for ambiguity, since - to-date it has never been desirable that '10' be interpreted as - matching either operand 1 _or_ operand 0. Should this be desired, - one can use multiple alternatives instead. - - This is called a "matching constraint" and what it really means is - that the assembler has only a single operand that fills two roles - which 'asm' distinguishes. For example, an add instruction uses - two input operands and an output operand, but on most CISC machines - an add instruction really has only two operands, one of them an - input-output operand: - - addl #35,r12 - - Matching constraints are used in these circumstances. More - precisely, the two operands that match must include one input-only - operand and one output-only operand. Moreover, the digit must be a - smaller number than the number of the operand that uses it in the - constraint. - -'p' - An operand that is a valid memory address is allowed. This is for - "load address" and "push address" instructions. - - 'p' in the constraint must be accompanied by 'address_operand' as - the predicate in the 'match_operand'. This predicate interprets - the mode specified in the 'match_operand' as the mode of the memory - reference for which the address would be valid. - -OTHER-LETTERS - Other letters can be defined in machine-dependent fashion to stand - for particular classes of registers or other arbitrary operand - types. 'd', 'a' and 'f' are defined on the 68000/68020 to stand - for data, address and floating point registers. - - -File: gcc.info, Node: Multi-Alternative, Next: Modifiers, Prev: Simple Constraints, Up: Constraints - -6.42.2 Multiple Alternative Constraints ---------------------------------------- - -Sometimes a single instruction has multiple alternative sets of possible -operands. For example, on the 68000, a logical-or instruction can -combine register or an immediate value into memory, or it can combine -any kind of operand into a register; but it cannot combine one memory -location into another. - - These constraints are represented as multiple alternatives. An -alternative can be described by a series of letters for each operand. -The overall constraint for an operand is made from the letters for this -operand from the first alternative, a comma, the letters for this -operand from the second alternative, a comma, and so on until the last -alternative. - - If all the operands fit any one alternative, the instruction is valid. -Otherwise, for each alternative, the compiler counts how many -instructions must be added to copy the operands so that that alternative -applies. The alternative requiring the least copying is chosen. If two -alternatives need the same amount of copying, the one that comes first -is chosen. These choices can be altered with the '?' and '!' -characters: - -'?' - Disparage slightly the alternative that the '?' appears in, as a - choice when no alternative applies exactly. The compiler regards - this alternative as one unit more costly for each '?' that appears - in it. - -'!' - Disparage severely the alternative that the '!' appears in. This - alternative can still be used if it fits without reloading, but if - reloading is needed, some other alternative will be used. - - -File: gcc.info, Node: Modifiers, Next: Machine Constraints, Prev: Multi-Alternative, Up: Constraints - -6.42.3 Constraint Modifier Characters -------------------------------------- - -Here are constraint modifier characters. - -'=' - Means that this operand is write-only for this instruction: the - previous value is discarded and replaced by output data. - -'+' - Means that this operand is both read and written by the - instruction. - - When the compiler fixes up the operands to satisfy the constraints, - it needs to know which operands are inputs to the instruction and - which are outputs from it. '=' identifies an output; '+' - identifies an operand that is both input and output; all other - operands are assumed to be input only. - - If you specify '=' or '+' in a constraint, you put it in the first - character of the constraint string. - -'&' - Means (in a particular alternative) that this operand is an - "earlyclobber" operand, which is modified before the instruction is - finished using the input operands. Therefore, this operand may not - lie in a register that is used as an input operand or as part of - any memory address. - - '&' applies only to the alternative in which it is written. In - constraints with multiple alternatives, sometimes one alternative - requires '&' while others do not. See, for example, the 'movdf' - insn of the 68000. - - An input operand can be tied to an earlyclobber operand if its only - use as an input occurs before the early result is written. Adding - alternatives of this form often allows GCC to produce better code - when only some of the inputs can be affected by the earlyclobber. - See, for example, the 'mulsi3' insn of the ARM. - - '&' does not obviate the need to write '='. - -'%' - Declares the instruction to be commutative for this operand and the - following operand. This means that the compiler may interchange - the two operands if that is the cheapest way to make all operands - fit the constraints. GCC can only handle one commutative pair in - an asm; if you use more, the compiler may fail. Note that you need - not use the modifier if the two alternatives are strictly - identical; this would only waste time in the reload pass. The - modifier is not operational after register allocation, so the - result of 'define_peephole2' and 'define_split's performed after - reload cannot rely on '%' to make the intended insn match. - -'#' - Says that all following characters, up to the next comma, are to be - ignored as a constraint. They are significant only for choosing - register preferences. - -'*' - Says that the following character should be ignored when choosing - register preferences. '*' has no effect on the meaning of the - constraint as a constraint, and no effect on reloading. For LRA - '*' additionally disparages slightly the alternative if the - following character matches the operand. - - -File: gcc.info, Node: Machine Constraints, Prev: Modifiers, Up: Constraints - -6.42.4 Constraints for Particular Machines ------------------------------------------- - -Whenever possible, you should use the general-purpose constraint letters -in 'asm' arguments, since they will convey meaning more readily to -people reading your code. Failing that, use the constraint letters that -usually have very similar meanings across architectures. The most -commonly used constraints are 'm' and 'r' (for memory and -general-purpose registers respectively; *note Simple Constraints::), and -'I', usually the letter indicating the most common immediate-constant -format. - - Each architecture defines additional constraints. These constraints -are used by the compiler itself for instruction generation, as well as -for 'asm' statements; therefore, some of the constraints are not -particularly useful for 'asm'. Here is a summary of some of the -machine-dependent constraints available on some particular machines; it -includes both constraints that are useful for 'asm' and constraints that -aren't. The compiler source file mentioned in the table heading for -each architecture is the definitive reference for the meanings of that -architecture's constraints. - -_AArch64 family--'config/aarch64/constraints.md'_ - 'k' - The stack pointer register ('SP') - - 'w' - Floating point or SIMD vector register - - 'I' - Integer constant that is valid as an immediate operand in an - 'ADD' instruction - - 'J' - Integer constant that is valid as an immediate operand in a - 'SUB' instruction (once negated) - - 'K' - Integer constant that can be used with a 32-bit logical - instruction - - 'L' - Integer constant that can be used with a 64-bit logical - instruction - - 'M' - Integer constant that is valid as an immediate operand in a - 32-bit 'MOV' pseudo instruction. The 'MOV' may be assembled - to one of several different machine instructions depending on - the value - - 'N' - Integer constant that is valid as an immediate operand in a - 64-bit 'MOV' pseudo instruction - - 'S' - An absolute symbolic address or a label reference - - 'Y' - Floating point constant zero - - 'Z' - Integer constant zero - - 'Ush' - The high part (bits 12 and upwards) of the pc-relative address - of a symbol within 4GB of the instruction - - 'Q' - A memory address which uses a single base register with no - offset - - 'Ump' - A memory address suitable for a load/store pair instruction in - SI, DI, SF and DF modes - -_ARC --'config/arc/constraints.md'_ - 'q' - Registers usable in ARCompact 16-bit instructions: 'r0'-'r3', - 'r12'-'r15'. This constraint can only match when the '-mq' - option is in effect. - - 'e' - Registers usable as base-regs of memory addresses in ARCompact - 16-bit memory instructions: 'r0'-'r3', 'r12'-'r15', 'sp'. - This constraint can only match when the '-mq' option is in - effect. - 'D' - ARC FPX (dpfp) 64-bit registers. 'D0', 'D1'. - - 'I' - A signed 12-bit integer constant. - - 'Cal' - constant for arithmetic/logical operations. This might be any - constant that can be put into a long immediate by the assmbler - or linker without involving a PIC relocation. - - 'K' - A 3-bit unsigned integer constant. - - 'L' - A 6-bit unsigned integer constant. - - 'CnL' - One's complement of a 6-bit unsigned integer constant. - - 'CmL' - Two's complement of a 6-bit unsigned integer constant. - - 'M' - A 5-bit unsigned integer constant. - - 'O' - A 7-bit unsigned integer constant. - - 'P' - A 8-bit unsigned integer constant. - - 'H' - Any const_double value. - -_ARM family--'config/arm/constraints.md'_ - 'w' - VFP floating-point register - - 'G' - The floating-point constant 0.0 - - 'I' - Integer that is valid as an immediate operand in a data - processing instruction. That is, an integer in the range 0 to - 255 rotated by a multiple of 2 - - 'J' - Integer in the range -4095 to 4095 - - 'K' - Integer that satisfies constraint 'I' when inverted (ones - complement) - - 'L' - Integer that satisfies constraint 'I' when negated (twos - complement) - - 'M' - Integer in the range 0 to 32 - - 'Q' - A memory reference where the exact address is in a single - register (''m'' is preferable for 'asm' statements) - - 'R' - An item in the constant pool - - 'S' - A symbol in the text segment of the current file - - 'Uv' - A memory reference suitable for VFP load/store insns - (reg+constant offset) - - 'Uy' - A memory reference suitable for iWMMXt load/store - instructions. - - 'Uq' - A memory reference suitable for the ARMv4 ldrsb instruction. - -_AVR family--'config/avr/constraints.md'_ - 'l' - Registers from r0 to r15 - - 'a' - Registers from r16 to r23 - - 'd' - Registers from r16 to r31 - - 'w' - Registers from r24 to r31. These registers can be used in - 'adiw' command - - 'e' - Pointer register (r26-r31) - - 'b' - Base pointer register (r28-r31) - - 'q' - Stack pointer register (SPH:SPL) - - 't' - Temporary register r0 - - 'x' - Register pair X (r27:r26) - - 'y' - Register pair Y (r29:r28) - - 'z' - Register pair Z (r31:r30) - - 'I' - Constant greater than -1, less than 64 - - 'J' - Constant greater than -64, less than 1 - - 'K' - Constant integer 2 - - 'L' - Constant integer 0 - - 'M' - Constant that fits in 8 bits - - 'N' - Constant integer -1 - - 'O' - Constant integer 8, 16, or 24 - - 'P' - Constant integer 1 - - 'G' - A floating point constant 0.0 - - 'Q' - A memory address based on Y or Z pointer with displacement. - -_Epiphany--'config/epiphany/constraints.md'_ - 'U16' - An unsigned 16-bit constant. - - 'K' - An unsigned 5-bit constant. - - 'L' - A signed 11-bit constant. - - 'Cm1' - A signed 11-bit constant added to -1. Can only match when the - '-m1reg-REG' option is active. - - 'Cl1' - Left-shift of -1, i.e., a bit mask with a block of leading - ones, the rest being a block of trailing zeroes. Can only - match when the '-m1reg-REG' option is active. - - 'Cr1' - Right-shift of -1, i.e., a bit mask with a trailing block of - ones, the rest being zeroes. Or to put it another way, one - less than a power of two. Can only match when the - '-m1reg-REG' option is active. - - 'Cal' - Constant for arithmetic/logical operations. This is like 'i', - except that for position independent code, no symbols / - expressions needing relocations are allowed. - - 'Csy' - Symbolic constant for call/jump instruction. - - 'Rcs' - The register class usable in short insns. This is a register - class constraint, and can thus drive register allocation. - This constraint won't match unless '-mprefer-short-insn-regs' - is in effect. - - 'Rsc' - The the register class of registers that can be used to hold a - sibcall call address. I.e., a caller-saved register. - - 'Rct' - Core control register class. - - 'Rgs' - The register group usable in short insns. This constraint - does not use a register class, so that it only passively - matches suitable registers, and doesn't drive register - allocation. - - 'Rra' - Matches the return address if it can be replaced with the link - register. - - 'Rcc' - Matches the integer condition code register. - - 'Sra' - Matches the return address if it is in a stack slot. - - 'Cfm' - Matches control register values to switch fp mode, which are - encapsulated in 'UNSPEC_FP_MODE'. - -_CR16 Architecture--'config/cr16/cr16.h'_ - - 'b' - Registers from r0 to r14 (registers without stack pointer) - - 't' - Register from r0 to r11 (all 16-bit registers) - - 'p' - Register from r12 to r15 (all 32-bit registers) - - 'I' - Signed constant that fits in 4 bits - - 'J' - Signed constant that fits in 5 bits - - 'K' - Signed constant that fits in 6 bits - - 'L' - Unsigned constant that fits in 4 bits - - 'M' - Signed constant that fits in 32 bits - - 'N' - Check for 64 bits wide constants for add/sub instructions - - 'G' - Floating point constant that is legal for store immediate - -_Hewlett-Packard PA-RISC--'config/pa/pa.h'_ - 'a' - General register 1 - - 'f' - Floating point register - - 'q' - Shift amount register - - 'x' - Floating point register (deprecated) - - 'y' - Upper floating point register (32-bit), floating point - register (64-bit) - - 'Z' - Any register - - 'I' - Signed 11-bit integer constant - - 'J' - Signed 14-bit integer constant - - 'K' - Integer constant that can be deposited with a 'zdepi' - instruction - - 'L' - Signed 5-bit integer constant - - 'M' - Integer constant 0 - - 'N' - Integer constant that can be loaded with a 'ldil' instruction - - 'O' - Integer constant whose value plus one is a power of 2 - - 'P' - Integer constant that can be used for 'and' operations in - 'depi' and 'extru' instructions - - 'S' - Integer constant 31 - - 'U' - Integer constant 63 - - 'G' - Floating-point constant 0.0 - - 'A' - A 'lo_sum' data-linkage-table memory operand - - 'Q' - A memory operand that can be used as the destination operand - of an integer store instruction - - 'R' - A scaled or unscaled indexed memory operand - - 'T' - A memory operand for floating-point loads and stores - - 'W' - A register indirect memory operand - -_picoChip family--'picochip.h'_ - 'k' - Stack register. - - 'f' - Pointer register. A register which can be used to access - memory without supplying an offset. Any other register can be - used to access memory, but will need a constant offset. In - the case of the offset being zero, it is more efficient to use - a pointer register, since this reduces code size. - - 't' - A twin register. A register which may be paired with an - adjacent register to create a 32-bit register. - - 'a' - Any absolute memory address (e.g., symbolic constant, symbolic - constant + offset). - - 'I' - 4-bit signed integer. - - 'J' - 4-bit unsigned integer. - - 'K' - 8-bit signed integer. - - 'M' - Any constant whose absolute value is no greater than 4-bits. - - 'N' - 10-bit signed integer - - 'O' - 16-bit signed integer. - -_PowerPC and IBM RS6000--'config/rs6000/constraints.md'_ - 'b' - Address base register - - 'd' - Floating point register (containing 64-bit value) - - 'f' - Floating point register (containing 32-bit value) - - 'v' - Altivec vector register - - 'wa' - Any VSX register if the -mvsx option was used or NO_REGS. - - 'wd' - VSX vector register to hold vector double data or NO_REGS. - - 'wf' - VSX vector register to hold vector float data or NO_REGS. - - 'wg' - If '-mmfpgpr' was used, a floating point register or NO_REGS. - - 'wl' - Floating point register if the LFIWAX instruction is enabled - or NO_REGS. - - 'wm' - VSX register if direct move instructions are enabled, or - NO_REGS. - - 'wn' - No register (NO_REGS). - - 'wr' - General purpose register if 64-bit instructions are enabled or - NO_REGS. - - 'ws' - VSX vector register to hold scalar double values or NO_REGS. - - 'wt' - VSX vector register to hold 128 bit integer or NO_REGS. - - 'wu' - Altivec register to use for float/32-bit int loads/stores or - NO_REGS. - - 'wv' - Altivec register to use for double loads/stores or NO_REGS. - - 'ww' - FP or VSX register to perform float operations under '-mvsx' - or NO_REGS. - - 'wx' - Floating point register if the STFIWX instruction is enabled - or NO_REGS. - - 'wy' - VSX vector register to hold scalar float values or NO_REGS. - - 'wz' - Floating point register if the LFIWZX instruction is enabled - or NO_REGS. - - 'wD' - Int constant that is the element number of the 64-bit scalar - in a vector. - - 'wQ' - A memory address that will work with the 'lq' and 'stq' - instructions. - - 'h' - 'MQ', 'CTR', or 'LINK' register - - 'q' - 'MQ' register - - 'c' - 'CTR' register - - 'l' - 'LINK' register - - 'x' - 'CR' register (condition register) number 0 - - 'y' - 'CR' register (condition register) - - 'z' - 'XER[CA]' carry bit (part of the XER register) - - 'I' - Signed 16-bit constant - - 'J' - Unsigned 16-bit constant shifted left 16 bits (use 'L' instead - for 'SImode' constants) - - 'K' - Unsigned 16-bit constant - - 'L' - Signed 16-bit constant shifted left 16 bits - - 'M' - Constant larger than 31 - - 'N' - Exact power of 2 - - 'O' - Zero - - 'P' - Constant whose negation is a signed 16-bit constant - - 'G' - Floating point constant that can be loaded into a register - with one instruction per word - - 'H' - Integer/Floating point constant that can be loaded into a - register using three instructions - - 'm' - Memory operand. Normally, 'm' does not allow addresses that - update the base register. If '<' or '>' constraint is also - used, they are allowed and therefore on PowerPC targets in - that case it is only safe to use 'm<>' in an 'asm' statement - if that 'asm' statement accesses the operand exactly once. - The 'asm' statement must also use '%U<OPNO>' as a placeholder - for the "update" flag in the corresponding load or store - instruction. For example: - - asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val)); - - is correct but: - - asm ("st %1,%0" : "=m<>" (mem) : "r" (val)); - - is not. - - 'es' - A "stable" memory operand; that is, one which does not include - any automodification of the base register. This used to be - useful when 'm' allowed automodification of the base register, - but as those are now only allowed when '<' or '>' is used, - 'es' is basically the same as 'm' without '<' and '>'. - - 'Q' - Memory operand that is an offset from a register (it is - usually better to use 'm' or 'es' in 'asm' statements) - - 'Z' - Memory operand that is an indexed or indirect from a register - (it is usually better to use 'm' or 'es' in 'asm' statements) - - 'R' - AIX TOC entry - - 'a' - Address operand that is an indexed or indirect from a register - ('p' is preferable for 'asm' statements) - - 'S' - Constant suitable as a 64-bit mask operand - - 'T' - Constant suitable as a 32-bit mask operand - - 'U' - System V Release 4 small data area reference - - 't' - AND masks that can be performed by two rldic{l, r} - instructions - - 'W' - Vector constant that does not require memory - - 'j' - Vector constant that is all zeros. - -_Intel 386--'config/i386/constraints.md'_ - 'R' - Legacy register--the eight integer registers available on all - i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp'). - - 'q' - Any register accessible as 'Rl'. In 32-bit mode, 'a', 'b', - 'c', and 'd'; in 64-bit mode, any integer register. - - 'Q' - Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'. - - 'a' - The 'a' register. - - 'b' - The 'b' register. - - 'c' - The 'c' register. - - 'd' - The 'd' register. - - 'S' - The 'si' register. - - 'D' - The 'di' register. - - 'A' - The 'a' and 'd' registers. This class is used for - instructions that return double word results in the 'ax:dx' - register pair. Single word values will be allocated either in - 'ax' or 'dx'. For example on i386 the following implements - 'rdtsc': - - unsigned long long rdtsc (void) - { - unsigned long long tick; - __asm__ __volatile__("rdtsc":"=A"(tick)); - return tick; - } - - This is not correct on x86_64 as it would allocate tick in - either 'ax' or 'dx'. You have to use the following variant - instead: - - unsigned long long rdtsc (void) - { - unsigned int tickl, tickh; - __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh)); - return ((unsigned long long)tickh << 32)|tickl; - } - - 'f' - Any 80387 floating-point (stack) register. - - 't' - Top of 80387 floating-point stack ('%st(0)'). - - 'u' - Second from top of 80387 floating-point stack ('%st(1)'). - - 'y' - Any MMX register. - - 'x' - Any SSE register. - - 'Yz' - First SSE register ('%xmm0'). - - 'I' - Integer constant in the range 0 ... 31, for 32-bit shifts. - - 'J' - Integer constant in the range 0 ... 63, for 64-bit shifts. - - 'K' - Signed 8-bit integer constant. - - 'L' - '0xFF' or '0xFFFF', for andsi as a zero-extending move. - - 'M' - 0, 1, 2, or 3 (shifts for the 'lea' instruction). - - 'N' - Unsigned 8-bit integer constant (for 'in' and 'out' - instructions). - - 'G' - Standard 80387 floating point constant. - - 'C' - Standard SSE floating point constant. - - 'e' - 32-bit signed integer constant, or a symbolic reference known - to fit that range (for immediate operands in sign-extending - x86-64 instructions). - - 'Z' - 32-bit unsigned integer constant, or a symbolic reference - known to fit that range (for immediate operands in - zero-extending x86-64 instructions). - -_Intel IA-64--'config/ia64/ia64.h'_ - 'a' - General register 'r0' to 'r3' for 'addl' instruction - - 'b' - Branch register - - 'c' - Predicate register ('c' as in "conditional") - - 'd' - Application register residing in M-unit - - 'e' - Application register residing in I-unit - - 'f' - Floating-point register - - 'm' - Memory operand. If used together with '<' or '>', the operand - can have postincrement and postdecrement which require - printing with '%Pn' on IA-64. - - 'G' - Floating-point constant 0.0 or 1.0 - - 'I' - 14-bit signed integer constant - - 'J' - 22-bit signed integer constant - - 'K' - 8-bit signed integer constant for logical instructions - - 'L' - 8-bit adjusted signed integer constant for compare pseudo-ops - - 'M' - 6-bit unsigned integer constant for shift counts - - 'N' - 9-bit signed integer constant for load and store - postincrements - - 'O' - The constant zero - - 'P' - 0 or -1 for 'dep' instruction - - 'Q' - Non-volatile memory for floating-point loads and stores - - 'R' - Integer constant in the range 1 to 4 for 'shladd' instruction - - 'S' - Memory operand except postincrement and postdecrement. This - is now roughly the same as 'm' when not used together with '<' - or '>'. - -_FRV--'config/frv/frv.h'_ - 'a' - Register in the class 'ACC_REGS' ('acc0' to 'acc7'). - - 'b' - Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7'). - - 'c' - Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0' - to 'icc3'). - - 'd' - Register in the class 'GPR_REGS' ('gr0' to 'gr63'). - - 'e' - Register in the class 'EVEN_REGS' ('gr0' to 'gr63'). Odd - registers are excluded not in the class but through the use of - a machine mode larger than 4 bytes. - - 'f' - Register in the class 'FPR_REGS' ('fr0' to 'fr63'). - - 'h' - Register in the class 'FEVEN_REGS' ('fr0' to 'fr63'). Odd - registers are excluded not in the class but through the use of - a machine mode larger than 4 bytes. - - 'l' - Register in the class 'LR_REG' (the 'lr' register). - - 'q' - Register in the class 'QUAD_REGS' ('gr2' to 'gr63'). Register - numbers not divisible by 4 are excluded not in the class but - through the use of a machine mode larger than 8 bytes. - - 't' - Register in the class 'ICC_REGS' ('icc0' to 'icc3'). - - 'u' - Register in the class 'FCC_REGS' ('fcc0' to 'fcc3'). - - 'v' - Register in the class 'ICR_REGS' ('cc4' to 'cc7'). - - 'w' - Register in the class 'FCR_REGS' ('cc0' to 'cc3'). - - 'x' - Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63'). - Register numbers not divisible by 4 are excluded not in the - class but through the use of a machine mode larger than 8 - bytes. - - 'z' - Register in the class 'SPR_REGS' ('lcr' and 'lr'). - - 'A' - Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7'). - - 'B' - Register in the class 'ACCG_REGS' ('accg0' to 'accg7'). - - 'C' - Register in the class 'CR_REGS' ('cc0' to 'cc7'). - - 'G' - Floating point constant zero - - 'I' - 6-bit signed integer constant - - 'J' - 10-bit signed integer constant - - 'L' - 16-bit signed integer constant - - 'M' - 16-bit unsigned integer constant - - 'N' - 12-bit signed integer constant that is negative--i.e. in the - range of -2048 to -1 - - 'O' - Constant zero - - 'P' - 12-bit signed integer constant that is greater than zero--i.e. - in the range of 1 to 2047. - -_Blackfin family--'config/bfin/constraints.md'_ - 'a' - P register - - 'd' - D register - - 'z' - A call clobbered P register. - - 'qN' - A single register. If N is in the range 0 to 7, the - corresponding D register. If it is 'A', then the register P0. - - 'D' - Even-numbered D register - - 'W' - Odd-numbered D register - - 'e' - Accumulator register. - - 'A' - Even-numbered accumulator register. - - 'B' - Odd-numbered accumulator register. - - 'b' - I register - - 'v' - B register - - 'f' - M register - - 'c' - Registers used for circular buffering, i.e. I, B, or L - registers. - - 'C' - The CC register. - - 't' - LT0 or LT1. - - 'k' - LC0 or LC1. - - 'u' - LB0 or LB1. - - 'x' - Any D, P, B, M, I or L register. - - 'y' - Additional registers typically used only in prologues and - epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and - USP. - - 'w' - Any register except accumulators or CC. - - 'Ksh' - Signed 16 bit integer (in the range -32768 to 32767) - - 'Kuh' - Unsigned 16 bit integer (in the range 0 to 65535) - - 'Ks7' - Signed 7 bit integer (in the range -64 to 63) - - 'Ku7' - Unsigned 7 bit integer (in the range 0 to 127) - - 'Ku5' - Unsigned 5 bit integer (in the range 0 to 31) - - 'Ks4' - Signed 4 bit integer (in the range -8 to 7) - - 'Ks3' - Signed 3 bit integer (in the range -3 to 4) - - 'Ku3' - Unsigned 3 bit integer (in the range 0 to 7) - - 'PN' - Constant N, where N is a single-digit constant in the range 0 - to 4. - - 'PA' - An integer equal to one of the MACFLAG_XXX constants that is - suitable for use with either accumulator. - - 'PB' - An integer equal to one of the MACFLAG_XXX constants that is - suitable for use only with accumulator A1. - - 'M1' - Constant 255. - - 'M2' - Constant 65535. - - 'J' - An integer constant with exactly a single bit set. - - 'L' - An integer constant with all bits set except exactly one. - - 'H' - - 'Q' - Any SYMBOL_REF. - -_M32C--'config/m32c/m32c.c'_ - 'Rsp' - 'Rfb' - 'Rsb' - '$sp', '$fb', '$sb'. - - 'Rcr' - Any control register, when they're 16 bits wide (nothing if - control registers are 24 bits wide) - - 'Rcl' - Any control register, when they're 24 bits wide. - - 'R0w' - 'R1w' - 'R2w' - 'R3w' - $r0, $r1, $r2, $r3. - - 'R02' - $r0 or $r2, or $r2r0 for 32 bit values. - - 'R13' - $r1 or $r3, or $r3r1 for 32 bit values. - - 'Rdi' - A register that can hold a 64 bit value. - - 'Rhl' - $r0 or $r1 (registers with addressable high/low bytes) - - 'R23' - $r2 or $r3 - - 'Raa' - Address registers - - 'Raw' - Address registers when they're 16 bits wide. - - 'Ral' - Address registers when they're 24 bits wide. - - 'Rqi' - Registers that can hold QI values. - - 'Rad' - Registers that can be used with displacements ($a0, $a1, $sb). - - 'Rsi' - Registers that can hold 32 bit values. - - 'Rhi' - Registers that can hold 16 bit values. - - 'Rhc' - Registers chat can hold 16 bit values, including all control - registers. - - 'Rra' - $r0 through R1, plus $a0 and $a1. - - 'Rfl' - The flags register. - - 'Rmm' - The memory-based pseudo-registers $mem0 through $mem15. - - 'Rpi' - Registers that can hold pointers (16 bit registers for r8c, - m16c; 24 bit registers for m32cm, m32c). - - 'Rpa' - Matches multiple registers in a PARALLEL to form a larger - register. Used to match function return values. - - 'Is3' - -8 ... 7 - - 'IS1' - -128 ... 127 - - 'IS2' - -32768 ... 32767 - - 'IU2' - 0 ... 65535 - - 'In4' - -8 ... -1 or 1 ... 8 - - 'In5' - -16 ... -1 or 1 ... 16 - - 'In6' - -32 ... -1 or 1 ... 32 - - 'IM2' - -65536 ... -1 - - 'Ilb' - An 8 bit value with exactly one bit set. - - 'Ilw' - A 16 bit value with exactly one bit set. - - 'Sd' - The common src/dest memory addressing modes. - - 'Sa' - Memory addressed using $a0 or $a1. - - 'Si' - Memory addressed with immediate addresses. - - 'Ss' - Memory addressed using the stack pointer ($sp). - - 'Sf' - Memory addressed using the frame base register ($fb). - - 'Ss' - Memory addressed using the small base register ($sb). - - 'S1' - $r1h - -_MeP--'config/mep/constraints.md'_ - - 'a' - The $sp register. - - 'b' - The $tp register. - - 'c' - Any control register. - - 'd' - Either the $hi or the $lo register. - - 'em' - Coprocessor registers that can be directly loaded ($c0-$c15). - - 'ex' - Coprocessor registers that can be moved to each other. - - 'er' - Coprocessor registers that can be moved to core registers. - - 'h' - The $hi register. - - 'j' - The $rpc register. - - 'l' - The $lo register. - - 't' - Registers which can be used in $tp-relative addressing. - - 'v' - The $gp register. - - 'x' - The coprocessor registers. - - 'y' - The coprocessor control registers. - - 'z' - The $0 register. - - 'A' - User-defined register set A. - - 'B' - User-defined register set B. - - 'C' - User-defined register set C. - - 'D' - User-defined register set D. - - 'I' - Offsets for $gp-rel addressing. - - 'J' - Constants that can be used directly with boolean insns. - - 'K' - Constants that can be moved directly to registers. - - 'L' - Small constants that can be added to registers. - - 'M' - Long shift counts. - - 'N' - Small constants that can be compared to registers. - - 'O' - Constants that can be loaded into the top half of registers. - - 'S' - Signed 8-bit immediates. - - 'T' - Symbols encoded for $tp-rel or $gp-rel addressing. - - 'U' - Non-constant addresses for loading/saving coprocessor - registers. - - 'W' - The top half of a symbol's value. - - 'Y' - A register indirect address without offset. - - 'Z' - Symbolic references to the control bus. - -_MicroBlaze--'config/microblaze/constraints.md'_ - 'd' - A general register ('r0' to 'r31'). - - 'z' - A status register ('rmsr', '$fcc1' to '$fcc7'). - -_MIPS--'config/mips/constraints.md'_ - 'd' - An address register. This is equivalent to 'r' unless - generating MIPS16 code. - - 'f' - A floating-point register (if available). - - 'h' - Formerly the 'hi' register. This constraint is no longer - supported. - - 'l' - The 'lo' register. Use this register to store values that are - no bigger than a word. - - 'x' - The concatenated 'hi' and 'lo' registers. Use this register - to store doubleword values. - - 'c' - A register suitable for use in an indirect jump. This will - always be '$25' for '-mabicalls'. - - 'v' - Register '$3'. Do not use this constraint in new code; it is - retained only for compatibility with glibc. - - 'y' - Equivalent to 'r'; retained for backwards compatibility. - - 'z' - A floating-point condition code register. - - 'I' - A signed 16-bit constant (for arithmetic instructions). - - 'J' - Integer zero. - - 'K' - An unsigned 16-bit constant (for logic instructions). - - 'L' - A signed 32-bit constant in which the lower 16 bits are zero. - Such constants can be loaded using 'lui'. - - 'M' - A constant that cannot be loaded using 'lui', 'addiu' or - 'ori'. - - 'N' - A constant in the range -65535 to -1 (inclusive). - - 'O' - A signed 15-bit constant. - - 'P' - A constant in the range 1 to 65535 (inclusive). - - 'G' - Floating-point zero. - - 'R' - An address that can be used in a non-macro load or store. - - 'ZC' - When compiling microMIPS code, this constraint matches a - memory operand whose address is formed from a base register - and a 12-bit offset. These operands can be used for microMIPS - instructions such as 'll' and 'sc'. When not compiling for - microMIPS code, 'ZC' is equivalent to 'R'. - - 'ZD' - When compiling microMIPS code, this constraint matches an - address operand that is formed from a base register and a - 12-bit offset. These operands can be used for microMIPS - instructions such as 'prefetch'. When not compiling for - microMIPS code, 'ZD' is equivalent to 'p'. - -_Motorola 680x0--'config/m68k/constraints.md'_ - 'a' - Address register - - 'd' - Data register - - 'f' - 68881 floating-point register, if available - - 'I' - Integer in the range 1 to 8 - - 'J' - 16-bit signed number - - 'K' - Signed number whose magnitude is greater than 0x80 - - 'L' - Integer in the range -8 to -1 - - 'M' - Signed number whose magnitude is greater than 0x100 - - 'N' - Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate - - 'O' - 16 (for rotate using swap) - - 'P' - Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate - - 'R' - Numbers that mov3q can handle - - 'G' - Floating point constant that is not a 68881 constant - - 'S' - Operands that satisfy 'm' when -mpcrel is in effect - - 'T' - Operands that satisfy 's' when -mpcrel is not in effect - - 'Q' - Address register indirect addressing mode - - 'U' - Register offset addressing - - 'W' - const_call_operand - - 'Cs' - symbol_ref or const - - 'Ci' - const_int - - 'C0' - const_int 0 - - 'Cj' - Range of signed numbers that don't fit in 16 bits - - 'Cmvq' - Integers valid for mvq - - 'Capsw' - Integers valid for a moveq followed by a swap - - 'Cmvz' - Integers valid for mvz - - 'Cmvs' - Integers valid for mvs - - 'Ap' - push_operand - - 'Ac' - Non-register operands allowed in clr - -_Moxie--'config/moxie/constraints.md'_ - 'A' - An absolute address - - 'B' - An offset address - - 'W' - A register indirect memory operand - - 'I' - A constant in the range of 0 to 255. - - 'N' - A constant in the range of 0 to -255. - -_MSP430-'config/msp430/constraints.md'_ - - 'R12' - Register R12. - - 'R13' - Register R13. - - 'K' - Integer constant 1. - - 'L' - Integer constant -1^20..1^19. - - 'M' - Integer constant 1-4. - - 'Ya' - Memory references which do not require an extended MOVX - instruction. - - 'Yl' - Memory reference, labels only. - - 'Ys' - Memory reference, stack only. - -_NDS32--'config/nds32/constraints.md'_ - 'w' - LOW register class $r0 to $r7 constraint for V3/V3M ISA. - 'l' - LOW register class $r0 to $r7. - 'd' - MIDDLE register class $r0 to $r11, $r16 to $r19. - 'h' - HIGH register class $r12 to $r14, $r20 to $r31. - 't' - Temporary assist register $ta (i.e. $r15). - 'k' - Stack register $sp. - 'Iu03' - Unsigned immediate 3-bit value. - 'In03' - Negative immediate 3-bit value in the range of -7-0. - 'Iu04' - Unsigned immediate 4-bit value. - 'Is05' - Signed immediate 5-bit value. - 'Iu05' - Unsigned immediate 5-bit value. - 'In05' - Negative immediate 5-bit value in the range of -31-0. - 'Ip05' - Unsigned immediate 5-bit value for movpi45 instruction with - range 16-47. - 'Iu06' - Unsigned immediate 6-bit value constraint for addri36.sp - instruction. - 'Iu08' - Unsigned immediate 8-bit value. - 'Iu09' - Unsigned immediate 9-bit value. - 'Is10' - Signed immediate 10-bit value. - 'Is11' - Signed immediate 11-bit value. - 'Is15' - Signed immediate 15-bit value. - 'Iu15' - Unsigned immediate 15-bit value. - 'Ic15' - A constant which is not in the range of imm15u but ok for bclr - instruction. - 'Ie15' - A constant which is not in the range of imm15u but ok for bset - instruction. - 'It15' - A constant which is not in the range of imm15u but ok for btgl - instruction. - 'Ii15' - A constant whose compliment value is in the range of imm15u - and ok for bitci instruction. - 'Is16' - Signed immediate 16-bit value. - 'Is17' - Signed immediate 17-bit value. - 'Is19' - Signed immediate 19-bit value. - 'Is20' - Signed immediate 20-bit value. - 'Ihig' - The immediate value that can be simply set high 20-bit. - 'Izeb' - The immediate value 0xff. - 'Izeh' - The immediate value 0xffff. - 'Ixls' - The immediate value 0x01. - 'Ix11' - The immediate value 0x7ff. - 'Ibms' - The immediate value with power of 2. - 'Ifex' - The immediate value with power of 2 minus 1. - 'U33' - Memory constraint for 333 format. - 'U45' - Memory constraint for 45 format. - 'U37' - Memory constraint for 37 format. - -_Nios II family--'config/nios2/constraints.md'_ - - 'I' - Integer that is valid as an immediate operand in an - instruction taking a signed 16-bit number. Range -32768 to - 32767. - - 'J' - Integer that is valid as an immediate operand in an - instruction taking an unsigned 16-bit number. Range 0 to - 65535. - - 'K' - Integer that is valid as an immediate operand in an - instruction taking only the upper 16-bits of a 32-bit number. - Range 32-bit numbers with the lower 16-bits being 0. - - 'L' - Integer that is valid as an immediate operand for a shift - instruction. Range 0 to 31. - - 'M' - Integer that is valid as an immediate operand for only the - value 0. Can be used in conjunction with the format modifier - 'z' to use 'r0' instead of '0' in the assembly output. - - 'N' - Integer that is valid as an immediate operand for a custom - instruction opcode. Range 0 to 255. - - 'S' - Matches immediates which are addresses in the small data - section and therefore can be added to 'gp' as a 16-bit - immediate to re-create their 32-bit value. - -_PDP-11--'config/pdp11/constraints.md'_ - 'a' - Floating point registers AC0 through AC3. These can be loaded - from/to memory with a single instruction. - - 'd' - Odd numbered general registers (R1, R3, R5). These are used - for 16-bit multiply operations. - - 'f' - Any of the floating point registers (AC0 through AC5). - - 'G' - Floating point constant 0. - - 'I' - An integer constant that fits in 16 bits. - - 'J' - An integer constant whose low order 16 bits are zero. - - 'K' - An integer constant that does not meet the constraints for - codes 'I' or 'J'. - - 'L' - The integer constant 1. - - 'M' - The integer constant -1. - - 'N' - The integer constant 0. - - 'O' - Integer constants -4 through -1 and 1 through 4; shifts by - these amounts are handled as multiple single-bit shifts rather - than a single variable-length shift. - - 'Q' - A memory reference which requires an additional word (address - or offset) after the opcode. - - 'R' - A memory reference that is encoded within the opcode. - -_RL78--'config/rl78/constraints.md'_ - - 'Int3' - An integer constant in the range 1 ... 7. - 'Int8' - An integer constant in the range 0 ... 255. - 'J' - An integer constant in the range -255 ... 0 - 'K' - The integer constant 1. - 'L' - The integer constant -1. - 'M' - The integer constant 0. - 'N' - The integer constant 2. - 'O' - The integer constant -2. - 'P' - An integer constant in the range 1 ... 15. - 'Qbi' - The built-in compare types-eq, ne, gtu, ltu, geu, and leu. - 'Qsc' - The synthetic compare types-gt, lt, ge, and le. - 'Wab' - A memory reference with an absolute address. - 'Wbc' - A memory reference using 'BC' as a base register, with an - optional offset. - 'Wca' - A memory reference using 'AX', 'BC', 'DE', or 'HL' for the - address, for calls. - 'Wcv' - A memory reference using any 16-bit register pair for the - address, for calls. - 'Wd2' - A memory reference using 'DE' as a base register, with an - optional offset. - 'Wde' - A memory reference using 'DE' as a base register, without any - offset. - 'Wfr' - Any memory reference to an address in the far address space. - 'Wh1' - A memory reference using 'HL' as a base register, with an - optional one-byte offset. - 'Whb' - A memory reference using 'HL' as a base register, with 'B' or - 'C' as the index register. - 'Whl' - A memory reference using 'HL' as a base register, without any - offset. - 'Ws1' - A memory reference using 'SP' as a base register, with an - optional one-byte offset. - 'Y' - Any memory reference to an address in the near address space. - 'A' - The 'AX' register. - 'B' - The 'BC' register. - 'D' - The 'DE' register. - 'R' - 'A' through 'L' registers. - 'S' - The 'SP' register. - 'T' - The 'HL' register. - 'Z08W' - The 16-bit 'R8' register. - 'Z10W' - The 16-bit 'R10' register. - 'Zint' - The registers reserved for interrupts ('R24' to 'R31'). - 'a' - The 'A' register. - 'b' - The 'B' register. - 'c' - The 'C' register. - 'd' - The 'D' register. - 'e' - The 'E' register. - 'h' - The 'H' register. - 'l' - The 'L' register. - 'v' - The virtual registers. - 'w' - The 'PSW' register. - 'x' - The 'X' register. - -_RX--'config/rx/constraints.md'_ - 'Q' - An address which does not involve register indirect addressing - or pre/post increment/decrement addressing. - - 'Symbol' - A symbol reference. - - 'Int08' - A constant in the range -256 to 255, inclusive. - - 'Sint08' - A constant in the range -128 to 127, inclusive. - - 'Sint16' - A constant in the range -32768 to 32767, inclusive. - - 'Sint24' - A constant in the range -8388608 to 8388607, inclusive. - - 'Uint04' - A constant in the range 0 to 15, inclusive. - -_SPARC--'config/sparc/sparc.h'_ - 'f' - Floating-point register on the SPARC-V8 architecture and lower - floating-point register on the SPARC-V9 architecture. - - 'e' - Floating-point register. It is equivalent to 'f' on the - SPARC-V8 architecture and contains both lower and upper - floating-point registers on the SPARC-V9 architecture. - - 'c' - Floating-point condition code register. - - 'd' - Lower floating-point register. It is only valid on the - SPARC-V9 architecture when the Visual Instruction Set is - available. - - 'b' - Floating-point register. It is only valid on the SPARC-V9 - architecture when the Visual Instruction Set is available. - - 'h' - 64-bit global or out register for the SPARC-V8+ architecture. - - 'C' - The constant all-ones, for floating-point. - - 'A' - Signed 5-bit constant - - 'D' - A vector constant - - 'I' - Signed 13-bit constant - - 'J' - Zero - - 'K' - 32-bit constant with the low 12 bits clear (a constant that - can be loaded with the 'sethi' instruction) - - 'L' - A constant in the range supported by 'movcc' instructions - (11-bit signed immediate) - - 'M' - A constant in the range supported by 'movrcc' instructions - (10-bit signed immediate) - - 'N' - Same as 'K', except that it verifies that bits that are not in - the lower 32-bit range are all zero. Must be used instead of - 'K' for modes wider than 'SImode' - - 'O' - The constant 4096 - - 'G' - Floating-point zero - - 'H' - Signed 13-bit constant, sign-extended to 32 or 64 bits - - 'P' - The constant -1 - - 'Q' - Floating-point constant whose integral representation can be - moved into an integer register using a single sethi - instruction - - 'R' - Floating-point constant whose integral representation can be - moved into an integer register using a single mov instruction - - 'S' - Floating-point constant whose integral representation can be - moved into an integer register using a high/lo_sum instruction - sequence - - 'T' - Memory address aligned to an 8-byte boundary - - 'U' - Even register - - 'W' - Memory address for 'e' constraint registers - - 'w' - Memory address with only a base register - - 'Y' - Vector zero - -_SPU--'config/spu/spu.h'_ - 'a' - An immediate which can be loaded with the il/ila/ilh/ilhu - instructions. const_int is treated as a 64 bit value. - - 'c' - An immediate for and/xor/or instructions. const_int is - treated as a 64 bit value. - - 'd' - An immediate for the 'iohl' instruction. const_int is treated - as a 64 bit value. - - 'f' - An immediate which can be loaded with 'fsmbi'. - - 'A' - An immediate which can be loaded with the il/ila/ilh/ilhu - instructions. const_int is treated as a 32 bit value. - - 'B' - An immediate for most arithmetic instructions. const_int is - treated as a 32 bit value. - - 'C' - An immediate for and/xor/or instructions. const_int is - treated as a 32 bit value. - - 'D' - An immediate for the 'iohl' instruction. const_int is treated - as a 32 bit value. - - 'I' - A constant in the range [-64, 63] for shift/rotate - instructions. - - 'J' - An unsigned 7-bit constant for conversion/nop/channel - instructions. - - 'K' - A signed 10-bit constant for most arithmetic instructions. - - 'M' - A signed 16 bit immediate for 'stop'. - - 'N' - An unsigned 16-bit constant for 'iohl' and 'fsmbi'. - - 'O' - An unsigned 7-bit constant whose 3 least significant bits are - 0. - - 'P' - An unsigned 3-bit constant for 16-byte rotates and shifts - - 'R' - Call operand, reg, for indirect calls - - 'S' - Call operand, symbol, for relative calls. - - 'T' - Call operand, const_int, for absolute calls. - - 'U' - An immediate which can be loaded with the il/ila/ilh/ilhu - instructions. const_int is sign extended to 128 bit. - - 'W' - An immediate for shift and rotate instructions. const_int is - treated as a 32 bit value. - - 'Y' - An immediate for and/xor/or instructions. const_int is sign - extended as a 128 bit. - - 'Z' - An immediate for the 'iohl' instruction. const_int is sign - extended to 128 bit. - -_S/390 and zSeries--'config/s390/s390.h'_ - 'a' - Address register (general purpose register except r0) - - 'c' - Condition code register - - 'd' - Data register (arbitrary general purpose register) - - 'f' - Floating-point register - - 'I' - Unsigned 8-bit constant (0-255) - - 'J' - Unsigned 12-bit constant (0-4095) - - 'K' - Signed 16-bit constant (-32768-32767) - - 'L' - Value appropriate as displacement. - '(0..4095)' - for short displacement - '(-524288..524287)' - for long displacement - - 'M' - Constant integer with a value of 0x7fffffff. - - 'N' - Multiple letter constraint followed by 4 parameter letters. - '0..9:' - number of the part counting from most to least - significant - 'H,Q:' - mode of the part - 'D,S,H:' - mode of the containing operand - '0,F:' - value of the other parts (F--all bits set) - The constraint matches if the specified part of a constant has - a value different from its other parts. - - 'Q' - Memory reference without index register and with short - displacement. - - 'R' - Memory reference with index register and short displacement. - - 'S' - Memory reference without index register but with long - displacement. - - 'T' - Memory reference with index register and long displacement. - - 'U' - Pointer with short displacement. - - 'W' - Pointer with long displacement. - - 'Y' - Shift count operand. - -_Score family--'config/score/score.h'_ - 'd' - Registers from r0 to r32. - - 'e' - Registers from r0 to r16. - - 't' - r8--r11 or r22--r27 registers. - - 'h' - hi register. - - 'l' - lo register. - - 'x' - hi + lo register. - - 'q' - cnt register. - - 'y' - lcb register. - - 'z' - scb register. - - 'a' - cnt + lcb + scb register. - - 'c' - cr0--cr15 register. - - 'b' - cp1 registers. - - 'f' - cp2 registers. - - 'i' - cp3 registers. - - 'j' - cp1 + cp2 + cp3 registers. - - 'I' - High 16-bit constant (32-bit constant with 16 LSBs zero). - - 'J' - Unsigned 5 bit integer (in the range 0 to 31). - - 'K' - Unsigned 16 bit integer (in the range 0 to 65535). - - 'L' - Signed 16 bit integer (in the range -32768 to 32767). - - 'M' - Unsigned 14 bit integer (in the range 0 to 16383). - - 'N' - Signed 14 bit integer (in the range -8192 to 8191). - - 'Z' - Any SYMBOL_REF. - -_Xstormy16--'config/stormy16/stormy16.h'_ - 'a' - Register r0. - - 'b' - Register r1. - - 'c' - Register r2. - - 'd' - Register r8. - - 'e' - Registers r0 through r7. - - 't' - Registers r0 and r1. - - 'y' - The carry register. - - 'z' - Registers r8 and r9. - - 'I' - A constant between 0 and 3 inclusive. - - 'J' - A constant that has exactly one bit set. - - 'K' - A constant that has exactly one bit clear. - - 'L' - A constant between 0 and 255 inclusive. - - 'M' - A constant between -255 and 0 inclusive. - - 'N' - A constant between -3 and 0 inclusive. - - 'O' - A constant between 1 and 4 inclusive. - - 'P' - A constant between -4 and -1 inclusive. - - 'Q' - A memory reference that is a stack push. - - 'R' - A memory reference that is a stack pop. - - 'S' - A memory reference that refers to a constant address of known - value. - - 'T' - The register indicated by Rx (not implemented yet). - - 'U' - A constant that is not between 2 and 15 inclusive. - - 'Z' - The constant 0. - -_TI C6X family--'config/c6x/constraints.md'_ - 'a' - Register file A (A0-A31). - - 'b' - Register file B (B0-B31). - - 'A' - Predicate registers in register file A (A0-A2 on C64X and - higher, A1 and A2 otherwise). - - 'B' - Predicate registers in register file B (B0-B2). - - 'C' - A call-used register in register file B (B0-B9, B16-B31). - - 'Da' - Register file A, excluding predicate registers (A3-A31, plus - A0 if not C64X or higher). - - 'Db' - Register file B, excluding predicate registers (B3-B31). - - 'Iu4' - Integer constant in the range 0 ... 15. - - 'Iu5' - Integer constant in the range 0 ... 31. - - 'In5' - Integer constant in the range -31 ... 0. - - 'Is5' - Integer constant in the range -16 ... 15. - - 'I5x' - Integer constant that can be the operand of an ADDA or a SUBA - insn. - - 'IuB' - Integer constant in the range 0 ... 65535. - - 'IsB' - Integer constant in the range -32768 ... 32767. - - 'IsC' - Integer constant in the range -2^{20} ... 2^{20} - 1. - - 'Jc' - Integer constant that is a valid mask for the clr instruction. - - 'Js' - Integer constant that is a valid mask for the set instruction. - - 'Q' - Memory location with A base register. - - 'R' - Memory location with B base register. - - 'Z' - Register B14 (aka DP). - -_TILE-Gx--'config/tilegx/constraints.md'_ - 'R00' - 'R01' - 'R02' - 'R03' - 'R04' - 'R05' - 'R06' - 'R07' - 'R08' - 'R09' - 'R10' - Each of these represents a register constraint for an - individual register, from r0 to r10. - - 'I' - Signed 8-bit integer constant. - - 'J' - Signed 16-bit integer constant. - - 'K' - Unsigned 16-bit integer constant. - - 'L' - Integer constant that fits in one signed byte when incremented - by one (-129 ... 126). - - 'm' - Memory operand. If used together with '<' or '>', the operand - can have postincrement which requires printing with '%In' and - '%in' on TILE-Gx. For example: - - asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val)); - - 'M' - A bit mask suitable for the BFINS instruction. - - 'N' - Integer constant that is a byte tiled out eight times. - - 'O' - The integer zero constant. - - 'P' - Integer constant that is a sign-extended byte tiled out as - four shorts. - - 'Q' - Integer constant that fits in one signed byte when incremented - (-129 ... 126), but excluding -1. - - 'S' - Integer constant that has all 1 bits consecutive and starting - at bit 0. - - 'T' - A 16-bit fragment of a got, tls, or pc-relative reference. - - 'U' - Memory operand except postincrement. This is roughly the same - as 'm' when not used together with '<' or '>'. - - 'W' - An 8-element vector constant with identical elements. - - 'Y' - A 4-element vector constant with identical elements. - - 'Z0' - The integer constant 0xffffffff. - - 'Z1' - The integer constant 0xffffffff00000000. - -_TILEPro--'config/tilepro/constraints.md'_ - 'R00' - 'R01' - 'R02' - 'R03' - 'R04' - 'R05' - 'R06' - 'R07' - 'R08' - 'R09' - 'R10' - Each of these represents a register constraint for an - individual register, from r0 to r10. - - 'I' - Signed 8-bit integer constant. - - 'J' - Signed 16-bit integer constant. - - 'K' - Nonzero integer constant with low 16 bits zero. - - 'L' - Integer constant that fits in one signed byte when incremented - by one (-129 ... 126). - - 'm' - Memory operand. If used together with '<' or '>', the operand - can have postincrement which requires printing with '%In' and - '%in' on TILEPro. For example: - - asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val)); - - 'M' - A bit mask suitable for the MM instruction. - - 'N' - Integer constant that is a byte tiled out four times. - - 'O' - The integer zero constant. - - 'P' - Integer constant that is a sign-extended byte tiled out as two - shorts. - - 'Q' - Integer constant that fits in one signed byte when incremented - (-129 ... 126), but excluding -1. - - 'T' - A symbolic operand, or a 16-bit fragment of a got, tls, or - pc-relative reference. - - 'U' - Memory operand except postincrement. This is roughly the same - as 'm' when not used together with '<' or '>'. - - 'W' - A 4-element vector constant with identical elements. - - 'Y' - A 2-element vector constant with identical elements. - -_Xtensa--'config/xtensa/constraints.md'_ - 'a' - General-purpose 32-bit register - - 'b' - One-bit boolean register - - 'A' - MAC16 40-bit accumulator register - - 'I' - Signed 12-bit integer constant, for use in MOVI instructions - - 'J' - Signed 8-bit integer constant, for use in ADDI instructions - - 'K' - Integer constant valid for BccI instructions - - 'L' - Unsigned constant valid for BccUI instructions - - -File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Constraints, Up: C Extensions - -6.43 Controlling Names Used in Assembler Code -============================================= - -You can specify the name to be used in the assembler code for a C -function or variable by writing the 'asm' (or '__asm__') keyword after -the declarator as follows: - - int foo asm ("myfoo") = 2; - -This specifies that the name to be used for the variable 'foo' in the -assembler code should be 'myfoo' rather than the usual '_foo'. - - On systems where an underscore is normally prepended to the name of a C -function or variable, this feature allows you to define names for the -linker that do not start with an underscore. - - It does not make sense to use this feature with a non-static local -variable since such variables do not have assembler names. If you are -trying to put the variable in a particular register, see *note Explicit -Reg Vars::. GCC presently accepts such code with a warning, but will -probably be changed to issue an error, rather than a warning, in the -future. - - You cannot use 'asm' in this way in a function _definition_; but you -can get the same effect by writing a declaration for the function before -its definition and putting 'asm' there, like this: - - extern func () asm ("FUNC"); - - func (x, y) - int x, y; - /* ... */ - - It is up to you to make sure that the assembler names you choose do not -conflict with any other assembler symbols. Also, you must not use a -register name; that would produce completely invalid assembler code. -GCC does not as yet have the ability to store static variables in -registers. Perhaps that will be added. - - -File: gcc.info, Node: Explicit Reg Vars, Next: Alternate Keywords, Prev: Asm Labels, Up: C Extensions - -6.44 Variables in Specified Registers -===================================== - -GNU C allows you to put a few global variables into specified hardware -registers. You can also specify the register in which an ordinary -register variable should be allocated. - - * Global register variables reserve registers throughout the program. - This may be useful in programs such as programming language - interpreters that have a couple of global variables that are - accessed very often. - - * Local register variables in specific registers do not reserve the - registers, except at the point where they are used as input or - output operands in an 'asm' statement and the 'asm' statement - itself is not deleted. The compiler's data flow analysis is - capable of determining where the specified registers contain live - values, and where they are available for other uses. Stores into - local register variables may be deleted when they appear to be dead - according to dataflow analysis. References to local register - variables may be deleted or moved or simplified. - - These local variables are sometimes convenient for use with the - extended 'asm' feature (*note Extended Asm::), if you want to write - one output of the assembler instruction directly into a particular - register. (This works provided the register you specify fits the - constraints specified for that operand in the 'asm'.) - -* Menu: - -* Global Reg Vars:: -* Local Reg Vars:: - - -File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars - -6.44.1 Defining Global Register Variables ------------------------------------------ - -You can define a global register variable in GNU C like this: - - register int *foo asm ("a5"); - -Here 'a5' is the name of the register that should be used. Choose a -register that is normally saved and restored by function calls on your -machine, so that library routines will not clobber it. - - Naturally the register name is cpu-dependent, so you need to -conditionalize your program according to cpu type. The register 'a5' is -a good choice on a 68000 for a variable of pointer type. On machines -with register windows, be sure to choose a "global" register that is not -affected magically by the function call mechanism. - - In addition, different operating systems on the same CPU may differ in -how they name the registers; then you need additional conditionals. For -example, some 68000 operating systems call this register '%a5'. - - Eventually there may be a way of asking the compiler to choose a -register automatically, but first we need to figure out how it should -choose and how to enable you to guide the choice. No solution is -evident. - - Defining a global register variable in a certain register reserves that -register entirely for this use, at least within the current compilation. -The register is not allocated for any other purpose in the functions in -the current compilation, and is not saved and restored by these -functions. Stores into this register are never deleted even if they -appear to be dead, but references may be deleted or moved or simplified. - - It is not safe to access the global register variables from signal -handlers, or from more than one thread of control, because the system -library routines may temporarily use the register for other things -(unless you recompile them specially for the task at hand). - - It is not safe for one function that uses a global register variable to -call another such function 'foo' by way of a third function 'lose' that -is compiled without knowledge of this variable (i.e. in a different -source file in which the variable isn't declared). This is because -'lose' might save the register and put some other value there. For -example, you can't expect a global register variable to be available in -the comparison-function that you pass to 'qsort', since 'qsort' might -have put something else in that register. (If you are prepared to -recompile 'qsort' with the same global register variable, you can solve -this problem.) - - If you want to recompile 'qsort' or other source files that do not -actually use your global register variable, so that they do not use that -register for any other purpose, then it suffices to specify the compiler -option '-ffixed-REG'. You need not actually add a global register -declaration to their source code. - - A function that can alter the value of a global register variable -cannot safely be called from a function compiled without this variable, -because it could clobber the value the caller expects to find there on -return. Therefore, the function that is the entry point into the part -of the program that uses the global register variable must explicitly -save and restore the value that belongs to its caller. - - On most machines, 'longjmp' restores to each global register variable -the value it had at the time of the 'setjmp'. On some machines, -however, 'longjmp' does not change the value of global register -variables. To be portable, the function that called 'setjmp' should -make other arrangements to save the values of the global register -variables, and to restore them in a 'longjmp'. This way, the same thing -happens regardless of what 'longjmp' does. - - All global register variable declarations must precede all function -definitions. If such a declaration could appear after function -definitions, the declaration would be too late to prevent the register -from being used for other purposes in the preceding functions. - - Global register variables may not have initial values, because an -executable file has no means to supply initial contents for a register. - - On the SPARC, there are reports that g3 ... g7 are suitable registers, -but certain library functions, such as 'getwd', as well as the -subroutines for division and remainder, modify g3 and g4. g1 and g2 are -local temporaries. - - On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. Of -course, it does not do to use more than a few of those. - - -File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars - -6.44.2 Specifying Registers for Local Variables ------------------------------------------------ - -You can define a local register variable with a specified register like -this: - - register int *foo asm ("a5"); - -Here 'a5' is the name of the register that should be used. Note that -this is the same syntax used for defining global register variables, but -for a local variable it appears within a function. - - Naturally the register name is cpu-dependent, but this is not a -problem, since specific registers are most often useful with explicit -assembler instructions (*note Extended Asm::). Both of these things -generally require that you conditionalize your program according to cpu -type. - - In addition, operating systems on one type of cpu may differ in how -they name the registers; then you need additional conditionals. For -example, some 68000 operating systems call this register '%a5'. - - Defining such a register variable does not reserve the register; it -remains available for other uses in places where flow control determines -the variable's value is not live. - - This option does not guarantee that GCC generates code that has this -variable in the register you specify at all times. You may not code an -explicit reference to this register in the _assembler instruction -template_ part of an 'asm' statement and assume it always refers to this -variable. However, using the variable as an 'asm' _operand_ guarantees -that the specified register is used for the operand. - - Stores into local register variables may be deleted when they appear to -be dead according to dataflow analysis. References to local register -variables may be deleted or moved or simplified. - - As for global register variables, it's recommended that you choose a -register that is normally saved and restored by function calls on your -machine, so that library routines will not clobber it. A common pitfall -is to initialize multiple call-clobbered registers with arbitrary -expressions, where a function call or library call for an arithmetic -operator overwrites a register value from a previous assignment, for -example 'r0' below: - register int *p1 asm ("r0") = ...; - register int *p2 asm ("r1") = ...; - -In those cases, a solution is to use a temporary variable for each -arbitrary expression. *Note Example of asm with clobbered asm reg::. - - -File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: C Extensions - -6.45 Alternate Keywords -======================= - -'-ansi' and the various '-std' options disable certain keywords. This -causes trouble when you want to use GNU C extensions, or a -general-purpose header file that should be usable by all programs, -including ISO C programs. The keywords 'asm', 'typeof' and 'inline' are -not available in programs compiled with '-ansi' or '-std' (although -'inline' can be used in a program compiled with '-std=c99' or -'-std=c11'). The ISO C99 keyword 'restrict' is only available when -'-std=gnu99' (which will eventually be the default) or '-std=c99' (or -the equivalent '-std=iso9899:1999'), or an option for a later standard -version, is used. - - The way to solve these problems is to put '__' at the beginning and end -of each problematical keyword. For example, use '__asm__' instead of -'asm', and '__inline__' instead of 'inline'. - - Other C compilers won't accept these alternative keywords; if you want -to compile with another compiler, you can define the alternate keywords -as macros to replace them with the customary keywords. It looks like -this: - - #ifndef __GNUC__ - #define __asm__ asm - #endif - - '-pedantic' and other options cause warnings for many GNU C extensions. -You can prevent such warnings within one expression by writing -'__extension__' before the expression. '__extension__' has no effect -aside from this. - - -File: gcc.info, Node: Incomplete Enums, Next: Function Names, Prev: Alternate Keywords, Up: C Extensions - -6.46 Incomplete 'enum' Types -============================ - -You can define an 'enum' tag without specifying its possible values. -This results in an incomplete type, much like what you get if you write -'struct foo' without describing the elements. A later declaration that -does specify the possible values completes the type. - - You can't allocate variables or storage using the type while it is -incomplete. However, you can work with pointers to that type. - - This extension may not be very useful, but it makes the handling of -'enum' more consistent with the way 'struct' and 'union' are handled. - - This extension is not supported by GNU C++. - - -File: gcc.info, Node: Function Names, Next: Return Address, Prev: Incomplete Enums, Up: C Extensions - -6.47 Function Names as Strings -============================== - -GCC provides three magic variables that hold the name of the current -function, as a string. The first of these is '__func__', which is part -of the C99 standard: - - The identifier '__func__' is implicitly declared by the translator as -if, immediately following the opening brace of each function definition, -the declaration - - static const char __func__[] = "function-name"; - -appeared, where function-name is the name of the lexically-enclosing -function. This name is the unadorned name of the function. - - '__FUNCTION__' is another name for '__func__'. Older versions of GCC -recognize only this name. However, it is not standardized. For maximum -portability, we recommend you use '__func__', but provide a fallback -definition with the preprocessor: - - #if __STDC_VERSION__ < 199901L - # if __GNUC__ >= 2 - # define __func__ __FUNCTION__ - # else - # define __func__ "<unknown>" - # endif - #endif - - In C, '__PRETTY_FUNCTION__' is yet another name for '__func__'. -However, in C++, '__PRETTY_FUNCTION__' contains the type signature of -the function as well as its bare name. For example, this program: - - extern "C" { - extern int printf (char *, ...); - } - - class a { - public: - void sub (int i) - { - printf ("__FUNCTION__ = %s\n", __FUNCTION__); - printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__); - } - }; - - int - main (void) - { - a ax; - ax.sub (0); - return 0; - } - -gives this output: - - __FUNCTION__ = sub - __PRETTY_FUNCTION__ = void a::sub(int) - - These identifiers are not preprocessor macros. In GCC 3.3 and earlier, -in C only, '__FUNCTION__' and '__PRETTY_FUNCTION__' were treated as -string literals; they could be used to initialize 'char' arrays, and -they could be concatenated with other string literals. GCC 3.4 and -later treat them as variables, like '__func__'. In C++, '__FUNCTION__' -and '__PRETTY_FUNCTION__' have always been variables. - - -File: gcc.info, Node: Return Address, Next: Vector Extensions, Prev: Function Names, Up: C Extensions - -6.48 Getting the Return or Frame Address of a Function -====================================================== - -These functions may be used to get information about the callers of a -function. - - -- Built-in Function: void * __builtin_return_address (unsigned int - LEVEL) - This function returns the return address of the current function, - or of one of its callers. The LEVEL argument is number of frames - to scan up the call stack. A value of '0' yields the return - address of the current function, a value of '1' yields the return - address of the caller of the current function, and so forth. When - inlining the expected behavior is that the function returns the - address of the function that is returned to. To work around this - behavior use the 'noinline' function attribute. - - The LEVEL argument must be a constant integer. - - On some machines it may be impossible to determine the return - address of any function other than the current one; in such cases, - or when the top of the stack has been reached, this function - returns '0' or a random value. In addition, - '__builtin_frame_address' may be used to determine if the top of - the stack has been reached. - - Additional post-processing of the returned value may be needed, see - '__builtin_extract_return_addr'. - - This function should only be used with a nonzero argument for - debugging purposes. - - -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR) - The address as returned by '__builtin_return_address' may have to - be fed through this function to get the actual encoded address. - For example, on the 31-bit S/390 platform the highest bit has to be - masked out, or on SPARC platforms an offset has to be added for the - true next instruction to be executed. - - If no fixup is needed, this function simply passes through ADDR. - - -- Built-in Function: void * __builtin_frob_return_address (void *ADDR) - This function does the reverse of '__builtin_extract_return_addr'. - - -- Built-in Function: void * __builtin_frame_address (unsigned int - LEVEL) - This function is similar to '__builtin_return_address', but it - returns the address of the function frame rather than the return - address of the function. Calling '__builtin_frame_address' with a - value of '0' yields the frame address of the current function, a - value of '1' yields the frame address of the caller of the current - function, and so forth. - - The frame is the area on the stack that holds local variables and - saved registers. The frame address is normally the address of the - first word pushed on to the stack by the function. However, the - exact definition depends upon the processor and the calling - convention. If the processor has a dedicated frame pointer - register, and the function has a frame, then - '__builtin_frame_address' returns the value of the frame pointer - register. - - On some machines it may be impossible to determine the frame - address of any function other than the current one; in such cases, - or when the top of the stack has been reached, this function - returns '0' if the first frame pointer is properly initialized by - the startup code. - - This function should only be used with a nonzero argument for - debugging purposes. - - -File: gcc.info, Node: Vector Extensions, Next: Offsetof, Prev: Return Address, Up: C Extensions - -6.49 Using Vector Instructions through Built-in Functions -========================================================= - -On some targets, the instruction set contains SIMD vector instructions -which operate on multiple values contained in one large register at the -same time. For example, on the i386 the MMX, 3DNow! and SSE extensions -can be used this way. - - The first step in using these extensions is to provide the necessary -data types. This should be done using an appropriate 'typedef': - - typedef int v4si __attribute__ ((vector_size (16))); - -The 'int' type specifies the base type, while the attribute specifies -the vector size for the variable, measured in bytes. For example, the -declaration above causes the compiler to set the mode for the 'v4si' -type to be 16 bytes wide and divided into 'int' sized units. For a -32-bit 'int' this means a vector of 4 units of 4 bytes, and the -corresponding mode of 'foo' is V4SI. - - The 'vector_size' attribute is only applicable to integral and float -scalars, although arrays, pointers, and function return values are -allowed in conjunction with this construct. Only sizes that are a power -of two are currently allowed. - - All the basic integer types can be used as base types, both as signed -and as unsigned: 'char', 'short', 'int', 'long', 'long long'. In -addition, 'float' and 'double' can be used to build floating-point -vector types. - - Specifying a combination that is not valid for the current architecture -causes GCC to synthesize the instructions using a narrower mode. For -example, if you specify a variable of type 'V4SI' and your architecture -does not allow for this specific SIMD type, GCC produces code that uses -4 'SIs'. - - The types defined in this manner can be used with a subset of normal C -operations. Currently, GCC allows using the following operators on -these types: '+, -, *, /, unary minus, ^, |, &, ~, %'. - - The operations behave like C++ 'valarrays'. Addition is defined as the -addition of the corresponding elements of the operands. For example, in -the code below, each of the 4 elements in A is added to the -corresponding 4 elements in B and the resulting vector is stored in C. - - typedef int v4si __attribute__ ((vector_size (16))); - - v4si a, b, c; - - c = a + b; - - Subtraction, multiplication, division, and the logical operations -operate in a similar manner. Likewise, the result of using the unary -minus or complement operators on a vector type is a vector whose -elements are the negative or complemented values of the corresponding -elements in the operand. - - It is possible to use shifting operators '<<', '>>' on integer-type -vectors. The operation is defined as following: '{a0, a1, ..., an} >> -{b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'. Vector -operands must have the same number of elements. - - For convenience, it is allowed to use a binary vector operation where -one operand is a scalar. In that case the compiler transforms the -scalar operand into a vector where each element is the scalar from the -operation. The transformation happens only if the scalar could be -safely converted to the vector-element type. Consider the following -code. - - typedef int v4si __attribute__ ((vector_size (16))); - - v4si a, b, c; - long l; - - a = b + 1; /* a = b + {1,1,1,1}; */ - a = 2 * b; /* a = {2,2,2,2} * b; */ - - a = l + a; /* Error, cannot convert long to int. */ - - Vectors can be subscripted as if the vector were an array with the same -number of elements and base type. Out of bound accesses invoke -undefined behavior at run time. Warnings for out of bound accesses for -vector subscription can be enabled with '-Warray-bounds'. - - Vector comparison is supported with standard comparison operators: '==, -!=, <, <=, >, >='. Comparison operands can be vector expressions of -integer-type or real-type. Comparison between integer-type vectors and -real-type vectors are not supported. The result of the comparison is a -vector of the same width and number of elements as the comparison -operands with a signed integral element type. - - Vectors are compared element-wise producing 0 when comparison is false -and -1 (constant of the appropriate type where all bits are set) -otherwise. Consider the following example. - - typedef int v4si __attribute__ ((vector_size (16))); - - v4si a = {1,2,3,4}; - v4si b = {3,2,1,4}; - v4si c; - - c = a > b; /* The result would be {0, 0,-1, 0} */ - c = a == b; /* The result would be {0,-1, 0,-1} */ - - In C++, the ternary operator '?:' is available. 'a?b:c', where 'b' and -'c' are vectors of the same type and 'a' is an integer vector with the -same number of elements of the same size as 'b' and 'c', computes all -three arguments and creates a vector '{a[0]?b[0]:c[0], a[1]?b[1]:c[1], -...}'. Note that unlike in OpenCL, 'a' is thus interpreted as 'a != 0' -and not 'a < 0'. As in the case of binary operations, this syntax is -also accepted when one of 'b' or 'c' is a scalar that is then -transformed into a vector. If both 'b' and 'c' are scalars and the type -of 'true?b:c' has the same size as the element type of 'a', then 'b' and -'c' are converted to a vector type whose elements have this type and -with the same number of elements as 'a'. - - Vector shuffling is available using functions '__builtin_shuffle (vec, -mask)' and '__builtin_shuffle (vec0, vec1, mask)'. Both functions -construct a permutation of elements from one or two vectors and return a -vector of the same type as the input vector(s). The MASK is an integral -vector with the same width (W) and element count (N) as the output -vector. - - The elements of the input vectors are numbered in memory ordering of -VEC0 beginning at 0 and VEC1 beginning at N. The elements of MASK are -considered modulo N in the single-operand case and modulo 2*N in the -two-operand case. - - Consider the following example, - - typedef int v4si __attribute__ ((vector_size (16))); - - v4si a = {1,2,3,4}; - v4si b = {5,6,7,8}; - v4si mask1 = {0,1,1,3}; - v4si mask2 = {0,4,2,5}; - v4si res; - - res = __builtin_shuffle (a, mask1); /* res is {1,2,2,4} */ - res = __builtin_shuffle (a, b, mask2); /* res is {1,5,3,6} */ - - Note that '__builtin_shuffle' is intentionally semantically compatible -with the OpenCL 'shuffle' and 'shuffle2' functions. - - You can declare variables and use them in function calls and returns, -as well as in assignments and some casts. You can specify a vector type -as a return type for a function. Vector types can also be used as -function arguments. It is possible to cast from one vector type to -another, provided they are of the same size (in fact, you can also cast -vectors to and from other datatypes of the same size). - - You cannot operate between vectors of different lengths or different -signedness without a cast. - - -File: gcc.info, Node: Offsetof, Next: __sync Builtins, Prev: Vector Extensions, Up: C Extensions - -6.50 Offsetof -============= - -GCC implements for both C and C++ a syntactic extension to implement the -'offsetof' macro. - - primary: - "__builtin_offsetof" "(" typename "," offsetof_member_designator ")" - - offsetof_member_designator: - identifier - | offsetof_member_designator "." identifier - | offsetof_member_designator "[" expr "]" - - This extension is sufficient such that - - #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) - -is a suitable definition of the 'offsetof' macro. In C++, TYPE may be -dependent. In either case, MEMBER may consist of a single identifier, -or a sequence of member accesses and array references. - - -File: gcc.info, Node: __sync Builtins, Next: __atomic Builtins, Prev: Offsetof, Up: C Extensions - -6.51 Legacy __sync Built-in Functions for Atomic Memory Access -============================================================== - -The following built-in functions are intended to be compatible with -those described in the 'Intel Itanium Processor-specific Application -Binary Interface', section 7.4. As such, they depart from the normal -GCC practice of using the '__builtin_' prefix, and further that they are -overloaded such that they work on multiple types. - - The definition given in the Intel documentation allows only for the use -of the types 'int', 'long', 'long long' as well as their unsigned -counterparts. GCC allows any integral scalar or pointer type that is 1, -2, 4 or 8 bytes in length. - - Not all operations are supported by all target processors. If a -particular operation cannot be implemented on the target processor, a -warning is generated and a call an external function is generated. The -external function carries the same name as the built-in version, with an -additional suffix '_N' where N is the size of the data type. - - In most cases, these built-in functions are considered a "full -barrier". That is, no memory operand is moved across the operation, -either forward or backward. Further, instructions are issued as -necessary to prevent the processor from speculating loads across the -operation and from queuing stores after the operation. - - All of the routines are described in the Intel documentation to take -"an optional list of variables protected by the memory barrier". It's -not clear what is meant by that; it could mean that _only_ the following -variables are protected, or it could mean that these variables should in -addition be protected. At present GCC ignores this list and protects -all variables that are globally accessible. If in the future we make -some use of this list, an empty list will continue to mean all globally -accessible variables. - -'TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)' -'TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)' -'TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)' -'TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)' -'TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)' -'TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)' - These built-in functions perform the operation suggested by the - name, and returns the value that had previously been in memory. - That is, - - { tmp = *ptr; *ptr OP= value; return tmp; } - { tmp = *ptr; *ptr = ~(tmp & value); return tmp; } // nand - - _Note:_ GCC 4.4 and later implement '__sync_fetch_and_nand' as - '*ptr = ~(tmp & value)' instead of '*ptr = ~tmp & value'. - -'TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)' -'TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)' -'TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)' -'TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)' -'TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)' -'TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)' - These built-in functions perform the operation suggested by the - name, and return the new value. That is, - - { *ptr OP= value; return *ptr; } - { *ptr = ~(*ptr & value); return *ptr; } // nand - - _Note:_ GCC 4.4 and later implement '__sync_nand_and_fetch' as - '*ptr = ~(*ptr & value)' instead of '*ptr = ~*ptr & value'. - -'bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)' -'TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)' - These built-in functions perform an atomic compare and swap. That - is, if the current value of '*PTR' is OLDVAL, then write NEWVAL - into '*PTR'. - - The "bool" version returns true if the comparison is successful and - NEWVAL is written. The "val" version returns the contents of - '*PTR' before the operation. - -'__sync_synchronize (...)' - This built-in function issues a full memory barrier. - -'TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)' - This built-in function, as described by Intel, is not a traditional - test-and-set operation, but rather an atomic exchange operation. - It writes VALUE into '*PTR', and returns the previous contents of - '*PTR'. - - Many targets have only minimal support for such locks, and do not - support a full exchange operation. In this case, a target may - support reduced functionality here by which the _only_ valid value - to store is the immediate constant 1. The exact value actually - stored in '*PTR' is implementation defined. - - This built-in function is not a full barrier, but rather an - "acquire barrier". This means that references after the operation - cannot move to (or be speculated to) before the operation, but - previous memory stores may not be globally visible yet, and - previous memory loads may not yet be satisfied. - -'void __sync_lock_release (TYPE *ptr, ...)' - This built-in function releases the lock acquired by - '__sync_lock_test_and_set'. Normally this means writing the - constant 0 to '*PTR'. - - This built-in function is not a full barrier, but rather a "release - barrier". This means that all previous memory stores are globally - visible, and all previous memory loads have been satisfied, but - following memory reads are not prevented from being speculated to - before the barrier. - - -File: gcc.info, Node: __atomic Builtins, Next: x86 specific memory model extensions for transactional memory, Prev: __sync Builtins, Up: C Extensions - -6.52 Built-in functions for memory model aware atomic operations -================================================================ - -The following built-in functions approximately match the requirements -for C++11 memory model. Many are similar to the '__sync' prefixed -built-in functions, but all also have a memory model parameter. These -are all identified by being prefixed with '__atomic', and most are -overloaded such that they work with multiple types. - - GCC allows any integral scalar or pointer type that is 1, 2, 4, or 8 -bytes in length. 16-byte integral types are also allowed if '__int128' -(*note __int128::) is supported by the architecture. - - Target architectures are encouraged to provide their own patterns for -each of these built-in functions. If no target is provided, the -original non-memory model set of '__sync' atomic built-in functions are -utilized, along with any required synchronization fences surrounding it -in order to achieve the proper behavior. Execution in this case is -subject to the same restrictions as those built-in functions. - - If there is no pattern or mechanism to provide a lock free instruction -sequence, a call is made to an external routine with the same parameters -to be resolved at run time. - - The four non-arithmetic functions (load, store, exchange, and -compare_exchange) all have a generic version as well. This generic -version works on any data type. If the data type size maps to one of -the integral sizes that may have lock free support, the generic version -utilizes the lock free built-in function. Otherwise an external call is -left to be resolved at run time. This external call is the same format -with the addition of a 'size_t' parameter inserted as the first -parameter indicating the size of the object being pointed to. All -objects must be the same size. - - There are 6 different memory models that can be specified. These map -to the same names in the C++11 standard. Refer there or to the GCC wiki -on atomic synchronization -(http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for more detailed -definitions. These memory models integrate both barriers to code motion -as well as synchronization requirements with other threads. These are -listed in approximately ascending order of strength. It is also -possible to use target specific flags for memory model flags, like -Hardware Lock Elision. - -'__ATOMIC_RELAXED' - No barriers or synchronization. -'__ATOMIC_CONSUME' - Data dependency only for both barrier and synchronization with - another thread. -'__ATOMIC_ACQUIRE' - Barrier to hoisting of code and synchronizes with release (or - stronger) semantic stores from another thread. -'__ATOMIC_RELEASE' - Barrier to sinking of code and synchronizes with acquire (or - stronger) semantic loads from another thread. -'__ATOMIC_ACQ_REL' - Full barrier in both directions and synchronizes with acquire loads - and release stores in another thread. -'__ATOMIC_SEQ_CST' - Full barrier in both directions and synchronizes with acquire loads - and release stores in all threads. - - When implementing patterns for these built-in functions, the memory -model parameter can be ignored as long as the pattern implements the -most restrictive '__ATOMIC_SEQ_CST' model. Any of the other memory -models execute correctly with this memory model but they may not execute -as efficiently as they could with a more appropriate implementation of -the relaxed requirements. - - Note that the C++11 standard allows for the memory model parameter to -be determined at run time rather than at compile time. These built-in -functions map any run-time value to '__ATOMIC_SEQ_CST' rather than -invoke a runtime library call or inline a switch statement. This is -standard compliant, safe, and the simplest approach for now. - - The memory model parameter is a signed int, but only the lower 8 bits -are reserved for the memory model. The remainder of the signed int is -reserved for future use and should be 0. Use of the predefined atomic -values ensures proper usage. - - -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memmodel) - This built-in function implements an atomic load operation. It - returns the contents of '*PTR'. - - The valid memory model variants are '__ATOMIC_RELAXED', - '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', and '__ATOMIC_CONSUME'. - - -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int - memmodel) - This is the generic version of an atomic load. It returns the - contents of '*PTR' in '*RET'. - - -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int - memmodel) - This built-in function implements an atomic store operation. It - writes 'VAL' into '*PTR'. - - The valid memory model variants are '__ATOMIC_RELAXED', - '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'. - - -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int - memmodel) - This is the generic version of an atomic store. It stores the - value of '*VAL' into '*PTR'. - - -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val, - int memmodel) - This built-in function implements an atomic exchange operation. It - writes VAL into '*PTR', and returns the previous contents of - '*PTR'. - - The valid memory model variants are '__ATOMIC_RELAXED', - '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', '__ATOMIC_RELEASE', and - '__ATOMIC_ACQ_REL'. - - -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val, - TYPE *ret, int memmodel) - This is the generic version of an atomic exchange. It stores the - contents of '*VAL' into '*PTR'. The original value of '*PTR' is - copied into '*RET'. - - -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr, TYPE - *expected, TYPE desired, bool weak, int success_memmodel, int - failure_memmodel) - This built-in function implements an atomic compare and exchange - operation. This compares the contents of '*PTR' with the contents - of '*EXPECTED' and if equal, writes DESIRED into '*PTR'. If they - are not equal, the current contents of '*PTR' is written into - '*EXPECTED'. WEAK is true for weak compare_exchange, and false for - the strong variation. Many targets only offer the strong variation - and ignore the parameter. When in doubt, use the strong variation. - - True is returned if DESIRED is written into '*PTR' and the - execution is considered to conform to the memory model specified by - SUCCESS_MEMMODEL. There are no restrictions on what memory model - can be used here. - - False is returned otherwise, and the execution is considered to - conform to FAILURE_MEMMODEL. This memory model cannot be - '__ATOMIC_RELEASE' nor '__ATOMIC_ACQ_REL'. It also cannot be a - stronger model than that specified by SUCCESS_MEMMODEL. - - -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE - *expected, TYPE *desired, bool weak, int success_memmodel, int - failure_memmodel) - This built-in function implements the generic version of - '__atomic_compare_exchange'. The function is virtually identical - to '__atomic_compare_exchange_n', except the desired value is also - a pointer. - - -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val, int - memmodel) - -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val, int - memmodel) - -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val, int - memmodel) - -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val, int - memmodel) - -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int - memmodel) - -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val, - int memmodel) - These built-in functions perform the operation suggested by the - name, and return the result of the operation. That is, - - { *ptr OP= val; return *ptr; } - - All memory models are valid. - - -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val, int - memmodel) - -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val, int - memmodel) - -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val, int - memmodel) - -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val, int - memmodel) - -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int - memmodel) - -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val, - int memmodel) - These built-in functions perform the operation suggested by the - name, and return the value that had previously been in '*PTR'. - That is, - - { tmp = *ptr; *ptr OP= val; return tmp; } - - All memory models are valid. - - -- Built-in Function: bool __atomic_test_and_set (void *ptr, int - memmodel) - - This built-in function performs an atomic test-and-set operation on - the byte at '*PTR'. The byte is set to some implementation defined - nonzero "set" value and the return value is 'true' if and only if - the previous contents were "set". It should be only used for - operands of type 'bool' or 'char'. For other types only part of - the value may be set. - - All memory models are valid. - - -- Built-in Function: void __atomic_clear (bool *ptr, int memmodel) - - This built-in function performs an atomic clear operation on - '*PTR'. After the operation, '*PTR' contains 0. It should be only - used for operands of type 'bool' or 'char' and in conjunction with - '__atomic_test_and_set'. For other types it may only clear - partially. If the type is not 'bool' prefer using - '__atomic_store'. - - The valid memory model variants are '__ATOMIC_RELAXED', - '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'. - - -- Built-in Function: void __atomic_thread_fence (int memmodel) - - This built-in function acts as a synchronization fence between - threads based on the specified memory model. - - All memory orders are valid. - - -- Built-in Function: void __atomic_signal_fence (int memmodel) - - This built-in function acts as a synchronization fence between a - thread and signal handlers based in the same thread. - - All memory orders are valid. - - -- Built-in Function: bool __atomic_always_lock_free (size_t size, void - *ptr) - - This built-in function returns true if objects of SIZE bytes always - generate lock free atomic instructions for the target architecture. - SIZE must resolve to a compile-time constant and the result also - resolves to a compile-time constant. - - PTR is an optional pointer to the object that may be used to - determine alignment. A value of 0 indicates typical alignment - should be used. The compiler may also ignore this parameter. - - if (_atomic_always_lock_free (sizeof (long long), 0)) - - -- Built-in Function: bool __atomic_is_lock_free (size_t size, void - *ptr) - - This built-in function returns true if objects of SIZE bytes always - generate lock free atomic instructions for the target architecture. - If it is not known to be lock free a call is made to a runtime - routine named '__atomic_is_lock_free'. - - PTR is an optional pointer to the object that may be used to - determine alignment. A value of 0 indicates typical alignment - should be used. The compiler may also ignore this parameter. - - -File: gcc.info, Node: x86 specific memory model extensions for transactional memory, Next: Object Size Checking, Prev: __atomic Builtins, Up: C Extensions - -6.53 x86 specific memory model extensions for transactional memory -================================================================== - -The i386 architecture supports additional memory ordering flags to mark -lock critical sections for hardware lock elision. These must be -specified in addition to an existing memory model to atomic intrinsics. - -'__ATOMIC_HLE_ACQUIRE' - Start lock elision on a lock variable. Memory model must be - '__ATOMIC_ACQUIRE' or stronger. -'__ATOMIC_HLE_RELEASE' - End lock elision on a lock variable. Memory model must be - '__ATOMIC_RELEASE' or stronger. - - When a lock acquire fails it is required for good performance to abort -the transaction quickly. This can be done with a '_mm_pause' - - #include <immintrin.h> // For _mm_pause - - int lockvar; - - /* Acquire lock with lock elision */ - while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE)) - _mm_pause(); /* Abort failed transaction */ - ... - /* Free lock with lock elision */ - __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE); - - -File: gcc.info, Node: Object Size Checking, Next: Cilk Plus Builtins, Prev: x86 specific memory model extensions for transactional memory, Up: C Extensions - -6.54 Object Size Checking Built-in Functions -============================================ - -GCC implements a limited buffer overflow protection mechanism that can -prevent some buffer overflow attacks. - - -- Built-in Function: size_t __builtin_object_size (void * PTR, int - TYPE) - is a built-in construct that returns a constant number of bytes - from PTR to the end of the object PTR pointer points to (if known - at compile time). '__builtin_object_size' never evaluates its - arguments for side-effects. If there are any side-effects in them, - it returns '(size_t) -1' for TYPE 0 or 1 and '(size_t) 0' for TYPE - 2 or 3. If there are multiple objects PTR can point to and all of - them are known at compile time, the returned number is the maximum - of remaining byte counts in those objects if TYPE & 2 is 0 and - minimum if nonzero. If it is not possible to determine which - objects PTR points to at compile time, '__builtin_object_size' - should return '(size_t) -1' for TYPE 0 or 1 and '(size_t) 0' for - TYPE 2 or 3. - - TYPE is an integer constant from 0 to 3. If the least significant - bit is clear, objects are whole variables, if it is set, a closest - surrounding subobject is considered the object a pointer points to. - The second bit determines if maximum or minimum of remaining bytes - is computed. - - struct V { char buf1[10]; int b; char buf2[10]; } var; - char *p = &var.buf1[1], *q = &var.b; - - /* Here the object p points to is var. */ - assert (__builtin_object_size (p, 0) == sizeof (var) - 1); - /* The subobject p points to is var.buf1. */ - assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1); - /* The object q points to is var. */ - assert (__builtin_object_size (q, 0) - == (char *) (&var + 1) - (char *) &var.b); - /* The subobject q points to is var.b. */ - assert (__builtin_object_size (q, 1) == sizeof (var.b)); - - There are built-in functions added for many common string operation -functions, e.g., for 'memcpy' '__builtin___memcpy_chk' built-in is -provided. This built-in has an additional last argument, which is the -number of bytes remaining in object the DEST argument points to or -'(size_t) -1' if the size is not known. - - The built-in functions are optimized into the normal string functions -like 'memcpy' if the last argument is '(size_t) -1' or if it is known at -compile time that the destination object will not be overflown. If the -compiler can determine at compile time the object will be always -overflown, it issues a warning. - - The intended use can be e.g. - - #undef memcpy - #define bos0(dest) __builtin_object_size (dest, 0) - #define memcpy(dest, src, n) \ - __builtin___memcpy_chk (dest, src, n, bos0 (dest)) - - char *volatile p; - char buf[10]; - /* It is unknown what object p points to, so this is optimized - into plain memcpy - no checking is possible. */ - memcpy (p, "abcde", n); - /* Destination is known and length too. It is known at compile - time there will be no overflow. */ - memcpy (&buf[5], "abcde", 5); - /* Destination is known, but the length is not known at compile time. - This will result in __memcpy_chk call that can check for overflow - at run time. */ - memcpy (&buf[5], "abcde", n); - /* Destination is known and it is known at compile time there will - be overflow. There will be a warning and __memcpy_chk call that - will abort the program at run time. */ - memcpy (&buf[6], "abcde", 5); - - Such built-in functions are provided for 'memcpy', 'mempcpy', -'memmove', 'memset', 'strcpy', 'stpcpy', 'strncpy', 'strcat' and -'strncat'. - - There are also checking built-in functions for formatted output -functions. - int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...); - int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os, - const char *fmt, ...); - int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt, - va_list ap); - int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os, - const char *fmt, va_list ap); - - The added FLAG argument is passed unchanged to '__sprintf_chk' etc. -functions and can contain implementation specific flags on what -additional security measures the checking function might take, such as -handling '%n' differently. - - The OS argument is the object size S points to, like in the other -built-in functions. There is a small difference in the behavior though, -if OS is '(size_t) -1', the built-in functions are optimized into the -non-checking functions only if FLAG is 0, otherwise the checking -function is called with OS argument set to '(size_t) -1'. - - In addition to this, there are checking built-in functions -'__builtin___printf_chk', '__builtin___vprintf_chk', -'__builtin___fprintf_chk' and '__builtin___vfprintf_chk'. These have -just one additional argument, FLAG, right before format string FMT. If -the compiler is able to optimize them to 'fputc' etc. functions, it -does, otherwise the checking function is called and the FLAG argument -passed to it. - - -File: gcc.info, Node: Cilk Plus Builtins, Next: Other Builtins, Prev: Object Size Checking, Up: C Extensions - -6.55 Cilk Plus C/C++ language extension Built-in Functions. -=========================================================== - -GCC provides support for the following built-in reduction funtions if -Cilk Plus is enabled. Cilk Plus can be enabled using the '-fcilkplus' -flag. - - * __sec_implicit_index - * __sec_reduce - * __sec_reduce_add - * __sec_reduce_all_nonzero - * __sec_reduce_all_zero - * __sec_reduce_any_nonzero - * __sec_reduce_any_zero - * __sec_reduce_max - * __sec_reduce_min - * __sec_reduce_max_ind - * __sec_reduce_min_ind - * __sec_reduce_mul - * __sec_reduce_mutating - - Further details and examples about these built-in functions are -described in the Cilk Plus language manual which can be found at -<http://www.cilkplus.org>. - - -File: gcc.info, Node: Other Builtins, Next: Target Builtins, Prev: Cilk Plus Builtins, Up: C Extensions - -6.56 Other Built-in Functions Provided by GCC -============================================= - -GCC provides a large number of built-in functions other than the ones -mentioned above. Some of these are for internal use in the processing -of exceptions or variable-length argument lists and are not documented -here because they may change from time to time; we do not recommend -general use of these functions. - - The remaining functions are provided for optimization purposes. - - GCC includes built-in versions of many of the functions in the standard -C library. The versions prefixed with '__builtin_' are always treated -as having the same meaning as the C library function even if you specify -the '-fno-builtin' option. (*note C Dialect Options::) Many of these -functions are only optimized in certain cases; if they are not optimized -in a particular case, a call to the library function is emitted. - - Outside strict ISO C mode ('-ansi', '-std=c90', '-std=c99' or -'-std=c11'), the functions '_exit', 'alloca', 'bcmp', 'bzero', -'dcgettext', 'dgettext', 'dremf', 'dreml', 'drem', 'exp10f', 'exp10l', -'exp10', 'ffsll', 'ffsl', 'ffs', 'fprintf_unlocked', 'fputs_unlocked', -'gammaf', 'gammal', 'gamma', 'gammaf_r', 'gammal_r', 'gamma_r', -'gettext', 'index', 'isascii', 'j0f', 'j0l', 'j0', 'j1f', 'j1l', 'j1', -'jnf', 'jnl', 'jn', 'lgammaf_r', 'lgammal_r', 'lgamma_r', 'mempcpy', -'pow10f', 'pow10l', 'pow10', 'printf_unlocked', 'rindex', 'scalbf', -'scalbl', 'scalb', 'signbit', 'signbitf', 'signbitl', 'signbitd32', -'signbitd64', 'signbitd128', 'significandf', 'significandl', -'significand', 'sincosf', 'sincosl', 'sincos', 'stpcpy', 'stpncpy', -'strcasecmp', 'strdup', 'strfmon', 'strncasecmp', 'strndup', 'toascii', -'y0f', 'y0l', 'y0', 'y1f', 'y1l', 'y1', 'ynf', 'ynl' and 'yn' may be -handled as built-in functions. All these functions have corresponding -versions prefixed with '__builtin_', which may be used even in strict -C90 mode. - - The ISO C99 functions '_Exit', 'acoshf', 'acoshl', 'acosh', 'asinhf', -'asinhl', 'asinh', 'atanhf', 'atanhl', 'atanh', 'cabsf', 'cabsl', -'cabs', 'cacosf', 'cacoshf', 'cacoshl', 'cacosh', 'cacosl', 'cacos', -'cargf', 'cargl', 'carg', 'casinf', 'casinhf', 'casinhl', 'casinh', -'casinl', 'casin', 'catanf', 'catanhf', 'catanhl', 'catanh', 'catanl', -'catan', 'cbrtf', 'cbrtl', 'cbrt', 'ccosf', 'ccoshf', 'ccoshl', 'ccosh', -'ccosl', 'ccos', 'cexpf', 'cexpl', 'cexp', 'cimagf', 'cimagl', 'cimag', -'clogf', 'clogl', 'clog', 'conjf', 'conjl', 'conj', 'copysignf', -'copysignl', 'copysign', 'cpowf', 'cpowl', 'cpow', 'cprojf', 'cprojl', -'cproj', 'crealf', 'creall', 'creal', 'csinf', 'csinhf', 'csinhl', -'csinh', 'csinl', 'csin', 'csqrtf', 'csqrtl', 'csqrt', 'ctanf', -'ctanhf', 'ctanhl', 'ctanh', 'ctanl', 'ctan', 'erfcf', 'erfcl', 'erfc', -'erff', 'erfl', 'erf', 'exp2f', 'exp2l', 'exp2', 'expm1f', 'expm1l', -'expm1', 'fdimf', 'fdiml', 'fdim', 'fmaf', 'fmal', 'fmaxf', 'fmaxl', -'fmax', 'fma', 'fminf', 'fminl', 'fmin', 'hypotf', 'hypotl', 'hypot', -'ilogbf', 'ilogbl', 'ilogb', 'imaxabs', 'isblank', 'iswblank', -'lgammaf', 'lgammal', 'lgamma', 'llabs', 'llrintf', 'llrintl', 'llrint', -'llroundf', 'llroundl', 'llround', 'log1pf', 'log1pl', 'log1p', 'log2f', -'log2l', 'log2', 'logbf', 'logbl', 'logb', 'lrintf', 'lrintl', 'lrint', -'lroundf', 'lroundl', 'lround', 'nearbyintf', 'nearbyintl', 'nearbyint', -'nextafterf', 'nextafterl', 'nextafter', 'nexttowardf', 'nexttowardl', -'nexttoward', 'remainderf', 'remainderl', 'remainder', 'remquof', -'remquol', 'remquo', 'rintf', 'rintl', 'rint', 'roundf', 'roundl', -'round', 'scalblnf', 'scalblnl', 'scalbln', 'scalbnf', 'scalbnl', -'scalbn', 'snprintf', 'tgammaf', 'tgammal', 'tgamma', 'truncf', -'truncl', 'trunc', 'vfscanf', 'vscanf', 'vsnprintf' and 'vsscanf' are -handled as built-in functions except in strict ISO C90 mode ('-ansi' or -'-std=c90'). - - There are also built-in versions of the ISO C99 functions 'acosf', -'acosl', 'asinf', 'asinl', 'atan2f', 'atan2l', 'atanf', 'atanl', -'ceilf', 'ceill', 'cosf', 'coshf', 'coshl', 'cosl', 'expf', 'expl', -'fabsf', 'fabsl', 'floorf', 'floorl', 'fmodf', 'fmodl', 'frexpf', -'frexpl', 'ldexpf', 'ldexpl', 'log10f', 'log10l', 'logf', 'logl', -'modfl', 'modf', 'powf', 'powl', 'sinf', 'sinhf', 'sinhl', 'sinl', -'sqrtf', 'sqrtl', 'tanf', 'tanhf', 'tanhl' and 'tanl' that are -recognized in any mode since ISO C90 reserves these names for the -purpose to which ISO C99 puts them. All these functions have -corresponding versions prefixed with '__builtin_'. - - The ISO C94 functions 'iswalnum', 'iswalpha', 'iswcntrl', 'iswdigit', -'iswgraph', 'iswlower', 'iswprint', 'iswpunct', 'iswspace', 'iswupper', -'iswxdigit', 'towlower' and 'towupper' are handled as built-in functions -except in strict ISO C90 mode ('-ansi' or '-std=c90'). - - The ISO C90 functions 'abort', 'abs', 'acos', 'asin', 'atan2', 'atan', -'calloc', 'ceil', 'cosh', 'cos', 'exit', 'exp', 'fabs', 'floor', 'fmod', -'fprintf', 'fputs', 'frexp', 'fscanf', 'isalnum', 'isalpha', 'iscntrl', -'isdigit', 'isgraph', 'islower', 'isprint', 'ispunct', 'isspace', -'isupper', 'isxdigit', 'tolower', 'toupper', 'labs', 'ldexp', 'log10', -'log', 'malloc', 'memchr', 'memcmp', 'memcpy', 'memset', 'modf', 'pow', -'printf', 'putchar', 'puts', 'scanf', 'sinh', 'sin', 'snprintf', -'sprintf', 'sqrt', 'sscanf', 'strcat', 'strchr', 'strcmp', 'strcpy', -'strcspn', 'strlen', 'strncat', 'strncmp', 'strncpy', 'strpbrk', -'strrchr', 'strspn', 'strstr', 'tanh', 'tan', 'vfprintf', 'vprintf' and -'vsprintf' are all recognized as built-in functions unless -'-fno-builtin' is specified (or '-fno-builtin-FUNCTION' is specified for -an individual function). All of these functions have corresponding -versions prefixed with '__builtin_'. - - GCC provides built-in versions of the ISO C99 floating-point comparison -macros that avoid raising exceptions for unordered operands. They have -the same names as the standard macros ( 'isgreater', 'isgreaterequal', -'isless', 'islessequal', 'islessgreater', and 'isunordered') , with -'__builtin_' prefixed. We intend for a library implementor to be able -to simply '#define' each standard macro to its built-in equivalent. In -the same fashion, GCC provides 'fpclassify', 'isfinite', 'isinf_sign' -and 'isnormal' built-ins used with '__builtin_' prefixed. The 'isinf' -and 'isnan' built-in functions appear both with and without the -'__builtin_' prefix. - - -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2) - - You can use the built-in function '__builtin_types_compatible_p' to - determine whether two types are the same. - - This built-in function returns 1 if the unqualified versions of the - types TYPE1 and TYPE2 (which are types, not expressions) are - compatible, 0 otherwise. The result of this built-in function can - be used in integer constant expressions. - - This built-in function ignores top level qualifiers (e.g., 'const', - 'volatile'). For example, 'int' is equivalent to 'const int'. - - The type 'int[]' and 'int[5]' are compatible. On the other hand, - 'int' and 'char *' are not compatible, even if the size of their - types, on the particular architecture are the same. Also, the - amount of pointer indirection is taken into account when - determining similarity. Consequently, 'short *' is not similar to - 'short **'. Furthermore, two types that are typedefed are - considered compatible if their underlying types are compatible. - - An 'enum' type is not considered to be compatible with another - 'enum' type even if both are compatible with the same integer type; - this is what the C standard specifies. For example, 'enum {foo, - bar}' is not similar to 'enum {hot, dog}'. - - You typically use this function in code whose execution varies - depending on the arguments' types. For example: - - #define foo(x) \ - ({ \ - typeof (x) tmp = (x); \ - if (__builtin_types_compatible_p (typeof (x), long double)) \ - tmp = foo_long_double (tmp); \ - else if (__builtin_types_compatible_p (typeof (x), double)) \ - tmp = foo_double (tmp); \ - else if (__builtin_types_compatible_p (typeof (x), float)) \ - tmp = foo_float (tmp); \ - else \ - abort (); \ - tmp; \ - }) - - _Note:_ This construct is only available for C. - - -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1, - EXP2) - - You can use the built-in function '__builtin_choose_expr' to - evaluate code depending on the value of a constant expression. - This built-in function returns EXP1 if CONST_EXP, which is an - integer constant expression, is nonzero. Otherwise it returns - EXP2. - - This built-in function is analogous to the '? :' operator in C, - except that the expression returned has its type unaltered by - promotion rules. Also, the built-in function does not evaluate the - expression that is not chosen. For example, if CONST_EXP evaluates - to true, EXP2 is not evaluated even if it has side-effects. - - This built-in function can return an lvalue if the chosen argument - is an lvalue. - - If EXP1 is returned, the return type is the same as EXP1's type. - Similarly, if EXP2 is returned, its return type is the same as - EXP2. - - Example: - - #define foo(x) \ - __builtin_choose_expr ( \ - __builtin_types_compatible_p (typeof (x), double), \ - foo_double (x), \ - __builtin_choose_expr ( \ - __builtin_types_compatible_p (typeof (x), float), \ - foo_float (x), \ - /* The void expression results in a compile-time error \ - when assigning the result to something. */ \ - (void)0)) - - _Note:_ This construct is only available for C. Furthermore, the - unused expression (EXP1 or EXP2 depending on the value of - CONST_EXP) may still generate syntax errors. This may change in - future revisions. - - -- Built-in Function: TYPE __builtin_complex (REAL, IMAG) - - The built-in function '__builtin_complex' is provided for use in - implementing the ISO C11 macros 'CMPLXF', 'CMPLX' and 'CMPLXL'. - REAL and IMAG must have the same type, a real binary floating-point - type, and the result has the corresponding complex type with real - and imaginary parts REAL and IMAG. Unlike 'REAL + I * IMAG', this - works even when infinities, NaNs and negative zeros are involved. - - -- Built-in Function: int __builtin_constant_p (EXP) - You can use the built-in function '__builtin_constant_p' to - determine if a value is known to be constant at compile time and - hence that GCC can perform constant-folding on expressions - involving that value. The argument of the function is the value to - test. The function returns the integer 1 if the argument is known - to be a compile-time constant and 0 if it is not known to be a - compile-time constant. A return of 0 does not indicate that the - value is _not_ a constant, but merely that GCC cannot prove it is a - constant with the specified value of the '-O' option. - - You typically use this function in an embedded application where - memory is a critical resource. If you have some complex - calculation, you may want it to be folded if it involves constants, - but need to call a function if it does not. For example: - - #define Scale_Value(X) \ - (__builtin_constant_p (X) \ - ? ((X) * SCALE + OFFSET) : Scale (X)) - - You may use this built-in function in either a macro or an inline - function. However, if you use it in an inlined function and pass - an argument of the function as the argument to the built-in, GCC - never returns 1 when you call the inline function with a string - constant or compound literal (*note Compound Literals::) and does - not return 1 when you pass a constant numeric value to the inline - function unless you specify the '-O' option. - - You may also use '__builtin_constant_p' in initializers for static - data. For instance, you can write - - static const int table[] = { - __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1, - /* ... */ - }; - - This is an acceptable initializer even if EXPRESSION is not a - constant expression, including the case where - '__builtin_constant_p' returns 1 because EXPRESSION can be folded - to a constant but EXPRESSION contains operands that are not - otherwise permitted in a static initializer (for example, '0 && foo - ()'). GCC must be more conservative about evaluating the built-in - in this case, because it has no opportunity to perform - optimization. - - Previous versions of GCC did not accept this built-in in data - initializers. The earliest version where it is completely safe is - 3.0.1. - - -- Built-in Function: long __builtin_expect (long EXP, long C) - You may use '__builtin_expect' to provide the compiler with branch - prediction information. In general, you should prefer to use - actual profile feedback for this ('-fprofile-arcs'), as programmers - are notoriously bad at predicting how their programs actually - perform. However, there are applications in which this data is - hard to collect. - - The return value is the value of EXP, which should be an integral - expression. The semantics of the built-in are that it is expected - that EXP == C. For example: - - if (__builtin_expect (x, 0)) - foo (); - - indicates that we do not expect to call 'foo', since we expect 'x' - to be zero. Since you are limited to integral expressions for EXP, - you should use constructions such as - - if (__builtin_expect (ptr != NULL, 1)) - foo (*ptr); - - when testing pointer or floating-point values. - - -- Built-in Function: void __builtin_trap (void) - This function causes the program to exit abnormally. GCC - implements this function by using a target-dependent mechanism - (such as intentionally executing an illegal instruction) or by - calling 'abort'. The mechanism used may vary from release to - release so you should not rely on any particular implementation. - - -- Built-in Function: void __builtin_unreachable (void) - If control flow reaches the point of the '__builtin_unreachable', - the program is undefined. It is useful in situations where the - compiler cannot deduce the unreachability of the code. - - One such case is immediately following an 'asm' statement that - either never terminates, or one that transfers control elsewhere - and never returns. In this example, without the - '__builtin_unreachable', GCC issues a warning that control reaches - the end of a non-void function. It also generates code to return - after the 'asm'. - - int f (int c, int v) - { - if (c) - { - return v; - } - else - { - asm("jmp error_handler"); - __builtin_unreachable (); - } - } - - Because the 'asm' statement unconditionally transfers control out - of the function, control never reaches the end of the function - body. The '__builtin_unreachable' is in fact unreachable and - communicates this fact to the compiler. - - Another use for '__builtin_unreachable' is following a call a - function that never returns but that is not declared - '__attribute__((noreturn))', as in this example: - - void function_that_never_returns (void); - - int g (int c) - { - if (c) - { - return 1; - } - else - { - function_that_never_returns (); - __builtin_unreachable (); - } - } - - -- Built-in Function: void *__builtin_assume_aligned (const void *EXP, - size_t ALIGN, ...) - This function returns its first argument, and allows the compiler - to assume that the returned pointer is at least ALIGN bytes - aligned. This built-in can have either two or three arguments, if - it has three, the third argument should have integer type, and if - it is nonzero means misalignment offset. For example: - - void *x = __builtin_assume_aligned (arg, 16); - - means that the compiler can assume 'x', set to 'arg', is at least - 16-byte aligned, while: - - void *x = __builtin_assume_aligned (arg, 32, 8); - - means that the compiler can assume for 'x', set to 'arg', that - '(char *) x - 8' is 32-byte aligned. - - -- Built-in Function: int __builtin_LINE () - This function is the equivalent to the preprocessor '__LINE__' - macro and returns the line number of the invocation of the - built-in. In a C++ default argument for a function F, it gets the - line number of the call to F. - - -- Built-in Function: const char * __builtin_FUNCTION () - This function is the equivalent to the preprocessor '__FUNCTION__' - macro and returns the function name the invocation of the built-in - is in. - - -- Built-in Function: const char * __builtin_FILE () - This function is the equivalent to the preprocessor '__FILE__' - macro and returns the file name the invocation of the built-in is - in. In a C++ default argument for a function F, it gets the file - name of the call to F. - - -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char - *END) - This function is used to flush the processor's instruction cache - for the region of memory between BEGIN inclusive and END exclusive. - Some targets require that the instruction cache be flushed, after - modifying memory containing code, in order to obtain deterministic - behavior. - - If the target does not require instruction cache flushes, - '__builtin___clear_cache' has no effect. Otherwise either - instructions are emitted in-line to clear the instruction cache or - a call to the '__clear_cache' function in libgcc is made. - - -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...) - This function is used to minimize cache-miss latency by moving data - into a cache before it is accessed. You can insert calls to - '__builtin_prefetch' into code for which you know addresses of data - in memory that is likely to be accessed soon. If the target - supports them, data prefetch instructions are generated. If the - prefetch is done early enough before the access then the data will - be in the cache by the time it is accessed. - - The value of ADDR is the address of the memory to prefetch. There - are two optional arguments, RW and LOCALITY. The value of RW is a - compile-time constant one or zero; one means that the prefetch is - preparing for a write to the memory address and zero, the default, - means that the prefetch is preparing for a read. The value - LOCALITY must be a compile-time constant integer between zero and - three. A value of zero means that the data has no temporal - locality, so it need not be left in the cache after the access. A - value of three means that the data has a high degree of temporal - locality and should be left in all levels of cache possible. - Values of one and two mean, respectively, a low or moderate degree - of temporal locality. The default is three. - - for (i = 0; i < n; i++) - { - a[i] = a[i] + b[i]; - __builtin_prefetch (&a[i+j], 1, 1); - __builtin_prefetch (&b[i+j], 0, 1); - /* ... */ - } - - Data prefetch does not generate faults if ADDR is invalid, but the - address expression itself must be valid. For example, a prefetch - of 'p->next' does not fault if 'p->next' is not a valid address, - but evaluation faults if 'p' is not a valid address. - - If the target does not support data prefetch, the address - expression is evaluated if it includes side effects but no other - code is generated and GCC does not issue a warning. - - -- Built-in Function: double __builtin_huge_val (void) - Returns a positive infinity, if supported by the floating-point - format, else 'DBL_MAX'. This function is suitable for implementing - the ISO C macro 'HUGE_VAL'. - - -- Built-in Function: float __builtin_huge_valf (void) - Similar to '__builtin_huge_val', except the return type is 'float'. - - -- Built-in Function: long double __builtin_huge_vall (void) - Similar to '__builtin_huge_val', except the return type is 'long - double'. - - -- Built-in Function: int __builtin_fpclassify (int, int, int, int, - int, ...) - This built-in implements the C99 fpclassify functionality. The - first five int arguments should be the target library's notion of - the possible FP classes and are used for return values. They must - be constant values and they must appear in this order: 'FP_NAN', - 'FP_INFINITE', 'FP_NORMAL', 'FP_SUBNORMAL' and 'FP_ZERO'. The - ellipsis is for exactly one floating-point value to classify. GCC - treats the last argument as type-generic, which means it does not - do default promotion from float to double. - - -- Built-in Function: double __builtin_inf (void) - Similar to '__builtin_huge_val', except a warning is generated if - the target floating-point format does not support infinities. - - -- Built-in Function: _Decimal32 __builtin_infd32 (void) - Similar to '__builtin_inf', except the return type is '_Decimal32'. - - -- Built-in Function: _Decimal64 __builtin_infd64 (void) - Similar to '__builtin_inf', except the return type is '_Decimal64'. - - -- Built-in Function: _Decimal128 __builtin_infd128 (void) - Similar to '__builtin_inf', except the return type is - '_Decimal128'. - - -- Built-in Function: float __builtin_inff (void) - Similar to '__builtin_inf', except the return type is 'float'. - This function is suitable for implementing the ISO C99 macro - 'INFINITY'. - - -- Built-in Function: long double __builtin_infl (void) - Similar to '__builtin_inf', except the return type is 'long - double'. - - -- Built-in Function: int __builtin_isinf_sign (...) - Similar to 'isinf', except the return value is -1 for an argument - of '-Inf' and 1 for an argument of '+Inf'. Note while the - parameter list is an ellipsis, this function only accepts exactly - one floating-point argument. GCC treats this parameter as - type-generic, which means it does not do default promotion from - float to double. - - -- Built-in Function: double __builtin_nan (const char *str) - This is an implementation of the ISO C99 function 'nan'. - - Since ISO C99 defines this function in terms of 'strtod', which we - do not implement, a description of the parsing is in order. The - string is parsed as by 'strtol'; that is, the base is recognized by - leading '0' or '0x' prefixes. The number parsed is placed in the - significand such that the least significant bit of the number is at - the least significant bit of the significand. The number is - truncated to fit the significand field provided. The significand - is forced to be a quiet NaN. - - This function, if given a string literal all of which would have - been consumed by 'strtol', is evaluated early enough that it is - considered a compile-time constant. - - -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str) - Similar to '__builtin_nan', except the return type is '_Decimal32'. - - -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str) - Similar to '__builtin_nan', except the return type is '_Decimal64'. - - -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str) - Similar to '__builtin_nan', except the return type is - '_Decimal128'. - - -- Built-in Function: float __builtin_nanf (const char *str) - Similar to '__builtin_nan', except the return type is 'float'. - - -- Built-in Function: long double __builtin_nanl (const char *str) - Similar to '__builtin_nan', except the return type is 'long - double'. - - -- Built-in Function: double __builtin_nans (const char *str) - Similar to '__builtin_nan', except the significand is forced to be - a signaling NaN. The 'nans' function is proposed by WG14 N965. - - -- Built-in Function: float __builtin_nansf (const char *str) - Similar to '__builtin_nans', except the return type is 'float'. - - -- Built-in Function: long double __builtin_nansl (const char *str) - Similar to '__builtin_nans', except the return type is 'long - double'. - - -- Built-in Function: int __builtin_ffs (int x) - Returns one plus the index of the least significant 1-bit of X, or - if X is zero, returns zero. - - -- Built-in Function: int __builtin_clz (unsigned int x) - Returns the number of leading 0-bits in X, starting at the most - significant bit position. If X is 0, the result is undefined. - - -- Built-in Function: int __builtin_ctz (unsigned int x) - Returns the number of trailing 0-bits in X, starting at the least - significant bit position. If X is 0, the result is undefined. - - -- Built-in Function: int __builtin_clrsb (int x) - Returns the number of leading redundant sign bits in X, i.e. the - number of bits following the most significant bit that are - identical to it. There are no special cases for 0 or other values. - - -- Built-in Function: int __builtin_popcount (unsigned int x) - Returns the number of 1-bits in X. - - -- Built-in Function: int __builtin_parity (unsigned int x) - Returns the parity of X, i.e. the number of 1-bits in X modulo 2. - - -- Built-in Function: int __builtin_ffsl (long) - Similar to '__builtin_ffs', except the argument type is 'long'. - - -- Built-in Function: int __builtin_clzl (unsigned long) - Similar to '__builtin_clz', except the argument type is 'unsigned - long'. - - -- Built-in Function: int __builtin_ctzl (unsigned long) - Similar to '__builtin_ctz', except the argument type is 'unsigned - long'. - - -- Built-in Function: int __builtin_clrsbl (long) - Similar to '__builtin_clrsb', except the argument type is 'long'. - - -- Built-in Function: int __builtin_popcountl (unsigned long) - Similar to '__builtin_popcount', except the argument type is - 'unsigned long'. - - -- Built-in Function: int __builtin_parityl (unsigned long) - Similar to '__builtin_parity', except the argument type is - 'unsigned long'. - - -- Built-in Function: int __builtin_ffsll (long long) - Similar to '__builtin_ffs', except the argument type is 'long - long'. - - -- Built-in Function: int __builtin_clzll (unsigned long long) - Similar to '__builtin_clz', except the argument type is 'unsigned - long long'. - - -- Built-in Function: int __builtin_ctzll (unsigned long long) - Similar to '__builtin_ctz', except the argument type is 'unsigned - long long'. - - -- Built-in Function: int __builtin_clrsbll (long long) - Similar to '__builtin_clrsb', except the argument type is 'long - long'. - - -- Built-in Function: int __builtin_popcountll (unsigned long long) - Similar to '__builtin_popcount', except the argument type is - 'unsigned long long'. - - -- Built-in Function: int __builtin_parityll (unsigned long long) - Similar to '__builtin_parity', except the argument type is - 'unsigned long long'. - - -- Built-in Function: double __builtin_powi (double, int) - Returns the first argument raised to the power of the second. - Unlike the 'pow' function no guarantees about precision and - rounding are made. - - -- Built-in Function: float __builtin_powif (float, int) - Similar to '__builtin_powi', except the argument and return types - are 'float'. - - -- Built-in Function: long double __builtin_powil (long double, int) - Similar to '__builtin_powi', except the argument and return types - are 'long double'. - - -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x) - Returns X with the order of the bytes reversed; for example, - '0xaabb' becomes '0xbbaa'. Byte here always means exactly 8 bits. - - -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x) - Similar to '__builtin_bswap16', except the argument and return - types are 32 bit. - - -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x) - Similar to '__builtin_bswap32', except the argument and return - types are 64 bit. - - -File: gcc.info, Node: Target Builtins, Next: Target Format Checks, Prev: Other Builtins, Up: C Extensions - -6.57 Built-in Functions Specific to Particular Target Machines -============================================================== - -On some target machines, GCC supports many built-in functions specific -to those machines. Generally these generate calls to specific machine -instructions, but allow the compiler to schedule those calls. - -* Menu: - -* Alpha Built-in Functions:: -* Altera Nios II Built-in Functions:: -* ARC Built-in Functions:: -* ARC SIMD Built-in Functions:: -* ARM iWMMXt Built-in Functions:: -* ARM NEON Intrinsics:: -* ARM ACLE Intrinsics:: -* AVR Built-in Functions:: -* Blackfin Built-in Functions:: -* FR-V Built-in Functions:: -* X86 Built-in Functions:: -* X86 transactional memory intrinsics:: -* MIPS DSP Built-in Functions:: -* MIPS Paired-Single Support:: -* MIPS Loongson Built-in Functions:: -* Other MIPS Built-in Functions:: -* MSP430 Built-in Functions:: -* NDS32 Built-in Functions:: -* picoChip Built-in Functions:: -* PowerPC Built-in Functions:: -* PowerPC AltiVec/VSX Built-in Functions:: -* PowerPC Hardware Transactional Memory Built-in Functions:: -* RX Built-in Functions:: -* S/390 System z Built-in Functions:: -* SH Built-in Functions:: -* SPARC VIS Built-in Functions:: -* SPU Built-in Functions:: -* TI C6X Built-in Functions:: -* TILE-Gx Built-in Functions:: -* TILEPro Built-in Functions:: - - -File: gcc.info, Node: Alpha Built-in Functions, Next: Altera Nios II Built-in Functions, Up: Target Builtins - -6.57.1 Alpha Built-in Functions -------------------------------- - -These built-in functions are available for the Alpha family of -processors, depending on the command-line switches used. - - The following built-in functions are always available. They all -generate the machine instruction that is part of the name. - - long __builtin_alpha_implver (void) - long __builtin_alpha_rpcc (void) - long __builtin_alpha_amask (long) - long __builtin_alpha_cmpbge (long, long) - long __builtin_alpha_extbl (long, long) - long __builtin_alpha_extwl (long, long) - long __builtin_alpha_extll (long, long) - long __builtin_alpha_extql (long, long) - long __builtin_alpha_extwh (long, long) - long __builtin_alpha_extlh (long, long) - long __builtin_alpha_extqh (long, long) - long __builtin_alpha_insbl (long, long) - long __builtin_alpha_inswl (long, long) - long __builtin_alpha_insll (long, long) - long __builtin_alpha_insql (long, long) - long __builtin_alpha_inswh (long, long) - long __builtin_alpha_inslh (long, long) - long __builtin_alpha_insqh (long, long) - long __builtin_alpha_mskbl (long, long) - long __builtin_alpha_mskwl (long, long) - long __builtin_alpha_mskll (long, long) - long __builtin_alpha_mskql (long, long) - long __builtin_alpha_mskwh (long, long) - long __builtin_alpha_msklh (long, long) - long __builtin_alpha_mskqh (long, long) - long __builtin_alpha_umulh (long, long) - long __builtin_alpha_zap (long, long) - long __builtin_alpha_zapnot (long, long) - - The following built-in functions are always with '-mmax' or '-mcpu=CPU' -where CPU is 'pca56' or later. They all generate the machine -instruction that is part of the name. - - long __builtin_alpha_pklb (long) - long __builtin_alpha_pkwb (long) - long __builtin_alpha_unpkbl (long) - long __builtin_alpha_unpkbw (long) - long __builtin_alpha_minub8 (long, long) - long __builtin_alpha_minsb8 (long, long) - long __builtin_alpha_minuw4 (long, long) - long __builtin_alpha_minsw4 (long, long) - long __builtin_alpha_maxub8 (long, long) - long __builtin_alpha_maxsb8 (long, long) - long __builtin_alpha_maxuw4 (long, long) - long __builtin_alpha_maxsw4 (long, long) - long __builtin_alpha_perr (long, long) - - The following built-in functions are always with '-mcix' or '-mcpu=CPU' -where CPU is 'ev67' or later. They all generate the machine instruction -that is part of the name. - - long __builtin_alpha_cttz (long) - long __builtin_alpha_ctlz (long) - long __builtin_alpha_ctpop (long) - - The following built-in functions are available on systems that use the -OSF/1 PALcode. Normally they invoke the 'rduniq' and 'wruniq' PAL -calls, but when invoked with '-mtls-kernel', they invoke 'rdval' and -'wrval'. - - void *__builtin_thread_pointer (void) - void __builtin_set_thread_pointer (void *) - - -File: gcc.info, Node: Altera Nios II Built-in Functions, Next: ARC Built-in Functions, Prev: Alpha Built-in Functions, Up: Target Builtins - -6.57.2 Altera Nios II Built-in Functions ----------------------------------------- - -These built-in functions are available for the Altera Nios II family of -processors. - - The following built-in functions are always available. They all -generate the machine instruction that is part of the name. - - int __builtin_ldbio (volatile const void *) - int __builtin_ldbuio (volatile const void *) - int __builtin_ldhio (volatile const void *) - int __builtin_ldhuio (volatile const void *) - int __builtin_ldwio (volatile const void *) - void __builtin_stbio (volatile void *, int) - void __builtin_sthio (volatile void *, int) - void __builtin_stwio (volatile void *, int) - void __builtin_sync (void) - int __builtin_rdctl (int) - void __builtin_wrctl (int, int) - - The following built-in functions are always available. They all -generate a Nios II Custom Instruction. The name of the function -represents the types that the function takes and returns. The letter -before the 'n' is the return type or void if absent. The 'n' represents -the first parameter to all the custom instructions, the custom -instruction number. The two letters after the 'n' represent the up to -two parameters to the function. - - The letters represent the following data types: -'<no letter>' - 'void' for return type and no parameter for parameter types. - -'i' - 'int' for return type and parameter type - -'f' - 'float' for return type and parameter type - -'p' - 'void *' for return type and parameter type - - And the function names are: - void __builtin_custom_n (void) - void __builtin_custom_ni (int) - void __builtin_custom_nf (float) - void __builtin_custom_np (void *) - void __builtin_custom_nii (int, int) - void __builtin_custom_nif (int, float) - void __builtin_custom_nip (int, void *) - void __builtin_custom_nfi (float, int) - void __builtin_custom_nff (float, float) - void __builtin_custom_nfp (float, void *) - void __builtin_custom_npi (void *, int) - void __builtin_custom_npf (void *, float) - void __builtin_custom_npp (void *, void *) - int __builtin_custom_in (void) - int __builtin_custom_ini (int) - int __builtin_custom_inf (float) - int __builtin_custom_inp (void *) - int __builtin_custom_inii (int, int) - int __builtin_custom_inif (int, float) - int __builtin_custom_inip (int, void *) - int __builtin_custom_infi (float, int) - int __builtin_custom_inff (float, float) - int __builtin_custom_infp (float, void *) - int __builtin_custom_inpi (void *, int) - int __builtin_custom_inpf (void *, float) - int __builtin_custom_inpp (void *, void *) - float __builtin_custom_fn (void) - float __builtin_custom_fni (int) - float __builtin_custom_fnf (float) - float __builtin_custom_fnp (void *) - float __builtin_custom_fnii (int, int) - float __builtin_custom_fnif (int, float) - float __builtin_custom_fnip (int, void *) - float __builtin_custom_fnfi (float, int) - float __builtin_custom_fnff (float, float) - float __builtin_custom_fnfp (float, void *) - float __builtin_custom_fnpi (void *, int) - float __builtin_custom_fnpf (void *, float) - float __builtin_custom_fnpp (void *, void *) - void * __builtin_custom_pn (void) - void * __builtin_custom_pni (int) - void * __builtin_custom_pnf (float) - void * __builtin_custom_pnp (void *) - void * __builtin_custom_pnii (int, int) - void * __builtin_custom_pnif (int, float) - void * __builtin_custom_pnip (int, void *) - void * __builtin_custom_pnfi (float, int) - void * __builtin_custom_pnff (float, float) - void * __builtin_custom_pnfp (float, void *) - void * __builtin_custom_pnpi (void *, int) - void * __builtin_custom_pnpf (void *, float) - void * __builtin_custom_pnpp (void *, void *) - - -File: gcc.info, Node: ARC Built-in Functions, Next: ARC SIMD Built-in Functions, Prev: Altera Nios II Built-in Functions, Up: Target Builtins - -6.57.3 ARC Built-in Functions ------------------------------ - -The following built-in functions are provided for ARC targets. The -built-ins generate the corresponding assembly instructions. In the -examples given below, the generated code often requires an operand or -result to be in a register. Where necessary further code will be -generated to ensure this is true, but for brevity this is not described -in each case. - - _Note:_ Using a built-in to generate an instruction not supported by a -target may cause problems. At present the compiler is not guaranteed to -detect such misuse, and as a result an internal compiler error may be -generated. - - -- Built-in Function: int __builtin_arc_aligned (void *VAL, int - ALIGNVAL) - Return 1 if VAL is known to have the byte alignment given by - ALIGNVAL, otherwise return 0. Note that this is different from - __alignof__(*(char *)VAL) >= alignval - because __alignof__ sees only the type of the dereference, whereas - __builtin_arc_align uses alignment information from the pointer as - well as from the pointed-to type. The information available will - depend on optimization level. - - -- Built-in Function: void __builtin_arc_brk (void) - Generates - brk - - -- Built-in Function: unsigned int __builtin_arc_core_read (unsigned - int REGNO) - The operand is the number of a register to be read. Generates: - mov DEST, rREGNO - where the value in DEST will be the result returned from the - built-in. - - -- Built-in Function: void __builtin_arc_core_write (unsigned int - REGNO, unsigned int VAL) - The first operand is the number of a register to be written, the - second operand is a compile time constant to write into that - register. Generates: - mov rREGNO, VAL - - -- Built-in Function: int __builtin_arc_divaw (int A, int B) - Only available if either '-mcpu=ARC700' or '-meA' is set. - Generates: - divaw DEST, A, B - where the value in DEST will be the result returned from the - built-in. - - -- Built-in Function: void __builtin_arc_flag (unsigned int A) - Generates - flag A - - -- Built-in Function: unsigned int __builtin_arc_lr (unsigned int AUXR) - The operand, AUXV, is the address of an auxiliary register and must - be a compile time constant. Generates: - lr DEST, [AUXR] - Where the value in DEST will be the result returned from the - built-in. - - -- Built-in Function: void __builtin_arc_mul64 (int A, int B) - Only available with '-mmul64'. Generates: - mul64 A, B - - -- Built-in Function: void __builtin_arc_mulu64 (unsigned int A, - unsigned int B) - Only available with '-mmul64'. Generates: - mulu64 A, B - - -- Built-in Function: void __builtin_arc_nop (void) - Generates: - nop - - -- Built-in Function: int __builtin_arc_norm (int SRC) - Only valid if the 'norm' instruction is available through the - '-mnorm' option or by default with '-mcpu=ARC700'. Generates: - norm DEST, SRC - Where the value in DEST will be the result returned from the - built-in. - - -- Built-in Function: short int __builtin_arc_normw (short int SRC) - Only valid if the 'normw' instruction is available through the - '-mnorm' option or by default with '-mcpu=ARC700'. Generates: - normw DEST, SRC - Where the value in DEST will be the result returned from the - built-in. - - -- Built-in Function: void __builtin_arc_rtie (void) - Generates: - rtie - - -- Built-in Function: void __builtin_arc_sleep (int A - Generates: - sleep A - - -- Built-in Function: void __builtin_arc_sr (unsigned int AUXR, - unsigned int VAL) - The first argument, AUXV, is the address of an auxiliary register, - the second argument, VAL, is a compile time constant to be written - to the register. Generates: - sr AUXR, [VAL] - - -- Built-in Function: int __builtin_arc_swap (int SRC) - Only valid with '-mswap'. Generates: - swap DEST, SRC - Where the value in DEST will be the result returned from the - built-in. - - -- Built-in Function: void __builtin_arc_swi (void) - Generates: - swi - - -- Built-in Function: void __builtin_arc_sync (void) - Only available with '-mcpu=ARC700'. Generates: - sync - - -- Built-in Function: void __builtin_arc_trap_s (unsigned int C) - Only available with '-mcpu=ARC700'. Generates: - trap_s C - - -- Built-in Function: void __builtin_arc_unimp_s (void) - Only available with '-mcpu=ARC700'. Generates: - unimp_s - - The instructions generated by the following builtins are not considered -as candidates for scheduling. They are not moved around by the compiler -during scheduling, and thus can be expected to appear where they are put -in the C code: - __builtin_arc_brk() - __builtin_arc_core_read() - __builtin_arc_core_write() - __builtin_arc_flag() - __builtin_arc_lr() - __builtin_arc_sleep() - __builtin_arc_sr() - __builtin_arc_swi() - - -File: gcc.info, Node: ARC SIMD Built-in Functions, Next: ARM iWMMXt Built-in Functions, Prev: ARC Built-in Functions, Up: Target Builtins - -6.57.4 ARC SIMD Built-in Functions ----------------------------------- - -SIMD builtins provided by the compiler can be used to generate the -vector instructions. This section describes the available builtins and -their usage in programs. With the '-msimd' option, the compiler -provides 128-bit vector types, which can be specified using the -'vector_size' attribute. The header file 'arc-simd.h' can be included -to use the following predefined types: - typedef int __v4si __attribute__((vector_size(16))); - typedef short __v8hi __attribute__((vector_size(16))); - - These types can be used to define 128-bit variables. The built-in -functions listed in the following section can be used on these variables -to generate the vector operations. - - For all builtins, '__builtin_arc_SOMEINSN', the header file -'arc-simd.h' also provides equivalent macros called '_SOMEINSN' that can -be used for programming ease and improved readability. The following -macros for DMA control are also provided: - #define _setup_dma_in_channel_reg _vdiwr - #define _setup_dma_out_channel_reg _vdowr - - The following is a complete list of all the SIMD built-ins provided for -ARC, grouped by calling signature. - - The following take two '__v8hi' arguments and return a '__v8hi' result: - __v8hi __builtin_arc_vaddaw (__v8hi, __v8hi) - __v8hi __builtin_arc_vaddw (__v8hi, __v8hi) - __v8hi __builtin_arc_vand (__v8hi, __v8hi) - __v8hi __builtin_arc_vandaw (__v8hi, __v8hi) - __v8hi __builtin_arc_vavb (__v8hi, __v8hi) - __v8hi __builtin_arc_vavrb (__v8hi, __v8hi) - __v8hi __builtin_arc_vbic (__v8hi, __v8hi) - __v8hi __builtin_arc_vbicaw (__v8hi, __v8hi) - __v8hi __builtin_arc_vdifaw (__v8hi, __v8hi) - __v8hi __builtin_arc_vdifw (__v8hi, __v8hi) - __v8hi __builtin_arc_veqw (__v8hi, __v8hi) - __v8hi __builtin_arc_vh264f (__v8hi, __v8hi) - __v8hi __builtin_arc_vh264ft (__v8hi, __v8hi) - __v8hi __builtin_arc_vh264fw (__v8hi, __v8hi) - __v8hi __builtin_arc_vlew (__v8hi, __v8hi) - __v8hi __builtin_arc_vltw (__v8hi, __v8hi) - __v8hi __builtin_arc_vmaxaw (__v8hi, __v8hi) - __v8hi __builtin_arc_vmaxw (__v8hi, __v8hi) - __v8hi __builtin_arc_vminaw (__v8hi, __v8hi) - __v8hi __builtin_arc_vminw (__v8hi, __v8hi) - __v8hi __builtin_arc_vmr1aw (__v8hi, __v8hi) - __v8hi __builtin_arc_vmr1w (__v8hi, __v8hi) - __v8hi __builtin_arc_vmr2aw (__v8hi, __v8hi) - __v8hi __builtin_arc_vmr2w (__v8hi, __v8hi) - __v8hi __builtin_arc_vmr3aw (__v8hi, __v8hi) - __v8hi __builtin_arc_vmr3w (__v8hi, __v8hi) - __v8hi __builtin_arc_vmr4aw (__v8hi, __v8hi) - __v8hi __builtin_arc_vmr4w (__v8hi, __v8hi) - __v8hi __builtin_arc_vmr5aw (__v8hi, __v8hi) - __v8hi __builtin_arc_vmr5w (__v8hi, __v8hi) - __v8hi __builtin_arc_vmr6aw (__v8hi, __v8hi) - __v8hi __builtin_arc_vmr6w (__v8hi, __v8hi) - __v8hi __builtin_arc_vmr7aw (__v8hi, __v8hi) - __v8hi __builtin_arc_vmr7w (__v8hi, __v8hi) - __v8hi __builtin_arc_vmrb (__v8hi, __v8hi) - __v8hi __builtin_arc_vmulaw (__v8hi, __v8hi) - __v8hi __builtin_arc_vmulfaw (__v8hi, __v8hi) - __v8hi __builtin_arc_vmulfw (__v8hi, __v8hi) - __v8hi __builtin_arc_vmulw (__v8hi, __v8hi) - __v8hi __builtin_arc_vnew (__v8hi, __v8hi) - __v8hi __builtin_arc_vor (__v8hi, __v8hi) - __v8hi __builtin_arc_vsubaw (__v8hi, __v8hi) - __v8hi __builtin_arc_vsubw (__v8hi, __v8hi) - __v8hi __builtin_arc_vsummw (__v8hi, __v8hi) - __v8hi __builtin_arc_vvc1f (__v8hi, __v8hi) - __v8hi __builtin_arc_vvc1ft (__v8hi, __v8hi) - __v8hi __builtin_arc_vxor (__v8hi, __v8hi) - __v8hi __builtin_arc_vxoraw (__v8hi, __v8hi) - - The following take one '__v8hi' and one 'int' argument and return a -'__v8hi' result: - - __v8hi __builtin_arc_vbaddw (__v8hi, int) - __v8hi __builtin_arc_vbmaxw (__v8hi, int) - __v8hi __builtin_arc_vbminw (__v8hi, int) - __v8hi __builtin_arc_vbmulaw (__v8hi, int) - __v8hi __builtin_arc_vbmulfw (__v8hi, int) - __v8hi __builtin_arc_vbmulw (__v8hi, int) - __v8hi __builtin_arc_vbrsubw (__v8hi, int) - __v8hi __builtin_arc_vbsubw (__v8hi, int) - - The following take one '__v8hi' argument and one 'int' argument which -must be a 3-bit compile time constant indicating a register number -I0-I7. They return a '__v8hi' result. - __v8hi __builtin_arc_vasrw (__v8hi, const int) - __v8hi __builtin_arc_vsr8 (__v8hi, const int) - __v8hi __builtin_arc_vsr8aw (__v8hi, const int) - - The following take one '__v8hi' argument and one 'int' argument which -must be a 6-bit compile time constant. They return a '__v8hi' result. - __v8hi __builtin_arc_vasrpwbi (__v8hi, const int) - __v8hi __builtin_arc_vasrrpwbi (__v8hi, const int) - __v8hi __builtin_arc_vasrrwi (__v8hi, const int) - __v8hi __builtin_arc_vasrsrwi (__v8hi, const int) - __v8hi __builtin_arc_vasrwi (__v8hi, const int) - __v8hi __builtin_arc_vsr8awi (__v8hi, const int) - __v8hi __builtin_arc_vsr8i (__v8hi, const int) - - The following take one '__v8hi' argument and one 'int' argument which -must be a 8-bit compile time constant. They return a '__v8hi' result. - __v8hi __builtin_arc_vd6tapf (__v8hi, const int) - __v8hi __builtin_arc_vmvaw (__v8hi, const int) - __v8hi __builtin_arc_vmvw (__v8hi, const int) - __v8hi __builtin_arc_vmvzw (__v8hi, const int) - - The following take two 'int' arguments, the second of which which must -be a 8-bit compile time constant. They return a '__v8hi' result: - __v8hi __builtin_arc_vmovaw (int, const int) - __v8hi __builtin_arc_vmovw (int, const int) - __v8hi __builtin_arc_vmovzw (int, const int) - - The following take a single '__v8hi' argument and return a '__v8hi' -result: - __v8hi __builtin_arc_vabsaw (__v8hi) - __v8hi __builtin_arc_vabsw (__v8hi) - __v8hi __builtin_arc_vaddsuw (__v8hi) - __v8hi __builtin_arc_vexch1 (__v8hi) - __v8hi __builtin_arc_vexch2 (__v8hi) - __v8hi __builtin_arc_vexch4 (__v8hi) - __v8hi __builtin_arc_vsignw (__v8hi) - __v8hi __builtin_arc_vupbaw (__v8hi) - __v8hi __builtin_arc_vupbw (__v8hi) - __v8hi __builtin_arc_vupsbaw (__v8hi) - __v8hi __builtin_arc_vupsbw (__v8hi) - - The followign take two 'int' arguments and return no result: - void __builtin_arc_vdirun (int, int) - void __builtin_arc_vdorun (int, int) - - The following take two 'int' arguments and return no result. The first -argument must a 3-bit compile time constant indicating one of the -DR0-DR7 DMA setup channels: - void __builtin_arc_vdiwr (const int, int) - void __builtin_arc_vdowr (const int, int) - - The following take an 'int' argument and return no result: - void __builtin_arc_vendrec (int) - void __builtin_arc_vrec (int) - void __builtin_arc_vrecrun (int) - void __builtin_arc_vrun (int) - - The following take a '__v8hi' argument and two 'int' arguments and -return a '__v8hi' result. The second argument must be a 3-bit compile -time constants, indicating one the registers I0-I7, and the third -argument must be an 8-bit compile time constant. - - _Note:_ Although the equivalent hardware instructions do not take an -SIMD register as an operand, these builtins overwrite the relevant bits -of the '__v8hi' register provided as the first argument with the value -loaded from the '[Ib, u8]' location in the SDM. - - __v8hi __builtin_arc_vld32 (__v8hi, const int, const int) - __v8hi __builtin_arc_vld32wh (__v8hi, const int, const int) - __v8hi __builtin_arc_vld32wl (__v8hi, const int, const int) - __v8hi __builtin_arc_vld64 (__v8hi, const int, const int) - - The following take two 'int' arguments and return a '__v8hi' result. -The first argument must be a 3-bit compile time constants, indicating -one the registers I0-I7, and the second argument must be an 8-bit -compile time constant. - - __v8hi __builtin_arc_vld128 (const int, const int) - __v8hi __builtin_arc_vld64w (const int, const int) - - The following take a '__v8hi' argument and two 'int' arguments and -return no result. The second argument must be a 3-bit compile time -constants, indicating one the registers I0-I7, and the third argument -must be an 8-bit compile time constant. - - void __builtin_arc_vst128 (__v8hi, const int, const int) - void __builtin_arc_vst64 (__v8hi, const int, const int) - - The following take a '__v8hi' argument and three 'int' arguments and -return no result. The second argument must be a 3-bit compile-time -constant, identifying the 16-bit sub-register to be stored, the third -argument must be a 3-bit compile time constants, indicating one the -registers I0-I7, and the fourth argument must be an 8-bit compile time -constant. - - void __builtin_arc_vst16_n (__v8hi, const int, const int, const int) - void __builtin_arc_vst32_n (__v8hi, const int, const int, const int) - - -File: gcc.info, Node: ARM iWMMXt Built-in Functions, Next: ARM NEON Intrinsics, Prev: ARC SIMD Built-in Functions, Up: Target Builtins - -6.57.5 ARM iWMMXt Built-in Functions ------------------------------------- - -These built-in functions are available for the ARM family of processors -when the '-mcpu=iwmmxt' switch is used: - - typedef int v2si __attribute__ ((vector_size (8))); - typedef short v4hi __attribute__ ((vector_size (8))); - typedef char v8qi __attribute__ ((vector_size (8))); - - int __builtin_arm_getwcgr0 (void) - void __builtin_arm_setwcgr0 (int) - int __builtin_arm_getwcgr1 (void) - void __builtin_arm_setwcgr1 (int) - int __builtin_arm_getwcgr2 (void) - void __builtin_arm_setwcgr2 (int) - int __builtin_arm_getwcgr3 (void) - void __builtin_arm_setwcgr3 (int) - int __builtin_arm_textrmsb (v8qi, int) - int __builtin_arm_textrmsh (v4hi, int) - int __builtin_arm_textrmsw (v2si, int) - int __builtin_arm_textrmub (v8qi, int) - int __builtin_arm_textrmuh (v4hi, int) - int __builtin_arm_textrmuw (v2si, int) - v8qi __builtin_arm_tinsrb (v8qi, int, int) - v4hi __builtin_arm_tinsrh (v4hi, int, int) - v2si __builtin_arm_tinsrw (v2si, int, int) - long long __builtin_arm_tmia (long long, int, int) - long long __builtin_arm_tmiabb (long long, int, int) - long long __builtin_arm_tmiabt (long long, int, int) - long long __builtin_arm_tmiaph (long long, int, int) - long long __builtin_arm_tmiatb (long long, int, int) - long long __builtin_arm_tmiatt (long long, int, int) - int __builtin_arm_tmovmskb (v8qi) - int __builtin_arm_tmovmskh (v4hi) - int __builtin_arm_tmovmskw (v2si) - long long __builtin_arm_waccb (v8qi) - long long __builtin_arm_wacch (v4hi) - long long __builtin_arm_waccw (v2si) - v8qi __builtin_arm_waddb (v8qi, v8qi) - v8qi __builtin_arm_waddbss (v8qi, v8qi) - v8qi __builtin_arm_waddbus (v8qi, v8qi) - v4hi __builtin_arm_waddh (v4hi, v4hi) - v4hi __builtin_arm_waddhss (v4hi, v4hi) - v4hi __builtin_arm_waddhus (v4hi, v4hi) - v2si __builtin_arm_waddw (v2si, v2si) - v2si __builtin_arm_waddwss (v2si, v2si) - v2si __builtin_arm_waddwus (v2si, v2si) - v8qi __builtin_arm_walign (v8qi, v8qi, int) - long long __builtin_arm_wand(long long, long long) - long long __builtin_arm_wandn (long long, long long) - v8qi __builtin_arm_wavg2b (v8qi, v8qi) - v8qi __builtin_arm_wavg2br (v8qi, v8qi) - v4hi __builtin_arm_wavg2h (v4hi, v4hi) - v4hi __builtin_arm_wavg2hr (v4hi, v4hi) - v8qi __builtin_arm_wcmpeqb (v8qi, v8qi) - v4hi __builtin_arm_wcmpeqh (v4hi, v4hi) - v2si __builtin_arm_wcmpeqw (v2si, v2si) - v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi) - v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi) - v2si __builtin_arm_wcmpgtsw (v2si, v2si) - v8qi __builtin_arm_wcmpgtub (v8qi, v8qi) - v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi) - v2si __builtin_arm_wcmpgtuw (v2si, v2si) - long long __builtin_arm_wmacs (long long, v4hi, v4hi) - long long __builtin_arm_wmacsz (v4hi, v4hi) - long long __builtin_arm_wmacu (long long, v4hi, v4hi) - long long __builtin_arm_wmacuz (v4hi, v4hi) - v4hi __builtin_arm_wmadds (v4hi, v4hi) - v4hi __builtin_arm_wmaddu (v4hi, v4hi) - v8qi __builtin_arm_wmaxsb (v8qi, v8qi) - v4hi __builtin_arm_wmaxsh (v4hi, v4hi) - v2si __builtin_arm_wmaxsw (v2si, v2si) - v8qi __builtin_arm_wmaxub (v8qi, v8qi) - v4hi __builtin_arm_wmaxuh (v4hi, v4hi) - v2si __builtin_arm_wmaxuw (v2si, v2si) - v8qi __builtin_arm_wminsb (v8qi, v8qi) - v4hi __builtin_arm_wminsh (v4hi, v4hi) - v2si __builtin_arm_wminsw (v2si, v2si) - v8qi __builtin_arm_wminub (v8qi, v8qi) - v4hi __builtin_arm_wminuh (v4hi, v4hi) - v2si __builtin_arm_wminuw (v2si, v2si) - v4hi __builtin_arm_wmulsm (v4hi, v4hi) - v4hi __builtin_arm_wmulul (v4hi, v4hi) - v4hi __builtin_arm_wmulum (v4hi, v4hi) - long long __builtin_arm_wor (long long, long long) - v2si __builtin_arm_wpackdss (long long, long long) - v2si __builtin_arm_wpackdus (long long, long long) - v8qi __builtin_arm_wpackhss (v4hi, v4hi) - v8qi __builtin_arm_wpackhus (v4hi, v4hi) - v4hi __builtin_arm_wpackwss (v2si, v2si) - v4hi __builtin_arm_wpackwus (v2si, v2si) - long long __builtin_arm_wrord (long long, long long) - long long __builtin_arm_wrordi (long long, int) - v4hi __builtin_arm_wrorh (v4hi, long long) - v4hi __builtin_arm_wrorhi (v4hi, int) - v2si __builtin_arm_wrorw (v2si, long long) - v2si __builtin_arm_wrorwi (v2si, int) - v2si __builtin_arm_wsadb (v2si, v8qi, v8qi) - v2si __builtin_arm_wsadbz (v8qi, v8qi) - v2si __builtin_arm_wsadh (v2si, v4hi, v4hi) - v2si __builtin_arm_wsadhz (v4hi, v4hi) - v4hi __builtin_arm_wshufh (v4hi, int) - long long __builtin_arm_wslld (long long, long long) - long long __builtin_arm_wslldi (long long, int) - v4hi __builtin_arm_wsllh (v4hi, long long) - v4hi __builtin_arm_wsllhi (v4hi, int) - v2si __builtin_arm_wsllw (v2si, long long) - v2si __builtin_arm_wsllwi (v2si, int) - long long __builtin_arm_wsrad (long long, long long) - long long __builtin_arm_wsradi (long long, int) - v4hi __builtin_arm_wsrah (v4hi, long long) - v4hi __builtin_arm_wsrahi (v4hi, int) - v2si __builtin_arm_wsraw (v2si, long long) - v2si __builtin_arm_wsrawi (v2si, int) - long long __builtin_arm_wsrld (long long, long long) - long long __builtin_arm_wsrldi (long long, int) - v4hi __builtin_arm_wsrlh (v4hi, long long) - v4hi __builtin_arm_wsrlhi (v4hi, int) - v2si __builtin_arm_wsrlw (v2si, long long) - v2si __builtin_arm_wsrlwi (v2si, int) - v8qi __builtin_arm_wsubb (v8qi, v8qi) - v8qi __builtin_arm_wsubbss (v8qi, v8qi) - v8qi __builtin_arm_wsubbus (v8qi, v8qi) - v4hi __builtin_arm_wsubh (v4hi, v4hi) - v4hi __builtin_arm_wsubhss (v4hi, v4hi) - v4hi __builtin_arm_wsubhus (v4hi, v4hi) - v2si __builtin_arm_wsubw (v2si, v2si) - v2si __builtin_arm_wsubwss (v2si, v2si) - v2si __builtin_arm_wsubwus (v2si, v2si) - v4hi __builtin_arm_wunpckehsb (v8qi) - v2si __builtin_arm_wunpckehsh (v4hi) - long long __builtin_arm_wunpckehsw (v2si) - v4hi __builtin_arm_wunpckehub (v8qi) - v2si __builtin_arm_wunpckehuh (v4hi) - long long __builtin_arm_wunpckehuw (v2si) - v4hi __builtin_arm_wunpckelsb (v8qi) - v2si __builtin_arm_wunpckelsh (v4hi) - long long __builtin_arm_wunpckelsw (v2si) - v4hi __builtin_arm_wunpckelub (v8qi) - v2si __builtin_arm_wunpckeluh (v4hi) - long long __builtin_arm_wunpckeluw (v2si) - v8qi __builtin_arm_wunpckihb (v8qi, v8qi) - v4hi __builtin_arm_wunpckihh (v4hi, v4hi) - v2si __builtin_arm_wunpckihw (v2si, v2si) - v8qi __builtin_arm_wunpckilb (v8qi, v8qi) - v4hi __builtin_arm_wunpckilh (v4hi, v4hi) - v2si __builtin_arm_wunpckilw (v2si, v2si) - long long __builtin_arm_wxor (long long, long long) - long long __builtin_arm_wzero () - - -File: gcc.info, Node: ARM NEON Intrinsics, Next: ARM ACLE Intrinsics, Prev: ARM iWMMXt Built-in Functions, Up: Target Builtins - -6.57.6 ARM NEON Intrinsics --------------------------- - -These built-in intrinsics for the ARM Advanced SIMD extension are -available when the '-mfpu=neon' switch is used: - -6.57.6.1 Addition -................. - - * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vadd.i32 D0, D0, D0' - - * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vadd.i16 D0, D0, D0' - - * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vadd.i8 D0, D0, D0' - - * int32x2_t vadd_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vadd.i32 D0, D0, D0' - - * int16x4_t vadd_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vadd.i16 D0, D0, D0' - - * int8x8_t vadd_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vadd.i8 D0, D0, D0' - - * float32x2_t vadd_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vadd.f32 D0, D0, D0' - - * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t) - - * int64x1_t vadd_s64 (int64x1_t, int64x1_t) - - * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vadd.i32 Q0, Q0, Q0' - - * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vadd.i16 Q0, Q0, Q0' - - * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vadd.i8 Q0, Q0, Q0' - - * int32x4_t vaddq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vadd.i32 Q0, Q0, Q0' - - * int16x8_t vaddq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vadd.i16 Q0, Q0, Q0' - - * int8x16_t vaddq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vadd.i8 Q0, Q0, Q0' - - * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t) - _Form of expected instruction(s):_ 'vadd.i64 Q0, Q0, Q0' - - * int64x2_t vaddq_s64 (int64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vadd.i64 Q0, Q0, Q0' - - * float32x4_t vaddq_f32 (float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vadd.f32 Q0, Q0, Q0' - - * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vaddl.u32 Q0, D0, D0' - - * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vaddl.u16 Q0, D0, D0' - - * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vaddl.u8 Q0, D0, D0' - - * int64x2_t vaddl_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vaddl.s32 Q0, D0, D0' - - * int32x4_t vaddl_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vaddl.s16 Q0, D0, D0' - - * int16x8_t vaddl_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vaddl.s8 Q0, D0, D0' - - * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vaddw.u32 Q0, Q0, D0' - - * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vaddw.u16 Q0, Q0, D0' - - * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vaddw.u8 Q0, Q0, D0' - - * int64x2_t vaddw_s32 (int64x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vaddw.s32 Q0, Q0, D0' - - * int32x4_t vaddw_s16 (int32x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vaddw.s16 Q0, Q0, D0' - - * int16x8_t vaddw_s8 (int16x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vaddw.s8 Q0, Q0, D0' - - * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vhadd.u32 D0, D0, D0' - - * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vhadd.u16 D0, D0, D0' - - * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vhadd.u8 D0, D0, D0' - - * int32x2_t vhadd_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vhadd.s32 D0, D0, D0' - - * int16x4_t vhadd_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vhadd.s16 D0, D0, D0' - - * int8x8_t vhadd_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vhadd.s8 D0, D0, D0' - - * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vhadd.u32 Q0, Q0, Q0' - - * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vhadd.u16 Q0, Q0, Q0' - - * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vhadd.u8 Q0, Q0, Q0' - - * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vhadd.s32 Q0, Q0, Q0' - - * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vhadd.s16 Q0, Q0, Q0' - - * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vhadd.s8 Q0, Q0, Q0' - - * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vrhadd.u32 D0, D0, D0' - - * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vrhadd.u16 D0, D0, D0' - - * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vrhadd.u8 D0, D0, D0' - - * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vrhadd.s32 D0, D0, D0' - - * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vrhadd.s16 D0, D0, D0' - - * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vrhadd.s8 D0, D0, D0' - - * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vrhadd.u32 Q0, Q0, Q0' - - * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vrhadd.u16 Q0, Q0, Q0' - - * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vrhadd.u8 Q0, Q0, Q0' - - * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vrhadd.s32 Q0, Q0, Q0' - - * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vrhadd.s16 Q0, Q0, Q0' - - * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vrhadd.s8 Q0, Q0, Q0' - - * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vqadd.u32 D0, D0, D0' - - * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vqadd.u16 D0, D0, D0' - - * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vqadd.u8 D0, D0, D0' - - * int32x2_t vqadd_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vqadd.s32 D0, D0, D0' - - * int16x4_t vqadd_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vqadd.s16 D0, D0, D0' - - * int8x8_t vqadd_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vqadd.s8 D0, D0, D0' - - * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t) - _Form of expected instruction(s):_ 'vqadd.u64 D0, D0, D0' - - * int64x1_t vqadd_s64 (int64x1_t, int64x1_t) - _Form of expected instruction(s):_ 'vqadd.s64 D0, D0, D0' - - * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vqadd.u32 Q0, Q0, Q0' - - * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vqadd.u16 Q0, Q0, Q0' - - * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vqadd.u8 Q0, Q0, Q0' - - * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vqadd.s32 Q0, Q0, Q0' - - * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vqadd.s16 Q0, Q0, Q0' - - * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vqadd.s8 Q0, Q0, Q0' - - * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t) - _Form of expected instruction(s):_ 'vqadd.u64 Q0, Q0, Q0' - - * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vqadd.s64 Q0, Q0, Q0' - - * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t) - _Form of expected instruction(s):_ 'vaddhn.i64 D0, Q0, Q0' - - * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vaddhn.i32 D0, Q0, Q0' - - * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vaddhn.i16 D0, Q0, Q0' - - * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vaddhn.i64 D0, Q0, Q0' - - * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vaddhn.i32 D0, Q0, Q0' - - * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vaddhn.i16 D0, Q0, Q0' - - * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t) - _Form of expected instruction(s):_ 'vraddhn.i64 D0, Q0, Q0' - - * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vraddhn.i32 D0, Q0, Q0' - - * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vraddhn.i16 D0, Q0, Q0' - - * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vraddhn.i64 D0, Q0, Q0' - - * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vraddhn.i32 D0, Q0, Q0' - - * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vraddhn.i16 D0, Q0, Q0' - -6.57.6.2 Multiplication -....................... - - * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0' - - * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0' - - * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vmul.i8 D0, D0, D0' - - * int32x2_t vmul_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0' - - * int16x4_t vmul_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0' - - * int8x8_t vmul_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vmul.i8 D0, D0, D0' - - * float32x2_t vmul_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0' - - * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t) - _Form of expected instruction(s):_ 'vmul.p8 D0, D0, D0' - - * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, Q0' - - * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, Q0' - - * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vmul.i8 Q0, Q0, Q0' - - * int32x4_t vmulq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, Q0' - - * int16x8_t vmulq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, Q0' - - * int8x16_t vmulq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vmul.i8 Q0, Q0, Q0' - - * float32x4_t vmulq_f32 (float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, Q0' - - * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t) - _Form of expected instruction(s):_ 'vmul.p8 Q0, Q0, Q0' - - * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0' - - * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0' - - * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, Q0' - - * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, Q0' - - * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0' - - * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0' - - * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, Q0' - - * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, Q0' - - * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0' - - * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0' - - * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vmull.u8 Q0, D0, D0' - - * int64x2_t vmull_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0' - - * int32x4_t vmull_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0' - - * int16x8_t vmull_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vmull.s8 Q0, D0, D0' - - * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t) - _Form of expected instruction(s):_ 'vmull.p8 Q0, D0, D0' - - * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0' - - * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0' - -6.57.6.3 Multiply-accumulate -............................ - - * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0' - - * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0' - - * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vmla.i8 D0, D0, D0' - - * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0' - - * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0' - - * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vmla.i8 D0, D0, D0' - - * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0' - - * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, Q0' - - * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, Q0' - - * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vmla.i8 Q0, Q0, Q0' - - * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, Q0' - - * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, Q0' - - * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vmla.i8 Q0, Q0, Q0' - - * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, Q0' - - * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0' - - * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0' - - * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vmlal.u8 Q0, D0, D0' - - * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0' - - * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0' - - * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vmlal.s8 Q0, D0, D0' - - * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0' - - * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0' - -6.57.6.4 Multiply-subtract -.......................... - - * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0' - - * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0' - - * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vmls.i8 D0, D0, D0' - - * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0' - - * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0' - - * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vmls.i8 D0, D0, D0' - - * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0' - - * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, Q0' - - * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, Q0' - - * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vmls.i8 Q0, Q0, Q0' - - * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, Q0' - - * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, Q0' - - * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vmls.i8 Q0, Q0, Q0' - - * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, Q0' - - * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0' - - * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0' - - * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vmlsl.u8 Q0, D0, D0' - - * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0' - - * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0' - - * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vmlsl.s8 Q0, D0, D0' - - * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0' - - * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0' - -6.57.6.5 Fused-multiply-accumulate -.................................. - - * float32x2_t vfma_f32 (float32x2_t, float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vfma.f32 D0, D0, D0' - - * float32x4_t vfmaq_f32 (float32x4_t, float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vfma.f32 Q0, Q0, Q0' - -6.57.6.6 Fused-multiply-subtract -................................ - - * float32x2_t vfms_f32 (float32x2_t, float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vfms.f32 D0, D0, D0' - - * float32x4_t vfmsq_f32 (float32x4_t, float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vfms.f32 Q0, Q0, Q0' - -6.57.6.7 Round to integral (to nearest, ties to even) -..................................................... - - * float32x2_t vrndn_f32 (float32x2_t) - _Form of expected instruction(s):_ 'vrintn.f32 D0, D0' - - * float32x4_t vrndqn_f32 (float32x4_t) - _Form of expected instruction(s):_ 'vrintn.f32 Q0, Q0' - -6.57.6.8 Round to integral (to nearest, ties away from zero) -............................................................ - - * float32x2_t vrnda_f32 (float32x2_t) - _Form of expected instruction(s):_ 'vrinta.f32 D0, D0' - - * float32x4_t vrndqa_f32 (float32x4_t) - _Form of expected instruction(s):_ 'vrinta.f32 Q0, Q0' - -6.57.6.9 Round to integral (towards +Inf) -......................................... - - * float32x2_t vrndp_f32 (float32x2_t) - _Form of expected instruction(s):_ 'vrintp.f32 D0, D0' - - * float32x4_t vrndqp_f32 (float32x4_t) - _Form of expected instruction(s):_ 'vrintp.f32 Q0, Q0' - -6.57.6.10 Round to integral (towards -Inf) -.......................................... - - * float32x2_t vrndm_f32 (float32x2_t) - _Form of expected instruction(s):_ 'vrintm.f32 D0, D0' - - * float32x4_t vrndqm_f32 (float32x4_t) - _Form of expected instruction(s):_ 'vrintm.f32 Q0, Q0' - -6.57.6.11 Round to integral (towards 0) -....................................... - - * float32x2_t vrnd_f32 (float32x2_t) - _Form of expected instruction(s):_ 'vrintz.f32 D0, D0' - - * float32x4_t vrndq_f32 (float32x4_t) - _Form of expected instruction(s):_ 'vrintz.f32 Q0, Q0' - -6.57.6.12 Subtraction -..................... - - * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vsub.i32 D0, D0, D0' - - * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vsub.i16 D0, D0, D0' - - * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vsub.i8 D0, D0, D0' - - * int32x2_t vsub_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vsub.i32 D0, D0, D0' - - * int16x4_t vsub_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vsub.i16 D0, D0, D0' - - * int8x8_t vsub_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vsub.i8 D0, D0, D0' - - * float32x2_t vsub_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vsub.f32 D0, D0, D0' - - * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t) - - * int64x1_t vsub_s64 (int64x1_t, int64x1_t) - - * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vsub.i32 Q0, Q0, Q0' - - * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vsub.i16 Q0, Q0, Q0' - - * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vsub.i8 Q0, Q0, Q0' - - * int32x4_t vsubq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vsub.i32 Q0, Q0, Q0' - - * int16x8_t vsubq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vsub.i16 Q0, Q0, Q0' - - * int8x16_t vsubq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vsub.i8 Q0, Q0, Q0' - - * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t) - _Form of expected instruction(s):_ 'vsub.i64 Q0, Q0, Q0' - - * int64x2_t vsubq_s64 (int64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vsub.i64 Q0, Q0, Q0' - - * float32x4_t vsubq_f32 (float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vsub.f32 Q0, Q0, Q0' - - * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vsubl.u32 Q0, D0, D0' - - * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vsubl.u16 Q0, D0, D0' - - * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vsubl.u8 Q0, D0, D0' - - * int64x2_t vsubl_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vsubl.s32 Q0, D0, D0' - - * int32x4_t vsubl_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vsubl.s16 Q0, D0, D0' - - * int16x8_t vsubl_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vsubl.s8 Q0, D0, D0' - - * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vsubw.u32 Q0, Q0, D0' - - * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vsubw.u16 Q0, Q0, D0' - - * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vsubw.u8 Q0, Q0, D0' - - * int64x2_t vsubw_s32 (int64x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vsubw.s32 Q0, Q0, D0' - - * int32x4_t vsubw_s16 (int32x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vsubw.s16 Q0, Q0, D0' - - * int16x8_t vsubw_s8 (int16x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vsubw.s8 Q0, Q0, D0' - - * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vhsub.u32 D0, D0, D0' - - * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vhsub.u16 D0, D0, D0' - - * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vhsub.u8 D0, D0, D0' - - * int32x2_t vhsub_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vhsub.s32 D0, D0, D0' - - * int16x4_t vhsub_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vhsub.s16 D0, D0, D0' - - * int8x8_t vhsub_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vhsub.s8 D0, D0, D0' - - * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vhsub.u32 Q0, Q0, Q0' - - * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vhsub.u16 Q0, Q0, Q0' - - * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vhsub.u8 Q0, Q0, Q0' - - * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vhsub.s32 Q0, Q0, Q0' - - * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vhsub.s16 Q0, Q0, Q0' - - * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vhsub.s8 Q0, Q0, Q0' - - * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vqsub.u32 D0, D0, D0' - - * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vqsub.u16 D0, D0, D0' - - * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vqsub.u8 D0, D0, D0' - - * int32x2_t vqsub_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vqsub.s32 D0, D0, D0' - - * int16x4_t vqsub_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vqsub.s16 D0, D0, D0' - - * int8x8_t vqsub_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vqsub.s8 D0, D0, D0' - - * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t) - _Form of expected instruction(s):_ 'vqsub.u64 D0, D0, D0' - - * int64x1_t vqsub_s64 (int64x1_t, int64x1_t) - _Form of expected instruction(s):_ 'vqsub.s64 D0, D0, D0' - - * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vqsub.u32 Q0, Q0, Q0' - - * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vqsub.u16 Q0, Q0, Q0' - - * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vqsub.u8 Q0, Q0, Q0' - - * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vqsub.s32 Q0, Q0, Q0' - - * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vqsub.s16 Q0, Q0, Q0' - - * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vqsub.s8 Q0, Q0, Q0' - - * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t) - _Form of expected instruction(s):_ 'vqsub.u64 Q0, Q0, Q0' - - * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vqsub.s64 Q0, Q0, Q0' - - * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t) - _Form of expected instruction(s):_ 'vsubhn.i64 D0, Q0, Q0' - - * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vsubhn.i32 D0, Q0, Q0' - - * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vsubhn.i16 D0, Q0, Q0' - - * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vsubhn.i64 D0, Q0, Q0' - - * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vsubhn.i32 D0, Q0, Q0' - - * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vsubhn.i16 D0, Q0, Q0' - - * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t) - _Form of expected instruction(s):_ 'vrsubhn.i64 D0, Q0, Q0' - - * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vrsubhn.i32 D0, Q0, Q0' - - * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vrsubhn.i16 D0, Q0, Q0' - - * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vrsubhn.i64 D0, Q0, Q0' - - * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vrsubhn.i32 D0, Q0, Q0' - - * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vrsubhn.i16 D0, Q0, Q0' - -6.57.6.13 Comparison (equal-to) -............................... - - * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vceq.i32 D0, D0, D0' - - * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vceq.i16 D0, D0, D0' - - * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0' - - * uint32x2_t vceq_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vceq.i32 D0, D0, D0' - - * uint16x4_t vceq_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vceq.i16 D0, D0, D0' - - * uint8x8_t vceq_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0' - - * uint32x2_t vceq_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vceq.f32 D0, D0, D0' - - * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t) - _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0' - - * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vceq.i32 Q0, Q0, Q0' - - * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vceq.i16 Q0, Q0, Q0' - - * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0' - - * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vceq.i32 Q0, Q0, Q0' - - * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vceq.i16 Q0, Q0, Q0' - - * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0' - - * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vceq.f32 Q0, Q0, Q0' - - * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t) - _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0' - -6.57.6.14 Comparison (greater-than-or-equal-to) -............................................... - - * uint32x2_t vcge_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vcge.s32 D0, D0, D0' - - * uint16x4_t vcge_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vcge.s16 D0, D0, D0' - - * uint8x8_t vcge_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vcge.s8 D0, D0, D0' - - * uint32x2_t vcge_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vcge.f32 D0, D0, D0' - - * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vcge.u32 D0, D0, D0' - - * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vcge.u16 D0, D0, D0' - - * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vcge.u8 D0, D0, D0' - - * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vcge.s32 Q0, Q0, Q0' - - * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vcge.s16 Q0, Q0, Q0' - - * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vcge.s8 Q0, Q0, Q0' - - * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vcge.f32 Q0, Q0, Q0' - - * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vcge.u32 Q0, Q0, Q0' - - * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vcge.u16 Q0, Q0, Q0' - - * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vcge.u8 Q0, Q0, Q0' - -6.57.6.15 Comparison (less-than-or-equal-to) -............................................ - - * uint32x2_t vcle_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vcge.s32 D0, D0, D0' - - * uint16x4_t vcle_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vcge.s16 D0, D0, D0' - - * uint8x8_t vcle_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vcge.s8 D0, D0, D0' - - * uint32x2_t vcle_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vcge.f32 D0, D0, D0' - - * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vcge.u32 D0, D0, D0' - - * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vcge.u16 D0, D0, D0' - - * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vcge.u8 D0, D0, D0' - - * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vcge.s32 Q0, Q0, Q0' - - * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vcge.s16 Q0, Q0, Q0' - - * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vcge.s8 Q0, Q0, Q0' - - * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vcge.f32 Q0, Q0, Q0' - - * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vcge.u32 Q0, Q0, Q0' - - * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vcge.u16 Q0, Q0, Q0' - - * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vcge.u8 Q0, Q0, Q0' - -6.57.6.16 Comparison (greater-than) -................................... - - * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vcgt.s32 D0, D0, D0' - - * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vcgt.s16 D0, D0, D0' - - * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vcgt.s8 D0, D0, D0' - - * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vcgt.f32 D0, D0, D0' - - * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vcgt.u32 D0, D0, D0' - - * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vcgt.u16 D0, D0, D0' - - * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vcgt.u8 D0, D0, D0' - - * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vcgt.s32 Q0, Q0, Q0' - - * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vcgt.s16 Q0, Q0, Q0' - - * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vcgt.s8 Q0, Q0, Q0' - - * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vcgt.f32 Q0, Q0, Q0' - - * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vcgt.u32 Q0, Q0, Q0' - - * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vcgt.u16 Q0, Q0, Q0' - - * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vcgt.u8 Q0, Q0, Q0' - -6.57.6.17 Comparison (less-than) -................................ - - * uint32x2_t vclt_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vcgt.s32 D0, D0, D0' - - * uint16x4_t vclt_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vcgt.s16 D0, D0, D0' - - * uint8x8_t vclt_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vcgt.s8 D0, D0, D0' - - * uint32x2_t vclt_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vcgt.f32 D0, D0, D0' - - * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vcgt.u32 D0, D0, D0' - - * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vcgt.u16 D0, D0, D0' - - * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vcgt.u8 D0, D0, D0' - - * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vcgt.s32 Q0, Q0, Q0' - - * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vcgt.s16 Q0, Q0, Q0' - - * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vcgt.s8 Q0, Q0, Q0' - - * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vcgt.f32 Q0, Q0, Q0' - - * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vcgt.u32 Q0, Q0, Q0' - - * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vcgt.u16 Q0, Q0, Q0' - - * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vcgt.u8 Q0, Q0, Q0' - -6.57.6.18 Comparison (absolute greater-than-or-equal-to) -........................................................ - - * uint32x2_t vcage_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vacge.f32 D0, D0, D0' - - * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vacge.f32 Q0, Q0, Q0' - -6.57.6.19 Comparison (absolute less-than-or-equal-to) -..................................................... - - * uint32x2_t vcale_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vacge.f32 D0, D0, D0' - - * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vacge.f32 Q0, Q0, Q0' - -6.57.6.20 Comparison (absolute greater-than) -............................................ - - * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vacgt.f32 D0, D0, D0' - - * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vacgt.f32 Q0, Q0, Q0' - -6.57.6.21 Comparison (absolute less-than) -......................................... - - * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vacgt.f32 D0, D0, D0' - - * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vacgt.f32 Q0, Q0, Q0' - -6.57.6.22 Test bits -................... - - * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vtst.32 D0, D0, D0' - - * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vtst.16 D0, D0, D0' - - * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0' - - * uint32x2_t vtst_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vtst.32 D0, D0, D0' - - * uint16x4_t vtst_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vtst.16 D0, D0, D0' - - * uint8x8_t vtst_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0' - - * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t) - _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0' - - * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vtst.32 Q0, Q0, Q0' - - * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vtst.16 Q0, Q0, Q0' - - * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0' - - * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vtst.32 Q0, Q0, Q0' - - * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vtst.16 Q0, Q0, Q0' - - * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0' - - * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t) - _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0' - -6.57.6.23 Absolute difference -............................. - - * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vabd.u32 D0, D0, D0' - - * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vabd.u16 D0, D0, D0' - - * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vabd.u8 D0, D0, D0' - - * int32x2_t vabd_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vabd.s32 D0, D0, D0' - - * int16x4_t vabd_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vabd.s16 D0, D0, D0' - - * int8x8_t vabd_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vabd.s8 D0, D0, D0' - - * float32x2_t vabd_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vabd.f32 D0, D0, D0' - - * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vabd.u32 Q0, Q0, Q0' - - * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vabd.u16 Q0, Q0, Q0' - - * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vabd.u8 Q0, Q0, Q0' - - * int32x4_t vabdq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vabd.s32 Q0, Q0, Q0' - - * int16x8_t vabdq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vabd.s16 Q0, Q0, Q0' - - * int8x16_t vabdq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vabd.s8 Q0, Q0, Q0' - - * float32x4_t vabdq_f32 (float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vabd.f32 Q0, Q0, Q0' - - * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vabdl.u32 Q0, D0, D0' - - * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vabdl.u16 Q0, D0, D0' - - * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vabdl.u8 Q0, D0, D0' - - * int64x2_t vabdl_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vabdl.s32 Q0, D0, D0' - - * int32x4_t vabdl_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vabdl.s16 Q0, D0, D0' - - * int16x8_t vabdl_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vabdl.s8 Q0, D0, D0' - -6.57.6.24 Absolute difference and accumulate -............................................ - - * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vaba.u32 D0, D0, D0' - - * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vaba.u16 D0, D0, D0' - - * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vaba.u8 D0, D0, D0' - - * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vaba.s32 D0, D0, D0' - - * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vaba.s16 D0, D0, D0' - - * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vaba.s8 D0, D0, D0' - - * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vaba.u32 Q0, Q0, Q0' - - * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vaba.u16 Q0, Q0, Q0' - - * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vaba.u8 Q0, Q0, Q0' - - * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vaba.s32 Q0, Q0, Q0' - - * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vaba.s16 Q0, Q0, Q0' - - * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vaba.s8 Q0, Q0, Q0' - - * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vabal.u32 Q0, D0, D0' - - * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vabal.u16 Q0, D0, D0' - - * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vabal.u8 Q0, D0, D0' - - * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vabal.s32 Q0, D0, D0' - - * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vabal.s16 Q0, D0, D0' - - * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vabal.s8 Q0, D0, D0' - -6.57.6.25 Maximum -................. - - * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vmax.u32 D0, D0, D0' - - * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vmax.u16 D0, D0, D0' - - * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vmax.u8 D0, D0, D0' - - * int32x2_t vmax_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vmax.s32 D0, D0, D0' - - * int16x4_t vmax_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vmax.s16 D0, D0, D0' - - * int8x8_t vmax_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vmax.s8 D0, D0, D0' - - * float32x2_t vmax_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vmax.f32 D0, D0, D0' - - * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vmax.u32 Q0, Q0, Q0' - - * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vmax.u16 Q0, Q0, Q0' - - * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vmax.u8 Q0, Q0, Q0' - - * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vmax.s32 Q0, Q0, Q0' - - * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vmax.s16 Q0, Q0, Q0' - - * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vmax.s8 Q0, Q0, Q0' - - * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vmax.f32 Q0, Q0, Q0' - -6.57.6.26 Minimum -................. - - * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vmin.u32 D0, D0, D0' - - * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vmin.u16 D0, D0, D0' - - * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vmin.u8 D0, D0, D0' - - * int32x2_t vmin_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vmin.s32 D0, D0, D0' - - * int16x4_t vmin_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vmin.s16 D0, D0, D0' - - * int8x8_t vmin_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vmin.s8 D0, D0, D0' - - * float32x2_t vmin_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vmin.f32 D0, D0, D0' - - * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vmin.u32 Q0, Q0, Q0' - - * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vmin.u16 Q0, Q0, Q0' - - * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vmin.u8 Q0, Q0, Q0' - - * int32x4_t vminq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vmin.s32 Q0, Q0, Q0' - - * int16x8_t vminq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vmin.s16 Q0, Q0, Q0' - - * int8x16_t vminq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vmin.s8 Q0, Q0, Q0' - - * float32x4_t vminq_f32 (float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vmin.f32 Q0, Q0, Q0' - -6.57.6.27 Pairwise add -...................... - - * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vpadd.i32 D0, D0, D0' - - * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vpadd.i16 D0, D0, D0' - - * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vpadd.i8 D0, D0, D0' - - * int32x2_t vpadd_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vpadd.i32 D0, D0, D0' - - * int16x4_t vpadd_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vpadd.i16 D0, D0, D0' - - * int8x8_t vpadd_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vpadd.i8 D0, D0, D0' - - * float32x2_t vpadd_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vpadd.f32 D0, D0, D0' - - * uint64x1_t vpaddl_u32 (uint32x2_t) - _Form of expected instruction(s):_ 'vpaddl.u32 D0, D0' - - * uint32x2_t vpaddl_u16 (uint16x4_t) - _Form of expected instruction(s):_ 'vpaddl.u16 D0, D0' - - * uint16x4_t vpaddl_u8 (uint8x8_t) - _Form of expected instruction(s):_ 'vpaddl.u8 D0, D0' - - * int64x1_t vpaddl_s32 (int32x2_t) - _Form of expected instruction(s):_ 'vpaddl.s32 D0, D0' - - * int32x2_t vpaddl_s16 (int16x4_t) - _Form of expected instruction(s):_ 'vpaddl.s16 D0, D0' - - * int16x4_t vpaddl_s8 (int8x8_t) - _Form of expected instruction(s):_ 'vpaddl.s8 D0, D0' - - * uint64x2_t vpaddlq_u32 (uint32x4_t) - _Form of expected instruction(s):_ 'vpaddl.u32 Q0, Q0' - - * uint32x4_t vpaddlq_u16 (uint16x8_t) - _Form of expected instruction(s):_ 'vpaddl.u16 Q0, Q0' - - * uint16x8_t vpaddlq_u8 (uint8x16_t) - _Form of expected instruction(s):_ 'vpaddl.u8 Q0, Q0' - - * int64x2_t vpaddlq_s32 (int32x4_t) - _Form of expected instruction(s):_ 'vpaddl.s32 Q0, Q0' - - * int32x4_t vpaddlq_s16 (int16x8_t) - _Form of expected instruction(s):_ 'vpaddl.s16 Q0, Q0' - - * int16x8_t vpaddlq_s8 (int8x16_t) - _Form of expected instruction(s):_ 'vpaddl.s8 Q0, Q0' - -6.57.6.28 Pairwise add, single_opcode widen and accumulate -.......................................................... - - * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t) - _Form of expected instruction(s):_ 'vpadal.u32 D0, D0' - - * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t) - _Form of expected instruction(s):_ 'vpadal.u16 D0, D0' - - * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t) - _Form of expected instruction(s):_ 'vpadal.u8 D0, D0' - - * int64x1_t vpadal_s32 (int64x1_t, int32x2_t) - _Form of expected instruction(s):_ 'vpadal.s32 D0, D0' - - * int32x2_t vpadal_s16 (int32x2_t, int16x4_t) - _Form of expected instruction(s):_ 'vpadal.s16 D0, D0' - - * int16x4_t vpadal_s8 (int16x4_t, int8x8_t) - _Form of expected instruction(s):_ 'vpadal.s8 D0, D0' - - * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t) - _Form of expected instruction(s):_ 'vpadal.u32 Q0, Q0' - - * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t) - _Form of expected instruction(s):_ 'vpadal.u16 Q0, Q0' - - * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t) - _Form of expected instruction(s):_ 'vpadal.u8 Q0, Q0' - - * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t) - _Form of expected instruction(s):_ 'vpadal.s32 Q0, Q0' - - * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t) - _Form of expected instruction(s):_ 'vpadal.s16 Q0, Q0' - - * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t) - _Form of expected instruction(s):_ 'vpadal.s8 Q0, Q0' - -6.57.6.29 Folding maximum -......................... - - * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vpmax.u32 D0, D0, D0' - - * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vpmax.u16 D0, D0, D0' - - * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vpmax.u8 D0, D0, D0' - - * int32x2_t vpmax_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vpmax.s32 D0, D0, D0' - - * int16x4_t vpmax_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vpmax.s16 D0, D0, D0' - - * int8x8_t vpmax_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vpmax.s8 D0, D0, D0' - - * float32x2_t vpmax_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vpmax.f32 D0, D0, D0' - -6.57.6.30 Folding minimum -......................... - - * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vpmin.u32 D0, D0, D0' - - * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vpmin.u16 D0, D0, D0' - - * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vpmin.u8 D0, D0, D0' - - * int32x2_t vpmin_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vpmin.s32 D0, D0, D0' - - * int16x4_t vpmin_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vpmin.s16 D0, D0, D0' - - * int8x8_t vpmin_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vpmin.s8 D0, D0, D0' - - * float32x2_t vpmin_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vpmin.f32 D0, D0, D0' - -6.57.6.31 Reciprocal step -......................... - - * float32x2_t vrecps_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vrecps.f32 D0, D0, D0' - - * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vrecps.f32 Q0, Q0, Q0' - - * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vrsqrts.f32 D0, D0, D0' - - * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vrsqrts.f32 Q0, Q0, Q0' - -6.57.6.32 Vector shift left -........................... - - * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vshl.u32 D0, D0, D0' - - * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vshl.u16 D0, D0, D0' - - * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vshl.u8 D0, D0, D0' - - * int32x2_t vshl_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vshl.s32 D0, D0, D0' - - * int16x4_t vshl_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vshl.s16 D0, D0, D0' - - * int8x8_t vshl_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vshl.s8 D0, D0, D0' - - * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t) - _Form of expected instruction(s):_ 'vshl.u64 D0, D0, D0' - - * int64x1_t vshl_s64 (int64x1_t, int64x1_t) - _Form of expected instruction(s):_ 'vshl.s64 D0, D0, D0' - - * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vshl.u32 Q0, Q0, Q0' - - * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vshl.u16 Q0, Q0, Q0' - - * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vshl.u8 Q0, Q0, Q0' - - * int32x4_t vshlq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vshl.s32 Q0, Q0, Q0' - - * int16x8_t vshlq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vshl.s16 Q0, Q0, Q0' - - * int8x16_t vshlq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vshl.s8 Q0, Q0, Q0' - - * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vshl.u64 Q0, Q0, Q0' - - * int64x2_t vshlq_s64 (int64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vshl.s64 Q0, Q0, Q0' - - * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vrshl.u32 D0, D0, D0' - - * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vrshl.u16 D0, D0, D0' - - * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vrshl.u8 D0, D0, D0' - - * int32x2_t vrshl_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vrshl.s32 D0, D0, D0' - - * int16x4_t vrshl_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vrshl.s16 D0, D0, D0' - - * int8x8_t vrshl_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vrshl.s8 D0, D0, D0' - - * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t) - _Form of expected instruction(s):_ 'vrshl.u64 D0, D0, D0' - - * int64x1_t vrshl_s64 (int64x1_t, int64x1_t) - _Form of expected instruction(s):_ 'vrshl.s64 D0, D0, D0' - - * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vrshl.u32 Q0, Q0, Q0' - - * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vrshl.u16 Q0, Q0, Q0' - - * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vrshl.u8 Q0, Q0, Q0' - - * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vrshl.s32 Q0, Q0, Q0' - - * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vrshl.s16 Q0, Q0, Q0' - - * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vrshl.s8 Q0, Q0, Q0' - - * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vrshl.u64 Q0, Q0, Q0' - - * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vrshl.s64 Q0, Q0, Q0' - - * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vqshl.u32 D0, D0, D0' - - * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vqshl.u16 D0, D0, D0' - - * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vqshl.u8 D0, D0, D0' - - * int32x2_t vqshl_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vqshl.s32 D0, D0, D0' - - * int16x4_t vqshl_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vqshl.s16 D0, D0, D0' - - * int8x8_t vqshl_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vqshl.s8 D0, D0, D0' - - * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t) - _Form of expected instruction(s):_ 'vqshl.u64 D0, D0, D0' - - * int64x1_t vqshl_s64 (int64x1_t, int64x1_t) - _Form of expected instruction(s):_ 'vqshl.s64 D0, D0, D0' - - * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vqshl.u32 Q0, Q0, Q0' - - * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vqshl.u16 Q0, Q0, Q0' - - * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vqshl.u8 Q0, Q0, Q0' - - * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vqshl.s32 Q0, Q0, Q0' - - * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vqshl.s16 Q0, Q0, Q0' - - * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vqshl.s8 Q0, Q0, Q0' - - * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vqshl.u64 Q0, Q0, Q0' - - * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vqshl.s64 Q0, Q0, Q0' - - * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vqrshl.u32 D0, D0, D0' - - * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vqrshl.u16 D0, D0, D0' - - * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vqrshl.u8 D0, D0, D0' - - * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vqrshl.s32 D0, D0, D0' - - * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vqrshl.s16 D0, D0, D0' - - * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vqrshl.s8 D0, D0, D0' - - * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t) - _Form of expected instruction(s):_ 'vqrshl.u64 D0, D0, D0' - - * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t) - _Form of expected instruction(s):_ 'vqrshl.s64 D0, D0, D0' - - * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vqrshl.u32 Q0, Q0, Q0' - - * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vqrshl.u16 Q0, Q0, Q0' - - * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vqrshl.u8 Q0, Q0, Q0' - - * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vqrshl.s32 Q0, Q0, Q0' - - * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vqrshl.s16 Q0, Q0, Q0' - - * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vqrshl.s8 Q0, Q0, Q0' - - * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vqrshl.u64 Q0, Q0, Q0' - - * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vqrshl.s64 Q0, Q0, Q0' - -6.57.6.33 Vector shift left by constant -....................................... - - * uint32x2_t vshl_n_u32 (uint32x2_t, const int) - _Form of expected instruction(s):_ 'vshl.i32 D0, D0, #0' - - * uint16x4_t vshl_n_u16 (uint16x4_t, const int) - _Form of expected instruction(s):_ 'vshl.i16 D0, D0, #0' - - * uint8x8_t vshl_n_u8 (uint8x8_t, const int) - _Form of expected instruction(s):_ 'vshl.i8 D0, D0, #0' - - * int32x2_t vshl_n_s32 (int32x2_t, const int) - _Form of expected instruction(s):_ 'vshl.i32 D0, D0, #0' - - * int16x4_t vshl_n_s16 (int16x4_t, const int) - _Form of expected instruction(s):_ 'vshl.i16 D0, D0, #0' - - * int8x8_t vshl_n_s8 (int8x8_t, const int) - _Form of expected instruction(s):_ 'vshl.i8 D0, D0, #0' - - * uint64x1_t vshl_n_u64 (uint64x1_t, const int) - _Form of expected instruction(s):_ 'vshl.i64 D0, D0, #0' - - * int64x1_t vshl_n_s64 (int64x1_t, const int) - _Form of expected instruction(s):_ 'vshl.i64 D0, D0, #0' - - * uint32x4_t vshlq_n_u32 (uint32x4_t, const int) - _Form of expected instruction(s):_ 'vshl.i32 Q0, Q0, #0' - - * uint16x8_t vshlq_n_u16 (uint16x8_t, const int) - _Form of expected instruction(s):_ 'vshl.i16 Q0, Q0, #0' - - * uint8x16_t vshlq_n_u8 (uint8x16_t, const int) - _Form of expected instruction(s):_ 'vshl.i8 Q0, Q0, #0' - - * int32x4_t vshlq_n_s32 (int32x4_t, const int) - _Form of expected instruction(s):_ 'vshl.i32 Q0, Q0, #0' - - * int16x8_t vshlq_n_s16 (int16x8_t, const int) - _Form of expected instruction(s):_ 'vshl.i16 Q0, Q0, #0' - - * int8x16_t vshlq_n_s8 (int8x16_t, const int) - _Form of expected instruction(s):_ 'vshl.i8 Q0, Q0, #0' - - * uint64x2_t vshlq_n_u64 (uint64x2_t, const int) - _Form of expected instruction(s):_ 'vshl.i64 Q0, Q0, #0' - - * int64x2_t vshlq_n_s64 (int64x2_t, const int) - _Form of expected instruction(s):_ 'vshl.i64 Q0, Q0, #0' - - * uint32x2_t vqshl_n_u32 (uint32x2_t, const int) - _Form of expected instruction(s):_ 'vqshl.u32 D0, D0, #0' - - * uint16x4_t vqshl_n_u16 (uint16x4_t, const int) - _Form of expected instruction(s):_ 'vqshl.u16 D0, D0, #0' - - * uint8x8_t vqshl_n_u8 (uint8x8_t, const int) - _Form of expected instruction(s):_ 'vqshl.u8 D0, D0, #0' - - * int32x2_t vqshl_n_s32 (int32x2_t, const int) - _Form of expected instruction(s):_ 'vqshl.s32 D0, D0, #0' - - * int16x4_t vqshl_n_s16 (int16x4_t, const int) - _Form of expected instruction(s):_ 'vqshl.s16 D0, D0, #0' - - * int8x8_t vqshl_n_s8 (int8x8_t, const int) - _Form of expected instruction(s):_ 'vqshl.s8 D0, D0, #0' - - * uint64x1_t vqshl_n_u64 (uint64x1_t, const int) - _Form of expected instruction(s):_ 'vqshl.u64 D0, D0, #0' - - * int64x1_t vqshl_n_s64 (int64x1_t, const int) - _Form of expected instruction(s):_ 'vqshl.s64 D0, D0, #0' - - * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int) - _Form of expected instruction(s):_ 'vqshl.u32 Q0, Q0, #0' - - * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int) - _Form of expected instruction(s):_ 'vqshl.u16 Q0, Q0, #0' - - * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int) - _Form of expected instruction(s):_ 'vqshl.u8 Q0, Q0, #0' - - * int32x4_t vqshlq_n_s32 (int32x4_t, const int) - _Form of expected instruction(s):_ 'vqshl.s32 Q0, Q0, #0' - - * int16x8_t vqshlq_n_s16 (int16x8_t, const int) - _Form of expected instruction(s):_ 'vqshl.s16 Q0, Q0, #0' - - * int8x16_t vqshlq_n_s8 (int8x16_t, const int) - _Form of expected instruction(s):_ 'vqshl.s8 Q0, Q0, #0' - - * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int) - _Form of expected instruction(s):_ 'vqshl.u64 Q0, Q0, #0' - - * int64x2_t vqshlq_n_s64 (int64x2_t, const int) - _Form of expected instruction(s):_ 'vqshl.s64 Q0, Q0, #0' - - * uint64x1_t vqshlu_n_s64 (int64x1_t, const int) - _Form of expected instruction(s):_ 'vqshlu.s64 D0, D0, #0' - - * uint32x2_t vqshlu_n_s32 (int32x2_t, const int) - _Form of expected instruction(s):_ 'vqshlu.s32 D0, D0, #0' - - * uint16x4_t vqshlu_n_s16 (int16x4_t, const int) - _Form of expected instruction(s):_ 'vqshlu.s16 D0, D0, #0' - - * uint8x8_t vqshlu_n_s8 (int8x8_t, const int) - _Form of expected instruction(s):_ 'vqshlu.s8 D0, D0, #0' - - * uint64x2_t vqshluq_n_s64 (int64x2_t, const int) - _Form of expected instruction(s):_ 'vqshlu.s64 Q0, Q0, #0' - - * uint32x4_t vqshluq_n_s32 (int32x4_t, const int) - _Form of expected instruction(s):_ 'vqshlu.s32 Q0, Q0, #0' - - * uint16x8_t vqshluq_n_s16 (int16x8_t, const int) - _Form of expected instruction(s):_ 'vqshlu.s16 Q0, Q0, #0' - - * uint8x16_t vqshluq_n_s8 (int8x16_t, const int) - _Form of expected instruction(s):_ 'vqshlu.s8 Q0, Q0, #0' - - * uint64x2_t vshll_n_u32 (uint32x2_t, const int) - _Form of expected instruction(s):_ 'vshll.u32 Q0, D0, #0' - - * uint32x4_t vshll_n_u16 (uint16x4_t, const int) - _Form of expected instruction(s):_ 'vshll.u16 Q0, D0, #0' - - * uint16x8_t vshll_n_u8 (uint8x8_t, const int) - _Form of expected instruction(s):_ 'vshll.u8 Q0, D0, #0' - - * int64x2_t vshll_n_s32 (int32x2_t, const int) - _Form of expected instruction(s):_ 'vshll.s32 Q0, D0, #0' - - * int32x4_t vshll_n_s16 (int16x4_t, const int) - _Form of expected instruction(s):_ 'vshll.s16 Q0, D0, #0' - - * int16x8_t vshll_n_s8 (int8x8_t, const int) - _Form of expected instruction(s):_ 'vshll.s8 Q0, D0, #0' - -6.57.6.34 Vector shift right by constant -........................................ - - * uint32x2_t vshr_n_u32 (uint32x2_t, const int) - _Form of expected instruction(s):_ 'vshr.u32 D0, D0, #0' - - * uint16x4_t vshr_n_u16 (uint16x4_t, const int) - _Form of expected instruction(s):_ 'vshr.u16 D0, D0, #0' - - * uint8x8_t vshr_n_u8 (uint8x8_t, const int) - _Form of expected instruction(s):_ 'vshr.u8 D0, D0, #0' - - * int32x2_t vshr_n_s32 (int32x2_t, const int) - _Form of expected instruction(s):_ 'vshr.s32 D0, D0, #0' - - * int16x4_t vshr_n_s16 (int16x4_t, const int) - _Form of expected instruction(s):_ 'vshr.s16 D0, D0, #0' - - * int8x8_t vshr_n_s8 (int8x8_t, const int) - _Form of expected instruction(s):_ 'vshr.s8 D0, D0, #0' - - * uint64x1_t vshr_n_u64 (uint64x1_t, const int) - _Form of expected instruction(s):_ 'vshr.u64 D0, D0, #0' - - * int64x1_t vshr_n_s64 (int64x1_t, const int) - _Form of expected instruction(s):_ 'vshr.s64 D0, D0, #0' - - * uint32x4_t vshrq_n_u32 (uint32x4_t, const int) - _Form of expected instruction(s):_ 'vshr.u32 Q0, Q0, #0' - - * uint16x8_t vshrq_n_u16 (uint16x8_t, const int) - _Form of expected instruction(s):_ 'vshr.u16 Q0, Q0, #0' - - * uint8x16_t vshrq_n_u8 (uint8x16_t, const int) - _Form of expected instruction(s):_ 'vshr.u8 Q0, Q0, #0' - - * int32x4_t vshrq_n_s32 (int32x4_t, const int) - _Form of expected instruction(s):_ 'vshr.s32 Q0, Q0, #0' - - * int16x8_t vshrq_n_s16 (int16x8_t, const int) - _Form of expected instruction(s):_ 'vshr.s16 Q0, Q0, #0' - - * int8x16_t vshrq_n_s8 (int8x16_t, const int) - _Form of expected instruction(s):_ 'vshr.s8 Q0, Q0, #0' - - * uint64x2_t vshrq_n_u64 (uint64x2_t, const int) - _Form of expected instruction(s):_ 'vshr.u64 Q0, Q0, #0' - - * int64x2_t vshrq_n_s64 (int64x2_t, const int) - _Form of expected instruction(s):_ 'vshr.s64 Q0, Q0, #0' - - * uint32x2_t vrshr_n_u32 (uint32x2_t, const int) - _Form of expected instruction(s):_ 'vrshr.u32 D0, D0, #0' - - * uint16x4_t vrshr_n_u16 (uint16x4_t, const int) - _Form of expected instruction(s):_ 'vrshr.u16 D0, D0, #0' - - * uint8x8_t vrshr_n_u8 (uint8x8_t, const int) - _Form of expected instruction(s):_ 'vrshr.u8 D0, D0, #0' - - * int32x2_t vrshr_n_s32 (int32x2_t, const int) - _Form of expected instruction(s):_ 'vrshr.s32 D0, D0, #0' - - * int16x4_t vrshr_n_s16 (int16x4_t, const int) - _Form of expected instruction(s):_ 'vrshr.s16 D0, D0, #0' - - * int8x8_t vrshr_n_s8 (int8x8_t, const int) - _Form of expected instruction(s):_ 'vrshr.s8 D0, D0, #0' - - * uint64x1_t vrshr_n_u64 (uint64x1_t, const int) - _Form of expected instruction(s):_ 'vrshr.u64 D0, D0, #0' - - * int64x1_t vrshr_n_s64 (int64x1_t, const int) - _Form of expected instruction(s):_ 'vrshr.s64 D0, D0, #0' - - * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int) - _Form of expected instruction(s):_ 'vrshr.u32 Q0, Q0, #0' - - * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int) - _Form of expected instruction(s):_ 'vrshr.u16 Q0, Q0, #0' - - * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int) - _Form of expected instruction(s):_ 'vrshr.u8 Q0, Q0, #0' - - * int32x4_t vrshrq_n_s32 (int32x4_t, const int) - _Form of expected instruction(s):_ 'vrshr.s32 Q0, Q0, #0' - - * int16x8_t vrshrq_n_s16 (int16x8_t, const int) - _Form of expected instruction(s):_ 'vrshr.s16 Q0, Q0, #0' - - * int8x16_t vrshrq_n_s8 (int8x16_t, const int) - _Form of expected instruction(s):_ 'vrshr.s8 Q0, Q0, #0' - - * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int) - _Form of expected instruction(s):_ 'vrshr.u64 Q0, Q0, #0' - - * int64x2_t vrshrq_n_s64 (int64x2_t, const int) - _Form of expected instruction(s):_ 'vrshr.s64 Q0, Q0, #0' - - * uint32x2_t vshrn_n_u64 (uint64x2_t, const int) - _Form of expected instruction(s):_ 'vshrn.i64 D0, Q0, #0' - - * uint16x4_t vshrn_n_u32 (uint32x4_t, const int) - _Form of expected instruction(s):_ 'vshrn.i32 D0, Q0, #0' - - * uint8x8_t vshrn_n_u16 (uint16x8_t, const int) - _Form of expected instruction(s):_ 'vshrn.i16 D0, Q0, #0' - - * int32x2_t vshrn_n_s64 (int64x2_t, const int) - _Form of expected instruction(s):_ 'vshrn.i64 D0, Q0, #0' - - * int16x4_t vshrn_n_s32 (int32x4_t, const int) - _Form of expected instruction(s):_ 'vshrn.i32 D0, Q0, #0' - - * int8x8_t vshrn_n_s16 (int16x8_t, const int) - _Form of expected instruction(s):_ 'vshrn.i16 D0, Q0, #0' - - * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int) - _Form of expected instruction(s):_ 'vrshrn.i64 D0, Q0, #0' - - * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int) - _Form of expected instruction(s):_ 'vrshrn.i32 D0, Q0, #0' - - * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int) - _Form of expected instruction(s):_ 'vrshrn.i16 D0, Q0, #0' - - * int32x2_t vrshrn_n_s64 (int64x2_t, const int) - _Form of expected instruction(s):_ 'vrshrn.i64 D0, Q0, #0' - - * int16x4_t vrshrn_n_s32 (int32x4_t, const int) - _Form of expected instruction(s):_ 'vrshrn.i32 D0, Q0, #0' - - * int8x8_t vrshrn_n_s16 (int16x8_t, const int) - _Form of expected instruction(s):_ 'vrshrn.i16 D0, Q0, #0' - - * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int) - _Form of expected instruction(s):_ 'vqshrn.u64 D0, Q0, #0' - - * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int) - _Form of expected instruction(s):_ 'vqshrn.u32 D0, Q0, #0' - - * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int) - _Form of expected instruction(s):_ 'vqshrn.u16 D0, Q0, #0' - - * int32x2_t vqshrn_n_s64 (int64x2_t, const int) - _Form of expected instruction(s):_ 'vqshrn.s64 D0, Q0, #0' - - * int16x4_t vqshrn_n_s32 (int32x4_t, const int) - _Form of expected instruction(s):_ 'vqshrn.s32 D0, Q0, #0' - - * int8x8_t vqshrn_n_s16 (int16x8_t, const int) - _Form of expected instruction(s):_ 'vqshrn.s16 D0, Q0, #0' - - * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int) - _Form of expected instruction(s):_ 'vqrshrn.u64 D0, Q0, #0' - - * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int) - _Form of expected instruction(s):_ 'vqrshrn.u32 D0, Q0, #0' - - * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int) - _Form of expected instruction(s):_ 'vqrshrn.u16 D0, Q0, #0' - - * int32x2_t vqrshrn_n_s64 (int64x2_t, const int) - _Form of expected instruction(s):_ 'vqrshrn.s64 D0, Q0, #0' - - * int16x4_t vqrshrn_n_s32 (int32x4_t, const int) - _Form of expected instruction(s):_ 'vqrshrn.s32 D0, Q0, #0' - - * int8x8_t vqrshrn_n_s16 (int16x8_t, const int) - _Form of expected instruction(s):_ 'vqrshrn.s16 D0, Q0, #0' - - * uint32x2_t vqshrun_n_s64 (int64x2_t, const int) - _Form of expected instruction(s):_ 'vqshrun.s64 D0, Q0, #0' - - * uint16x4_t vqshrun_n_s32 (int32x4_t, const int) - _Form of expected instruction(s):_ 'vqshrun.s32 D0, Q0, #0' - - * uint8x8_t vqshrun_n_s16 (int16x8_t, const int) - _Form of expected instruction(s):_ 'vqshrun.s16 D0, Q0, #0' - - * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int) - _Form of expected instruction(s):_ 'vqrshrun.s64 D0, Q0, #0' - - * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int) - _Form of expected instruction(s):_ 'vqrshrun.s32 D0, Q0, #0' - - * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int) - _Form of expected instruction(s):_ 'vqrshrun.s16 D0, Q0, #0' - -6.57.6.35 Vector shift right by constant and accumulate -....................................................... - - * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int) - _Form of expected instruction(s):_ 'vsra.u32 D0, D0, #0' - - * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int) - _Form of expected instruction(s):_ 'vsra.u16 D0, D0, #0' - - * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int) - _Form of expected instruction(s):_ 'vsra.u8 D0, D0, #0' - - * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int) - _Form of expected instruction(s):_ 'vsra.s32 D0, D0, #0' - - * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int) - _Form of expected instruction(s):_ 'vsra.s16 D0, D0, #0' - - * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int) - _Form of expected instruction(s):_ 'vsra.s8 D0, D0, #0' - - * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int) - _Form of expected instruction(s):_ 'vsra.u64 D0, D0, #0' - - * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int) - _Form of expected instruction(s):_ 'vsra.s64 D0, D0, #0' - - * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int) - _Form of expected instruction(s):_ 'vsra.u32 Q0, Q0, #0' - - * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int) - _Form of expected instruction(s):_ 'vsra.u16 Q0, Q0, #0' - - * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int) - _Form of expected instruction(s):_ 'vsra.u8 Q0, Q0, #0' - - * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int) - _Form of expected instruction(s):_ 'vsra.s32 Q0, Q0, #0' - - * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int) - _Form of expected instruction(s):_ 'vsra.s16 Q0, Q0, #0' - - * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int) - _Form of expected instruction(s):_ 'vsra.s8 Q0, Q0, #0' - - * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int) - _Form of expected instruction(s):_ 'vsra.u64 Q0, Q0, #0' - - * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int) - _Form of expected instruction(s):_ 'vsra.s64 Q0, Q0, #0' - - * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int) - _Form of expected instruction(s):_ 'vrsra.u32 D0, D0, #0' - - * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int) - _Form of expected instruction(s):_ 'vrsra.u16 D0, D0, #0' - - * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int) - _Form of expected instruction(s):_ 'vrsra.u8 D0, D0, #0' - - * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int) - _Form of expected instruction(s):_ 'vrsra.s32 D0, D0, #0' - - * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int) - _Form of expected instruction(s):_ 'vrsra.s16 D0, D0, #0' - - * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int) - _Form of expected instruction(s):_ 'vrsra.s8 D0, D0, #0' - - * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int) - _Form of expected instruction(s):_ 'vrsra.u64 D0, D0, #0' - - * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int) - _Form of expected instruction(s):_ 'vrsra.s64 D0, D0, #0' - - * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int) - _Form of expected instruction(s):_ 'vrsra.u32 Q0, Q0, #0' - - * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int) - _Form of expected instruction(s):_ 'vrsra.u16 Q0, Q0, #0' - - * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int) - _Form of expected instruction(s):_ 'vrsra.u8 Q0, Q0, #0' - - * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int) - _Form of expected instruction(s):_ 'vrsra.s32 Q0, Q0, #0' - - * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int) - _Form of expected instruction(s):_ 'vrsra.s16 Q0, Q0, #0' - - * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int) - _Form of expected instruction(s):_ 'vrsra.s8 Q0, Q0, #0' - - * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int) - _Form of expected instruction(s):_ 'vrsra.u64 Q0, Q0, #0' - - * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int) - _Form of expected instruction(s):_ 'vrsra.s64 Q0, Q0, #0' - -6.57.6.36 Vector shift right and insert -....................................... - - * poly64x1_t vsri_n_p64 (poly64x1_t, poly64x1_t, const int) - _Form of expected instruction(s):_ 'vsri.64 D0, D0, #0' - - * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int) - _Form of expected instruction(s):_ 'vsri.32 D0, D0, #0' - - * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int) - _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0' - - * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int) - _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0' - - * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int) - _Form of expected instruction(s):_ 'vsri.32 D0, D0, #0' - - * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int) - _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0' - - * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int) - _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0' - - * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int) - _Form of expected instruction(s):_ 'vsri.64 D0, D0, #0' - - * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int) - _Form of expected instruction(s):_ 'vsri.64 D0, D0, #0' - - * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int) - _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0' - - * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int) - _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0' - - * poly64x2_t vsriq_n_p64 (poly64x2_t, poly64x2_t, const int) - _Form of expected instruction(s):_ 'vsri.64 Q0, Q0, #0' - - * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int) - _Form of expected instruction(s):_ 'vsri.32 Q0, Q0, #0' - - * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int) - _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0' - - * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int) - _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0' - - * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int) - _Form of expected instruction(s):_ 'vsri.32 Q0, Q0, #0' - - * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int) - _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0' - - * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int) - _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0' - - * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int) - _Form of expected instruction(s):_ 'vsri.64 Q0, Q0, #0' - - * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int) - _Form of expected instruction(s):_ 'vsri.64 Q0, Q0, #0' - - * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int) - _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0' - - * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int) - _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0' - -6.57.6.37 Vector shift left and insert -...................................... - - * poly64x1_t vsli_n_p64 (poly64x1_t, poly64x1_t, const int) - _Form of expected instruction(s):_ 'vsli.64 D0, D0, #0' - - * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int) - _Form of expected instruction(s):_ 'vsli.32 D0, D0, #0' - - * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int) - _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0' - - * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int) - _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0' - - * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int) - _Form of expected instruction(s):_ 'vsli.32 D0, D0, #0' - - * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int) - _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0' - - * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int) - _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0' - - * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int) - _Form of expected instruction(s):_ 'vsli.64 D0, D0, #0' - - * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int) - _Form of expected instruction(s):_ 'vsli.64 D0, D0, #0' - - * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int) - _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0' - - * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int) - _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0' - - * poly64x2_t vsliq_n_p64 (poly64x2_t, poly64x2_t, const int) - _Form of expected instruction(s):_ 'vsli.64 Q0, Q0, #0' - - * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int) - _Form of expected instruction(s):_ 'vsli.32 Q0, Q0, #0' - - * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int) - _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0' - - * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int) - _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0' - - * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int) - _Form of expected instruction(s):_ 'vsli.32 Q0, Q0, #0' - - * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int) - _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0' - - * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int) - _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0' - - * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int) - _Form of expected instruction(s):_ 'vsli.64 Q0, Q0, #0' - - * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int) - _Form of expected instruction(s):_ 'vsli.64 Q0, Q0, #0' - - * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int) - _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0' - - * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int) - _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0' - -6.57.6.38 Absolute value -........................ - - * float32x2_t vabs_f32 (float32x2_t) - _Form of expected instruction(s):_ 'vabs.f32 D0, D0' - - * int32x2_t vabs_s32 (int32x2_t) - _Form of expected instruction(s):_ 'vabs.s32 D0, D0' - - * int16x4_t vabs_s16 (int16x4_t) - _Form of expected instruction(s):_ 'vabs.s16 D0, D0' - - * int8x8_t vabs_s8 (int8x8_t) - _Form of expected instruction(s):_ 'vabs.s8 D0, D0' - - * float32x4_t vabsq_f32 (float32x4_t) - _Form of expected instruction(s):_ 'vabs.f32 Q0, Q0' - - * int32x4_t vabsq_s32 (int32x4_t) - _Form of expected instruction(s):_ 'vabs.s32 Q0, Q0' - - * int16x8_t vabsq_s16 (int16x8_t) - _Form of expected instruction(s):_ 'vabs.s16 Q0, Q0' - - * int8x16_t vabsq_s8 (int8x16_t) - _Form of expected instruction(s):_ 'vabs.s8 Q0, Q0' - - * int32x2_t vqabs_s32 (int32x2_t) - _Form of expected instruction(s):_ 'vqabs.s32 D0, D0' - - * int16x4_t vqabs_s16 (int16x4_t) - _Form of expected instruction(s):_ 'vqabs.s16 D0, D0' - - * int8x8_t vqabs_s8 (int8x8_t) - _Form of expected instruction(s):_ 'vqabs.s8 D0, D0' - - * int32x4_t vqabsq_s32 (int32x4_t) - _Form of expected instruction(s):_ 'vqabs.s32 Q0, Q0' - - * int16x8_t vqabsq_s16 (int16x8_t) - _Form of expected instruction(s):_ 'vqabs.s16 Q0, Q0' - - * int8x16_t vqabsq_s8 (int8x16_t) - _Form of expected instruction(s):_ 'vqabs.s8 Q0, Q0' - -6.57.6.39 Negation -.................. - - * float32x2_t vneg_f32 (float32x2_t) - _Form of expected instruction(s):_ 'vneg.f32 D0, D0' - - * int32x2_t vneg_s32 (int32x2_t) - _Form of expected instruction(s):_ 'vneg.s32 D0, D0' - - * int16x4_t vneg_s16 (int16x4_t) - _Form of expected instruction(s):_ 'vneg.s16 D0, D0' - - * int8x8_t vneg_s8 (int8x8_t) - _Form of expected instruction(s):_ 'vneg.s8 D0, D0' - - * float32x4_t vnegq_f32 (float32x4_t) - _Form of expected instruction(s):_ 'vneg.f32 Q0, Q0' - - * int32x4_t vnegq_s32 (int32x4_t) - _Form of expected instruction(s):_ 'vneg.s32 Q0, Q0' - - * int16x8_t vnegq_s16 (int16x8_t) - _Form of expected instruction(s):_ 'vneg.s16 Q0, Q0' - - * int8x16_t vnegq_s8 (int8x16_t) - _Form of expected instruction(s):_ 'vneg.s8 Q0, Q0' - - * int32x2_t vqneg_s32 (int32x2_t) - _Form of expected instruction(s):_ 'vqneg.s32 D0, D0' - - * int16x4_t vqneg_s16 (int16x4_t) - _Form of expected instruction(s):_ 'vqneg.s16 D0, D0' - - * int8x8_t vqneg_s8 (int8x8_t) - _Form of expected instruction(s):_ 'vqneg.s8 D0, D0' - - * int32x4_t vqnegq_s32 (int32x4_t) - _Form of expected instruction(s):_ 'vqneg.s32 Q0, Q0' - - * int16x8_t vqnegq_s16 (int16x8_t) - _Form of expected instruction(s):_ 'vqneg.s16 Q0, Q0' - - * int8x16_t vqnegq_s8 (int8x16_t) - _Form of expected instruction(s):_ 'vqneg.s8 Q0, Q0' - -6.57.6.40 Bitwise not -..................... - - * uint32x2_t vmvn_u32 (uint32x2_t) - _Form of expected instruction(s):_ 'vmvn D0, D0' - - * uint16x4_t vmvn_u16 (uint16x4_t) - _Form of expected instruction(s):_ 'vmvn D0, D0' - - * uint8x8_t vmvn_u8 (uint8x8_t) - _Form of expected instruction(s):_ 'vmvn D0, D0' - - * int32x2_t vmvn_s32 (int32x2_t) - _Form of expected instruction(s):_ 'vmvn D0, D0' - - * int16x4_t vmvn_s16 (int16x4_t) - _Form of expected instruction(s):_ 'vmvn D0, D0' - - * int8x8_t vmvn_s8 (int8x8_t) - _Form of expected instruction(s):_ 'vmvn D0, D0' - - * poly8x8_t vmvn_p8 (poly8x8_t) - _Form of expected instruction(s):_ 'vmvn D0, D0' - - * uint32x4_t vmvnq_u32 (uint32x4_t) - _Form of expected instruction(s):_ 'vmvn Q0, Q0' - - * uint16x8_t vmvnq_u16 (uint16x8_t) - _Form of expected instruction(s):_ 'vmvn Q0, Q0' - - * uint8x16_t vmvnq_u8 (uint8x16_t) - _Form of expected instruction(s):_ 'vmvn Q0, Q0' - - * int32x4_t vmvnq_s32 (int32x4_t) - _Form of expected instruction(s):_ 'vmvn Q0, Q0' - - * int16x8_t vmvnq_s16 (int16x8_t) - _Form of expected instruction(s):_ 'vmvn Q0, Q0' - - * int8x16_t vmvnq_s8 (int8x16_t) - _Form of expected instruction(s):_ 'vmvn Q0, Q0' - - * poly8x16_t vmvnq_p8 (poly8x16_t) - _Form of expected instruction(s):_ 'vmvn Q0, Q0' - -6.57.6.41 Count leading sign bits -................................. - - * int32x2_t vcls_s32 (int32x2_t) - _Form of expected instruction(s):_ 'vcls.s32 D0, D0' - - * int16x4_t vcls_s16 (int16x4_t) - _Form of expected instruction(s):_ 'vcls.s16 D0, D0' - - * int8x8_t vcls_s8 (int8x8_t) - _Form of expected instruction(s):_ 'vcls.s8 D0, D0' - - * int32x4_t vclsq_s32 (int32x4_t) - _Form of expected instruction(s):_ 'vcls.s32 Q0, Q0' - - * int16x8_t vclsq_s16 (int16x8_t) - _Form of expected instruction(s):_ 'vcls.s16 Q0, Q0' - - * int8x16_t vclsq_s8 (int8x16_t) - _Form of expected instruction(s):_ 'vcls.s8 Q0, Q0' - -6.57.6.42 Count leading zeros -............................. - - * uint32x2_t vclz_u32 (uint32x2_t) - _Form of expected instruction(s):_ 'vclz.i32 D0, D0' - - * uint16x4_t vclz_u16 (uint16x4_t) - _Form of expected instruction(s):_ 'vclz.i16 D0, D0' - - * uint8x8_t vclz_u8 (uint8x8_t) - _Form of expected instruction(s):_ 'vclz.i8 D0, D0' - - * int32x2_t vclz_s32 (int32x2_t) - _Form of expected instruction(s):_ 'vclz.i32 D0, D0' - - * int16x4_t vclz_s16 (int16x4_t) - _Form of expected instruction(s):_ 'vclz.i16 D0, D0' - - * int8x8_t vclz_s8 (int8x8_t) - _Form of expected instruction(s):_ 'vclz.i8 D0, D0' - - * uint32x4_t vclzq_u32 (uint32x4_t) - _Form of expected instruction(s):_ 'vclz.i32 Q0, Q0' - - * uint16x8_t vclzq_u16 (uint16x8_t) - _Form of expected instruction(s):_ 'vclz.i16 Q0, Q0' - - * uint8x16_t vclzq_u8 (uint8x16_t) - _Form of expected instruction(s):_ 'vclz.i8 Q0, Q0' - - * int32x4_t vclzq_s32 (int32x4_t) - _Form of expected instruction(s):_ 'vclz.i32 Q0, Q0' - - * int16x8_t vclzq_s16 (int16x8_t) - _Form of expected instruction(s):_ 'vclz.i16 Q0, Q0' - - * int8x16_t vclzq_s8 (int8x16_t) - _Form of expected instruction(s):_ 'vclz.i8 Q0, Q0' - -6.57.6.43 Count number of set bits -.................................. - - * uint8x8_t vcnt_u8 (uint8x8_t) - _Form of expected instruction(s):_ 'vcnt.8 D0, D0' - - * int8x8_t vcnt_s8 (int8x8_t) - _Form of expected instruction(s):_ 'vcnt.8 D0, D0' - - * poly8x8_t vcnt_p8 (poly8x8_t) - _Form of expected instruction(s):_ 'vcnt.8 D0, D0' - - * uint8x16_t vcntq_u8 (uint8x16_t) - _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0' - - * int8x16_t vcntq_s8 (int8x16_t) - _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0' - - * poly8x16_t vcntq_p8 (poly8x16_t) - _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0' - -6.57.6.44 Reciprocal estimate -............................. - - * float32x2_t vrecpe_f32 (float32x2_t) - _Form of expected instruction(s):_ 'vrecpe.f32 D0, D0' - - * uint32x2_t vrecpe_u32 (uint32x2_t) - _Form of expected instruction(s):_ 'vrecpe.u32 D0, D0' - - * float32x4_t vrecpeq_f32 (float32x4_t) - _Form of expected instruction(s):_ 'vrecpe.f32 Q0, Q0' - - * uint32x4_t vrecpeq_u32 (uint32x4_t) - _Form of expected instruction(s):_ 'vrecpe.u32 Q0, Q0' - -6.57.6.45 Reciprocal square-root estimate -......................................... - - * float32x2_t vrsqrte_f32 (float32x2_t) - _Form of expected instruction(s):_ 'vrsqrte.f32 D0, D0' - - * uint32x2_t vrsqrte_u32 (uint32x2_t) - _Form of expected instruction(s):_ 'vrsqrte.u32 D0, D0' - - * float32x4_t vrsqrteq_f32 (float32x4_t) - _Form of expected instruction(s):_ 'vrsqrte.f32 Q0, Q0' - - * uint32x4_t vrsqrteq_u32 (uint32x4_t) - _Form of expected instruction(s):_ 'vrsqrte.u32 Q0, Q0' - -6.57.6.46 Get lanes from a vector -................................. - - * uint32_t vget_lane_u32 (uint32x2_t, const int) - _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]' - - * uint16_t vget_lane_u16 (uint16x4_t, const int) - _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]' - - * uint8_t vget_lane_u8 (uint8x8_t, const int) - _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]' - - * int32_t vget_lane_s32 (int32x2_t, const int) - _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]' - - * int16_t vget_lane_s16 (int16x4_t, const int) - _Form of expected instruction(s):_ 'vmov.s16 R0, D0[0]' - - * int8_t vget_lane_s8 (int8x8_t, const int) - _Form of expected instruction(s):_ 'vmov.s8 R0, D0[0]' - - * float32_t vget_lane_f32 (float32x2_t, const int) - _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]' - - * poly16_t vget_lane_p16 (poly16x4_t, const int) - _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]' - - * poly8_t vget_lane_p8 (poly8x8_t, const int) - _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]' - - * uint64_t vget_lane_u64 (uint64x1_t, const int) - - * int64_t vget_lane_s64 (int64x1_t, const int) - - * uint32_t vgetq_lane_u32 (uint32x4_t, const int) - _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]' - - * uint16_t vgetq_lane_u16 (uint16x8_t, const int) - _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]' - - * uint8_t vgetq_lane_u8 (uint8x16_t, const int) - _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]' - - * int32_t vgetq_lane_s32 (int32x4_t, const int) - _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]' - - * int16_t vgetq_lane_s16 (int16x8_t, const int) - _Form of expected instruction(s):_ 'vmov.s16 R0, D0[0]' - - * int8_t vgetq_lane_s8 (int8x16_t, const int) - _Form of expected instruction(s):_ 'vmov.s8 R0, D0[0]' - - * float32_t vgetq_lane_f32 (float32x4_t, const int) - _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]' - - * poly16_t vgetq_lane_p16 (poly16x8_t, const int) - _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]' - - * poly8_t vgetq_lane_p8 (poly8x16_t, const int) - _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]' - - * uint64_t vgetq_lane_u64 (uint64x2_t, const int) - _Form of expected instruction(s):_ 'vmov R0, R0, D0' _or_ 'fmrrd - R0, R0, D0' - - * int64_t vgetq_lane_s64 (int64x2_t, const int) - _Form of expected instruction(s):_ 'vmov R0, R0, D0' _or_ 'fmrrd - R0, R0, D0' - -6.57.6.47 Set lanes in a vector -............................... - - * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int) - _Form of expected instruction(s):_ 'vmov.32 D0[0], R0' - - * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int) - _Form of expected instruction(s):_ 'vmov.16 D0[0], R0' - - * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int) - _Form of expected instruction(s):_ 'vmov.8 D0[0], R0' - - * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int) - _Form of expected instruction(s):_ 'vmov.32 D0[0], R0' - - * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int) - _Form of expected instruction(s):_ 'vmov.16 D0[0], R0' - - * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int) - _Form of expected instruction(s):_ 'vmov.8 D0[0], R0' - - * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int) - _Form of expected instruction(s):_ 'vmov.32 D0[0], R0' - - * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int) - _Form of expected instruction(s):_ 'vmov.16 D0[0], R0' - - * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int) - _Form of expected instruction(s):_ 'vmov.8 D0[0], R0' - - * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int) - - * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int) - - * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int) - _Form of expected instruction(s):_ 'vmov.32 D0[0], R0' - - * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int) - _Form of expected instruction(s):_ 'vmov.16 D0[0], R0' - - * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int) - _Form of expected instruction(s):_ 'vmov.8 D0[0], R0' - - * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int) - _Form of expected instruction(s):_ 'vmov.32 D0[0], R0' - - * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int) - _Form of expected instruction(s):_ 'vmov.16 D0[0], R0' - - * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int) - _Form of expected instruction(s):_ 'vmov.8 D0[0], R0' - - * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int) - _Form of expected instruction(s):_ 'vmov.32 D0[0], R0' - - * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int) - _Form of expected instruction(s):_ 'vmov.16 D0[0], R0' - - * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int) - _Form of expected instruction(s):_ 'vmov.8 D0[0], R0' - - * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int) - _Form of expected instruction(s):_ 'vmov D0, R0, R0' - - * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int) - _Form of expected instruction(s):_ 'vmov D0, R0, R0' - -6.57.6.48 Create vector from literal bit pattern -................................................ - - * poly64x1_t vcreate_p64 (uint64_t) - - * uint32x2_t vcreate_u32 (uint64_t) - - * uint16x4_t vcreate_u16 (uint64_t) - - * uint8x8_t vcreate_u8 (uint64_t) - - * int32x2_t vcreate_s32 (uint64_t) - - * int16x4_t vcreate_s16 (uint64_t) - - * int8x8_t vcreate_s8 (uint64_t) - - * uint64x1_t vcreate_u64 (uint64_t) - - * int64x1_t vcreate_s64 (uint64_t) - - * float32x2_t vcreate_f32 (uint64_t) - - * poly16x4_t vcreate_p16 (uint64_t) - - * poly8x8_t vcreate_p8 (uint64_t) - -6.57.6.49 Set all lanes to the same value -......................................... - - * uint32x2_t vdup_n_u32 (uint32_t) - _Form of expected instruction(s):_ 'vdup.32 D0, R0' - - * uint16x4_t vdup_n_u16 (uint16_t) - _Form of expected instruction(s):_ 'vdup.16 D0, R0' - - * uint8x8_t vdup_n_u8 (uint8_t) - _Form of expected instruction(s):_ 'vdup.8 D0, R0' - - * int32x2_t vdup_n_s32 (int32_t) - _Form of expected instruction(s):_ 'vdup.32 D0, R0' - - * int16x4_t vdup_n_s16 (int16_t) - _Form of expected instruction(s):_ 'vdup.16 D0, R0' - - * int8x8_t vdup_n_s8 (int8_t) - _Form of expected instruction(s):_ 'vdup.8 D0, R0' - - * float32x2_t vdup_n_f32 (float32_t) - _Form of expected instruction(s):_ 'vdup.32 D0, R0' - - * poly16x4_t vdup_n_p16 (poly16_t) - _Form of expected instruction(s):_ 'vdup.16 D0, R0' - - * poly8x8_t vdup_n_p8 (poly8_t) - _Form of expected instruction(s):_ 'vdup.8 D0, R0' - - * poly64x1_t vdup_n_p64 (poly64_t) - - * uint64x1_t vdup_n_u64 (uint64_t) - - * int64x1_t vdup_n_s64 (int64_t) - - * poly64x2_t vdupq_n_p64 (poly64_t) - - * uint32x4_t vdupq_n_u32 (uint32_t) - _Form of expected instruction(s):_ 'vdup.32 Q0, R0' - - * uint16x8_t vdupq_n_u16 (uint16_t) - _Form of expected instruction(s):_ 'vdup.16 Q0, R0' - - * uint8x16_t vdupq_n_u8 (uint8_t) - _Form of expected instruction(s):_ 'vdup.8 Q0, R0' - - * int32x4_t vdupq_n_s32 (int32_t) - _Form of expected instruction(s):_ 'vdup.32 Q0, R0' - - * int16x8_t vdupq_n_s16 (int16_t) - _Form of expected instruction(s):_ 'vdup.16 Q0, R0' - - * int8x16_t vdupq_n_s8 (int8_t) - _Form of expected instruction(s):_ 'vdup.8 Q0, R0' - - * float32x4_t vdupq_n_f32 (float32_t) - _Form of expected instruction(s):_ 'vdup.32 Q0, R0' - - * poly16x8_t vdupq_n_p16 (poly16_t) - _Form of expected instruction(s):_ 'vdup.16 Q0, R0' - - * poly8x16_t vdupq_n_p8 (poly8_t) - _Form of expected instruction(s):_ 'vdup.8 Q0, R0' - - * uint64x2_t vdupq_n_u64 (uint64_t) - - * int64x2_t vdupq_n_s64 (int64_t) - - * uint32x2_t vmov_n_u32 (uint32_t) - _Form of expected instruction(s):_ 'vdup.32 D0, R0' - - * uint16x4_t vmov_n_u16 (uint16_t) - _Form of expected instruction(s):_ 'vdup.16 D0, R0' - - * uint8x8_t vmov_n_u8 (uint8_t) - _Form of expected instruction(s):_ 'vdup.8 D0, R0' - - * int32x2_t vmov_n_s32 (int32_t) - _Form of expected instruction(s):_ 'vdup.32 D0, R0' - - * int16x4_t vmov_n_s16 (int16_t) - _Form of expected instruction(s):_ 'vdup.16 D0, R0' - - * int8x8_t vmov_n_s8 (int8_t) - _Form of expected instruction(s):_ 'vdup.8 D0, R0' - - * float32x2_t vmov_n_f32 (float32_t) - _Form of expected instruction(s):_ 'vdup.32 D0, R0' - - * poly16x4_t vmov_n_p16 (poly16_t) - _Form of expected instruction(s):_ 'vdup.16 D0, R0' - - * poly8x8_t vmov_n_p8 (poly8_t) - _Form of expected instruction(s):_ 'vdup.8 D0, R0' - - * uint64x1_t vmov_n_u64 (uint64_t) - - * int64x1_t vmov_n_s64 (int64_t) - - * uint32x4_t vmovq_n_u32 (uint32_t) - _Form of expected instruction(s):_ 'vdup.32 Q0, R0' - - * uint16x8_t vmovq_n_u16 (uint16_t) - _Form of expected instruction(s):_ 'vdup.16 Q0, R0' - - * uint8x16_t vmovq_n_u8 (uint8_t) - _Form of expected instruction(s):_ 'vdup.8 Q0, R0' - - * int32x4_t vmovq_n_s32 (int32_t) - _Form of expected instruction(s):_ 'vdup.32 Q0, R0' - - * int16x8_t vmovq_n_s16 (int16_t) - _Form of expected instruction(s):_ 'vdup.16 Q0, R0' - - * int8x16_t vmovq_n_s8 (int8_t) - _Form of expected instruction(s):_ 'vdup.8 Q0, R0' - - * float32x4_t vmovq_n_f32 (float32_t) - _Form of expected instruction(s):_ 'vdup.32 Q0, R0' - - * poly16x8_t vmovq_n_p16 (poly16_t) - _Form of expected instruction(s):_ 'vdup.16 Q0, R0' - - * poly8x16_t vmovq_n_p8 (poly8_t) - _Form of expected instruction(s):_ 'vdup.8 Q0, R0' - - * uint64x2_t vmovq_n_u64 (uint64_t) - - * int64x2_t vmovq_n_s64 (int64_t) - - * uint32x2_t vdup_lane_u32 (uint32x2_t, const int) - _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]' - - * uint16x4_t vdup_lane_u16 (uint16x4_t, const int) - _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]' - - * uint8x8_t vdup_lane_u8 (uint8x8_t, const int) - _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]' - - * int32x2_t vdup_lane_s32 (int32x2_t, const int) - _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]' - - * int16x4_t vdup_lane_s16 (int16x4_t, const int) - _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]' - - * int8x8_t vdup_lane_s8 (int8x8_t, const int) - _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]' - - * float32x2_t vdup_lane_f32 (float32x2_t, const int) - _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]' - - * poly16x4_t vdup_lane_p16 (poly16x4_t, const int) - _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]' - - * poly8x8_t vdup_lane_p8 (poly8x8_t, const int) - _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]' - - * poly64x1_t vdup_lane_p64 (poly64x1_t, const int) - - * uint64x1_t vdup_lane_u64 (uint64x1_t, const int) - - * int64x1_t vdup_lane_s64 (int64x1_t, const int) - - * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int) - _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]' - - * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int) - _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]' - - * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int) - _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]' - - * int32x4_t vdupq_lane_s32 (int32x2_t, const int) - _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]' - - * int16x8_t vdupq_lane_s16 (int16x4_t, const int) - _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]' - - * int8x16_t vdupq_lane_s8 (int8x8_t, const int) - _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]' - - * float32x4_t vdupq_lane_f32 (float32x2_t, const int) - _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]' - - * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int) - _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]' - - * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int) - _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]' - - * poly64x2_t vdupq_lane_p64 (poly64x1_t, const int) - - * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int) - - * int64x2_t vdupq_lane_s64 (int64x1_t, const int) - -6.57.6.50 Combining vectors -........................... - - * poly64x2_t vcombine_p64 (poly64x1_t, poly64x1_t) - - * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t) - - * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t) - - * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t) - - * int32x4_t vcombine_s32 (int32x2_t, int32x2_t) - - * int16x8_t vcombine_s16 (int16x4_t, int16x4_t) - - * int8x16_t vcombine_s8 (int8x8_t, int8x8_t) - - * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t) - - * int64x2_t vcombine_s64 (int64x1_t, int64x1_t) - - * float32x4_t vcombine_f32 (float32x2_t, float32x2_t) - - * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t) - - * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t) - -6.57.6.51 Splitting vectors -........................... - - * poly64x1_t vget_high_p64 (poly64x2_t) - - * uint32x2_t vget_high_u32 (uint32x4_t) - - * uint16x4_t vget_high_u16 (uint16x8_t) - - * uint8x8_t vget_high_u8 (uint8x16_t) - - * int32x2_t vget_high_s32 (int32x4_t) - - * int16x4_t vget_high_s16 (int16x8_t) - - * int8x8_t vget_high_s8 (int8x16_t) - - * uint64x1_t vget_high_u64 (uint64x2_t) - - * int64x1_t vget_high_s64 (int64x2_t) - - * float32x2_t vget_high_f32 (float32x4_t) - - * poly16x4_t vget_high_p16 (poly16x8_t) - - * poly8x8_t vget_high_p8 (poly8x16_t) - - * uint32x2_t vget_low_u32 (uint32x4_t) - _Form of expected instruction(s):_ 'vmov D0, D0' - - * uint16x4_t vget_low_u16 (uint16x8_t) - _Form of expected instruction(s):_ 'vmov D0, D0' - - * uint8x8_t vget_low_u8 (uint8x16_t) - _Form of expected instruction(s):_ 'vmov D0, D0' - - * int32x2_t vget_low_s32 (int32x4_t) - _Form of expected instruction(s):_ 'vmov D0, D0' - - * int16x4_t vget_low_s16 (int16x8_t) - _Form of expected instruction(s):_ 'vmov D0, D0' - - * int8x8_t vget_low_s8 (int8x16_t) - _Form of expected instruction(s):_ 'vmov D0, D0' - - * float32x2_t vget_low_f32 (float32x4_t) - _Form of expected instruction(s):_ 'vmov D0, D0' - - * poly16x4_t vget_low_p16 (poly16x8_t) - _Form of expected instruction(s):_ 'vmov D0, D0' - - * poly8x8_t vget_low_p8 (poly8x16_t) - _Form of expected instruction(s):_ 'vmov D0, D0' - - * poly64x1_t vget_low_p64 (poly64x2_t) - - * uint64x1_t vget_low_u64 (uint64x2_t) - - * int64x1_t vget_low_s64 (int64x2_t) - -6.57.6.52 Conversions -..................... - - * float32x2_t vcvt_f32_u32 (uint32x2_t) - _Form of expected instruction(s):_ 'vcvt.f32.u32 D0, D0' - - * float32x2_t vcvt_f32_s32 (int32x2_t) - _Form of expected instruction(s):_ 'vcvt.f32.s32 D0, D0' - - * uint32x2_t vcvt_u32_f32 (float32x2_t) - _Form of expected instruction(s):_ 'vcvt.u32.f32 D0, D0' - - * int32x2_t vcvt_s32_f32 (float32x2_t) - _Form of expected instruction(s):_ 'vcvt.s32.f32 D0, D0' - - * float32x4_t vcvtq_f32_u32 (uint32x4_t) - _Form of expected instruction(s):_ 'vcvt.f32.u32 Q0, Q0' - - * float32x4_t vcvtq_f32_s32 (int32x4_t) - _Form of expected instruction(s):_ 'vcvt.f32.s32 Q0, Q0' - - * uint32x4_t vcvtq_u32_f32 (float32x4_t) - _Form of expected instruction(s):_ 'vcvt.u32.f32 Q0, Q0' - - * int32x4_t vcvtq_s32_f32 (float32x4_t) - _Form of expected instruction(s):_ 'vcvt.s32.f32 Q0, Q0' - - * float16x4_t vcvt_f16_f32 (float32x4_t) - _Form of expected instruction(s):_ 'vcvt.f16.f32 D0, Q0' - - * float32x4_t vcvt_f32_f16 (float16x4_t) - _Form of expected instruction(s):_ 'vcvt.f32.f16 Q0, D0' - - * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int) - _Form of expected instruction(s):_ 'vcvt.f32.u32 D0, D0, #0' - - * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int) - _Form of expected instruction(s):_ 'vcvt.f32.s32 D0, D0, #0' - - * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int) - _Form of expected instruction(s):_ 'vcvt.u32.f32 D0, D0, #0' - - * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int) - _Form of expected instruction(s):_ 'vcvt.s32.f32 D0, D0, #0' - - * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int) - _Form of expected instruction(s):_ 'vcvt.f32.u32 Q0, Q0, #0' - - * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int) - _Form of expected instruction(s):_ 'vcvt.f32.s32 Q0, Q0, #0' - - * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int) - _Form of expected instruction(s):_ 'vcvt.u32.f32 Q0, Q0, #0' - - * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int) - _Form of expected instruction(s):_ 'vcvt.s32.f32 Q0, Q0, #0' - -6.57.6.53 Move, single_opcode narrowing -....................................... - - * uint32x2_t vmovn_u64 (uint64x2_t) - _Form of expected instruction(s):_ 'vmovn.i64 D0, Q0' - - * uint16x4_t vmovn_u32 (uint32x4_t) - _Form of expected instruction(s):_ 'vmovn.i32 D0, Q0' - - * uint8x8_t vmovn_u16 (uint16x8_t) - _Form of expected instruction(s):_ 'vmovn.i16 D0, Q0' - - * int32x2_t vmovn_s64 (int64x2_t) - _Form of expected instruction(s):_ 'vmovn.i64 D0, Q0' - - * int16x4_t vmovn_s32 (int32x4_t) - _Form of expected instruction(s):_ 'vmovn.i32 D0, Q0' - - * int8x8_t vmovn_s16 (int16x8_t) - _Form of expected instruction(s):_ 'vmovn.i16 D0, Q0' - - * uint32x2_t vqmovn_u64 (uint64x2_t) - _Form of expected instruction(s):_ 'vqmovn.u64 D0, Q0' - - * uint16x4_t vqmovn_u32 (uint32x4_t) - _Form of expected instruction(s):_ 'vqmovn.u32 D0, Q0' - - * uint8x8_t vqmovn_u16 (uint16x8_t) - _Form of expected instruction(s):_ 'vqmovn.u16 D0, Q0' - - * int32x2_t vqmovn_s64 (int64x2_t) - _Form of expected instruction(s):_ 'vqmovn.s64 D0, Q0' - - * int16x4_t vqmovn_s32 (int32x4_t) - _Form of expected instruction(s):_ 'vqmovn.s32 D0, Q0' - - * int8x8_t vqmovn_s16 (int16x8_t) - _Form of expected instruction(s):_ 'vqmovn.s16 D0, Q0' - - * uint32x2_t vqmovun_s64 (int64x2_t) - _Form of expected instruction(s):_ 'vqmovun.s64 D0, Q0' - - * uint16x4_t vqmovun_s32 (int32x4_t) - _Form of expected instruction(s):_ 'vqmovun.s32 D0, Q0' - - * uint8x8_t vqmovun_s16 (int16x8_t) - _Form of expected instruction(s):_ 'vqmovun.s16 D0, Q0' - -6.57.6.54 Move, single_opcode long -.................................. - - * uint64x2_t vmovl_u32 (uint32x2_t) - _Form of expected instruction(s):_ 'vmovl.u32 Q0, D0' - - * uint32x4_t vmovl_u16 (uint16x4_t) - _Form of expected instruction(s):_ 'vmovl.u16 Q0, D0' - - * uint16x8_t vmovl_u8 (uint8x8_t) - _Form of expected instruction(s):_ 'vmovl.u8 Q0, D0' - - * int64x2_t vmovl_s32 (int32x2_t) - _Form of expected instruction(s):_ 'vmovl.s32 Q0, D0' - - * int32x4_t vmovl_s16 (int16x4_t) - _Form of expected instruction(s):_ 'vmovl.s16 Q0, D0' - - * int16x8_t vmovl_s8 (int8x8_t) - _Form of expected instruction(s):_ 'vmovl.s8 Q0, D0' - -6.57.6.55 Table lookup -...................... - - * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0' - - * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0' - - * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0' - - * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t) - _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0' - - * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t) - _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0' - - * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t) - _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0' - - * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t) - _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0' - - * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t) - _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0' - - * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t) - _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0' - - * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t) - _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3}, - D0' - - * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t) - _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3}, - D0' - - * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t) - _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3}, - D0' - -6.57.6.56 Extended table lookup -............................... - - * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0' - - * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0' - - * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0' - - * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t) - _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0' - - * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t) - _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0' - - * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t) - _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0' - - * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t) - _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0' - - * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t) - _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0' - - * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t) - _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0' - - * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t) - _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3}, - D0' - - * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t) - _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3}, - D0' - - * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t) - _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3}, - D0' - -6.57.6.57 Multiply, lane -........................ - - * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int) - _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0[0]' - - * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int) - _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]' - - * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int) - _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]' - - * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int) - _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]' - - * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int) - _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]' - - * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int) - _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, D0[0]' - - * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int) - _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]' - - * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int) - _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]' - - * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int) - _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]' - - * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int) - _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]' - -6.57.6.58 Long multiply, lane -............................. - - * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int) - _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0[0]' - - * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int) - _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0[0]' - - * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int) - _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0[0]' - - * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int) - _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0[0]' - -6.57.6.59 Saturating doubling long multiply, lane -................................................. - - * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int) - _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0[0]' - - * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int) - _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0[0]' - -6.57.6.60 Saturating doubling multiply high, lane -................................................. - - * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) - _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, D0[0]' - - * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) - _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, D0[0]' - - * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int) - _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0[0]' - - * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int) - _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0[0]' - - * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) - _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, D0[0]' - - * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) - _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, D0[0]' - - * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int) - _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0[0]' - - * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int) - _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0[0]' - -6.57.6.61 Multiply-accumulate, lane -................................... - - * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t, - const int) - _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0[0]' - - * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, const - int) - _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]' - - * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, const - int) - _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]' - - * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const - int) - _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]' - - * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const - int) - _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]' - - * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, - const int) - _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, D0[0]' - - * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, - const int) - _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]' - - * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, - const int) - _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]' - - * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const - int) - _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]' - - * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const - int) - _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]' - - * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, - const int) - _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0[0]' - - * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, - const int) - _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0[0]' - - * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const - int) - _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0[0]' - - * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const - int) - _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0[0]' - - * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const - int) - _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0[0]' - - * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const - int) - _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0[0]' - -6.57.6.62 Multiply-subtract, lane -................................. - - * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t, - const int) - _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0[0]' - - * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, const - int) - _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]' - - * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, const - int) - _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]' - - * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const - int) - _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]' - - * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const - int) - _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]' - - * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, - const int) - _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, D0[0]' - - * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, - const int) - _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]' - - * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, - const int) - _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]' - - * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const - int) - _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]' - - * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const - int) - _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]' - - * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, - const int) - _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0[0]' - - * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, - const int) - _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0[0]' - - * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const - int) - _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0[0]' - - * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const - int) - _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0[0]' - - * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const - int) - _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0[0]' - - * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const - int) - _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0[0]' - -6.57.6.63 Vector multiply by scalar -................................... - - * float32x2_t vmul_n_f32 (float32x2_t, float32_t) - _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0[0]' - - * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t) - _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]' - - * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t) - _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]' - - * int32x2_t vmul_n_s32 (int32x2_t, int32_t) - _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]' - - * int16x4_t vmul_n_s16 (int16x4_t, int16_t) - _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]' - - * float32x4_t vmulq_n_f32 (float32x4_t, float32_t) - _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, D0[0]' - - * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t) - _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]' - - * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t) - _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]' - - * int32x4_t vmulq_n_s32 (int32x4_t, int32_t) - _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]' - - * int16x8_t vmulq_n_s16 (int16x8_t, int16_t) - _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]' - -6.57.6.64 Vector long multiply by scalar -........................................ - - * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t) - _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0[0]' - - * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t) - _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0[0]' - - * int64x2_t vmull_n_s32 (int32x2_t, int32_t) - _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0[0]' - - * int32x4_t vmull_n_s16 (int16x4_t, int16_t) - _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0[0]' - -6.57.6.65 Vector saturating doubling long multiply by scalar -............................................................ - - * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t) - _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0[0]' - - * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t) - _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0[0]' - -6.57.6.66 Vector saturating doubling multiply high by scalar -............................................................ - - * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t) - _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, D0[0]' - - * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t) - _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, D0[0]' - - * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t) - _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0[0]' - - * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t) - _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0[0]' - - * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t) - _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, D0[0]' - - * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t) - _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, D0[0]' - - * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t) - _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0[0]' - - * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t) - _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0[0]' - -6.57.6.67 Vector multiply-accumulate by scalar -.............................................. - - * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t) - _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0[0]' - - * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t) - _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]' - - * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t) - _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]' - - * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t) - _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]' - - * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t) - _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]' - - * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t) - _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, D0[0]' - - * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) - _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]' - - * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) - _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]' - - * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t) - _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]' - - * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t) - _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]' - - * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t) - _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0[0]' - - * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t) - _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0[0]' - - * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t) - _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0[0]' - - * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t) - _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0[0]' - - * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t) - _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0[0]' - - * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t) - _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0[0]' - -6.57.6.68 Vector multiply-subtract by scalar -............................................ - - * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t) - _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0[0]' - - * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t) - _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]' - - * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t) - _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]' - - * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t) - _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]' - - * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t) - _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]' - - * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t) - _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, D0[0]' - - * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) - _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]' - - * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) - _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]' - - * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t) - _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]' - - * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t) - _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]' - - * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t) - _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0[0]' - - * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t) - _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0[0]' - - * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) - _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0[0]' - - * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) - _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0[0]' - - * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) - _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0[0]' - - * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) - _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0[0]' - -6.57.6.69 Vector extract -........................ - - * poly64x1_t vext_p64 (poly64x1_t, poly64x1_t, const int) - _Form of expected instruction(s):_ 'vext.64 D0, D0, D0, #0' - - * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int) - _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0' - - * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int) - _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0' - - * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int) - _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0' - - * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int) - _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0' - - * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int) - _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0' - - * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int) - _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0' - - * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int) - _Form of expected instruction(s):_ 'vext.64 D0, D0, D0, #0' - - * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int) - _Form of expected instruction(s):_ 'vext.64 D0, D0, D0, #0' - - * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int) - _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0' - - * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int) - _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0' - - * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int) - _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0' - - * poly64x2_t vextq_p64 (poly64x2_t, poly64x2_t, const int) - _Form of expected instruction(s):_ 'vext.64 Q0, Q0, Q0, #0' - - * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int) - _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0' - - * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int) - _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0' - - * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int) - _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0' - - * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int) - _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0' - - * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int) - _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0' - - * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int) - _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0' - - * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int) - _Form of expected instruction(s):_ 'vext.64 Q0, Q0, Q0, #0' - - * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int) - _Form of expected instruction(s):_ 'vext.64 Q0, Q0, Q0, #0' - - * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int) - _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0' - - * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int) - _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0' - - * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int) - _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0' - -6.57.6.70 Reverse elements -.......................... - - * uint32x2_t vrev64_u32 (uint32x2_t) - _Form of expected instruction(s):_ 'vrev64.32 D0, D0' - - * uint16x4_t vrev64_u16 (uint16x4_t) - _Form of expected instruction(s):_ 'vrev64.16 D0, D0' - - * uint8x8_t vrev64_u8 (uint8x8_t) - _Form of expected instruction(s):_ 'vrev64.8 D0, D0' - - * int32x2_t vrev64_s32 (int32x2_t) - _Form of expected instruction(s):_ 'vrev64.32 D0, D0' - - * int16x4_t vrev64_s16 (int16x4_t) - _Form of expected instruction(s):_ 'vrev64.16 D0, D0' - - * int8x8_t vrev64_s8 (int8x8_t) - _Form of expected instruction(s):_ 'vrev64.8 D0, D0' - - * float32x2_t vrev64_f32 (float32x2_t) - _Form of expected instruction(s):_ 'vrev64.32 D0, D0' - - * poly16x4_t vrev64_p16 (poly16x4_t) - _Form of expected instruction(s):_ 'vrev64.16 D0, D0' - - * poly8x8_t vrev64_p8 (poly8x8_t) - _Form of expected instruction(s):_ 'vrev64.8 D0, D0' - - * uint32x4_t vrev64q_u32 (uint32x4_t) - _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0' - - * uint16x8_t vrev64q_u16 (uint16x8_t) - _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0' - - * uint8x16_t vrev64q_u8 (uint8x16_t) - _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0' - - * int32x4_t vrev64q_s32 (int32x4_t) - _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0' - - * int16x8_t vrev64q_s16 (int16x8_t) - _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0' - - * int8x16_t vrev64q_s8 (int8x16_t) - _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0' - - * float32x4_t vrev64q_f32 (float32x4_t) - _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0' - - * poly16x8_t vrev64q_p16 (poly16x8_t) - _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0' - - * poly8x16_t vrev64q_p8 (poly8x16_t) - _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0' - - * uint16x4_t vrev32_u16 (uint16x4_t) - _Form of expected instruction(s):_ 'vrev32.16 D0, D0' - - * int16x4_t vrev32_s16 (int16x4_t) - _Form of expected instruction(s):_ 'vrev32.16 D0, D0' - - * uint8x8_t vrev32_u8 (uint8x8_t) - _Form of expected instruction(s):_ 'vrev32.8 D0, D0' - - * int8x8_t vrev32_s8 (int8x8_t) - _Form of expected instruction(s):_ 'vrev32.8 D0, D0' - - * poly16x4_t vrev32_p16 (poly16x4_t) - _Form of expected instruction(s):_ 'vrev32.16 D0, D0' - - * poly8x8_t vrev32_p8 (poly8x8_t) - _Form of expected instruction(s):_ 'vrev32.8 D0, D0' - - * uint16x8_t vrev32q_u16 (uint16x8_t) - _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0' - - * int16x8_t vrev32q_s16 (int16x8_t) - _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0' - - * uint8x16_t vrev32q_u8 (uint8x16_t) - _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0' - - * int8x16_t vrev32q_s8 (int8x16_t) - _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0' - - * poly16x8_t vrev32q_p16 (poly16x8_t) - _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0' - - * poly8x16_t vrev32q_p8 (poly8x16_t) - _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0' - - * uint8x8_t vrev16_u8 (uint8x8_t) - _Form of expected instruction(s):_ 'vrev16.8 D0, D0' - - * int8x8_t vrev16_s8 (int8x8_t) - _Form of expected instruction(s):_ 'vrev16.8 D0, D0' - - * poly8x8_t vrev16_p8 (poly8x8_t) - _Form of expected instruction(s):_ 'vrev16.8 D0, D0' - - * uint8x16_t vrev16q_u8 (uint8x16_t) - _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0' - - * int8x16_t vrev16q_s8 (int8x16_t) - _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0' - - * poly8x16_t vrev16q_p8 (poly8x16_t) - _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0' - -6.57.6.71 Bit selection -....................... - - * poly64x1_t vbsl_p64 (uint64x1_t, poly64x1_t, poly64x1_t) - _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, - D0, D0' _or_ 'vbif D0, D0, D0' - - * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, - D0, D0' _or_ 'vbif D0, D0, D0' - - * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, - D0, D0' _or_ 'vbif D0, D0, D0' - - * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, - D0, D0' _or_ 'vbif D0, D0, D0' - - * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, - D0, D0' _or_ 'vbif D0, D0, D0' - - * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, - D0, D0' _or_ 'vbif D0, D0, D0' - - * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, - D0, D0' _or_ 'vbif D0, D0, D0' - - * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t) - _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, - D0, D0' _or_ 'vbif D0, D0, D0' - - * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t) - _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, - D0, D0' _or_ 'vbif D0, D0, D0' - - * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, - D0, D0' _or_ 'vbif D0, D0, D0' - - * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t) - _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, - D0, D0' _or_ 'vbif D0, D0, D0' - - * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t) - _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, - D0, D0' _or_ 'vbif D0, D0, D0' - - * poly64x2_t vbslq_p64 (uint64x2_t, poly64x2_t, poly64x2_t) - _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, - Q0, Q0' _or_ 'vbif Q0, Q0, Q0' - - * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, - Q0, Q0' _or_ 'vbif Q0, Q0, Q0' - - * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, - Q0, Q0' _or_ 'vbif Q0, Q0, Q0' - - * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, - Q0, Q0' _or_ 'vbif Q0, Q0, Q0' - - * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, - Q0, Q0' _or_ 'vbif Q0, Q0, Q0' - - * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, - Q0, Q0' _or_ 'vbif Q0, Q0, Q0' - - * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, - Q0, Q0' _or_ 'vbif Q0, Q0, Q0' - - * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t) - _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, - Q0, Q0' _or_ 'vbif Q0, Q0, Q0' - - * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, - Q0, Q0' _or_ 'vbif Q0, Q0, Q0' - - * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, - Q0, Q0' _or_ 'vbif Q0, Q0, Q0' - - * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t) - _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, - Q0, Q0' _or_ 'vbif Q0, Q0, Q0' - - * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t) - _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, - Q0, Q0' _or_ 'vbif Q0, Q0, Q0' - -6.57.6.72 Transpose elements -............................ - - * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vtrn.16 D0, D1' - - * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vtrn.8 D0, D1' - - * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vtrn.16 D0, D1' - - * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vtrn.8 D0, D1' - - * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t) - _Form of expected instruction(s):_ 'vtrn.16 D0, D1' - - * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t) - _Form of expected instruction(s):_ 'vtrn.8 D0, D1' - - * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vuzp.32 D0, D1' - - * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vuzp.32 D0, D1' - - * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vuzp.32 D0, D1' - - * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1' - - * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1' - - * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1' - - * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1' - - * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1' - - * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1' - - * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1' - - * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t) - _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1' - - * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t) - _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1' - -6.57.6.73 Zip elements -...................... - - * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vzip.16 D0, D1' - - * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vzip.8 D0, D1' - - * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vzip.16 D0, D1' - - * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vzip.8 D0, D1' - - * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t) - _Form of expected instruction(s):_ 'vzip.16 D0, D1' - - * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t) - _Form of expected instruction(s):_ 'vzip.8 D0, D1' - - * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vuzp.32 D0, D1' - - * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vuzp.32 D0, D1' - - * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vuzp.32 D0, D1' - - * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vzip.32 Q0, Q1' - - * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vzip.16 Q0, Q1' - - * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vzip.8 Q0, Q1' - - * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vzip.32 Q0, Q1' - - * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vzip.16 Q0, Q1' - - * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vzip.8 Q0, Q1' - - * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vzip.32 Q0, Q1' - - * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t) - _Form of expected instruction(s):_ 'vzip.16 Q0, Q1' - - * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t) - _Form of expected instruction(s):_ 'vzip.8 Q0, Q1' - -6.57.6.74 Unzip elements -........................ - - * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vuzp.32 D0, D1' - - * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vuzp.16 D0, D1' - - * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vuzp.8 D0, D1' - - * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vuzp.32 D0, D1' - - * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vuzp.16 D0, D1' - - * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vuzp.8 D0, D1' - - * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t) - _Form of expected instruction(s):_ 'vuzp.32 D0, D1' - - * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t) - _Form of expected instruction(s):_ 'vuzp.16 D0, D1' - - * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t) - _Form of expected instruction(s):_ 'vuzp.8 D0, D1' - - * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1' - - * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1' - - * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1' - - * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1' - - * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1' - - * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1' - - * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t) - _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1' - - * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t) - _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1' - - * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t) - _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1' - -6.57.6.75 Element/structure loads, VLD1 variants -................................................ - - * poly64x1_t vld1_p64 (const poly64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' - - * uint32x2_t vld1_u32 (const uint32_t *) - _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]' - - * uint16x4_t vld1_u16 (const uint16_t *) - _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]' - - * uint8x8_t vld1_u8 (const uint8_t *) - _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]' - - * int32x2_t vld1_s32 (const int32_t *) - _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]' - - * int16x4_t vld1_s16 (const int16_t *) - _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]' - - * int8x8_t vld1_s8 (const int8_t *) - _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]' - - * uint64x1_t vld1_u64 (const uint64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' - - * int64x1_t vld1_s64 (const int64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' - - * float32x2_t vld1_f32 (const float32_t *) - _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]' - - * poly16x4_t vld1_p16 (const poly16_t *) - _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]' - - * poly8x8_t vld1_p8 (const poly8_t *) - _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]' - - * poly64x2_t vld1q_p64 (const poly64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' - - * uint32x4_t vld1q_u32 (const uint32_t *) - _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]' - - * uint16x8_t vld1q_u16 (const uint16_t *) - _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]' - - * uint8x16_t vld1q_u8 (const uint8_t *) - _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]' - - * int32x4_t vld1q_s32 (const int32_t *) - _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]' - - * int16x8_t vld1q_s16 (const int16_t *) - _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]' - - * int8x16_t vld1q_s8 (const int8_t *) - _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]' - - * uint64x2_t vld1q_u64 (const uint64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' - - * int64x2_t vld1q_s64 (const int64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' - - * float32x4_t vld1q_f32 (const float32_t *) - _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]' - - * poly16x8_t vld1q_p16 (const poly16_t *) - _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]' - - * poly8x16_t vld1q_p8 (const poly8_t *) - _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]' - - * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int) - _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]' - - * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int) - _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]' - - * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int) - _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]' - - * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int) - _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]' - - * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int) - _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]' - - * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int) - _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]' - - * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const - int) - _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]' - - * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int) - _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]' - - * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int) - _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]' - - * poly64x1_t vld1_lane_p64 (const poly64_t *, poly64x1_t, const int) - _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' - - * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int) - _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' - - * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int) - _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' - - * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int) - - _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]' - - * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int) - - _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]' - - * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int) - _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]' - - * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int) - _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]' - - * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int) - _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]' - - * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int) - _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]' - - * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const - int) - _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]' - - * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int) - - _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]' - - * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int) - _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]' - - * poly64x2_t vld1q_lane_p64 (const poly64_t *, poly64x2_t, const int) - - _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' - - * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int) - - _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' - - * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int) - _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' - - * uint32x2_t vld1_dup_u32 (const uint32_t *) - _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]' - - * uint16x4_t vld1_dup_u16 (const uint16_t *) - _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]' - - * uint8x8_t vld1_dup_u8 (const uint8_t *) - _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]' - - * int32x2_t vld1_dup_s32 (const int32_t *) - _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]' - - * int16x4_t vld1_dup_s16 (const int16_t *) - _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]' - - * int8x8_t vld1_dup_s8 (const int8_t *) - _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]' - - * float32x2_t vld1_dup_f32 (const float32_t *) - _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]' - - * poly16x4_t vld1_dup_p16 (const poly16_t *) - _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]' - - * poly8x8_t vld1_dup_p8 (const poly8_t *) - _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]' - - * poly64x1_t vld1_dup_p64 (const poly64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' - - * uint64x1_t vld1_dup_u64 (const uint64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' - - * int64x1_t vld1_dup_s64 (const int64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' - - * uint32x4_t vld1q_dup_u32 (const uint32_t *) - _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]' - - * uint16x8_t vld1q_dup_u16 (const uint16_t *) - _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]' - - * uint8x16_t vld1q_dup_u8 (const uint8_t *) - _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]' - - * int32x4_t vld1q_dup_s32 (const int32_t *) - _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]' - - * int16x8_t vld1q_dup_s16 (const int16_t *) - _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]' - - * int8x16_t vld1q_dup_s8 (const int8_t *) - _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]' - - * float32x4_t vld1q_dup_f32 (const float32_t *) - _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]' - - * poly16x8_t vld1q_dup_p16 (const poly16_t *) - _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]' - - * poly8x16_t vld1q_dup_p8 (const poly8_t *) - _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]' - - * poly64x2_t vld1q_dup_p64 (const poly64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' - - * uint64x2_t vld1q_dup_u64 (const uint64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' - - * int64x2_t vld1q_dup_s64 (const int64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' - -6.57.6.76 Element/structure stores, VST1 variants -................................................. - - * void vst1_p64 (poly64_t *, poly64x1_t) - _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' - - * void vst1_u32 (uint32_t *, uint32x2_t) - _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]' - - * void vst1_u16 (uint16_t *, uint16x4_t) - _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]' - - * void vst1_u8 (uint8_t *, uint8x8_t) - _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]' - - * void vst1_s32 (int32_t *, int32x2_t) - _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]' - - * void vst1_s16 (int16_t *, int16x4_t) - _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]' - - * void vst1_s8 (int8_t *, int8x8_t) - _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]' - - * void vst1_u64 (uint64_t *, uint64x1_t) - _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' - - * void vst1_s64 (int64_t *, int64x1_t) - _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' - - * void vst1_f32 (float32_t *, float32x2_t) - _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]' - - * void vst1_p16 (poly16_t *, poly16x4_t) - _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]' - - * void vst1_p8 (poly8_t *, poly8x8_t) - _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]' - - * void vst1q_p64 (poly64_t *, poly64x2_t) - _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]' - - * void vst1q_u32 (uint32_t *, uint32x4_t) - _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]' - - * void vst1q_u16 (uint16_t *, uint16x8_t) - _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]' - - * void vst1q_u8 (uint8_t *, uint8x16_t) - _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]' - - * void vst1q_s32 (int32_t *, int32x4_t) - _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]' - - * void vst1q_s16 (int16_t *, int16x8_t) - _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]' - - * void vst1q_s8 (int8_t *, int8x16_t) - _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]' - - * void vst1q_u64 (uint64_t *, uint64x2_t) - _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]' - - * void vst1q_s64 (int64_t *, int64x2_t) - _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]' - - * void vst1q_f32 (float32_t *, float32x4_t) - _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]' - - * void vst1q_p16 (poly16_t *, poly16x8_t) - _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]' - - * void vst1q_p8 (poly8_t *, poly8x16_t) - _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]' - - * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int) - _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]' - - * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int) - _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]' - - * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int) - _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]' - - * void vst1_lane_s32 (int32_t *, int32x2_t, const int) - _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]' - - * void vst1_lane_s16 (int16_t *, int16x4_t, const int) - _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]' - - * void vst1_lane_s8 (int8_t *, int8x8_t, const int) - _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]' - - * void vst1_lane_f32 (float32_t *, float32x2_t, const int) - _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]' - - * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int) - _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]' - - * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int) - _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]' - - * void vst1_lane_p64 (poly64_t *, poly64x1_t, const int) - _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' - - * void vst1_lane_s64 (int64_t *, int64x1_t, const int) - _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' - - * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int) - _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' - - * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int) - _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]' - - * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int) - _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]' - - * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int) - _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]' - - * void vst1q_lane_s32 (int32_t *, int32x4_t, const int) - _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]' - - * void vst1q_lane_s16 (int16_t *, int16x8_t, const int) - _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]' - - * void vst1q_lane_s8 (int8_t *, int8x16_t, const int) - _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]' - - * void vst1q_lane_f32 (float32_t *, float32x4_t, const int) - _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]' - - * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int) - _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]' - - * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int) - _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]' - - * void vst1q_lane_p64 (poly64_t *, poly64x2_t, const int) - _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' - - * void vst1q_lane_s64 (int64_t *, int64x2_t, const int) - _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' - - * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int) - _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' - -6.57.6.77 Element/structure loads, VLD2 variants -................................................ - - * uint32x2x2_t vld2_u32 (const uint32_t *) - _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]' - - * uint16x4x2_t vld2_u16 (const uint16_t *) - _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]' - - * uint8x8x2_t vld2_u8 (const uint8_t *) - _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]' - - * int32x2x2_t vld2_s32 (const int32_t *) - _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]' - - * int16x4x2_t vld2_s16 (const int16_t *) - _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]' - - * int8x8x2_t vld2_s8 (const int8_t *) - _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]' - - * float32x2x2_t vld2_f32 (const float32_t *) - _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]' - - * poly16x4x2_t vld2_p16 (const poly16_t *) - _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]' - - * poly8x8x2_t vld2_p8 (const poly8_t *) - _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]' - - * poly64x1x2_t vld2_p64 (const poly64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' - - * uint64x1x2_t vld2_u64 (const uint64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' - - * int64x1x2_t vld2_s64 (const int64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' - - * uint32x4x2_t vld2q_u32 (const uint32_t *) - _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]' - - * uint16x8x2_t vld2q_u16 (const uint16_t *) - _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]' - - * uint8x16x2_t vld2q_u8 (const uint8_t *) - _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]' - - * int32x4x2_t vld2q_s32 (const int32_t *) - _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]' - - * int16x8x2_t vld2q_s16 (const int16_t *) - _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]' - - * int8x16x2_t vld2q_s8 (const int8_t *) - _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]' - - * float32x4x2_t vld2q_f32 (const float32_t *) - _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]' - - * poly16x8x2_t vld2q_p16 (const poly16_t *) - _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]' - - * poly8x16x2_t vld2q_p8 (const poly8_t *) - _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]' - - * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const - int) - _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]' - - * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const - int) - _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]' - - * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int) - _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]' - - * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int) - - _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]' - - * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int) - - _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]' - - * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int) - _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]' - - * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t, - const int) - _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]' - - * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const - int) - _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]' - - * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int) - _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]' - - * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const - int) - _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]' - - * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const - int) - _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]' - - * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const - int) - _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]' - - * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const - int) - _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]' - - * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t, - const int) - _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]' - - * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const - int) - _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]' - - * uint32x2x2_t vld2_dup_u32 (const uint32_t *) - _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]' - - * uint16x4x2_t vld2_dup_u16 (const uint16_t *) - _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]' - - * uint8x8x2_t vld2_dup_u8 (const uint8_t *) - _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]' - - * int32x2x2_t vld2_dup_s32 (const int32_t *) - _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]' - - * int16x4x2_t vld2_dup_s16 (const int16_t *) - _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]' - - * int8x8x2_t vld2_dup_s8 (const int8_t *) - _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]' - - * float32x2x2_t vld2_dup_f32 (const float32_t *) - _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]' - - * poly16x4x2_t vld2_dup_p16 (const poly16_t *) - _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]' - - * poly8x8x2_t vld2_dup_p8 (const poly8_t *) - _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]' - - * poly64x1x2_t vld2_dup_p64 (const poly64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' - - * uint64x1x2_t vld2_dup_u64 (const uint64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' - - * int64x1x2_t vld2_dup_s64 (const int64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' - -6.57.6.78 Element/structure stores, VST2 variants -................................................. - - * void vst2_u32 (uint32_t *, uint32x2x2_t) - _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]' - - * void vst2_u16 (uint16_t *, uint16x4x2_t) - _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]' - - * void vst2_u8 (uint8_t *, uint8x8x2_t) - _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]' - - * void vst2_s32 (int32_t *, int32x2x2_t) - _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]' - - * void vst2_s16 (int16_t *, int16x4x2_t) - _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]' - - * void vst2_s8 (int8_t *, int8x8x2_t) - _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]' - - * void vst2_f32 (float32_t *, float32x2x2_t) - _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]' - - * void vst2_p16 (poly16_t *, poly16x4x2_t) - _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]' - - * void vst2_p8 (poly8_t *, poly8x8x2_t) - _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]' - - * void vst2_p64 (poly64_t *, poly64x1x2_t) - _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]' - - * void vst2_u64 (uint64_t *, uint64x1x2_t) - _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]' - - * void vst2_s64 (int64_t *, int64x1x2_t) - _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]' - - * void vst2q_u32 (uint32_t *, uint32x4x2_t) - _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]' - - * void vst2q_u16 (uint16_t *, uint16x8x2_t) - _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]' - - * void vst2q_u8 (uint8_t *, uint8x16x2_t) - _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]' - - * void vst2q_s32 (int32_t *, int32x4x2_t) - _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]' - - * void vst2q_s16 (int16_t *, int16x8x2_t) - _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]' - - * void vst2q_s8 (int8_t *, int8x16x2_t) - _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]' - - * void vst2q_f32 (float32_t *, float32x4x2_t) - _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]' - - * void vst2q_p16 (poly16_t *, poly16x8x2_t) - _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]' - - * void vst2q_p8 (poly8_t *, poly8x16x2_t) - _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]' - - * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int) - _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]' - - * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int) - _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]' - - * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int) - _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]' - - * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int) - _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]' - - * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int) - _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]' - - * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int) - _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]' - - * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int) - _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]' - - * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int) - _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]' - - * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int) - _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]' - - * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int) - _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]' - - * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int) - _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]' - - * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int) - _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]' - - * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int) - _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]' - - * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int) - _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]' - - * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int) - _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]' - -6.57.6.79 Element/structure loads, VLD3 variants -................................................ - - * uint32x2x3_t vld3_u32 (const uint32_t *) - _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]' - - * uint16x4x3_t vld3_u16 (const uint16_t *) - _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]' - - * uint8x8x3_t vld3_u8 (const uint8_t *) - _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]' - - * int32x2x3_t vld3_s32 (const int32_t *) - _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]' - - * int16x4x3_t vld3_s16 (const int16_t *) - _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]' - - * int8x8x3_t vld3_s8 (const int8_t *) - _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]' - - * float32x2x3_t vld3_f32 (const float32_t *) - _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]' - - * poly16x4x3_t vld3_p16 (const poly16_t *) - _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]' - - * poly8x8x3_t vld3_p8 (const poly8_t *) - _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]' - - * poly64x1x3_t vld3_p64 (const poly64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]' - - * uint64x1x3_t vld3_u64 (const uint64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]' - - * int64x1x3_t vld3_s64 (const int64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]' - - * uint32x4x3_t vld3q_u32 (const uint32_t *) - _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]' - - * uint16x8x3_t vld3q_u16 (const uint16_t *) - _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]' - - * uint8x16x3_t vld3q_u8 (const uint8_t *) - _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]' - - * int32x4x3_t vld3q_s32 (const int32_t *) - _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]' - - * int16x8x3_t vld3q_s16 (const int16_t *) - _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]' - - * int8x16x3_t vld3q_s8 (const int8_t *) - _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]' - - * float32x4x3_t vld3q_f32 (const float32_t *) - _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]' - - * poly16x8x3_t vld3q_p16 (const poly16_t *) - _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]' - - * poly8x16x3_t vld3q_p8 (const poly8_t *) - _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]' - - * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const - int) - _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]}, - [R0]' - - * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const - int) - _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]}, - [R0]' - - * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int) - _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]}, - [R0]' - - * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int) - - _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]}, - [R0]' - - * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int) - - _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]}, - [R0]' - - * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int) - _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]}, - [R0]' - - * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t, - const int) - _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]}, - [R0]' - - * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const - int) - _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]}, - [R0]' - - * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int) - _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]}, - [R0]' - - * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const - int) - _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]}, - [R0]' - - * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const - int) - _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]}, - [R0]' - - * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const - int) - _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]}, - [R0]' - - * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const - int) - _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]}, - [R0]' - - * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t, - const int) - _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]}, - [R0]' - - * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const - int) - _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]}, - [R0]' - - * uint32x2x3_t vld3_dup_u32 (const uint32_t *) - _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]}, - [R0]' - - * uint16x4x3_t vld3_dup_u16 (const uint16_t *) - _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]}, - [R0]' - - * uint8x8x3_t vld3_dup_u8 (const uint8_t *) - _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]}, - [R0]' - - * int32x2x3_t vld3_dup_s32 (const int32_t *) - _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]}, - [R0]' - - * int16x4x3_t vld3_dup_s16 (const int16_t *) - _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]}, - [R0]' - - * int8x8x3_t vld3_dup_s8 (const int8_t *) - _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]}, - [R0]' - - * float32x2x3_t vld3_dup_f32 (const float32_t *) - _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]}, - [R0]' - - * poly16x4x3_t vld3_dup_p16 (const poly16_t *) - _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]}, - [R0]' - - * poly8x8x3_t vld3_dup_p8 (const poly8_t *) - _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]}, - [R0]' - - * poly64x1x3_t vld3_dup_p64 (const poly64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]' - - * uint64x1x3_t vld3_dup_u64 (const uint64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]' - - * int64x1x3_t vld3_dup_s64 (const int64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]' - -6.57.6.80 Element/structure stores, VST3 variants -................................................. - - * void vst3_u32 (uint32_t *, uint32x2x3_t) - _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]' - - * void vst3_u16 (uint16_t *, uint16x4x3_t) - _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]' - - * void vst3_u8 (uint8_t *, uint8x8x3_t) - _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]' - - * void vst3_s32 (int32_t *, int32x2x3_t) - _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]' - - * void vst3_s16 (int16_t *, int16x4x3_t) - _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]' - - * void vst3_s8 (int8_t *, int8x8x3_t) - _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]' - - * void vst3_f32 (float32_t *, float32x2x3_t) - _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]' - - * void vst3_p16 (poly16_t *, poly16x4x3_t) - _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]' - - * void vst3_p8 (poly8_t *, poly8x8x3_t) - _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]' - - * void vst3_p64 (poly64_t *, poly64x1x3_t) - _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]' - - * void vst3_u64 (uint64_t *, uint64x1x3_t) - _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]' - - * void vst3_s64 (int64_t *, int64x1x3_t) - _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]' - - * void vst3q_u32 (uint32_t *, uint32x4x3_t) - _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]' - - * void vst3q_u16 (uint16_t *, uint16x8x3_t) - _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]' - - * void vst3q_u8 (uint8_t *, uint8x16x3_t) - _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]' - - * void vst3q_s32 (int32_t *, int32x4x3_t) - _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]' - - * void vst3q_s16 (int16_t *, int16x8x3_t) - _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]' - - * void vst3q_s8 (int8_t *, int8x16x3_t) - _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]' - - * void vst3q_f32 (float32_t *, float32x4x3_t) - _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]' - - * void vst3q_p16 (poly16_t *, poly16x8x3_t) - _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]' - - * void vst3q_p8 (poly8_t *, poly8x16x3_t) - _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]' - - * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int) - _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]}, - [R0]' - - * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int) - _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]}, - [R0]' - - * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int) - _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]}, - [R0]' - - * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int) - _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]}, - [R0]' - - * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int) - _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]}, - [R0]' - - * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int) - _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]}, - [R0]' - - * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int) - _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]}, - [R0]' - - * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int) - _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]}, - [R0]' - - * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int) - _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]}, - [R0]' - - * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int) - _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]}, - [R0]' - - * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int) - _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]}, - [R0]' - - * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int) - _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]}, - [R0]' - - * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int) - _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]}, - [R0]' - - * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int) - _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]}, - [R0]' - - * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int) - _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]}, - [R0]' - -6.57.6.81 Element/structure loads, VLD4 variants -................................................ - - * uint32x2x4_t vld4_u32 (const uint32_t *) - _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]' - - * uint16x4x4_t vld4_u16 (const uint16_t *) - _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]' - - * uint8x8x4_t vld4_u8 (const uint8_t *) - _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]' - - * int32x2x4_t vld4_s32 (const int32_t *) - _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]' - - * int16x4x4_t vld4_s16 (const int16_t *) - _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]' - - * int8x8x4_t vld4_s8 (const int8_t *) - _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]' - - * float32x2x4_t vld4_f32 (const float32_t *) - _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]' - - * poly16x4x4_t vld4_p16 (const poly16_t *) - _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]' - - * poly8x8x4_t vld4_p8 (const poly8_t *) - _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]' - - * poly64x1x4_t vld4_p64 (const poly64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]' - - * uint64x1x4_t vld4_u64 (const uint64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]' - - * int64x1x4_t vld4_s64 (const int64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]' - - * uint32x4x4_t vld4q_u32 (const uint32_t *) - _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]' - - * uint16x8x4_t vld4q_u16 (const uint16_t *) - _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]' - - * uint8x16x4_t vld4q_u8 (const uint8_t *) - _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]' - - * int32x4x4_t vld4q_s32 (const int32_t *) - _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]' - - * int16x8x4_t vld4q_s16 (const int16_t *) - _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]' - - * int8x16x4_t vld4q_s8 (const int8_t *) - _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]' - - * float32x4x4_t vld4q_f32 (const float32_t *) - _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]' - - * poly16x8x4_t vld4q_p16 (const poly16_t *) - _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]' - - * poly8x16x4_t vld4q_p8 (const poly8_t *) - _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]' - - * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const - int) - _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const - int) - _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int) - _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int) - - _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int) - - _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int) - _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t, - const int) - _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const - int) - _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int) - _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const - int) - _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const - int) - _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const - int) - _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const - int) - _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t, - const int) - _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const - int) - _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * uint32x2x4_t vld4_dup_u32 (const uint32_t *) - _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[], - D3[]}, [R0]' - - * uint16x4x4_t vld4_dup_u16 (const uint16_t *) - _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[], - D3[]}, [R0]' - - * uint8x8x4_t vld4_dup_u8 (const uint8_t *) - _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[], - D3[]}, [R0]' - - * int32x2x4_t vld4_dup_s32 (const int32_t *) - _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[], - D3[]}, [R0]' - - * int16x4x4_t vld4_dup_s16 (const int16_t *) - _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[], - D3[]}, [R0]' - - * int8x8x4_t vld4_dup_s8 (const int8_t *) - _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[], - D3[]}, [R0]' - - * float32x2x4_t vld4_dup_f32 (const float32_t *) - _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[], - D3[]}, [R0]' - - * poly16x4x4_t vld4_dup_p16 (const poly16_t *) - _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[], - D3[]}, [R0]' - - * poly8x8x4_t vld4_dup_p8 (const poly8_t *) - _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[], - D3[]}, [R0]' - - * poly64x1x4_t vld4_dup_p64 (const poly64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]' - - * uint64x1x4_t vld4_dup_u64 (const uint64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]' - - * int64x1x4_t vld4_dup_s64 (const int64_t *) - _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]' - -6.57.6.82 Element/structure stores, VST4 variants -................................................. - - * void vst4_u32 (uint32_t *, uint32x2x4_t) - _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]' - - * void vst4_u16 (uint16_t *, uint16x4x4_t) - _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]' - - * void vst4_u8 (uint8_t *, uint8x8x4_t) - _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]' - - * void vst4_s32 (int32_t *, int32x2x4_t) - _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]' - - * void vst4_s16 (int16_t *, int16x4x4_t) - _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]' - - * void vst4_s8 (int8_t *, int8x8x4_t) - _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]' - - * void vst4_f32 (float32_t *, float32x2x4_t) - _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]' - - * void vst4_p16 (poly16_t *, poly16x4x4_t) - _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]' - - * void vst4_p8 (poly8_t *, poly8x8x4_t) - _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]' - - * void vst4_p64 (poly64_t *, poly64x1x4_t) - _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]' - - * void vst4_u64 (uint64_t *, uint64x1x4_t) - _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]' - - * void vst4_s64 (int64_t *, int64x1x4_t) - _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]' - - * void vst4q_u32 (uint32_t *, uint32x4x4_t) - _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]' - - * void vst4q_u16 (uint16_t *, uint16x8x4_t) - _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]' - - * void vst4q_u8 (uint8_t *, uint8x16x4_t) - _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]' - - * void vst4q_s32 (int32_t *, int32x4x4_t) - _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]' - - * void vst4q_s16 (int16_t *, int16x8x4_t) - _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]' - - * void vst4q_s8 (int8_t *, int8x16x4_t) - _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]' - - * void vst4q_f32 (float32_t *, float32x4x4_t) - _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]' - - * void vst4q_p16 (poly16_t *, poly16x8x4_t) - _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]' - - * void vst4q_p8 (poly8_t *, poly8x16x4_t) - _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]' - - * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int) - _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int) - _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int) - _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int) - _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int) - _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int) - _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int) - _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int) - _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int) - _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int) - _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int) - _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int) - _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int) - _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int) - _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - - * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int) - _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0], - D3[0]}, [R0]' - -6.57.6.83 Logical operations (AND) -.................................. - - * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vand D0, D0, D0' - - * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vand D0, D0, D0' - - * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vand D0, D0, D0' - - * int32x2_t vand_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vand D0, D0, D0' - - * int16x4_t vand_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vand D0, D0, D0' - - * int8x8_t vand_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vand D0, D0, D0' - - * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t) - - * int64x1_t vand_s64 (int64x1_t, int64x1_t) - - * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' - - * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' - - * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' - - * int32x4_t vandq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' - - * int16x8_t vandq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' - - * int8x16_t vandq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' - - * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t) - _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' - - * int64x2_t vandq_s64 (int64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' - -6.57.6.84 Logical operations (OR) -................................. - - * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vorr D0, D0, D0' - - * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vorr D0, D0, D0' - - * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vorr D0, D0, D0' - - * int32x2_t vorr_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vorr D0, D0, D0' - - * int16x4_t vorr_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vorr D0, D0, D0' - - * int8x8_t vorr_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vorr D0, D0, D0' - - * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t) - - * int64x1_t vorr_s64 (int64x1_t, int64x1_t) - - * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' - - * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' - - * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' - - * int32x4_t vorrq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' - - * int16x8_t vorrq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' - - * int8x16_t vorrq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' - - * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t) - _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' - - * int64x2_t vorrq_s64 (int64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' - -6.57.6.85 Logical operations (exclusive OR) -........................................... - - * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'veor D0, D0, D0' - - * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'veor D0, D0, D0' - - * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'veor D0, D0, D0' - - * int32x2_t veor_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'veor D0, D0, D0' - - * int16x4_t veor_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'veor D0, D0, D0' - - * int8x8_t veor_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'veor D0, D0, D0' - - * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t) - - * int64x1_t veor_s64 (int64x1_t, int64x1_t) - - * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' - - * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' - - * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' - - * int32x4_t veorq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' - - * int16x8_t veorq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' - - * int8x16_t veorq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' - - * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t) - _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' - - * int64x2_t veorq_s64 (int64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' - -6.57.6.86 Logical operations (AND-NOT) -...................................... - - * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vbic D0, D0, D0' - - * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vbic D0, D0, D0' - - * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vbic D0, D0, D0' - - * int32x2_t vbic_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vbic D0, D0, D0' - - * int16x4_t vbic_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vbic D0, D0, D0' - - * int8x8_t vbic_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vbic D0, D0, D0' - - * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t) - - * int64x1_t vbic_s64 (int64x1_t, int64x1_t) - - * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' - - * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' - - * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' - - * int32x4_t vbicq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' - - * int16x8_t vbicq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' - - * int8x16_t vbicq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' - - * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t) - _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' - - * int64x2_t vbicq_s64 (int64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' - -6.57.6.87 Logical operations (OR-NOT) -..................................... - - * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t) - _Form of expected instruction(s):_ 'vorn D0, D0, D0' - - * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t) - _Form of expected instruction(s):_ 'vorn D0, D0, D0' - - * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t) - _Form of expected instruction(s):_ 'vorn D0, D0, D0' - - * int32x2_t vorn_s32 (int32x2_t, int32x2_t) - _Form of expected instruction(s):_ 'vorn D0, D0, D0' - - * int16x4_t vorn_s16 (int16x4_t, int16x4_t) - _Form of expected instruction(s):_ 'vorn D0, D0, D0' - - * int8x8_t vorn_s8 (int8x8_t, int8x8_t) - _Form of expected instruction(s):_ 'vorn D0, D0, D0' - - * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t) - - * int64x1_t vorn_s64 (int64x1_t, int64x1_t) - - * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' - - * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t) - _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' - - * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t) - _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' - - * int32x4_t vornq_s32 (int32x4_t, int32x4_t) - _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' - - * int16x8_t vornq_s16 (int16x8_t, int16x8_t) - _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' - - * int8x16_t vornq_s8 (int8x16_t, int8x16_t) - _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' - - * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t) - _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' - - * int64x2_t vornq_s64 (int64x2_t, int64x2_t) - _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' - -6.57.6.88 Reinterpret casts -........................... - - * poly8x8_t vreinterpret_p8_p16 (poly16x4_t) - - * poly8x8_t vreinterpret_p8_f32 (float32x2_t) - - * poly8x8_t vreinterpret_p8_p64 (poly64x1_t) - - * poly8x8_t vreinterpret_p8_s64 (int64x1_t) - - * poly8x8_t vreinterpret_p8_u64 (uint64x1_t) - - * poly8x8_t vreinterpret_p8_s8 (int8x8_t) - - * poly8x8_t vreinterpret_p8_s16 (int16x4_t) - - * poly8x8_t vreinterpret_p8_s32 (int32x2_t) - - * poly8x8_t vreinterpret_p8_u8 (uint8x8_t) - - * poly8x8_t vreinterpret_p8_u16 (uint16x4_t) - - * poly8x8_t vreinterpret_p8_u32 (uint32x2_t) - - * poly16x4_t vreinterpret_p16_p8 (poly8x8_t) - - * poly16x4_t vreinterpret_p16_f32 (float32x2_t) - - * poly16x4_t vreinterpret_p16_p64 (poly64x1_t) - - * poly16x4_t vreinterpret_p16_s64 (int64x1_t) - - * poly16x4_t vreinterpret_p16_u64 (uint64x1_t) - - * poly16x4_t vreinterpret_p16_s8 (int8x8_t) - - * poly16x4_t vreinterpret_p16_s16 (int16x4_t) - - * poly16x4_t vreinterpret_p16_s32 (int32x2_t) - - * poly16x4_t vreinterpret_p16_u8 (uint8x8_t) - - * poly16x4_t vreinterpret_p16_u16 (uint16x4_t) - - * poly16x4_t vreinterpret_p16_u32 (uint32x2_t) - - * float32x2_t vreinterpret_f32_p8 (poly8x8_t) - - * float32x2_t vreinterpret_f32_p16 (poly16x4_t) - - * float32x2_t vreinterpret_f32_p64 (poly64x1_t) - - * float32x2_t vreinterpret_f32_s64 (int64x1_t) - - * float32x2_t vreinterpret_f32_u64 (uint64x1_t) - - * float32x2_t vreinterpret_f32_s8 (int8x8_t) - - * float32x2_t vreinterpret_f32_s16 (int16x4_t) - - * float32x2_t vreinterpret_f32_s32 (int32x2_t) - - * float32x2_t vreinterpret_f32_u8 (uint8x8_t) - - * float32x2_t vreinterpret_f32_u16 (uint16x4_t) - - * float32x2_t vreinterpret_f32_u32 (uint32x2_t) - - * poly64x1_t vreinterpret_p64_p8 (poly8x8_t) - - * poly64x1_t vreinterpret_p64_p16 (poly16x4_t) - - * poly64x1_t vreinterpret_p64_f32 (float32x2_t) - - * poly64x1_t vreinterpret_p64_s64 (int64x1_t) - - * poly64x1_t vreinterpret_p64_u64 (uint64x1_t) - - * poly64x1_t vreinterpret_p64_s8 (int8x8_t) - - * poly64x1_t vreinterpret_p64_s16 (int16x4_t) - - * poly64x1_t vreinterpret_p64_s32 (int32x2_t) - - * poly64x1_t vreinterpret_p64_u8 (uint8x8_t) - - * poly64x1_t vreinterpret_p64_u16 (uint16x4_t) - - * poly64x1_t vreinterpret_p64_u32 (uint32x2_t) - - * int64x1_t vreinterpret_s64_p8 (poly8x8_t) - - * int64x1_t vreinterpret_s64_p16 (poly16x4_t) - - * int64x1_t vreinterpret_s64_f32 (float32x2_t) - - * int64x1_t vreinterpret_s64_p64 (poly64x1_t) - - * int64x1_t vreinterpret_s64_u64 (uint64x1_t) - - * int64x1_t vreinterpret_s64_s8 (int8x8_t) - - * int64x1_t vreinterpret_s64_s16 (int16x4_t) - - * int64x1_t vreinterpret_s64_s32 (int32x2_t) - - * int64x1_t vreinterpret_s64_u8 (uint8x8_t) - - * int64x1_t vreinterpret_s64_u16 (uint16x4_t) - - * int64x1_t vreinterpret_s64_u32 (uint32x2_t) - - * uint64x1_t vreinterpret_u64_p8 (poly8x8_t) - - * uint64x1_t vreinterpret_u64_p16 (poly16x4_t) - - * uint64x1_t vreinterpret_u64_f32 (float32x2_t) - - * uint64x1_t vreinterpret_u64_p64 (poly64x1_t) - - * uint64x1_t vreinterpret_u64_s64 (int64x1_t) - - * uint64x1_t vreinterpret_u64_s8 (int8x8_t) - - * uint64x1_t vreinterpret_u64_s16 (int16x4_t) - - * uint64x1_t vreinterpret_u64_s32 (int32x2_t) - - * uint64x1_t vreinterpret_u64_u8 (uint8x8_t) - - * uint64x1_t vreinterpret_u64_u16 (uint16x4_t) - - * uint64x1_t vreinterpret_u64_u32 (uint32x2_t) - - * int8x8_t vreinterpret_s8_p8 (poly8x8_t) - - * int8x8_t vreinterpret_s8_p16 (poly16x4_t) - - * int8x8_t vreinterpret_s8_f32 (float32x2_t) - - * int8x8_t vreinterpret_s8_p64 (poly64x1_t) - - * int8x8_t vreinterpret_s8_s64 (int64x1_t) - - * int8x8_t vreinterpret_s8_u64 (uint64x1_t) - - * int8x8_t vreinterpret_s8_s16 (int16x4_t) - - * int8x8_t vreinterpret_s8_s32 (int32x2_t) - - * int8x8_t vreinterpret_s8_u8 (uint8x8_t) - - * int8x8_t vreinterpret_s8_u16 (uint16x4_t) - - * int8x8_t vreinterpret_s8_u32 (uint32x2_t) - - * int16x4_t vreinterpret_s16_p8 (poly8x8_t) - - * int16x4_t vreinterpret_s16_p16 (poly16x4_t) - - * int16x4_t vreinterpret_s16_f32 (float32x2_t) - - * int16x4_t vreinterpret_s16_p64 (poly64x1_t) - - * int16x4_t vreinterpret_s16_s64 (int64x1_t) - - * int16x4_t vreinterpret_s16_u64 (uint64x1_t) - - * int16x4_t vreinterpret_s16_s8 (int8x8_t) - - * int16x4_t vreinterpret_s16_s32 (int32x2_t) - - * int16x4_t vreinterpret_s16_u8 (uint8x8_t) - - * int16x4_t vreinterpret_s16_u16 (uint16x4_t) - - * int16x4_t vreinterpret_s16_u32 (uint32x2_t) - - * int32x2_t vreinterpret_s32_p8 (poly8x8_t) - - * int32x2_t vreinterpret_s32_p16 (poly16x4_t) - - * int32x2_t vreinterpret_s32_f32 (float32x2_t) - - * int32x2_t vreinterpret_s32_p64 (poly64x1_t) - - * int32x2_t vreinterpret_s32_s64 (int64x1_t) - - * int32x2_t vreinterpret_s32_u64 (uint64x1_t) - - * int32x2_t vreinterpret_s32_s8 (int8x8_t) - - * int32x2_t vreinterpret_s32_s16 (int16x4_t) - - * int32x2_t vreinterpret_s32_u8 (uint8x8_t) - - * int32x2_t vreinterpret_s32_u16 (uint16x4_t) - - * int32x2_t vreinterpret_s32_u32 (uint32x2_t) - - * uint8x8_t vreinterpret_u8_p8 (poly8x8_t) - - * uint8x8_t vreinterpret_u8_p16 (poly16x4_t) - - * uint8x8_t vreinterpret_u8_f32 (float32x2_t) - - * uint8x8_t vreinterpret_u8_p64 (poly64x1_t) - - * uint8x8_t vreinterpret_u8_s64 (int64x1_t) - - * uint8x8_t vreinterpret_u8_u64 (uint64x1_t) - - * uint8x8_t vreinterpret_u8_s8 (int8x8_t) - - * uint8x8_t vreinterpret_u8_s16 (int16x4_t) - - * uint8x8_t vreinterpret_u8_s32 (int32x2_t) - - * uint8x8_t vreinterpret_u8_u16 (uint16x4_t) - - * uint8x8_t vreinterpret_u8_u32 (uint32x2_t) - - * uint16x4_t vreinterpret_u16_p8 (poly8x8_t) - - * uint16x4_t vreinterpret_u16_p16 (poly16x4_t) - - * uint16x4_t vreinterpret_u16_f32 (float32x2_t) - - * uint16x4_t vreinterpret_u16_p64 (poly64x1_t) - - * uint16x4_t vreinterpret_u16_s64 (int64x1_t) - - * uint16x4_t vreinterpret_u16_u64 (uint64x1_t) - - * uint16x4_t vreinterpret_u16_s8 (int8x8_t) - - * uint16x4_t vreinterpret_u16_s16 (int16x4_t) - - * uint16x4_t vreinterpret_u16_s32 (int32x2_t) - - * uint16x4_t vreinterpret_u16_u8 (uint8x8_t) - - * uint16x4_t vreinterpret_u16_u32 (uint32x2_t) - - * uint32x2_t vreinterpret_u32_p8 (poly8x8_t) - - * uint32x2_t vreinterpret_u32_p16 (poly16x4_t) - - * uint32x2_t vreinterpret_u32_f32 (float32x2_t) - - * uint32x2_t vreinterpret_u32_p64 (poly64x1_t) - - * uint32x2_t vreinterpret_u32_s64 (int64x1_t) - - * uint32x2_t vreinterpret_u32_u64 (uint64x1_t) - - * uint32x2_t vreinterpret_u32_s8 (int8x8_t) - - * uint32x2_t vreinterpret_u32_s16 (int16x4_t) - - * uint32x2_t vreinterpret_u32_s32 (int32x2_t) - - * uint32x2_t vreinterpret_u32_u8 (uint8x8_t) - - * uint32x2_t vreinterpret_u32_u16 (uint16x4_t) - - * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t) - - * poly8x16_t vreinterpretq_p8_f32 (float32x4_t) - - * poly8x16_t vreinterpretq_p8_p64 (poly64x2_t) - - * poly8x16_t vreinterpretq_p8_p128 (poly128_t) - - * poly8x16_t vreinterpretq_p8_s64 (int64x2_t) - - * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t) - - * poly8x16_t vreinterpretq_p8_s8 (int8x16_t) - - * poly8x16_t vreinterpretq_p8_s16 (int16x8_t) - - * poly8x16_t vreinterpretq_p8_s32 (int32x4_t) - - * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t) - - * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t) - - * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t) - - * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t) - - * poly16x8_t vreinterpretq_p16_f32 (float32x4_t) - - * poly16x8_t vreinterpretq_p16_p64 (poly64x2_t) - - * poly16x8_t vreinterpretq_p16_p128 (poly128_t) - - * poly16x8_t vreinterpretq_p16_s64 (int64x2_t) - - * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t) - - * poly16x8_t vreinterpretq_p16_s8 (int8x16_t) - - * poly16x8_t vreinterpretq_p16_s16 (int16x8_t) - - * poly16x8_t vreinterpretq_p16_s32 (int32x4_t) - - * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t) - - * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t) - - * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t) - - * float32x4_t vreinterpretq_f32_p8 (poly8x16_t) - - * float32x4_t vreinterpretq_f32_p16 (poly16x8_t) - - * float32x4_t vreinterpretq_f32_p64 (poly64x2_t) - - * float32x4_t vreinterpretq_f32_p128 (poly128_t) - - * float32x4_t vreinterpretq_f32_s64 (int64x2_t) - - * float32x4_t vreinterpretq_f32_u64 (uint64x2_t) - - * float32x4_t vreinterpretq_f32_s8 (int8x16_t) - - * float32x4_t vreinterpretq_f32_s16 (int16x8_t) - - * float32x4_t vreinterpretq_f32_s32 (int32x4_t) - - * float32x4_t vreinterpretq_f32_u8 (uint8x16_t) - - * float32x4_t vreinterpretq_f32_u16 (uint16x8_t) - - * float32x4_t vreinterpretq_f32_u32 (uint32x4_t) - - * poly64x2_t vreinterpretq_p64_p8 (poly8x16_t) - - * poly64x2_t vreinterpretq_p64_p16 (poly16x8_t) - - * poly64x2_t vreinterpretq_p64_f32 (float32x4_t) - - * poly64x2_t vreinterpretq_p64_p128 (poly128_t) - - * poly64x2_t vreinterpretq_p64_s64 (int64x2_t) - - * poly64x2_t vreinterpretq_p64_u64 (uint64x2_t) - - * poly64x2_t vreinterpretq_p64_s8 (int8x16_t) - - * poly64x2_t vreinterpretq_p64_s16 (int16x8_t) - - * poly64x2_t vreinterpretq_p64_s32 (int32x4_t) - - * poly64x2_t vreinterpretq_p64_u8 (uint8x16_t) - - * poly64x2_t vreinterpretq_p64_u16 (uint16x8_t) - - * poly64x2_t vreinterpretq_p64_u32 (uint32x4_t) - - * poly128_t vreinterpretq_p128_p8 (poly8x16_t) - - * poly128_t vreinterpretq_p128_p16 (poly16x8_t) - - * poly128_t vreinterpretq_p128_f32 (float32x4_t) - - * poly128_t vreinterpretq_p128_p64 (poly64x2_t) - - * poly128_t vreinterpretq_p128_s64 (int64x2_t) - - * poly128_t vreinterpretq_p128_u64 (uint64x2_t) - - * poly128_t vreinterpretq_p128_s8 (int8x16_t) - - * poly128_t vreinterpretq_p128_s16 (int16x8_t) - - * poly128_t vreinterpretq_p128_s32 (int32x4_t) - - * poly128_t vreinterpretq_p128_u8 (uint8x16_t) - - * poly128_t vreinterpretq_p128_u16 (uint16x8_t) - - * poly128_t vreinterpretq_p128_u32 (uint32x4_t) - - * int64x2_t vreinterpretq_s64_p8 (poly8x16_t) - - * int64x2_t vreinterpretq_s64_p16 (poly16x8_t) - - * int64x2_t vreinterpretq_s64_f32 (float32x4_t) - - * int64x2_t vreinterpretq_s64_p64 (poly64x2_t) - - * int64x2_t vreinterpretq_s64_p128 (poly128_t) - - * int64x2_t vreinterpretq_s64_u64 (uint64x2_t) - - * int64x2_t vreinterpretq_s64_s8 (int8x16_t) - - * int64x2_t vreinterpretq_s64_s16 (int16x8_t) - - * int64x2_t vreinterpretq_s64_s32 (int32x4_t) - - * int64x2_t vreinterpretq_s64_u8 (uint8x16_t) - - * int64x2_t vreinterpretq_s64_u16 (uint16x8_t) - - * int64x2_t vreinterpretq_s64_u32 (uint32x4_t) - - * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t) - - * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t) - - * uint64x2_t vreinterpretq_u64_f32 (float32x4_t) - - * uint64x2_t vreinterpretq_u64_p64 (poly64x2_t) - - * uint64x2_t vreinterpretq_u64_p128 (poly128_t) - - * uint64x2_t vreinterpretq_u64_s64 (int64x2_t) - - * uint64x2_t vreinterpretq_u64_s8 (int8x16_t) - - * uint64x2_t vreinterpretq_u64_s16 (int16x8_t) - - * uint64x2_t vreinterpretq_u64_s32 (int32x4_t) - - * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t) - - * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t) - - * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t) - - * int8x16_t vreinterpretq_s8_p8 (poly8x16_t) - - * int8x16_t vreinterpretq_s8_p16 (poly16x8_t) - - * int8x16_t vreinterpretq_s8_f32 (float32x4_t) - - * int8x16_t vreinterpretq_s8_p64 (poly64x2_t) - - * int8x16_t vreinterpretq_s8_p128 (poly128_t) - - * int8x16_t vreinterpretq_s8_s64 (int64x2_t) - - * int8x16_t vreinterpretq_s8_u64 (uint64x2_t) - - * int8x16_t vreinterpretq_s8_s16 (int16x8_t) - - * int8x16_t vreinterpretq_s8_s32 (int32x4_t) - - * int8x16_t vreinterpretq_s8_u8 (uint8x16_t) - - * int8x16_t vreinterpretq_s8_u16 (uint16x8_t) - - * int8x16_t vreinterpretq_s8_u32 (uint32x4_t) - - * int16x8_t vreinterpretq_s16_p8 (poly8x16_t) - - * int16x8_t vreinterpretq_s16_p16 (poly16x8_t) - - * int16x8_t vreinterpretq_s16_f32 (float32x4_t) - - * int16x8_t vreinterpretq_s16_p64 (poly64x2_t) - - * int16x8_t vreinterpretq_s16_p128 (poly128_t) - - * int16x8_t vreinterpretq_s16_s64 (int64x2_t) - - * int16x8_t vreinterpretq_s16_u64 (uint64x2_t) - - * int16x8_t vreinterpretq_s16_s8 (int8x16_t) - - * int16x8_t vreinterpretq_s16_s32 (int32x4_t) - - * int16x8_t vreinterpretq_s16_u8 (uint8x16_t) - - * int16x8_t vreinterpretq_s16_u16 (uint16x8_t) - - * int16x8_t vreinterpretq_s16_u32 (uint32x4_t) - - * int32x4_t vreinterpretq_s32_p8 (poly8x16_t) - - * int32x4_t vreinterpretq_s32_p16 (poly16x8_t) - - * int32x4_t vreinterpretq_s32_f32 (float32x4_t) - - * int32x4_t vreinterpretq_s32_p64 (poly64x2_t) - - * int32x4_t vreinterpretq_s32_p128 (poly128_t) - - * int32x4_t vreinterpretq_s32_s64 (int64x2_t) - - * int32x4_t vreinterpretq_s32_u64 (uint64x2_t) - - * int32x4_t vreinterpretq_s32_s8 (int8x16_t) - - * int32x4_t vreinterpretq_s32_s16 (int16x8_t) - - * int32x4_t vreinterpretq_s32_u8 (uint8x16_t) - - * int32x4_t vreinterpretq_s32_u16 (uint16x8_t) - - * int32x4_t vreinterpretq_s32_u32 (uint32x4_t) - - * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t) - - * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t) - - * uint8x16_t vreinterpretq_u8_f32 (float32x4_t) - - * uint8x16_t vreinterpretq_u8_p64 (poly64x2_t) - - * uint8x16_t vreinterpretq_u8_p128 (poly128_t) - - * uint8x16_t vreinterpretq_u8_s64 (int64x2_t) - - * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t) - - * uint8x16_t vreinterpretq_u8_s8 (int8x16_t) - - * uint8x16_t vreinterpretq_u8_s16 (int16x8_t) - - * uint8x16_t vreinterpretq_u8_s32 (int32x4_t) - - * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t) - - * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t) - - * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t) - - * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t) - - * uint16x8_t vreinterpretq_u16_f32 (float32x4_t) - - * uint16x8_t vreinterpretq_u16_p64 (poly64x2_t) - - * uint16x8_t vreinterpretq_u16_p128 (poly128_t) - - * uint16x8_t vreinterpretq_u16_s64 (int64x2_t) - - * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t) - - * uint16x8_t vreinterpretq_u16_s8 (int8x16_t) - - * uint16x8_t vreinterpretq_u16_s16 (int16x8_t) - - * uint16x8_t vreinterpretq_u16_s32 (int32x4_t) - - * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t) - - * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t) - - * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t) - - * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t) - - * uint32x4_t vreinterpretq_u32_f32 (float32x4_t) - - * uint32x4_t vreinterpretq_u32_p64 (poly64x2_t) - - * uint32x4_t vreinterpretq_u32_p128 (poly128_t) - - * uint32x4_t vreinterpretq_u32_s64 (int64x2_t) - - * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t) - - * uint32x4_t vreinterpretq_u32_s8 (int8x16_t) - - * uint32x4_t vreinterpretq_u32_s16 (int16x8_t) - - * uint32x4_t vreinterpretq_u32_s32 (int32x4_t) - - * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t) - - * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t) - - * poly128_t vldrq_p128(poly128_t const *) - - * void vstrq_p128(poly128_t *, poly128_t) - - * uint64x1_t vceq_p64 (poly64x1_t, poly64x1_t) - - * uint64x1_t vtst_p64 (poly64x1_t, poly64x1_t) - - * uint32_t vsha1h_u32 (uint32_t) - _Form of expected instruction(s):_ 'sha1h.32 Q0, Q1' - - * uint32x4_t vsha1cq_u32 (uint32x4_t, uint32_t, uint32x4_t) - _Form of expected instruction(s):_ 'sha1c.32 Q0, Q1, Q2' - - * uint32x4_t vsha1pq_u32 (uint32x4_t, uint32_t, uint32x4_t) - _Form of expected instruction(s):_ 'sha1p.32 Q0, Q1, Q2' - - * uint32x4_t vsha1mq_u32 (uint32x4_t, uint32_t, uint32x4_t) - _Form of expected instruction(s):_ 'sha1m.32 Q0, Q1, Q2' - - * uint32x4_t vsha1su0q_u32 (uint32x4_t, uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'sha1su0.32 Q0, Q1, Q2' - - * uint32x4_t vsha1su1q_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'sha1su1.32 Q0, Q1, Q2' - - * uint32x4_t vsha256hq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'sha256h.32 Q0, Q1, Q2' - - * uint32x4_t vsha256h2q_u32 (uint32x4_t, uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'sha256h2.32 Q0, Q1, Q2' - - * uint32x4_t vsha256su0q_u32 (uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'sha256su0.32 Q0, Q1' - - * uint32x4_t vsha256su1q_u32 (uint32x4_t, uint32x4_t, uint32x4_t) - _Form of expected instruction(s):_ 'sha256su1.32 Q0, Q1, Q2' - - * poly128_t vmull_p64 (poly64_t a, poly64_t b) - _Form of expected instruction(s):_ 'vmull.p64 Q0, D1, D2' - - * poly128_t vmull_high_p64 (poly64x2_t a, poly64x2_t b) - _Form of expected instruction(s):_ 'vmull.p64 Q0, D1, D2' - - -File: gcc.info, Node: ARM ACLE Intrinsics, Next: AVR Built-in Functions, Prev: ARM NEON Intrinsics, Up: Target Builtins - -6.57.7 ARM ACLE Intrinsics --------------------------- - -These built-in intrinsics for the ARMv8-A CRC32 extension are available -when the '-march=armv8-a+crc' switch is used: - -6.57.7.1 CRC32 intrinsics -......................... - - * uint32_t __crc32b (uint32_t, uint8_t) - _Form of expected instruction(s):_ 'crc32b R0, R0, R0' - - * uint32_t __crc32h (uint32_t, uint16_t) - _Form of expected instruction(s):_ 'crc32h R0, R0, R0' - - * uint32_t __crc32w (uint32_t, uint32_t) - _Form of expected instruction(s):_ 'crc32w R0, R0, R0' - - * uint32_t __crc32d (uint32_t, uint64_t) - _Form of expected instruction(s):_ Two 'crc32w R0, R0, R0' - instructions for AArch32. One 'crc32w W0, W0, X0' instruction for - AArch64. - - * uint32_t __crc32cb (uint32_t, uint8_t) - _Form of expected instruction(s):_ 'crc32cb R0, R0, R0' - - * uint32_t __crc32ch (uint32_t, uint16_t) - _Form of expected instruction(s):_ 'crc32ch R0, R0, R0' - - * uint32_t __crc32cw (uint32_t, uint32_t) - _Form of expected instruction(s):_ 'crc32cw R0, R0, R0' - - * uint32_t __crc32cd (uint32_t, uint64_t) - _Form of expected instruction(s):_ Two 'crc32cw R0, R0, R0' - instructions for AArch32. One 'crc32cw W0, W0, X0' instruction for - AArch64. - - -File: gcc.info, Node: AVR Built-in Functions, Next: Blackfin Built-in Functions, Prev: ARM ACLE Intrinsics, Up: Target Builtins - -6.57.8 AVR Built-in Functions ------------------------------ - -For each built-in function for AVR, there is an equally named, uppercase -built-in macro defined. That way users can easily query if or if not a -specific built-in is implemented or not. For example, if -'__builtin_avr_nop' is available the macro '__BUILTIN_AVR_NOP' is -defined to '1' and undefined otherwise. - - The following built-in functions map to the respective machine -instruction, i.e. 'nop', 'sei', 'cli', 'sleep', 'wdr', 'swap', 'fmul', -'fmuls' resp. 'fmulsu'. The three 'fmul*' built-ins are implemented as -library call if no hardware multiplier is available. - - void __builtin_avr_nop (void) - void __builtin_avr_sei (void) - void __builtin_avr_cli (void) - void __builtin_avr_sleep (void) - void __builtin_avr_wdr (void) - unsigned char __builtin_avr_swap (unsigned char) - unsigned int __builtin_avr_fmul (unsigned char, unsigned char) - int __builtin_avr_fmuls (char, char) - int __builtin_avr_fmulsu (char, unsigned char) - - In order to delay execution for a specific number of cycles, GCC -implements - void __builtin_avr_delay_cycles (unsigned long ticks) - -'ticks' is the number of ticks to delay execution. Note that this -built-in does not take into account the effect of interrupts that might -increase delay time. 'ticks' must be a compile-time integer constant; -delays with a variable number of cycles are not supported. - - char __builtin_avr_flash_segment (const __memx void*) - -This built-in takes a byte address to the 24-bit *note address space: -AVR Named Address Spaces. '__memx' and returns the number of the flash -segment (the 64 KiB chunk) where the address points to. Counting starts -at '0'. If the address does not point to flash memory, return '-1'. - - unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val) - -Insert bits from BITS into VAL and return the resulting value. The -nibbles of MAP determine how the insertion is performed: Let X be the -N-th nibble of MAP - 1. If X is '0xf', then the N-th bit of VAL is returned unaltered. - - 2. If X is in the range 0...7, then the N-th result bit is set to the - X-th bit of BITS - - 3. If X is in the range 8...'0xe', then the N-th result bit is - undefined. - -One typical use case for this built-in is adjusting input and output -values to non-contiguous port layouts. Some examples: - - // same as val, bits is unused - __builtin_avr_insert_bits (0xffffffff, bits, val) - - // same as bits, val is unused - __builtin_avr_insert_bits (0x76543210, bits, val) - - // same as rotating bits by 4 - __builtin_avr_insert_bits (0x32107654, bits, 0) - - // high nibble of result is the high nibble of val - // low nibble of result is the low nibble of bits - __builtin_avr_insert_bits (0xffff3210, bits, val) - - // reverse the bit order of bits - __builtin_avr_insert_bits (0x01234567, bits, 0) - - -File: gcc.info, Node: Blackfin Built-in Functions, Next: FR-V Built-in Functions, Prev: AVR Built-in Functions, Up: Target Builtins - -6.57.9 Blackfin Built-in Functions ----------------------------------- - -Currently, there are two Blackfin-specific built-in functions. These -are used for generating 'CSYNC' and 'SSYNC' machine insns without using -inline assembly; by using these built-in functions the compiler can -automatically add workarounds for hardware errata involving these -instructions. These functions are named as follows: - - void __builtin_bfin_csync (void) - void __builtin_bfin_ssync (void) - - -File: gcc.info, Node: FR-V Built-in Functions, Next: X86 Built-in Functions, Prev: Blackfin Built-in Functions, Up: Target Builtins - -6.57.10 FR-V Built-in Functions -------------------------------- - -GCC provides many FR-V-specific built-in functions. In general, these -functions are intended to be compatible with those described by 'FR-V -Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'. The -two exceptions are '__MDUNPACKH' and '__MBTOHE', the GCC forms of which -pass 128-bit values by pointer rather than by value. - - Most of the functions are named after specific FR-V instructions. Such -functions are said to be "directly mapped" and are summarized here in -tabular form. - -* Menu: - -* Argument Types:: -* Directly-mapped Integer Functions:: -* Directly-mapped Media Functions:: -* Raw read/write Functions:: -* Other Built-in Functions:: - - -File: gcc.info, Node: Argument Types, Next: Directly-mapped Integer Functions, Up: FR-V Built-in Functions - -6.57.10.1 Argument Types -........................ - -The arguments to the built-in functions can be divided into three -groups: register numbers, compile-time constants and run-time values. -In order to make this classification clear at a glance, the arguments -and return values are given the following pseudo types: - -Pseudo type Real C type Constant? Description -'uh' 'unsigned short' No an unsigned halfword -'uw1' 'unsigned int' No an unsigned word -'sw1' 'int' No a signed word -'uw2' 'unsigned long long' No an unsigned doubleword -'sw2' 'long long' No a signed doubleword -'const' 'int' Yes an integer constant -'acc' 'int' Yes an ACC register number -'iacc' 'int' Yes an IACC register number - - These pseudo types are not defined by GCC, they are simply a notational -convenience used in this manual. - - Arguments of type 'uh', 'uw1', 'sw1', 'uw2' and 'sw2' are evaluated at -run time. They correspond to register operands in the underlying FR-V -instructions. - - 'const' arguments represent immediate operands in the underlying FR-V -instructions. They must be compile-time constants. - - 'acc' arguments are evaluated at compile time and specify the number of -an accumulator register. For example, an 'acc' argument of 2 selects -the ACC2 register. - - 'iacc' arguments are similar to 'acc' arguments but specify the number -of an IACC register. See *note Other Built-in Functions:: for more -details. - - -File: gcc.info, Node: Directly-mapped Integer Functions, Next: Directly-mapped Media Functions, Prev: Argument Types, Up: FR-V Built-in Functions - -6.57.10.2 Directly-mapped Integer Functions -........................................... - -The functions listed below map directly to FR-V I-type instructions. - -Function prototype Example usage Assembly output -'sw1 __ADDSS (sw1, sw1)' 'C = __ADDSS (A, B)' 'ADDSS A,B,C' -'sw1 __SCAN (sw1, sw1)' 'C = __SCAN (A, B)' 'SCAN A,B,C' -'sw1 __SCUTSS (sw1)' 'B = __SCUTSS (A)' 'SCUTSS A,B' -'sw1 __SLASS (sw1, sw1)' 'C = __SLASS (A, B)' 'SLASS A,B,C' -'void __SMASS (sw1, sw1)' '__SMASS (A, B)' 'SMASS A,B' -'void __SMSSS (sw1, sw1)' '__SMSSS (A, B)' 'SMSSS A,B' -'void __SMU (sw1, sw1)' '__SMU (A, B)' 'SMU A,B' -'sw2 __SMUL (sw1, sw1)' 'C = __SMUL (A, B)' 'SMUL A,B,C' -'sw1 __SUBSS (sw1, sw1)' 'C = __SUBSS (A, B)' 'SUBSS A,B,C' -'uw2 __UMUL (uw1, uw1)' 'C = __UMUL (A, B)' 'UMUL A,B,C' - - -File: gcc.info, Node: Directly-mapped Media Functions, Next: Raw read/write Functions, Prev: Directly-mapped Integer Functions, Up: FR-V Built-in Functions - -6.57.10.3 Directly-mapped Media Functions -......................................... - -The functions listed below map directly to FR-V M-type instructions. - -Function prototype Example usage Assembly output -'uw1 __MABSHS (sw1)' 'B = __MABSHS (A)' 'MABSHS A,B' -'void __MADDACCS (acc, acc)' '__MADDACCS (B, A)' 'MADDACCS A,B' -'sw1 __MADDHSS (sw1, sw1)' 'C = __MADDHSS (A, 'MADDHSS A,B,C' - B)' -'uw1 __MADDHUS (uw1, uw1)' 'C = __MADDHUS (A, 'MADDHUS A,B,C' - B)' -'uw1 __MAND (uw1, uw1)' 'C = __MAND (A, B)' 'MAND A,B,C' -'void __MASACCS (acc, acc)' '__MASACCS (B, A)' 'MASACCS A,B' -'uw1 __MAVEH (uw1, uw1)' 'C = __MAVEH (A, B)' 'MAVEH A,B,C' -'uw2 __MBTOH (uw1)' 'B = __MBTOH (A)' 'MBTOH A,B' -'void __MBTOHE (uw1 *, uw1)' '__MBTOHE (&B, A)' 'MBTOHE A,B' -'void __MCLRACC (acc)' '__MCLRACC (A)' 'MCLRACC A' -'void __MCLRACCA (void)' '__MCLRACCA ()' 'MCLRACCA' -'uw1 __Mcop1 (uw1, uw1)' 'C = __Mcop1 (A, B)' 'Mcop1 A,B,C' -'uw1 __Mcop2 (uw1, uw1)' 'C = __Mcop2 (A, B)' 'Mcop2 A,B,C' -'uw1 __MCPLHI (uw2, const)' 'C = __MCPLHI (A, B)' 'MCPLHI A,#B,C' -'uw1 __MCPLI (uw2, const)' 'C = __MCPLI (A, B)' 'MCPLI A,#B,C' -'void __MCPXIS (acc, sw1, '__MCPXIS (C, A, B)' 'MCPXIS A,B,C' -sw1)' -'void __MCPXIU (acc, uw1, '__MCPXIU (C, A, B)' 'MCPXIU A,B,C' -uw1)' -'void __MCPXRS (acc, sw1, '__MCPXRS (C, A, B)' 'MCPXRS A,B,C' -sw1)' -'void __MCPXRU (acc, uw1, '__MCPXRU (C, A, B)' 'MCPXRU A,B,C' -uw1)' -'uw1 __MCUT (acc, uw1)' 'C = __MCUT (A, B)' 'MCUT A,B,C' -'uw1 __MCUTSS (acc, sw1)' 'C = __MCUTSS (A, B)' 'MCUTSS A,B,C' -'void __MDADDACCS (acc, acc)' '__MDADDACCS (B, A)' 'MDADDACCS A,B' -'void __MDASACCS (acc, acc)' '__MDASACCS (B, A)' 'MDASACCS A,B' -'uw2 __MDCUTSSI (acc, const)' 'C = __MDCUTSSI (A, 'MDCUTSSI - B)' A,#B,C' -'uw2 __MDPACKH (uw2, uw2)' 'C = __MDPACKH (A, 'MDPACKH A,B,C' - B)' -'uw2 __MDROTLI (uw2, const)' 'C = __MDROTLI (A, 'MDROTLI - B)' A,#B,C' -'void __MDSUBACCS (acc, acc)' '__MDSUBACCS (B, A)' 'MDSUBACCS A,B' -'void __MDUNPACKH (uw1 *, '__MDUNPACKH (&B, A)' 'MDUNPACKH A,B' -uw2)' -'uw2 __MEXPDHD (uw1, const)' 'C = __MEXPDHD (A, 'MEXPDHD - B)' A,#B,C' -'uw1 __MEXPDHW (uw1, const)' 'C = __MEXPDHW (A, 'MEXPDHW - B)' A,#B,C' -'uw1 __MHDSETH (uw1, const)' 'C = __MHDSETH (A, 'MHDSETH - B)' A,#B,C' -'sw1 __MHDSETS (const)' 'B = __MHDSETS (A)' 'MHDSETS #A,B' -'uw1 __MHSETHIH (uw1, const)' 'B = __MHSETHIH (B, 'MHSETHIH #A,B' - A)' -'sw1 __MHSETHIS (sw1, const)' 'B = __MHSETHIS (B, 'MHSETHIS #A,B' - A)' -'uw1 __MHSETLOH (uw1, const)' 'B = __MHSETLOH (B, 'MHSETLOH #A,B' - A)' -'sw1 __MHSETLOS (sw1, const)' 'B = __MHSETLOS (B, 'MHSETLOS #A,B' - A)' -'uw1 __MHTOB (uw2)' 'B = __MHTOB (A)' 'MHTOB A,B' -'void __MMACHS (acc, sw1, '__MMACHS (C, A, B)' 'MMACHS A,B,C' -sw1)' -'void __MMACHU (acc, uw1, '__MMACHU (C, A, B)' 'MMACHU A,B,C' -uw1)' -'void __MMRDHS (acc, sw1, '__MMRDHS (C, A, B)' 'MMRDHS A,B,C' -sw1)' -'void __MMRDHU (acc, uw1, '__MMRDHU (C, A, B)' 'MMRDHU A,B,C' -uw1)' -'void __MMULHS (acc, sw1, '__MMULHS (C, A, B)' 'MMULHS A,B,C' -sw1)' -'void __MMULHU (acc, uw1, '__MMULHU (C, A, B)' 'MMULHU A,B,C' -uw1)' -'void __MMULXHS (acc, sw1, '__MMULXHS (C, A, B)' 'MMULXHS A,B,C' -sw1)' -'void __MMULXHU (acc, uw1, '__MMULXHU (C, A, B)' 'MMULXHU A,B,C' -uw1)' -'uw1 __MNOT (uw1)' 'B = __MNOT (A)' 'MNOT A,B' -'uw1 __MOR (uw1, uw1)' 'C = __MOR (A, B)' 'MOR A,B,C' -'uw1 __MPACKH (uh, uh)' 'C = __MPACKH (A, B)' 'MPACKH A,B,C' -'sw2 __MQADDHSS (sw2, sw2)' 'C = __MQADDHSS (A, 'MQADDHSS - B)' A,B,C' -'uw2 __MQADDHUS (uw2, uw2)' 'C = __MQADDHUS (A, 'MQADDHUS - B)' A,B,C' -'void __MQCPXIS (acc, sw2, '__MQCPXIS (C, A, B)' 'MQCPXIS A,B,C' -sw2)' -'void __MQCPXIU (acc, uw2, '__MQCPXIU (C, A, B)' 'MQCPXIU A,B,C' -uw2)' -'void __MQCPXRS (acc, sw2, '__MQCPXRS (C, A, B)' 'MQCPXRS A,B,C' -sw2)' -'void __MQCPXRU (acc, uw2, '__MQCPXRU (C, A, B)' 'MQCPXRU A,B,C' -uw2)' -'sw2 __MQLCLRHS (sw2, sw2)' 'C = __MQLCLRHS (A, 'MQLCLRHS - B)' A,B,C' -'sw2 __MQLMTHS (sw2, sw2)' 'C = __MQLMTHS (A, 'MQLMTHS A,B,C' - B)' -'void __MQMACHS (acc, sw2, '__MQMACHS (C, A, B)' 'MQMACHS A,B,C' -sw2)' -'void __MQMACHU (acc, uw2, '__MQMACHU (C, A, B)' 'MQMACHU A,B,C' -uw2)' -'void __MQMACXHS (acc, sw2, '__MQMACXHS (C, A, 'MQMACXHS -sw2)' B)' A,B,C' -'void __MQMULHS (acc, sw2, '__MQMULHS (C, A, B)' 'MQMULHS A,B,C' -sw2)' -'void __MQMULHU (acc, uw2, '__MQMULHU (C, A, B)' 'MQMULHU A,B,C' -uw2)' -'void __MQMULXHS (acc, sw2, '__MQMULXHS (C, A, 'MQMULXHS -sw2)' B)' A,B,C' -'void __MQMULXHU (acc, uw2, '__MQMULXHU (C, A, 'MQMULXHU -uw2)' B)' A,B,C' -'sw2 __MQSATHS (sw2, sw2)' 'C = __MQSATHS (A, 'MQSATHS A,B,C' - B)' -'uw2 __MQSLLHI (uw2, int)' 'C = __MQSLLHI (A, 'MQSLLHI A,B,C' - B)' -'sw2 __MQSRAHI (sw2, int)' 'C = __MQSRAHI (A, 'MQSRAHI A,B,C' - B)' -'sw2 __MQSUBHSS (sw2, sw2)' 'C = __MQSUBHSS (A, 'MQSUBHSS - B)' A,B,C' -'uw2 __MQSUBHUS (uw2, uw2)' 'C = __MQSUBHUS (A, 'MQSUBHUS - B)' A,B,C' -'void __MQXMACHS (acc, sw2, '__MQXMACHS (C, A, 'MQXMACHS -sw2)' B)' A,B,C' -'void __MQXMACXHS (acc, sw2, '__MQXMACXHS (C, A, 'MQXMACXHS -sw2)' B)' A,B,C' -'uw1 __MRDACC (acc)' 'B = __MRDACC (A)' 'MRDACC A,B' -'uw1 __MRDACCG (acc)' 'B = __MRDACCG (A)' 'MRDACCG A,B' -'uw1 __MROTLI (uw1, const)' 'C = __MROTLI (A, B)' 'MROTLI A,#B,C' -'uw1 __MROTRI (uw1, const)' 'C = __MROTRI (A, B)' 'MROTRI A,#B,C' -'sw1 __MSATHS (sw1, sw1)' 'C = __MSATHS (A, B)' 'MSATHS A,B,C' -'uw1 __MSATHU (uw1, uw1)' 'C = __MSATHU (A, B)' 'MSATHU A,B,C' -'uw1 __MSLLHI (uw1, const)' 'C = __MSLLHI (A, B)' 'MSLLHI A,#B,C' -'sw1 __MSRAHI (sw1, const)' 'C = __MSRAHI (A, B)' 'MSRAHI A,#B,C' -'uw1 __MSRLHI (uw1, const)' 'C = __MSRLHI (A, B)' 'MSRLHI A,#B,C' -'void __MSUBACCS (acc, acc)' '__MSUBACCS (B, A)' 'MSUBACCS A,B' -'sw1 __MSUBHSS (sw1, sw1)' 'C = __MSUBHSS (A, 'MSUBHSS A,B,C' - B)' -'uw1 __MSUBHUS (uw1, uw1)' 'C = __MSUBHUS (A, 'MSUBHUS A,B,C' - B)' -'void __MTRAP (void)' '__MTRAP ()' 'MTRAP' -'uw2 __MUNPACKH (uw1)' 'B = __MUNPACKH (A)' 'MUNPACKH A,B' -'uw1 __MWCUT (uw2, uw1)' 'C = __MWCUT (A, B)' 'MWCUT A,B,C' -'void __MWTACC (acc, uw1)' '__MWTACC (B, A)' 'MWTACC A,B' -'void __MWTACCG (acc, uw1)' '__MWTACCG (B, A)' 'MWTACCG A,B' -'uw1 __MXOR (uw1, uw1)' 'C = __MXOR (A, B)' 'MXOR A,B,C' - - -File: gcc.info, Node: Raw read/write Functions, Next: Other Built-in Functions, Prev: Directly-mapped Media Functions, Up: FR-V Built-in Functions - -6.57.10.4 Raw read/write Functions -.................................. - -This sections describes built-in functions related to read and write -instructions to access memory. These functions generate 'membar' -instructions to flush the I/O load and stores where appropriate, as -described in Fujitsu's manual described above. - -'unsigned char __builtin_read8 (void *DATA)' -'unsigned short __builtin_read16 (void *DATA)' -'unsigned long __builtin_read32 (void *DATA)' -'unsigned long long __builtin_read64 (void *DATA)' - -'void __builtin_write8 (void *DATA, unsigned char DATUM)' -'void __builtin_write16 (void *DATA, unsigned short DATUM)' -'void __builtin_write32 (void *DATA, unsigned long DATUM)' -'void __builtin_write64 (void *DATA, unsigned long long DATUM)' - - -File: gcc.info, Node: Other Built-in Functions, Prev: Raw read/write Functions, Up: FR-V Built-in Functions - -6.57.10.5 Other Built-in Functions -.................................. - -This section describes built-in functions that are not named after a -specific FR-V instruction. - -'sw2 __IACCreadll (iacc REG)' - Return the full 64-bit value of IACC0. The REG argument is - reserved for future expansion and must be 0. - -'sw1 __IACCreadl (iacc REG)' - Return the value of IACC0H if REG is 0 and IACC0L if REG is 1. - Other values of REG are rejected as invalid. - -'void __IACCsetll (iacc REG, sw2 X)' - Set the full 64-bit value of IACC0 to X. The REG argument is - reserved for future expansion and must be 0. - -'void __IACCsetl (iacc REG, sw1 X)' - Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1. Other - values of REG are rejected as invalid. - -'void __data_prefetch0 (const void *X)' - Use the 'dcpl' instruction to load the contents of address X into - the data cache. - -'void __data_prefetch (const void *X)' - Use the 'nldub' instruction to load the contents of address X into - the data cache. The instruction is issued in slot I1. - - -File: gcc.info, Node: X86 Built-in Functions, Next: X86 transactional memory intrinsics, Prev: FR-V Built-in Functions, Up: Target Builtins - -6.57.11 X86 Built-in Functions ------------------------------- - -These built-in functions are available for the i386 and x86-64 family of -computers, depending on the command-line switches used. - - If you specify command-line switches such as '-msse', the compiler -could use the extended instruction sets even if the built-ins are not -used explicitly in the program. For this reason, applications that -perform run-time CPU detection must compile separate files for each -supported architecture, using the appropriate flags. In particular, the -file containing the CPU detection code should be compiled without these -options. - - The following machine modes are available for use with MMX built-in -functions (*note Vector Extensions::): 'V2SI' for a vector of two 32-bit -integers, 'V4HI' for a vector of four 16-bit integers, and 'V8QI' for a -vector of eight 8-bit integers. Some of the built-in functions operate -on MMX registers as a whole 64-bit entity, these use 'V1DI' as their -mode. - - If 3DNow! extensions are enabled, 'V2SF' is used as a mode for a vector -of two 32-bit floating-point values. - - If SSE extensions are enabled, 'V4SF' is used for a vector of four -32-bit floating-point values. Some instructions use a vector of four -32-bit integers, these use 'V4SI'. Finally, some instructions operate -on an entire vector register, interpreting it as a 128-bit integer, -these use mode 'TI'. - - In 64-bit mode, the x86-64 family of processors uses additional -built-in functions for efficient use of 'TF' ('__float128') 128-bit -floating point and 'TC' 128-bit complex floating-point values. - - The following floating-point built-in functions are available in 64-bit -mode. All of them implement the function that is part of the name. - - __float128 __builtin_fabsq (__float128) - __float128 __builtin_copysignq (__float128, __float128) - - The following built-in function is always available. - -'void __builtin_ia32_pause (void)' - Generates the 'pause' machine instruction with a compiler memory - barrier. - - The following floating-point built-in functions are made available in -the 64-bit mode. - -'__float128 __builtin_infq (void)' - Similar to '__builtin_inf', except the return type is '__float128'. - -'__float128 __builtin_huge_valq (void)' - Similar to '__builtin_huge_val', except the return type is - '__float128'. - - The following built-in functions are always available and can be used -to check the target platform type. - - -- Built-in Function: void __builtin_cpu_init (void) - This function runs the CPU detection code to check the type of CPU - and the features supported. This built-in function needs to be - invoked along with the built-in functions to check CPU type and - features, '__builtin_cpu_is' and '__builtin_cpu_supports', only - when used in a function that is executed before any constructors - are called. The CPU detection code is automatically executed in a - very high priority constructor. - - For example, this function has to be used in 'ifunc' resolvers that - check for CPU type using the built-in functions '__builtin_cpu_is' - and '__builtin_cpu_supports', or in constructors on targets that - don't support constructor priority. - - static void (*resolve_memcpy (void)) (void) - { - // ifunc resolvers fire before constructors, explicitly call the init - // function. - __builtin_cpu_init (); - if (__builtin_cpu_supports ("ssse3")) - return ssse3_memcpy; // super fast memcpy with ssse3 instructions. - else - return default_memcpy; - } - - void *memcpy (void *, const void *, size_t) - __attribute__ ((ifunc ("resolve_memcpy"))); - - -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME) - This function returns a positive integer if the run-time CPU is of - type CPUNAME and returns '0' otherwise. The following CPU names - can be detected: - - 'intel' - Intel CPU. - - 'atom' - Intel Atom CPU. - - 'core2' - Intel Core 2 CPU. - - 'corei7' - Intel Core i7 CPU. - - 'nehalem' - Intel Core i7 Nehalem CPU. - - 'westmere' - Intel Core i7 Westmere CPU. - - 'sandybridge' - Intel Core i7 Sandy Bridge CPU. - - 'amd' - AMD CPU. - - 'amdfam10h' - AMD Family 10h CPU. - - 'barcelona' - AMD Family 10h Barcelona CPU. - - 'shanghai' - AMD Family 10h Shanghai CPU. - - 'istanbul' - AMD Family 10h Istanbul CPU. - - 'btver1' - AMD Family 14h CPU. - - 'amdfam15h' - AMD Family 15h CPU. - - 'bdver1' - AMD Family 15h Bulldozer version 1. - - 'bdver2' - AMD Family 15h Bulldozer version 2. - - 'bdver3' - AMD Family 15h Bulldozer version 3. - - 'bdver4' - AMD Family 15h Bulldozer version 4. - - 'btver2' - AMD Family 16h CPU. - - Here is an example: - if (__builtin_cpu_is ("corei7")) - { - do_corei7 (); // Core i7 specific implementation. - } - else - { - do_generic (); // Generic implementation. - } - - -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE) - This function returns a positive integer if the run-time CPU - supports FEATURE and returns '0' otherwise. The following features - can be detected: - - 'cmov' - CMOV instruction. - 'mmx' - MMX instructions. - 'popcnt' - POPCNT instruction. - 'sse' - SSE instructions. - 'sse2' - SSE2 instructions. - 'sse3' - SSE3 instructions. - 'ssse3' - SSSE3 instructions. - 'sse4.1' - SSE4.1 instructions. - 'sse4.2' - SSE4.2 instructions. - 'avx' - AVX instructions. - 'avx2' - AVX2 instructions. - - Here is an example: - if (__builtin_cpu_supports ("popcnt")) - { - asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc"); - } - else - { - count = generic_countbits (n); //generic implementation. - } - - The following built-in functions are made available by '-mmmx'. All of -them generate the machine instruction that is part of the name. - - v8qi __builtin_ia32_paddb (v8qi, v8qi) - v4hi __builtin_ia32_paddw (v4hi, v4hi) - v2si __builtin_ia32_paddd (v2si, v2si) - v8qi __builtin_ia32_psubb (v8qi, v8qi) - v4hi __builtin_ia32_psubw (v4hi, v4hi) - v2si __builtin_ia32_psubd (v2si, v2si) - v8qi __builtin_ia32_paddsb (v8qi, v8qi) - v4hi __builtin_ia32_paddsw (v4hi, v4hi) - v8qi __builtin_ia32_psubsb (v8qi, v8qi) - v4hi __builtin_ia32_psubsw (v4hi, v4hi) - v8qi __builtin_ia32_paddusb (v8qi, v8qi) - v4hi __builtin_ia32_paddusw (v4hi, v4hi) - v8qi __builtin_ia32_psubusb (v8qi, v8qi) - v4hi __builtin_ia32_psubusw (v4hi, v4hi) - v4hi __builtin_ia32_pmullw (v4hi, v4hi) - v4hi __builtin_ia32_pmulhw (v4hi, v4hi) - di __builtin_ia32_pand (di, di) - di __builtin_ia32_pandn (di,di) - di __builtin_ia32_por (di, di) - di __builtin_ia32_pxor (di, di) - v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi) - v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi) - v2si __builtin_ia32_pcmpeqd (v2si, v2si) - v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi) - v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi) - v2si __builtin_ia32_pcmpgtd (v2si, v2si) - v8qi __builtin_ia32_punpckhbw (v8qi, v8qi) - v4hi __builtin_ia32_punpckhwd (v4hi, v4hi) - v2si __builtin_ia32_punpckhdq (v2si, v2si) - v8qi __builtin_ia32_punpcklbw (v8qi, v8qi) - v4hi __builtin_ia32_punpcklwd (v4hi, v4hi) - v2si __builtin_ia32_punpckldq (v2si, v2si) - v8qi __builtin_ia32_packsswb (v4hi, v4hi) - v4hi __builtin_ia32_packssdw (v2si, v2si) - v8qi __builtin_ia32_packuswb (v4hi, v4hi) - - v4hi __builtin_ia32_psllw (v4hi, v4hi) - v2si __builtin_ia32_pslld (v2si, v2si) - v1di __builtin_ia32_psllq (v1di, v1di) - v4hi __builtin_ia32_psrlw (v4hi, v4hi) - v2si __builtin_ia32_psrld (v2si, v2si) - v1di __builtin_ia32_psrlq (v1di, v1di) - v4hi __builtin_ia32_psraw (v4hi, v4hi) - v2si __builtin_ia32_psrad (v2si, v2si) - v4hi __builtin_ia32_psllwi (v4hi, int) - v2si __builtin_ia32_pslldi (v2si, int) - v1di __builtin_ia32_psllqi (v1di, int) - v4hi __builtin_ia32_psrlwi (v4hi, int) - v2si __builtin_ia32_psrldi (v2si, int) - v1di __builtin_ia32_psrlqi (v1di, int) - v4hi __builtin_ia32_psrawi (v4hi, int) - v2si __builtin_ia32_psradi (v2si, int) - - The following built-in functions are made available either with -'-msse', or with a combination of '-m3dnow' and '-march=athlon'. All of -them generate the machine instruction that is part of the name. - - v4hi __builtin_ia32_pmulhuw (v4hi, v4hi) - v8qi __builtin_ia32_pavgb (v8qi, v8qi) - v4hi __builtin_ia32_pavgw (v4hi, v4hi) - v1di __builtin_ia32_psadbw (v8qi, v8qi) - v8qi __builtin_ia32_pmaxub (v8qi, v8qi) - v4hi __builtin_ia32_pmaxsw (v4hi, v4hi) - v8qi __builtin_ia32_pminub (v8qi, v8qi) - v4hi __builtin_ia32_pminsw (v4hi, v4hi) - int __builtin_ia32_pmovmskb (v8qi) - void __builtin_ia32_maskmovq (v8qi, v8qi, char *) - void __builtin_ia32_movntq (di *, di) - void __builtin_ia32_sfence (void) - - The following built-in functions are available when '-msse' is used. -All of them generate the machine instruction that is part of the name. - - int __builtin_ia32_comieq (v4sf, v4sf) - int __builtin_ia32_comineq (v4sf, v4sf) - int __builtin_ia32_comilt (v4sf, v4sf) - int __builtin_ia32_comile (v4sf, v4sf) - int __builtin_ia32_comigt (v4sf, v4sf) - int __builtin_ia32_comige (v4sf, v4sf) - int __builtin_ia32_ucomieq (v4sf, v4sf) - int __builtin_ia32_ucomineq (v4sf, v4sf) - int __builtin_ia32_ucomilt (v4sf, v4sf) - int __builtin_ia32_ucomile (v4sf, v4sf) - int __builtin_ia32_ucomigt (v4sf, v4sf) - int __builtin_ia32_ucomige (v4sf, v4sf) - v4sf __builtin_ia32_addps (v4sf, v4sf) - v4sf __builtin_ia32_subps (v4sf, v4sf) - v4sf __builtin_ia32_mulps (v4sf, v4sf) - v4sf __builtin_ia32_divps (v4sf, v4sf) - v4sf __builtin_ia32_addss (v4sf, v4sf) - v4sf __builtin_ia32_subss (v4sf, v4sf) - v4sf __builtin_ia32_mulss (v4sf, v4sf) - v4sf __builtin_ia32_divss (v4sf, v4sf) - v4sf __builtin_ia32_cmpeqps (v4sf, v4sf) - v4sf __builtin_ia32_cmpltps (v4sf, v4sf) - v4sf __builtin_ia32_cmpleps (v4sf, v4sf) - v4sf __builtin_ia32_cmpgtps (v4sf, v4sf) - v4sf __builtin_ia32_cmpgeps (v4sf, v4sf) - v4sf __builtin_ia32_cmpunordps (v4sf, v4sf) - v4sf __builtin_ia32_cmpneqps (v4sf, v4sf) - v4sf __builtin_ia32_cmpnltps (v4sf, v4sf) - v4sf __builtin_ia32_cmpnleps (v4sf, v4sf) - v4sf __builtin_ia32_cmpngtps (v4sf, v4sf) - v4sf __builtin_ia32_cmpngeps (v4sf, v4sf) - v4sf __builtin_ia32_cmpordps (v4sf, v4sf) - v4sf __builtin_ia32_cmpeqss (v4sf, v4sf) - v4sf __builtin_ia32_cmpltss (v4sf, v4sf) - v4sf __builtin_ia32_cmpless (v4sf, v4sf) - v4sf __builtin_ia32_cmpunordss (v4sf, v4sf) - v4sf __builtin_ia32_cmpneqss (v4sf, v4sf) - v4sf __builtin_ia32_cmpnltss (v4sf, v4sf) - v4sf __builtin_ia32_cmpnless (v4sf, v4sf) - v4sf __builtin_ia32_cmpordss (v4sf, v4sf) - v4sf __builtin_ia32_maxps (v4sf, v4sf) - v4sf __builtin_ia32_maxss (v4sf, v4sf) - v4sf __builtin_ia32_minps (v4sf, v4sf) - v4sf __builtin_ia32_minss (v4sf, v4sf) - v4sf __builtin_ia32_andps (v4sf, v4sf) - v4sf __builtin_ia32_andnps (v4sf, v4sf) - v4sf __builtin_ia32_orps (v4sf, v4sf) - v4sf __builtin_ia32_xorps (v4sf, v4sf) - v4sf __builtin_ia32_movss (v4sf, v4sf) - v4sf __builtin_ia32_movhlps (v4sf, v4sf) - v4sf __builtin_ia32_movlhps (v4sf, v4sf) - v4sf __builtin_ia32_unpckhps (v4sf, v4sf) - v4sf __builtin_ia32_unpcklps (v4sf, v4sf) - v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si) - v4sf __builtin_ia32_cvtsi2ss (v4sf, int) - v2si __builtin_ia32_cvtps2pi (v4sf) - int __builtin_ia32_cvtss2si (v4sf) - v2si __builtin_ia32_cvttps2pi (v4sf) - int __builtin_ia32_cvttss2si (v4sf) - v4sf __builtin_ia32_rcpps (v4sf) - v4sf __builtin_ia32_rsqrtps (v4sf) - v4sf __builtin_ia32_sqrtps (v4sf) - v4sf __builtin_ia32_rcpss (v4sf) - v4sf __builtin_ia32_rsqrtss (v4sf) - v4sf __builtin_ia32_sqrtss (v4sf) - v4sf __builtin_ia32_shufps (v4sf, v4sf, int) - void __builtin_ia32_movntps (float *, v4sf) - int __builtin_ia32_movmskps (v4sf) - - The following built-in functions are available when '-msse' is used. - -'v4sf __builtin_ia32_loadups (float *)' - Generates the 'movups' machine instruction as a load from memory. -'void __builtin_ia32_storeups (float *, v4sf)' - Generates the 'movups' machine instruction as a store to memory. -'v4sf __builtin_ia32_loadss (float *)' - Generates the 'movss' machine instruction as a load from memory. -'v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)' - Generates the 'movhps' machine instruction as a load from memory. -'v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)' - Generates the 'movlps' machine instruction as a load from memory -'void __builtin_ia32_storehps (v2sf *, v4sf)' - Generates the 'movhps' machine instruction as a store to memory. -'void __builtin_ia32_storelps (v2sf *, v4sf)' - Generates the 'movlps' machine instruction as a store to memory. - - The following built-in functions are available when '-msse2' is used. -All of them generate the machine instruction that is part of the name. - - int __builtin_ia32_comisdeq (v2df, v2df) - int __builtin_ia32_comisdlt (v2df, v2df) - int __builtin_ia32_comisdle (v2df, v2df) - int __builtin_ia32_comisdgt (v2df, v2df) - int __builtin_ia32_comisdge (v2df, v2df) - int __builtin_ia32_comisdneq (v2df, v2df) - int __builtin_ia32_ucomisdeq (v2df, v2df) - int __builtin_ia32_ucomisdlt (v2df, v2df) - int __builtin_ia32_ucomisdle (v2df, v2df) - int __builtin_ia32_ucomisdgt (v2df, v2df) - int __builtin_ia32_ucomisdge (v2df, v2df) - int __builtin_ia32_ucomisdneq (v2df, v2df) - v2df __builtin_ia32_cmpeqpd (v2df, v2df) - v2df __builtin_ia32_cmpltpd (v2df, v2df) - v2df __builtin_ia32_cmplepd (v2df, v2df) - v2df __builtin_ia32_cmpgtpd (v2df, v2df) - v2df __builtin_ia32_cmpgepd (v2df, v2df) - v2df __builtin_ia32_cmpunordpd (v2df, v2df) - v2df __builtin_ia32_cmpneqpd (v2df, v2df) - v2df __builtin_ia32_cmpnltpd (v2df, v2df) - v2df __builtin_ia32_cmpnlepd (v2df, v2df) - v2df __builtin_ia32_cmpngtpd (v2df, v2df) - v2df __builtin_ia32_cmpngepd (v2df, v2df) - v2df __builtin_ia32_cmpordpd (v2df, v2df) - v2df __builtin_ia32_cmpeqsd (v2df, v2df) - v2df __builtin_ia32_cmpltsd (v2df, v2df) - v2df __builtin_ia32_cmplesd (v2df, v2df) - v2df __builtin_ia32_cmpunordsd (v2df, v2df) - v2df __builtin_ia32_cmpneqsd (v2df, v2df) - v2df __builtin_ia32_cmpnltsd (v2df, v2df) - v2df __builtin_ia32_cmpnlesd (v2df, v2df) - v2df __builtin_ia32_cmpordsd (v2df, v2df) - v2di __builtin_ia32_paddq (v2di, v2di) - v2di __builtin_ia32_psubq (v2di, v2di) - v2df __builtin_ia32_addpd (v2df, v2df) - v2df __builtin_ia32_subpd (v2df, v2df) - v2df __builtin_ia32_mulpd (v2df, v2df) - v2df __builtin_ia32_divpd (v2df, v2df) - v2df __builtin_ia32_addsd (v2df, v2df) - v2df __builtin_ia32_subsd (v2df, v2df) - v2df __builtin_ia32_mulsd (v2df, v2df) - v2df __builtin_ia32_divsd (v2df, v2df) - v2df __builtin_ia32_minpd (v2df, v2df) - v2df __builtin_ia32_maxpd (v2df, v2df) - v2df __builtin_ia32_minsd (v2df, v2df) - v2df __builtin_ia32_maxsd (v2df, v2df) - v2df __builtin_ia32_andpd (v2df, v2df) - v2df __builtin_ia32_andnpd (v2df, v2df) - v2df __builtin_ia32_orpd (v2df, v2df) - v2df __builtin_ia32_xorpd (v2df, v2df) - v2df __builtin_ia32_movsd (v2df, v2df) - v2df __builtin_ia32_unpckhpd (v2df, v2df) - v2df __builtin_ia32_unpcklpd (v2df, v2df) - v16qi __builtin_ia32_paddb128 (v16qi, v16qi) - v8hi __builtin_ia32_paddw128 (v8hi, v8hi) - v4si __builtin_ia32_paddd128 (v4si, v4si) - v2di __builtin_ia32_paddq128 (v2di, v2di) - v16qi __builtin_ia32_psubb128 (v16qi, v16qi) - v8hi __builtin_ia32_psubw128 (v8hi, v8hi) - v4si __builtin_ia32_psubd128 (v4si, v4si) - v2di __builtin_ia32_psubq128 (v2di, v2di) - v8hi __builtin_ia32_pmullw128 (v8hi, v8hi) - v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi) - v2di __builtin_ia32_pand128 (v2di, v2di) - v2di __builtin_ia32_pandn128 (v2di, v2di) - v2di __builtin_ia32_por128 (v2di, v2di) - v2di __builtin_ia32_pxor128 (v2di, v2di) - v16qi __builtin_ia32_pavgb128 (v16qi, v16qi) - v8hi __builtin_ia32_pavgw128 (v8hi, v8hi) - v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi) - v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi) - v4si __builtin_ia32_pcmpeqd128 (v4si, v4si) - v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi) - v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi) - v4si __builtin_ia32_pcmpgtd128 (v4si, v4si) - v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi) - v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi) - v16qi __builtin_ia32_pminub128 (v16qi, v16qi) - v8hi __builtin_ia32_pminsw128 (v8hi, v8hi) - v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi) - v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi) - v4si __builtin_ia32_punpckhdq128 (v4si, v4si) - v2di __builtin_ia32_punpckhqdq128 (v2di, v2di) - v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi) - v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi) - v4si __builtin_ia32_punpckldq128 (v4si, v4si) - v2di __builtin_ia32_punpcklqdq128 (v2di, v2di) - v16qi __builtin_ia32_packsswb128 (v8hi, v8hi) - v8hi __builtin_ia32_packssdw128 (v4si, v4si) - v16qi __builtin_ia32_packuswb128 (v8hi, v8hi) - v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi) - void __builtin_ia32_maskmovdqu (v16qi, v16qi) - v2df __builtin_ia32_loadupd (double *) - void __builtin_ia32_storeupd (double *, v2df) - v2df __builtin_ia32_loadhpd (v2df, double const *) - v2df __builtin_ia32_loadlpd (v2df, double const *) - int __builtin_ia32_movmskpd (v2df) - int __builtin_ia32_pmovmskb128 (v16qi) - void __builtin_ia32_movnti (int *, int) - void __builtin_ia32_movnti64 (long long int *, long long int) - void __builtin_ia32_movntpd (double *, v2df) - void __builtin_ia32_movntdq (v2df *, v2df) - v4si __builtin_ia32_pshufd (v4si, int) - v8hi __builtin_ia32_pshuflw (v8hi, int) - v8hi __builtin_ia32_pshufhw (v8hi, int) - v2di __builtin_ia32_psadbw128 (v16qi, v16qi) - v2df __builtin_ia32_sqrtpd (v2df) - v2df __builtin_ia32_sqrtsd (v2df) - v2df __builtin_ia32_shufpd (v2df, v2df, int) - v2df __builtin_ia32_cvtdq2pd (v4si) - v4sf __builtin_ia32_cvtdq2ps (v4si) - v4si __builtin_ia32_cvtpd2dq (v2df) - v2si __builtin_ia32_cvtpd2pi (v2df) - v4sf __builtin_ia32_cvtpd2ps (v2df) - v4si __builtin_ia32_cvttpd2dq (v2df) - v2si __builtin_ia32_cvttpd2pi (v2df) - v2df __builtin_ia32_cvtpi2pd (v2si) - int __builtin_ia32_cvtsd2si (v2df) - int __builtin_ia32_cvttsd2si (v2df) - long long __builtin_ia32_cvtsd2si64 (v2df) - long long __builtin_ia32_cvttsd2si64 (v2df) - v4si __builtin_ia32_cvtps2dq (v4sf) - v2df __builtin_ia32_cvtps2pd (v4sf) - v4si __builtin_ia32_cvttps2dq (v4sf) - v2df __builtin_ia32_cvtsi2sd (v2df, int) - v2df __builtin_ia32_cvtsi642sd (v2df, long long) - v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df) - v2df __builtin_ia32_cvtss2sd (v2df, v4sf) - void __builtin_ia32_clflush (const void *) - void __builtin_ia32_lfence (void) - void __builtin_ia32_mfence (void) - v16qi __builtin_ia32_loaddqu (const char *) - void __builtin_ia32_storedqu (char *, v16qi) - v1di __builtin_ia32_pmuludq (v2si, v2si) - v2di __builtin_ia32_pmuludq128 (v4si, v4si) - v8hi __builtin_ia32_psllw128 (v8hi, v8hi) - v4si __builtin_ia32_pslld128 (v4si, v4si) - v2di __builtin_ia32_psllq128 (v2di, v2di) - v8hi __builtin_ia32_psrlw128 (v8hi, v8hi) - v4si __builtin_ia32_psrld128 (v4si, v4si) - v2di __builtin_ia32_psrlq128 (v2di, v2di) - v8hi __builtin_ia32_psraw128 (v8hi, v8hi) - v4si __builtin_ia32_psrad128 (v4si, v4si) - v2di __builtin_ia32_pslldqi128 (v2di, int) - v8hi __builtin_ia32_psllwi128 (v8hi, int) - v4si __builtin_ia32_pslldi128 (v4si, int) - v2di __builtin_ia32_psllqi128 (v2di, int) - v2di __builtin_ia32_psrldqi128 (v2di, int) - v8hi __builtin_ia32_psrlwi128 (v8hi, int) - v4si __builtin_ia32_psrldi128 (v4si, int) - v2di __builtin_ia32_psrlqi128 (v2di, int) - v8hi __builtin_ia32_psrawi128 (v8hi, int) - v4si __builtin_ia32_psradi128 (v4si, int) - v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi) - v2di __builtin_ia32_movq128 (v2di) - - The following built-in functions are available when '-msse3' is used. -All of them generate the machine instruction that is part of the name. - - v2df __builtin_ia32_addsubpd (v2df, v2df) - v4sf __builtin_ia32_addsubps (v4sf, v4sf) - v2df __builtin_ia32_haddpd (v2df, v2df) - v4sf __builtin_ia32_haddps (v4sf, v4sf) - v2df __builtin_ia32_hsubpd (v2df, v2df) - v4sf __builtin_ia32_hsubps (v4sf, v4sf) - v16qi __builtin_ia32_lddqu (char const *) - void __builtin_ia32_monitor (void *, unsigned int, unsigned int) - v4sf __builtin_ia32_movshdup (v4sf) - v4sf __builtin_ia32_movsldup (v4sf) - void __builtin_ia32_mwait (unsigned int, unsigned int) - - The following built-in functions are available when '-mssse3' is used. -All of them generate the machine instruction that is part of the name. - - v2si __builtin_ia32_phaddd (v2si, v2si) - v4hi __builtin_ia32_phaddw (v4hi, v4hi) - v4hi __builtin_ia32_phaddsw (v4hi, v4hi) - v2si __builtin_ia32_phsubd (v2si, v2si) - v4hi __builtin_ia32_phsubw (v4hi, v4hi) - v4hi __builtin_ia32_phsubsw (v4hi, v4hi) - v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi) - v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi) - v8qi __builtin_ia32_pshufb (v8qi, v8qi) - v8qi __builtin_ia32_psignb (v8qi, v8qi) - v2si __builtin_ia32_psignd (v2si, v2si) - v4hi __builtin_ia32_psignw (v4hi, v4hi) - v1di __builtin_ia32_palignr (v1di, v1di, int) - v8qi __builtin_ia32_pabsb (v8qi) - v2si __builtin_ia32_pabsd (v2si) - v4hi __builtin_ia32_pabsw (v4hi) - - The following built-in functions are available when '-mssse3' is used. -All of them generate the machine instruction that is part of the name. - - v4si __builtin_ia32_phaddd128 (v4si, v4si) - v8hi __builtin_ia32_phaddw128 (v8hi, v8hi) - v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi) - v4si __builtin_ia32_phsubd128 (v4si, v4si) - v8hi __builtin_ia32_phsubw128 (v8hi, v8hi) - v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi) - v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi) - v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi) - v16qi __builtin_ia32_pshufb128 (v16qi, v16qi) - v16qi __builtin_ia32_psignb128 (v16qi, v16qi) - v4si __builtin_ia32_psignd128 (v4si, v4si) - v8hi __builtin_ia32_psignw128 (v8hi, v8hi) - v2di __builtin_ia32_palignr128 (v2di, v2di, int) - v16qi __builtin_ia32_pabsb128 (v16qi) - v4si __builtin_ia32_pabsd128 (v4si) - v8hi __builtin_ia32_pabsw128 (v8hi) - - The following built-in functions are available when '-msse4.1' is used. -All of them generate the machine instruction that is part of the name. - - v2df __builtin_ia32_blendpd (v2df, v2df, const int) - v4sf __builtin_ia32_blendps (v4sf, v4sf, const int) - v2df __builtin_ia32_blendvpd (v2df, v2df, v2df) - v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf) - v2df __builtin_ia32_dppd (v2df, v2df, const int) - v4sf __builtin_ia32_dpps (v4sf, v4sf, const int) - v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int) - v2di __builtin_ia32_movntdqa (v2di *); - v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int) - v8hi __builtin_ia32_packusdw128 (v4si, v4si) - v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi) - v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int) - v2di __builtin_ia32_pcmpeqq (v2di, v2di) - v8hi __builtin_ia32_phminposuw128 (v8hi) - v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi) - v4si __builtin_ia32_pmaxsd128 (v4si, v4si) - v4si __builtin_ia32_pmaxud128 (v4si, v4si) - v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi) - v16qi __builtin_ia32_pminsb128 (v16qi, v16qi) - v4si __builtin_ia32_pminsd128 (v4si, v4si) - v4si __builtin_ia32_pminud128 (v4si, v4si) - v8hi __builtin_ia32_pminuw128 (v8hi, v8hi) - v4si __builtin_ia32_pmovsxbd128 (v16qi) - v2di __builtin_ia32_pmovsxbq128 (v16qi) - v8hi __builtin_ia32_pmovsxbw128 (v16qi) - v2di __builtin_ia32_pmovsxdq128 (v4si) - v4si __builtin_ia32_pmovsxwd128 (v8hi) - v2di __builtin_ia32_pmovsxwq128 (v8hi) - v4si __builtin_ia32_pmovzxbd128 (v16qi) - v2di __builtin_ia32_pmovzxbq128 (v16qi) - v8hi __builtin_ia32_pmovzxbw128 (v16qi) - v2di __builtin_ia32_pmovzxdq128 (v4si) - v4si __builtin_ia32_pmovzxwd128 (v8hi) - v2di __builtin_ia32_pmovzxwq128 (v8hi) - v2di __builtin_ia32_pmuldq128 (v4si, v4si) - v4si __builtin_ia32_pmulld128 (v4si, v4si) - int __builtin_ia32_ptestc128 (v2di, v2di) - int __builtin_ia32_ptestnzc128 (v2di, v2di) - int __builtin_ia32_ptestz128 (v2di, v2di) - v2df __builtin_ia32_roundpd (v2df, const int) - v4sf __builtin_ia32_roundps (v4sf, const int) - v2df __builtin_ia32_roundsd (v2df, v2df, const int) - v4sf __builtin_ia32_roundss (v4sf, v4sf, const int) - - The following built-in functions are available when '-msse4.1' is used. - -'v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)' - Generates the 'insertps' machine instruction. -'int __builtin_ia32_vec_ext_v16qi (v16qi, const int)' - Generates the 'pextrb' machine instruction. -'v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)' - Generates the 'pinsrb' machine instruction. -'v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)' - Generates the 'pinsrd' machine instruction. -'v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)' - Generates the 'pinsrq' machine instruction in 64bit mode. - - The following built-in functions are changed to generate new SSE4.1 -instructions when '-msse4.1' is used. - -'float __builtin_ia32_vec_ext_v4sf (v4sf, const int)' - Generates the 'extractps' machine instruction. -'int __builtin_ia32_vec_ext_v4si (v4si, const int)' - Generates the 'pextrd' machine instruction. -'long long __builtin_ia32_vec_ext_v2di (v2di, const int)' - Generates the 'pextrq' machine instruction in 64bit mode. - - The following built-in functions are available when '-msse4.2' is used. -All of them generate the machine instruction that is part of the name. - - v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int) - int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int) - int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int) - int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int) - int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int) - int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int) - int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int) - v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int) - int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int) - int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int) - int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int) - int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int) - int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int) - int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int) - v2di __builtin_ia32_pcmpgtq (v2di, v2di) - - The following built-in functions are available when '-msse4.2' is used. - -'unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)' - Generates the 'crc32b' machine instruction. -'unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)' - Generates the 'crc32w' machine instruction. -'unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)' - Generates the 'crc32l' machine instruction. -'unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)' - Generates the 'crc32q' machine instruction. - - The following built-in functions are changed to generate new SSE4.2 -instructions when '-msse4.2' is used. - -'int __builtin_popcount (unsigned int)' - Generates the 'popcntl' machine instruction. -'int __builtin_popcountl (unsigned long)' - Generates the 'popcntl' or 'popcntq' machine instruction, depending - on the size of 'unsigned long'. -'int __builtin_popcountll (unsigned long long)' - Generates the 'popcntq' machine instruction. - - The following built-in functions are available when '-mavx' is used. -All of them generate the machine instruction that is part of the name. - - v4df __builtin_ia32_addpd256 (v4df,v4df) - v8sf __builtin_ia32_addps256 (v8sf,v8sf) - v4df __builtin_ia32_addsubpd256 (v4df,v4df) - v8sf __builtin_ia32_addsubps256 (v8sf,v8sf) - v4df __builtin_ia32_andnpd256 (v4df,v4df) - v8sf __builtin_ia32_andnps256 (v8sf,v8sf) - v4df __builtin_ia32_andpd256 (v4df,v4df) - v8sf __builtin_ia32_andps256 (v8sf,v8sf) - v4df __builtin_ia32_blendpd256 (v4df,v4df,int) - v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int) - v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df) - v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf) - v2df __builtin_ia32_cmppd (v2df,v2df,int) - v4df __builtin_ia32_cmppd256 (v4df,v4df,int) - v4sf __builtin_ia32_cmpps (v4sf,v4sf,int) - v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int) - v2df __builtin_ia32_cmpsd (v2df,v2df,int) - v4sf __builtin_ia32_cmpss (v4sf,v4sf,int) - v4df __builtin_ia32_cvtdq2pd256 (v4si) - v8sf __builtin_ia32_cvtdq2ps256 (v8si) - v4si __builtin_ia32_cvtpd2dq256 (v4df) - v4sf __builtin_ia32_cvtpd2ps256 (v4df) - v8si __builtin_ia32_cvtps2dq256 (v8sf) - v4df __builtin_ia32_cvtps2pd256 (v4sf) - v4si __builtin_ia32_cvttpd2dq256 (v4df) - v8si __builtin_ia32_cvttps2dq256 (v8sf) - v4df __builtin_ia32_divpd256 (v4df,v4df) - v8sf __builtin_ia32_divps256 (v8sf,v8sf) - v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int) - v4df __builtin_ia32_haddpd256 (v4df,v4df) - v8sf __builtin_ia32_haddps256 (v8sf,v8sf) - v4df __builtin_ia32_hsubpd256 (v4df,v4df) - v8sf __builtin_ia32_hsubps256 (v8sf,v8sf) - v32qi __builtin_ia32_lddqu256 (pcchar) - v32qi __builtin_ia32_loaddqu256 (pcchar) - v4df __builtin_ia32_loadupd256 (pcdouble) - v8sf __builtin_ia32_loadups256 (pcfloat) - v2df __builtin_ia32_maskloadpd (pcv2df,v2df) - v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df) - v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf) - v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf) - void __builtin_ia32_maskstorepd (pv2df,v2df,v2df) - void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df) - void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf) - void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf) - v4df __builtin_ia32_maxpd256 (v4df,v4df) - v8sf __builtin_ia32_maxps256 (v8sf,v8sf) - v4df __builtin_ia32_minpd256 (v4df,v4df) - v8sf __builtin_ia32_minps256 (v8sf,v8sf) - v4df __builtin_ia32_movddup256 (v4df) - int __builtin_ia32_movmskpd256 (v4df) - int __builtin_ia32_movmskps256 (v8sf) - v8sf __builtin_ia32_movshdup256 (v8sf) - v8sf __builtin_ia32_movsldup256 (v8sf) - v4df __builtin_ia32_mulpd256 (v4df,v4df) - v8sf __builtin_ia32_mulps256 (v8sf,v8sf) - v4df __builtin_ia32_orpd256 (v4df,v4df) - v8sf __builtin_ia32_orps256 (v8sf,v8sf) - v2df __builtin_ia32_pd_pd256 (v4df) - v4df __builtin_ia32_pd256_pd (v2df) - v4sf __builtin_ia32_ps_ps256 (v8sf) - v8sf __builtin_ia32_ps256_ps (v4sf) - int __builtin_ia32_ptestc256 (v4di,v4di,ptest) - int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest) - int __builtin_ia32_ptestz256 (v4di,v4di,ptest) - v8sf __builtin_ia32_rcpps256 (v8sf) - v4df __builtin_ia32_roundpd256 (v4df,int) - v8sf __builtin_ia32_roundps256 (v8sf,int) - v8sf __builtin_ia32_rsqrtps_nr256 (v8sf) - v8sf __builtin_ia32_rsqrtps256 (v8sf) - v4df __builtin_ia32_shufpd256 (v4df,v4df,int) - v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int) - v4si __builtin_ia32_si_si256 (v8si) - v8si __builtin_ia32_si256_si (v4si) - v4df __builtin_ia32_sqrtpd256 (v4df) - v8sf __builtin_ia32_sqrtps_nr256 (v8sf) - v8sf __builtin_ia32_sqrtps256 (v8sf) - void __builtin_ia32_storedqu256 (pchar,v32qi) - void __builtin_ia32_storeupd256 (pdouble,v4df) - void __builtin_ia32_storeups256 (pfloat,v8sf) - v4df __builtin_ia32_subpd256 (v4df,v4df) - v8sf __builtin_ia32_subps256 (v8sf,v8sf) - v4df __builtin_ia32_unpckhpd256 (v4df,v4df) - v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf) - v4df __builtin_ia32_unpcklpd256 (v4df,v4df) - v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf) - v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df) - v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf) - v4df __builtin_ia32_vbroadcastsd256 (pcdouble) - v4sf __builtin_ia32_vbroadcastss (pcfloat) - v8sf __builtin_ia32_vbroadcastss256 (pcfloat) - v2df __builtin_ia32_vextractf128_pd256 (v4df,int) - v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int) - v4si __builtin_ia32_vextractf128_si256 (v8si,int) - v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int) - v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int) - v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int) - v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int) - v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int) - v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int) - v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int) - v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int) - v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int) - v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int) - v2df __builtin_ia32_vpermilpd (v2df,int) - v4df __builtin_ia32_vpermilpd256 (v4df,int) - v4sf __builtin_ia32_vpermilps (v4sf,int) - v8sf __builtin_ia32_vpermilps256 (v8sf,int) - v2df __builtin_ia32_vpermilvarpd (v2df,v2di) - v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di) - v4sf __builtin_ia32_vpermilvarps (v4sf,v4si) - v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si) - int __builtin_ia32_vtestcpd (v2df,v2df,ptest) - int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest) - int __builtin_ia32_vtestcps (v4sf,v4sf,ptest) - int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest) - int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest) - int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest) - int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest) - int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest) - int __builtin_ia32_vtestzpd (v2df,v2df,ptest) - int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest) - int __builtin_ia32_vtestzps (v4sf,v4sf,ptest) - int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest) - void __builtin_ia32_vzeroall (void) - void __builtin_ia32_vzeroupper (void) - v4df __builtin_ia32_xorpd256 (v4df,v4df) - v8sf __builtin_ia32_xorps256 (v8sf,v8sf) - - The following built-in functions are available when '-mavx2' is used. -All of them generate the machine instruction that is part of the name. - - v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,v32qi,int) - v32qi __builtin_ia32_pabsb256 (v32qi) - v16hi __builtin_ia32_pabsw256 (v16hi) - v8si __builtin_ia32_pabsd256 (v8si) - v16hi __builtin_ia32_packssdw256 (v8si,v8si) - v32qi __builtin_ia32_packsswb256 (v16hi,v16hi) - v16hi __builtin_ia32_packusdw256 (v8si,v8si) - v32qi __builtin_ia32_packuswb256 (v16hi,v16hi) - v32qi __builtin_ia32_paddb256 (v32qi,v32qi) - v16hi __builtin_ia32_paddw256 (v16hi,v16hi) - v8si __builtin_ia32_paddd256 (v8si,v8si) - v4di __builtin_ia32_paddq256 (v4di,v4di) - v32qi __builtin_ia32_paddsb256 (v32qi,v32qi) - v16hi __builtin_ia32_paddsw256 (v16hi,v16hi) - v32qi __builtin_ia32_paddusb256 (v32qi,v32qi) - v16hi __builtin_ia32_paddusw256 (v16hi,v16hi) - v4di __builtin_ia32_palignr256 (v4di,v4di,int) - v4di __builtin_ia32_andsi256 (v4di,v4di) - v4di __builtin_ia32_andnotsi256 (v4di,v4di) - v32qi __builtin_ia32_pavgb256 (v32qi,v32qi) - v16hi __builtin_ia32_pavgw256 (v16hi,v16hi) - v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi) - v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int) - v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi) - v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi) - v8si __builtin_ia32_pcmpeqd256 (c8si,v8si) - v4di __builtin_ia32_pcmpeqq256 (v4di,v4di) - v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi) - v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi) - v8si __builtin_ia32_pcmpgtd256 (v8si,v8si) - v4di __builtin_ia32_pcmpgtq256 (v4di,v4di) - v16hi __builtin_ia32_phaddw256 (v16hi,v16hi) - v8si __builtin_ia32_phaddd256 (v8si,v8si) - v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi) - v16hi __builtin_ia32_phsubw256 (v16hi,v16hi) - v8si __builtin_ia32_phsubd256 (v8si,v8si) - v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi) - v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi) - v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi) - v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi) - v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi) - v8si __builtin_ia32_pmaxsd256 (v8si,v8si) - v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi) - v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi) - v8si __builtin_ia32_pmaxud256 (v8si,v8si) - v32qi __builtin_ia32_pminsb256 (v32qi,v32qi) - v16hi __builtin_ia32_pminsw256 (v16hi,v16hi) - v8si __builtin_ia32_pminsd256 (v8si,v8si) - v32qi __builtin_ia32_pminub256 (v32qi,v32qi) - v16hi __builtin_ia32_pminuw256 (v16hi,v16hi) - v8si __builtin_ia32_pminud256 (v8si,v8si) - int __builtin_ia32_pmovmskb256 (v32qi) - v16hi __builtin_ia32_pmovsxbw256 (v16qi) - v8si __builtin_ia32_pmovsxbd256 (v16qi) - v4di __builtin_ia32_pmovsxbq256 (v16qi) - v8si __builtin_ia32_pmovsxwd256 (v8hi) - v4di __builtin_ia32_pmovsxwq256 (v8hi) - v4di __builtin_ia32_pmovsxdq256 (v4si) - v16hi __builtin_ia32_pmovzxbw256 (v16qi) - v8si __builtin_ia32_pmovzxbd256 (v16qi) - v4di __builtin_ia32_pmovzxbq256 (v16qi) - v8si __builtin_ia32_pmovzxwd256 (v8hi) - v4di __builtin_ia32_pmovzxwq256 (v8hi) - v4di __builtin_ia32_pmovzxdq256 (v4si) - v4di __builtin_ia32_pmuldq256 (v8si,v8si) - v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi) - v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi) - v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi) - v16hi __builtin_ia32_pmullw256 (v16hi,v16hi) - v8si __builtin_ia32_pmulld256 (v8si,v8si) - v4di __builtin_ia32_pmuludq256 (v8si,v8si) - v4di __builtin_ia32_por256 (v4di,v4di) - v16hi __builtin_ia32_psadbw256 (v32qi,v32qi) - v32qi __builtin_ia32_pshufb256 (v32qi,v32qi) - v8si __builtin_ia32_pshufd256 (v8si,int) - v16hi __builtin_ia32_pshufhw256 (v16hi,int) - v16hi __builtin_ia32_pshuflw256 (v16hi,int) - v32qi __builtin_ia32_psignb256 (v32qi,v32qi) - v16hi __builtin_ia32_psignw256 (v16hi,v16hi) - v8si __builtin_ia32_psignd256 (v8si,v8si) - v4di __builtin_ia32_pslldqi256 (v4di,int) - v16hi __builtin_ia32_psllwi256 (16hi,int) - v16hi __builtin_ia32_psllw256(v16hi,v8hi) - v8si __builtin_ia32_pslldi256 (v8si,int) - v8si __builtin_ia32_pslld256(v8si,v4si) - v4di __builtin_ia32_psllqi256 (v4di,int) - v4di __builtin_ia32_psllq256(v4di,v2di) - v16hi __builtin_ia32_psrawi256 (v16hi,int) - v16hi __builtin_ia32_psraw256 (v16hi,v8hi) - v8si __builtin_ia32_psradi256 (v8si,int) - v8si __builtin_ia32_psrad256 (v8si,v4si) - v4di __builtin_ia32_psrldqi256 (v4di, int) - v16hi __builtin_ia32_psrlwi256 (v16hi,int) - v16hi __builtin_ia32_psrlw256 (v16hi,v8hi) - v8si __builtin_ia32_psrldi256 (v8si,int) - v8si __builtin_ia32_psrld256 (v8si,v4si) - v4di __builtin_ia32_psrlqi256 (v4di,int) - v4di __builtin_ia32_psrlq256(v4di,v2di) - v32qi __builtin_ia32_psubb256 (v32qi,v32qi) - v32hi __builtin_ia32_psubw256 (v16hi,v16hi) - v8si __builtin_ia32_psubd256 (v8si,v8si) - v4di __builtin_ia32_psubq256 (v4di,v4di) - v32qi __builtin_ia32_psubsb256 (v32qi,v32qi) - v16hi __builtin_ia32_psubsw256 (v16hi,v16hi) - v32qi __builtin_ia32_psubusb256 (v32qi,v32qi) - v16hi __builtin_ia32_psubusw256 (v16hi,v16hi) - v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi) - v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi) - v8si __builtin_ia32_punpckhdq256 (v8si,v8si) - v4di __builtin_ia32_punpckhqdq256 (v4di,v4di) - v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi) - v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi) - v8si __builtin_ia32_punpckldq256 (v8si,v8si) - v4di __builtin_ia32_punpcklqdq256 (v4di,v4di) - v4di __builtin_ia32_pxor256 (v4di,v4di) - v4di __builtin_ia32_movntdqa256 (pv4di) - v4sf __builtin_ia32_vbroadcastss_ps (v4sf) - v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf) - v4df __builtin_ia32_vbroadcastsd_pd256 (v2df) - v4di __builtin_ia32_vbroadcastsi256 (v2di) - v4si __builtin_ia32_pblendd128 (v4si,v4si) - v8si __builtin_ia32_pblendd256 (v8si,v8si) - v32qi __builtin_ia32_pbroadcastb256 (v16qi) - v16hi __builtin_ia32_pbroadcastw256 (v8hi) - v8si __builtin_ia32_pbroadcastd256 (v4si) - v4di __builtin_ia32_pbroadcastq256 (v2di) - v16qi __builtin_ia32_pbroadcastb128 (v16qi) - v8hi __builtin_ia32_pbroadcastw128 (v8hi) - v4si __builtin_ia32_pbroadcastd128 (v4si) - v2di __builtin_ia32_pbroadcastq128 (v2di) - v8si __builtin_ia32_permvarsi256 (v8si,v8si) - v4df __builtin_ia32_permdf256 (v4df,int) - v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf) - v4di __builtin_ia32_permdi256 (v4di,int) - v4di __builtin_ia32_permti256 (v4di,v4di,int) - v4di __builtin_ia32_extract128i256 (v4di,int) - v4di __builtin_ia32_insert128i256 (v4di,v2di,int) - v8si __builtin_ia32_maskloadd256 (pcv8si,v8si) - v4di __builtin_ia32_maskloadq256 (pcv4di,v4di) - v4si __builtin_ia32_maskloadd (pcv4si,v4si) - v2di __builtin_ia32_maskloadq (pcv2di,v2di) - void __builtin_ia32_maskstored256 (pv8si,v8si,v8si) - void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di) - void __builtin_ia32_maskstored (pv4si,v4si,v4si) - void __builtin_ia32_maskstoreq (pv2di,v2di,v2di) - v8si __builtin_ia32_psllv8si (v8si,v8si) - v4si __builtin_ia32_psllv4si (v4si,v4si) - v4di __builtin_ia32_psllv4di (v4di,v4di) - v2di __builtin_ia32_psllv2di (v2di,v2di) - v8si __builtin_ia32_psrav8si (v8si,v8si) - v4si __builtin_ia32_psrav4si (v4si,v4si) - v8si __builtin_ia32_psrlv8si (v8si,v8si) - v4si __builtin_ia32_psrlv4si (v4si,v4si) - v4di __builtin_ia32_psrlv4di (v4di,v4di) - v2di __builtin_ia32_psrlv2di (v2di,v2di) - v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int) - v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int) - v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int) - v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int) - v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int) - v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int) - v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int) - v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int) - v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int) - v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int) - v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int) - v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int) - v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int) - v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int) - v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int) - v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int) - - The following built-in functions are available when '-maes' is used. -All of them generate the machine instruction that is part of the name. - - v2di __builtin_ia32_aesenc128 (v2di, v2di) - v2di __builtin_ia32_aesenclast128 (v2di, v2di) - v2di __builtin_ia32_aesdec128 (v2di, v2di) - v2di __builtin_ia32_aesdeclast128 (v2di, v2di) - v2di __builtin_ia32_aeskeygenassist128 (v2di, const int) - v2di __builtin_ia32_aesimc128 (v2di) - - The following built-in function is available when '-mpclmul' is used. - -'v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)' - Generates the 'pclmulqdq' machine instruction. - - The following built-in function is available when '-mfsgsbase' is used. -All of them generate the machine instruction that is part of the name. - - unsigned int __builtin_ia32_rdfsbase32 (void) - unsigned long long __builtin_ia32_rdfsbase64 (void) - unsigned int __builtin_ia32_rdgsbase32 (void) - unsigned long long __builtin_ia32_rdgsbase64 (void) - void _writefsbase_u32 (unsigned int) - void _writefsbase_u64 (unsigned long long) - void _writegsbase_u32 (unsigned int) - void _writegsbase_u64 (unsigned long long) - - The following built-in function is available when '-mrdrnd' is used. -All of them generate the machine instruction that is part of the name. - - unsigned int __builtin_ia32_rdrand16_step (unsigned short *) - unsigned int __builtin_ia32_rdrand32_step (unsigned int *) - unsigned int __builtin_ia32_rdrand64_step (unsigned long long *) - - The following built-in functions are available when '-msse4a' is used. -All of them generate the machine instruction that is part of the name. - - void __builtin_ia32_movntsd (double *, v2df) - void __builtin_ia32_movntss (float *, v4sf) - v2di __builtin_ia32_extrq (v2di, v16qi) - v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int) - v2di __builtin_ia32_insertq (v2di, v2di) - v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int) - - The following built-in functions are available when '-mxop' is used. - v2df __builtin_ia32_vfrczpd (v2df) - v4sf __builtin_ia32_vfrczps (v4sf) - v2df __builtin_ia32_vfrczsd (v2df, v2df) - v4sf __builtin_ia32_vfrczss (v4sf, v4sf) - v4df __builtin_ia32_vfrczpd256 (v4df) - v8sf __builtin_ia32_vfrczps256 (v8sf) - v2di __builtin_ia32_vpcmov (v2di, v2di, v2di) - v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di) - v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si) - v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi) - v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi) - v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df) - v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf) - v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di) - v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si) - v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi) - v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi) - v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df) - v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf) - v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi) - v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi) - v4si __builtin_ia32_vpcomeqd (v4si, v4si) - v2di __builtin_ia32_vpcomeqq (v2di, v2di) - v16qi __builtin_ia32_vpcomequb (v16qi, v16qi) - v4si __builtin_ia32_vpcomequd (v4si, v4si) - v2di __builtin_ia32_vpcomequq (v2di, v2di) - v8hi __builtin_ia32_vpcomequw (v8hi, v8hi) - v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi) - v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi) - v4si __builtin_ia32_vpcomfalsed (v4si, v4si) - v2di __builtin_ia32_vpcomfalseq (v2di, v2di) - v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi) - v4si __builtin_ia32_vpcomfalseud (v4si, v4si) - v2di __builtin_ia32_vpcomfalseuq (v2di, v2di) - v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi) - v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi) - v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi) - v4si __builtin_ia32_vpcomged (v4si, v4si) - v2di __builtin_ia32_vpcomgeq (v2di, v2di) - v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi) - v4si __builtin_ia32_vpcomgeud (v4si, v4si) - v2di __builtin_ia32_vpcomgeuq (v2di, v2di) - v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi) - v8hi __builtin_ia32_vpcomgew (v8hi, v8hi) - v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi) - v4si __builtin_ia32_vpcomgtd (v4si, v4si) - v2di __builtin_ia32_vpcomgtq (v2di, v2di) - v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi) - v4si __builtin_ia32_vpcomgtud (v4si, v4si) - v2di __builtin_ia32_vpcomgtuq (v2di, v2di) - v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi) - v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi) - v16qi __builtin_ia32_vpcomleb (v16qi, v16qi) - v4si __builtin_ia32_vpcomled (v4si, v4si) - v2di __builtin_ia32_vpcomleq (v2di, v2di) - v16qi __builtin_ia32_vpcomleub (v16qi, v16qi) - v4si __builtin_ia32_vpcomleud (v4si, v4si) - v2di __builtin_ia32_vpcomleuq (v2di, v2di) - v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi) - v8hi __builtin_ia32_vpcomlew (v8hi, v8hi) - v16qi __builtin_ia32_vpcomltb (v16qi, v16qi) - v4si __builtin_ia32_vpcomltd (v4si, v4si) - v2di __builtin_ia32_vpcomltq (v2di, v2di) - v16qi __builtin_ia32_vpcomltub (v16qi, v16qi) - v4si __builtin_ia32_vpcomltud (v4si, v4si) - v2di __builtin_ia32_vpcomltuq (v2di, v2di) - v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi) - v8hi __builtin_ia32_vpcomltw (v8hi, v8hi) - v16qi __builtin_ia32_vpcomneb (v16qi, v16qi) - v4si __builtin_ia32_vpcomned (v4si, v4si) - v2di __builtin_ia32_vpcomneq (v2di, v2di) - v16qi __builtin_ia32_vpcomneub (v16qi, v16qi) - v4si __builtin_ia32_vpcomneud (v4si, v4si) - v2di __builtin_ia32_vpcomneuq (v2di, v2di) - v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi) - v8hi __builtin_ia32_vpcomnew (v8hi, v8hi) - v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi) - v4si __builtin_ia32_vpcomtrued (v4si, v4si) - v2di __builtin_ia32_vpcomtrueq (v2di, v2di) - v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi) - v4si __builtin_ia32_vpcomtrueud (v4si, v4si) - v2di __builtin_ia32_vpcomtrueuq (v2di, v2di) - v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi) - v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi) - v4si __builtin_ia32_vphaddbd (v16qi) - v2di __builtin_ia32_vphaddbq (v16qi) - v8hi __builtin_ia32_vphaddbw (v16qi) - v2di __builtin_ia32_vphadddq (v4si) - v4si __builtin_ia32_vphaddubd (v16qi) - v2di __builtin_ia32_vphaddubq (v16qi) - v8hi __builtin_ia32_vphaddubw (v16qi) - v2di __builtin_ia32_vphaddudq (v4si) - v4si __builtin_ia32_vphadduwd (v8hi) - v2di __builtin_ia32_vphadduwq (v8hi) - v4si __builtin_ia32_vphaddwd (v8hi) - v2di __builtin_ia32_vphaddwq (v8hi) - v8hi __builtin_ia32_vphsubbw (v16qi) - v2di __builtin_ia32_vphsubdq (v4si) - v4si __builtin_ia32_vphsubwd (v8hi) - v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si) - v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di) - v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di) - v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si) - v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di) - v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di) - v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si) - v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi) - v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si) - v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi) - v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si) - v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si) - v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi) - v16qi __builtin_ia32_vprotb (v16qi, v16qi) - v4si __builtin_ia32_vprotd (v4si, v4si) - v2di __builtin_ia32_vprotq (v2di, v2di) - v8hi __builtin_ia32_vprotw (v8hi, v8hi) - v16qi __builtin_ia32_vpshab (v16qi, v16qi) - v4si __builtin_ia32_vpshad (v4si, v4si) - v2di __builtin_ia32_vpshaq (v2di, v2di) - v8hi __builtin_ia32_vpshaw (v8hi, v8hi) - v16qi __builtin_ia32_vpshlb (v16qi, v16qi) - v4si __builtin_ia32_vpshld (v4si, v4si) - v2di __builtin_ia32_vpshlq (v2di, v2di) - v8hi __builtin_ia32_vpshlw (v8hi, v8hi) - - The following built-in functions are available when '-mfma4' is used. -All of them generate the machine instruction that is part of the name. - - v2df __builtin_ia32_vfmaddpd (v2df, v2df, v2df) - v4sf __builtin_ia32_vfmaddps (v4sf, v4sf, v4sf) - v2df __builtin_ia32_vfmaddsd (v2df, v2df, v2df) - v4sf __builtin_ia32_vfmaddss (v4sf, v4sf, v4sf) - v2df __builtin_ia32_vfmsubpd (v2df, v2df, v2df) - v4sf __builtin_ia32_vfmsubps (v4sf, v4sf, v4sf) - v2df __builtin_ia32_vfmsubsd (v2df, v2df, v2df) - v4sf __builtin_ia32_vfmsubss (v4sf, v4sf, v4sf) - v2df __builtin_ia32_vfnmaddpd (v2df, v2df, v2df) - v4sf __builtin_ia32_vfnmaddps (v4sf, v4sf, v4sf) - v2df __builtin_ia32_vfnmaddsd (v2df, v2df, v2df) - v4sf __builtin_ia32_vfnmaddss (v4sf, v4sf, v4sf) - v2df __builtin_ia32_vfnmsubpd (v2df, v2df, v2df) - v4sf __builtin_ia32_vfnmsubps (v4sf, v4sf, v4sf) - v2df __builtin_ia32_vfnmsubsd (v2df, v2df, v2df) - v4sf __builtin_ia32_vfnmsubss (v4sf, v4sf, v4sf) - v2df __builtin_ia32_vfmaddsubpd (v2df, v2df, v2df) - v4sf __builtin_ia32_vfmaddsubps (v4sf, v4sf, v4sf) - v2df __builtin_ia32_vfmsubaddpd (v2df, v2df, v2df) - v4sf __builtin_ia32_vfmsubaddps (v4sf, v4sf, v4sf) - v4df __builtin_ia32_vfmaddpd256 (v4df, v4df, v4df) - v8sf __builtin_ia32_vfmaddps256 (v8sf, v8sf, v8sf) - v4df __builtin_ia32_vfmsubpd256 (v4df, v4df, v4df) - v8sf __builtin_ia32_vfmsubps256 (v8sf, v8sf, v8sf) - v4df __builtin_ia32_vfnmaddpd256 (v4df, v4df, v4df) - v8sf __builtin_ia32_vfnmaddps256 (v8sf, v8sf, v8sf) - v4df __builtin_ia32_vfnmsubpd256 (v4df, v4df, v4df) - v8sf __builtin_ia32_vfnmsubps256 (v8sf, v8sf, v8sf) - v4df __builtin_ia32_vfmaddsubpd256 (v4df, v4df, v4df) - v8sf __builtin_ia32_vfmaddsubps256 (v8sf, v8sf, v8sf) - v4df __builtin_ia32_vfmsubaddpd256 (v4df, v4df, v4df) - v8sf __builtin_ia32_vfmsubaddps256 (v8sf, v8sf, v8sf) - - The following built-in functions are available when '-mlwp' is used. - - void __builtin_ia32_llwpcb16 (void *); - void __builtin_ia32_llwpcb32 (void *); - void __builtin_ia32_llwpcb64 (void *); - void * __builtin_ia32_llwpcb16 (void); - void * __builtin_ia32_llwpcb32 (void); - void * __builtin_ia32_llwpcb64 (void); - void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short) - void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int) - void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int) - unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short) - unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int) - unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int) - - The following built-in functions are available when '-mbmi' is used. -All of them generate the machine instruction that is part of the name. - unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int); - unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long); - - The following built-in functions are available when '-mbmi2' is used. -All of them generate the machine instruction that is part of the name. - unsigned int _bzhi_u32 (unsigned int, unsigned int) - unsigned int _pdep_u32 (unsigned int, unsigned int) - unsigned int _pext_u32 (unsigned int, unsigned int) - unsigned long long _bzhi_u64 (unsigned long long, unsigned long long) - unsigned long long _pdep_u64 (unsigned long long, unsigned long long) - unsigned long long _pext_u64 (unsigned long long, unsigned long long) - - The following built-in functions are available when '-mlzcnt' is used. -All of them generate the machine instruction that is part of the name. - unsigned short __builtin_ia32_lzcnt_16(unsigned short); - unsigned int __builtin_ia32_lzcnt_u32(unsigned int); - unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long); - - The following built-in functions are available when '-mfxsr' is used. -All of them generate the machine instruction that is part of the name. - void __builtin_ia32_fxsave (void *) - void __builtin_ia32_fxrstor (void *) - void __builtin_ia32_fxsave64 (void *) - void __builtin_ia32_fxrstor64 (void *) - - The following built-in functions are available when '-mxsave' is used. -All of them generate the machine instruction that is part of the name. - void __builtin_ia32_xsave (void *, long long) - void __builtin_ia32_xrstor (void *, long long) - void __builtin_ia32_xsave64 (void *, long long) - void __builtin_ia32_xrstor64 (void *, long long) - - The following built-in functions are available when '-mxsaveopt' is -used. All of them generate the machine instruction that is part of the -name. - void __builtin_ia32_xsaveopt (void *, long long) - void __builtin_ia32_xsaveopt64 (void *, long long) - - The following built-in functions are available when '-mtbm' is used. -Both of them generate the immediate form of the bextr machine -instruction. - unsigned int __builtin_ia32_bextri_u32 (unsigned int, const unsigned int); - unsigned long long __builtin_ia32_bextri_u64 (unsigned long long, const unsigned long long); - - The following built-in functions are available when '-m3dnow' is used. -All of them generate the machine instruction that is part of the name. - - void __builtin_ia32_femms (void) - v8qi __builtin_ia32_pavgusb (v8qi, v8qi) - v2si __builtin_ia32_pf2id (v2sf) - v2sf __builtin_ia32_pfacc (v2sf, v2sf) - v2sf __builtin_ia32_pfadd (v2sf, v2sf) - v2si __builtin_ia32_pfcmpeq (v2sf, v2sf) - v2si __builtin_ia32_pfcmpge (v2sf, v2sf) - v2si __builtin_ia32_pfcmpgt (v2sf, v2sf) - v2sf __builtin_ia32_pfmax (v2sf, v2sf) - v2sf __builtin_ia32_pfmin (v2sf, v2sf) - v2sf __builtin_ia32_pfmul (v2sf, v2sf) - v2sf __builtin_ia32_pfrcp (v2sf) - v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf) - v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf) - v2sf __builtin_ia32_pfrsqrt (v2sf) - v2sf __builtin_ia32_pfsub (v2sf, v2sf) - v2sf __builtin_ia32_pfsubr (v2sf, v2sf) - v2sf __builtin_ia32_pi2fd (v2si) - v4hi __builtin_ia32_pmulhrw (v4hi, v4hi) - - The following built-in functions are available when both '-m3dnow' and -'-march=athlon' are used. All of them generate the machine instruction -that is part of the name. - - v2si __builtin_ia32_pf2iw (v2sf) - v2sf __builtin_ia32_pfnacc (v2sf, v2sf) - v2sf __builtin_ia32_pfpnacc (v2sf, v2sf) - v2sf __builtin_ia32_pi2fw (v2si) - v2sf __builtin_ia32_pswapdsf (v2sf) - v2si __builtin_ia32_pswapdsi (v2si) - - The following built-in functions are available when '-mrtm' is used -They are used for restricted transactional memory. These are the -internal low level functions. Normally the functions in *note X86 -transactional memory intrinsics:: should be used instead. - - int __builtin_ia32_xbegin () - void __builtin_ia32_xend () - void __builtin_ia32_xabort (status) - int __builtin_ia32_xtest () - - -File: gcc.info, Node: X86 transactional memory intrinsics, Next: MIPS DSP Built-in Functions, Prev: X86 Built-in Functions, Up: Target Builtins - -6.57.12 X86 transaction memory intrinsics ------------------------------------------ - -Hardware transactional memory intrinsics for i386. These allow to use -memory transactions with RTM (Restricted Transactional Memory). For -using HLE (Hardware Lock Elision) see *note x86 specific memory model -extensions for transactional memory:: instead. This support is enabled -with the '-mrtm' option. - - A memory transaction commits all changes to memory in an atomic way, as -visible to other threads. If the transaction fails it is rolled back -and all side effects discarded. - - Generally there is no guarantee that a memory transaction ever succeeds -and suitable fallback code always needs to be supplied. - - -- RTM Function: unsigned _xbegin () - Start a RTM (Restricted Transactional Memory) transaction. Returns - _XBEGIN_STARTED when the transaction started successfully (note - this is not 0, so the constant has to be explicitely tested). When - the transaction aborts all side effects are undone and an abort - code is returned. There is no guarantee any transaction ever - succeeds, so there always needs to be a valid tested fallback path. - - #include <immintrin.h> - - if ((status = _xbegin ()) == _XBEGIN_STARTED) { - ... transaction code... - _xend (); - } else { - ... non transactional fallback path... - } - - Valid abort status bits (when the value is not '_XBEGIN_STARTED') are: - -'_XABORT_EXPLICIT' - Transaction explicitely aborted with '_xabort'. The parameter - passed to '_xabort' is available with '_XABORT_CODE(status)' -'_XABORT_RETRY' - Transaction retry is possible. -'_XABORT_CONFLICT' - Transaction abort due to a memory conflict with another thread -'_XABORT_CAPACITY' - Transaction abort due to the transaction using too much memory -'_XABORT_DEBUG' - Transaction abort due to a debug trap -'_XABORT_NESTED' - Transaction abort in a inner nested transaction - - -- RTM Function: void _xend () - Commit the current transaction. When no transaction is active this - will fault. All memory side effects of the transactions will - become visible to other threads in an atomic matter. - - -- RTM Function: int _xtest () - Return a value not zero when a transaction is currently active, - otherwise 0. - - -- RTM Function: void _xabort (status) - Abort the current transaction. When no transaction is active this - is a no-op. status must be a 8bit constant, that is included in - the status code returned by '_xbegin' - - -File: gcc.info, Node: MIPS DSP Built-in Functions, Next: MIPS Paired-Single Support, Prev: X86 transactional memory intrinsics, Up: Target Builtins - -6.57.13 MIPS DSP Built-in Functions ------------------------------------ - -The MIPS DSP Application-Specific Extension (ASE) includes new -instructions that are designed to improve the performance of DSP and -media applications. It provides instructions that operate on packed -8-bit/16-bit integer data, Q7, Q15 and Q31 fractional data. - - GCC supports MIPS DSP operations using both the generic vector -extensions (*note Vector Extensions::) and a collection of MIPS-specific -built-in functions. Both kinds of support are enabled by the '-mdsp' -command-line option. - - Revision 2 of the ASE was introduced in the second half of 2006. This -revision adds extra instructions to the original ASE, but is otherwise -backwards-compatible with it. You can select revision 2 using the -command-line option '-mdspr2'; this option implies '-mdsp'. - - The SCOUNT and POS bits of the DSP control register are global. The -WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and POS -bits. During optimization, the compiler does not delete these -instructions and it does not delete calls to functions containing these -instructions. - - At present, GCC only provides support for operations on 32-bit vectors. -The vector type associated with 8-bit integer data is usually called -'v4i8', the vector type associated with Q7 is usually called 'v4q7', the -vector type associated with 16-bit integer data is usually called -'v2i16', and the vector type associated with Q15 is usually called -'v2q15'. They can be defined in C as follows: - - typedef signed char v4i8 __attribute__ ((vector_size(4))); - typedef signed char v4q7 __attribute__ ((vector_size(4))); - typedef short v2i16 __attribute__ ((vector_size(4))); - typedef short v2q15 __attribute__ ((vector_size(4))); - - 'v4i8', 'v4q7', 'v2i16' and 'v2q15' values are initialized in the same -way as aggregates. For example: - - v4i8 a = {1, 2, 3, 4}; - v4i8 b; - b = (v4i8) {5, 6, 7, 8}; - - v2q15 c = {0x0fcb, 0x3a75}; - v2q15 d; - d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15}; - - _Note:_ The CPU's endianness determines the order in which values are -packed. On little-endian targets, the first value is the least -significant and the last value is the most significant. The opposite -order applies to big-endian targets. For example, the code above sets -the lowest byte of 'a' to '1' on little-endian targets and '4' on -big-endian targets. - - _Note:_ Q7, Q15 and Q31 values must be initialized with their integer -representation. As shown in this example, the integer representation of -a Q7 value can be obtained by multiplying the fractional value by -'0x1.0p7'. The equivalent for Q15 values is to multiply by '0x1.0p15'. -The equivalent for Q31 values is to multiply by '0x1.0p31'. - - The table below lists the 'v4i8' and 'v2q15' operations for which -hardware support exists. 'a' and 'b' are 'v4i8' values, and 'c' and 'd' -are 'v2q15' values. - -C code MIPS instruction -'a + b' 'addu.qb' -'c + d' 'addq.ph' -'a - b' 'subu.qb' -'c - d' 'subq.ph' - - The table below lists the 'v2i16' operation for which hardware support -exists for the DSP ASE REV 2. 'e' and 'f' are 'v2i16' values. - -C code MIPS instruction -'e * f' 'mul.ph' - - It is easier to describe the DSP built-in functions if we first define -the following types: - - typedef int q31; - typedef int i32; - typedef unsigned int ui32; - typedef long long a64; - - 'q31' and 'i32' are actually the same as 'int', but we use 'q31' to -indicate a Q31 fractional value and 'i32' to indicate a 32-bit integer -value. Similarly, 'a64' is the same as 'long long', but we use 'a64' to -indicate values that are placed in one of the four DSP accumulators -('$ac0', '$ac1', '$ac2' or '$ac3'). - - Also, some built-in functions prefer or require immediate numbers as -parameters, because the corresponding DSP instructions accept both -immediate numbers and register operands, or accept immediate numbers -only. The immediate parameters are listed as follows. - - imm0_3: 0 to 3. - imm0_7: 0 to 7. - imm0_15: 0 to 15. - imm0_31: 0 to 31. - imm0_63: 0 to 63. - imm0_255: 0 to 255. - imm_n32_31: -32 to 31. - imm_n512_511: -512 to 511. - - The following built-in functions map directly to a particular MIPS DSP -instruction. Please refer to the architecture specification for details -on what each instruction does. - - v2q15 __builtin_mips_addq_ph (v2q15, v2q15) - v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15) - q31 __builtin_mips_addq_s_w (q31, q31) - v4i8 __builtin_mips_addu_qb (v4i8, v4i8) - v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8) - v2q15 __builtin_mips_subq_ph (v2q15, v2q15) - v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15) - q31 __builtin_mips_subq_s_w (q31, q31) - v4i8 __builtin_mips_subu_qb (v4i8, v4i8) - v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8) - i32 __builtin_mips_addsc (i32, i32) - i32 __builtin_mips_addwc (i32, i32) - i32 __builtin_mips_modsub (i32, i32) - i32 __builtin_mips_raddu_w_qb (v4i8) - v2q15 __builtin_mips_absq_s_ph (v2q15) - q31 __builtin_mips_absq_s_w (q31) - v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15) - v2q15 __builtin_mips_precrq_ph_w (q31, q31) - v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31) - v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15) - q31 __builtin_mips_preceq_w_phl (v2q15) - q31 __builtin_mips_preceq_w_phr (v2q15) - v2q15 __builtin_mips_precequ_ph_qbl (v4i8) - v2q15 __builtin_mips_precequ_ph_qbr (v4i8) - v2q15 __builtin_mips_precequ_ph_qbla (v4i8) - v2q15 __builtin_mips_precequ_ph_qbra (v4i8) - v2q15 __builtin_mips_preceu_ph_qbl (v4i8) - v2q15 __builtin_mips_preceu_ph_qbr (v4i8) - v2q15 __builtin_mips_preceu_ph_qbla (v4i8) - v2q15 __builtin_mips_preceu_ph_qbra (v4i8) - v4i8 __builtin_mips_shll_qb (v4i8, imm0_7) - v4i8 __builtin_mips_shll_qb (v4i8, i32) - v2q15 __builtin_mips_shll_ph (v2q15, imm0_15) - v2q15 __builtin_mips_shll_ph (v2q15, i32) - v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15) - v2q15 __builtin_mips_shll_s_ph (v2q15, i32) - q31 __builtin_mips_shll_s_w (q31, imm0_31) - q31 __builtin_mips_shll_s_w (q31, i32) - v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7) - v4i8 __builtin_mips_shrl_qb (v4i8, i32) - v2q15 __builtin_mips_shra_ph (v2q15, imm0_15) - v2q15 __builtin_mips_shra_ph (v2q15, i32) - v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15) - v2q15 __builtin_mips_shra_r_ph (v2q15, i32) - q31 __builtin_mips_shra_r_w (q31, imm0_31) - q31 __builtin_mips_shra_r_w (q31, i32) - v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15) - v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15) - v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15) - q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15) - q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15) - a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8) - a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8) - a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8) - a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8) - a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15) - a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31) - a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15) - a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31) - a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15) - a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15) - a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15) - a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15) - a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15) - i32 __builtin_mips_bitrev (i32) - i32 __builtin_mips_insv (i32, i32) - v4i8 __builtin_mips_repl_qb (imm0_255) - v4i8 __builtin_mips_repl_qb (i32) - v2q15 __builtin_mips_repl_ph (imm_n512_511) - v2q15 __builtin_mips_repl_ph (i32) - void __builtin_mips_cmpu_eq_qb (v4i8, v4i8) - void __builtin_mips_cmpu_lt_qb (v4i8, v4i8) - void __builtin_mips_cmpu_le_qb (v4i8, v4i8) - i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8) - i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8) - i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8) - void __builtin_mips_cmp_eq_ph (v2q15, v2q15) - void __builtin_mips_cmp_lt_ph (v2q15, v2q15) - void __builtin_mips_cmp_le_ph (v2q15, v2q15) - v4i8 __builtin_mips_pick_qb (v4i8, v4i8) - v2q15 __builtin_mips_pick_ph (v2q15, v2q15) - v2q15 __builtin_mips_packrl_ph (v2q15, v2q15) - i32 __builtin_mips_extr_w (a64, imm0_31) - i32 __builtin_mips_extr_w (a64, i32) - i32 __builtin_mips_extr_r_w (a64, imm0_31) - i32 __builtin_mips_extr_s_h (a64, i32) - i32 __builtin_mips_extr_rs_w (a64, imm0_31) - i32 __builtin_mips_extr_rs_w (a64, i32) - i32 __builtin_mips_extr_s_h (a64, imm0_31) - i32 __builtin_mips_extr_r_w (a64, i32) - i32 __builtin_mips_extp (a64, imm0_31) - i32 __builtin_mips_extp (a64, i32) - i32 __builtin_mips_extpdp (a64, imm0_31) - i32 __builtin_mips_extpdp (a64, i32) - a64 __builtin_mips_shilo (a64, imm_n32_31) - a64 __builtin_mips_shilo (a64, i32) - a64 __builtin_mips_mthlip (a64, i32) - void __builtin_mips_wrdsp (i32, imm0_63) - i32 __builtin_mips_rddsp (imm0_63) - i32 __builtin_mips_lbux (void *, i32) - i32 __builtin_mips_lhx (void *, i32) - i32 __builtin_mips_lwx (void *, i32) - a64 __builtin_mips_ldx (void *, i32) [MIPS64 only] - i32 __builtin_mips_bposge32 (void) - a64 __builtin_mips_madd (a64, i32, i32); - a64 __builtin_mips_maddu (a64, ui32, ui32); - a64 __builtin_mips_msub (a64, i32, i32); - a64 __builtin_mips_msubu (a64, ui32, ui32); - a64 __builtin_mips_mult (i32, i32); - a64 __builtin_mips_multu (ui32, ui32); - - The following built-in functions map directly to a particular MIPS DSP -REV 2 instruction. Please refer to the architecture specification for -details on what each instruction does. - - v4q7 __builtin_mips_absq_s_qb (v4q7); - v2i16 __builtin_mips_addu_ph (v2i16, v2i16); - v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16); - v4i8 __builtin_mips_adduh_qb (v4i8, v4i8); - v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8); - i32 __builtin_mips_append (i32, i32, imm0_31); - i32 __builtin_mips_balign (i32, i32, imm0_3); - i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8); - i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8); - i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8); - a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16); - a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16); - v2i16 __builtin_mips_mul_ph (v2i16, v2i16); - v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16); - q31 __builtin_mips_mulq_rs_w (q31, q31); - v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15); - q31 __builtin_mips_mulq_s_w (q31, q31); - a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16); - v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16); - v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31); - v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31); - i32 __builtin_mips_prepend (i32, i32, imm0_31); - v4i8 __builtin_mips_shra_qb (v4i8, imm0_7); - v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7); - v4i8 __builtin_mips_shra_qb (v4i8, i32); - v4i8 __builtin_mips_shra_r_qb (v4i8, i32); - v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15); - v2i16 __builtin_mips_shrl_ph (v2i16, i32); - v2i16 __builtin_mips_subu_ph (v2i16, v2i16); - v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16); - v4i8 __builtin_mips_subuh_qb (v4i8, v4i8); - v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8); - v2q15 __builtin_mips_addqh_ph (v2q15, v2q15); - v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15); - q31 __builtin_mips_addqh_w (q31, q31); - q31 __builtin_mips_addqh_r_w (q31, q31); - v2q15 __builtin_mips_subqh_ph (v2q15, v2q15); - v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15); - q31 __builtin_mips_subqh_w (q31, q31); - q31 __builtin_mips_subqh_r_w (q31, q31); - a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16); - a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16); - a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15); - a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15); - a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15); - a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15); - - -File: gcc.info, Node: MIPS Paired-Single Support, Next: MIPS Loongson Built-in Functions, Prev: MIPS DSP Built-in Functions, Up: Target Builtins - -6.57.14 MIPS Paired-Single Support ----------------------------------- - -The MIPS64 architecture includes a number of instructions that operate -on pairs of single-precision floating-point values. Each pair is packed -into a 64-bit floating-point register, with one element being designated -the "upper half" and the other being designated the "lower half". - - GCC supports paired-single operations using both the generic vector -extensions (*note Vector Extensions::) and a collection of MIPS-specific -built-in functions. Both kinds of support are enabled by the -'-mpaired-single' command-line option. - - The vector type associated with paired-single values is usually called -'v2sf'. It can be defined in C as follows: - - typedef float v2sf __attribute__ ((vector_size (8))); - - 'v2sf' values are initialized in the same way as aggregates. For -example: - - v2sf a = {1.5, 9.1}; - v2sf b; - float e, f; - b = (v2sf) {e, f}; - - _Note:_ The CPU's endianness determines which value is stored in the -upper half of a register and which value is stored in the lower half. -On little-endian targets, the first value is the lower one and the -second value is the upper one. The opposite order applies to big-endian -targets. For example, the code above sets the lower half of 'a' to -'1.5' on little-endian targets and '9.1' on big-endian targets. - - -File: gcc.info, Node: MIPS Loongson Built-in Functions, Next: Other MIPS Built-in Functions, Prev: MIPS Paired-Single Support, Up: Target Builtins - -6.57.15 MIPS Loongson Built-in Functions ----------------------------------------- - -GCC provides intrinsics to access the SIMD instructions provided by the -ST Microelectronics Loongson-2E and -2F processors. These intrinsics, -available after inclusion of the 'loongson.h' header file, operate on -the following 64-bit vector types: - - * 'uint8x8_t', a vector of eight unsigned 8-bit integers; - * 'uint16x4_t', a vector of four unsigned 16-bit integers; - * 'uint32x2_t', a vector of two unsigned 32-bit integers; - * 'int8x8_t', a vector of eight signed 8-bit integers; - * 'int16x4_t', a vector of four signed 16-bit integers; - * 'int32x2_t', a vector of two signed 32-bit integers. - - The intrinsics provided are listed below; each is named after the -machine instruction to which it corresponds, with suffixes added as -appropriate to distinguish intrinsics that expand to the same machine -instruction yet have different argument types. Refer to the -architecture documentation for a description of the functionality of -each instruction. - - int16x4_t packsswh (int32x2_t s, int32x2_t t); - int8x8_t packsshb (int16x4_t s, int16x4_t t); - uint8x8_t packushb (uint16x4_t s, uint16x4_t t); - uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t); - uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t); - uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t); - int32x2_t paddw_s (int32x2_t s, int32x2_t t); - int16x4_t paddh_s (int16x4_t s, int16x4_t t); - int8x8_t paddb_s (int8x8_t s, int8x8_t t); - uint64_t paddd_u (uint64_t s, uint64_t t); - int64_t paddd_s (int64_t s, int64_t t); - int16x4_t paddsh (int16x4_t s, int16x4_t t); - int8x8_t paddsb (int8x8_t s, int8x8_t t); - uint16x4_t paddush (uint16x4_t s, uint16x4_t t); - uint8x8_t paddusb (uint8x8_t s, uint8x8_t t); - uint64_t pandn_ud (uint64_t s, uint64_t t); - uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t); - uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t); - uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t); - int64_t pandn_sd (int64_t s, int64_t t); - int32x2_t pandn_sw (int32x2_t s, int32x2_t t); - int16x4_t pandn_sh (int16x4_t s, int16x4_t t); - int8x8_t pandn_sb (int8x8_t s, int8x8_t t); - uint16x4_t pavgh (uint16x4_t s, uint16x4_t t); - uint8x8_t pavgb (uint8x8_t s, uint8x8_t t); - uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t); - uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t); - uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t); - int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t); - int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t); - int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t); - uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t); - uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t); - uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t); - int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t); - int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t); - int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t); - uint16x4_t pextrh_u (uint16x4_t s, int field); - int16x4_t pextrh_s (int16x4_t s, int field); - uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t); - uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t); - uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t); - uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t); - int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t); - int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t); - int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t); - int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t); - int32x2_t pmaddhw (int16x4_t s, int16x4_t t); - int16x4_t pmaxsh (int16x4_t s, int16x4_t t); - uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t); - int16x4_t pminsh (int16x4_t s, int16x4_t t); - uint8x8_t pminub (uint8x8_t s, uint8x8_t t); - uint8x8_t pmovmskb_u (uint8x8_t s); - int8x8_t pmovmskb_s (int8x8_t s); - uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t); - int16x4_t pmulhh (int16x4_t s, int16x4_t t); - int16x4_t pmullh (int16x4_t s, int16x4_t t); - int64_t pmuluw (uint32x2_t s, uint32x2_t t); - uint8x8_t pasubub (uint8x8_t s, uint8x8_t t); - uint16x4_t biadd (uint8x8_t s); - uint16x4_t psadbh (uint8x8_t s, uint8x8_t t); - uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order); - int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order); - uint16x4_t psllh_u (uint16x4_t s, uint8_t amount); - int16x4_t psllh_s (int16x4_t s, uint8_t amount); - uint32x2_t psllw_u (uint32x2_t s, uint8_t amount); - int32x2_t psllw_s (int32x2_t s, uint8_t amount); - uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount); - int16x4_t psrlh_s (int16x4_t s, uint8_t amount); - uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount); - int32x2_t psrlw_s (int32x2_t s, uint8_t amount); - uint16x4_t psrah_u (uint16x4_t s, uint8_t amount); - int16x4_t psrah_s (int16x4_t s, uint8_t amount); - uint32x2_t psraw_u (uint32x2_t s, uint8_t amount); - int32x2_t psraw_s (int32x2_t s, uint8_t amount); - uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t); - uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t); - uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t); - int32x2_t psubw_s (int32x2_t s, int32x2_t t); - int16x4_t psubh_s (int16x4_t s, int16x4_t t); - int8x8_t psubb_s (int8x8_t s, int8x8_t t); - uint64_t psubd_u (uint64_t s, uint64_t t); - int64_t psubd_s (int64_t s, int64_t t); - int16x4_t psubsh (int16x4_t s, int16x4_t t); - int8x8_t psubsb (int8x8_t s, int8x8_t t); - uint16x4_t psubush (uint16x4_t s, uint16x4_t t); - uint8x8_t psubusb (uint8x8_t s, uint8x8_t t); - uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t); - uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t); - uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t); - int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t); - int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t); - int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t); - uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t); - uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t); - uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t); - int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t); - int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t); - int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t); - -* Menu: - -* Paired-Single Arithmetic:: -* Paired-Single Built-in Functions:: -* MIPS-3D Built-in Functions:: - - -File: gcc.info, Node: Paired-Single Arithmetic, Next: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions - -6.57.15.1 Paired-Single Arithmetic -.................................. - -The table below lists the 'v2sf' operations for which hardware support -exists. 'a', 'b' and 'c' are 'v2sf' values and 'x' is an integral -value. - -C code MIPS instruction -'a + b' 'add.ps' -'a - b' 'sub.ps' -'-a' 'neg.ps' -'a * b' 'mul.ps' -'a * b + c' 'madd.ps' -'a * b - c' 'msub.ps' -'-(a * b + c)' 'nmadd.ps' -'-(a * b - c)' 'nmsub.ps' -'x ? a : b' 'movn.ps'/'movz.ps' - - Note that the multiply-accumulate instructions can be disabled using -the command-line option '-mno-fused-madd'. - - -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 - -6.57.15.2 Paired-Single Built-in Functions -.......................................... - -The following paired-single functions map directly to a particular MIPS -instruction. Please refer to the architecture specification for details -on what each instruction does. - -'v2sf __builtin_mips_pll_ps (v2sf, v2sf)' - Pair lower lower ('pll.ps'). - -'v2sf __builtin_mips_pul_ps (v2sf, v2sf)' - Pair upper lower ('pul.ps'). - -'v2sf __builtin_mips_plu_ps (v2sf, v2sf)' - Pair lower upper ('plu.ps'). - -'v2sf __builtin_mips_puu_ps (v2sf, v2sf)' - Pair upper upper ('puu.ps'). - -'v2sf __builtin_mips_cvt_ps_s (float, float)' - Convert pair to paired single ('cvt.ps.s'). - -'float __builtin_mips_cvt_s_pl (v2sf)' - Convert pair lower to single ('cvt.s.pl'). - -'float __builtin_mips_cvt_s_pu (v2sf)' - Convert pair upper to single ('cvt.s.pu'). - -'v2sf __builtin_mips_abs_ps (v2sf)' - Absolute value ('abs.ps'). - -'v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)' - Align variable ('alnv.ps'). - - _Note:_ The value of the third parameter must be 0 or 4 modulo 8, - otherwise the result is unpredictable. Please read the instruction - description for details. - - The following multi-instruction functions are also available. In each -case, COND can be any of the 16 floating-point conditions: 'f', 'un', -'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl', -'lt', 'nge', 'le' or 'ngt'. - -'v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' -'v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' - Conditional move based on floating-point comparison ('c.COND.ps', - 'movt.ps'/'movf.ps'). - - The 'movt' functions return the value X computed by: - - c.COND.ps CC,A,B - mov.ps X,C - movt.ps X,D,CC - - The 'movf' functions are similar but use 'movf.ps' instead of - 'movt.ps'. - -'int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)' -'int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)' - Comparison of two paired-single values ('c.COND.ps', - 'bc1t'/'bc1f'). - - These functions compare A and B using 'c.COND.ps' and return either - the upper or lower half of the result. For example: - - v2sf a, b; - if (__builtin_mips_upper_c_eq_ps (a, b)) - upper_halves_are_equal (); - else - upper_halves_are_unequal (); - - if (__builtin_mips_lower_c_eq_ps (a, b)) - lower_halves_are_equal (); - else - lower_halves_are_unequal (); - - -File: gcc.info, Node: MIPS-3D Built-in Functions, Prev: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions - -6.57.15.3 MIPS-3D Built-in Functions -.................................... - -The MIPS-3D Application-Specific Extension (ASE) includes additional -paired-single instructions that are designed to improve the performance -of 3D graphics operations. Support for these instructions is controlled -by the '-mips3d' command-line option. - - The functions listed below map directly to a particular MIPS-3D -instruction. Please refer to the architecture specification for more -details on what each instruction does. - -'v2sf __builtin_mips_addr_ps (v2sf, v2sf)' - Reduction add ('addr.ps'). - -'v2sf __builtin_mips_mulr_ps (v2sf, v2sf)' - Reduction multiply ('mulr.ps'). - -'v2sf __builtin_mips_cvt_pw_ps (v2sf)' - Convert paired single to paired word ('cvt.pw.ps'). - -'v2sf __builtin_mips_cvt_ps_pw (v2sf)' - Convert paired word to paired single ('cvt.ps.pw'). - -'float __builtin_mips_recip1_s (float)' -'double __builtin_mips_recip1_d (double)' -'v2sf __builtin_mips_recip1_ps (v2sf)' - Reduced-precision reciprocal (sequence step 1) ('recip1.FMT'). - -'float __builtin_mips_recip2_s (float, float)' -'double __builtin_mips_recip2_d (double, double)' -'v2sf __builtin_mips_recip2_ps (v2sf, v2sf)' - Reduced-precision reciprocal (sequence step 2) ('recip2.FMT'). - -'float __builtin_mips_rsqrt1_s (float)' -'double __builtin_mips_rsqrt1_d (double)' -'v2sf __builtin_mips_rsqrt1_ps (v2sf)' - Reduced-precision reciprocal square root (sequence step 1) - ('rsqrt1.FMT'). - -'float __builtin_mips_rsqrt2_s (float, float)' -'double __builtin_mips_rsqrt2_d (double, double)' -'v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)' - Reduced-precision reciprocal square root (sequence step 2) - ('rsqrt2.FMT'). - - The following multi-instruction functions are also available. In each -case, COND can be any of the 16 floating-point conditions: 'f', 'un', -'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl', -'lt', 'nge', 'le' or 'ngt'. - -'int __builtin_mips_cabs_COND_s (float A, float B)' -'int __builtin_mips_cabs_COND_d (double A, double B)' - Absolute comparison of two scalar values ('cabs.COND.FMT', - 'bc1t'/'bc1f'). - - These functions compare A and B using 'cabs.COND.s' or - 'cabs.COND.d' and return the result as a boolean value. For - example: - - float a, b; - if (__builtin_mips_cabs_eq_s (a, b)) - true (); - else - false (); - -'int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)' -'int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)' - Absolute comparison of two paired-single values ('cabs.COND.ps', - 'bc1t'/'bc1f'). - - These functions compare A and B using 'cabs.COND.ps' and return - either the upper or lower half of the result. For example: - - v2sf a, b; - if (__builtin_mips_upper_cabs_eq_ps (a, b)) - upper_halves_are_equal (); - else - upper_halves_are_unequal (); - - if (__builtin_mips_lower_cabs_eq_ps (a, b)) - lower_halves_are_equal (); - else - lower_halves_are_unequal (); - -'v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' -'v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' - Conditional move based on absolute comparison ('cabs.COND.ps', - 'movt.ps'/'movf.ps'). - - The 'movt' functions return the value X computed by: - - cabs.COND.ps CC,A,B - mov.ps X,C - movt.ps X,D,CC - - The 'movf' functions are similar but use 'movf.ps' instead of - 'movt.ps'. - -'int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)' -'int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)' -'int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)' -'int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)' - Comparison of two paired-single values ('c.COND.ps'/'cabs.COND.ps', - 'bc1any2t'/'bc1any2f'). - - These functions compare A and B using 'c.COND.ps' or - 'cabs.COND.ps'. The 'any' forms return true if either result is - true and the 'all' forms return true if both results are true. For - example: - - v2sf a, b; - if (__builtin_mips_any_c_eq_ps (a, b)) - one_is_true (); - else - both_are_false (); - - if (__builtin_mips_all_c_eq_ps (a, b)) - both_are_true (); - else - one_is_false (); - -'int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' -'int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' -'int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' -'int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' - Comparison of four paired-single values - ('c.COND.ps'/'cabs.COND.ps', 'bc1any4t'/'bc1any4f'). - - These functions use 'c.COND.ps' or 'cabs.COND.ps' to compare A with - B and to compare C with D. The 'any' forms return true if any of - the four results are true and the 'all' forms return true if all - four results are true. For example: - - v2sf a, b, c, d; - if (__builtin_mips_any_c_eq_4s (a, b, c, d)) - some_are_true (); - else - all_are_false (); - - if (__builtin_mips_all_c_eq_4s (a, b, c, d)) - all_are_true (); - else - some_are_false (); - - -File: gcc.info, Node: Other MIPS Built-in Functions, Next: MSP430 Built-in Functions, Prev: MIPS Loongson Built-in Functions, Up: Target Builtins - -6.57.16 Other MIPS Built-in Functions -------------------------------------- - -GCC provides other MIPS-specific built-in functions: - -'void __builtin_mips_cache (int OP, const volatile void *ADDR)' - Insert a 'cache' instruction with operands OP and ADDR. GCC - defines the preprocessor macro '___GCC_HAVE_BUILTIN_MIPS_CACHE' - when this function is available. - -'unsigned int __builtin_mips_get_fcsr (void)' -'void __builtin_mips_set_fcsr (unsigned int VALUE)' - Get and set the contents of the floating-point control and status - register (FPU control register 31). These functions are only - available in hard-float code but can be called in both MIPS16 and - non-MIPS16 contexts. - - '__builtin_mips_set_fcsr' can be used to change any bit of the - register except the condition codes, which GCC assumes are - preserved. - - -File: gcc.info, Node: MSP430 Built-in Functions, Next: NDS32 Built-in Functions, Prev: Other MIPS Built-in Functions, Up: Target Builtins - -6.57.17 MSP430 Built-in Functions ---------------------------------- - -GCC provides a couple of special builtin functions to aid in the writing -of interrupt handlers in C. - -'__bic_SR_register_on_exit (int MASK)' - This clears the indicated bits in the saved copy of the status - register currently residing on the stack. This only works inside - interrupt handlers and the changes to the status register will only - take affect once the handler returns. - -'__bis_SR_register_on_exit (int MASK)' - This sets the indicated bits in the saved copy of the status - register currently residing on the stack. This only works inside - interrupt handlers and the changes to the status register will only - take affect once the handler returns. - - -File: gcc.info, Node: NDS32 Built-in Functions, Next: picoChip Built-in Functions, Prev: MSP430 Built-in Functions, Up: Target Builtins - -6.57.18 NDS32 Built-in Functions --------------------------------- - -These built-in functions are available for the NDS32 target: - - -- Built-in Function: void __builtin_nds32_isync (int *ADDR) - Insert an ISYNC instruction into the instruction stream where ADDR - is an instruction address for serialization. - - -- Built-in Function: void __builtin_nds32_isb (void) - Insert an ISB instruction into the instruction stream. - - -- Built-in Function: int __builtin_nds32_mfsr (int SR) - Return the content of a system register which is mapped by SR. - - -- Built-in Function: int __builtin_nds32_mfusr (int USR) - Return the content of a user space register which is mapped by USR. - - -- Built-in Function: void __builtin_nds32_mtsr (int VALUE, int SR) - Move the VALUE to a system register which is mapped by SR. - - -- Built-in Function: void __builtin_nds32_mtusr (int VALUE, int USR) - Move the VALUE to a user space register which is mapped by USR. - - -- Built-in Function: void __builtin_nds32_setgie_en (void) - Enable global interrupt. - - -- Built-in Function: void __builtin_nds32_setgie_dis (void) - Disable global interrupt. - - -File: gcc.info, Node: picoChip Built-in Functions, Next: PowerPC Built-in Functions, Prev: NDS32 Built-in Functions, Up: Target Builtins - -6.57.19 picoChip Built-in Functions ------------------------------------ - -GCC provides an interface to selected machine instructions from the -picoChip instruction set. - -'int __builtin_sbc (int VALUE)' - Sign bit count. Return the number of consecutive bits in VALUE - that have the same value as the sign bit. The result is the number - of leading sign bits minus one, giving the number of redundant sign - bits in VALUE. - -'int __builtin_byteswap (int VALUE)' - Byte swap. Return the result of swapping the upper and lower bytes - of VALUE. - -'int __builtin_brev (int VALUE)' - Bit reversal. Return the result of reversing the bits in VALUE. - Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so - on. - -'int __builtin_adds (int X, int Y)' - Saturating addition. Return the result of adding X and Y, storing - the value 32767 if the result overflows. - -'int __builtin_subs (int X, int Y)' - Saturating subtraction. Return the result of subtracting Y from X, - storing the value -32768 if the result overflows. - -'void __builtin_halt (void)' - Halt. The processor stops execution. This built-in is useful for - implementing assertions. - - -File: gcc.info, Node: PowerPC Built-in Functions, Next: PowerPC AltiVec/VSX Built-in Functions, Prev: picoChip Built-in Functions, Up: Target Builtins - -6.57.20 PowerPC Built-in Functions ----------------------------------- - -These built-in functions are available for the PowerPC family of -processors: - float __builtin_recipdivf (float, float); - float __builtin_rsqrtf (float); - double __builtin_recipdiv (double, double); - double __builtin_rsqrt (double); - long __builtin_bpermd (long, long); - uint64_t __builtin_ppc_get_timebase (); - unsigned long __builtin_ppc_mftb (); - - The 'vec_rsqrt', '__builtin_rsqrt', and '__builtin_rsqrtf' functions -generate multiple instructions to implement the reciprocal sqrt -functionality using reciprocal sqrt estimate instructions. - - The '__builtin_recipdiv', and '__builtin_recipdivf' functions generate -multiple instructions to implement division using the reciprocal -estimate instructions. - - The '__builtin_ppc_get_timebase' and '__builtin_ppc_mftb' functions -generate instructions to read the Time Base Register. The -'__builtin_ppc_get_timebase' function may generate multiple instructions -and always returns the 64 bits of the Time Base Register. The -'__builtin_ppc_mftb' function always generates one instruction and -returns the Time Base Register value as an unsigned long, throwing away -the most significant word on 32-bit environments. - - -File: gcc.info, Node: PowerPC AltiVec/VSX Built-in Functions, Next: PowerPC Hardware Transactional Memory Built-in Functions, Prev: PowerPC Built-in Functions, Up: Target Builtins - -6.57.21 PowerPC AltiVec Built-in Functions ------------------------------------------- - -GCC provides an interface for the PowerPC family of processors to access -the AltiVec operations described in Motorola's AltiVec Programming -Interface Manual. The interface is made available by including -'<altivec.h>' and using '-maltivec' and '-mabi=altivec'. The interface -supports the following vector types. - - vector unsigned char - vector signed char - vector bool char - - vector unsigned short - vector signed short - vector bool short - vector pixel - - vector unsigned int - vector signed int - vector bool int - vector float - - If '-mvsx' is used the following additional vector types are -implemented. - - vector unsigned long - vector signed long - vector double - - The long types are only implemented for 64-bit code generation, and the -long type is only used in the floating point/integer conversion -instructions. - - GCC's implementation of the high-level language interface available -from C and C++ code differs from Motorola's documentation in several -ways. - - * A vector constant is a list of constant expressions within curly - braces. - - * A vector initializer requires no cast if the vector constant is of - the same type as the variable it is initializing. - - * If 'signed' or 'unsigned' is omitted, the signedness of the vector - type is the default signedness of the base type. The default - varies depending on the operating system, so a portable program - should always specify the signedness. - - * Compiling with '-maltivec' adds keywords '__vector', 'vector', - '__pixel', 'pixel', '__bool' and 'bool'. When compiling ISO C, the - context-sensitive substitution of the keywords 'vector', 'pixel' - and 'bool' is disabled. To use them, you must include - '<altivec.h>' instead. - - * GCC allows using a 'typedef' name as the type specifier for a - vector type. - - * For C, overloaded functions are implemented with macros so the - following does not work: - - vec_add ((vector signed int){1, 2, 3, 4}, foo); - - Since 'vec_add' is a macro, the vector constant in the example is - treated as four separate arguments. Wrap the entire argument in - parentheses for this to work. - - _Note:_ Only the '<altivec.h>' interface is supported. Internally, GCC -uses built-in functions to achieve the functionality in the -aforementioned header file, but they are not supported and are subject -to change without notice. - - The following interfaces are supported for the generic and specific -AltiVec operations and the AltiVec predicates. In cases where there is -a direct mapping between generic and specific operations, only the -generic names are shown here, although the specific operations can also -be used. - - Arguments that are documented as 'const int' require literal integral -values within the range required for that operation. - - vector signed char vec_abs (vector signed char); - vector signed short vec_abs (vector signed short); - vector signed int vec_abs (vector signed int); - vector float vec_abs (vector float); - - vector signed char vec_abss (vector signed char); - vector signed short vec_abss (vector signed short); - vector signed int vec_abss (vector signed int); - - vector signed char vec_add (vector bool char, vector signed char); - vector signed char vec_add (vector signed char, vector bool char); - vector signed char vec_add (vector signed char, vector signed char); - vector unsigned char vec_add (vector bool char, vector unsigned char); - vector unsigned char vec_add (vector unsigned char, vector bool char); - vector unsigned char vec_add (vector unsigned char, - vector unsigned char); - vector signed short vec_add (vector bool short, vector signed short); - vector signed short vec_add (vector signed short, vector bool short); - vector signed short vec_add (vector signed short, vector signed short); - vector unsigned short vec_add (vector bool short, - vector unsigned short); - vector unsigned short vec_add (vector unsigned short, - vector bool short); - vector unsigned short vec_add (vector unsigned short, - vector unsigned short); - vector signed int vec_add (vector bool int, vector signed int); - vector signed int vec_add (vector signed int, vector bool int); - vector signed int vec_add (vector signed int, vector signed int); - vector unsigned int vec_add (vector bool int, vector unsigned int); - vector unsigned int vec_add (vector unsigned int, vector bool int); - vector unsigned int vec_add (vector unsigned int, vector unsigned int); - vector float vec_add (vector float, vector float); - - vector float vec_vaddfp (vector float, vector float); - - vector signed int vec_vadduwm (vector bool int, vector signed int); - vector signed int vec_vadduwm (vector signed int, vector bool int); - vector signed int vec_vadduwm (vector signed int, vector signed int); - vector unsigned int vec_vadduwm (vector bool int, vector unsigned int); - vector unsigned int vec_vadduwm (vector unsigned int, vector bool int); - vector unsigned int vec_vadduwm (vector unsigned int, - vector unsigned int); - - vector signed short vec_vadduhm (vector bool short, - vector signed short); - vector signed short vec_vadduhm (vector signed short, - vector bool short); - vector signed short vec_vadduhm (vector signed short, - vector signed short); - vector unsigned short vec_vadduhm (vector bool short, - vector unsigned short); - vector unsigned short vec_vadduhm (vector unsigned short, - vector bool short); - vector unsigned short vec_vadduhm (vector unsigned short, - vector unsigned short); - - vector signed char vec_vaddubm (vector bool char, vector signed char); - vector signed char vec_vaddubm (vector signed char, vector bool char); - vector signed char vec_vaddubm (vector signed char, vector signed char); - vector unsigned char vec_vaddubm (vector bool char, - vector unsigned char); - vector unsigned char vec_vaddubm (vector unsigned char, - vector bool char); - vector unsigned char vec_vaddubm (vector unsigned char, - vector unsigned char); - - vector unsigned int vec_addc (vector unsigned int, vector unsigned int); - - vector unsigned char vec_adds (vector bool char, vector unsigned char); - vector unsigned char vec_adds (vector unsigned char, vector bool char); - vector unsigned char vec_adds (vector unsigned char, - vector unsigned char); - vector signed char vec_adds (vector bool char, vector signed char); - vector signed char vec_adds (vector signed char, vector bool char); - vector signed char vec_adds (vector signed char, vector signed char); - vector unsigned short vec_adds (vector bool short, - vector unsigned short); - vector unsigned short vec_adds (vector unsigned short, - vector bool short); - vector unsigned short vec_adds (vector unsigned short, - vector unsigned short); - vector signed short vec_adds (vector bool short, vector signed short); - vector signed short vec_adds (vector signed short, vector bool short); - vector signed short vec_adds (vector signed short, vector signed short); - vector unsigned int vec_adds (vector bool int, vector unsigned int); - vector unsigned int vec_adds (vector unsigned int, vector bool int); - vector unsigned int vec_adds (vector unsigned int, vector unsigned int); - vector signed int vec_adds (vector bool int, vector signed int); - vector signed int vec_adds (vector signed int, vector bool int); - vector signed int vec_adds (vector signed int, vector signed int); - - vector signed int vec_vaddsws (vector bool int, vector signed int); - vector signed int vec_vaddsws (vector signed int, vector bool int); - vector signed int vec_vaddsws (vector signed int, vector signed int); - - vector unsigned int vec_vadduws (vector bool int, vector unsigned int); - vector unsigned int vec_vadduws (vector unsigned int, vector bool int); - vector unsigned int vec_vadduws (vector unsigned int, - vector unsigned int); - - vector signed short vec_vaddshs (vector bool short, - vector signed short); - vector signed short vec_vaddshs (vector signed short, - vector bool short); - vector signed short vec_vaddshs (vector signed short, - vector signed short); - - vector unsigned short vec_vadduhs (vector bool short, - vector unsigned short); - vector unsigned short vec_vadduhs (vector unsigned short, - vector bool short); - vector unsigned short vec_vadduhs (vector unsigned short, - vector unsigned short); - - vector signed char vec_vaddsbs (vector bool char, vector signed char); - vector signed char vec_vaddsbs (vector signed char, vector bool char); - vector signed char vec_vaddsbs (vector signed char, vector signed char); - - vector unsigned char vec_vaddubs (vector bool char, - vector unsigned char); - vector unsigned char vec_vaddubs (vector unsigned char, - vector bool char); - vector unsigned char vec_vaddubs (vector unsigned char, - vector unsigned char); - - vector float vec_and (vector float, vector float); - vector float vec_and (vector float, vector bool int); - vector float vec_and (vector bool int, vector float); - vector bool int vec_and (vector bool int, vector bool int); - vector signed int vec_and (vector bool int, vector signed int); - vector signed int vec_and (vector signed int, vector bool int); - vector signed int vec_and (vector signed int, vector signed int); - vector unsigned int vec_and (vector bool int, vector unsigned int); - vector unsigned int vec_and (vector unsigned int, vector bool int); - vector unsigned int vec_and (vector unsigned int, vector unsigned int); - vector bool short vec_and (vector bool short, vector bool short); - vector signed short vec_and (vector bool short, vector signed short); - vector signed short vec_and (vector signed short, vector bool short); - vector signed short vec_and (vector signed short, vector signed short); - vector unsigned short vec_and (vector bool short, - vector unsigned short); - vector unsigned short vec_and (vector unsigned short, - vector bool short); - vector unsigned short vec_and (vector unsigned short, - vector unsigned short); - vector signed char vec_and (vector bool char, vector signed char); - vector bool char vec_and (vector bool char, vector bool char); - vector signed char vec_and (vector signed char, vector bool char); - vector signed char vec_and (vector signed char, vector signed char); - vector unsigned char vec_and (vector bool char, vector unsigned char); - vector unsigned char vec_and (vector unsigned char, vector bool char); - vector unsigned char vec_and (vector unsigned char, - vector unsigned char); - - vector float vec_andc (vector float, vector float); - vector float vec_andc (vector float, vector bool int); - vector float vec_andc (vector bool int, vector float); - vector bool int vec_andc (vector bool int, vector bool int); - vector signed int vec_andc (vector bool int, vector signed int); - vector signed int vec_andc (vector signed int, vector bool int); - vector signed int vec_andc (vector signed int, vector signed int); - vector unsigned int vec_andc (vector bool int, vector unsigned int); - vector unsigned int vec_andc (vector unsigned int, vector bool int); - vector unsigned int vec_andc (vector unsigned int, vector unsigned int); - vector bool short vec_andc (vector bool short, vector bool short); - vector signed short vec_andc (vector bool short, vector signed short); - vector signed short vec_andc (vector signed short, vector bool short); - vector signed short vec_andc (vector signed short, vector signed short); - vector unsigned short vec_andc (vector bool short, - vector unsigned short); - vector unsigned short vec_andc (vector unsigned short, - vector bool short); - vector unsigned short vec_andc (vector unsigned short, - vector unsigned short); - vector signed char vec_andc (vector bool char, vector signed char); - vector bool char vec_andc (vector bool char, vector bool char); - vector signed char vec_andc (vector signed char, vector bool char); - vector signed char vec_andc (vector signed char, vector signed char); - vector unsigned char vec_andc (vector bool char, vector unsigned char); - vector unsigned char vec_andc (vector unsigned char, vector bool char); - vector unsigned char vec_andc (vector unsigned char, - vector unsigned char); - - vector unsigned char vec_avg (vector unsigned char, - vector unsigned char); - vector signed char vec_avg (vector signed char, vector signed char); - vector unsigned short vec_avg (vector unsigned short, - vector unsigned short); - vector signed short vec_avg (vector signed short, vector signed short); - vector unsigned int vec_avg (vector unsigned int, vector unsigned int); - vector signed int vec_avg (vector signed int, vector signed int); - - vector signed int vec_vavgsw (vector signed int, vector signed int); - - vector unsigned int vec_vavguw (vector unsigned int, - vector unsigned int); - - vector signed short vec_vavgsh (vector signed short, - vector signed short); - - vector unsigned short vec_vavguh (vector unsigned short, - vector unsigned short); - - vector signed char vec_vavgsb (vector signed char, vector signed char); - - vector unsigned char vec_vavgub (vector unsigned char, - vector unsigned char); - - vector float vec_copysign (vector float); - - vector float vec_ceil (vector float); - - vector signed int vec_cmpb (vector float, vector float); - - vector bool char vec_cmpeq (vector signed char, vector signed char); - vector bool char vec_cmpeq (vector unsigned char, vector unsigned char); - vector bool short vec_cmpeq (vector signed short, vector signed short); - vector bool short vec_cmpeq (vector unsigned short, - vector unsigned short); - vector bool int vec_cmpeq (vector signed int, vector signed int); - vector bool int vec_cmpeq (vector unsigned int, vector unsigned int); - vector bool int vec_cmpeq (vector float, vector float); - - vector bool int vec_vcmpeqfp (vector float, vector float); - - vector bool int vec_vcmpequw (vector signed int, vector signed int); - vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int); - - vector bool short vec_vcmpequh (vector signed short, - vector signed short); - vector bool short vec_vcmpequh (vector unsigned short, - vector unsigned short); - - vector bool char vec_vcmpequb (vector signed char, vector signed char); - vector bool char vec_vcmpequb (vector unsigned char, - vector unsigned char); - - vector bool int vec_cmpge (vector float, vector float); - - vector bool char vec_cmpgt (vector unsigned char, vector unsigned char); - vector bool char vec_cmpgt (vector signed char, vector signed char); - vector bool short vec_cmpgt (vector unsigned short, - vector unsigned short); - vector bool short vec_cmpgt (vector signed short, vector signed short); - vector bool int vec_cmpgt (vector unsigned int, vector unsigned int); - vector bool int vec_cmpgt (vector signed int, vector signed int); - vector bool int vec_cmpgt (vector float, vector float); - - vector bool int vec_vcmpgtfp (vector float, vector float); - - vector bool int vec_vcmpgtsw (vector signed int, vector signed int); - - vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int); - - vector bool short vec_vcmpgtsh (vector signed short, - vector signed short); - - vector bool short vec_vcmpgtuh (vector unsigned short, - vector unsigned short); - - vector bool char vec_vcmpgtsb (vector signed char, vector signed char); - - vector bool char vec_vcmpgtub (vector unsigned char, - vector unsigned char); - - vector bool int vec_cmple (vector float, vector float); - - vector bool char vec_cmplt (vector unsigned char, vector unsigned char); - vector bool char vec_cmplt (vector signed char, vector signed char); - vector bool short vec_cmplt (vector unsigned short, - vector unsigned short); - vector bool short vec_cmplt (vector signed short, vector signed short); - vector bool int vec_cmplt (vector unsigned int, vector unsigned int); - vector bool int vec_cmplt (vector signed int, vector signed int); - vector bool int vec_cmplt (vector float, vector float); - - vector float vec_ctf (vector unsigned int, const int); - vector float vec_ctf (vector signed int, const int); - - vector float vec_vcfsx (vector signed int, const int); - - vector float vec_vcfux (vector unsigned int, const int); - - vector signed int vec_cts (vector float, const int); - - vector unsigned int vec_ctu (vector float, const int); - - void vec_dss (const int); - - void vec_dssall (void); - - void vec_dst (const vector unsigned char *, int, const int); - void vec_dst (const vector signed char *, int, const int); - void vec_dst (const vector bool char *, int, const int); - void vec_dst (const vector unsigned short *, int, const int); - void vec_dst (const vector signed short *, int, const int); - void vec_dst (const vector bool short *, int, const int); - void vec_dst (const vector pixel *, int, const int); - void vec_dst (const vector unsigned int *, int, const int); - void vec_dst (const vector signed int *, int, const int); - void vec_dst (const vector bool int *, int, const int); - void vec_dst (const vector float *, int, const int); - void vec_dst (const unsigned char *, int, const int); - void vec_dst (const signed char *, int, const int); - void vec_dst (const unsigned short *, int, const int); - void vec_dst (const short *, int, const int); - void vec_dst (const unsigned int *, int, const int); - void vec_dst (const int *, int, const int); - void vec_dst (const unsigned long *, int, const int); - void vec_dst (const long *, int, const int); - void vec_dst (const float *, int, const int); - - void vec_dstst (const vector unsigned char *, int, const int); - void vec_dstst (const vector signed char *, int, const int); - void vec_dstst (const vector bool char *, int, const int); - void vec_dstst (const vector unsigned short *, int, const int); - void vec_dstst (const vector signed short *, int, const int); - void vec_dstst (const vector bool short *, int, const int); - void vec_dstst (const vector pixel *, int, const int); - void vec_dstst (const vector unsigned int *, int, const int); - void vec_dstst (const vector signed int *, int, const int); - void vec_dstst (const vector bool int *, int, const int); - void vec_dstst (const vector float *, int, const int); - void vec_dstst (const unsigned char *, int, const int); - void vec_dstst (const signed char *, int, const int); - void vec_dstst (const unsigned short *, int, const int); - void vec_dstst (const short *, int, const int); - void vec_dstst (const unsigned int *, int, const int); - void vec_dstst (const int *, int, const int); - void vec_dstst (const unsigned long *, int, const int); - void vec_dstst (const long *, int, const int); - void vec_dstst (const float *, int, const int); - - void vec_dststt (const vector unsigned char *, int, const int); - void vec_dststt (const vector signed char *, int, const int); - void vec_dststt (const vector bool char *, int, const int); - void vec_dststt (const vector unsigned short *, int, const int); - void vec_dststt (const vector signed short *, int, const int); - void vec_dststt (const vector bool short *, int, const int); - void vec_dststt (const vector pixel *, int, const int); - void vec_dststt (const vector unsigned int *, int, const int); - void vec_dststt (const vector signed int *, int, const int); - void vec_dststt (const vector bool int *, int, const int); - void vec_dststt (const vector float *, int, const int); - void vec_dststt (const unsigned char *, int, const int); - void vec_dststt (const signed char *, int, const int); - void vec_dststt (const unsigned short *, int, const int); - void vec_dststt (const short *, int, const int); - void vec_dststt (const unsigned int *, int, const int); - void vec_dststt (const int *, int, const int); - void vec_dststt (const unsigned long *, int, const int); - void vec_dststt (const long *, int, const int); - void vec_dststt (const float *, int, const int); - - void vec_dstt (const vector unsigned char *, int, const int); - void vec_dstt (const vector signed char *, int, const int); - void vec_dstt (const vector bool char *, int, const int); - void vec_dstt (const vector unsigned short *, int, const int); - void vec_dstt (const vector signed short *, int, const int); - void vec_dstt (const vector bool short *, int, const int); - void vec_dstt (const vector pixel *, int, const int); - void vec_dstt (const vector unsigned int *, int, const int); - void vec_dstt (const vector signed int *, int, const int); - void vec_dstt (const vector bool int *, int, const int); - void vec_dstt (const vector float *, int, const int); - void vec_dstt (const unsigned char *, int, const int); - void vec_dstt (const signed char *, int, const int); - void vec_dstt (const unsigned short *, int, const int); - void vec_dstt (const short *, int, const int); - void vec_dstt (const unsigned int *, int, const int); - void vec_dstt (const int *, int, const int); - void vec_dstt (const unsigned long *, int, const int); - void vec_dstt (const long *, int, const int); - void vec_dstt (const float *, int, const int); - - vector float vec_expte (vector float); - - vector float vec_floor (vector float); - - vector float vec_ld (int, const vector float *); - vector float vec_ld (int, const float *); - vector bool int vec_ld (int, const vector bool int *); - vector signed int vec_ld (int, const vector signed int *); - vector signed int vec_ld (int, const int *); - vector signed int vec_ld (int, const long *); - vector unsigned int vec_ld (int, const vector unsigned int *); - vector unsigned int vec_ld (int, const unsigned int *); - vector unsigned int vec_ld (int, const unsigned long *); - vector bool short vec_ld (int, const vector bool short *); - vector pixel vec_ld (int, const vector pixel *); - vector signed short vec_ld (int, const vector signed short *); - vector signed short vec_ld (int, const short *); - vector unsigned short vec_ld (int, const vector unsigned short *); - vector unsigned short vec_ld (int, const unsigned short *); - vector bool char vec_ld (int, const vector bool char *); - vector signed char vec_ld (int, const vector signed char *); - vector signed char vec_ld (int, const signed char *); - vector unsigned char vec_ld (int, const vector unsigned char *); - vector unsigned char vec_ld (int, const unsigned char *); - - vector signed char vec_lde (int, const signed char *); - vector unsigned char vec_lde (int, const unsigned char *); - vector signed short vec_lde (int, const short *); - vector unsigned short vec_lde (int, const unsigned short *); - vector float vec_lde (int, const float *); - vector signed int vec_lde (int, const int *); - vector unsigned int vec_lde (int, const unsigned int *); - vector signed int vec_lde (int, const long *); - vector unsigned int vec_lde (int, const unsigned long *); - - vector float vec_lvewx (int, float *); - vector signed int vec_lvewx (int, int *); - vector unsigned int vec_lvewx (int, unsigned int *); - vector signed int vec_lvewx (int, long *); - vector unsigned int vec_lvewx (int, unsigned long *); - - vector signed short vec_lvehx (int, short *); - vector unsigned short vec_lvehx (int, unsigned short *); - - vector signed char vec_lvebx (int, char *); - vector unsigned char vec_lvebx (int, unsigned char *); - - vector float vec_ldl (int, const vector float *); - vector float vec_ldl (int, const float *); - vector bool int vec_ldl (int, const vector bool int *); - vector signed int vec_ldl (int, const vector signed int *); - vector signed int vec_ldl (int, const int *); - vector signed int vec_ldl (int, const long *); - vector unsigned int vec_ldl (int, const vector unsigned int *); - vector unsigned int vec_ldl (int, const unsigned int *); - vector unsigned int vec_ldl (int, const unsigned long *); - vector bool short vec_ldl (int, const vector bool short *); - vector pixel vec_ldl (int, const vector pixel *); - vector signed short vec_ldl (int, const vector signed short *); - vector signed short vec_ldl (int, const short *); - vector unsigned short vec_ldl (int, const vector unsigned short *); - vector unsigned short vec_ldl (int, const unsigned short *); - vector bool char vec_ldl (int, const vector bool char *); - vector signed char vec_ldl (int, const vector signed char *); - vector signed char vec_ldl (int, const signed char *); - vector unsigned char vec_ldl (int, const vector unsigned char *); - vector unsigned char vec_ldl (int, const unsigned char *); - - vector float vec_loge (vector float); - - vector unsigned char vec_lvsl (int, const volatile unsigned char *); - vector unsigned char vec_lvsl (int, const volatile signed char *); - vector unsigned char vec_lvsl (int, const volatile unsigned short *); - vector unsigned char vec_lvsl (int, const volatile short *); - vector unsigned char vec_lvsl (int, const volatile unsigned int *); - vector unsigned char vec_lvsl (int, const volatile int *); - vector unsigned char vec_lvsl (int, const volatile unsigned long *); - vector unsigned char vec_lvsl (int, const volatile long *); - vector unsigned char vec_lvsl (int, const volatile float *); - - vector unsigned char vec_lvsr (int, const volatile unsigned char *); - vector unsigned char vec_lvsr (int, const volatile signed char *); - vector unsigned char vec_lvsr (int, const volatile unsigned short *); - vector unsigned char vec_lvsr (int, const volatile short *); - vector unsigned char vec_lvsr (int, const volatile unsigned int *); - vector unsigned char vec_lvsr (int, const volatile int *); - vector unsigned char vec_lvsr (int, const volatile unsigned long *); - vector unsigned char vec_lvsr (int, const volatile long *); - vector unsigned char vec_lvsr (int, const volatile float *); - - vector float vec_madd (vector float, vector float, vector float); - - vector signed short vec_madds (vector signed short, - vector signed short, - vector signed short); - - vector unsigned char vec_max (vector bool char, vector unsigned char); - vector unsigned char vec_max (vector unsigned char, vector bool char); - vector unsigned char vec_max (vector unsigned char, - vector unsigned char); - vector signed char vec_max (vector bool char, vector signed char); - vector signed char vec_max (vector signed char, vector bool char); - vector signed char vec_max (vector signed char, vector signed char); - vector unsigned short vec_max (vector bool short, - vector unsigned short); - vector unsigned short vec_max (vector unsigned short, - vector bool short); - vector unsigned short vec_max (vector unsigned short, - vector unsigned short); - vector signed short vec_max (vector bool short, vector signed short); - vector signed short vec_max (vector signed short, vector bool short); - vector signed short vec_max (vector signed short, vector signed short); - vector unsigned int vec_max (vector bool int, vector unsigned int); - vector unsigned int vec_max (vector unsigned int, vector bool int); - vector unsigned int vec_max (vector unsigned int, vector unsigned int); - vector signed int vec_max (vector bool int, vector signed int); - vector signed int vec_max (vector signed int, vector bool int); - vector signed int vec_max (vector signed int, vector signed int); - vector float vec_max (vector float, vector float); - - vector float vec_vmaxfp (vector float, vector float); - - vector signed int vec_vmaxsw (vector bool int, vector signed int); - vector signed int vec_vmaxsw (vector signed int, vector bool int); - vector signed int vec_vmaxsw (vector signed int, vector signed int); - - vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int); - vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int); - vector unsigned int vec_vmaxuw (vector unsigned int, - vector unsigned int); - - vector signed short vec_vmaxsh (vector bool short, vector signed short); - vector signed short vec_vmaxsh (vector signed short, vector bool short); - vector signed short vec_vmaxsh (vector signed short, - vector signed short); - - vector unsigned short vec_vmaxuh (vector bool short, - vector unsigned short); - vector unsigned short vec_vmaxuh (vector unsigned short, - vector bool short); - vector unsigned short vec_vmaxuh (vector unsigned short, - vector unsigned short); - - vector signed char vec_vmaxsb (vector bool char, vector signed char); - vector signed char vec_vmaxsb (vector signed char, vector bool char); - vector signed char vec_vmaxsb (vector signed char, vector signed char); - - vector unsigned char vec_vmaxub (vector bool char, - vector unsigned char); - vector unsigned char vec_vmaxub (vector unsigned char, - vector bool char); - vector unsigned char vec_vmaxub (vector unsigned char, - vector unsigned char); - - vector bool char vec_mergeh (vector bool char, vector bool char); - vector signed char vec_mergeh (vector signed char, vector signed char); - vector unsigned char vec_mergeh (vector unsigned char, - vector unsigned char); - vector bool short vec_mergeh (vector bool short, vector bool short); - vector pixel vec_mergeh (vector pixel, vector pixel); - vector signed short vec_mergeh (vector signed short, - vector signed short); - vector unsigned short vec_mergeh (vector unsigned short, - vector unsigned short); - vector float vec_mergeh (vector float, vector float); - vector bool int vec_mergeh (vector bool int, vector bool int); - vector signed int vec_mergeh (vector signed int, vector signed int); - vector unsigned int vec_mergeh (vector unsigned int, - vector unsigned int); - - vector float vec_vmrghw (vector float, vector float); - vector bool int vec_vmrghw (vector bool int, vector bool int); - vector signed int vec_vmrghw (vector signed int, vector signed int); - vector unsigned int vec_vmrghw (vector unsigned int, - vector unsigned int); - - vector bool short vec_vmrghh (vector bool short, vector bool short); - vector signed short vec_vmrghh (vector signed short, - vector signed short); - vector unsigned short vec_vmrghh (vector unsigned short, - vector unsigned short); - vector pixel vec_vmrghh (vector pixel, vector pixel); - - vector bool char vec_vmrghb (vector bool char, vector bool char); - vector signed char vec_vmrghb (vector signed char, vector signed char); - vector unsigned char vec_vmrghb (vector unsigned char, - vector unsigned char); - - vector bool char vec_mergel (vector bool char, vector bool char); - vector signed char vec_mergel (vector signed char, vector signed char); - vector unsigned char vec_mergel (vector unsigned char, - vector unsigned char); - vector bool short vec_mergel (vector bool short, vector bool short); - vector pixel vec_mergel (vector pixel, vector pixel); - vector signed short vec_mergel (vector signed short, - vector signed short); - vector unsigned short vec_mergel (vector unsigned short, - vector unsigned short); - vector float vec_mergel (vector float, vector float); - vector bool int vec_mergel (vector bool int, vector bool int); - vector signed int vec_mergel (vector signed int, vector signed int); - vector unsigned int vec_mergel (vector unsigned int, - vector unsigned int); - - vector float vec_vmrglw (vector float, vector float); - vector signed int vec_vmrglw (vector signed int, vector signed int); - vector unsigned int vec_vmrglw (vector unsigned int, - vector unsigned int); - vector bool int vec_vmrglw (vector bool int, vector bool int); - - vector bool short vec_vmrglh (vector bool short, vector bool short); - vector signed short vec_vmrglh (vector signed short, - vector signed short); - vector unsigned short vec_vmrglh (vector unsigned short, - vector unsigned short); - vector pixel vec_vmrglh (vector pixel, vector pixel); - - vector bool char vec_vmrglb (vector bool char, vector bool char); - vector signed char vec_vmrglb (vector signed char, vector signed char); - vector unsigned char vec_vmrglb (vector unsigned char, - vector unsigned char); - - vector unsigned short vec_mfvscr (void); - - vector unsigned char vec_min (vector bool char, vector unsigned char); - vector unsigned char vec_min (vector unsigned char, vector bool char); - vector unsigned char vec_min (vector unsigned char, - vector unsigned char); - vector signed char vec_min (vector bool char, vector signed char); - vector signed char vec_min (vector signed char, vector bool char); - vector signed char vec_min (vector signed char, vector signed char); - vector unsigned short vec_min (vector bool short, - vector unsigned short); - vector unsigned short vec_min (vector unsigned short, - vector bool short); - vector unsigned short vec_min (vector unsigned short, - vector unsigned short); - vector signed short vec_min (vector bool short, vector signed short); - vector signed short vec_min (vector signed short, vector bool short); - vector signed short vec_min (vector signed short, vector signed short); - vector unsigned int vec_min (vector bool int, vector unsigned int); - vector unsigned int vec_min (vector unsigned int, vector bool int); - vector unsigned int vec_min (vector unsigned int, vector unsigned int); - vector signed int vec_min (vector bool int, vector signed int); - vector signed int vec_min (vector signed int, vector bool int); - vector signed int vec_min (vector signed int, vector signed int); - vector float vec_min (vector float, vector float); - - vector float vec_vminfp (vector float, vector float); - - vector signed int vec_vminsw (vector bool int, vector signed int); - vector signed int vec_vminsw (vector signed int, vector bool int); - vector signed int vec_vminsw (vector signed int, vector signed int); - - vector unsigned int vec_vminuw (vector bool int, vector unsigned int); - vector unsigned int vec_vminuw (vector unsigned int, vector bool int); - vector unsigned int vec_vminuw (vector unsigned int, - vector unsigned int); - - vector signed short vec_vminsh (vector bool short, vector signed short); - vector signed short vec_vminsh (vector signed short, vector bool short); - vector signed short vec_vminsh (vector signed short, - vector signed short); - - vector unsigned short vec_vminuh (vector bool short, - vector unsigned short); - vector unsigned short vec_vminuh (vector unsigned short, - vector bool short); - vector unsigned short vec_vminuh (vector unsigned short, - vector unsigned short); - - vector signed char vec_vminsb (vector bool char, vector signed char); - vector signed char vec_vminsb (vector signed char, vector bool char); - vector signed char vec_vminsb (vector signed char, vector signed char); - - vector unsigned char vec_vminub (vector bool char, - vector unsigned char); - vector unsigned char vec_vminub (vector unsigned char, - vector bool char); - vector unsigned char vec_vminub (vector unsigned char, - vector unsigned char); - - vector signed short vec_mladd (vector signed short, - vector signed short, - vector signed short); - vector signed short vec_mladd (vector signed short, - vector unsigned short, - vector unsigned short); - vector signed short vec_mladd (vector unsigned short, - vector signed short, - vector signed short); - vector unsigned short vec_mladd (vector unsigned short, - vector unsigned short, - vector unsigned short); - - vector signed short vec_mradds (vector signed short, - vector signed short, - vector signed short); - - vector unsigned int vec_msum (vector unsigned char, - vector unsigned char, - vector unsigned int); - vector signed int vec_msum (vector signed char, - vector unsigned char, - vector signed int); - vector unsigned int vec_msum (vector unsigned short, - vector unsigned short, - vector unsigned int); - vector signed int vec_msum (vector signed short, - vector signed short, - vector signed int); - - vector signed int vec_vmsumshm (vector signed short, - vector signed short, - vector signed int); - - vector unsigned int vec_vmsumuhm (vector unsigned short, - vector unsigned short, - vector unsigned int); - - vector signed int vec_vmsummbm (vector signed char, - vector unsigned char, - vector signed int); - - vector unsigned int vec_vmsumubm (vector unsigned char, - vector unsigned char, - vector unsigned int); - - vector unsigned int vec_msums (vector unsigned short, - vector unsigned short, - vector unsigned int); - vector signed int vec_msums (vector signed short, - vector signed short, - vector signed int); - - vector signed int vec_vmsumshs (vector signed short, - vector signed short, - vector signed int); - - vector unsigned int vec_vmsumuhs (vector unsigned short, - vector unsigned short, - vector unsigned int); - - void vec_mtvscr (vector signed int); - void vec_mtvscr (vector unsigned int); - void vec_mtvscr (vector bool int); - void vec_mtvscr (vector signed short); - void vec_mtvscr (vector unsigned short); - void vec_mtvscr (vector bool short); - void vec_mtvscr (vector pixel); - void vec_mtvscr (vector signed char); - void vec_mtvscr (vector unsigned char); - void vec_mtvscr (vector bool char); - - vector unsigned short vec_mule (vector unsigned char, - vector unsigned char); - vector signed short vec_mule (vector signed char, - vector signed char); - vector unsigned int vec_mule (vector unsigned short, - vector unsigned short); - vector signed int vec_mule (vector signed short, vector signed short); - - vector signed int vec_vmulesh (vector signed short, - vector signed short); - - vector unsigned int vec_vmuleuh (vector unsigned short, - vector unsigned short); - - vector signed short vec_vmulesb (vector signed char, - vector signed char); - - vector unsigned short vec_vmuleub (vector unsigned char, - vector unsigned char); - - vector unsigned short vec_mulo (vector unsigned char, - vector unsigned char); - vector signed short vec_mulo (vector signed char, vector signed char); - vector unsigned int vec_mulo (vector unsigned short, - vector unsigned short); - vector signed int vec_mulo (vector signed short, vector signed short); - - vector signed int vec_vmulosh (vector signed short, - vector signed short); - - vector unsigned int vec_vmulouh (vector unsigned short, - vector unsigned short); - - vector signed short vec_vmulosb (vector signed char, - vector signed char); - - vector unsigned short vec_vmuloub (vector unsigned char, - vector unsigned char); - - vector float vec_nmsub (vector float, vector float, vector float); - - vector float vec_nor (vector float, vector float); - vector signed int vec_nor (vector signed int, vector signed int); - vector unsigned int vec_nor (vector unsigned int, vector unsigned int); - vector bool int vec_nor (vector bool int, vector bool int); - vector signed short vec_nor (vector signed short, vector signed short); - vector unsigned short vec_nor (vector unsigned short, - vector unsigned short); - vector bool short vec_nor (vector bool short, vector bool short); - vector signed char vec_nor (vector signed char, vector signed char); - vector unsigned char vec_nor (vector unsigned char, - vector unsigned char); - vector bool char vec_nor (vector bool char, vector bool char); - - vector float vec_or (vector float, vector float); - vector float vec_or (vector float, vector bool int); - vector float vec_or (vector bool int, vector float); - vector bool int vec_or (vector bool int, vector bool int); - vector signed int vec_or (vector bool int, vector signed int); - vector signed int vec_or (vector signed int, vector bool int); - vector signed int vec_or (vector signed int, vector signed int); - vector unsigned int vec_or (vector bool int, vector unsigned int); - vector unsigned int vec_or (vector unsigned int, vector bool int); - vector unsigned int vec_or (vector unsigned int, vector unsigned int); - vector bool short vec_or (vector bool short, vector bool short); - vector signed short vec_or (vector bool short, vector signed short); - vector signed short vec_or (vector signed short, vector bool short); - vector signed short vec_or (vector signed short, vector signed short); - vector unsigned short vec_or (vector bool short, vector unsigned short); - vector unsigned short vec_or (vector unsigned short, vector bool short); - vector unsigned short vec_or (vector unsigned short, - vector unsigned short); - vector signed char vec_or (vector bool char, vector signed char); - vector bool char vec_or (vector bool char, vector bool char); - vector signed char vec_or (vector signed char, vector bool char); - vector signed char vec_or (vector signed char, vector signed char); - vector unsigned char vec_or (vector bool char, vector unsigned char); - vector unsigned char vec_or (vector unsigned char, vector bool char); - vector unsigned char vec_or (vector unsigned char, - vector unsigned char); - - vector signed char vec_pack (vector signed short, vector signed short); - vector unsigned char vec_pack (vector unsigned short, - vector unsigned short); - vector bool char vec_pack (vector bool short, vector bool short); - vector signed short vec_pack (vector signed int, vector signed int); - vector unsigned short vec_pack (vector unsigned int, - vector unsigned int); - vector bool short vec_pack (vector bool int, vector bool int); - - vector bool short vec_vpkuwum (vector bool int, vector bool int); - vector signed short vec_vpkuwum (vector signed int, vector signed int); - vector unsigned short vec_vpkuwum (vector unsigned int, - vector unsigned int); - - vector bool char vec_vpkuhum (vector bool short, vector bool short); - vector signed char vec_vpkuhum (vector signed short, - vector signed short); - vector unsigned char vec_vpkuhum (vector unsigned short, - vector unsigned short); - - vector pixel vec_packpx (vector unsigned int, vector unsigned int); - - vector unsigned char vec_packs (vector unsigned short, - vector unsigned short); - vector signed char vec_packs (vector signed short, vector signed short); - vector unsigned short vec_packs (vector unsigned int, - vector unsigned int); - vector signed short vec_packs (vector signed int, vector signed int); - - vector signed short vec_vpkswss (vector signed int, vector signed int); - - vector unsigned short vec_vpkuwus (vector unsigned int, - vector unsigned int); - - vector signed char vec_vpkshss (vector signed short, - vector signed short); - - vector unsigned char vec_vpkuhus (vector unsigned short, - vector unsigned short); - - vector unsigned char vec_packsu (vector unsigned short, - vector unsigned short); - vector unsigned char vec_packsu (vector signed short, - vector signed short); - vector unsigned short vec_packsu (vector unsigned int, - vector unsigned int); - vector unsigned short vec_packsu (vector signed int, vector signed int); - - vector unsigned short vec_vpkswus (vector signed int, - vector signed int); - - vector unsigned char vec_vpkshus (vector signed short, - vector signed short); - - vector float vec_perm (vector float, - vector float, - vector unsigned char); - vector signed int vec_perm (vector signed int, - vector signed int, - vector unsigned char); - vector unsigned int vec_perm (vector unsigned int, - vector unsigned int, - vector unsigned char); - vector bool int vec_perm (vector bool int, - vector bool int, - vector unsigned char); - vector signed short vec_perm (vector signed short, - vector signed short, - vector unsigned char); - vector unsigned short vec_perm (vector unsigned short, - vector unsigned short, - vector unsigned char); - vector bool short vec_perm (vector bool short, - vector bool short, - vector unsigned char); - vector pixel vec_perm (vector pixel, - vector pixel, - vector unsigned char); - vector signed char vec_perm (vector signed char, - vector signed char, - vector unsigned char); - vector unsigned char vec_perm (vector unsigned char, - vector unsigned char, - vector unsigned char); - vector bool char vec_perm (vector bool char, - vector bool char, - vector unsigned char); - - vector float vec_re (vector float); - - vector signed char vec_rl (vector signed char, - vector unsigned char); - vector unsigned char vec_rl (vector unsigned char, - vector unsigned char); - vector signed short vec_rl (vector signed short, vector unsigned short); - vector unsigned short vec_rl (vector unsigned short, - vector unsigned short); - vector signed int vec_rl (vector signed int, vector unsigned int); - vector unsigned int vec_rl (vector unsigned int, vector unsigned int); - - vector signed int vec_vrlw (vector signed int, vector unsigned int); - vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int); - - vector signed short vec_vrlh (vector signed short, - vector unsigned short); - vector unsigned short vec_vrlh (vector unsigned short, - vector unsigned short); - - vector signed char vec_vrlb (vector signed char, vector unsigned char); - vector unsigned char vec_vrlb (vector unsigned char, - vector unsigned char); - - vector float vec_round (vector float); - - vector float vec_recip (vector float, vector float); - - vector float vec_rsqrt (vector float); - - vector float vec_rsqrte (vector float); - - vector float vec_sel (vector float, vector float, vector bool int); - vector float vec_sel (vector float, vector float, vector unsigned int); - vector signed int vec_sel (vector signed int, - vector signed int, - vector bool int); - vector signed int vec_sel (vector signed int, - vector signed int, - vector unsigned int); - vector unsigned int vec_sel (vector unsigned int, - vector unsigned int, - vector bool int); - vector unsigned int vec_sel (vector unsigned int, - vector unsigned int, - vector unsigned int); - vector bool int vec_sel (vector bool int, - vector bool int, - vector bool int); - vector bool int vec_sel (vector bool int, - vector bool int, - vector unsigned int); - vector signed short vec_sel (vector signed short, - vector signed short, - vector bool short); - vector signed short vec_sel (vector signed short, - vector signed short, - vector unsigned short); - vector unsigned short vec_sel (vector unsigned short, - vector unsigned short, - vector bool short); - vector unsigned short vec_sel (vector unsigned short, - vector unsigned short, - vector unsigned short); - vector bool short vec_sel (vector bool short, - vector bool short, - vector bool short); - vector bool short vec_sel (vector bool short, - vector bool short, - vector unsigned short); - vector signed char vec_sel (vector signed char, - vector signed char, - vector bool char); - vector signed char vec_sel (vector signed char, - vector signed char, - vector unsigned char); - vector unsigned char vec_sel (vector unsigned char, - vector unsigned char, - vector bool char); - vector unsigned char vec_sel (vector unsigned char, - vector unsigned char, - vector unsigned char); - vector bool char vec_sel (vector bool char, - vector bool char, - vector bool char); - vector bool char vec_sel (vector bool char, - vector bool char, - vector unsigned char); - - vector signed char vec_sl (vector signed char, - vector unsigned char); - vector unsigned char vec_sl (vector unsigned char, - vector unsigned char); - vector signed short vec_sl (vector signed short, vector unsigned short); - vector unsigned short vec_sl (vector unsigned short, - vector unsigned short); - vector signed int vec_sl (vector signed int, vector unsigned int); - vector unsigned int vec_sl (vector unsigned int, vector unsigned int); - - vector signed int vec_vslw (vector signed int, vector unsigned int); - vector unsigned int vec_vslw (vector unsigned int, vector unsigned int); - - vector signed short vec_vslh (vector signed short, - vector unsigned short); - vector unsigned short vec_vslh (vector unsigned short, - vector unsigned short); - - vector signed char vec_vslb (vector signed char, vector unsigned char); - vector unsigned char vec_vslb (vector unsigned char, - vector unsigned char); - - vector float vec_sld (vector float, vector float, const int); - vector signed int vec_sld (vector signed int, - vector signed int, - const int); - vector unsigned int vec_sld (vector unsigned int, - vector unsigned int, - const int); - vector bool int vec_sld (vector bool int, - vector bool int, - const int); - vector signed short vec_sld (vector signed short, - vector signed short, - const int); - vector unsigned short vec_sld (vector unsigned short, - vector unsigned short, - const int); - vector bool short vec_sld (vector bool short, - vector bool short, - const int); - vector pixel vec_sld (vector pixel, - vector pixel, - const int); - vector signed char vec_sld (vector signed char, - vector signed char, - const int); - vector unsigned char vec_sld (vector unsigned char, - vector unsigned char, - const int); - vector bool char vec_sld (vector bool char, - vector bool char, - const int); - - vector signed int vec_sll (vector signed int, - vector unsigned int); - vector signed int vec_sll (vector signed int, - vector unsigned short); - vector signed int vec_sll (vector signed int, - vector unsigned char); - vector unsigned int vec_sll (vector unsigned int, - vector unsigned int); - vector unsigned int vec_sll (vector unsigned int, - vector unsigned short); - vector unsigned int vec_sll (vector unsigned int, - vector unsigned char); - vector bool int vec_sll (vector bool int, - vector unsigned int); - vector bool int vec_sll (vector bool int, - vector unsigned short); - vector bool int vec_sll (vector bool int, - vector unsigned char); - vector signed short vec_sll (vector signed short, - vector unsigned int); - vector signed short vec_sll (vector signed short, - vector unsigned short); - vector signed short vec_sll (vector signed short, - vector unsigned char); - vector unsigned short vec_sll (vector unsigned short, - vector unsigned int); - vector unsigned short vec_sll (vector unsigned short, - vector unsigned short); - vector unsigned short vec_sll (vector unsigned short, - vector unsigned char); - vector bool short vec_sll (vector bool short, vector unsigned int); - vector bool short vec_sll (vector bool short, vector unsigned short); - vector bool short vec_sll (vector bool short, vector unsigned char); - vector pixel vec_sll (vector pixel, vector unsigned int); - vector pixel vec_sll (vector pixel, vector unsigned short); - vector pixel vec_sll (vector pixel, vector unsigned char); - vector signed char vec_sll (vector signed char, vector unsigned int); - vector signed char vec_sll (vector signed char, vector unsigned short); - vector signed char vec_sll (vector signed char, vector unsigned char); - vector unsigned char vec_sll (vector unsigned char, - vector unsigned int); - vector unsigned char vec_sll (vector unsigned char, - vector unsigned short); - vector unsigned char vec_sll (vector unsigned char, - vector unsigned char); - vector bool char vec_sll (vector bool char, vector unsigned int); - vector bool char vec_sll (vector bool char, vector unsigned short); - vector bool char vec_sll (vector bool char, vector unsigned char); - - vector float vec_slo (vector float, vector signed char); - vector float vec_slo (vector float, vector unsigned char); - vector signed int vec_slo (vector signed int, vector signed char); - vector signed int vec_slo (vector signed int, vector unsigned char); - vector unsigned int vec_slo (vector unsigned int, vector signed char); - vector unsigned int vec_slo (vector unsigned int, vector unsigned char); - vector signed short vec_slo (vector signed short, vector signed char); - vector signed short vec_slo (vector signed short, vector unsigned char); - vector unsigned short vec_slo (vector unsigned short, - vector signed char); - vector unsigned short vec_slo (vector unsigned short, - vector unsigned char); - vector pixel vec_slo (vector pixel, vector signed char); - vector pixel vec_slo (vector pixel, vector unsigned char); - vector signed char vec_slo (vector signed char, vector signed char); - vector signed char vec_slo (vector signed char, vector unsigned char); - vector unsigned char vec_slo (vector unsigned char, vector signed char); - vector unsigned char vec_slo (vector unsigned char, - vector unsigned char); - - vector signed char vec_splat (vector signed char, const int); - vector unsigned char vec_splat (vector unsigned char, const int); - vector bool char vec_splat (vector bool char, const int); - vector signed short vec_splat (vector signed short, const int); - vector unsigned short vec_splat (vector unsigned short, const int); - vector bool short vec_splat (vector bool short, const int); - vector pixel vec_splat (vector pixel, const int); - vector float vec_splat (vector float, const int); - vector signed int vec_splat (vector signed int, const int); - vector unsigned int vec_splat (vector unsigned int, const int); - vector bool int vec_splat (vector bool int, const int); - - vector float vec_vspltw (vector float, const int); - vector signed int vec_vspltw (vector signed int, const int); - vector unsigned int vec_vspltw (vector unsigned int, const int); - vector bool int vec_vspltw (vector bool int, const int); - - vector bool short vec_vsplth (vector bool short, const int); - vector signed short vec_vsplth (vector signed short, const int); - vector unsigned short vec_vsplth (vector unsigned short, const int); - vector pixel vec_vsplth (vector pixel, const int); - - vector signed char vec_vspltb (vector signed char, const int); - vector unsigned char vec_vspltb (vector unsigned char, const int); - vector bool char vec_vspltb (vector bool char, const int); - - vector signed char vec_splat_s8 (const int); - - vector signed short vec_splat_s16 (const int); - - vector signed int vec_splat_s32 (const int); - - vector unsigned char vec_splat_u8 (const int); - - vector unsigned short vec_splat_u16 (const int); - - vector unsigned int vec_splat_u32 (const int); - - vector signed char vec_sr (vector signed char, vector unsigned char); - vector unsigned char vec_sr (vector unsigned char, - vector unsigned char); - vector signed short vec_sr (vector signed short, - vector unsigned short); - vector unsigned short vec_sr (vector unsigned short, - vector unsigned short); - vector signed int vec_sr (vector signed int, vector unsigned int); - vector unsigned int vec_sr (vector unsigned int, vector unsigned int); - - vector signed int vec_vsrw (vector signed int, vector unsigned int); - vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int); - - vector signed short vec_vsrh (vector signed short, - vector unsigned short); - vector unsigned short vec_vsrh (vector unsigned short, - vector unsigned short); - - vector signed char vec_vsrb (vector signed char, vector unsigned char); - vector unsigned char vec_vsrb (vector unsigned char, - vector unsigned char); - - vector signed char vec_sra (vector signed char, vector unsigned char); - vector unsigned char vec_sra (vector unsigned char, - vector unsigned char); - vector signed short vec_sra (vector signed short, - vector unsigned short); - vector unsigned short vec_sra (vector unsigned short, - vector unsigned short); - vector signed int vec_sra (vector signed int, vector unsigned int); - vector unsigned int vec_sra (vector unsigned int, vector unsigned int); - - vector signed int vec_vsraw (vector signed int, vector unsigned int); - vector unsigned int vec_vsraw (vector unsigned int, - vector unsigned int); - - vector signed short vec_vsrah (vector signed short, - vector unsigned short); - vector unsigned short vec_vsrah (vector unsigned short, - vector unsigned short); - - vector signed char vec_vsrab (vector signed char, vector unsigned char); - vector unsigned char vec_vsrab (vector unsigned char, - vector unsigned char); - - vector signed int vec_srl (vector signed int, vector unsigned int); - vector signed int vec_srl (vector signed int, vector unsigned short); - vector signed int vec_srl (vector signed int, vector unsigned char); - vector unsigned int vec_srl (vector unsigned int, vector unsigned int); - vector unsigned int vec_srl (vector unsigned int, - vector unsigned short); - vector unsigned int vec_srl (vector unsigned int, vector unsigned char); - vector bool int vec_srl (vector bool int, vector unsigned int); - vector bool int vec_srl (vector bool int, vector unsigned short); - vector bool int vec_srl (vector bool int, vector unsigned char); - vector signed short vec_srl (vector signed short, vector unsigned int); - vector signed short vec_srl (vector signed short, - vector unsigned short); - vector signed short vec_srl (vector signed short, vector unsigned char); - vector unsigned short vec_srl (vector unsigned short, - vector unsigned int); - vector unsigned short vec_srl (vector unsigned short, - vector unsigned short); - vector unsigned short vec_srl (vector unsigned short, - vector unsigned char); - vector bool short vec_srl (vector bool short, vector unsigned int); - vector bool short vec_srl (vector bool short, vector unsigned short); - vector bool short vec_srl (vector bool short, vector unsigned char); - vector pixel vec_srl (vector pixel, vector unsigned int); - vector pixel vec_srl (vector pixel, vector unsigned short); - vector pixel vec_srl (vector pixel, vector unsigned char); - vector signed char vec_srl (vector signed char, vector unsigned int); - vector signed char vec_srl (vector signed char, vector unsigned short); - vector signed char vec_srl (vector signed char, vector unsigned char); - vector unsigned char vec_srl (vector unsigned char, - vector unsigned int); - vector unsigned char vec_srl (vector unsigned char, - vector unsigned short); - vector unsigned char vec_srl (vector unsigned char, - vector unsigned char); - vector bool char vec_srl (vector bool char, vector unsigned int); - vector bool char vec_srl (vector bool char, vector unsigned short); - vector bool char vec_srl (vector bool char, vector unsigned char); - - vector float vec_sro (vector float, vector signed char); - vector float vec_sro (vector float, vector unsigned char); - vector signed int vec_sro (vector signed int, vector signed char); - vector signed int vec_sro (vector signed int, vector unsigned char); - vector unsigned int vec_sro (vector unsigned int, vector signed char); - vector unsigned int vec_sro (vector unsigned int, vector unsigned char); - vector signed short vec_sro (vector signed short, vector signed char); - vector signed short vec_sro (vector signed short, vector unsigned char); - vector unsigned short vec_sro (vector unsigned short, - vector signed char); - vector unsigned short vec_sro (vector unsigned short, - vector unsigned char); - vector pixel vec_sro (vector pixel, vector signed char); - vector pixel vec_sro (vector pixel, vector unsigned char); - vector signed char vec_sro (vector signed char, vector signed char); - vector signed char vec_sro (vector signed char, vector unsigned char); - vector unsigned char vec_sro (vector unsigned char, vector signed char); - vector unsigned char vec_sro (vector unsigned char, - vector unsigned char); - - void vec_st (vector float, int, vector float *); - void vec_st (vector float, int, float *); - void vec_st (vector signed int, int, vector signed int *); - void vec_st (vector signed int, int, int *); - void vec_st (vector unsigned int, int, vector unsigned int *); - void vec_st (vector unsigned int, int, unsigned int *); - void vec_st (vector bool int, int, vector bool int *); - void vec_st (vector bool int, int, unsigned int *); - void vec_st (vector bool int, int, int *); - void vec_st (vector signed short, int, vector signed short *); - void vec_st (vector signed short, int, short *); - void vec_st (vector unsigned short, int, vector unsigned short *); - void vec_st (vector unsigned short, int, unsigned short *); - void vec_st (vector bool short, int, vector bool short *); - void vec_st (vector bool short, int, unsigned short *); - void vec_st (vector pixel, int, vector pixel *); - void vec_st (vector pixel, int, unsigned short *); - void vec_st (vector pixel, int, short *); - void vec_st (vector bool short, int, short *); - void vec_st (vector signed char, int, vector signed char *); - void vec_st (vector signed char, int, signed char *); - void vec_st (vector unsigned char, int, vector unsigned char *); - void vec_st (vector unsigned char, int, unsigned char *); - void vec_st (vector bool char, int, vector bool char *); - void vec_st (vector bool char, int, unsigned char *); - void vec_st (vector bool char, int, signed char *); - - void vec_ste (vector signed char, int, signed char *); - void vec_ste (vector unsigned char, int, unsigned char *); - void vec_ste (vector bool char, int, signed char *); - void vec_ste (vector bool char, int, unsigned char *); - void vec_ste (vector signed short, int, short *); - void vec_ste (vector unsigned short, int, unsigned short *); - void vec_ste (vector bool short, int, short *); - void vec_ste (vector bool short, int, unsigned short *); - void vec_ste (vector pixel, int, short *); - void vec_ste (vector pixel, int, unsigned short *); - void vec_ste (vector float, int, float *); - void vec_ste (vector signed int, int, int *); - void vec_ste (vector unsigned int, int, unsigned int *); - void vec_ste (vector bool int, int, int *); - void vec_ste (vector bool int, int, unsigned int *); - - void vec_stvewx (vector float, int, float *); - void vec_stvewx (vector signed int, int, int *); - void vec_stvewx (vector unsigned int, int, unsigned int *); - void vec_stvewx (vector bool int, int, int *); - void vec_stvewx (vector bool int, int, unsigned int *); - - void vec_stvehx (vector signed short, int, short *); - void vec_stvehx (vector unsigned short, int, unsigned short *); - void vec_stvehx (vector bool short, int, short *); - void vec_stvehx (vector bool short, int, unsigned short *); - void vec_stvehx (vector pixel, int, short *); - void vec_stvehx (vector pixel, int, unsigned short *); - - void vec_stvebx (vector signed char, int, signed char *); - void vec_stvebx (vector unsigned char, int, unsigned char *); - void vec_stvebx (vector bool char, int, signed char *); - void vec_stvebx (vector bool char, int, unsigned char *); - - void vec_stl (vector float, int, vector float *); - void vec_stl (vector float, int, float *); - void vec_stl (vector signed int, int, vector signed int *); - void vec_stl (vector signed int, int, int *); - void vec_stl (vector unsigned int, int, vector unsigned int *); - void vec_stl (vector unsigned int, int, unsigned int *); - void vec_stl (vector bool int, int, vector bool int *); - void vec_stl (vector bool int, int, unsigned int *); - void vec_stl (vector bool int, int, int *); - void vec_stl (vector signed short, int, vector signed short *); - void vec_stl (vector signed short, int, short *); - void vec_stl (vector unsigned short, int, vector unsigned short *); - void vec_stl (vector unsigned short, int, unsigned short *); - void vec_stl (vector bool short, int, vector bool short *); - void vec_stl (vector bool short, int, unsigned short *); - void vec_stl (vector bool short, int, short *); - void vec_stl (vector pixel, int, vector pixel *); - void vec_stl (vector pixel, int, unsigned short *); - void vec_stl (vector pixel, int, short *); - void vec_stl (vector signed char, int, vector signed char *); - void vec_stl (vector signed char, int, signed char *); - void vec_stl (vector unsigned char, int, vector unsigned char *); - void vec_stl (vector unsigned char, int, unsigned char *); - void vec_stl (vector bool char, int, vector bool char *); - void vec_stl (vector bool char, int, unsigned char *); - void vec_stl (vector bool char, int, signed char *); - - vector signed char vec_sub (vector bool char, vector signed char); - vector signed char vec_sub (vector signed char, vector bool char); - vector signed char vec_sub (vector signed char, vector signed char); - vector unsigned char vec_sub (vector bool char, vector unsigned char); - vector unsigned char vec_sub (vector unsigned char, vector bool char); - vector unsigned char vec_sub (vector unsigned char, - vector unsigned char); - vector signed short vec_sub (vector bool short, vector signed short); - vector signed short vec_sub (vector signed short, vector bool short); - vector signed short vec_sub (vector signed short, vector signed short); - vector unsigned short vec_sub (vector bool short, - vector unsigned short); - vector unsigned short vec_sub (vector unsigned short, - vector bool short); - vector unsigned short vec_sub (vector unsigned short, - vector unsigned short); - vector signed int vec_sub (vector bool int, vector signed int); - vector signed int vec_sub (vector signed int, vector bool int); - vector signed int vec_sub (vector signed int, vector signed int); - vector unsigned int vec_sub (vector bool int, vector unsigned int); - vector unsigned int vec_sub (vector unsigned int, vector bool int); - vector unsigned int vec_sub (vector unsigned int, vector unsigned int); - vector float vec_sub (vector float, vector float); - - vector float vec_vsubfp (vector float, vector float); - - vector signed int vec_vsubuwm (vector bool int, vector signed int); - vector signed int vec_vsubuwm (vector signed int, vector bool int); - vector signed int vec_vsubuwm (vector signed int, vector signed int); - vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int); - vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int); - vector unsigned int vec_vsubuwm (vector unsigned int, - vector unsigned int); - - vector signed short vec_vsubuhm (vector bool short, - vector signed short); - vector signed short vec_vsubuhm (vector signed short, - vector bool short); - vector signed short vec_vsubuhm (vector signed short, - vector signed short); - vector unsigned short vec_vsubuhm (vector bool short, - vector unsigned short); - vector unsigned short vec_vsubuhm (vector unsigned short, - vector bool short); - vector unsigned short vec_vsubuhm (vector unsigned short, - vector unsigned short); - - vector signed char vec_vsububm (vector bool char, vector signed char); - vector signed char vec_vsububm (vector signed char, vector bool char); - vector signed char vec_vsububm (vector signed char, vector signed char); - vector unsigned char vec_vsububm (vector bool char, - vector unsigned char); - vector unsigned char vec_vsububm (vector unsigned char, - vector bool char); - vector unsigned char vec_vsububm (vector unsigned char, - vector unsigned char); - - vector unsigned int vec_subc (vector unsigned int, vector unsigned int); - - vector unsigned char vec_subs (vector bool char, vector unsigned char); - vector unsigned char vec_subs (vector unsigned char, vector bool char); - vector unsigned char vec_subs (vector unsigned char, - vector unsigned char); - vector signed char vec_subs (vector bool char, vector signed char); - vector signed char vec_subs (vector signed char, vector bool char); - vector signed char vec_subs (vector signed char, vector signed char); - vector unsigned short vec_subs (vector bool short, - vector unsigned short); - vector unsigned short vec_subs (vector unsigned short, - vector bool short); - vector unsigned short vec_subs (vector unsigned short, - vector unsigned short); - vector signed short vec_subs (vector bool short, vector signed short); - vector signed short vec_subs (vector signed short, vector bool short); - vector signed short vec_subs (vector signed short, vector signed short); - vector unsigned int vec_subs (vector bool int, vector unsigned int); - vector unsigned int vec_subs (vector unsigned int, vector bool int); - vector unsigned int vec_subs (vector unsigned int, vector unsigned int); - vector signed int vec_subs (vector bool int, vector signed int); - vector signed int vec_subs (vector signed int, vector bool int); - vector signed int vec_subs (vector signed int, vector signed int); - - vector signed int vec_vsubsws (vector bool int, vector signed int); - vector signed int vec_vsubsws (vector signed int, vector bool int); - vector signed int vec_vsubsws (vector signed int, vector signed int); - - vector unsigned int vec_vsubuws (vector bool int, vector unsigned int); - vector unsigned int vec_vsubuws (vector unsigned int, vector bool int); - vector unsigned int vec_vsubuws (vector unsigned int, - vector unsigned int); - - vector signed short vec_vsubshs (vector bool short, - vector signed short); - vector signed short vec_vsubshs (vector signed short, - vector bool short); - vector signed short vec_vsubshs (vector signed short, - vector signed short); - - vector unsigned short vec_vsubuhs (vector bool short, - vector unsigned short); - vector unsigned short vec_vsubuhs (vector unsigned short, - vector bool short); - vector unsigned short vec_vsubuhs (vector unsigned short, - vector unsigned short); - - vector signed char vec_vsubsbs (vector bool char, vector signed char); - vector signed char vec_vsubsbs (vector signed char, vector bool char); - vector signed char vec_vsubsbs (vector signed char, vector signed char); - - vector unsigned char vec_vsububs (vector bool char, - vector unsigned char); - vector unsigned char vec_vsububs (vector unsigned char, - vector bool char); - vector unsigned char vec_vsububs (vector unsigned char, - vector unsigned char); - - vector unsigned int vec_sum4s (vector unsigned char, - vector unsigned int); - vector signed int vec_sum4s (vector signed char, vector signed int); - vector signed int vec_sum4s (vector signed short, vector signed int); - - vector signed int vec_vsum4shs (vector signed short, vector signed int); - - vector signed int vec_vsum4sbs (vector signed char, vector signed int); - - vector unsigned int vec_vsum4ubs (vector unsigned char, - vector unsigned int); - - vector signed int vec_sum2s (vector signed int, vector signed int); - - vector signed int vec_sums (vector signed int, vector signed int); - - vector float vec_trunc (vector float); - - vector signed short vec_unpackh (vector signed char); - vector bool short vec_unpackh (vector bool char); - vector signed int vec_unpackh (vector signed short); - vector bool int vec_unpackh (vector bool short); - vector unsigned int vec_unpackh (vector pixel); - - vector bool int vec_vupkhsh (vector bool short); - vector signed int vec_vupkhsh (vector signed short); - - vector unsigned int vec_vupkhpx (vector pixel); - - vector bool short vec_vupkhsb (vector bool char); - vector signed short vec_vupkhsb (vector signed char); - - vector signed short vec_unpackl (vector signed char); - vector bool short vec_unpackl (vector bool char); - vector unsigned int vec_unpackl (vector pixel); - vector signed int vec_unpackl (vector signed short); - vector bool int vec_unpackl (vector bool short); - - vector unsigned int vec_vupklpx (vector pixel); - - vector bool int vec_vupklsh (vector bool short); - vector signed int vec_vupklsh (vector signed short); - - vector bool short vec_vupklsb (vector bool char); - vector signed short vec_vupklsb (vector signed char); - - vector float vec_xor (vector float, vector float); - vector float vec_xor (vector float, vector bool int); - vector float vec_xor (vector bool int, vector float); - vector bool int vec_xor (vector bool int, vector bool int); - vector signed int vec_xor (vector bool int, vector signed int); - vector signed int vec_xor (vector signed int, vector bool int); - vector signed int vec_xor (vector signed int, vector signed int); - vector unsigned int vec_xor (vector bool int, vector unsigned int); - vector unsigned int vec_xor (vector unsigned int, vector bool int); - vector unsigned int vec_xor (vector unsigned int, vector unsigned int); - vector bool short vec_xor (vector bool short, vector bool short); - vector signed short vec_xor (vector bool short, vector signed short); - vector signed short vec_xor (vector signed short, vector bool short); - vector signed short vec_xor (vector signed short, vector signed short); - vector unsigned short vec_xor (vector bool short, - vector unsigned short); - vector unsigned short vec_xor (vector unsigned short, - vector bool short); - vector unsigned short vec_xor (vector unsigned short, - vector unsigned short); - vector signed char vec_xor (vector bool char, vector signed char); - vector bool char vec_xor (vector bool char, vector bool char); - vector signed char vec_xor (vector signed char, vector bool char); - vector signed char vec_xor (vector signed char, vector signed char); - vector unsigned char vec_xor (vector bool char, vector unsigned char); - vector unsigned char vec_xor (vector unsigned char, vector bool char); - vector unsigned char vec_xor (vector unsigned char, - vector unsigned char); - - int vec_all_eq (vector signed char, vector bool char); - int vec_all_eq (vector signed char, vector signed char); - int vec_all_eq (vector unsigned char, vector bool char); - int vec_all_eq (vector unsigned char, vector unsigned char); - int vec_all_eq (vector bool char, vector bool char); - int vec_all_eq (vector bool char, vector unsigned char); - int vec_all_eq (vector bool char, vector signed char); - int vec_all_eq (vector signed short, vector bool short); - int vec_all_eq (vector signed short, vector signed short); - int vec_all_eq (vector unsigned short, vector bool short); - int vec_all_eq (vector unsigned short, vector unsigned short); - int vec_all_eq (vector bool short, vector bool short); - int vec_all_eq (vector bool short, vector unsigned short); - int vec_all_eq (vector bool short, vector signed short); - int vec_all_eq (vector pixel, vector pixel); - int vec_all_eq (vector signed int, vector bool int); - int vec_all_eq (vector signed int, vector signed int); - int vec_all_eq (vector unsigned int, vector bool int); - int vec_all_eq (vector unsigned int, vector unsigned int); - int vec_all_eq (vector bool int, vector bool int); - int vec_all_eq (vector bool int, vector unsigned int); - int vec_all_eq (vector bool int, vector signed int); - int vec_all_eq (vector float, vector float); - - int vec_all_ge (vector bool char, vector unsigned char); - int vec_all_ge (vector unsigned char, vector bool char); - int vec_all_ge (vector unsigned char, vector unsigned char); - int vec_all_ge (vector bool char, vector signed char); - int vec_all_ge (vector signed char, vector bool char); - int vec_all_ge (vector signed char, vector signed char); - int vec_all_ge (vector bool short, vector unsigned short); - int vec_all_ge (vector unsigned short, vector bool short); - int vec_all_ge (vector unsigned short, vector unsigned short); - int vec_all_ge (vector signed short, vector signed short); - int vec_all_ge (vector bool short, vector signed short); - int vec_all_ge (vector signed short, vector bool short); - int vec_all_ge (vector bool int, vector unsigned int); - int vec_all_ge (vector unsigned int, vector bool int); - int vec_all_ge (vector unsigned int, vector unsigned int); - int vec_all_ge (vector bool int, vector signed int); - int vec_all_ge (vector signed int, vector bool int); - int vec_all_ge (vector signed int, vector signed int); - int vec_all_ge (vector float, vector float); - - int vec_all_gt (vector bool char, vector unsigned char); - int vec_all_gt (vector unsigned char, vector bool char); - int vec_all_gt (vector unsigned char, vector unsigned char); - int vec_all_gt (vector bool char, vector signed char); - int vec_all_gt (vector signed char, vector bool char); - int vec_all_gt (vector signed char, vector signed char); - int vec_all_gt (vector bool short, vector unsigned short); - int vec_all_gt (vector unsigned short, vector bool short); - int vec_all_gt (vector unsigned short, vector unsigned short); - int vec_all_gt (vector bool short, vector signed short); - int vec_all_gt (vector signed short, vector bool short); - int vec_all_gt (vector signed short, vector signed short); - int vec_all_gt (vector bool int, vector unsigned int); - int vec_all_gt (vector unsigned int, vector bool int); - int vec_all_gt (vector unsigned int, vector unsigned int); - int vec_all_gt (vector bool int, vector signed int); - int vec_all_gt (vector signed int, vector bool int); - int vec_all_gt (vector signed int, vector signed int); - int vec_all_gt (vector float, vector float); - - int vec_all_in (vector float, vector float); - - int vec_all_le (vector bool char, vector unsigned char); - int vec_all_le (vector unsigned char, vector bool char); - int vec_all_le (vector unsigned char, vector unsigned char); - int vec_all_le (vector bool char, vector signed char); - int vec_all_le (vector signed char, vector bool char); - int vec_all_le (vector signed char, vector signed char); - int vec_all_le (vector bool short, vector unsigned short); - int vec_all_le (vector unsigned short, vector bool short); - int vec_all_le (vector unsigned short, vector unsigned short); - int vec_all_le (vector bool short, vector signed short); - int vec_all_le (vector signed short, vector bool short); - int vec_all_le (vector signed short, vector signed short); - int vec_all_le (vector bool int, vector unsigned int); - int vec_all_le (vector unsigned int, vector bool int); - int vec_all_le (vector unsigned int, vector unsigned int); - int vec_all_le (vector bool int, vector signed int); - int vec_all_le (vector signed int, vector bool int); - int vec_all_le (vector signed int, vector signed int); - int vec_all_le (vector float, vector float); - - int vec_all_lt (vector bool char, vector unsigned char); - int vec_all_lt (vector unsigned char, vector bool char); - int vec_all_lt (vector unsigned char, vector unsigned char); - int vec_all_lt (vector bool char, vector signed char); - int vec_all_lt (vector signed char, vector bool char); - int vec_all_lt (vector signed char, vector signed char); - int vec_all_lt (vector bool short, vector unsigned short); - int vec_all_lt (vector unsigned short, vector bool short); - int vec_all_lt (vector unsigned short, vector unsigned short); - int vec_all_lt (vector bool short, vector signed short); - int vec_all_lt (vector signed short, vector bool short); - int vec_all_lt (vector signed short, vector signed short); - int vec_all_lt (vector bool int, vector unsigned int); - int vec_all_lt (vector unsigned int, vector bool int); - int vec_all_lt (vector unsigned int, vector unsigned int); - int vec_all_lt (vector bool int, vector signed int); - int vec_all_lt (vector signed int, vector bool int); - int vec_all_lt (vector signed int, vector signed int); - int vec_all_lt (vector float, vector float); - - int vec_all_nan (vector float); - - int vec_all_ne (vector signed char, vector bool char); - int vec_all_ne (vector signed char, vector signed char); - int vec_all_ne (vector unsigned char, vector bool char); - int vec_all_ne (vector unsigned char, vector unsigned char); - int vec_all_ne (vector bool char, vector bool char); - int vec_all_ne (vector bool char, vector unsigned char); - int vec_all_ne (vector bool char, vector signed char); - int vec_all_ne (vector signed short, vector bool short); - int vec_all_ne (vector signed short, vector signed short); - int vec_all_ne (vector unsigned short, vector bool short); - int vec_all_ne (vector unsigned short, vector unsigned short); - int vec_all_ne (vector bool short, vector bool short); - int vec_all_ne (vector bool short, vector unsigned short); - int vec_all_ne (vector bool short, vector signed short); - int vec_all_ne (vector pixel, vector pixel); - int vec_all_ne (vector signed int, vector bool int); - int vec_all_ne (vector signed int, vector signed int); - int vec_all_ne (vector unsigned int, vector bool int); - int vec_all_ne (vector unsigned int, vector unsigned int); - int vec_all_ne (vector bool int, vector bool int); - int vec_all_ne (vector bool int, vector unsigned int); - int vec_all_ne (vector bool int, vector signed int); - int vec_all_ne (vector float, vector float); - - int vec_all_nge (vector float, vector float); - - int vec_all_ngt (vector float, vector float); - - int vec_all_nle (vector float, vector float); - - int vec_all_nlt (vector float, vector float); - - int vec_all_numeric (vector float); - - int vec_any_eq (vector signed char, vector bool char); - int vec_any_eq (vector signed char, vector signed char); - int vec_any_eq (vector unsigned char, vector bool char); - int vec_any_eq (vector unsigned char, vector unsigned char); - int vec_any_eq (vector bool char, vector bool char); - int vec_any_eq (vector bool char, vector unsigned char); - int vec_any_eq (vector bool char, vector signed char); - int vec_any_eq (vector signed short, vector bool short); - int vec_any_eq (vector signed short, vector signed short); - int vec_any_eq (vector unsigned short, vector bool short); - int vec_any_eq (vector unsigned short, vector unsigned short); - int vec_any_eq (vector bool short, vector bool short); - int vec_any_eq (vector bool short, vector unsigned short); - int vec_any_eq (vector bool short, vector signed short); - int vec_any_eq (vector pixel, vector pixel); - int vec_any_eq (vector signed int, vector bool int); - int vec_any_eq (vector signed int, vector signed int); - int vec_any_eq (vector unsigned int, vector bool int); - int vec_any_eq (vector unsigned int, vector unsigned int); - int vec_any_eq (vector bool int, vector bool int); - int vec_any_eq (vector bool int, vector unsigned int); - int vec_any_eq (vector bool int, vector signed int); - int vec_any_eq (vector float, vector float); - - int vec_any_ge (vector signed char, vector bool char); - int vec_any_ge (vector unsigned char, vector bool char); - int vec_any_ge (vector unsigned char, vector unsigned char); - int vec_any_ge (vector signed char, vector signed char); - int vec_any_ge (vector bool char, vector unsigned char); - int vec_any_ge (vector bool char, vector signed char); - int vec_any_ge (vector unsigned short, vector bool short); - int vec_any_ge (vector unsigned short, vector unsigned short); - int vec_any_ge (vector signed short, vector signed short); - int vec_any_ge (vector signed short, vector bool short); - int vec_any_ge (vector bool short, vector unsigned short); - int vec_any_ge (vector bool short, vector signed short); - int vec_any_ge (vector signed int, vector bool int); - int vec_any_ge (vector unsigned int, vector bool int); - int vec_any_ge (vector unsigned int, vector unsigned int); - int vec_any_ge (vector signed int, vector signed int); - int vec_any_ge (vector bool int, vector unsigned int); - int vec_any_ge (vector bool int, vector signed int); - int vec_any_ge (vector float, vector float); - - int vec_any_gt (vector bool char, vector unsigned char); - int vec_any_gt (vector unsigned char, vector bool char); - int vec_any_gt (vector unsigned char, vector unsigned char); - int vec_any_gt (vector bool char, vector signed char); - int vec_any_gt (vector signed char, vector bool char); - int vec_any_gt (vector signed char, vector signed char); - int vec_any_gt (vector bool short, vector unsigned short); - int vec_any_gt (vector unsigned short, vector bool short); - int vec_any_gt (vector unsigned short, vector unsigned short); - int vec_any_gt (vector bool short, vector signed short); - int vec_any_gt (vector signed short, vector bool short); - int vec_any_gt (vector signed short, vector signed short); - int vec_any_gt (vector bool int, vector unsigned int); - int vec_any_gt (vector unsigned int, vector bool int); - int vec_any_gt (vector unsigned int, vector unsigned int); - int vec_any_gt (vector bool int, vector signed int); - int vec_any_gt (vector signed int, vector bool int); - int vec_any_gt (vector signed int, vector signed int); - int vec_any_gt (vector float, vector float); - - int vec_any_le (vector bool char, vector unsigned char); - int vec_any_le (vector unsigned char, vector bool char); - int vec_any_le (vector unsigned char, vector unsigned char); - int vec_any_le (vector bool char, vector signed char); - int vec_any_le (vector signed char, vector bool char); - int vec_any_le (vector signed char, vector signed char); - int vec_any_le (vector bool short, vector unsigned short); - int vec_any_le (vector unsigned short, vector bool short); - int vec_any_le (vector unsigned short, vector unsigned short); - int vec_any_le (vector bool short, vector signed short); - int vec_any_le (vector signed short, vector bool short); - int vec_any_le (vector signed short, vector signed short); - int vec_any_le (vector bool int, vector unsigned int); - int vec_any_le (vector unsigned int, vector bool int); - int vec_any_le (vector unsigned int, vector unsigned int); - int vec_any_le (vector bool int, vector signed int); - int vec_any_le (vector signed int, vector bool int); - int vec_any_le (vector signed int, vector signed int); - int vec_any_le (vector float, vector float); - - int vec_any_lt (vector bool char, vector unsigned char); - int vec_any_lt (vector unsigned char, vector bool char); - int vec_any_lt (vector unsigned char, vector unsigned char); - int vec_any_lt (vector bool char, vector signed char); - int vec_any_lt (vector signed char, vector bool char); - int vec_any_lt (vector signed char, vector signed char); - int vec_any_lt (vector bool short, vector unsigned short); - int vec_any_lt (vector unsigned short, vector bool short); - int vec_any_lt (vector unsigned short, vector unsigned short); - int vec_any_lt (vector bool short, vector signed short); - int vec_any_lt (vector signed short, vector bool short); - int vec_any_lt (vector signed short, vector signed short); - int vec_any_lt (vector bool int, vector unsigned int); - int vec_any_lt (vector unsigned int, vector bool int); - int vec_any_lt (vector unsigned int, vector unsigned int); - int vec_any_lt (vector bool int, vector signed int); - int vec_any_lt (vector signed int, vector bool int); - int vec_any_lt (vector signed int, vector signed int); - int vec_any_lt (vector float, vector float); - - int vec_any_nan (vector float); - - int vec_any_ne (vector signed char, vector bool char); - int vec_any_ne (vector signed char, vector signed char); - int vec_any_ne (vector unsigned char, vector bool char); - int vec_any_ne (vector unsigned char, vector unsigned char); - int vec_any_ne (vector bool char, vector bool char); - int vec_any_ne (vector bool char, vector unsigned char); - int vec_any_ne (vector bool char, vector signed char); - int vec_any_ne (vector signed short, vector bool short); - int vec_any_ne (vector signed short, vector signed short); - int vec_any_ne (vector unsigned short, vector bool short); - int vec_any_ne (vector unsigned short, vector unsigned short); - int vec_any_ne (vector bool short, vector bool short); - int vec_any_ne (vector bool short, vector unsigned short); - int vec_any_ne (vector bool short, vector signed short); - int vec_any_ne (vector pixel, vector pixel); - int vec_any_ne (vector signed int, vector bool int); - int vec_any_ne (vector signed int, vector signed int); - int vec_any_ne (vector unsigned int, vector bool int); - int vec_any_ne (vector unsigned int, vector unsigned int); - int vec_any_ne (vector bool int, vector bool int); - int vec_any_ne (vector bool int, vector unsigned int); - int vec_any_ne (vector bool int, vector signed int); - int vec_any_ne (vector float, vector float); - - int vec_any_nge (vector float, vector float); - - int vec_any_ngt (vector float, vector float); - - int vec_any_nle (vector float, vector float); - - int vec_any_nlt (vector float, vector float); - - int vec_any_numeric (vector float); - - int vec_any_out (vector float, vector float); - - If the vector/scalar (VSX) instruction set is available, the following -additional functions are available: - - vector double vec_abs (vector double); - vector double vec_add (vector double, vector double); - vector double vec_and (vector double, vector double); - vector double vec_and (vector double, vector bool long); - vector double vec_and (vector bool long, vector double); - vector double vec_andc (vector double, vector double); - vector double vec_andc (vector double, vector bool long); - vector double vec_andc (vector bool long, vector double); - vector double vec_ceil (vector double); - vector bool long vec_cmpeq (vector double, vector double); - vector bool long vec_cmpge (vector double, vector double); - vector bool long vec_cmpgt (vector double, vector double); - vector bool long vec_cmple (vector double, vector double); - vector bool long vec_cmplt (vector double, vector double); - vector float vec_div (vector float, vector float); - vector double vec_div (vector double, vector double); - vector double vec_floor (vector double); - vector double vec_ld (int, const vector double *); - vector double vec_ld (int, const double *); - vector double vec_ldl (int, const vector double *); - vector double vec_ldl (int, const double *); - vector unsigned char vec_lvsl (int, const volatile double *); - vector unsigned char vec_lvsr (int, const volatile double *); - vector double vec_madd (vector double, vector double, vector double); - vector double vec_max (vector double, vector double); - vector double vec_min (vector double, vector double); - vector float vec_msub (vector float, vector float, vector float); - vector double vec_msub (vector double, vector double, vector double); - vector float vec_mul (vector float, vector float); - vector double vec_mul (vector double, vector double); - vector float vec_nearbyint (vector float); - vector double vec_nearbyint (vector double); - vector float vec_nmadd (vector float, vector float, vector float); - vector double vec_nmadd (vector double, vector double, vector double); - vector double vec_nmsub (vector double, vector double, vector double); - vector double vec_nor (vector double, vector double); - vector double vec_or (vector double, vector double); - vector double vec_or (vector double, vector bool long); - vector double vec_or (vector bool long, vector double); - vector double vec_perm (vector double, - vector double, - vector unsigned char); - vector double vec_rint (vector double); - vector double vec_recip (vector double, vector double); - vector double vec_rsqrt (vector double); - vector double vec_rsqrte (vector double); - vector double vec_sel (vector double, vector double, vector bool long); - vector double vec_sel (vector double, vector double, vector unsigned long); - vector double vec_sub (vector double, vector double); - vector float vec_sqrt (vector float); - vector double vec_sqrt (vector double); - void vec_st (vector double, int, vector double *); - void vec_st (vector double, int, double *); - vector double vec_trunc (vector double); - vector double vec_xor (vector double, vector double); - vector double vec_xor (vector double, vector bool long); - vector double vec_xor (vector bool long, vector double); - int vec_all_eq (vector double, vector double); - int vec_all_ge (vector double, vector double); - int vec_all_gt (vector double, vector double); - int vec_all_le (vector double, vector double); - int vec_all_lt (vector double, vector double); - int vec_all_nan (vector double); - int vec_all_ne (vector double, vector double); - int vec_all_nge (vector double, vector double); - int vec_all_ngt (vector double, vector double); - int vec_all_nle (vector double, vector double); - int vec_all_nlt (vector double, vector double); - int vec_all_numeric (vector double); - int vec_any_eq (vector double, vector double); - int vec_any_ge (vector double, vector double); - int vec_any_gt (vector double, vector double); - int vec_any_le (vector double, vector double); - int vec_any_lt (vector double, vector double); - int vec_any_nan (vector double); - int vec_any_ne (vector double, vector double); - int vec_any_nge (vector double, vector double); - int vec_any_ngt (vector double, vector double); - int vec_any_nle (vector double, vector double); - int vec_any_nlt (vector double, vector double); - int vec_any_numeric (vector double); - - vector double vec_vsx_ld (int, const vector double *); - vector double vec_vsx_ld (int, const double *); - vector float vec_vsx_ld (int, const vector float *); - vector float vec_vsx_ld (int, const float *); - vector bool int vec_vsx_ld (int, const vector bool int *); - vector signed int vec_vsx_ld (int, const vector signed int *); - vector signed int vec_vsx_ld (int, const int *); - vector signed int vec_vsx_ld (int, const long *); - vector unsigned int vec_vsx_ld (int, const vector unsigned int *); - vector unsigned int vec_vsx_ld (int, const unsigned int *); - vector unsigned int vec_vsx_ld (int, const unsigned long *); - vector bool short vec_vsx_ld (int, const vector bool short *); - vector pixel vec_vsx_ld (int, const vector pixel *); - vector signed short vec_vsx_ld (int, const vector signed short *); - vector signed short vec_vsx_ld (int, const short *); - vector unsigned short vec_vsx_ld (int, const vector unsigned short *); - vector unsigned short vec_vsx_ld (int, const unsigned short *); - vector bool char vec_vsx_ld (int, const vector bool char *); - vector signed char vec_vsx_ld (int, const vector signed char *); - vector signed char vec_vsx_ld (int, const signed char *); - vector unsigned char vec_vsx_ld (int, const vector unsigned char *); - vector unsigned char vec_vsx_ld (int, const unsigned char *); - - void vec_vsx_st (vector double, int, vector double *); - void vec_vsx_st (vector double, int, double *); - void vec_vsx_st (vector float, int, vector float *); - void vec_vsx_st (vector float, int, float *); - void vec_vsx_st (vector signed int, int, vector signed int *); - void vec_vsx_st (vector signed int, int, int *); - void vec_vsx_st (vector unsigned int, int, vector unsigned int *); - void vec_vsx_st (vector unsigned int, int, unsigned int *); - void vec_vsx_st (vector bool int, int, vector bool int *); - void vec_vsx_st (vector bool int, int, unsigned int *); - void vec_vsx_st (vector bool int, int, int *); - void vec_vsx_st (vector signed short, int, vector signed short *); - void vec_vsx_st (vector signed short, int, short *); - void vec_vsx_st (vector unsigned short, int, vector unsigned short *); - void vec_vsx_st (vector unsigned short, int, unsigned short *); - void vec_vsx_st (vector bool short, int, vector bool short *); - void vec_vsx_st (vector bool short, int, unsigned short *); - void vec_vsx_st (vector pixel, int, vector pixel *); - void vec_vsx_st (vector pixel, int, unsigned short *); - void vec_vsx_st (vector pixel, int, short *); - void vec_vsx_st (vector bool short, int, short *); - void vec_vsx_st (vector signed char, int, vector signed char *); - void vec_vsx_st (vector signed char, int, signed char *); - void vec_vsx_st (vector unsigned char, int, vector unsigned char *); - void vec_vsx_st (vector unsigned char, int, unsigned char *); - void vec_vsx_st (vector bool char, int, vector bool char *); - void vec_vsx_st (vector bool char, int, unsigned char *); - void vec_vsx_st (vector bool char, int, signed char *); - - vector double vec_xxpermdi (vector double, vector double, int); - vector float vec_xxpermdi (vector float, vector float, int); - vector long long vec_xxpermdi (vector long long, vector long long, int); - vector unsigned long long vec_xxpermdi (vector unsigned long long, - vector unsigned long long, int); - vector int vec_xxpermdi (vector int, vector int, int); - vector unsigned int vec_xxpermdi (vector unsigned int, - vector unsigned int, int); - vector short vec_xxpermdi (vector short, vector short, int); - vector unsigned short vec_xxpermdi (vector unsigned short, - vector unsigned short, int); - vector signed char vec_xxpermdi (vector signed char, vector signed char, int); - vector unsigned char vec_xxpermdi (vector unsigned char, - vector unsigned char, int); - - vector double vec_xxsldi (vector double, vector double, int); - vector float vec_xxsldi (vector float, vector float, int); - vector long long vec_xxsldi (vector long long, vector long long, int); - vector unsigned long long vec_xxsldi (vector unsigned long long, - vector unsigned long long, int); - vector int vec_xxsldi (vector int, vector int, int); - vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int); - vector short vec_xxsldi (vector short, vector short, int); - vector unsigned short vec_xxsldi (vector unsigned short, - vector unsigned short, int); - vector signed char vec_xxsldi (vector signed char, vector signed char, int); - vector unsigned char vec_xxsldi (vector unsigned char, - vector unsigned char, int); - - Note that the 'vec_ld' and 'vec_st' built-in functions always generate -the AltiVec 'LVX' and 'STVX' instructions even if the VSX instruction -set is available. The 'vec_vsx_ld' and 'vec_vsx_st' built-in functions -always generate the VSX 'LXVD2X', 'LXVW4X', 'STXVD2X', and 'STXVW4X' -instructions. - - If the ISA 2.07 additions to the vector/scalar (power8-vector) -instruction set is available, the following additional functions are -available for both 32-bit and 64-bit targets. For 64-bit targets, you -can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG -instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of -VECTOR UNSIGNED LONG LONG. - - vector long long vec_abs (vector long long); - - vector long long vec_add (vector long long, vector long long); - vector unsigned long long vec_add (vector unsigned long long, - vector unsigned long long); - - int vec_all_eq (vector long long, vector long long); - int vec_all_ge (vector long long, vector long long); - int vec_all_gt (vector long long, vector long long); - int vec_all_le (vector long long, vector long long); - int vec_all_lt (vector long long, vector long long); - int vec_all_ne (vector long long, vector long long); - int vec_any_eq (vector long long, vector long long); - int vec_any_ge (vector long long, vector long long); - int vec_any_gt (vector long long, vector long long); - int vec_any_le (vector long long, vector long long); - int vec_any_lt (vector long long, vector long long); - int vec_any_ne (vector long long, vector long long); - - vector long long vec_eqv (vector long long, vector long long); - vector long long vec_eqv (vector bool long long, vector long long); - vector long long vec_eqv (vector long long, vector bool long long); - vector unsigned long long vec_eqv (vector unsigned long long, - vector unsigned long long); - vector unsigned long long vec_eqv (vector bool long long, - vector unsigned long long); - vector unsigned long long vec_eqv (vector unsigned long long, - vector bool long long); - vector int vec_eqv (vector int, vector int); - vector int vec_eqv (vector bool int, vector int); - vector int vec_eqv (vector int, vector bool int); - vector unsigned int vec_eqv (vector unsigned int, vector unsigned int); - vector unsigned int vec_eqv (vector bool unsigned int, - vector unsigned int); - vector unsigned int vec_eqv (vector unsigned int, - vector bool unsigned int); - vector short vec_eqv (vector short, vector short); - vector short vec_eqv (vector bool short, vector short); - vector short vec_eqv (vector short, vector bool short); - vector unsigned short vec_eqv (vector unsigned short, vector unsigned short); - vector unsigned short vec_eqv (vector bool unsigned short, - vector unsigned short); - vector unsigned short vec_eqv (vector unsigned short, - vector bool unsigned short); - vector signed char vec_eqv (vector signed char, vector signed char); - vector signed char vec_eqv (vector bool signed char, vector signed char); - vector signed char vec_eqv (vector signed char, vector bool signed char); - vector unsigned char vec_eqv (vector unsigned char, vector unsigned char); - vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char); - vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char); - - vector long long vec_max (vector long long, vector long long); - vector unsigned long long vec_max (vector unsigned long long, - vector unsigned long long); - - vector long long vec_min (vector long long, vector long long); - vector unsigned long long vec_min (vector unsigned long long, - vector unsigned long long); - - vector long long vec_nand (vector long long, vector long long); - vector long long vec_nand (vector bool long long, vector long long); - vector long long vec_nand (vector long long, vector bool long long); - vector unsigned long long vec_nand (vector unsigned long long, - vector unsigned long long); - vector unsigned long long vec_nand (vector bool long long, - vector unsigned long long); - vector unsigned long long vec_nand (vector unsigned long long, - vector bool long long); - vector int vec_nand (vector int, vector int); - vector int vec_nand (vector bool int, vector int); - vector int vec_nand (vector int, vector bool int); - vector unsigned int vec_nand (vector unsigned int, vector unsigned int); - vector unsigned int vec_nand (vector bool unsigned int, - vector unsigned int); - vector unsigned int vec_nand (vector unsigned int, - vector bool unsigned int); - vector short vec_nand (vector short, vector short); - vector short vec_nand (vector bool short, vector short); - vector short vec_nand (vector short, vector bool short); - vector unsigned short vec_nand (vector unsigned short, vector unsigned short); - vector unsigned short vec_nand (vector bool unsigned short, - vector unsigned short); - vector unsigned short vec_nand (vector unsigned short, - vector bool unsigned short); - vector signed char vec_nand (vector signed char, vector signed char); - vector signed char vec_nand (vector bool signed char, vector signed char); - vector signed char vec_nand (vector signed char, vector bool signed char); - vector unsigned char vec_nand (vector unsigned char, vector unsigned char); - vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char); - vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char); - - vector long long vec_orc (vector long long, vector long long); - vector long long vec_orc (vector bool long long, vector long long); - vector long long vec_orc (vector long long, vector bool long long); - vector unsigned long long vec_orc (vector unsigned long long, - vector unsigned long long); - vector unsigned long long vec_orc (vector bool long long, - vector unsigned long long); - vector unsigned long long vec_orc (vector unsigned long long, - vector bool long long); - vector int vec_orc (vector int, vector int); - vector int vec_orc (vector bool int, vector int); - vector int vec_orc (vector int, vector bool int); - vector unsigned int vec_orc (vector unsigned int, vector unsigned int); - vector unsigned int vec_orc (vector bool unsigned int, - vector unsigned int); - vector unsigned int vec_orc (vector unsigned int, - vector bool unsigned int); - vector short vec_orc (vector short, vector short); - vector short vec_orc (vector bool short, vector short); - vector short vec_orc (vector short, vector bool short); - vector unsigned short vec_orc (vector unsigned short, vector unsigned short); - vector unsigned short vec_orc (vector bool unsigned short, - vector unsigned short); - vector unsigned short vec_orc (vector unsigned short, - vector bool unsigned short); - vector signed char vec_orc (vector signed char, vector signed char); - vector signed char vec_orc (vector bool signed char, vector signed char); - vector signed char vec_orc (vector signed char, vector bool signed char); - vector unsigned char vec_orc (vector unsigned char, vector unsigned char); - vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char); - vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char); - - vector int vec_pack (vector long long, vector long long); - vector unsigned int vec_pack (vector unsigned long long, - vector unsigned long long); - vector bool int vec_pack (vector bool long long, vector bool long long); - - vector int vec_packs (vector long long, vector long long); - vector unsigned int vec_packs (vector unsigned long long, - vector unsigned long long); - - vector unsigned int vec_packsu (vector long long, vector long long); - - vector long long vec_rl (vector long long, - vector unsigned long long); - vector long long vec_rl (vector unsigned long long, - vector unsigned long long); - - vector long long vec_sl (vector long long, vector unsigned long long); - vector long long vec_sl (vector unsigned long long, - vector unsigned long long); - - vector long long vec_sr (vector long long, vector unsigned long long); - vector unsigned long long char vec_sr (vector unsigned long long, - vector unsigned long long); - - vector long long vec_sra (vector long long, vector unsigned long long); - vector unsigned long long vec_sra (vector unsigned long long, - vector unsigned long long); - - vector long long vec_sub (vector long long, vector long long); - vector unsigned long long vec_sub (vector unsigned long long, - vector unsigned long long); - - vector long long vec_unpackh (vector int); - vector unsigned long long vec_unpackh (vector unsigned int); - - vector long long vec_unpackl (vector int); - vector unsigned long long vec_unpackl (vector unsigned int); - - vector long long vec_vaddudm (vector long long, vector long long); - vector long long vec_vaddudm (vector bool long long, vector long long); - vector long long vec_vaddudm (vector long long, vector bool long long); - vector unsigned long long vec_vaddudm (vector unsigned long long, - vector unsigned long long); - vector unsigned long long vec_vaddudm (vector bool unsigned long long, - vector unsigned long long); - vector unsigned long long vec_vaddudm (vector unsigned long long, - vector bool unsigned long long); - - vector long long vec_vbpermq (vector signed char, vector signed char); - vector long long vec_vbpermq (vector unsigned char, vector unsigned char); - - vector long long vec_vclz (vector long long); - vector unsigned long long vec_vclz (vector unsigned long long); - vector int vec_vclz (vector int); - vector unsigned int vec_vclz (vector int); - vector short vec_vclz (vector short); - vector unsigned short vec_vclz (vector unsigned short); - vector signed char vec_vclz (vector signed char); - vector unsigned char vec_vclz (vector unsigned char); - - vector signed char vec_vclzb (vector signed char); - vector unsigned char vec_vclzb (vector unsigned char); - - vector long long vec_vclzd (vector long long); - vector unsigned long long vec_vclzd (vector unsigned long long); - - vector short vec_vclzh (vector short); - vector unsigned short vec_vclzh (vector unsigned short); - - vector int vec_vclzw (vector int); - vector unsigned int vec_vclzw (vector int); - - vector signed char vec_vgbbd (vector signed char); - vector unsigned char vec_vgbbd (vector unsigned char); - - vector long long vec_vmaxsd (vector long long, vector long long); - - vector unsigned long long vec_vmaxud (vector unsigned long long, - unsigned vector long long); - - vector long long vec_vminsd (vector long long, vector long long); - - vector unsigned long long vec_vminud (vector long long, - vector long long); - - vector int vec_vpksdss (vector long long, vector long long); - vector unsigned int vec_vpksdss (vector long long, vector long long); - - vector unsigned int vec_vpkudus (vector unsigned long long, - vector unsigned long long); - - vector int vec_vpkudum (vector long long, vector long long); - vector unsigned int vec_vpkudum (vector unsigned long long, - vector unsigned long long); - vector bool int vec_vpkudum (vector bool long long, vector bool long long); - - vector long long vec_vpopcnt (vector long long); - vector unsigned long long vec_vpopcnt (vector unsigned long long); - vector int vec_vpopcnt (vector int); - vector unsigned int vec_vpopcnt (vector int); - vector short vec_vpopcnt (vector short); - vector unsigned short vec_vpopcnt (vector unsigned short); - vector signed char vec_vpopcnt (vector signed char); - vector unsigned char vec_vpopcnt (vector unsigned char); - - vector signed char vec_vpopcntb (vector signed char); - vector unsigned char vec_vpopcntb (vector unsigned char); - - vector long long vec_vpopcntd (vector long long); - vector unsigned long long vec_vpopcntd (vector unsigned long long); - - vector short vec_vpopcnth (vector short); - vector unsigned short vec_vpopcnth (vector unsigned short); - - vector int vec_vpopcntw (vector int); - vector unsigned int vec_vpopcntw (vector int); - - vector long long vec_vrld (vector long long, vector unsigned long long); - vector unsigned long long vec_vrld (vector unsigned long long, - vector unsigned long long); - - vector long long vec_vsld (vector long long, vector unsigned long long); - vector long long vec_vsld (vector unsigned long long, - vector unsigned long long); - - vector long long vec_vsrad (vector long long, vector unsigned long long); - vector unsigned long long vec_vsrad (vector unsigned long long, - vector unsigned long long); - - vector long long vec_vsrd (vector long long, vector unsigned long long); - vector unsigned long long char vec_vsrd (vector unsigned long long, - vector unsigned long long); - - vector long long vec_vsubudm (vector long long, vector long long); - vector long long vec_vsubudm (vector bool long long, vector long long); - vector long long vec_vsubudm (vector long long, vector bool long long); - vector unsigned long long vec_vsubudm (vector unsigned long long, - vector unsigned long long); - vector unsigned long long vec_vsubudm (vector bool long long, - vector unsigned long long); - vector unsigned long long vec_vsubudm (vector unsigned long long, - vector bool long long); - - vector long long vec_vupkhsw (vector int); - vector unsigned long long vec_vupkhsw (vector unsigned int); - - vector long long vec_vupklsw (vector int); - vector unsigned long long vec_vupklsw (vector int); - - If the ISA 2.07 additions to the vector/scalar (power8-vector) -instruction set is available, the following additional functions are -available for 64-bit targets. New vector types (VECTOR __INT128_T and -VECTOR __UINT128_T) are available to hold the __INT128_T and __UINT128_T -types to use these builtins. - - The normal vector extract, and set operations work on VECTOR __INT128_T -and VECTOR __UINT128_T types, but the index value must be 0. - - vector __int128_t vec_vaddcuq (vector __int128_t, vector __int128_t); - vector __uint128_t vec_vaddcuq (vector __uint128_t, vector __uint128_t); - - vector __int128_t vec_vadduqm (vector __int128_t, vector __int128_t); - vector __uint128_t vec_vadduqm (vector __uint128_t, vector __uint128_t); - - vector __int128_t vec_vaddecuq (vector __int128_t, vector __int128_t, - vector __int128_t); - vector __uint128_t vec_vaddecuq (vector __uint128_t, vector __uint128_t, - vector __uint128_t); - - vector __int128_t vec_vaddeuqm (vector __int128_t, vector __int128_t, - vector __int128_t); - vector __uint128_t vec_vaddeuqm (vector __uint128_t, vector __uint128_t, - vector __uint128_t); - - vector __int128_t vec_vsubecuq (vector __int128_t, vector __int128_t, - vector __int128_t); - vector __uint128_t vec_vsubecuq (vector __uint128_t, vector __uint128_t, - vector __uint128_t); - - vector __int128_t vec_vsubeuqm (vector __int128_t, vector __int128_t, - vector __int128_t); - vector __uint128_t vec_vsubeuqm (vector __uint128_t, vector __uint128_t, - vector __uint128_t); - - vector __int128_t vec_vsubcuq (vector __int128_t, vector __int128_t); - vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t); - - __int128_t vec_vsubuqm (__int128_t, __int128_t); - __uint128_t vec_vsubuqm (__uint128_t, __uint128_t); - - If the cryptographic instructions are enabled ('-mcrypto' or -'-mcpu=power8'), the following builtins are enabled. - - vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long); - - vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long, - vector unsigned long long); - - vector unsigned long long __builtin_crypto_vcipherlast - (vector unsigned long long, - vector unsigned long long); - - vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long, - vector unsigned long long); - - vector unsigned long long __builtin_crypto_vncipherlast - (vector unsigned long long, - vector unsigned long long); - - vector unsigned char __builtin_crypto_vpermxor (vector unsigned char, - vector unsigned char, - vector unsigned char); - - vector unsigned short __builtin_crypto_vpermxor (vector unsigned short, - vector unsigned short, - vector unsigned short); - - vector unsigned int __builtin_crypto_vpermxor (vector unsigned int, - vector unsigned int, - vector unsigned int); - - vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long, - vector unsigned long long, - vector unsigned long long); - - vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char, - vector unsigned char); - - vector unsigned short __builtin_crypto_vpmsumb (vector unsigned short, - vector unsigned short); - - vector unsigned int __builtin_crypto_vpmsumb (vector unsigned int, - vector unsigned int); - - vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long, - vector unsigned long long); - - vector unsigned long long __builtin_crypto_vshasigmad - (vector unsigned long long, int, int); - - vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int, - int, int); - - The second argument to the __BUILTIN_CRYPTO_VSHASIGMAD and -__BUILTIN_CRYPTO_VSHASIGMAW builtin functions must be a constant integer -that is 0 or 1. The third argument to these builtin functions must be a -constant integer in the range of 0 to 15. - - -File: gcc.info, Node: PowerPC Hardware Transactional Memory Built-in Functions, Next: RX Built-in Functions, Prev: PowerPC AltiVec/VSX Built-in Functions, Up: Target Builtins - -6.57.22 PowerPC Hardware Transactional Memory Built-in Functions ----------------------------------------------------------------- - -GCC provides two interfaces for accessing the Hardware Transactional -Memory (HTM) instructions available on some of the PowerPC family of -prcoessors (eg, POWER8). The two interfaces come in a low level -interface, consisting of built-in functions specific to PowerPC and a -higher level interface consisting of inline functions that are common -between PowerPC and S/390. - -6.57.22.1 PowerPC HTM Low Level Built-in Functions -.................................................. - -The following low level built-in functions are available with '-mhtm' or -'-mcpu=CPU' where CPU is 'power8' or later. They all generate the -machine instruction that is part of the name. - - The HTM built-ins return true or false depending on their success and -their arguments match exactly the type and order of the associated -hardware instruction's operands. Refer to the ISA manual for a -description of each instruction's operands. - - unsigned int __builtin_tbegin (unsigned int) - unsigned int __builtin_tend (unsigned int) - - unsigned int __builtin_tabort (unsigned int) - unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int) - unsigned int __builtin_tabortdci (unsigned int, unsigned int, int) - unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int) - unsigned int __builtin_tabortwci (unsigned int, unsigned int, int) - - unsigned int __builtin_tcheck (unsigned int) - unsigned int __builtin_treclaim (unsigned int) - unsigned int __builtin_trechkpt (void) - unsigned int __builtin_tsr (unsigned int) - - In addition to the above HTM built-ins, we have added built-ins for -some common extended mnemonics of the HTM instructions: - - unsigned int __builtin_tendall (void) - unsigned int __builtin_tresume (void) - unsigned int __builtin_tsuspend (void) - - The following set of built-in functions are available to gain access to -the HTM specific special purpose registers. - - unsigned long __builtin_get_texasr (void) - unsigned long __builtin_get_texasru (void) - unsigned long __builtin_get_tfhar (void) - unsigned long __builtin_get_tfiar (void) - - void __builtin_set_texasr (unsigned long); - void __builtin_set_texasru (unsigned long); - void __builtin_set_tfhar (unsigned long); - void __builtin_set_tfiar (unsigned long); - - Example usage of these low level built-in functions may look like: - - #include <htmintrin.h> - - int num_retries = 10; - - while (1) - { - if (__builtin_tbegin (0)) - { - /* Transaction State Initiated. */ - if (is_locked (lock)) - __builtin_tabort (0); - ... transaction code... - __builtin_tend (0); - break; - } - else - { - /* Transaction State Failed. Use locks if the transaction - failure is "persistent" or we've tried too many times. */ - if (num_retries-- <= 0 - || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ())) - { - acquire_lock (lock); - ... non transactional fallback path... - release_lock (lock); - break; - } - } - } - - One final built-in function has been added that returns the value of -the 2-bit Transaction State field of the Machine Status Register (MSR) -as stored in 'CR0'. - - unsigned long __builtin_ttest (void) - - This built-in can be used to determine the current transaction state -using the following code example: - - #include <htmintrin.h> - - unsigned char tx_state = _HTM_STATE (__builtin_ttest ()); - - if (tx_state == _HTM_TRANSACTIONAL) - { - /* Code to use in transactional state. */ - } - else if (tx_state == _HTM_NONTRANSACTIONAL) - { - /* Code to use in non-transactional state. */ - } - else if (tx_state == _HTM_SUSPENDED) - { - /* Code to use in transaction suspended state. */ - } - -6.57.22.2 PowerPC HTM High Level Inline Functions -................................................. - -The following high level HTM interface is made available by including -'<htmxlintrin.h>' and using '-mhtm' or '-mcpu=CPU' where CPU is 'power8' -or later. This interface is common between PowerPC and S/390, allowing -users to write one HTM source implementation that can be compiled and -executed on either system. - - long __TM_simple_begin (void) - long __TM_begin (void* const TM_buff) - long __TM_end (void) - void __TM_abort (void) - void __TM_named_abort (unsigned char const code) - void __TM_resume (void) - void __TM_suspend (void) - - long __TM_is_user_abort (void* const TM_buff) - long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code) - long __TM_is_illegal (void* const TM_buff) - long __TM_is_footprint_exceeded (void* const TM_buff) - long __TM_nesting_depth (void* const TM_buff) - long __TM_is_nested_too_deep(void* const TM_buff) - long __TM_is_conflict(void* const TM_buff) - long __TM_is_failure_persistent(void* const TM_buff) - long __TM_failure_address(void* const TM_buff) - long long __TM_failure_code(void* const TM_buff) - - Using these common set of HTM inline functions, we can create a more -portable version of the HTM example in the previous section that will -work on either PowerPC or S/390: - - #include <htmxlintrin.h> - - int num_retries = 10; - TM_buff_type TM_buff; - - while (1) - { - if (__TM_begin (TM_buff)) - { - /* Transaction State Initiated. */ - if (is_locked (lock)) - __TM_abort (); - ... transaction code... - __TM_end (); - break; - } - else - { - /* Transaction State Failed. Use locks if the transaction - failure is "persistent" or we've tried too many times. */ - if (num_retries-- <= 0 - || __TM_is_failure_persistent (TM_buff)) - { - acquire_lock (lock); - ... non transactional fallback path... - release_lock (lock); - break; - } - } - } - - -File: gcc.info, Node: RX Built-in Functions, Next: S/390 System z Built-in Functions, Prev: PowerPC Hardware Transactional Memory Built-in Functions, Up: Target Builtins - -6.57.23 RX Built-in Functions ------------------------------ - -GCC supports some of the RX instructions which cannot be expressed in -the C programming language via the use of built-in functions. The -following functions are supported: - - -- Built-in Function: void __builtin_rx_brk (void) - Generates the 'brk' machine instruction. - - -- Built-in Function: void __builtin_rx_clrpsw (int) - Generates the 'clrpsw' machine instruction to clear the specified - bit in the processor status word. - - -- Built-in Function: void __builtin_rx_int (int) - Generates the 'int' machine instruction to generate an interrupt - with the specified value. - - -- Built-in Function: void __builtin_rx_machi (int, int) - Generates the 'machi' machine instruction to add the result of - multiplying the top 16 bits of the two arguments into the - accumulator. - - -- Built-in Function: void __builtin_rx_maclo (int, int) - Generates the 'maclo' machine instruction to add the result of - multiplying the bottom 16 bits of the two arguments into the - accumulator. - - -- Built-in Function: void __builtin_rx_mulhi (int, int) - Generates the 'mulhi' machine instruction to place the result of - multiplying the top 16 bits of the two arguments into the - accumulator. - - -- Built-in Function: void __builtin_rx_mullo (int, int) - Generates the 'mullo' machine instruction to place the result of - multiplying the bottom 16 bits of the two arguments into the - accumulator. - - -- Built-in Function: int __builtin_rx_mvfachi (void) - Generates the 'mvfachi' machine instruction to read the top 32 bits - of the accumulator. - - -- Built-in Function: int __builtin_rx_mvfacmi (void) - Generates the 'mvfacmi' machine instruction to read the middle 32 - bits of the accumulator. - - -- Built-in Function: int __builtin_rx_mvfc (int) - Generates the 'mvfc' machine instruction which reads the control - register specified in its argument and returns its value. - - -- Built-in Function: void __builtin_rx_mvtachi (int) - Generates the 'mvtachi' machine instruction to set the top 32 bits - of the accumulator. - - -- Built-in Function: void __builtin_rx_mvtaclo (int) - Generates the 'mvtaclo' machine instruction to set the bottom 32 - bits of the accumulator. - - -- Built-in Function: void __builtin_rx_mvtc (int reg, int val) - Generates the 'mvtc' machine instruction which sets control - register number 'reg' to 'val'. - - -- Built-in Function: void __builtin_rx_mvtipl (int) - Generates the 'mvtipl' machine instruction set the interrupt - priority level. - - -- Built-in Function: void __builtin_rx_racw (int) - Generates the 'racw' machine instruction to round the accumulator - according to the specified mode. - - -- Built-in Function: int __builtin_rx_revw (int) - Generates the 'revw' machine instruction which swaps the bytes in - the argument so that bits 0-7 now occupy bits 8-15 and vice versa, - and also bits 16-23 occupy bits 24-31 and vice versa. - - -- Built-in Function: void __builtin_rx_rmpa (void) - Generates the 'rmpa' machine instruction which initiates a repeated - multiply and accumulate sequence. - - -- Built-in Function: void __builtin_rx_round (float) - Generates the 'round' machine instruction which returns the - floating-point argument rounded according to the current rounding - mode set in the floating-point status word register. - - -- Built-in Function: int __builtin_rx_sat (int) - Generates the 'sat' machine instruction which returns the saturated - value of the argument. - - -- Built-in Function: void __builtin_rx_setpsw (int) - Generates the 'setpsw' machine instruction to set the specified bit - in the processor status word. - - -- Built-in Function: void __builtin_rx_wait (void) - Generates the 'wait' machine instruction. - - -File: gcc.info, Node: S/390 System z Built-in Functions, Next: SH Built-in Functions, Prev: RX Built-in Functions, Up: Target Builtins - -6.57.24 S/390 System z Built-in Functions ------------------------------------------ - - -- Built-in Function: int __builtin_tbegin (void*) - Generates the 'tbegin' machine instruction starting a - non-constraint hardware transaction. If the parameter is non-NULL - the memory area is used to store the transaction diagnostic buffer - and will be passed as first operand to 'tbegin'. This buffer can - be defined using the 'struct __htm_tdb' C struct defined in - 'htmintrin.h' and must reside on a double-word boundary. The - second tbegin operand is set to '0xff0c'. This enables - save/restore of all GPRs and disables aborts for FPR and AR - manipulations inside the transaction body. The condition code set - by the tbegin instruction is returned as integer value. The tbegin - instruction by definition overwrites the content of all FPRs. The - compiler will generate code which saves and restores the FPRs. For - soft-float code it is recommended to used the '*_nofloat' variant. - In order to prevent a TDB from being written it is required to pass - an constant zero value as parameter. Passing the zero value - through a variable is not sufficient. Although modifications of - access registers inside the transaction will not trigger an - transaction abort it is not supported to actually modify them. - Access registers do not get saved when entering a transaction. - They will have undefined state when reaching the abort code. - - Macros for the possible return codes of tbegin are defined in the -'htmintrin.h' header file: - -'_HTM_TBEGIN_STARTED' - 'tbegin' has been executed as part of normal processing. The - transaction body is supposed to be executed. -'_HTM_TBEGIN_INDETERMINATE' - The transaction was aborted due to an indeterminate condition which - might be persistent. -'_HTM_TBEGIN_TRANSIENT' - The transaction aborted due to a transient failure. The - transaction should be re-executed in that case. -'_HTM_TBEGIN_PERSISTENT' - The transaction aborted due to a persistent failure. Re-execution - under same circumstances will not be productive. - - -- Macro: _HTM_FIRST_USER_ABORT_CODE - The '_HTM_FIRST_USER_ABORT_CODE' defined in 'htmintrin.h' specifies - the first abort code which can be used for '__builtin_tabort'. - Values below this threshold are reserved for machine use. - - -- Data type: struct __htm_tdb - The 'struct __htm_tdb' defined in 'htmintrin.h' describes the - structure of the transaction diagnostic block as specified in the - Principles of Operation manual chapter 5-91. - - -- Built-in Function: int __builtin_tbegin_nofloat (void*) - Same as '__builtin_tbegin' but without FPR saves and restores. - Using this variant in code making use of FPRs will leave the FPRs - in undefined state when entering the transaction abort handler - code. - - -- Built-in Function: int __builtin_tbegin_retry (void*, int) - In addition to '__builtin_tbegin' a loop for transient failures is - generated. If tbegin returns a condition code of 2 the transaction - will be retried as often as specified in the second argument. The - perform processor assist instruction is used to tell the CPU about - the number of fails so far. - - -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int) - Same as '__builtin_tbegin_retry' but without FPR saves and - restores. Using this variant in code making use of FPRs will leave - the FPRs in undefined state when entering the transaction abort - handler code. - - -- Built-in Function: void __builtin_tbeginc (void) - Generates the 'tbeginc' machine instruction starting a constraint - hardware transaction. The second operand is set to '0xff08'. - - -- Built-in Function: int __builtin_tend (void) - Generates the 'tend' machine instruction finishing a transaction - and making the changes visible to other threads. The condition - code generated by tend is returned as integer value. - - -- Built-in Function: void __builtin_tabort (int) - Generates the 'tabort' machine instruction with the specified abort - code. Abort codes from 0 through 255 are reserved and will result - in an error message. - - -- Built-in Function: void __builtin_tx_assist (int) - Generates the 'ppa rX,rY,1' machine instruction. Where the integer - parameter is loaded into rX and a value of zero is loaded into rY. - The integer parameter specifies the number of times the transaction - repeatedly aborted. - - -- Built-in Function: int __builtin_tx_nesting_depth (void) - Generates the 'etnd' machine instruction. The current nesting - depth is returned as integer value. For a nesting depth of 0 the - code is not executed as part of an transaction. - - -- Built-in Function: void __builtin_non_tx_store (uint64_t *, - uint64_t) - - Generates the 'ntstg' machine instruction. The second argument is - written to the first arguments location. The store operation will - not be rolled-back in case of an transaction abort. - - -File: gcc.info, Node: SH Built-in Functions, Next: SPARC VIS Built-in Functions, Prev: S/390 System z Built-in Functions, Up: Target Builtins - -6.57.25 SH Built-in Functions ------------------------------ - -The following built-in functions are supported on the SH1, SH2, SH3 and -SH4 families of processors: - - -- Built-in Function: void __builtin_set_thread_pointer (void *PTR) - Sets the 'GBR' register to the specified value PTR. This is - usually used by system code that manages threads and execution - contexts. The compiler normally does not generate code that - modifies the contents of 'GBR' and thus the value is preserved - across function calls. Changing the 'GBR' value in user code must - be done with caution, since the compiler might use 'GBR' in order - to access thread local variables. - - -- Built-in Function: void * __builtin_thread_pointer (void) - Returns the value that is currently set in the 'GBR' register. - Memory loads and stores that use the thread pointer as a base - address are turned into 'GBR' based displacement loads and stores, - if possible. For example: - struct my_tcb - { - int a, b, c, d, e; - }; - - int get_tcb_value (void) - { - // Generate 'mov.l @(8,gbr),r0' instruction - return ((my_tcb*)__builtin_thread_pointer ())->c; - } - - -File: gcc.info, Node: SPARC VIS Built-in Functions, Next: SPU Built-in Functions, Prev: SH Built-in Functions, Up: Target Builtins - -6.57.26 SPARC VIS Built-in Functions ------------------------------------- - -GCC supports SIMD operations on the SPARC using both the generic vector -extensions (*note Vector Extensions::) as well as built-in functions for -the SPARC Visual Instruction Set (VIS). When you use the '-mvis' switch, -the VIS extension is exposed as the following built-in functions: - - typedef int v1si __attribute__ ((vector_size (4))); - typedef int v2si __attribute__ ((vector_size (8))); - typedef short v4hi __attribute__ ((vector_size (8))); - typedef short v2hi __attribute__ ((vector_size (4))); - typedef unsigned char v8qi __attribute__ ((vector_size (8))); - typedef unsigned char v4qi __attribute__ ((vector_size (4))); - - void __builtin_vis_write_gsr (int64_t); - int64_t __builtin_vis_read_gsr (void); - - void * __builtin_vis_alignaddr (void *, long); - void * __builtin_vis_alignaddrl (void *, long); - int64_t __builtin_vis_faligndatadi (int64_t, int64_t); - v2si __builtin_vis_faligndatav2si (v2si, v2si); - v4hi __builtin_vis_faligndatav4hi (v4si, v4si); - v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi); - - v4hi __builtin_vis_fexpand (v4qi); - - v4hi __builtin_vis_fmul8x16 (v4qi, v4hi); - v4hi __builtin_vis_fmul8x16au (v4qi, v2hi); - v4hi __builtin_vis_fmul8x16al (v4qi, v2hi); - v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi); - v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi); - v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi); - v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi); - - v4qi __builtin_vis_fpack16 (v4hi); - v8qi __builtin_vis_fpack32 (v2si, v8qi); - v2hi __builtin_vis_fpackfix (v2si); - v8qi __builtin_vis_fpmerge (v4qi, v4qi); - - int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t); - - long __builtin_vis_edge8 (void *, void *); - long __builtin_vis_edge8l (void *, void *); - long __builtin_vis_edge16 (void *, void *); - long __builtin_vis_edge16l (void *, void *); - long __builtin_vis_edge32 (void *, void *); - long __builtin_vis_edge32l (void *, void *); - - long __builtin_vis_fcmple16 (v4hi, v4hi); - long __builtin_vis_fcmple32 (v2si, v2si); - long __builtin_vis_fcmpne16 (v4hi, v4hi); - long __builtin_vis_fcmpne32 (v2si, v2si); - long __builtin_vis_fcmpgt16 (v4hi, v4hi); - long __builtin_vis_fcmpgt32 (v2si, v2si); - long __builtin_vis_fcmpeq16 (v4hi, v4hi); - long __builtin_vis_fcmpeq32 (v2si, v2si); - - v4hi __builtin_vis_fpadd16 (v4hi, v4hi); - v2hi __builtin_vis_fpadd16s (v2hi, v2hi); - v2si __builtin_vis_fpadd32 (v2si, v2si); - v1si __builtin_vis_fpadd32s (v1si, v1si); - v4hi __builtin_vis_fpsub16 (v4hi, v4hi); - v2hi __builtin_vis_fpsub16s (v2hi, v2hi); - v2si __builtin_vis_fpsub32 (v2si, v2si); - v1si __builtin_vis_fpsub32s (v1si, v1si); - - long __builtin_vis_array8 (long, long); - long __builtin_vis_array16 (long, long); - long __builtin_vis_array32 (long, long); - - When you use the '-mvis2' switch, the VIS version 2.0 built-in -functions also become available: - - long __builtin_vis_bmask (long, long); - int64_t __builtin_vis_bshuffledi (int64_t, int64_t); - v2si __builtin_vis_bshufflev2si (v2si, v2si); - v4hi __builtin_vis_bshufflev2si (v4hi, v4hi); - v8qi __builtin_vis_bshufflev2si (v8qi, v8qi); - - long __builtin_vis_edge8n (void *, void *); - long __builtin_vis_edge8ln (void *, void *); - long __builtin_vis_edge16n (void *, void *); - long __builtin_vis_edge16ln (void *, void *); - long __builtin_vis_edge32n (void *, void *); - long __builtin_vis_edge32ln (void *, void *); - - When you use the '-mvis3' switch, the VIS version 3.0 built-in -functions also become available: - - void __builtin_vis_cmask8 (long); - void __builtin_vis_cmask16 (long); - void __builtin_vis_cmask32 (long); - - v4hi __builtin_vis_fchksm16 (v4hi, v4hi); - - v4hi __builtin_vis_fsll16 (v4hi, v4hi); - v4hi __builtin_vis_fslas16 (v4hi, v4hi); - v4hi __builtin_vis_fsrl16 (v4hi, v4hi); - v4hi __builtin_vis_fsra16 (v4hi, v4hi); - v2si __builtin_vis_fsll16 (v2si, v2si); - v2si __builtin_vis_fslas16 (v2si, v2si); - v2si __builtin_vis_fsrl16 (v2si, v2si); - v2si __builtin_vis_fsra16 (v2si, v2si); - - long __builtin_vis_pdistn (v8qi, v8qi); - - v4hi __builtin_vis_fmean16 (v4hi, v4hi); - - int64_t __builtin_vis_fpadd64 (int64_t, int64_t); - int64_t __builtin_vis_fpsub64 (int64_t, int64_t); - - v4hi __builtin_vis_fpadds16 (v4hi, v4hi); - v2hi __builtin_vis_fpadds16s (v2hi, v2hi); - v4hi __builtin_vis_fpsubs16 (v4hi, v4hi); - v2hi __builtin_vis_fpsubs16s (v2hi, v2hi); - v2si __builtin_vis_fpadds32 (v2si, v2si); - v1si __builtin_vis_fpadds32s (v1si, v1si); - v2si __builtin_vis_fpsubs32 (v2si, v2si); - v1si __builtin_vis_fpsubs32s (v1si, v1si); - - long __builtin_vis_fucmple8 (v8qi, v8qi); - long __builtin_vis_fucmpne8 (v8qi, v8qi); - long __builtin_vis_fucmpgt8 (v8qi, v8qi); - long __builtin_vis_fucmpeq8 (v8qi, v8qi); - - float __builtin_vis_fhadds (float, float); - double __builtin_vis_fhaddd (double, double); - float __builtin_vis_fhsubs (float, float); - double __builtin_vis_fhsubd (double, double); - float __builtin_vis_fnhadds (float, float); - double __builtin_vis_fnhaddd (double, double); - - int64_t __builtin_vis_umulxhi (int64_t, int64_t); - int64_t __builtin_vis_xmulx (int64_t, int64_t); - int64_t __builtin_vis_xmulxhi (int64_t, int64_t); - - -File: gcc.info, Node: SPU Built-in Functions, Next: TI C6X Built-in Functions, Prev: SPARC VIS Built-in Functions, Up: Target Builtins - -6.57.27 SPU Built-in Functions ------------------------------- - -GCC provides extensions for the SPU processor as described in the -Sony/Toshiba/IBM SPU Language Extensions Specification, which can be -found at <http://cell.scei.co.jp/> or -<http://www.ibm.com/developerworks/power/cell/>. GCC's implementation -differs in several ways. - - * The optional extension of specifying vector constants in - parentheses is not supported. - - * A vector initializer requires no cast if the vector constant is of - the same type as the variable it is initializing. - - * If 'signed' or 'unsigned' is omitted, the signedness of the vector - type is the default signedness of the base type. The default - varies depending on the operating system, so a portable program - should always specify the signedness. - - * By default, the keyword '__vector' is added. The macro 'vector' is - defined in '<spu_intrinsics.h>' and can be undefined. - - * GCC allows using a 'typedef' name as the type specifier for a - vector type. - - * For C, overloaded functions are implemented with macros so the - following does not work: - - spu_add ((vector signed int){1, 2, 3, 4}, foo); - - Since 'spu_add' is a macro, the vector constant in the example is - treated as four separate arguments. Wrap the entire argument in - parentheses for this to work. - - * The extended version of '__builtin_expect' is not supported. - - _Note:_ Only the interface described in the aforementioned -specification is supported. Internally, GCC uses built-in functions to -implement the required functionality, but these are not supported and -are subject to change without notice. - - -File: gcc.info, Node: TI C6X Built-in Functions, Next: TILE-Gx Built-in Functions, Prev: SPU Built-in Functions, Up: Target Builtins - -6.57.28 TI C6X Built-in Functions ---------------------------------- - -GCC provides intrinsics to access certain instructions of the TI C6X -processors. These intrinsics, listed below, are available after -inclusion of the 'c6x_intrinsics.h' header file. They map directly to -C6X instructions. - - - int _sadd (int, int) - int _ssub (int, int) - int _sadd2 (int, int) - int _ssub2 (int, int) - long long _mpy2 (int, int) - long long _smpy2 (int, int) - int _add4 (int, int) - int _sub4 (int, int) - int _saddu4 (int, int) - - int _smpy (int, int) - int _smpyh (int, int) - int _smpyhl (int, int) - int _smpylh (int, int) - - int _sshl (int, int) - int _subc (int, int) - - int _avg2 (int, int) - int _avgu4 (int, int) - - int _clrr (int, int) - int _extr (int, int) - int _extru (int, int) - int _abs (int) - int _abs2 (int) - - -File: gcc.info, Node: TILE-Gx Built-in Functions, Next: TILEPro Built-in Functions, Prev: TI C6X Built-in Functions, Up: Target Builtins - -6.57.29 TILE-Gx Built-in Functions ----------------------------------- - -GCC provides intrinsics to access every instruction of the TILE-Gx -processor. The intrinsics are of the form: - - - unsigned long long __insn_OP (...) - - Where OP is the name of the instruction. Refer to the ISA manual for -the complete list of instructions. - - GCC also provides intrinsics to directly access the network registers. -The intrinsics are: - - - unsigned long long __tile_idn0_receive (void) - unsigned long long __tile_idn1_receive (void) - unsigned long long __tile_udn0_receive (void) - unsigned long long __tile_udn1_receive (void) - unsigned long long __tile_udn2_receive (void) - unsigned long long __tile_udn3_receive (void) - void __tile_idn_send (unsigned long long) - void __tile_udn_send (unsigned long long) - - The intrinsic 'void __tile_network_barrier (void)' is used to guarantee -that no network operations before it are reordered with those after it. - - -File: gcc.info, Node: TILEPro Built-in Functions, Prev: TILE-Gx Built-in Functions, Up: Target Builtins - -6.57.30 TILEPro Built-in Functions ----------------------------------- - -GCC provides intrinsics to access every instruction of the TILEPro -processor. The intrinsics are of the form: - - - unsigned __insn_OP (...) - -where OP is the name of the instruction. Refer to the ISA manual for -the complete list of instructions. - - GCC also provides intrinsics to directly access the network registers. -The intrinsics are: - - - unsigned __tile_idn0_receive (void) - unsigned __tile_idn1_receive (void) - unsigned __tile_sn_receive (void) - unsigned __tile_udn0_receive (void) - unsigned __tile_udn1_receive (void) - unsigned __tile_udn2_receive (void) - unsigned __tile_udn3_receive (void) - void __tile_idn_send (unsigned) - void __tile_sn_send (unsigned) - void __tile_udn_send (unsigned) - - The intrinsic 'void __tile_network_barrier (void)' is used to guarantee -that no network operations before it are reordered with those after it. - - -File: gcc.info, Node: Target Format Checks, Next: Pragmas, Prev: Target Builtins, Up: C Extensions - -6.58 Format Checks Specific to Particular Target Machines -========================================================= - -For some target machines, GCC supports additional options to the format -attribute (*note Declaring Attributes of Functions: Function -Attributes.). - -* Menu: - -* Solaris Format Checks:: -* Darwin Format Checks:: - - -File: gcc.info, Node: Solaris Format Checks, Next: Darwin Format Checks, Up: Target Format Checks - -6.58.1 Solaris Format Checks ----------------------------- - -Solaris targets support the 'cmn_err' (or '__cmn_err__') format check. -'cmn_err' accepts a subset of the standard 'printf' conversions, and the -two-argument '%b' conversion for displaying bit-fields. See the Solaris -man page for 'cmn_err' for more information. - - -File: gcc.info, Node: Darwin Format Checks, Prev: Solaris Format Checks, Up: Target Format Checks - -6.58.2 Darwin Format Checks ---------------------------- - -Darwin targets support the 'CFString' (or '__CFString__') in the format -attribute context. Declarations made with such attribution are parsed -for correct syntax and format argument types. However, parsing of the -format string itself is currently undefined and is not carried out by -this version of the compiler. - - Additionally, 'CFStringRefs' (defined by the 'CoreFoundation' headers) -may also be used as format arguments. Note that the relevant headers -are only likely to be available on Darwin (OSX) installations. On such -installations, the XCode and system documentation provide descriptions -of 'CFString', 'CFStringRefs' and associated functions. - - -File: gcc.info, Node: Pragmas, Next: Unnamed Fields, Prev: Target Format Checks, Up: C Extensions - -6.59 Pragmas Accepted by GCC -============================ - -GCC supports several types of pragmas, primarily in order to compile -code originally written for other compilers. Note that in general we do -not recommend the use of pragmas; *Note Function Attributes::, for -further explanation. - -* Menu: - -* ARM Pragmas:: -* M32C Pragmas:: -* MeP Pragmas:: -* RS/6000 and PowerPC Pragmas:: -* Darwin Pragmas:: -* Solaris Pragmas:: -* Symbol-Renaming Pragmas:: -* Structure-Packing Pragmas:: -* Weak Pragmas:: -* Diagnostic Pragmas:: -* Visibility Pragmas:: -* Push/Pop Macro Pragmas:: -* Function Specific Option Pragmas:: -* Loop-Specific Pragmas:: - - -File: gcc.info, Node: ARM Pragmas, Next: M32C Pragmas, Up: Pragmas - -6.59.1 ARM Pragmas ------------------- - -The ARM target defines pragmas for controlling the default addition of -'long_call' and 'short_call' attributes to functions. *Note Function -Attributes::, for information about the effects of these attributes. - -'long_calls' - Set all subsequent functions to have the 'long_call' attribute. - -'no_long_calls' - Set all subsequent functions to have the 'short_call' attribute. - -'long_calls_off' - Do not affect the 'long_call' or 'short_call' attributes of - subsequent functions. - - -File: gcc.info, Node: M32C Pragmas, Next: MeP Pragmas, Prev: ARM Pragmas, Up: Pragmas - -6.59.2 M32C Pragmas -------------------- - -'GCC memregs NUMBER' - Overrides the command-line option '-memregs=' for the current file. - Use with care! This pragma must be before any function in the - file, and mixing different memregs values in different objects may - make them incompatible. This pragma is useful when a - performance-critical function uses a memreg for temporary values, - as it may allow you to reduce the number of memregs used. - -'ADDRESS NAME ADDRESS' - For any declared symbols matching NAME, this does three things to - that symbol: it forces the symbol to be located at the given - address (a number), it forces the symbol to be volatile, and it - changes the symbol's scope to be static. This pragma exists for - compatibility with other compilers, but note that the common - '1234H' numeric syntax is not supported (use '0x1234' instead). - Example: - - #pragma ADDRESS port3 0x103 - char port3; - - -File: gcc.info, Node: MeP Pragmas, Next: RS/6000 and PowerPC Pragmas, Prev: M32C Pragmas, Up: Pragmas - -6.59.3 MeP Pragmas ------------------- - -'custom io_volatile (on|off)' - Overrides the command-line option '-mio-volatile' for the current - file. Note that for compatibility with future GCC releases, this - option should only be used once before any 'io' variables in each - file. - -'GCC coprocessor available REGISTERS' - Specifies which coprocessor registers are available to the register - allocator. REGISTERS may be a single register, register range - separated by ellipses, or comma-separated list of those. Example: - - #pragma GCC coprocessor available $c0...$c10, $c28 - -'GCC coprocessor call_saved REGISTERS' - Specifies which coprocessor registers are to be saved and restored - by any function using them. REGISTERS may be a single register, - register range separated by ellipses, or comma-separated list of - those. Example: - - #pragma GCC coprocessor call_saved $c4...$c6, $c31 - -'GCC coprocessor subclass '(A|B|C|D)' = REGISTERS' - Creates and defines a register class. These register classes can - be used by inline 'asm' constructs. REGISTERS may be a single - register, register range separated by ellipses, or comma-separated - list of those. Example: - - #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6 - - asm ("cpfoo %0" : "=B" (x)); - -'GCC disinterrupt NAME , NAME ...' - For the named functions, the compiler adds code to disable - interrupts for the duration of those functions. If any functions - so named are not encountered in the source, a warning is emitted - that the pragma is not used. Examples: - - #pragma disinterrupt foo - #pragma disinterrupt bar, grill - int foo () { ... } - -'GCC call NAME , NAME ...' - For the named functions, the compiler always uses a - register-indirect call model when calling the named functions. - Examples: - - extern int foo (); - #pragma call foo - - -File: gcc.info, Node: RS/6000 and PowerPC Pragmas, Next: Darwin Pragmas, Prev: MeP Pragmas, Up: Pragmas - -6.59.4 RS/6000 and PowerPC Pragmas ----------------------------------- - -The RS/6000 and PowerPC targets define one pragma for controlling -whether or not the 'longcall' attribute is added to function -declarations by default. This pragma overrides the '-mlongcall' option, -but not the 'longcall' and 'shortcall' attributes. *Note RS/6000 and -PowerPC Options::, for more information about when long calls are and -are not necessary. - -'longcall (1)' - Apply the 'longcall' attribute to all subsequent function - declarations. - -'longcall (0)' - Do not apply the 'longcall' attribute to subsequent function - declarations. - - -File: gcc.info, Node: Darwin Pragmas, Next: Solaris Pragmas, Prev: RS/6000 and PowerPC Pragmas, Up: Pragmas - -6.59.5 Darwin Pragmas ---------------------- - -The following pragmas are available for all architectures running the -Darwin operating system. These are useful for compatibility with other -Mac OS compilers. - -'mark TOKENS...' - This pragma is accepted, but has no effect. - -'options align=ALIGNMENT' - This pragma sets the alignment of fields in structures. The values - of ALIGNMENT may be 'mac68k', to emulate m68k alignment, or - 'power', to emulate PowerPC alignment. Uses of this pragma nest - properly; to restore the previous setting, use 'reset' for the - ALIGNMENT. - -'segment TOKENS...' - This pragma is accepted, but has no effect. - -'unused (VAR [, VAR]...)' - This pragma declares variables to be possibly unused. GCC does not - produce warnings for the listed variables. The effect is similar - to that of the 'unused' attribute, except that this pragma may - appear anywhere within the variables' scopes. - - -File: gcc.info, Node: Solaris Pragmas, Next: Symbol-Renaming Pragmas, Prev: Darwin Pragmas, Up: Pragmas - -6.59.6 Solaris Pragmas ----------------------- - -The Solaris target supports '#pragma redefine_extname' (*note -Symbol-Renaming Pragmas::). It also supports additional '#pragma' -directives for compatibility with the system compiler. - -'align ALIGNMENT (VARIABLE [, VARIABLE]...)' - - Increase the minimum alignment of each VARIABLE to ALIGNMENT. This - is the same as GCC's 'aligned' attribute *note Variable - Attributes::). Macro expansion occurs on the arguments to this - pragma when compiling C and Objective-C. It does not currently - occur when compiling C++, but this is a bug which may be fixed in a - future release. - -'fini (FUNCTION [, FUNCTION]...)' - - This pragma causes each listed FUNCTION to be called after main, or - during shared module unloading, by adding a call to the '.fini' - section. - -'init (FUNCTION [, FUNCTION]...)' - - This pragma causes each listed FUNCTION to be called during - initialization (before 'main') or during shared module loading, by - adding a call to the '.init' section. - - -File: gcc.info, Node: Symbol-Renaming Pragmas, Next: Structure-Packing Pragmas, Prev: Solaris Pragmas, Up: Pragmas - -6.59.7 Symbol-Renaming Pragmas ------------------------------- - -For compatibility with the Solaris system headers, GCC supports two -'#pragma' directives that change the name used in assembly for a given -declaration. To get this effect on all platforms supported by GCC, use -the asm labels extension (*note Asm Labels::). - -'redefine_extname OLDNAME NEWNAME' - - This pragma gives the C function OLDNAME the assembly symbol - NEWNAME. The preprocessor macro '__PRAGMA_REDEFINE_EXTNAME' is - defined if this pragma is available (currently on all platforms). - - This pragma and the asm labels extension interact in a complicated -manner. Here are some corner cases you may want to be aware of. - - 1. Both pragmas silently apply only to declarations with external - linkage. Asm labels do not have this restriction. - - 2. In C++, both pragmas silently apply only to declarations with "C" - linkage. Again, asm labels do not have this restriction. - - 3. If any of the three ways of changing the assembly name of a - declaration is applied to a declaration whose assembly name has - already been determined (either by a previous use of one of these - features, or because the compiler needed the assembly name in order - to generate code), and the new name is different, a warning issues - and the name does not change. - - 4. The OLDNAME used by '#pragma redefine_extname' is always the - C-language name. - - -File: gcc.info, Node: Structure-Packing Pragmas, Next: Weak Pragmas, Prev: Symbol-Renaming Pragmas, Up: Pragmas - -6.59.8 Structure-Packing Pragmas --------------------------------- - -For compatibility with Microsoft Windows compilers, GCC supports a set -of '#pragma' directives that change the maximum alignment of members of -structures (other than zero-width bit-fields), unions, and classes -subsequently defined. The N value below always is required to be a -small power of two and specifies the new alignment in bytes. - - 1. '#pragma pack(N)' simply sets the new alignment. - 2. '#pragma pack()' sets the alignment to the one that was in effect - when compilation started (see also command-line option - '-fpack-struct[=N]' *note Code Gen Options::). - 3. '#pragma pack(push[,N])' pushes the current alignment setting on an - internal stack and then optionally sets the new alignment. - 4. '#pragma pack(pop)' restores the alignment setting to the one saved - at the top of the internal stack (and removes that stack entry). - Note that '#pragma pack([N])' does not influence this internal - stack; thus it is possible to have '#pragma pack(push)' followed by - multiple '#pragma pack(N)' instances and finalized by a single - '#pragma pack(pop)'. - - Some targets, e.g. i386 and PowerPC, support the 'ms_struct' '#pragma' -which lays out a structure as the documented '__attribute__ -((ms_struct))'. - 1. '#pragma ms_struct on' turns on the layout for structures declared. - 2. '#pragma ms_struct off' turns off the layout for structures - declared. - 3. '#pragma ms_struct reset' goes back to the default layout. - - -File: gcc.info, Node: Weak Pragmas, Next: Diagnostic Pragmas, Prev: Structure-Packing Pragmas, Up: Pragmas - -6.59.9 Weak Pragmas -------------------- - -For compatibility with SVR4, GCC supports a set of '#pragma' directives -for declaring symbols to be weak, and defining weak aliases. - -'#pragma weak SYMBOL' - This pragma declares SYMBOL to be weak, as if the declaration had - the attribute of the same name. The pragma may appear before or - after the declaration of SYMBOL. It is not an error for SYMBOL to - never be defined at all. - -'#pragma weak SYMBOL1 = SYMBOL2' - This pragma declares SYMBOL1 to be a weak alias of SYMBOL2. It is - an error if SYMBOL2 is not defined in the current translation unit. - - -File: gcc.info, Node: Diagnostic Pragmas, Next: Visibility Pragmas, Prev: Weak Pragmas, Up: Pragmas - -6.59.10 Diagnostic Pragmas --------------------------- - -GCC allows the user to selectively enable or disable certain types of -diagnostics, and change the kind of the diagnostic. For example, a -project's policy might require that all sources compile with '-Werror' -but certain files might have exceptions allowing specific types of -warnings. Or, a project might selectively enable diagnostics and treat -them as errors depending on which preprocessor macros are defined. - -'#pragma GCC diagnostic KIND OPTION' - - Modifies the disposition of a diagnostic. Note that not all - diagnostics are modifiable; at the moment only warnings (normally - controlled by '-W...') can be controlled, and not all of them. Use - '-fdiagnostics-show-option' to determine which diagnostics are - controllable and which option controls them. - - KIND is 'error' to treat this diagnostic as an error, 'warning' to - treat it like a warning (even if '-Werror' is in effect), or - 'ignored' if the diagnostic is to be ignored. OPTION is a double - quoted string that matches the command-line option. - - #pragma GCC diagnostic warning "-Wformat" - #pragma GCC diagnostic error "-Wformat" - #pragma GCC diagnostic ignored "-Wformat" - - Note that these pragmas override any command-line options. GCC - keeps track of the location of each pragma, and issues diagnostics - according to the state as of that point in the source file. Thus, - pragmas occurring after a line do not affect diagnostics caused by - that line. - -'#pragma GCC diagnostic push' -'#pragma GCC diagnostic pop' - - Causes GCC to remember the state of the diagnostics as of each - 'push', and restore to that point at each 'pop'. If a 'pop' has no - matching 'push', the command-line options are restored. - - #pragma GCC diagnostic error "-Wuninitialized" - foo(a); /* error is given for this one */ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wuninitialized" - foo(b); /* no diagnostic for this one */ - #pragma GCC diagnostic pop - foo(c); /* error is given for this one */ - #pragma GCC diagnostic pop - foo(d); /* depends on command-line options */ - - GCC also offers a simple mechanism for printing messages during -compilation. - -'#pragma message STRING' - - Prints STRING as a compiler message on compilation. The message is - informational only, and is neither a compilation warning nor an - error. - - #pragma message "Compiling " __FILE__ "..." - - STRING may be parenthesized, and is printed with location - information. For example, - - #define DO_PRAGMA(x) _Pragma (#x) - #define TODO(x) DO_PRAGMA(message ("TODO - " #x)) - - TODO(Remember to fix this) - - prints '/tmp/file.c:4: note: #pragma message: TODO - Remember to - fix this'. - - -File: gcc.info, Node: Visibility Pragmas, Next: Push/Pop Macro Pragmas, Prev: Diagnostic Pragmas, Up: Pragmas - -6.59.11 Visibility Pragmas --------------------------- - -'#pragma GCC visibility push(VISIBILITY)' -'#pragma GCC visibility pop' - - This pragma allows the user to set the visibility for multiple - declarations without having to give each a visibility attribute - *Note Function Attributes::, for more information about visibility - and the attribute syntax. - - In C++, '#pragma GCC visibility' affects only namespace-scope - declarations. Class members and template specializations are not - affected; if you want to override the visibility for a particular - member or instantiation, you must use an attribute. - - -File: gcc.info, Node: Push/Pop Macro Pragmas, Next: Function Specific Option Pragmas, Prev: Visibility Pragmas, Up: Pragmas - -6.59.12 Push/Pop Macro Pragmas ------------------------------- - -For compatibility with Microsoft Windows compilers, GCC supports -'#pragma push_macro("MACRO_NAME")' and '#pragma -pop_macro("MACRO_NAME")'. - -'#pragma push_macro("MACRO_NAME")' - This pragma saves the value of the macro named as MACRO_NAME to the - top of the stack for this macro. - -'#pragma pop_macro("MACRO_NAME")' - This pragma sets the value of the macro named as MACRO_NAME to the - value on top of the stack for this macro. If the stack for - MACRO_NAME is empty, the value of the macro remains unchanged. - - For example: - - #define X 1 - #pragma push_macro("X") - #undef X - #define X -1 - #pragma pop_macro("X") - int x [X]; - -In this example, the definition of X as 1 is saved by '#pragma -push_macro' and restored by '#pragma pop_macro'. - - -File: gcc.info, Node: Function Specific Option Pragmas, Next: Loop-Specific Pragmas, Prev: Push/Pop Macro Pragmas, Up: Pragmas - -6.59.13 Function Specific Option Pragmas ----------------------------------------- - -'#pragma GCC target ("STRING"...)' - - This pragma allows you to set target specific options for functions - defined later in the source file. One or more strings can be - specified. Each function that is defined after this point is as if - 'attribute((target("STRING")))' was specified for that function. - The parenthesis around the options is optional. *Note Function - Attributes::, for more information about the 'target' attribute and - the attribute syntax. - - The '#pragma GCC target' pragma is presently implemented for - i386/x86_64, PowerPC, and Nios II targets only. - -'#pragma GCC optimize ("STRING"...)' - - This pragma allows you to set global optimization options for - functions defined later in the source file. One or more strings - can be specified. Each function that is defined after this point - is as if 'attribute((optimize("STRING")))' was specified for that - function. The parenthesis around the options is optional. *Note - Function Attributes::, for more information about the 'optimize' - attribute and the attribute syntax. - - The '#pragma GCC optimize' pragma is not implemented in GCC - versions earlier than 4.4. - -'#pragma GCC push_options' -'#pragma GCC pop_options' - - These pragmas maintain a stack of the current target and - optimization options. It is intended for include files where you - temporarily want to switch to using a different '#pragma GCC - target' or '#pragma GCC optimize' and then to pop back to the - previous options. - - The '#pragma GCC push_options' and '#pragma GCC pop_options' - pragmas are not implemented in GCC versions earlier than 4.4. - -'#pragma GCC reset_options' - - This pragma clears the current '#pragma GCC target' and '#pragma - GCC optimize' to use the default switches as specified on the - command line. - - The '#pragma GCC reset_options' pragma is not implemented in GCC - versions earlier than 4.4. - - -File: gcc.info, Node: Loop-Specific Pragmas, Prev: Function Specific Option Pragmas, Up: Pragmas - -6.59.14 Loop-Specific Pragmas ------------------------------ - -'#pragma GCC ivdep' - - With this pragma, the programmer asserts that there are no loop-carried -dependencies which would prevent that consecutive iterations of the -following loop can be executed concurrently with SIMD (single -instruction multiple data) instructions. - - For example, the compiler can only unconditionally vectorize the -following loop with the pragma: - - void foo (int n, int *a, int *b, int *c) - { - int i, j; - #pragma GCC ivdep - for (i = 0; i < n; ++i) - a[i] = b[i] + c[i]; - } - -In this example, using the 'restrict' qualifier had the same effect. In -the following example, that would not be possible. Assume k < -m or k ->= m. Only with the pragma, the compiler knows that it can -unconditionally vectorize the following loop: - - void ignore_vec_dep (int *a, int k, int c, int m) - { - #pragma GCC ivdep - for (int i = 0; i < m; i++) - a[i] = a[i + k] * c; - } - - -File: gcc.info, Node: Unnamed Fields, Next: Thread-Local, Prev: Pragmas, Up: C Extensions - -6.60 Unnamed struct/union fields within structs/unions -====================================================== - -As permitted by ISO C11 and for compatibility with other compilers, GCC -allows you to define a structure or union that contains, as fields, -structures and unions without names. For example: - - struct { - int a; - union { - int b; - float c; - }; - int d; - } foo; - -In this example, you are able to access members of the unnamed union -with code like 'foo.b'. Note that only unnamed structs and unions are -allowed, you may not have, for example, an unnamed 'int'. - - You must never create such structures that cause ambiguous field -definitions. For example, in this structure: - - struct { - int a; - struct { - int a; - }; - } foo; - -it is ambiguous which 'a' is being referred to with 'foo.a'. The -compiler gives errors for such constructs. - - Unless '-fms-extensions' is used, the unnamed field must be a structure -or union definition without a tag (for example, 'struct { int a; };'). -If '-fms-extensions' is used, the field may also be a definition with a -tag such as 'struct foo { int a; };', a reference to a previously -defined structure or union such as 'struct foo;', or a reference to a -'typedef' name for a previously defined structure or union type. - - The option '-fplan9-extensions' enables '-fms-extensions' as well as -two other extensions. First, a pointer to a structure is automatically -converted to a pointer to an anonymous field for assignments and -function calls. For example: - - struct s1 { int a; }; - struct s2 { struct s1; }; - extern void f1 (struct s1 *); - void f2 (struct s2 *p) { f1 (p); } - -In the call to 'f1' inside 'f2', the pointer 'p' is converted into a -pointer to the anonymous field. - - Second, when the type of an anonymous field is a 'typedef' for a -'struct' or 'union', code may refer to the field using the name of the -'typedef'. - - typedef struct { int a; } s1; - struct s2 { s1; }; - s1 f1 (struct s2 *p) { return p->s1; } - - These usages are only permitted when they are not ambiguous. - - -File: gcc.info, Node: Thread-Local, Next: Binary constants, Prev: Unnamed Fields, Up: C Extensions - -6.61 Thread-Local Storage -========================= - -Thread-local storage (TLS) is a mechanism by which variables are -allocated such that there is one instance of the variable per extant -thread. The runtime model GCC uses to implement this originates in the -IA-64 processor-specific ABI, but has since been migrated to other -processors as well. It requires significant support from the linker -('ld'), dynamic linker ('ld.so'), and system libraries ('libc.so' and -'libpthread.so'), so it is not available everywhere. - - At the user level, the extension is visible with a new storage class -keyword: '__thread'. For example: - - __thread int i; - extern __thread struct state s; - static __thread char *p; - - The '__thread' specifier may be used alone, with the 'extern' or -'static' specifiers, but with no other storage class specifier. When -used with 'extern' or 'static', '__thread' must appear immediately after -the other storage class specifier. - - The '__thread' specifier may be applied to any global, file-scoped -static, function-scoped static, or static data member of a class. It -may not be applied to block-scoped automatic or non-static data member. - - When the address-of operator is applied to a thread-local variable, it -is evaluated at run time and returns the address of the current thread's -instance of that variable. An address so obtained may be used by any -thread. When a thread terminates, any pointers to thread-local -variables in that thread become invalid. - - No static initialization may refer to the address of a thread-local -variable. - - In C++, if an initializer is present for a thread-local variable, it -must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++ -standard. - - See ELF Handling For Thread-Local Storage -(http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of -the four thread-local storage addressing models, and how the runtime is -expected to function. - -* Menu: - -* C99 Thread-Local Edits:: -* C++98 Thread-Local Edits:: - - -File: gcc.info, Node: C99 Thread-Local Edits, Next: C++98 Thread-Local Edits, Up: Thread-Local - -6.61.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage -------------------------------------------------------- - -The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that -document the exact semantics of the language extension. - - * '5.1.2 Execution environments' - - Add new text after paragraph 1 - - Within either execution environment, a "thread" is a flow of - control within a program. It is implementation defined - whether or not there may be more than one thread associated - with a program. It is implementation defined how threads - beyond the first are created, the name and type of the - function called at thread startup, and how threads may be - terminated. However, objects with thread storage duration - shall be initialized before thread startup. - - * '6.2.4 Storage durations of objects' - - Add new text before paragraph 3 - - An object whose identifier is declared with the storage-class - specifier '__thread' has "thread storage duration". Its - lifetime is the entire execution of the thread, and its stored - value is initialized only once, prior to thread startup. - - * '6.4.1 Keywords' - - Add '__thread'. - - * '6.7.1 Storage-class specifiers' - - Add '__thread' to the list of storage class specifiers in paragraph - 1. - - Change paragraph 2 to - - With the exception of '__thread', at most one storage-class - specifier may be given [...]. The '__thread' specifier may be - used alone, or immediately following 'extern' or 'static'. - - Add new text after paragraph 6 - - The declaration of an identifier for a variable that has block - scope that specifies '__thread' shall also specify either - 'extern' or 'static'. - - The '__thread' specifier shall be used only with variables. - - -File: gcc.info, Node: C++98 Thread-Local Edits, Prev: C99 Thread-Local Edits, Up: Thread-Local - -6.61.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage --------------------------------------------------------- - -The following are a set of changes to ISO/IEC 14882:1998 (aka C++98) -that document the exact semantics of the language extension. - - * [intro.execution] - - New text after paragraph 4 - - A "thread" is a flow of control within the abstract machine. - It is implementation defined whether or not there may be more - than one thread. - - New text after paragraph 7 - - It is unspecified whether additional action must be taken to - ensure when and whether side effects are visible to other - threads. - - * [lex.key] - - Add '__thread'. - - * [basic.start.main] - - Add after paragraph 5 - - The thread that begins execution at the 'main' function is - called the "main thread". It is implementation defined how - functions beginning threads other than the main thread are - designated or typed. A function so designated, as well as the - 'main' function, is called a "thread startup function". It is - implementation defined what happens if a thread startup - function returns. It is implementation defined what happens - to other threads when any thread calls 'exit'. - - * [basic.start.init] - - Add after paragraph 4 - - The storage for an object of thread storage duration shall be - statically initialized before the first statement of the - thread startup function. An object of thread storage duration - shall not require dynamic initialization. - - * [basic.start.term] - - Add after paragraph 3 - - The type of an object with thread storage duration shall not - have a non-trivial destructor, nor shall it be an array type - whose elements (directly or indirectly) have non-trivial - destructors. - - * [basic.stc] - - Add "thread storage duration" to the list in paragraph 1. - - Change paragraph 2 - - Thread, static, and automatic storage durations are associated - with objects introduced by declarations [...]. - - Add '__thread' to the list of specifiers in paragraph 3. - - * [basic.stc.thread] - - New section before [basic.stc.static] - - The keyword '__thread' applied to a non-local object gives the - object thread storage duration. - - A local variable or class data member declared both 'static' - and '__thread' gives the variable or member thread storage - duration. - - * [basic.stc.static] - - Change paragraph 1 - - All objects that have neither thread storage duration, dynamic - storage duration nor are local [...]. - - * [dcl.stc] - - Add '__thread' to the list in paragraph 1. - - Change paragraph 1 - - With the exception of '__thread', at most one - STORAGE-CLASS-SPECIFIER shall appear in a given - DECL-SPECIFIER-SEQ. The '__thread' specifier may be used - alone, or immediately following the 'extern' or 'static' - specifiers. [...] - - Add after paragraph 5 - - The '__thread' specifier can be applied only to the names of - objects and to anonymous unions. - - * [class.mem] - - Add after paragraph 6 - - Non-'static' members shall not be '__thread'. - - -File: gcc.info, Node: Binary constants, Prev: Thread-Local, Up: C Extensions - -6.62 Binary constants using the '0b' prefix -=========================================== - -Integer constants can be written as binary constants, consisting of a -sequence of '0' and '1' digits, prefixed by '0b' or '0B'. This is -particularly useful in environments that operate a lot on the bit level -(like microcontrollers). - - The following statements are identical: - - i = 42; - i = 0x2a; - i = 052; - i = 0b101010; - - The type of these constants follows the same rules as for octal or -hexadecimal integer constants, so suffixes like 'L' or 'UL' can be -applied. - - -File: gcc.info, Node: C++ Extensions, Next: Objective-C, Prev: C Extensions, Up: Top - -7 Extensions to the C++ Language -******************************** - -The GNU compiler provides these extensions to the C++ language (and you -can also use most of the C language extensions in your C++ programs). -If you want to write code that checks whether these features are -available, you can test for the GNU compiler the same way as for C -programs: check for a predefined macro '__GNUC__'. You can also use -'__GNUG__' to test specifically for GNU C++ (*note Predefined Macros: -(cpp)Common Predefined Macros.). - -* Menu: - -* C++ Volatiles:: What constitutes an access to a volatile object. -* Restricted Pointers:: C99 restricted pointers and references. -* Vague Linkage:: Where G++ puts inlines, vtables and such. -* C++ Interface:: You can use a single C++ header file for both - declarations and definitions. -* Template Instantiation:: Methods for ensuring that exactly one copy of - each needed template instantiation is emitted. -* Bound member functions:: You can extract a function pointer to the - method denoted by a '->*' or '.*' expression. -* C++ Attributes:: Variable, function, and type attributes for C++ only. -* Function Multiversioning:: Declaring multiple function versions. -* Namespace Association:: Strong using-directives for namespace association. -* Type Traits:: Compiler support for type traits -* Java Exceptions:: Tweaking exception handling to work with Java. -* Deprecated Features:: Things will disappear from G++. -* Backwards Compatibility:: Compatibilities with earlier definitions of C++. - - -File: gcc.info, Node: C++ Volatiles, Next: Restricted Pointers, Up: C++ Extensions - -7.1 When is a Volatile C++ Object Accessed? -=========================================== - -The C++ standard differs from the C standard in its treatment of -volatile objects. It fails to specify what constitutes a volatile -access, except to say that C++ should behave in a similar manner to C -with respect to volatiles, where possible. However, the different -lvalueness of expressions between C and C++ complicate the behavior. -G++ behaves the same as GCC for volatile access, *Note Volatiles: C -Extensions, for a description of GCC's behavior. - - The C and C++ language specifications differ when an object is accessed -in a void context: - - volatile int *src = SOMEVALUE; - *src; - - The C++ standard specifies that such expressions do not undergo lvalue -to rvalue conversion, and that the type of the dereferenced object may -be incomplete. The C++ standard does not specify explicitly that it is -lvalue to rvalue conversion that is responsible for causing an access. -There is reason to believe that it is, because otherwise certain simple -expressions become undefined. However, because it would surprise most -programmers, G++ treats dereferencing a pointer to volatile object of -complete type as GCC would do for an equivalent type in C. When the -object has incomplete type, G++ issues a warning; if you wish to force -an error, you must force a conversion to rvalue with, for instance, a -static cast. - - When using a reference to volatile, G++ does not treat equivalent -expressions as accesses to volatiles, but instead issues a warning that -no volatile is accessed. The rationale for this is that otherwise it -becomes difficult to determine where volatile access occur, and not -possible to ignore the return value from functions returning volatile -references. Again, if you wish to force a read, cast the reference to -an rvalue. - - G++ implements the same behavior as GCC does when assigning to a -volatile object--there is no reread of the assigned-to object, the -assigned rvalue is reused. Note that in C++ assignment expressions are -lvalues, and if used as an lvalue, the volatile object is referred to. -For instance, VREF refers to VOBJ, as expected, in the following -example: - - volatile int vobj; - volatile int &vref = vobj = SOMETHING; - - -File: gcc.info, Node: Restricted Pointers, Next: Vague Linkage, Prev: C++ Volatiles, Up: C++ Extensions - -7.2 Restricting Pointer Aliasing -================================ - -As with the C front end, G++ understands the C99 feature of restricted -pointers, specified with the '__restrict__', or '__restrict' type -qualifier. Because you cannot compile C++ by specifying the '-std=c99' -language flag, 'restrict' is not a keyword in C++. - - In addition to allowing restricted pointers, you can specify restricted -references, which indicate that the reference is not aliased in the -local context. - - void fn (int *__restrict__ rptr, int &__restrict__ rref) - { - /* ... */ - } - -In the body of 'fn', RPTR points to an unaliased integer and RREF refers -to a (different) unaliased integer. - - You may also specify whether a member function's THIS pointer is -unaliased by using '__restrict__' as a member function qualifier. - - void T::fn () __restrict__ - { - /* ... */ - } - -Within the body of 'T::fn', THIS has the effective definition 'T -*__restrict__ const this'. Notice that the interpretation of a -'__restrict__' member function qualifier is different to that of 'const' -or 'volatile' qualifier, in that it is applied to the pointer rather -than the object. This is consistent with other compilers that implement -restricted pointers. - - As with all outermost parameter qualifiers, '__restrict__' is ignored -in function definition matching. This means you only need to specify -'__restrict__' in a function definition, rather than in a function -prototype as well. - - -File: gcc.info, Node: Vague Linkage, Next: C++ Interface, Prev: Restricted Pointers, Up: C++ Extensions - -7.3 Vague Linkage -================= - -There are several constructs in C++ that require space in the object -file but are not clearly tied to a single translation unit. We say that -these constructs have "vague linkage". Typically such constructs are -emitted wherever they are needed, though sometimes we can be more -clever. - -Inline Functions - Inline functions are typically defined in a header file which can - be included in many different compilations. Hopefully they can - usually be inlined, but sometimes an out-of-line copy is necessary, - if the address of the function is taken or if inlining fails. In - general, we emit an out-of-line copy in all translation units where - one is needed. As an exception, we only emit inline virtual - functions with the vtable, since it always requires a copy. - - Local static variables and string constants used in an inline - function are also considered to have vague linkage, since they must - be shared between all inlined and out-of-line instances of the - function. - -VTables - C++ virtual functions are implemented in most compilers using a - lookup table, known as a vtable. The vtable contains pointers to - the virtual functions provided by a class, and each object of the - class contains a pointer to its vtable (or vtables, in some - multiple-inheritance situations). If the class declares any - non-inline, non-pure virtual functions, the first one is chosen as - the "key method" for the class, and the vtable is only emitted in - the translation unit where the key method is defined. - - _Note:_ If the chosen key method is later defined as inline, the - vtable is still emitted in every translation unit that defines it. - Make sure that any inline virtuals are declared inline in the class - body, even if they are not defined there. - -'type_info' objects - C++ requires information about types to be written out in order to - implement 'dynamic_cast', 'typeid' and exception handling. For - polymorphic classes (classes with virtual functions), the - 'type_info' object is written out along with the vtable so that - 'dynamic_cast' can determine the dynamic type of a class object at - run time. For all other types, we write out the 'type_info' object - when it is used: when applying 'typeid' to an expression, throwing - an object, or referring to a type in a catch clause or exception - specification. - -Template Instantiations - Most everything in this section also applies to template - instantiations, but there are other options as well. *Note Where's - the Template?: Template Instantiation. - - When used with GNU ld version 2.8 or later on an ELF system such as -GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of -these constructs will be discarded at link time. This is known as -COMDAT support. - - On targets that don't support COMDAT, but do support weak symbols, GCC -uses them. This way one copy overrides all the others, but the unused -copies still take up space in the executable. - - For targets that do not support either COMDAT or weak symbols, most -entities with vague linkage are emitted as local symbols to avoid -duplicate definition errors from the linker. This does not happen for -local statics in inlines, however, as having multiple copies almost -certainly breaks things. - - *Note Declarations and Definitions in One Header: C++ Interface, for -another way to control placement of these constructs. - - -File: gcc.info, Node: C++ Interface, Next: Template Instantiation, Prev: Vague Linkage, Up: C++ Extensions - -7.4 #pragma interface and implementation -======================================== - -'#pragma interface' and '#pragma implementation' provide the user with a -way of explicitly directing the compiler to emit entities with vague -linkage (and debugging information) in a particular translation unit. - - _Note:_ As of GCC 2.7.2, these '#pragma's are not useful in most cases, -because of COMDAT support and the "key method" heuristic mentioned in -*note Vague Linkage::. Using them can actually cause your program to -grow due to unnecessary out-of-line copies of inline functions. -Currently (3.4) the only benefit of these '#pragma's is reduced -duplication of debugging information, and that should be addressed soon -on DWARF 2 targets with the use of COMDAT groups. - -'#pragma interface' -'#pragma interface "SUBDIR/OBJECTS.h"' - Use this directive in _header files_ that define object classes, to - save space in most of the object files that use those classes. - Normally, local copies of certain information (backup copies of - inline member functions, debugging information, and the internal - tables that implement virtual functions) must be kept in each - object file that includes class definitions. You can use this - pragma to avoid such duplication. When a header file containing - '#pragma interface' is included in a compilation, this auxiliary - information is not generated (unless the main input source file - itself uses '#pragma implementation'). Instead, the object files - contain references to be resolved at link time. - - The second form of this directive is useful for the case where you - have multiple headers with the same name in different directories. - If you use this form, you must specify the same string to '#pragma - implementation'. - -'#pragma implementation' -'#pragma implementation "OBJECTS.h"' - Use this pragma in a _main input file_, when you want full output - from included header files to be generated (and made globally - visible). The included header file, in turn, should use '#pragma - interface'. Backup copies of inline member functions, debugging - information, and the internal tables used to implement virtual - functions are all generated in implementation files. - - If you use '#pragma implementation' with no argument, it applies to - an include file with the same basename(1) as your source file. For - example, in 'allclass.cc', giving just '#pragma implementation' by - itself is equivalent to '#pragma implementation "allclass.h"'. - - In versions of GNU C++ prior to 2.6.0 'allclass.h' was treated as - an implementation file whenever you would include it from - 'allclass.cc' even if you never specified '#pragma implementation'. - This was deemed to be more trouble than it was worth, however, and - disabled. - - Use the string argument if you want a single implementation file to - include code from multiple header files. (You must also use - '#include' to include the header file; '#pragma implementation' - only specifies how to use the file--it doesn't actually include - it.) - - There is no way to split up the contents of a single header file - into multiple implementation files. - - '#pragma implementation' and '#pragma interface' also have an effect on -function inlining. - - If you define a class in a header file marked with '#pragma interface', -the effect on an inline function defined in that class is similar to an -explicit 'extern' declaration--the compiler emits no code at all to -define an independent version of the function. Its definition is used -only for inlining with its callers. - - Conversely, when you include the same header file in a main source file -that declares it as '#pragma implementation', the compiler emits code -for the function itself; this defines a version of the function that can -be found via pointers (or by callers compiled without inlining). If all -calls to the function can be inlined, you can avoid emitting the -function by compiling with '-fno-implement-inlines'. If any calls are -not inlined, you will get linker errors. - - ---------- Footnotes ---------- - - (1) A file's "basename" is the name stripped of all leading path -information and of trailing suffixes, such as '.h' or '.C' or '.cc'. - - -File: gcc.info, Node: Template Instantiation, Next: Bound member functions, Prev: C++ Interface, Up: C++ Extensions - -7.5 Where's the Template? -========================= - -C++ templates are the first language feature to require more -intelligence from the environment than one usually finds on a UNIX -system. Somehow the compiler and linker have to make sure that each -template instance occurs exactly once in the executable if it is needed, -and not at all otherwise. There are two basic approaches to this -problem, which are referred to as the Borland model and the Cfront -model. - -Borland model - Borland C++ solved the template instantiation problem by adding the - code equivalent of common blocks to their linker; the compiler - emits template instances in each translation unit that uses them, - and the linker collapses them together. The advantage of this - model is that the linker only has to consider the object files - themselves; there is no external complexity to worry about. This - disadvantage is that compilation time is increased because the - template code is being compiled repeatedly. Code written for this - model tends to include definitions of all templates in the header - file, since they must be seen to be instantiated. - -Cfront model - The AT&T C++ translator, Cfront, solved the template instantiation - problem by creating the notion of a template repository, an - automatically maintained place where template instances are stored. - A more modern version of the repository works as follows: As - individual object files are built, the compiler places any template - definitions and instantiations encountered in the repository. At - link time, the link wrapper adds in the objects in the repository - and compiles any needed instances that were not previously emitted. - The advantages of this model are more optimal compilation speed and - the ability to use the system linker; to implement the Borland - model a compiler vendor also needs to replace the linker. The - disadvantages are vastly increased complexity, and thus potential - for error; for some code this can be just as transparent, but in - practice it can been very difficult to build multiple programs in - one directory and one program in multiple directories. Code - written for this model tends to separate definitions of non-inline - member templates into a separate file, which should be compiled - separately. - - When used with GNU ld version 2.8 or later on an ELF system such as -GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the -Borland model. On other systems, G++ implements neither automatic -model. - - You have the following options for dealing with template -instantiations: - - 1. Compile your template-using code with '-frepo'. The compiler - generates files with the extension '.rpo' listing all of the - template instantiations used in the corresponding object files that - could be instantiated there; the link wrapper, 'collect2', then - updates the '.rpo' files to tell the compiler where to place those - instantiations and rebuild any affected object files. The - link-time overhead is negligible after the first pass, as the - compiler continues to place the instantiations in the same files. - - This is your best option for application code written for the - Borland model, as it just works. Code written for the Cfront model - needs to be modified so that the template definitions are available - at one or more points of instantiation; usually this is as simple - as adding '#include <tmethods.cc>' to the end of each template - header. - - For library code, if you want the library to provide all of the - template instantiations it needs, just try to link all of its - object files together; the link will fail, but cause the - instantiations to be generated as a side effect. Be warned, - however, that this may cause conflicts if multiple libraries try to - provide the same instantiations. For greater control, use explicit - instantiation as described in the next option. - - 2. Compile your code with '-fno-implicit-templates' to disable the - implicit generation of template instances, and explicitly - instantiate all the ones you use. This approach requires more - knowledge of exactly which instances you need than do the others, - but it's less mysterious and allows greater control. You can - scatter the explicit instantiations throughout your program, - perhaps putting them in the translation units where the instances - are used or the translation units that define the templates - themselves; you can put all of the explicit instantiations you need - into one big file; or you can create small files like - - #include "Foo.h" - #include "Foo.cc" - - template class Foo<int>; - template ostream& operator << - (ostream&, const Foo<int>&); - - for each of the instances you need, and create a template - instantiation library from those. - - If you are using Cfront-model code, you can probably get away with - not using '-fno-implicit-templates' when compiling files that don't - '#include' the member template definitions. - - If you use one big file to do the instantiations, you may want to - compile it without '-fno-implicit-templates' so you get all of the - instances required by your explicit instantiations (but not by any - other files) without having to specify them as well. - - The ISO C++ 2011 standard allows forward declaration of explicit - instantiations (with 'extern'). G++ supports explicit - instantiation declarations in C++98 mode and has extended the - template instantiation syntax to support instantiation of the - compiler support data for a template class (i.e. the vtable) - without instantiating any of its members (with 'inline'), and - instantiation of only the static data members of a template class, - without the support data or member functions (with ('static'): - - extern template int max (int, int); - inline template class Foo<int>; - static template class Foo<int>; - - 3. Do nothing. Pretend G++ does implement automatic instantiation - management. Code written for the Borland model works fine, but - each translation unit contains instances of each of the templates - it uses. In a large program, this can lead to an unacceptable - amount of code duplication. - - -File: gcc.info, Node: Bound member functions, Next: C++ Attributes, Prev: Template Instantiation, Up: C++ Extensions - -7.6 Extracting the function pointer from a bound pointer to member function -=========================================================================== - -In C++, pointer to member functions (PMFs) are implemented using a wide -pointer of sorts to handle all the possible call mechanisms; the PMF -needs to store information about how to adjust the 'this' pointer, and -if the function pointed to is virtual, where to find the vtable, and -where in the vtable to look for the member function. If you are using -PMFs in an inner loop, you should really reconsider that decision. If -that is not an option, you can extract the pointer to the function that -would be called for a given object/PMF pair and call it directly inside -the inner loop, to save a bit of time. - - Note that you still pay the penalty for the call through a function -pointer; on most modern architectures, such a call defeats the branch -prediction features of the CPU. This is also true of normal virtual -function calls. - - The syntax for this extension is - - extern A a; - extern int (A::*fp)(); - typedef int (*fptr)(A *); - - fptr p = (fptr)(a.*fp); - - For PMF constants (i.e. expressions of the form '&Klasse::Member'), no -object is needed to obtain the address of the function. They can be -converted to function pointers directly: - - fptr p1 = (fptr)(&A::foo); - - You must specify '-Wno-pmf-conversions' to use this extension. - - -File: gcc.info, Node: C++ Attributes, Next: Function Multiversioning, Prev: Bound member functions, Up: C++ Extensions - -7.7 C++-Specific Variable, Function, and Type Attributes -======================================================== - -Some attributes only make sense for C++ programs. - -'abi_tag ("TAG", ...)' - The 'abi_tag' attribute can be applied to a function or class - declaration. It modifies the mangled name of the function or class - to incorporate the tag name, in order to distinguish the function - or class from an earlier version with a different ABI; perhaps the - class has changed size, or the function has a different return type - that is not encoded in the mangled name. - - The argument can be a list of strings of arbitrary length. The - strings are sorted on output, so the order of the list is - unimportant. - - A redeclaration of a function or class must not add new ABI tags, - since doing so would change the mangled name. - - The ABI tags apply to a name, so all instantiations and - specializations of a template have the same tags. The attribute - will be ignored if applied to an explicit specialization or - instantiation. - - The '-Wabi-tag' flag enables a warning about a class which does not - have all the ABI tags used by its subobjects and virtual functions; - for users with code that needs to coexist with an earlier ABI, - using this option can help to find all affected types that need to - be tagged. - -'init_priority (PRIORITY)' - - In Standard C++, objects defined at namespace scope are guaranteed - to be initialized in an order in strict accordance with that of - their definitions _in a given translation unit_. No guarantee is - made for initializations across translation units. However, GNU - C++ allows users to control the order of initialization of objects - defined at namespace scope with the 'init_priority' attribute by - specifying a relative PRIORITY, a constant integral expression - currently bounded between 101 and 65535 inclusive. Lower numbers - indicate a higher priority. - - In the following example, 'A' would normally be created before 'B', - but the 'init_priority' attribute reverses that order: - - Some_Class A __attribute__ ((init_priority (2000))); - Some_Class B __attribute__ ((init_priority (543))); - - Note that the particular values of PRIORITY do not matter; only - their relative ordering. - -'java_interface' - - This type attribute informs C++ that the class is a Java interface. - It may only be applied to classes declared within an 'extern - "Java"' block. Calls to methods declared in this interface are - dispatched using GCJ's interface table mechanism, instead of - regular virtual table dispatch. - -'warn_unused' - - For C++ types with non-trivial constructors and/or destructors it - is impossible for the compiler to determine whether a variable of - this type is truly unused if it is not referenced. This type - attribute informs the compiler that variables of this type should - be warned about if they appear to be unused, just like variables of - fundamental types. - - This attribute is appropriate for types which just represent a - value, such as 'std::string'; it is not appropriate for types which - control a resource, such as 'std::mutex'. - - This attribute is also accepted in C, but it is unnecessary because - C does not have constructors or destructors. - - See also *note Namespace Association::. - - -File: gcc.info, Node: Function Multiversioning, Next: Namespace Association, Prev: C++ Attributes, Up: C++ Extensions - -7.8 Function Multiversioning -============================ - -With the GNU C++ front end, for target i386, you may specify multiple -versions of a function, where each function is specialized for a -specific target feature. At runtime, the appropriate version of the -function is automatically executed depending on the characteristics of -the execution platform. Here is an example. - - __attribute__ ((target ("default"))) - int foo () - { - // The default version of foo. - return 0; - } - - __attribute__ ((target ("sse4.2"))) - int foo () - { - // foo version for SSE4.2 - return 1; - } - - __attribute__ ((target ("arch=atom"))) - int foo () - { - // foo version for the Intel ATOM processor - return 2; - } - - __attribute__ ((target ("arch=amdfam10"))) - int foo () - { - // foo version for the AMD Family 0x10 processors. - return 3; - } - - int main () - { - int (*p)() = &foo; - assert ((*p) () == foo ()); - return 0; - } - - In the above example, four versions of function foo are created. The -first version of foo with the target attribute "default" is the default -version. This version gets executed when no other target specific -version qualifies for execution on a particular platform. A new version -of foo is created by using the same function signature but with a -different target string. Function foo is called or a pointer to it is -taken just like a regular function. GCC takes care of doing the -dispatching to call the right version at runtime. Refer to the GCC wiki -on Function Multiversioning -(http://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details. - - -File: gcc.info, Node: Namespace Association, Next: Type Traits, Prev: Function Multiversioning, Up: C++ Extensions - -7.9 Namespace Association -========================= - -*Caution:* The semantics of this extension are equivalent to C++ 2011 -inline namespaces. Users should use inline namespaces instead as this -extension will be removed in future versions of G++. - - A using-directive with '__attribute ((strong))' is stronger than a -normal using-directive in two ways: - - * Templates from the used namespace can be specialized and explicitly - instantiated as though they were members of the using namespace. - - * The using namespace is considered an associated namespace of all - templates in the used namespace for purposes of argument-dependent - name lookup. - - The used namespace must be nested within the using namespace so that -normal unqualified lookup works properly. - - This is useful for composing a namespace transparently from -implementation namespaces. For example: - - namespace std { - namespace debug { - template <class T> struct A { }; - } - using namespace debug __attribute ((__strong__)); - template <> struct A<int> { }; // OK to specialize - - template <class T> void f (A<T>); - } - - int main() - { - f (std::A<float>()); // lookup finds std::f - f (std::A<int>()); - } - - -File: gcc.info, Node: Type Traits, Next: Java Exceptions, Prev: Namespace Association, Up: C++ Extensions - -7.10 Type Traits -================ - -The C++ front end implements syntactic extensions that allow -compile-time determination of various characteristics of a type (or of a -pair of types). - -'__has_nothrow_assign (type)' - If 'type' is const qualified or is a reference type then the trait - is false. Otherwise if '__has_trivial_assign (type)' is true then - the trait is true, else if 'type' is a cv class or union type with - copy assignment operators that are known not to throw an exception - then the trait is true, else it is false. Requires: 'type' shall - be a complete type, (possibly cv-qualified) 'void', or an array of - unknown bound. - -'__has_nothrow_copy (type)' - If '__has_trivial_copy (type)' is true then the trait is true, else - if 'type' is a cv class or union type with copy constructors that - are known not to throw an exception then the trait is true, else it - is false. Requires: 'type' shall be a complete type, (possibly - cv-qualified) 'void', or an array of unknown bound. - -'__has_nothrow_constructor (type)' - If '__has_trivial_constructor (type)' is true then the trait is - true, else if 'type' is a cv class or union type (or array thereof) - with a default constructor that is known not to throw an exception - then the trait is true, else it is false. Requires: 'type' shall - be a complete type, (possibly cv-qualified) 'void', or an array of - unknown bound. - -'__has_trivial_assign (type)' - If 'type' is const qualified or is a reference type then the trait - is false. Otherwise if '__is_pod (type)' is true then the trait is - true, else if 'type' is a cv class or union type with a trivial - copy assignment ([class.copy]) then the trait is true, else it is - false. Requires: 'type' shall be a complete type, (possibly - cv-qualified) 'void', or an array of unknown bound. - -'__has_trivial_copy (type)' - If '__is_pod (type)' is true or 'type' is a reference type then the - trait is true, else if 'type' is a cv class or union type with a - trivial copy constructor ([class.copy]) then the trait is true, - else it is false. Requires: 'type' shall be a complete type, - (possibly cv-qualified) 'void', or an array of unknown bound. - -'__has_trivial_constructor (type)' - If '__is_pod (type)' is true then the trait is true, else if 'type' - is a cv class or union type (or array thereof) with a trivial - default constructor ([class.ctor]) then the trait is true, else it - is false. Requires: 'type' shall be a complete type, (possibly - cv-qualified) 'void', or an array of unknown bound. - -'__has_trivial_destructor (type)' - If '__is_pod (type)' is true or 'type' is a reference type then the - trait is true, else if 'type' is a cv class or union type (or array - thereof) with a trivial destructor ([class.dtor]) then the trait is - true, else it is false. Requires: 'type' shall be a complete type, - (possibly cv-qualified) 'void', or an array of unknown bound. - -'__has_virtual_destructor (type)' - If 'type' is a class type with a virtual destructor ([class.dtor]) - then the trait is true, else it is false. Requires: 'type' shall - be a complete type, (possibly cv-qualified) 'void', or an array of - unknown bound. - -'__is_abstract (type)' - If 'type' is an abstract class ([class.abstract]) then the trait is - true, else it is false. Requires: 'type' shall be a complete type, - (possibly cv-qualified) 'void', or an array of unknown bound. - -'__is_base_of (base_type, derived_type)' - If 'base_type' is a base class of 'derived_type' ([class.derived]) - then the trait is true, otherwise it is false. Top-level cv - qualifications of 'base_type' and 'derived_type' are ignored. For - the purposes of this trait, a class type is considered is own base. - Requires: if '__is_class (base_type)' and '__is_class - (derived_type)' are true and 'base_type' and 'derived_type' are not - the same type (disregarding cv-qualifiers), 'derived_type' shall be - a complete type. Diagnostic is produced if this requirement is not - met. - -'__is_class (type)' - If 'type' is a cv class type, and not a union type - ([basic.compound]) the trait is true, else it is false. - -'__is_empty (type)' - If '__is_class (type)' is false then the trait is false. Otherwise - 'type' is considered empty if and only if: 'type' has no non-static - data members, or all non-static data members, if any, are - bit-fields of length 0, and 'type' has no virtual members, and - 'type' has no virtual base classes, and 'type' has no base classes - 'base_type' for which '__is_empty (base_type)' is false. Requires: - 'type' shall be a complete type, (possibly cv-qualified) 'void', or - an array of unknown bound. - -'__is_enum (type)' - If 'type' is a cv enumeration type ([basic.compound]) the trait is - true, else it is false. - -'__is_literal_type (type)' - If 'type' is a literal type ([basic.types]) the trait is true, else - it is false. Requires: 'type' shall be a complete type, (possibly - cv-qualified) 'void', or an array of unknown bound. - -'__is_pod (type)' - If 'type' is a cv POD type ([basic.types]) then the trait is true, - else it is false. Requires: 'type' shall be a complete type, - (possibly cv-qualified) 'void', or an array of unknown bound. - -'__is_polymorphic (type)' - If 'type' is a polymorphic class ([class.virtual]) then the trait - is true, else it is false. Requires: 'type' shall be a complete - type, (possibly cv-qualified) 'void', or an array of unknown bound. - -'__is_standard_layout (type)' - If 'type' is a standard-layout type ([basic.types]) the trait is - true, else it is false. Requires: 'type' shall be a complete type, - (possibly cv-qualified) 'void', or an array of unknown bound. - -'__is_trivial (type)' - If 'type' is a trivial type ([basic.types]) the trait is true, else - it is false. Requires: 'type' shall be a complete type, (possibly - cv-qualified) 'void', or an array of unknown bound. - -'__is_union (type)' - If 'type' is a cv union type ([basic.compound]) the trait is true, - else it is false. - -'__underlying_type (type)' - The underlying type of 'type'. Requires: 'type' shall be an - enumeration type ([dcl.enum]). - - -File: gcc.info, Node: Java Exceptions, Next: Deprecated Features, Prev: Type Traits, Up: C++ Extensions - -7.11 Java Exceptions -==================== - -The Java language uses a slightly different exception handling model -from C++. Normally, GNU C++ automatically detects when you are writing -C++ code that uses Java exceptions, and handle them appropriately. -However, if C++ code only needs to execute destructors when Java -exceptions are thrown through it, GCC guesses incorrectly. Sample -problematic code is: - - struct S { ~S(); }; - extern void bar(); // is written in Java, and may throw exceptions - void foo() - { - S s; - bar(); - } - -The usual effect of an incorrect guess is a link failure, complaining of -a missing routine called '__gxx_personality_v0'. - - You can inform the compiler that Java exceptions are to be used in a -translation unit, irrespective of what it might think, by writing -'#pragma GCC java_exceptions' at the head of the file. This '#pragma' -must appear before any functions that throw or catch exceptions, or run -destructors when exceptions are thrown through them. - - You cannot mix Java and C++ exceptions in the same translation unit. -It is believed to be safe to throw a C++ exception from one file through -another file compiled for the Java exception model, or vice versa, but -there may be bugs in this area. - - -File: gcc.info, Node: Deprecated Features, Next: Backwards Compatibility, Prev: Java Exceptions, Up: C++ Extensions - -7.12 Deprecated Features -======================== - -In the past, the GNU C++ compiler was extended to experiment with new -features, at a time when the C++ language was still evolving. Now that -the C++ standard is complete, some of those features are superseded by -superior alternatives. Using the old features might cause a warning in -some cases that the feature will be dropped in the future. In other -cases, the feature might be gone already. - - While the list below is not exhaustive, it documents some of the -options that are now deprecated: - -'-fexternal-templates' -'-falt-external-templates' - These are two of the many ways for G++ to implement template - instantiation. *Note Template Instantiation::. The C++ standard - clearly defines how template definitions have to be organized - across implementation units. G++ has an implicit instantiation - mechanism that should work just fine for standard-conforming code. - -'-fstrict-prototype' -'-fno-strict-prototype' - Previously it was possible to use an empty prototype parameter list - to indicate an unspecified number of parameters (like C), rather - than no parameters, as C++ demands. This feature has been removed, - except where it is required for backwards compatibility. *Note - Backwards Compatibility::. - - G++ allows a virtual function returning 'void *' to be overridden by -one returning a different pointer type. This extension to the covariant -return type rules is now deprecated and will be removed from a future -version. - - The G++ minimum and maximum operators ('<?' and '>?') and their -compound forms ('<?=') and '>?=') have been deprecated and are now -removed from G++. Code using these operators should be modified to use -'std::min' and 'std::max' instead. - - The named return value extension has been deprecated, and is now -removed from G++. - - The use of initializer lists with new expressions has been deprecated, -and is now removed from G++. - - Floating and complex non-type template parameters have been deprecated, -and are now removed from G++. - - The implicit typename extension has been deprecated and is now removed -from G++. - - The use of default arguments in function pointers, function typedefs -and other places where they are not permitted by the standard is -deprecated and will be removed from a future version of G++. - - G++ allows floating-point literals to appear in integral constant -expressions, e.g. ' enum E { e = int(2.2 * 3.7) } ' This extension is -deprecated and will be removed from a future version. - - G++ allows static data members of const floating-point type to be -declared with an initializer in a class definition. The standard only -allows initializers for static members of const integral types and const -enumeration types so this extension has been deprecated and will be -removed from a future version. - - -File: gcc.info, Node: Backwards Compatibility, Prev: Deprecated Features, Up: C++ Extensions - -7.13 Backwards Compatibility -============================ - -Now that there is a definitive ISO standard C++, G++ has a specification -to adhere to. The C++ language evolved over time, and features that -used to be acceptable in previous drafts of the standard, such as the -ARM [Annotated C++ Reference Manual], are no longer accepted. In order -to allow compilation of C++ written to such drafts, G++ contains some -backwards compatibilities. _All such backwards compatibility features -are liable to disappear in future versions of G++._ They should be -considered deprecated. *Note Deprecated Features::. - -'For scope' - If a variable is declared at for scope, it used to remain in scope - until the end of the scope that contained the for statement (rather - than just within the for scope). G++ retains this, but issues a - warning, if such a variable is accessed outside the for scope. - -'Implicit C language' - Old C system header files did not contain an 'extern "C" {...}' - scope to set the language. On such systems, all header files are - implicitly scoped inside a C language scope. Also, an empty - prototype '()' is treated as an unspecified number of arguments, - rather than no arguments, as C++ demands. - - -File: gcc.info, Node: Objective-C, Next: Compatibility, Prev: C++ Extensions, Up: Top - -8 GNU Objective-C features -************************** - -This document is meant to describe some of the GNU Objective-C features. -It is not intended to teach you Objective-C. There are several resources -on the Internet that present the language. - -* Menu: - -* GNU Objective-C runtime API:: -* Executing code before main:: -* Type encoding:: -* Garbage Collection:: -* Constant string objects:: -* compatibility_alias:: -* Exceptions:: -* Synchronization:: -* Fast enumeration:: -* Messaging with the GNU Objective-C runtime:: - - -File: gcc.info, Node: GNU Objective-C runtime API, Next: Executing code before main, Up: Objective-C - -8.1 GNU Objective-C runtime API -=============================== - -This section is specific for the GNU Objective-C runtime. If you are -using a different runtime, you can skip it. - - The GNU Objective-C runtime provides an API that allows you to interact -with the Objective-C runtime system, querying the live runtime -structures and even manipulating them. This allows you for example to -inspect and navigate classes, methods and protocols; to define new -classes or new methods, and even to modify existing classes or -protocols. - - If you are using a "Foundation" library such as GNUstep-Base, this -library will provide you with a rich set of functionality to do most of -the inspection tasks, and you probably will only need direct access to -the GNU Objective-C runtime API to define new classes or methods. - -* Menu: - -* Modern GNU Objective-C runtime API:: -* Traditional GNU Objective-C runtime API:: - - -File: gcc.info, Node: Modern GNU Objective-C runtime API, Next: Traditional GNU Objective-C runtime API, Up: GNU Objective-C runtime API - -8.1.1 Modern GNU Objective-C runtime API ----------------------------------------- - -The GNU Objective-C runtime provides an API which is similar to the one -provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime. The -API is documented in the public header files of the GNU Objective-C -runtime: - - * 'objc/objc.h': this is the basic Objective-C header file, defining - the basic Objective-C types such as 'id', 'Class' and 'BOOL'. You - have to include this header to do almost anything with Objective-C. - - * 'objc/runtime.h': this header declares most of the public runtime - API functions allowing you to inspect and manipulate the - Objective-C runtime data structures. These functions are fairly - standardized across Objective-C runtimes and are almost identical - to the Apple/NeXT Objective-C runtime ones. It does not declare - functions in some specialized areas (constructing and forwarding - message invocations, threading) which are in the other headers - below. You have to include 'objc/objc.h' and 'objc/runtime.h' to - use any of the functions, such as 'class_getName()', declared in - 'objc/runtime.h'. - - * 'objc/message.h': this header declares public functions used to - construct, deconstruct and forward message invocations. Because - messaging is done in quite a different way on different runtimes, - functions in this header are specific to the GNU Objective-C - runtime implementation. - - * 'objc/objc-exception.h': this header declares some public functions - related to Objective-C exceptions. For example functions in this - header allow you to throw an Objective-C exception from plain C/C++ - code. - - * 'objc/objc-sync.h': this header declares some public functions - related to the Objective-C '@synchronized()' syntax, allowing you - to emulate an Objective-C '@synchronized()' block in plain C/C++ - code. - - * 'objc/thr.h': this header declares a public runtime API threading - layer that is only provided by the GNU Objective-C runtime. It - declares functions such as 'objc_mutex_lock()', which provide a - platform-independent set of threading functions. - - The header files contain detailed documentation for each function in -the GNU Objective-C runtime API. - - -File: gcc.info, Node: Traditional GNU Objective-C runtime API, Prev: Modern GNU Objective-C runtime API, Up: GNU Objective-C runtime API - -8.1.2 Traditional GNU Objective-C runtime API ---------------------------------------------- - -The GNU Objective-C runtime used to provide a different API, which we -call the "traditional" GNU Objective-C runtime API. Functions belonging -to this API are easy to recognize because they use a different naming -convention, such as 'class_get_super_class()' (traditional API) instead -of 'class_getSuperclass()' (modern API). Software using this API -includes the file 'objc/objc-api.h' where it is declared. - - Starting with GCC 4.7.0, the traditional GNU runtime API is no longer -available. - - -File: gcc.info, Node: Executing code before main, Next: Type encoding, Prev: GNU Objective-C runtime API, Up: Objective-C - -8.2 '+load': Executing code before main -======================================= - -This section is specific for the GNU Objective-C runtime. If you are -using a different runtime, you can skip it. - - The GNU Objective-C runtime provides a way that allows you to execute -code before the execution of the program enters the 'main' function. -The code is executed on a per-class and a per-category basis, through a -special class method '+load'. - - This facility is very useful if you want to initialize global variables -which can be accessed by the program directly, without sending a message -to the class first. The usual way to initialize global variables, in -the '+initialize' method, might not be useful because '+initialize' is -only called when the first message is sent to a class object, which in -some cases could be too late. - - Suppose for example you have a 'FileStream' class that declares -'Stdin', 'Stdout' and 'Stderr' as global variables, like below: - - - FileStream *Stdin = nil; - FileStream *Stdout = nil; - FileStream *Stderr = nil; - - @implementation FileStream - - + (void)initialize - { - Stdin = [[FileStream new] initWithFd:0]; - Stdout = [[FileStream new] initWithFd:1]; - Stderr = [[FileStream new] initWithFd:2]; - } - - /* Other methods here */ - @end - - In this example, the initialization of 'Stdin', 'Stdout' and 'Stderr' -in '+initialize' occurs too late. The programmer can send a message to -one of these objects before the variables are actually initialized, thus -sending messages to the 'nil' object. The '+initialize' method which -actually initializes the global variables is not invoked until the first -message is sent to the class object. The solution would require these -variables to be initialized just before entering 'main'. - - The correct solution of the above problem is to use the '+load' method -instead of '+initialize': - - - @implementation FileStream - - + (void)load - { - Stdin = [[FileStream new] initWithFd:0]; - Stdout = [[FileStream new] initWithFd:1]; - Stderr = [[FileStream new] initWithFd:2]; - } - - /* Other methods here */ - @end - - The '+load' is a method that is not overridden by categories. If a -class and a category of it both implement '+load', both methods are -invoked. This allows some additional initializations to be performed in -a category. - - This mechanism is not intended to be a replacement for '+initialize'. -You should be aware of its limitations when you decide to use it instead -of '+initialize'. - -* Menu: - -* What you can and what you cannot do in +load:: - - -File: gcc.info, Node: What you can and what you cannot do in +load, Up: Executing code before main - -8.2.1 What you can and what you cannot do in '+load' ----------------------------------------------------- - -'+load' is to be used only as a last resort. Because it is executed -very early, most of the Objective-C runtime machinery will not be ready -when '+load' is executed; hence '+load' works best for executing C code -that is independent on the Objective-C runtime. - - The '+load' implementation in the GNU runtime guarantees you the -following things: - - * you can write whatever C code you like; - - * you can allocate and send messages to objects whose class is - implemented in the same file; - - * the '+load' implementation of all super classes of a class are - executed before the '+load' of that class is executed; - - * the '+load' implementation of a class is executed before the - '+load' implementation of any category. - - In particular, the following things, even if they can work in a -particular case, are not guaranteed: - - * allocation of or sending messages to arbitrary objects; - - * allocation of or sending messages to objects whose classes have a - category implemented in the same file; - - * sending messages to Objective-C constant strings ('@"this is a - constant string"'); - - You should make no assumptions about receiving '+load' in sibling -classes when you write '+load' of a class. The order in which sibling -classes receive '+load' is not guaranteed. - - The order in which '+load' and '+initialize' are called could be -problematic if this matters. If you don't allocate objects inside -'+load', it is guaranteed that '+load' is called before '+initialize'. -If you create an object inside '+load' the '+initialize' method of -object's class is invoked even if '+load' was not invoked. Note if you -explicitly call '+load' on a class, '+initialize' will be called first. -To avoid possible problems try to implement only one of these methods. - - The '+load' method is also invoked when a bundle is dynamically loaded -into your running program. This happens automatically without any -intervening operation from you. When you write bundles and you need to -write '+load' you can safely create and send messages to objects whose -classes already exist in the running program. The same restrictions as -above apply to classes defined in bundle. - - -File: gcc.info, Node: Type encoding, Next: Garbage Collection, Prev: Executing code before main, Up: Objective-C - -8.3 Type encoding -================= - -This is an advanced section. Type encodings are used extensively by the -compiler and by the runtime, but you generally do not need to know about -them to use Objective-C. - - The Objective-C compiler generates type encodings for all the types. -These type encodings are used at runtime to find out information about -selectors and methods and about objects and classes. - - The types are encoded in the following way: - -'_Bool' 'B' -'char' 'c' -'unsigned char' 'C' -'short' 's' -'unsigned short' 'S' -'int' 'i' -'unsigned int' 'I' -'long' 'l' -'unsigned long' 'L' -'long long' 'q' -'unsigned long 'Q' -long' -'float' 'f' -'double' 'd' -'long double' 'D' -'void' 'v' -'id' '@' -'Class' '#' -'SEL' ':' -'char*' '*' -'enum' an 'enum' is encoded exactly as the integer type - that the compiler uses for it, which depends on the - enumeration values. Often the compiler users - 'unsigned int', which is then encoded as 'I'. -unknown type '?' -Complex types 'j' followed by the inner type. For example - '_Complex double' is encoded as "jd". -bit-fields 'b' followed by the starting position of the - bit-field, the type of the bit-field and the size of - the bit-field (the bit-fields encoding was changed - from the NeXT's compiler encoding, see below) - - The encoding of bit-fields has changed to allow bit-fields to be -properly handled by the runtime functions that compute sizes and -alignments of types that contain bit-fields. The previous encoding -contained only the size of the bit-field. Using only this information -it is not possible to reliably compute the size occupied by the -bit-field. This is very important in the presence of the Boehm's -garbage collector because the objects are allocated using the typed -memory facility available in this collector. The typed memory -allocation requires information about where the pointers are located -inside the object. - - The position in the bit-field is the position, counting in bits, of the -bit closest to the beginning of the structure. - - The non-atomic types are encoded as follows: - -pointers '^' followed by the pointed type. -arrays '[' followed by the number of elements in the array - followed by the type of the elements followed by ']' -structures '{' followed by the name of the structure (or '?' if the - structure is unnamed), the '=' sign, the type of the - members and by '}' -unions '(' followed by the name of the structure (or '?' if the - union is unnamed), the '=' sign, the type of the members - followed by ')' -vectors '![' followed by the vector_size (the number of bytes - composing the vector) followed by a comma, followed by - the alignment (in bytes) of the vector, followed by the - type of the elements followed by ']' - - Here are some types and their encodings, as they are generated by the -compiler on an i386 machine: - - -Objective-C type Compiler encoding - int a[10]; '[10i]' - struct { '{?=i[3f]b128i3b131i2c}' - int i; - float f[3]; - int a:3; - int b:2; - char c; - } - int a __attribute__ ((vector_size (16)));'![16,16i]' (alignment would depend on the machine) - - - In addition to the types the compiler also encodes the type specifiers. -The table below describes the encoding of the current Objective-C type -specifiers: - - -Specifier Encoding -'const' 'r' -'in' 'n' -'inout' 'N' -'out' 'o' -'bycopy' 'O' -'byref' 'R' -'oneway' 'V' - - - The type specifiers are encoded just before the type. Unlike types -however, the type specifiers are only encoded when they appear in method -argument types. - - Note how 'const' interacts with pointers: - - -Objective-C type Compiler encoding - const int 'ri' - const int* '^ri' - int *const 'r^i' - - - 'const int*' is a pointer to a 'const int', and so is encoded as '^ri'. -'int* const', instead, is a 'const' pointer to an 'int', and so is -encoded as 'r^i'. - - Finally, there is a complication when encoding 'const char *' versus -'char * const'. Because 'char *' is encoded as '*' and not as '^c', -there is no way to express the fact that 'r' applies to the pointer or -to the pointee. - - Hence, it is assumed as a convention that 'r*' means 'const char *' -(since it is what is most often meant), and there is no way to encode -'char *const'. 'char *const' would simply be encoded as '*', and the -'const' is lost. - -* Menu: - -* Legacy type encoding:: -* @encode:: -* Method signatures:: - - -File: gcc.info, Node: Legacy type encoding, Next: @encode, Up: Type encoding - -8.3.1 Legacy type encoding --------------------------- - -Unfortunately, historically GCC used to have a number of bugs in its -encoding code. The NeXT runtime expects GCC to emit type encodings in -this historical format (compatible with GCC-3.3), so when using the NeXT -runtime, GCC will introduce on purpose a number of incorrect encodings: - - * the read-only qualifier of the pointee gets emitted before the '^'. - The read-only qualifier of the pointer itself gets ignored, unless - it is a typedef. Also, the 'r' is only emitted for the outermost - type. - - * 32-bit longs are encoded as 'l' or 'L', but not always. For - typedefs, the compiler uses 'i' or 'I' instead if encoding a struct - field or a pointer. - - * 'enum's are always encoded as 'i' (int) even if they are actually - unsigned or long. - - In addition to that, the NeXT runtime uses a different encoding for -bitfields. It encodes them as 'b' followed by the size, without a bit -offset or the underlying field type. - - -File: gcc.info, Node: @encode, Next: Method signatures, Prev: Legacy type encoding, Up: Type encoding - -8.3.2 @encode -------------- - -GNU Objective-C supports the '@encode' syntax that allows you to create -a type encoding from a C/Objective-C type. For example, '@encode(int)' -is compiled by the compiler into '"i"'. - - '@encode' does not support type qualifiers other than 'const'. For -example, '@encode(const char*)' is valid and is compiled into '"r*"', -while '@encode(bycopy char *)' is invalid and will cause a compilation -error. - - -File: gcc.info, Node: Method signatures, Prev: @encode, Up: Type encoding - -8.3.3 Method signatures ------------------------ - -This section documents the encoding of method types, which is rarely -needed to use Objective-C. You should skip it at a first reading; the -runtime provides functions that will work on methods and can walk -through the list of parameters and interpret them for you. These -functions are part of the public "API" and are the preferred way to -interact with method signatures from user code. - - But if you need to debug a problem with method signatures and need to -know how they are implemented (i.e., the "ABI"), read on. - - Methods have their "signature" encoded and made available to the -runtime. The "signature" encodes all the information required to -dynamically build invocations of the method at runtime: return type and -arguments. - - The "signature" is a null-terminated string, composed of the following: - - * The return type, including type qualifiers. For example, a method - returning 'int' would have 'i' here. - - * The total size (in bytes) required to pass all the parameters. - This includes the two hidden parameters (the object 'self' and the - method selector '_cmd'). - - * Each argument, with the type encoding, followed by the offset (in - bytes) of the argument in the list of parameters. - - For example, a method with no arguments and returning 'int' would have -the signature 'i8@0:4' if the size of a pointer is 4. The signature is -interpreted as follows: the 'i' is the return type (an 'int'), the '8' -is the total size of the parameters in bytes (two pointers each of size -4), the '@0' is the first parameter (an object at byte offset '0') and -':4' is the second parameter (a 'SEL' at byte offset '4'). - - You can easily find more examples by running the "strings" program on -an Objective-C object file compiled by GCC. You'll see a lot of strings -that look very much like 'i8@0:4'. They are signatures of Objective-C -methods. - - -File: gcc.info, Node: Garbage Collection, Next: Constant string objects, Prev: Type encoding, Up: Objective-C - -8.4 Garbage Collection -====================== - -This section is specific for the GNU Objective-C runtime. If you are -using a different runtime, you can skip it. - - Support for garbage collection with the GNU runtime has been added by -using a powerful conservative garbage collector, known as the -Boehm-Demers-Weiser conservative garbage collector. - - To enable the support for it you have to configure the compiler using -an additional argument, '--enable-objc-gc'. This will build the -boehm-gc library, and build an additional runtime library which has -several enhancements to support the garbage collector. The new library -has a new name, 'libobjc_gc.a' to not conflict with the -non-garbage-collected library. - - When the garbage collector is used, the objects are allocated using the -so-called typed memory allocation mechanism available in the -Boehm-Demers-Weiser collector. This mode requires precise information -on where pointers are located inside objects. This information is -computed once per class, immediately after the class has been -initialized. - - There is a new runtime function 'class_ivar_set_gcinvisible()' which -can be used to declare a so-called "weak pointer" reference. Such a -pointer is basically hidden for the garbage collector; this can be -useful in certain situations, especially when you want to keep track of -the allocated objects, yet allow them to be collected. This kind of -pointers can only be members of objects, you cannot declare a global -pointer as a weak reference. Every type which is a pointer type can be -declared a weak pointer, including 'id', 'Class' and 'SEL'. - - Here is an example of how to use this feature. Suppose you want to -implement a class whose instances hold a weak pointer reference; the -following class does this: - - - @interface WeakPointer : Object - { - const void* weakPointer; - } - - - initWithPointer:(const void*)p; - - (const void*)weakPointer; - @end - - - @implementation WeakPointer - - + (void)initialize - { - if (self == objc_lookUpClass ("WeakPointer")) - class_ivar_set_gcinvisible (self, "weakPointer", YES); - } - - - initWithPointer:(const void*)p - { - weakPointer = p; - return self; - } - - - (const void*)weakPointer - { - return weakPointer; - } - - @end - - Weak pointers are supported through a new type character specifier -represented by the '!' character. The 'class_ivar_set_gcinvisible()' -function adds or removes this specifier to the string type description -of the instance variable named as argument. - - -File: gcc.info, Node: Constant string objects, Next: compatibility_alias, Prev: Garbage Collection, Up: Objective-C - -8.5 Constant string objects -=========================== - -GNU Objective-C provides constant string objects that are generated -directly by the compiler. You declare a constant string object by -prefixing a C constant string with the character '@': - - id myString = @"this is a constant string object"; - - The constant string objects are by default instances of the -'NXConstantString' class which is provided by the GNU Objective-C -runtime. To get the definition of this class you must include the -'objc/NXConstStr.h' header file. - - User defined libraries may want to implement their own constant string -class. To be able to support them, the GNU Objective-C compiler -provides a new command line options -'-fconstant-string-class=CLASS-NAME'. The provided class should adhere -to a strict structure, the same as 'NXConstantString''s structure: - - - @interface MyConstantStringClass - { - Class isa; - char *c_string; - unsigned int len; - } - @end - - 'NXConstantString' inherits from 'Object'; user class libraries may -choose to inherit the customized constant string class from a different -class than 'Object'. There is no requirement in the methods the -constant string class has to implement, but the final ivar layout of the -class must be the compatible with the given structure. - - When the compiler creates the statically allocated constant string -object, the 'c_string' field will be filled by the compiler with the -string; the 'length' field will be filled by the compiler with the -string length; the 'isa' pointer will be filled with 'NULL' by the -compiler, and it will later be fixed up automatically at runtime by the -GNU Objective-C runtime library to point to the class which was set by -the '-fconstant-string-class' option when the object file is loaded (if -you wonder how it works behind the scenes, the name of the class to use, -and the list of static objects to fixup, are stored by the compiler in -the object file in a place where the GNU runtime library will find them -at runtime). - - As a result, when a file is compiled with the '-fconstant-string-class' -option, all the constant string objects will be instances of the class -specified as argument to this option. It is possible to have multiple -compilation units referring to different constant string classes, -neither the compiler nor the linker impose any restrictions in doing -this. - - -File: gcc.info, Node: compatibility_alias, Next: Exceptions, Prev: Constant string objects, Up: Objective-C - -8.6 compatibility_alias -======================= - -The keyword '@compatibility_alias' allows you to define a class name as -equivalent to another class name. For example: - - @compatibility_alias WOApplication GSWApplication; - - tells the compiler that each time it encounters 'WOApplication' as a -class name, it should replace it with 'GSWApplication' (that is, -'WOApplication' is just an alias for 'GSWApplication'). - - There are some constraints on how this can be used-- - - * 'WOApplication' (the alias) must not be an existing class; - - * 'GSWApplication' (the real class) must be an existing class. - - -File: gcc.info, Node: Exceptions, Next: Synchronization, Prev: compatibility_alias, Up: Objective-C - -8.7 Exceptions -============== - -GNU Objective-C provides exception support built into the language, as -in the following example: - - @try { - ... - @throw expr; - ... - } - @catch (AnObjCClass *exc) { - ... - @throw expr; - ... - @throw; - ... - } - @catch (AnotherClass *exc) { - ... - } - @catch (id allOthers) { - ... - } - @finally { - ... - @throw expr; - ... - } - - The '@throw' statement may appear anywhere in an Objective-C or -Objective-C++ program; when used inside of a '@catch' block, the -'@throw' may appear without an argument (as shown above), in which case -the object caught by the '@catch' will be rethrown. - - Note that only (pointers to) Objective-C objects may be thrown and -caught using this scheme. When an object is thrown, it will be caught -by the nearest '@catch' clause capable of handling objects of that type, -analogously to how 'catch' blocks work in C++ and Java. A '@catch(id -...)' clause (as shown above) may also be provided to catch any and all -Objective-C exceptions not caught by previous '@catch' clauses (if any). - - The '@finally' clause, if present, will be executed upon exit from the -immediately preceding '@try ... @catch' section. This will happen -regardless of whether any exceptions are thrown, caught or rethrown -inside the '@try ... @catch' section, analogously to the behavior of the -'finally' clause in Java. - - There are several caveats to using the new exception mechanism: - - * The '-fobjc-exceptions' command line option must be used when - compiling Objective-C files that use exceptions. - - * With the GNU runtime, exceptions are always implemented as "native" - exceptions and it is recommended that the '-fexceptions' and - '-shared-libgcc' options are used when linking. - - * With the NeXT runtime, although currently designed to be binary - compatible with 'NS_HANDLER'-style idioms provided by the - 'NSException' class, the new exceptions can only be used on Mac OS - X 10.3 (Panther) and later systems, due to additional functionality - needed in the NeXT Objective-C runtime. - - * As mentioned above, the new exceptions do not support handling - types other than Objective-C objects. Furthermore, when used from - Objective-C++, the Objective-C exception model does not - interoperate with C++ exceptions at this time. This means you - cannot '@throw' an exception from Objective-C and 'catch' it in - C++, or vice versa (i.e., 'throw ... @catch'). - - -File: gcc.info, Node: Synchronization, Next: Fast enumeration, Prev: Exceptions, Up: Objective-C - -8.8 Synchronization -=================== - -GNU Objective-C provides support for synchronized blocks: - - @synchronized (ObjCClass *guard) { - ... - } - - Upon entering the '@synchronized' block, a thread of execution shall -first check whether a lock has been placed on the corresponding 'guard' -object by another thread. If it has, the current thread shall wait -until the other thread relinquishes its lock. Once 'guard' becomes -available, the current thread will place its own lock on it, execute the -code contained in the '@synchronized' block, and finally relinquish the -lock (thereby making 'guard' available to other threads). - - Unlike Java, Objective-C does not allow for entire methods to be marked -'@synchronized'. Note that throwing exceptions out of '@synchronized' -blocks is allowed, and will cause the guarding object to be unlocked -properly. - - Because of the interactions between synchronization and exception -handling, you can only use '@synchronized' when compiling with -exceptions enabled, that is with the command line option -'-fobjc-exceptions'. - - -File: gcc.info, Node: Fast enumeration, Next: Messaging with the GNU Objective-C runtime, Prev: Synchronization, Up: Objective-C - -8.9 Fast enumeration -==================== - -* Menu: - -* Using fast enumeration:: -* c99-like fast enumeration syntax:: -* Fast enumeration details:: -* Fast enumeration protocol:: - - -File: gcc.info, Node: Using fast enumeration, Next: c99-like fast enumeration syntax, Up: Fast enumeration - -8.9.1 Using fast enumeration ----------------------------- - -GNU Objective-C provides support for the fast enumeration syntax: - - id array = ...; - id object; - - for (object in array) - { - /* Do something with 'object' */ - } - - 'array' needs to be an Objective-C object (usually a collection object, -for example an array, a dictionary or a set) which implements the "Fast -Enumeration Protocol" (see below). If you are using a Foundation -library such as GNUstep Base or Apple Cocoa Foundation, all collection -objects in the library implement this protocol and can be used in this -way. - - The code above would iterate over all objects in 'array'. For each of -them, it assigns it to 'object', then executes the 'Do something with -'object'' statements. - - Here is a fully worked-out example using a Foundation library (which -provides the implementation of 'NSArray', 'NSString' and 'NSLog'): - - NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil]; - NSString *object; - - for (object in array) - NSLog (@"Iterating over %@", object); - - -File: gcc.info, Node: c99-like fast enumeration syntax, Next: Fast enumeration details, Prev: Using fast enumeration, Up: Fast enumeration - -8.9.2 c99-like fast enumeration syntax --------------------------------------- - -A c99-like declaration syntax is also allowed: - - id array = ...; - - for (id object in array) - { - /* Do something with 'object' */ - } - - this is completely equivalent to: - - id array = ...; - - { - id object; - for (object in array) - { - /* Do something with 'object' */ - } - } - - but can save some typing. - - Note that the option '-std=c99' is not required to allow this syntax in -Objective-C. - - -File: gcc.info, Node: Fast enumeration details, Next: Fast enumeration protocol, Prev: c99-like fast enumeration syntax, Up: Fast enumeration - -8.9.3 Fast enumeration details ------------------------------- - -Here is a more technical description with the gory details. Consider -the code - - for (OBJECT EXPRESSION in COLLECTION EXPRESSION) - { - STATEMENTS - } - - here is what happens when you run it: - - * 'COLLECTION EXPRESSION' is evaluated exactly once and the result is - used as the collection object to iterate over. This means it is - safe to write code such as 'for (object in [NSDictionary - keyEnumerator]) ...'. - - * the iteration is implemented by the compiler by repeatedly getting - batches of objects from the collection object using the fast - enumeration protocol (see below), then iterating over all objects - in the batch. This is faster than a normal enumeration where - objects are retrieved one by one (hence the name "fast - enumeration"). - - * if there are no objects in the collection, then 'OBJECT EXPRESSION' - is set to 'nil' and the loop immediately terminates. - - * if there are objects in the collection, then for each object in the - collection (in the order they are returned) 'OBJECT EXPRESSION' is - set to the object, then 'STATEMENTS' are executed. - - * 'STATEMENTS' can contain 'break' and 'continue' commands, which - will abort the iteration or skip to the next loop iteration as - expected. - - * when the iteration ends because there are no more objects to - iterate over, 'OBJECT EXPRESSION' is set to 'nil'. This allows you - to determine whether the iteration finished because a 'break' - command was used (in which case 'OBJECT EXPRESSION' will remain set - to the last object that was iterated over) or because it iterated - over all the objects (in which case 'OBJECT EXPRESSION' will be set - to 'nil'). - - * 'STATEMENTS' must not make any changes to the collection object; if - they do, it is a hard error and the fast enumeration terminates by - invoking 'objc_enumerationMutation', a runtime function that - normally aborts the program but which can be customized by - Foundation libraries via 'objc_set_mutation_handler' to do - something different, such as raising an exception. - - -File: gcc.info, Node: Fast enumeration protocol, Prev: Fast enumeration details, Up: Fast enumeration - -8.9.4 Fast enumeration protocol -------------------------------- - -If you want your own collection object to be usable with fast -enumeration, you need to have it implement the method - - - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state - objects: (id *)objects - count: (unsigned long)len; - - where 'NSFastEnumerationState' must be defined in your code as follows: - - typedef struct - { - unsigned long state; - id *itemsPtr; - unsigned long *mutationsPtr; - unsigned long extra[5]; - } NSFastEnumerationState; - - If no 'NSFastEnumerationState' is defined in your code, the compiler -will automatically replace 'NSFastEnumerationState *' with 'struct -__objcFastEnumerationState *', where that type is silently defined by -the compiler in an identical way. This can be confusing and we -recommend that you define 'NSFastEnumerationState' (as shown above) -instead. - - The method is called repeatedly during a fast enumeration to retrieve -batches of objects. Each invocation of the method should retrieve the -next batch of objects. - - The return value of the method is the number of objects in the current -batch; this should not exceed 'len', which is the maximum size of a -batch as requested by the caller. The batch itself is returned in the -'itemsPtr' field of the 'NSFastEnumerationState' struct. - - To help with returning the objects, the 'objects' array is a C array -preallocated by the caller (on the stack) of size 'len'. In many cases -you can put the objects you want to return in that 'objects' array, then -do 'itemsPtr = objects'. But you don't have to; if your collection -already has the objects to return in some form of C array, it could -return them from there instead. - - The 'state' and 'extra' fields of the 'NSFastEnumerationState' -structure allows your collection object to keep track of the state of -the enumeration. In a simple array implementation, 'state' may keep -track of the index of the last object that was returned, and 'extra' may -be unused. - - The 'mutationsPtr' field of the 'NSFastEnumerationState' is used to -keep track of mutations. It should point to a number; before working on -each object, the fast enumeration loop will check that this number has -not changed. If it has, a mutation has happened and the fast -enumeration will abort. So, 'mutationsPtr' could be set to point to -some sort of version number of your collection, which is increased by -one every time there is a change (for example when an object is added or -removed). Or, if you are content with less strict mutation checks, it -could point to the number of objects in your collection or some other -value that can be checked to perform an approximate check that the -collection has not been mutated. - - Finally, note how we declared the 'len' argument and the return value -to be of type 'unsigned long'. They could also be declared to be of -type 'unsigned int' and everything would still work. - - -File: gcc.info, Node: Messaging with the GNU Objective-C runtime, Prev: Fast enumeration, Up: Objective-C - -8.10 Messaging with the GNU Objective-C runtime -=============================================== - -This section is specific for the GNU Objective-C runtime. If you are -using a different runtime, you can skip it. - - The implementation of messaging in the GNU Objective-C runtime is -designed to be portable, and so is based on standard C. - - Sending a message in the GNU Objective-C runtime is composed of two -separate steps. First, there is a call to the lookup function, -'objc_msg_lookup ()' (or, in the case of messages to super, -'objc_msg_lookup_super ()'). This runtime function takes as argument -the receiver and the selector of the method to be called; it returns the -'IMP', that is a pointer to the function implementing the method. The -second step of method invocation consists of casting this pointer -function to the appropriate function pointer type, and calling the -function pointed to it with the right arguments. - - For example, when the compiler encounters a method invocation such as -'[object init]', it compiles it into a call to 'objc_msg_lookup (object, -@selector(init))' followed by a cast of the returned value to the -appropriate function pointer type, and then it calls it. - -* Menu: - -* Dynamically registering methods:: -* Forwarding hook:: - - -File: gcc.info, Node: Dynamically registering methods, Next: Forwarding hook, Up: Messaging with the GNU Objective-C runtime - -8.10.1 Dynamically registering methods --------------------------------------- - -If 'objc_msg_lookup()' does not find a suitable method implementation, -because the receiver does not implement the required method, it tries to -see if the class can dynamically register the method. - - To do so, the runtime checks if the class of the receiver implements -the method - - + (BOOL) resolveInstanceMethod: (SEL)selector; - - in the case of an instance method, or - - + (BOOL) resolveClassMethod: (SEL)selector; - - in the case of a class method. If the class implements it, the runtime -invokes it, passing as argument the selector of the original method, and -if it returns 'YES', the runtime tries the lookup again, which could now -succeed if a matching method was added dynamically by -'+resolveInstanceMethod:' or '+resolveClassMethod:'. - - This allows classes to dynamically register methods (by adding them to -the class using 'class_addMethod') when they are first called. To do -so, a class should implement '+resolveInstanceMethod:' (or, depending on -the case, '+resolveClassMethod:') and have it recognize the selectors of -methods that can be registered dynamically at runtime, register them, -and return 'YES'. It should return 'NO' for methods that it does not -dynamically registered at runtime. - - If '+resolveInstanceMethod:' (or '+resolveClassMethod:') is not -implemented or returns 'NO', the runtime then tries the forwarding hook. - - Support for '+resolveInstanceMethod:' and 'resolveClassMethod:' was -added to the GNU Objective-C runtime in GCC version 4.6. - - -File: gcc.info, Node: Forwarding hook, Prev: Dynamically registering methods, Up: Messaging with the GNU Objective-C runtime - -8.10.2 Forwarding hook ----------------------- - -The GNU Objective-C runtime provides a hook, called -'__objc_msg_forward2', which is called by 'objc_msg_lookup()' when it -can't find a method implementation in the runtime tables and after -calling '+resolveInstanceMethod:' and '+resolveClassMethod:' has been -attempted and did not succeed in dynamically registering the method. - - To configure the hook, you set the global variable -'__objc_msg_forward2' to a function with the same argument and return -types of 'objc_msg_lookup()'. When 'objc_msg_lookup()' can not find a -method implementation, it invokes the hook function you provided to get -a method implementation to return. So, in practice -'__objc_msg_forward2' allows you to extend 'objc_msg_lookup()' by adding -some custom code that is called to do a further lookup when no standard -method implementation can be found using the normal lookup. - - This hook is generally reserved for "Foundation" libraries such as -GNUstep Base, which use it to implement their high-level method -forwarding API, typically based around the 'forwardInvocation:' method. -So, unless you are implementing your own "Foundation" library, you -should not set this hook. - - In a typical forwarding implementation, the '__objc_msg_forward2' hook -function determines the argument and return type of the method that is -being looked up, and then creates a function that takes these arguments -and has that return type, and returns it to the caller. Creating this -function is non-trivial and is typically performed using a dedicated -library such as 'libffi'. - - The forwarding method implementation thus created is returned by -'objc_msg_lookup()' and is executed as if it was a normal method -implementation. When the forwarding method implementation is called, it -is usually expected to pack all arguments into some sort of object -(typically, an 'NSInvocation' in a "Foundation" library), and hand it -over to the programmer ('forwardInvocation:') who is then allowed to -manipulate the method invocation using a high-level API provided by the -"Foundation" library. For example, the programmer may want to examine -the method invocation arguments and name and potentially change them -before forwarding the method invocation to one or more local objects -('performInvocation:') or even to remote objects (by using Distributed -Objects or some other mechanism). When all this completes, the return -value is passed back and must be returned correctly to the original -caller. - - Note that the GNU Objective-C runtime currently provides no support for -method forwarding or method invocations other than the -'__objc_msg_forward2' hook. - - If the forwarding hook does not exist or returns 'NULL', the runtime -currently attempts forwarding using an older, deprecated API, and if -that fails, it aborts the program. In future versions of the GNU -Objective-C runtime, the runtime will immediately abort. - - -File: gcc.info, Node: Compatibility, Next: Gcov, Prev: Objective-C, Up: Top - -9 Binary Compatibility -********************** - -Binary compatibility encompasses several related concepts: - -"application binary interface (ABI)" - The set of runtime conventions followed by all of the tools that - deal with binary representations of a program, including compilers, - assemblers, linkers, and language runtime support. Some ABIs are - formal with a written specification, possibly designed by multiple - interested parties. Others are simply the way things are actually - done by a particular set of tools. - -"ABI conformance" - A compiler conforms to an ABI if it generates code that follows all - of the specifications enumerated by that ABI. A library conforms - to an ABI if it is implemented according to that ABI. An - application conforms to an ABI if it is built using tools that - conform to that ABI and does not contain source code that - specifically changes behavior specified by the ABI. - -"calling conventions" - Calling conventions are a subset of an ABI that specify of how - arguments are passed and function results are returned. - -"interoperability" - Different sets of tools are interoperable if they generate files - that can be used in the same program. The set of tools includes - compilers, assemblers, linkers, libraries, header files, startup - files, and debuggers. Binaries produced by different sets of tools - are not interoperable unless they implement the same ABI. This - applies to different versions of the same tools as well as tools - from different vendors. - -"intercallability" - Whether a function in a binary built by one set of tools can call a - function in a binary built by a different set of tools is a subset - of interoperability. - -"implementation-defined features" - Language standards include lists of implementation-defined features - whose behavior can vary from one implementation to another. Some - of these features are normally covered by a platform's ABI and - others are not. The features that are not covered by an ABI - generally affect how a program behaves, but not intercallability. - -"compatibility" - Conformance to the same ABI and the same behavior of - implementation-defined features are both relevant for - compatibility. - - The application binary interface implemented by a C or C++ compiler -affects code generation and runtime support for: - - * size and alignment of data types - * layout of structured types - * calling conventions - * register usage conventions - * interfaces for runtime arithmetic support - * object file formats - - In addition, the application binary interface implemented by a C++ -compiler affects code generation and runtime support for: - * name mangling - * exception handling - * invoking constructors and destructors - * layout, alignment, and padding of classes - * layout and alignment of virtual tables - - Some GCC compilation options cause the compiler to generate code that -does not conform to the platform's default ABI. Other options cause -different program behavior for implementation-defined features that are -not covered by an ABI. These options are provided for consistency with -other compilers that do not follow the platform's default ABI or the -usual behavior of implementation-defined features for the platform. Be -very careful about using such options. - - Most platforms have a well-defined ABI that covers C code, but ABIs -that cover C++ functionality are not yet common. - - Starting with GCC 3.2, GCC binary conventions for C++ are based on a -written, vendor-neutral C++ ABI that was designed to be specific to -64-bit Itanium but also includes generic specifications that apply to -any platform. This C++ ABI is also implemented by other compiler -vendors on some platforms, notably GNU/Linux and BSD systems. We have -tried hard to provide a stable ABI that will be compatible with future -GCC releases, but it is possible that we will encounter problems that -make this difficult. Such problems could include different -interpretations of the C++ ABI by different vendors, bugs in the ABI, or -bugs in the implementation of the ABI in different compilers. GCC's -'-Wabi' switch warns when G++ generates code that is probably not -compatible with the C++ ABI. - - The C++ library used with a C++ compiler includes the Standard C++ -Library, with functionality defined in the C++ Standard, plus language -runtime support. The runtime support is included in a C++ ABI, but -there is no formal ABI for the Standard C++ Library. Two -implementations of that library are interoperable if one follows the -de-facto ABI of the other and if they are both built with the same -compiler, or with compilers that conform to the same ABI for C++ -compiler and runtime support. - - When G++ and another C++ compiler conform to the same C++ ABI, but the -implementations of the Standard C++ Library that they normally use do -not follow the same ABI for the Standard C++ Library, object files built -with those compilers can be used in the same program only if they use -the same C++ library. This requires specifying the location of the C++ -library header files when invoking the compiler whose usual library is -not being used. The location of GCC's C++ header files depends on how -the GCC build was configured, but can be seen by using the G++ '-v' -option. With default configuration options for G++ 3.3 the compile line -for a different C++ compiler needs to include - - -IGCC_INSTALL_DIRECTORY/include/c++/3.3 - - Similarly, compiling code with G++ that must use a C++ library other -than the GNU C++ library requires specifying the location of the header -files for that other library. - - The most straightforward way to link a program to use a particular C++ -library is to use a C++ driver that specifies that C++ library by -default. The 'g++' driver, for example, tells the linker where to find -GCC's C++ library ('libstdc++') plus the other libraries and startup -files it needs, in the proper order. - - If a program must use a different C++ library and it's not possible to -do the final link using a C++ driver that uses that library by default, -it is necessary to tell 'g++' the location and name of that library. It -might also be necessary to specify different startup files and other -runtime support libraries, and to suppress the use of GCC's support -libraries with one or more of the options '-nostdlib', '-nostartfiles', -and '-nodefaultlibs'. - - -File: gcc.info, Node: Gcov, Next: Trouble, Prev: Compatibility, Up: Top - -10 'gcov'--a Test Coverage Program -********************************** - -'gcov' is a tool you can use in conjunction with GCC to test code -coverage in your programs. - -* Menu: - -* Gcov Intro:: Introduction to gcov. -* Invoking Gcov:: How to use gcov. -* Gcov and Optimization:: Using gcov with GCC optimization. -* Gcov Data Files:: The files used by gcov. -* Cross-profiling:: Data file relocation. - - -File: gcc.info, Node: Gcov Intro, Next: Invoking Gcov, Up: Gcov - -10.1 Introduction to 'gcov' -=========================== - -'gcov' is a test coverage program. Use it in concert with GCC to -analyze your programs to help create more efficient, faster running code -and to discover untested parts of your program. You can use 'gcov' as a -profiling tool to help discover where your optimization efforts will -best affect your code. You can also use 'gcov' along with the other -profiling tool, 'gprof', to assess which parts of your code use the -greatest amount of computing time. - - Profiling tools help you analyze your code's performance. Using a -profiler such as 'gcov' or 'gprof', you can find out some basic -performance statistics, such as: - - * how often each line of code executes - - * what lines of code are actually executed - - * how much computing time each section of code uses - - Once you know these things about how your code works when compiled, you -can look at each module to see which modules should be optimized. -'gcov' helps you determine where to work on optimization. - - Software developers also use coverage testing in concert with -testsuites, to make sure software is actually good enough for a release. -Testsuites can verify that a program works as expected; a coverage -program tests to see how much of the program is exercised by the -testsuite. Developers can then determine what kinds of test cases need -to be added to the testsuites to create both better testing and a better -final product. - - You should compile your code without optimization if you plan to use -'gcov' because the optimization, by combining some lines of code into -one function, may not give you as much information as you need to look -for 'hot spots' where the code is using a great deal of computer time. -Likewise, because 'gcov' accumulates statistics by line (at the lowest -resolution), it works best with a programming style that places only one -statement on each line. If you use complicated macros that expand to -loops or to other control structures, the statistics are less -helpful--they only report on the line where the macro call appears. If -your complex macros behave like functions, you can replace them with -inline functions to solve this problem. - - 'gcov' creates a logfile called 'SOURCEFILE.gcov' which indicates how -many times each line of a source file 'SOURCEFILE.c' has executed. You -can use these logfiles along with 'gprof' to aid in fine-tuning the -performance of your programs. 'gprof' gives timing information you can -use along with the information you get from 'gcov'. - - 'gcov' works only on code compiled with GCC. It is not compatible with -any other profiling or test coverage mechanism. - - -File: gcc.info, Node: Invoking Gcov, Next: Gcov and Optimization, Prev: Gcov Intro, Up: Gcov - -10.2 Invoking 'gcov' -==================== - - gcov [OPTIONS] FILES - - 'gcov' accepts the following options: - -'-h' -'--help' - Display help about using 'gcov' (on the standard output), and exit - without doing any further processing. - -'-v' -'--version' - Display the 'gcov' version number (on the standard output), and - exit without doing any further processing. - -'-a' -'--all-blocks' - Write individual execution counts for every basic block. Normally - gcov outputs execution counts only for the main blocks of a line. - With this option you can determine if blocks within a single line - are not being executed. - -'-b' -'--branch-probabilities' - Write branch frequencies to the output file, and write branch - summary info to the standard output. This option allows you to see - how often each branch in your program was taken. Unconditional - branches will not be shown, unless the '-u' option is given. - -'-c' -'--branch-counts' - Write branch frequencies as the number of branches taken, rather - than the percentage of branches taken. - -'-n' -'--no-output' - Do not create the 'gcov' output file. - -'-l' -'--long-file-names' - Create long file names for included source files. For example, if - the header file 'x.h' contains code, and was included in the file - 'a.c', then running 'gcov' on the file 'a.c' will produce an output - file called 'a.c##x.h.gcov' instead of 'x.h.gcov'. This can be - useful if 'x.h' is included in multiple source files and you want - to see the individual contributions. If you use the '-p' option, - both the including and included file names will be complete path - names. - -'-p' -'--preserve-paths' - Preserve complete path information in the names of generated - '.gcov' files. Without this option, just the filename component is - used. With this option, all directories are used, with '/' - characters translated to '#' characters, '.' directory components - removed and unremoveable '..' components renamed to '^'. This is - useful if sourcefiles are in several different directories. - -'-r' -'--relative-only' - Only output information about source files with a relative pathname - (after source prefix elision). Absolute paths are usually system - header files and coverage of any inline functions therein is - normally uninteresting. - -'-f' -'--function-summaries' - Output summaries for each function in addition to the file level - summary. - -'-o DIRECTORY|FILE' -'--object-directory DIRECTORY' -'--object-file FILE' - Specify either the directory containing the gcov data files, or the - object path name. The '.gcno', and '.gcda' data files are searched - for using this option. If a directory is specified, the data files - are in that directory and named after the input file name, without - its extension. If a file is specified here, the data files are - named after that file, without its extension. - -'-s DIRECTORY' -'--source-prefix DIRECTORY' - A prefix for source file names to remove when generating the output - coverage files. This option is useful when building in a separate - directory, and the pathname to the source directory is not wanted - when determining the output file names. Note that this prefix - detection is applied before determining whether the source file is - absolute. - -'-u' -'--unconditional-branches' - When branch probabilities are given, include those of unconditional - branches. Unconditional branches are normally not interesting. - -'-d' -'--display-progress' - Display the progress on the standard output. - -'-i' -'--intermediate-format' - Output gcov file in an easy-to-parse intermediate text format that - can be used by 'lcov' or other tools. The output is a single - '.gcov' file per '.gcda' file. No source code is required. - - The format of the intermediate '.gcov' file is plain text with one - entry per line - - file:SOURCE_FILE_NAME - function:LINE_NUMBER,EXECUTION_COUNT,FUNCTION_NAME - lcount:LINE NUMBER,EXECUTION_COUNT - branch:LINE_NUMBER,BRANCH_COVERAGE_TYPE - - Where the BRANCH_COVERAGE_TYPE is - notexec (Branch not executed) - taken (Branch executed and taken) - nottaken (Branch executed, but not taken) - - There can be multiple FILE entries in an intermediate gcov - file. All entries following a FILE pertain to that source file - until the next FILE entry. - - Here is a sample when '-i' is used in conjunction with '-b' option: - - file:array.cc - function:11,1,_Z3sumRKSt6vectorIPiSaIS0_EE - function:22,1,main - lcount:11,1 - lcount:12,1 - lcount:14,1 - branch:14,taken - lcount:26,1 - branch:28,nottaken - -'-m' -'--demangled-names' - Display demangled function names in output. The default is to show - mangled function names. - - 'gcov' should be run with the current directory the same as that when -you invoked the compiler. Otherwise it will not be able to locate the -source files. 'gcov' produces files called 'MANGLEDNAME.gcov' in the -current directory. These contain the coverage information of the source -file they correspond to. One '.gcov' file is produced for each source -(or header) file containing code, which was compiled to produce the data -files. The MANGLEDNAME part of the output file name is usually simply -the source file name, but can be something more complicated if the '-l' -or '-p' options are given. Refer to those options for details. - - If you invoke 'gcov' with multiple input files, the contributions from -each input file are summed. Typically you would invoke it with the same -list of files as the final link of your executable. - - The '.gcov' files contain the ':' separated fields along with program -source code. The format is - - EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT - - Additional block information may succeed each line, when requested by -command line option. The EXECUTION_COUNT is '-' for lines containing no -code. Unexecuted lines are marked '#####' or '====', depending on -whether they are reachable by non-exceptional paths or only exceptional -paths such as C++ exception handlers, respectively. - - Some lines of information at the start have LINE_NUMBER of zero. These -preamble lines are of the form - - -:0:TAG:VALUE - - The ordering and number of these preamble lines will be augmented as -'gcov' development progresses -- do not rely on them remaining -unchanged. Use TAG to locate a particular preamble line. - - The additional block information is of the form - - TAG INFORMATION - - The INFORMATION is human readable, but designed to be simple enough for -machine parsing too. - - When printing percentages, 0% and 100% are only printed when the values -are _exactly_ 0% and 100% respectively. Other values which would -conventionally be rounded to 0% or 100% are instead printed as the -nearest non-boundary value. - - When using 'gcov', you must first compile your program with two special -GCC options: '-fprofile-arcs -ftest-coverage'. This tells the compiler -to generate additional information needed by gcov (basically a flow -graph of the program) and also includes additional code in the object -files for generating the extra profiling information needed by gcov. -These additional files are placed in the directory where the object file -is located. - - Running the program will cause profile output to be generated. For -each source file compiled with '-fprofile-arcs', an accompanying '.gcda' -file will be placed in the object file directory. - - Running 'gcov' with your program's source file names as arguments will -now produce a listing of the code along with frequency of execution for -each line. For example, if your program is called 'tmp.c', this is what -you see when you use the basic 'gcov' facility: - - $ gcc -fprofile-arcs -ftest-coverage tmp.c - $ a.out - $ gcov tmp.c - 90.00% of 10 source lines executed in file tmp.c - Creating tmp.c.gcov. - - The file 'tmp.c.gcov' contains output from 'gcov'. Here is a sample: - - -: 0:Source:tmp.c - -: 0:Graph:tmp.gcno - -: 0:Data:tmp.gcda - -: 0:Runs:1 - -: 0:Programs:1 - -: 1:#include <stdio.h> - -: 2: - -: 3:int main (void) - 1: 4:{ - 1: 5: int i, total; - -: 6: - 1: 7: total = 0; - -: 8: - 11: 9: for (i = 0; i < 10; i++) - 10: 10: total += i; - -: 11: - 1: 12: if (total != 45) - #####: 13: printf ("Failure\n"); - -: 14: else - 1: 15: printf ("Success\n"); - 1: 16: return 0; - -: 17:} - - When you use the '-a' option, you will get individual block counts, and -the output looks like this: - - -: 0:Source:tmp.c - -: 0:Graph:tmp.gcno - -: 0:Data:tmp.gcda - -: 0:Runs:1 - -: 0:Programs:1 - -: 1:#include <stdio.h> - -: 2: - -: 3:int main (void) - 1: 4:{ - 1: 4-block 0 - 1: 5: int i, total; - -: 6: - 1: 7: total = 0; - -: 8: - 11: 9: for (i = 0; i < 10; i++) - 11: 9-block 0 - 10: 10: total += i; - 10: 10-block 0 - -: 11: - 1: 12: if (total != 45) - 1: 12-block 0 - #####: 13: printf ("Failure\n"); - $$$$$: 13-block 0 - -: 14: else - 1: 15: printf ("Success\n"); - 1: 15-block 0 - 1: 16: return 0; - 1: 16-block 0 - -: 17:} - - In this mode, each basic block is only shown on one line - the last -line of the block. A multi-line block will only contribute to the -execution count of that last line, and other lines will not be shown to -contain code, unless previous blocks end on those lines. The total -execution count of a line is shown and subsequent lines show the -execution counts for individual blocks that end on that line. After -each block, the branch and call counts of the block will be shown, if -the '-b' option is given. - - Because of the way GCC instruments calls, a call count can be shown -after a line with no individual blocks. As you can see, line 13 -contains a basic block that was not executed. - - When you use the '-b' option, your output looks like this: - - $ gcov -b tmp.c - 90.00% of 10 source lines executed in file tmp.c - 80.00% of 5 branches executed in file tmp.c - 80.00% of 5 branches taken at least once in file tmp.c - 50.00% of 2 calls executed in file tmp.c - Creating tmp.c.gcov. - - Here is a sample of a resulting 'tmp.c.gcov' file: - - -: 0:Source:tmp.c - -: 0:Graph:tmp.gcno - -: 0:Data:tmp.gcda - -: 0:Runs:1 - -: 0:Programs:1 - -: 1:#include <stdio.h> - -: 2: - -: 3:int main (void) - function main called 1 returned 1 blocks executed 75% - 1: 4:{ - 1: 5: int i, total; - -: 6: - 1: 7: total = 0; - -: 8: - 11: 9: for (i = 0; i < 10; i++) - branch 0 taken 91% (fallthrough) - branch 1 taken 9% - 10: 10: total += i; - -: 11: - 1: 12: if (total != 45) - branch 0 taken 0% (fallthrough) - branch 1 taken 100% - #####: 13: printf ("Failure\n"); - call 0 never executed - -: 14: else - 1: 15: printf ("Success\n"); - call 0 called 1 returned 100% - 1: 16: return 0; - -: 17:} - - For each function, a line is printed showing how many times the -function is called, how many times it returns and what percentage of the -function's blocks were executed. - - For each basic block, a line is printed after the last line of the -basic block describing the branch or call that ends the basic block. -There can be multiple branches and calls listed for a single source line -if there are multiple basic blocks that end on that line. In this case, -the branches and calls are each given a number. There is no simple way -to map these branches and calls back to source constructs. In general, -though, the lowest numbered branch or call will correspond to the -leftmost construct on the source line. - - For a branch, if it was executed at least once, then a percentage -indicating the number of times the branch was taken divided by the -number of times the branch was executed will be printed. Otherwise, the -message "never executed" is printed. - - For a call, if it was executed at least once, then a percentage -indicating the number of times the call returned divided by the number -of times the call was executed will be printed. This will usually be -100%, but may be less for functions that call 'exit' or 'longjmp', and -thus may not return every time they are called. - - The execution counts are cumulative. If the example program were -executed again without removing the '.gcda' file, the count for the -number of times each line in the source was executed would be added to -the results of the previous run(s). This is potentially useful in -several ways. For example, it could be used to accumulate data over a -number of program runs as part of a test verification suite, or to -provide more accurate long-term information over a large number of -program runs. - - The data in the '.gcda' files is saved immediately before the program -exits. For each source file compiled with '-fprofile-arcs', the -profiling code first attempts to read in an existing '.gcda' file; if -the file doesn't match the executable (differing number of basic block -counts) it will ignore the contents of the file. It then adds in the -new execution counts and finally writes the data to the file. - - -File: gcc.info, Node: Gcov and Optimization, Next: Gcov Data Files, Prev: Invoking Gcov, Up: Gcov - -10.3 Using 'gcov' with GCC Optimization -======================================= - -If you plan to use 'gcov' to help optimize your code, you must first -compile your program with two special GCC options: '-fprofile-arcs --ftest-coverage'. Aside from that, you can use any other GCC options; -but if you want to prove that every single line in your program was -executed, you should not compile with optimization at the same time. On -some machines the optimizer can eliminate some simple code lines by -combining them with other lines. For example, code like this: - - if (a != b) - c = 1; - else - c = 0; - -can be compiled into one instruction on some machines. In this case, -there is no way for 'gcov' to calculate separate execution counts for -each line because there isn't separate code for each line. Hence the -'gcov' output looks like this if you compiled the program with -optimization: - - 100: 12:if (a != b) - 100: 13: c = 1; - 100: 14:else - 100: 15: c = 0; - - The output shows that this block of code, combined by optimization, -executed 100 times. In one sense this result is correct, because there -was only one instruction representing all four of these lines. However, -the output does not indicate how many times the result was 0 and how -many times the result was 1. - - Inlineable functions can create unexpected line counts. Line counts -are shown for the source code of the inlineable function, but what is -shown depends on where the function is inlined, or if it is not inlined -at all. - - If the function is not inlined, the compiler must emit an out of line -copy of the function, in any object file that needs it. If 'fileA.o' -and 'fileB.o' both contain out of line bodies of a particular inlineable -function, they will also both contain coverage counts for that function. -When 'fileA.o' and 'fileB.o' are linked together, the linker will, on -many systems, select one of those out of line bodies for all calls to -that function, and remove or ignore the other. Unfortunately, it will -not remove the coverage counters for the unused function body. Hence -when instrumented, all but one use of that function will show zero -counts. - - If the function is inlined in several places, the block structure in -each location might not be the same. For instance, a condition might -now be calculable at compile time in some instances. Because the -coverage of all the uses of the inline function will be shown for the -same source lines, the line counts themselves might seem inconsistent. - - Long-running applications can use the '_gcov_reset' and '_gcov_dump' -facilities to restrict profile collection to the program region of -interest. Calling '_gcov_reset(void)' will clear all profile counters -to zero, and calling '_gcov_dump(void)' will cause the profile -information collected at that point to be dumped to '.gcda' output -files. - - -File: gcc.info, Node: Gcov Data Files, Next: Cross-profiling, Prev: Gcov and Optimization, Up: Gcov - -10.4 Brief description of 'gcov' data files -=========================================== - -'gcov' uses two files for profiling. The names of these files are -derived from the original _object_ file by substituting the file suffix -with either '.gcno', or '.gcda'. The files contain coverage and profile -data stored in a platform-independent format. The '.gcno' files are -placed in the same directory as the object file. By default, the -'.gcda' files are also stored in the same directory as the object file, -but the GCC '-fprofile-dir' option may be used to store the '.gcda' -files in a separate directory. - - The '.gcno' notes file is generated when the source file is compiled -with the GCC '-ftest-coverage' option. It contains information to -reconstruct the basic block graphs and assign source line numbers to -blocks. - - The '.gcda' count data file is generated when a program containing -object files built with the GCC '-fprofile-arcs' option is executed. A -separate '.gcda' file is created for each object file compiled with this -option. It contains arc transition counts, value profile counts, and -some summary information. - - The full details of the file format is specified in 'gcov-io.h', and -functions provided in that header file should be used to access the -coverage files. - - -File: gcc.info, Node: Cross-profiling, Prev: Gcov Data Files, Up: Gcov - -10.5 Data file relocation to support cross-profiling -==================================================== - -Running the program will cause profile output to be generated. For each -source file compiled with '-fprofile-arcs', an accompanying '.gcda' file -will be placed in the object file directory. That implicitly requires -running the program on the same system as it was built or having the -same absolute directory structure on the target system. The program -will try to create the needed directory structure, if it is not already -present. - - To support cross-profiling, a program compiled with '-fprofile-arcs' -can relocate the data files based on two environment variables: - - * GCOV_PREFIX contains the prefix to add to the absolute paths in the - object file. Prefix can be absolute, or relative. The default is - no prefix. - - * GCOV_PREFIX_STRIP indicates the how many initial directory names to - strip off the hardwired absolute paths. Default value is 0. - - _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is - undefined, then a relative path is made out of the hardwired - absolute paths. - - For example, if the object file '/user/build/foo.o' was built with -'-fprofile-arcs', the final executable will try to create the data file -'/user/build/foo.gcda' when running on the target system. This will -fail if the corresponding directory does not exist and it is unable to -create it. This can be overcome by, for example, setting the -environment as 'GCOV_PREFIX=/target/run' and 'GCOV_PREFIX_STRIP=1'. -Such a setting will name the data file '/target/run/build/foo.gcda'. - - You must move the data files to the expected directory tree in order to -use them for profile directed optimizations ('--use-profile'), or to use -the 'gcov' tool. - - -File: gcc.info, Node: Trouble, Next: Bugs, Prev: Gcov, Up: Top - -11 Known Causes of Trouble with GCC -*********************************** - -This section describes known problems that affect users of GCC. Most of -these are not GCC bugs per se--if they were, we would fix them. But the -result for a user may be like the result of a bug. - - Some of these problems are due to bugs in other software, some are -missing features that are too much work to add, and some are places -where people's opinions differ as to what is best. - -* Menu: - -* Actual Bugs:: Bugs we will fix later. -* Interoperation:: Problems using GCC with other compilers, - and with certain linkers, assemblers and debuggers. -* Incompatibilities:: GCC is incompatible with traditional C. -* Fixed Headers:: GCC uses corrected versions of system header files. - This is necessary, but doesn't always work smoothly. -* Standard Libraries:: GCC uses the system C library, which might not be - compliant with the ISO C standard. -* Disappointments:: Regrettable things we can't change, but not quite bugs. -* C++ Misunderstandings:: Common misunderstandings with GNU C++. -* Non-bugs:: Things we think are right, but some others disagree. -* Warnings and Errors:: Which problems in your code get warnings, - and which get errors. - - -File: gcc.info, Node: Actual Bugs, Next: Interoperation, Up: Trouble - -11.1 Actual Bugs We Haven't Fixed Yet -===================================== - - * The 'fixincludes' script interacts badly with automounters; if the - directory of system header files is automounted, it tends to be - unmounted while 'fixincludes' is running. This would seem to be a - bug in the automounter. We don't know any good way to work around - it. - - -File: gcc.info, Node: Interoperation, Next: Incompatibilities, Prev: Actual Bugs, Up: Trouble - -11.2 Interoperation -=================== - -This section lists various difficulties encountered in using GCC -together with other compilers or with the assemblers, linkers, libraries -and debuggers on certain systems. - - * On many platforms, GCC supports a different ABI for C++ than do - other compilers, so the object files compiled by GCC cannot be used - with object files generated by another C++ compiler. - - An area where the difference is most apparent is name mangling. - The use of different name mangling is intentional, to protect you - from more subtle problems. Compilers differ as to many internal - details of C++ implementation, including: how class instances are - laid out, how multiple inheritance is implemented, and how virtual - function calls are handled. If the name encoding were made the - same, your programs would link against libraries provided from - other compilers--but the programs would then crash when run. - Incompatible libraries are then detected at link time, rather than - at run time. - - * On some BSD systems, including some versions of Ultrix, use of - profiling causes static variable destructors (currently used only - in C++) not to be run. - - * On a SPARC, GCC aligns all values of type 'double' on an 8-byte - boundary, and it expects every 'double' to be so aligned. The Sun - compiler usually gives 'double' values 8-byte alignment, with one - exception: function arguments of type 'double' may not be aligned. - - As a result, if a function compiled with Sun CC takes the address - of an argument of type 'double' and passes this pointer of type - 'double *' to a function compiled with GCC, dereferencing the - pointer may cause a fatal signal. - - One way to solve this problem is to compile your entire program - with GCC. Another solution is to modify the function that is - compiled with Sun CC to copy the argument into a local variable; - local variables are always properly aligned. A third solution is - to modify the function that uses the pointer to dereference it via - the following function 'access_double' instead of directly with - '*': - - inline double - access_double (double *unaligned_ptr) - { - union d2i { double d; int i[2]; }; - - union d2i *p = (union d2i *) unaligned_ptr; - union d2i u; - - u.i[0] = p->i[0]; - u.i[1] = p->i[1]; - - return u.d; - } - - Storing into the pointer can be done likewise with the same union. - - * On Solaris, the 'malloc' function in the 'libmalloc.a' library may - allocate memory that is only 4 byte aligned. Since GCC on the - SPARC assumes that doubles are 8 byte aligned, this may result in a - fatal signal if doubles are stored in memory allocated by the - 'libmalloc.a' library. - - The solution is to not use the 'libmalloc.a' library. Use instead - 'malloc' and related functions from 'libc.a'; they do not have this - problem. - - * On the HP PA machine, ADB sometimes fails to work on functions - compiled with GCC. Specifically, it fails to work on functions - that use 'alloca' or variable-size arrays. This is because GCC - doesn't generate HP-UX unwind descriptors for such functions. It - may even be impossible to generate them. - - * Debugging ('-g') is not supported on the HP PA machine, unless you - use the preliminary GNU tools. - - * Taking the address of a label may generate errors from the HP-UX PA - assembler. GAS for the PA does not have this problem. - - * Using floating point parameters for indirect calls to static - functions will not work when using the HP assembler. There simply - is no way for GCC to specify what registers hold arguments for - static functions when using the HP assembler. GAS for the PA does - not have this problem. - - * In extremely rare cases involving some very large functions you may - receive errors from the HP linker complaining about an out of - bounds unconditional branch offset. This used to occur more often - in previous versions of GCC, but is now exceptionally rare. If you - should run into it, you can work around by making your function - smaller. - - * GCC compiled code sometimes emits warnings from the HP-UX assembler - of the form: - - (warning) Use of GR3 when - frame >= 8192 may cause conflict. - - These warnings are harmless and can be safely ignored. - - * In extremely rare cases involving some very large functions you may - receive errors from the AIX Assembler complaining about a - displacement that is too large. If you should run into it, you can - work around by making your function smaller. - - * The 'libstdc++.a' library in GCC relies on the SVR4 dynamic linker - semantics which merges global symbols between libraries and - applications, especially necessary for C++ streams functionality. - This is not the default behavior of AIX shared libraries and - dynamic linking. 'libstdc++.a' is built on AIX with - "runtime-linking" enabled so that symbol merging can occur. To - utilize this feature, the application linked with 'libstdc++.a' - must include the '-Wl,-brtl' flag on the link line. G++ cannot - impose this because this option may interfere with the semantics of - the user program and users may not always use 'g++' to link his or - her application. Applications are not required to use the - '-Wl,-brtl' flag on the link line--the rest of the 'libstdc++.a' - library which is not dependent on the symbol merging semantics will - continue to function correctly. - - * An application can interpose its own definition of functions for - functions invoked by 'libstdc++.a' with "runtime-linking" enabled - on AIX. To accomplish this the application must be linked with - "runtime-linking" option and the functions explicitly must be - exported by the application ('-Wl,-brtl,-bE:exportfile'). - - * AIX on the RS/6000 provides support (NLS) for environments outside - of the United States. Compilers and assemblers use NLS to support - locale-specific representations of various objects including - floating-point numbers ('.' vs ',' for separating decimal - fractions). There have been problems reported where the library - linked with GCC does not produce the same floating-point formats - that the assembler accepts. If you have this problem, set the - 'LANG' environment variable to 'C' or 'En_US'. - - * Even if you specify '-fdollars-in-identifiers', you cannot - successfully use '$' in identifiers on the RS/6000 due to a - restriction in the IBM assembler. GAS supports these identifiers. - - -File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: Interoperation, Up: Trouble - -11.3 Incompatibilities of GCC -============================= - -There are several noteworthy incompatibilities between GNU C and K&R -(non-ISO) versions of C. - - * GCC normally makes string constants read-only. If several - identical-looking string constants are used, GCC stores only one - copy of the string. - - One consequence is that you cannot call 'mktemp' with a string - constant argument. The function 'mktemp' always alters the string - its argument points to. - - Another consequence is that 'sscanf' does not work on some very old - systems when passed a string constant as its format control string - or input. This is because 'sscanf' incorrectly tries to write into - the string constant. Likewise 'fscanf' and 'scanf'. - - The solution to these problems is to change the program to use - 'char'-array variables with initialization strings for these - purposes instead of string constants. - - * '-2147483648' is positive. - - This is because 2147483648 cannot fit in the type 'int', so - (following the ISO C rules) its data type is 'unsigned long int'. - Negating this value yields 2147483648 again. - - * GCC does not substitute macro arguments when they appear inside of - string constants. For example, the following macro in GCC - - #define foo(a) "a" - - will produce output '"a"' regardless of what the argument A is. - - * When you use 'setjmp' and 'longjmp', the only automatic variables - guaranteed to remain valid are those declared 'volatile'. This is - a consequence of automatic register allocation. Consider this - function: - - jmp_buf j; - - foo () - { - int a, b; - - a = fun1 (); - if (setjmp (j)) - return a; - - a = fun2 (); - /* 'longjmp (j)' may occur in 'fun3'. */ - return a + fun3 (); - } - - Here 'a' may or may not be restored to its first value when the - 'longjmp' occurs. If 'a' is allocated in a register, then its - first value is restored; otherwise, it keeps the last value stored - in it. - - If you use the '-W' option with the '-O' option, you will get a - warning when GCC thinks such a problem might be possible. - - * Programs that use preprocessing directives in the middle of macro - arguments do not work with GCC. For example, a program like this - will not work: - - foobar ( - #define luser - hack) - - ISO C does not permit such a construct. - - * K&R compilers allow comments to cross over an inclusion boundary - (i.e. started in an include file and ended in the including file). - - * Declarations of external variables and functions within a block - apply only to the block containing the declaration. In other - words, they have the same scope as any other declaration in the - same place. - - In some other C compilers, an 'extern' declaration affects all the - rest of the file even if it happens within a block. - - * In traditional C, you can combine 'long', etc., with a typedef - name, as shown here: - - typedef int foo; - typedef long foo bar; - - In ISO C, this is not allowed: 'long' and other type modifiers - require an explicit 'int'. - - * PCC allows typedef names to be used as function parameters. - - * Traditional C allows the following erroneous pair of declarations - to appear together in a given scope: - - typedef int foo; - typedef foo foo; - - * GCC treats all characters of identifiers as significant. According - to K&R-1 (2.2), "No more than the first eight characters are - significant, although more may be used.". Also according to K&R-1 - (2.2), "An identifier is a sequence of letters and digits; the - first character must be a letter. The underscore _ counts as a - letter.", but GCC also allows dollar signs in identifiers. - - * PCC allows whitespace in the middle of compound assignment - operators such as '+='. GCC, following the ISO standard, does not - allow this. - - * GCC complains about unterminated character constants inside of - preprocessing conditionals that fail. Some programs have English - comments enclosed in conditionals that are guaranteed to fail; if - these comments contain apostrophes, GCC will probably report an - error. For example, this code would produce an error: - - #if 0 - You can't expect this to work. - #endif - - The best solution to such a problem is to put the text into an - actual C comment delimited by '/*...*/'. - - * Many user programs contain the declaration 'long time ();'. In the - past, the system header files on many systems did not actually - declare 'time', so it did not matter what type your program - declared it to return. But in systems with ISO C headers, 'time' - is declared to return 'time_t', and if that is not the same as - 'long', then 'long time ();' is erroneous. - - The solution is to change your program to use appropriate system - headers ('<time.h>' on systems with ISO C headers) and not to - declare 'time' if the system header files declare it, or failing - that to use 'time_t' as the return type of 'time'. - - * When compiling functions that return 'float', PCC converts it to a - double. GCC actually returns a 'float'. If you are concerned with - PCC compatibility, you should declare your functions to return - 'double'; you might as well say what you mean. - - * When compiling functions that return structures or unions, GCC - output code normally uses a method different from that used on most - versions of Unix. As a result, code compiled with GCC cannot call - a structure-returning function compiled with PCC, and vice versa. - - The method used by GCC is as follows: a structure or union which is - 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or - union with any other size is stored into an address supplied by the - caller (usually in a special, fixed register, but on some machines - it is passed on the stack). The target hook - 'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. - - By contrast, PCC on most target machines returns structures and - unions of any size by copying the data into an area of static - storage, and then returning the address of that storage as if it - were a pointer value. The caller must copy the data from that - memory area to the place where the value is wanted. GCC does not - use this method because it is slower and nonreentrant. - - On some newer machines, PCC uses a reentrant convention for all - structure and union returning. GCC on most of these machines uses - a compatible convention when returning structures and unions in - memory, but still returns small structures and unions in registers. - - You can tell GCC to use a compatible convention for all structure - and union returning with the option '-fpcc-struct-return'. - - * GCC complains about program fragments such as '0x74ae-0x4000' which - appear to be two hexadecimal constants separated by the minus - operator. Actually, this string is a single "preprocessing token". - Each such token must correspond to one token in C. Since this does - not, GCC prints an error message. Although it may appear obvious - that what is meant is an operator and two values, the ISO C - standard specifically requires that this be treated as erroneous. - - A "preprocessing token" is a "preprocessing number" if it begins - with a digit and is followed by letters, underscores, digits, - periods and 'e+', 'e-', 'E+', 'E-', 'p+', 'p-', 'P+', or 'P-' - character sequences. (In strict C90 mode, the sequences 'p+', - 'p-', 'P+' and 'P-' cannot appear in preprocessing numbers.) - - To make the above program fragment valid, place whitespace in front - of the minus sign. This whitespace will end the preprocessing - number. - - -File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble - -11.4 Fixed Header Files -======================= - -GCC needs to install corrected versions of some system header files. -This is because most target systems have some header files that won't -work with GCC unless they are changed. Some have bugs, some are -incompatible with ISO C, and some depend on special features of other -compilers. - - Installing GCC automatically creates and installs the fixed header -files, by running a program called 'fixincludes'. Normally, you don't -need to pay attention to this. But there are cases where it doesn't do -the right thing automatically. - - * If you update the system's header files, such as by installing a - new system version, the fixed header files of GCC are not - automatically updated. They can be updated using the 'mkheaders' - script installed in 'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. - - * On some systems, header file directories contain machine-specific - symbolic links in certain places. This makes it possible to share - most of the header files among hosts running the same version of - the system on different machine models. - - The programs that fix the header files do not understand this - special way of using symbolic links; therefore, the directory of - fixed header files is good only for the machine model used to build - it. - - It is possible to make separate sets of fixed header files for the - different machine models, and arrange a structure of symbolic links - so as to use the proper set, but you'll have to do this by hand. - - -File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble - -11.5 Standard Libraries -======================= - -GCC by itself attempts to be a conforming freestanding implementation. -*Note Language Standards Supported by GCC: Standards, for details of -what this means. Beyond the library facilities required of such an -implementation, the rest of the C library is supplied by the vendor of -the operating system. If that C library doesn't conform to the C -standards, then your programs might get warnings (especially when using -'-Wall') that you don't expect. - - For example, the 'sprintf' function on SunOS 4.1.3 returns 'char *' -while the C standard says that 'sprintf' returns an 'int'. The -'fixincludes' program could make the prototype for this function match -the Standard, but that would be wrong, since the function will still -return 'char *'. - - If you need a Standard compliant library, then you need to find one, as -GCC does not provide one. The GNU C library (called 'glibc') provides -ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and -HURD-based GNU systems; no recent version of it supports other systems, -though some very old versions did. Version 2.2 of the GNU C library -includes nearly complete C99 support. You could also ask your operating -system vendor if newer libraries are available. - - -File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble - -11.6 Disappointments and Misunderstandings -========================================== - -These problems are perhaps regrettable, but we don't know any practical -way around them. - - * Certain local variables aren't recognized by debuggers when you - compile with optimization. - - This occurs because sometimes GCC optimizes the variable out of - existence. There is no way to tell the debugger how to compute the - value such a variable "would have had", and it is not clear that - would be desirable anyway. So GCC simply does not mention the - eliminated variable when it writes debugging information. - - You have to expect a certain amount of disagreement between the - executable and your source code, when you use optimization. - - * Users often think it is a bug when GCC reports an error for code - like this: - - int foo (struct mumble *); - - struct mumble { ... }; - - int foo (struct mumble *x) - { ... } - - This code really is erroneous, because the scope of 'struct mumble' - in the prototype is limited to the argument list containing it. It - does not refer to the 'struct mumble' defined with file scope - immediately below--they are two unrelated types with similar names - in different scopes. - - But in the definition of 'foo', the file-scope type is used because - that is available to be inherited. Thus, the definition and the - prototype do not match, and you get an error. - - This behavior may seem silly, but it's what the ISO standard - specifies. It is easy enough for you to make your code work by - moving the definition of 'struct mumble' above the prototype. It's - not worth being incompatible with ISO C just to avoid an error for - the example shown above. - - * Accesses to bit-fields even in volatile objects works by accessing - larger objects, such as a byte or a word. You cannot rely on what - size of object is accessed in order to read or write the bit-field; - it may even vary for a given bit-field according to the precise - usage. - - If you care about controlling the amount of memory that is - accessed, use volatile but do not use bit-fields. - - * GCC comes with shell scripts to fix certain known problems in - system header files. They install corrected copies of various - header files in a special directory where only GCC will normally - look for them. The scripts adapt to various systems by searching - all the system header files for the problem cases that we know - about. - - If new system header files are installed, nothing automatically - arranges to update the corrected header files. They can be updated - using the 'mkheaders' script installed in - 'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. - - * On 68000 and x86 systems, for instance, you can get paradoxical - results if you test the precise values of floating point numbers. - For example, you can find that a floating point value which is not - a NaN is not equal to itself. This results from the fact that the - floating point registers hold a few more bits of precision than fit - in a 'double' in memory. Compiled code moves values between memory - and floating point registers at its convenience, and moving them - into memory truncates them. - - You can partially avoid this problem by using the '-ffloat-store' - option (*note Optimize Options::). - - * On AIX and other platforms without weak symbol support, templates - need to be instantiated explicitly and symbols for static members - of templates will not be generated. - - * On AIX, GCC scans object files and library archives for static - constructors and destructors when linking an application before the - linker prunes unreferenced symbols. This is necessary to prevent - the AIX linker from mistakenly assuming that static constructor or - destructor are unused and removing them before the scanning can - occur. All static constructors and destructors found will be - referenced even though the modules in which they occur may not be - used by the program. This may lead to both increased executable - size and unexpected symbol references. - - -File: gcc.info, Node: C++ Misunderstandings, Next: Non-bugs, Prev: Disappointments, Up: Trouble - -11.7 Common Misunderstandings with GNU C++ -========================================== - -C++ is a complex language and an evolving one, and its standard -definition (the ISO C++ standard) was only recently completed. As a -result, your C++ compiler may occasionally surprise you, even when its -behavior is correct. This section discusses some areas that frequently -give rise to questions of this sort. - -* Menu: - -* Static Definitions:: Static member declarations are not definitions -* Name lookup:: Name lookup, templates, and accessing members of base classes -* Temporaries:: Temporaries may vanish before you expect -* Copy Assignment:: Copy Assignment operators copy virtual bases twice - - -File: gcc.info, Node: Static Definitions, Next: Name lookup, Up: C++ Misunderstandings - -11.7.1 Declare _and_ Define Static Members ------------------------------------------- - -When a class has static data members, it is not enough to _declare_ the -static member; you must also _define_ it. For example: - - class Foo - { - ... - void method(); - static int bar; - }; - - This declaration only establishes that the class 'Foo' has an 'int' -named 'Foo::bar', and a member function named 'Foo::method'. But you -still need to define _both_ 'method' and 'bar' elsewhere. According to -the ISO standard, you must supply an initializer in one (and only one) -source file, such as: - - int Foo::bar = 0; - - Other C++ compilers may not correctly implement the standard behavior. -As a result, when you switch to 'g++' from one of these compilers, you -may discover that a program that appeared to work correctly in fact does -not conform to the standard: 'g++' reports as undefined symbols any -static data members that lack definitions. - - -File: gcc.info, Node: Name lookup, Next: Temporaries, Prev: Static Definitions, Up: C++ Misunderstandings - -11.7.2 Name lookup, templates, and accessing members of base classes --------------------------------------------------------------------- - -The C++ standard prescribes that all names that are not dependent on -template parameters are bound to their present definitions when parsing -a template function or class.(1) Only names that are dependent are -looked up at the point of instantiation. For example, consider - - void foo(double); - - struct A { - template <typename T> - void f () { - foo (1); // 1 - int i = N; // 2 - T t; - t.bar(); // 3 - foo (t); // 4 - } - - static const int N; - }; - - Here, the names 'foo' and 'N' appear in a context that does not depend -on the type of 'T'. The compiler will thus require that they are -defined in the context of use in the template, not only before the point -of instantiation, and will here use '::foo(double)' and 'A::N', -respectively. In particular, it will convert the integer value to a -'double' when passing it to '::foo(double)'. - - Conversely, 'bar' and the call to 'foo' in the fourth marked line are -used in contexts that do depend on the type of 'T', so they are only -looked up at the point of instantiation, and you can provide -declarations for them after declaring the template, but before -instantiating it. In particular, if you instantiate 'A::f<int>', the -last line will call an overloaded '::foo(int)' if one was provided, even -if after the declaration of 'struct A'. - - This distinction between lookup of dependent and non-dependent names is -called two-stage (or dependent) name lookup. G++ implements it since -version 3.4. - - Two-stage name lookup sometimes leads to situations with behavior -different from non-template codes. The most common is probably this: - - template <typename T> struct Base { - int i; - }; - - template <typename T> struct Derived : public Base<T> { - int get_i() { return i; } - }; - - In 'get_i()', 'i' is not used in a dependent context, so the compiler -will look for a name declared at the enclosing namespace scope (which is -the global scope here). It will not look into the base class, since -that is dependent and you may declare specializations of 'Base' even -after declaring 'Derived', so the compiler can't really know what 'i' -would refer to. If there is no global variable 'i', then you will get -an error message. - - In order to make it clear that you want the member of the base class, -you need to defer lookup until instantiation time, at which the base -class is known. For this, you need to access 'i' in a dependent -context, by either using 'this->i' (remember that 'this' is of type -'Derived<T>*', so is obviously dependent), or using 'Base<T>::i'. -Alternatively, 'Base<T>::i' might be brought into scope by a -'using'-declaration. - - Another, similar example involves calling member functions of a base -class: - - template <typename T> struct Base { - int f(); - }; - - template <typename T> struct Derived : Base<T> { - int g() { return f(); }; - }; - - Again, the call to 'f()' is not dependent on template arguments (there -are no arguments that depend on the type 'T', and it is also not -otherwise specified that the call should be in a dependent context). -Thus a global declaration of such a function must be available, since -the one in the base class is not visible until instantiation time. The -compiler will consequently produce the following error message: - - x.cc: In member function `int Derived<T>::g()': - x.cc:6: error: there are no arguments to `f' that depend on a template - parameter, so a declaration of `f' must be available - x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but - allowing the use of an undeclared name is deprecated) - - To make the code valid either use 'this->f()', or 'Base<T>::f()'. -Using the '-fpermissive' flag will also let the compiler accept the -code, by marking all function calls for which no declaration is visible -at the time of definition of the template for later lookup at -instantiation time, as if it were a dependent call. We do not recommend -using '-fpermissive' to work around invalid code, and it will also only -catch cases where functions in base classes are called, not where -variables in base classes are used (as in the example above). - - Note that some compilers (including G++ versions prior to 3.4) get -these examples wrong and accept above code without an error. Those -compilers do not implement two-stage name lookup correctly. - - ---------- Footnotes ---------- - - (1) The C++ standard just uses the term "dependent" for names that -depend on the type or value of template parameters. This shorter term -will also be used in the rest of this section. - - -File: gcc.info, Node: Temporaries, Next: Copy Assignment, Prev: Name lookup, Up: C++ Misunderstandings - -11.7.3 Temporaries May Vanish Before You Expect ------------------------------------------------ - -It is dangerous to use pointers or references to _portions_ of a -temporary object. The compiler may very well delete the object before -you expect it to, leaving a pointer to garbage. The most common place -where this problem crops up is in classes like string classes, -especially ones that define a conversion function to type 'char *' or -'const char *'--which is one reason why the standard 'string' class -requires you to call the 'c_str' member function. However, any class -that returns a pointer to some internal structure is potentially subject -to this problem. - - For example, a program may use a function 'strfunc' that returns -'string' objects, and another function 'charfunc' that operates on -pointers to 'char': - - string strfunc (); - void charfunc (const char *); - - void - f () - { - const char *p = strfunc().c_str(); - ... - charfunc (p); - ... - charfunc (p); - } - -In this situation, it may seem reasonable to save a pointer to the C -string returned by the 'c_str' member function and use that rather than -call 'c_str' repeatedly. However, the temporary string created by the -call to 'strfunc' is destroyed after 'p' is initialized, at which point -'p' is left pointing to freed memory. - - Code like this may run successfully under some other compilers, -particularly obsolete cfront-based compilers that delete temporaries -along with normal local variables. However, the GNU C++ behavior is -standard-conforming, so if your program depends on late destruction of -temporaries it is not portable. - - The safe way to write such code is to give the temporary a name, which -forces it to remain until the end of the scope of the name. For -example: - - const string& tmp = strfunc (); - charfunc (tmp.c_str ()); - - -File: gcc.info, Node: Copy Assignment, Prev: Temporaries, Up: C++ Misunderstandings - -11.7.4 Implicit Copy-Assignment for Virtual Bases -------------------------------------------------- - -When a base class is virtual, only one subobject of the base class -belongs to each full object. Also, the constructors and destructors are -invoked only once, and called from the most-derived class. However, -such objects behave unspecified when being assigned. For example: - - struct Base{ - char *name; - Base(char *n) : name(strdup(n)){} - Base& operator= (const Base& other){ - free (name); - name = strdup (other.name); - } - }; - - struct A:virtual Base{ - int val; - A():Base("A"){} - }; - - struct B:virtual Base{ - int bval; - B():Base("B"){} - }; - - struct Derived:public A, public B{ - Derived():Base("Derived"){} - }; - - void func(Derived &d1, Derived &d2) - { - d1 = d2; - } - - The C++ standard specifies that 'Base::Base' is only called once when -constructing or copy-constructing a Derived object. It is unspecified -whether 'Base::operator=' is called more than once when the implicit -copy-assignment for Derived objects is invoked (as it is inside 'func' -in the example). - - G++ implements the "intuitive" algorithm for copy-assignment: assign -all direct bases, then assign all members. In that algorithm, the -virtual base subobject can be encountered more than once. In the -example, copying proceeds in the following order: 'val', 'name' (via -'strdup'), 'bval', and 'name' again. - - If application code relies on copy-assignment, a user-defined -copy-assignment operator removes any uncertainties. With such an -operator, the application can define whether and how the virtual base -subobject is assigned. - - -File: gcc.info, Node: Non-bugs, Next: Warnings and Errors, Prev: C++ Misunderstandings, Up: Trouble - -11.8 Certain Changes We Don't Want to Make -========================================== - -This section lists changes that people frequently request, but which we -do not make because we think GCC is better without them. - - * Checking the number and type of arguments to a function which has - an old-fashioned definition and no prototype. - - Such a feature would work only occasionally--only for calls that - appear in the same file as the called function, following the - definition. The only way to check all calls reliably is to add a - prototype for the function. But adding a prototype eliminates the - motivation for this feature. So the feature is not worthwhile. - - * Warning about using an expression whose type is signed as a shift - count. - - Shift count operands are probably signed more often than unsigned. - Warning about this would cause far more annoyance than good. - - * Warning about assigning a signed value to an unsigned variable. - - Such assignments must be very common; warning about them would - cause more annoyance than good. - - * Warning when a non-void function value is ignored. - - C contains many standard functions that return a value that most - programs choose to ignore. One obvious example is 'printf'. - Warning about this practice only leads the defensive programmer to - clutter programs with dozens of casts to 'void'. Such casts are - required so frequently that they become visual noise. Writing - those casts becomes so automatic that they no longer convey useful - information about the intentions of the programmer. For functions - where the return value should never be ignored, use the - 'warn_unused_result' function attribute (*note Function - Attributes::). - - * Making '-fshort-enums' the default. - - This would cause storage layout to be incompatible with most other - C compilers. And it doesn't seem very important, given that you - can get the same result in other ways. The case where it matters - most is when the enumeration-valued object is inside a structure, - and in that case you can specify a field width explicitly. - - * Making bit-fields unsigned by default on particular machines where - "the ABI standard" says to do so. - - The ISO C standard leaves it up to the implementation whether a - bit-field declared plain 'int' is signed or not. This in effect - creates two alternative dialects of C. - - The GNU C compiler supports both dialects; you can specify the - signed dialect with '-fsigned-bitfields' and the unsigned dialect - with '-funsigned-bitfields'. However, this leaves open the - question of which dialect to use by default. - - Currently, the preferred dialect makes plain bit-fields signed, - because this is simplest. Since 'int' is the same as 'signed int' - in every other context, it is cleanest for them to be the same in - bit-fields as well. - - Some computer manufacturers have published Application Binary - Interface standards which specify that plain bit-fields should be - unsigned. It is a mistake, however, to say anything about this - issue in an ABI. This is because the handling of plain bit-fields - distinguishes two dialects of C. Both dialects are meaningful on - every type of machine. Whether a particular object file was - compiled using signed bit-fields or unsigned is of no concern to - other object files, even if they access the same bit-fields in the - same data structures. - - A given program is written in one or the other of these two - dialects. The program stands a chance to work on most any machine - if it is compiled with the proper dialect. It is unlikely to work - at all if compiled with the wrong dialect. - - Many users appreciate the GNU C compiler because it provides an - environment that is uniform across machines. These users would be - inconvenienced if the compiler treated plain bit-fields differently - on certain machines. - - Occasionally users write programs intended only for a particular - machine type. On these occasions, the users would benefit if the - GNU C compiler were to support by default the same dialect as the - other compilers on that machine. But such applications are rare. - And users writing a program to run on more than one type of machine - cannot possibly benefit from this kind of compatibility. - - This is why GCC does and will treat plain bit-fields in the same - fashion on all types of machines (by default). - - There are some arguments for making bit-fields unsigned by default - on all machines. If, for example, this becomes a universal de - facto standard, it would make sense for GCC to go along with it. - This is something to be considered in the future. - - (Of course, users strongly concerned about portability should - indicate explicitly in each bit-field whether it is signed or not. - In this way, they write programs which have the same meaning in - both C dialects.) - - * Undefining '__STDC__' when '-ansi' is not used. - - Currently, GCC defines '__STDC__' unconditionally. This provides - good results in practice. - - Programmers normally use conditionals on '__STDC__' to ask whether - it is safe to use certain features of ISO C, such as function - prototypes or ISO token concatenation. Since plain 'gcc' supports - all the features of ISO C, the correct answer to these questions is - "yes". - - Some users try to use '__STDC__' to check for the availability of - certain library facilities. This is actually incorrect usage in an - ISO C program, because the ISO C standard says that a conforming - freestanding implementation should define '__STDC__' even though it - does not have the library facilities. 'gcc -ansi -pedantic' is a - conforming freestanding implementation, and it is therefore - required to define '__STDC__', even though it does not come with an - ISO C library. - - Sometimes people say that defining '__STDC__' in a compiler that - does not completely conform to the ISO C standard somehow violates - the standard. This is illogical. The standard is a standard for - compilers that claim to support ISO C, such as 'gcc -ansi'--not for - other compilers such as plain 'gcc'. Whatever the ISO C standard - says is relevant to the design of plain 'gcc' without '-ansi' only - for pragmatic reasons, not as a requirement. - - GCC normally defines '__STDC__' to be 1, and in addition defines - '__STRICT_ANSI__' if you specify the '-ansi' option, or a '-std' - option for strict conformance to some version of ISO C. On some - hosts, system include files use a different convention, where - '__STDC__' is normally 0, but is 1 if the user specifies strict - conformance to the C Standard. GCC follows the host convention - when processing system include files, but when processing user - files it follows the usual GNU C convention. - - * Undefining '__STDC__' in C++. - - Programs written to compile with C++-to-C translators get the value - of '__STDC__' that goes with the C compiler that is subsequently - used. These programs must test '__STDC__' to determine what kind - of C preprocessor that compiler uses: whether they should - concatenate tokens in the ISO C fashion or in the traditional - fashion. - - These programs work properly with GNU C++ if '__STDC__' is defined. - They would not work otherwise. - - In addition, many header files are written to provide prototypes in - ISO C but not in traditional C. Many of these header files can - work without change in C++ provided '__STDC__' is defined. If - '__STDC__' is not defined, they will all fail, and will all need to - be changed to test explicitly for C++ as well. - - * Deleting "empty" loops. - - Historically, GCC has not deleted "empty" loops under the - assumption that the most likely reason you would put one in a - program is to have a delay, so deleting them will not make real - programs run any faster. - - However, the rationale here is that optimization of a nonempty loop - cannot produce an empty one. This held for carefully written C - compiled with less powerful optimizers but is not always the case - for carefully written C++ or with more powerful optimizers. Thus - GCC will remove operations from loops whenever it can determine - those operations are not externally visible (apart from the time - taken to execute them, of course). In case the loop can be proved - to be finite, GCC will also remove the loop itself. - - Be aware of this when performing timing tests, for instance the - following loop can be completely removed, provided - 'some_expression' can provably not change any global state. - - { - int sum = 0; - int ix; - - for (ix = 0; ix != 10000; ix++) - sum += some_expression; - } - - Even though 'sum' is accumulated in the loop, no use is made of - that summation, so the accumulation can be removed. - - * Making side effects happen in the same order as in some other - compiler. - - It is never safe to depend on the order of evaluation of side - effects. For example, a function call like this may very well - behave differently from one compiler to another: - - void func (int, int); - - int i = 2; - func (i++, i++); - - There is no guarantee (in either the C or the C++ standard language - definitions) that the increments will be evaluated in any - particular order. Either increment might happen first. 'func' - might get the arguments '2, 3', or it might get '3, 2', or even '2, - 2'. - - * Making certain warnings into errors by default. - - Some ISO C testsuites report failure when the compiler does not - produce an error message for a certain program. - - ISO C requires a "diagnostic" message for certain kinds of invalid - programs, but a warning is defined by GCC to count as a diagnostic. - If GCC produces a warning but not an error, that is correct ISO C - support. If testsuites call this "failure", they should be run - with the GCC option '-pedantic-errors', which will turn these - warnings into errors. - - -File: gcc.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble - -11.9 Warning Messages and Error Messages -======================================== - -The GNU compiler can produce two kinds of diagnostics: errors and -warnings. Each kind has a different purpose: - - "Errors" report problems that make it impossible to compile your - program. GCC reports errors with the source file name and line - number where the problem is apparent. - - "Warnings" report other unusual conditions in your code that _may_ - indicate a problem, although compilation can (and does) proceed. - Warning messages also report the source file name and line number, - but include the text 'warning:' to distinguish them from error - messages. - - Warnings may indicate danger points where you should check to make sure -that your program really does what you intend; or the use of obsolete -features; or the use of nonstandard features of GNU C or C++. Many -warnings are issued only if you ask for them, with one of the '-W' -options (for instance, '-Wall' requests a variety of useful warnings). - - GCC always tries to compile your program if possible; it never -gratuitously rejects a program whose meaning is clear merely because -(for instance) it fails to conform to a standard. In some cases, -however, the C and C++ standards specify that certain extensions are -forbidden, and a diagnostic _must_ be issued by a conforming compiler. -The '-pedantic' option tells GCC to issue warnings in such cases; -'-pedantic-errors' says to make them errors instead. This does not mean -that _all_ non-ISO constructs get warnings or errors. - - *Note Options to Request or Suppress Warnings: Warning Options, for -more detail on these and related command-line options. - - -File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top - -12 Reporting Bugs -***************** - -Your bug reports play an essential role in making GCC reliable. - - When you encounter a problem, the first thing to do is to see if it is -already known. *Note Trouble::. If it isn't known, then you should -report the problem. - -* Menu: - -* Criteria: Bug Criteria. Have you really found a bug? -* Reporting: Bug Reporting. How to report a bug effectively. - - -File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Up: Bugs - -12.1 Have You Found a Bug? -========================== - -If you are not sure whether you have found a bug, here are some -guidelines: - - * If the compiler gets a fatal signal, for any input whatever, that - is a compiler bug. Reliable compilers never crash. - - * If the compiler produces invalid assembly code, for any input - whatever (except an 'asm' statement), that is a compiler bug, - unless the compiler reports errors (not just warnings) which would - ordinarily prevent the assembler from being run. - - * If the compiler produces valid assembly code that does not - correctly execute the input source code, that is a compiler bug. - - However, you must double-check to make sure, because you may have a - program whose behavior is undefined, which happened by chance to - give the desired results with another C or C++ compiler. - - For example, in many nonoptimizing compilers, you can write 'x;' at - the end of a function instead of 'return x;', with the same - results. But the value of the function is undefined if 'return' is - omitted; it is not a bug when GCC produces different results. - - Problems often result from expressions with two increment - operators, as in 'f (*p++, *p++)'. Your previous compiler might - have interpreted that expression the way you intended; GCC might - interpret it another way. Neither compiler is wrong. The bug is - in your code. - - After you have localized the error to a single source line, it - should be easy to check for these things. If your program is - correct and well defined, you have found a compiler bug. - - * If the compiler produces an error message for valid input, that is - a compiler bug. - - * If the compiler does not produce an error message for invalid - input, that is a compiler bug. However, you should note that your - idea of "invalid input" might be someone else's idea of "an - extension" or "support for traditional practice". - - * If you are an experienced user of one of the languages GCC - supports, your suggestions for improvement of GCC are welcome in - any case. - - -File: gcc.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Bugs - -12.2 How and where to Report Bugs -================================= - -Bugs should be reported to the bug database at -<http://gcc.gnu.org/bugs.html>. - - -File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top - -13 How To Get Help with GCC -*************************** - -If you need help installing, using or changing GCC, there are two ways -to find it: - - * Send a message to a suitable network mailing list. First try - <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if - that brings no response, try <gcc@gcc.gnu.org>. For help changing - GCC, ask <gcc@gcc.gnu.org>. If you think you have found a bug in - GCC, please report it following the instructions at *note Bug - Reporting::. - - * Look in the service directory for someone who might help you for a - fee. The service directory is found at - <http://www.fsf.org/resources/service>. - - For further information, see <http://gcc.gnu.org/faq.html#support>. - - -File: gcc.info, Node: Contributing, Next: Funding, Prev: Service, Up: Top - -14 Contributing to GCC Development -********************************** - -If you would like to help pretest GCC releases to assure they work well, -current development sources are available by SVN (see -<http://gcc.gnu.org/svn.html>). Source and binary snapshots are also -available for FTP; see <http://gcc.gnu.org/snapshots.html>. - - If you would like to work on improvements to GCC, please read the -advice at these URLs: - - <http://gcc.gnu.org/contribute.html> - <http://gcc.gnu.org/contributewhy.html> - -for information on how to make useful contributions and avoid -duplication of effort. Suggested projects are listed at -<http://gcc.gnu.org/projects/>. - - -File: gcc.info, Node: Funding, Next: GNU Project, Prev: Contributing, Up: Top - -Funding Free Software -********************* - -If you want to have more free software a few years from now, it makes -sense for you to help encourage people to contribute funds for its -development. The most effective approach known is to encourage -commercial redistributors to donate. - - Users of free software systems can boost the pace of development by -encouraging for-a-fee distributors to donate part of their selling price -to free software developers--the Free Software Foundation, and others. - - The way to convince distributors to do this is to demand it and expect -it from them. So when you compare distributors, judge them partly by -how much they give to free software development. Show distributors they -must compete to be the one who gives the most. - - To make this approach work, you must insist on numbers that you can -compare, such as, "We will donate ten dollars to the Frobnitz project -for each disk sold." Don't be satisfied with a vague promise, such as -"A portion of the profits are donated," since it doesn't give a basis -for comparison. - - Even a precise fraction "of the profits from this disk" is not very -meaningful, since creative accounting and unrelated business decisions -can greatly alter what fraction of the sales price counts as profit. If -the price you pay is $50, ten percent of the profit is probably less -than a dollar; it might be a few cents, or nothing at all. - - Some redistributors do development work themselves. This is useful -too; but to keep everyone honest, you need to inquire how much they do, -and what kind. Some kinds of development make much more long-term -difference than others. For example, maintaining a separate version of -a program contributes very little; maintaining the standard version of a -program for the whole community contributes much. Easy new ports -contribute little, since someone else would surely do them; difficult -ports such as adding a new CPU to the GNU Compiler Collection contribute -more; major new features or packages contribute the most. - - By establishing the idea that supporting further development is "the -proper thing to do" when distributing free software for a fee, we can -assure a steady flow of resources into making more free software. - - Copyright (C) 1994 Free Software Foundation, Inc. - Verbatim copying and redistribution of this section is permitted - without royalty; alteration is not permitted. - - -File: gcc.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top - -The GNU Project and GNU/Linux -***************************** - -The GNU Project was launched in 1984 to develop a complete Unix-like -operating system which is free software: the GNU system. (GNU is a -recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) -Variants of the GNU operating system, which use the kernel Linux, are -now widely used; though these systems are often referred to as "Linux", -they are more accurately called GNU/Linux systems. - - For more information, see: - <http://www.gnu.org/> - <http://www.gnu.org/gnu/linux-and-gnu.html> - - -File: gcc.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top - -GNU General Public License -************************** - - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> - - Everyone is permitted to copy and distribute verbatim copies of this - license document, but changing it is not allowed. - -Preamble -======== - -The GNU General Public License is a free, copyleft license for software -and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program-to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not price. -Our General Public Licenses are designed to make sure that you have the -freedom to distribute copies of free software (and charge for them if -you wish), that you receive source code or can get it if you want it, -that you can change the software or use pieces of it in new free -programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether gratis -or for a fee, you must pass on to the recipients the same freedoms that -you received. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - Developers that use the GNU GPL protect your rights with two steps: (1) -assert copyright on the software, and (2) offer you this License giving -you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - -TERMS AND CONDITIONS -==================== - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public - License. - - "Copyright" also means copyright-like laws that apply to other - kinds of works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this - License. Each licensee is addressed as "you". "Licensees" and - "recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the - work in a fashion requiring copyright permission, other than the - making of an exact copy. The resulting work is called a "modified - version" of the earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work - based on the Program. - - To "propagate" a work means to do anything with it that, without - permission, would make you directly or secondarily liable for - infringement under applicable copyright law, except executing it on - a computer or modifying a private copy. Propagation includes - copying, distribution (with or without modification), making - available to the public, and in some countries other activities as - well. - - To "convey" a work means any kind of propagation that enables other - parties to make or receive copies. Mere interaction with a user - through a computer network, with no transfer of a copy, is not - conveying. - - An interactive user interface displays "Appropriate Legal Notices" - to the extent that it includes a convenient and prominently visible - feature that (1) displays an appropriate copyright notice, and (2) - tells the user that there is no warranty for the work (except to - the extent that warranties are provided), that licensees may convey - the work under this License, and how to view a copy of this - License. If the interface presents a list of user commands or - options, such as a menu, a prominent item in the list meets this - criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work - for making modifications to it. "Object code" means any non-source - form of a work. - - A "Standard Interface" means an interface that either is an - official standard defined by a recognized standards body, or, in - the case of interfaces specified for a particular programming - language, one that is widely used among developers working in that - language. - - The "System Libraries" of an executable work include anything, - other than the work as a whole, that (a) is included in the normal - form of packaging a Major Component, but which is not part of that - Major Component, and (b) serves only to enable use of the work with - that Major Component, or to implement a Standard Interface for - which an implementation is available to the public in source code - form. A "Major Component", in this context, means a major - essential component (kernel, window system, and so on) of the - specific operating system (if any) on which the executable work - runs, or a compiler used to produce the work, or an object code - interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all - the source code needed to generate, install, and (for an executable - work) run the object code and to modify the work, including scripts - to control those activities. However, it does not include the - work's System Libraries, or general-purpose tools or generally - available free programs which are used unmodified in performing - those activities but which are not part of the work. For example, - Corresponding Source includes interface definition files associated - with source files for the work, and the source code for shared - libraries and dynamically linked subprograms that the work is - specifically designed to require, such as by intimate data - communication or control flow between those subprograms and other - parts of the work. - - The Corresponding Source need not include anything that users can - regenerate automatically from other parts of the Corresponding - Source. - - The Corresponding Source for a work in source code form is that - same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of - copyright on the Program, and are irrevocable provided the stated - conditions are met. This License explicitly affirms your unlimited - permission to run the unmodified Program. The output from running - a covered work is covered by this License only if the output, given - its content, constitutes a covered work. This License acknowledges - your rights of fair use or other equivalent, as provided by - copyright law. - - You may make, run and propagate covered works that you do not - convey, without conditions so long as your license otherwise - remains in force. You may convey covered works to others for the - sole purpose of having them make modifications exclusively for you, - or provide you with facilities for running those works, provided - that you comply with the terms of this License in conveying all - material for which you do not control copyright. Those thus making - or running the covered works for you must do so exclusively on your - behalf, under your direction and control, on terms that prohibit - them from making any copies of your copyrighted material outside - their relationship with you. - - Conveying under any other circumstances is permitted solely under - the conditions stated below. Sublicensing is not allowed; section - 10 makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological - measure under any applicable law fulfilling obligations under - article 11 of the WIPO copyright treaty adopted on 20 December - 1996, or similar laws prohibiting or restricting circumvention of - such measures. - - When you convey a covered work, you waive any legal power to forbid - circumvention of technological measures to the extent such - circumvention is effected by exercising rights under this License - with respect to the covered work, and you disclaim any intention to - limit operation or modification of the work as a means of - enforcing, against the work's users, your or third parties' legal - rights to forbid circumvention of technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you - receive it, in any medium, provided that you conspicuously and - appropriately publish on each copy an appropriate copyright notice; - keep intact all notices stating that this License and any - non-permissive terms added in accord with section 7 apply to the - code; keep intact all notices of the absence of any warranty; and - give all recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, - and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to - produce it from the Program, in the form of source code under the - terms of section 4, provided that you also meet all of these - conditions: - - a. The work must carry prominent notices stating that you - modified it, and giving a relevant date. - - b. The work must carry prominent notices stating that it is - released under this License and any conditions added under - section 7. This requirement modifies the requirement in - section 4 to "keep intact all notices". - - c. You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable - section 7 additional terms, to the whole of the work, and all - its parts, regardless of how they are packaged. This License - gives no permission to license the work in any other way, but - it does not invalidate such permission if you have separately - received it. - - d. If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has - interactive interfaces that do not display Appropriate Legal - Notices, your work need not make them do so. - - A compilation of a covered work with other separate and independent - works, which are not by their nature extensions of the covered - work, and which are not combined with it such as to form a larger - program, in or on a volume of a storage or distribution medium, is - called an "aggregate" if the compilation and its resulting - copyright are not used to limit the access or legal rights of the - compilation's users beyond what the individual works permit. - Inclusion of a covered work in an aggregate does not cause this - License to apply to the other parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms - of sections 4 and 5, provided that you also convey the - machine-readable Corresponding Source under the terms of this - License, in one of these ways: - - a. Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b. Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that - product model, to give anyone who possesses the object code - either (1) a copy of the Corresponding Source for all the - software in the product that is covered by this License, on a - durable physical medium customarily used for software - interchange, for a price no more than your reasonable cost of - physically performing this conveying of source, or (2) access - to copy the Corresponding Source from a network server at no - charge. - - c. Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, - and only if you received the object code with such an offer, - in accord with subsection 6b. - - d. Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to - the Corresponding Source in the same way through the same - place at no further charge. You need not require recipients - to copy the Corresponding Source along with the object code. - If the place to copy the object code is a network server, the - Corresponding Source may be on a different server (operated by - you or a third party) that supports equivalent copying - facilities, provided you maintain clear directions next to the - object code saying where to find the Corresponding Source. - Regardless of what server hosts the Corresponding Source, you - remain obligated to ensure that it is available for as long as - needed to satisfy these requirements. - - e. Convey the object code using peer-to-peer transmission, - provided you inform other peers where the object code and - Corresponding Source of the work are being offered to the - general public at no charge under subsection 6d. - - A separable portion of the object code, whose source code is - excluded from the Corresponding Source as a System Library, need - not be included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means - any tangible personal property which is normally used for personal, - family, or household purposes, or (2) anything designed or sold for - incorporation into a dwelling. In determining whether a product is - a consumer product, doubtful cases shall be resolved in favor of - coverage. For a particular product received by a particular user, - "normally used" refers to a typical or common use of that class of - product, regardless of the status of the particular user or of the - way in which the particular user actually uses, or expects or is - expected to use, the product. A product is a consumer product - regardless of whether the product has substantial commercial, - industrial or non-consumer uses, unless such uses represent the - only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, - procedures, authorization keys, or other information required to - install and execute modified versions of a covered work in that - User Product from a modified version of its Corresponding Source. - The information must suffice to ensure that the continued - functioning of the modified object code is in no case prevented or - interfered with solely because modification has been made. - - If you convey an object code work under this section in, or with, - or specifically for use in, a User Product, and the conveying - occurs as part of a transaction in which the right of possession - and use of the User Product is transferred to the recipient in - perpetuity or for a fixed term (regardless of how the transaction - is characterized), the Corresponding Source conveyed under this - section must be accompanied by the Installation Information. But - this requirement does not apply if neither you nor any third party - retains the ability to install modified object code on the User - Product (for example, the work has been installed in ROM). - - The requirement to provide Installation Information does not - include a requirement to continue to provide support service, - warranty, or updates for a work that has been modified or installed - by the recipient, or for the User Product in which it has been - modified or installed. Access to a network may be denied when the - modification itself materially and adversely affects the operation - of the network or violates the rules and protocols for - communication across the network. - - Corresponding Source conveyed, and Installation Information - provided, in accord with this section must be in a format that is - publicly documented (and with an implementation available to the - public in source code form), and must require no special password - or key for unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of - this License by making exceptions from one or more of its - conditions. Additional permissions that are applicable to the - entire Program shall be treated as though they were included in - this License, to the extent that they are valid under applicable - law. If additional permissions apply only to part of the Program, - that part may be used separately under those permissions, but the - entire Program remains governed by this License without regard to - the additional permissions. - - When you convey a copy of a covered work, you may at your option - remove any additional permissions from that copy, or from any part - of it. (Additional permissions may be written to require their own - removal in certain cases when you modify the work.) You may place - additional permissions on material, added by you to a covered work, - for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material - you add to a covered work, you may (if authorized by the copyright - holders of that material) supplement the terms of this License with - terms: - - a. Disclaiming warranty or limiting liability differently from - the terms of sections 15 and 16 of this License; or - - b. Requiring preservation of specified reasonable legal notices - or author attributions in that material or in the Appropriate - Legal Notices displayed by works containing it; or - - c. Prohibiting misrepresentation of the origin of that material, - or requiring that modified versions of such material be marked - in reasonable ways as different from the original version; or - - d. Limiting the use for publicity purposes of names of licensors - or authors of the material; or - - e. Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f. Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified - versions of it) with contractual assumptions of liability to - the recipient, for any liability that these contractual - assumptions directly impose on those licensors and authors. - - All other non-permissive additional terms are considered "further - restrictions" within the meaning of section 10. If the Program as - you received it, or any part of it, contains a notice stating that - it is governed by this License along with a term that is a further - restriction, you may remove that term. If a license document - contains a further restriction but permits relicensing or conveying - under this License, you may add to a covered work material governed - by the terms of that license document, provided that the further - restriction does not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you - must place, in the relevant source files, a statement of the - additional terms that apply to those files, or a notice indicating - where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in - the form of a separately written license, or stated as exceptions; - the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly - provided under this License. Any attempt otherwise to propagate or - modify it is void, and will automatically terminate your rights - under this License (including any patent licenses granted under the - third paragraph of section 11). - - However, if you cease all violation of this License, then your - license from a particular copyright holder is reinstated (a) - provisionally, unless and until the copyright holder explicitly and - finally terminates your license, and (b) permanently, if the - copyright holder fails to notify you of the violation by some - reasonable means prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is - reinstated permanently if the copyright holder notifies you of the - violation by some reasonable means, this is the first time you have - received notice of violation of this License (for any work) from - that copyright holder, and you cure the violation prior to 30 days - after your receipt of the notice. - - Termination of your rights under this section does not terminate - the licenses of parties who have received copies or rights from you - under this License. If your rights have been terminated and not - permanently reinstated, you do not qualify to receive new licenses - for the same material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or - run a copy of the Program. Ancillary propagation of a covered work - occurring solely as a consequence of using peer-to-peer - transmission to receive a copy likewise does not require - acceptance. However, nothing other than this License grants you - permission to propagate or modify any covered work. These actions - infringe copyright if you do not accept this License. Therefore, - by modifying or propagating a covered work, you indicate your - acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically - receives a license from the original licensors, to run, modify and - propagate that work, subject to this License. You are not - responsible for enforcing compliance by third parties with this - License. - - An "entity transaction" is a transaction transferring control of an - organization, or substantially all assets of one, or subdividing an - organization, or merging organizations. If propagation of a - covered work results from an entity transaction, each party to that - transaction who receives a copy of the work also receives whatever - licenses to the work the party's predecessor in interest had or - could give under the previous paragraph, plus a right to possession - of the Corresponding Source of the work from the predecessor in - interest, if the predecessor has it or can get it with reasonable - efforts. - - You may not impose any further restrictions on the exercise of the - rights granted or affirmed under this License. For example, you - may not impose a license fee, royalty, or other charge for exercise - of rights granted under this License, and you may not initiate - litigation (including a cross-claim or counterclaim in a lawsuit) - alleging that any patent claim is infringed by making, using, - selling, offering for sale, or importing the Program or any portion - of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this - License of the Program or a work on which the Program is based. - The work thus licensed is called the contributor's "contributor - version". - - A contributor's "essential patent claims" are all patent claims - owned or controlled by the contributor, whether already acquired or - hereafter acquired, that would be infringed by some manner, - permitted by this License, of making, using, or selling its - contributor version, but do not include claims that would be - infringed only as a consequence of further modification of the - contributor version. For purposes of this definition, "control" - includes the right to grant patent sublicenses in a manner - consistent with the requirements of this License. - - Each contributor grants you a non-exclusive, worldwide, - royalty-free patent license under the contributor's essential - patent claims, to make, use, sell, offer for sale, import and - otherwise run, modify and propagate the contents of its contributor - version. - - In the following three paragraphs, a "patent license" is any - express agreement or commitment, however denominated, not to - enforce a patent (such as an express permission to practice a - patent or covenant not to sue for patent infringement). To "grant" - such a patent license to a party means to make such an agreement or - commitment not to enforce a patent against the party. - - If you convey a covered work, knowingly relying on a patent - license, and the Corresponding Source of the work is not available - for anyone to copy, free of charge and under the terms of this - License, through a publicly available network server or other - readily accessible means, then you must either (1) cause the - Corresponding Source to be so available, or (2) arrange to deprive - yourself of the benefit of the patent license for this particular - work, or (3) arrange, in a manner consistent with the requirements - of this License, to extend the patent license to downstream - recipients. "Knowingly relying" means you have actual knowledge - that, but for the patent license, your conveying the covered work - in a country, or your recipient's use of the covered work in a - country, would infringe one or more identifiable patents in that - country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or - arrangement, you convey, or propagate by procuring conveyance of, a - covered work, and grant a patent license to some of the parties - receiving the covered work authorizing them to use, propagate, - modify or convey a specific copy of the covered work, then the - patent license you grant is automatically extended to all - recipients of the covered work and works based on it. - - A patent license is "discriminatory" if it does not include within - the scope of its coverage, prohibits the exercise of, or is - conditioned on the non-exercise of one or more of the rights that - are specifically granted under this License. You may not convey a - covered work if you are a party to an arrangement with a third - party that is in the business of distributing software, under which - you make payment to the third party based on the extent of your - activity of conveying the work, and under which the third party - grants, to any of the parties who would receive the covered work - from you, a discriminatory patent license (a) in connection with - copies of the covered work conveyed by you (or copies made from - those copies), or (b) primarily for and in connection with specific - products or compilations that contain the covered work, unless you - entered into that arrangement, or that patent license was granted, - prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting - any implied license or other defenses to infringement that may - otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement - or otherwise) that contradict the conditions of this License, they - do not excuse you from the conditions of this License. If you - cannot convey a covered work so as to satisfy simultaneously your - obligations under this License and any other pertinent obligations, - then as a consequence you may not convey it at all. For example, - if you agree to terms that obligate you to collect a royalty for - further conveying from those to whom you convey the Program, the - only way you could satisfy both those terms and this License would - be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have - permission to link or combine any covered work with a work licensed - under version 3 of the GNU Affero General Public License into a - single combined work, and to convey the resulting work. The terms - of this License will continue to apply to the part which is the - covered work, but the special requirements of the GNU Affero - General Public License, section 13, concerning interaction through - a network will apply to the combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new - versions of the GNU General Public License from time to time. Such - new versions will be similar in spirit to the present version, but - may differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the - Program specifies that a certain numbered version of the GNU - General Public License "or any later version" applies to it, you - have the option of following the terms and conditions either of - that numbered version or of any later version published by the Free - Software Foundation. If the Program does not specify a version - number of the GNU General Public License, you may choose any - version ever published by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future - versions of the GNU General Public License can be used, that - proxy's public statement of acceptance of a version permanently - authorizes you to choose that version for the Program. - - Later license versions may give you additional or different - permissions. However, no additional obligations are imposed on any - author or copyright holder as a result of your choosing to follow a - later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY - APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE - COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" - WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE - RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. - SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL - NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN - WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES - AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR - DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR - CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE - THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA - BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD - PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER - PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF - THE POSSIBILITY OF SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided - above cannot be given local legal effect according to their terms, - reviewing courts shall apply local law that most closely - approximates an absolute waiver of all civil liability in - connection with the Program, unless a warranty or assumption of - liability accompanies a copy of the Program in return for a fee. - -END OF TERMS AND CONDITIONS -=========================== - -How to Apply These Terms to Your New Programs -============================================= - -If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these -terms. - - To do so, attach the following notices to the program. It is safest to -attach them to the start of each source file to most effectively state -the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. - Copyright (C) YEAR NAME OF AUTHOR - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or (at - your option) any later version. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - - Also add information on how to contact you by electronic and paper -mail. - - If the program does terminal interaction, make it output a short notice -like this when it starts in an interactive mode: - - PROGRAM Copyright (C) YEAR NAME OF AUTHOR - This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type 'show c' for details. - - The hypothetical commands 'show w' and 'show c' should show the -appropriate parts of the General Public License. Of course, your -program's commands might be different; for a GUI interface, you would -use an "about box". - - You should also get your employer (if you work as a programmer) or -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. For more information on this, and how to apply and follow -the GNU GPL, see <http://www.gnu.org/licenses/>. - - The GNU General Public License does not permit incorporating your -program into proprietary programs. If your program is a subroutine -library, you may consider it more useful to permit linking proprietary -applications with the library. If this is what you want to do, use the -GNU Lesser General Public License instead of this License. But first, -please read <http://www.gnu.org/philosophy/why-not-lgpl.html>. - - -File: gcc.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top - -GNU Free Documentation License -****************************** - - Version 1.3, 3 November 2008 - - Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. - <http://fsf.org/> - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - 0. PREAMBLE - - The purpose of this License is to make a manual, textbook, or other - functional and useful document "free" in the sense of freedom: to - assure everyone the effective freedom to copy and redistribute it, - with or without modifying it, either commercially or - noncommercially. Secondarily, this License preserves for the - author and publisher a way to get credit for their work, while not - being considered responsible for modifications made by others. - - This License is a kind of "copyleft", which means that derivative - works of the document must themselves be free in the same sense. - It complements the GNU General Public License, which is a copyleft - license designed for free software. - - We have designed this License in order to use it for manuals for - free software, because free software needs free documentation: a - free program should come with manuals providing the same freedoms - that the software does. But this License is not limited to - software manuals; it can be used for any textual work, regardless - of subject matter or whether it is published as a printed book. We - recommend this License principally for works whose purpose is - instruction or reference. - - 1. APPLICABILITY AND DEFINITIONS - - This License applies to any manual or other work, in any medium, - that contains a notice placed by the copyright holder saying it can - be distributed under the terms of this License. Such a notice - grants a world-wide, royalty-free license, unlimited in duration, - to use that work under the conditions stated herein. The - "Document", below, refers to any such manual or work. Any member - of the public is a licensee, and is addressed as "you". You accept - the license if you copy, modify or distribute the work in a way - requiring permission under copyright law. - - A "Modified Version" of the Document means any work containing the - Document or a portion of it, either copied verbatim, or with - modifications and/or translated into another language. - - A "Secondary Section" is a named appendix or a front-matter section - of the Document that deals exclusively with the relationship of the - publishers or authors of the Document to the Document's overall - subject (or to related matters) and contains nothing that could - fall directly within that overall subject. (Thus, if the Document - is in part a textbook of mathematics, a Secondary Section may not - explain any mathematics.) The relationship could be a matter of - historical connection with the subject or with related matters, or - of legal, commercial, philosophical, ethical or political position - regarding them. - - The "Invariant Sections" are certain Secondary Sections whose - titles are designated, as being those of Invariant Sections, in the - notice that says that the Document is released under this License. - If a section does not fit the above definition of Secondary then it - is not allowed to be designated as Invariant. The Document may - contain zero Invariant Sections. If the Document does not identify - any Invariant Sections then there are none. - - The "Cover Texts" are certain short passages of text that are - listed, as Front-Cover Texts or Back-Cover Texts, in the notice - that says that the Document is released under this License. A - Front-Cover Text may be at most 5 words, and a Back-Cover Text may - be at most 25 words. - - A "Transparent" copy of the Document means a machine-readable copy, - represented in a format whose specification is available to the - general public, that is suitable for revising the document - straightforwardly with generic text editors or (for images composed - of pixels) generic paint programs or (for drawings) some widely - available drawing editor, and that is suitable for input to text - formatters or for automatic translation to a variety of formats - suitable for input to text formatters. A copy made in an otherwise - Transparent file format whose markup, or absence of markup, has - been arranged to thwart or discourage subsequent modification by - readers is not Transparent. An image format is not Transparent if - used for any substantial amount of text. A copy that is not - "Transparent" is called "Opaque". - - Examples of suitable formats for Transparent copies include plain - ASCII without markup, Texinfo input format, LaTeX input format, - SGML or XML using a publicly available DTD, and standard-conforming - simple HTML, PostScript or PDF designed for human modification. - Examples of transparent image formats include PNG, XCF and JPG. - Opaque formats include proprietary formats that can be read and - edited only by proprietary word processors, SGML or XML for which - the DTD and/or processing tools are not generally available, and - the machine-generated HTML, PostScript or PDF produced by some word - processors for output purposes only. - - The "Title Page" means, for a printed book, the title page itself, - plus such following pages as are needed to hold, legibly, the - material this License requires to appear in the title page. For - works in formats which do not have any title page as such, "Title - Page" means the text near the most prominent appearance of the - work's title, preceding the beginning of the body of the text. - - The "publisher" means any person or entity that distributes copies - of the Document to the public. - - A section "Entitled XYZ" means a named subunit of the Document - whose title either is precisely XYZ or contains XYZ in parentheses - following text that translates XYZ in another language. (Here XYZ - stands for a specific section name mentioned below, such as - "Acknowledgements", "Dedications", "Endorsements", or "History".) - To "Preserve the Title" of such a section when you modify the - Document means that it remains a section "Entitled XYZ" according - to this definition. - - The Document may include Warranty Disclaimers next to the notice - which states that this License applies to the Document. These - Warranty Disclaimers are considered to be included by reference in - this License, but only as regards disclaiming warranties: any other - implication that these Warranty Disclaimers may have is void and - has no effect on the meaning of this License. - - 2. VERBATIM COPYING - - You may copy and distribute the Document in any medium, either - commercially or noncommercially, provided that this License, the - copyright notices, and the license notice saying this License - applies to the Document are reproduced in all copies, and that you - add no other conditions whatsoever to those of this License. You - may not use technical measures to obstruct or control the reading - or further copying of the copies you make or distribute. However, - you may accept compensation in exchange for copies. If you - distribute a large enough number of copies you must also follow the - conditions in section 3. - - You may also lend copies, under the same conditions stated above, - and you may publicly display copies. - - 3. COPYING IN QUANTITY - - If you publish printed copies (or copies in media that commonly - have printed covers) of the Document, numbering more than 100, and - the Document's license notice requires Cover Texts, you must - enclose the copies in covers that carry, clearly and legibly, all - these Cover Texts: Front-Cover Texts on the front cover, and - Back-Cover Texts on the back cover. Both covers must also clearly - and legibly identify you as the publisher of these copies. The - front cover must present the full title with all words of the title - equally prominent and visible. You may add other material on the - covers in addition. Copying with changes limited to the covers, as - long as they preserve the title of the Document and satisfy these - conditions, can be treated as verbatim copying in other respects. - - If the required texts for either cover are too voluminous to fit - legibly, you should put the first ones listed (as many as fit - reasonably) on the actual cover, and continue the rest onto - adjacent pages. - - If you publish or distribute Opaque copies of the Document - numbering more than 100, you must either include a machine-readable - Transparent copy along with each Opaque copy, or state in or with - each Opaque copy a computer-network location from which the general - network-using public has access to download using public-standard - network protocols a complete Transparent copy of the Document, free - of added material. If you use the latter option, you must take - reasonably prudent steps, when you begin distribution of Opaque - copies in quantity, to ensure that this Transparent copy will - remain thus accessible at the stated location until at least one - year after the last time you distribute an Opaque copy (directly or - through your agents or retailers) of that edition to the public. - - It is requested, but not required, that you contact the authors of - the Document well before redistributing any large number of copies, - to give them a chance to provide you with an updated version of the - Document. - - 4. MODIFICATIONS - - You may copy and distribute a Modified Version of the Document - under the conditions of sections 2 and 3 above, provided that you - release the Modified Version under precisely this License, with the - Modified Version filling the role of the Document, thus licensing - distribution and modification of the Modified Version to whoever - possesses a copy of it. In addition, you must do these things in - the Modified Version: - - A. Use in the Title Page (and on the covers, if any) a title - distinct from that of the Document, and from those of previous - versions (which should, if there were any, be listed in the - History section of the Document). You may use the same title - as a previous version if the original publisher of that - version gives permission. - - B. List on the Title Page, as authors, one or more persons or - entities responsible for authorship of the modifications in - the Modified Version, together with at least five of the - principal authors of the Document (all of its principal - authors, if it has fewer than five), unless they release you - from this requirement. - - C. State on the Title page the name of the publisher of the - Modified Version, as the publisher. - - D. Preserve all the copyright notices of the Document. - - E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. - - F. Include, immediately after the copyright notices, a license - notice giving the public permission to use the Modified - Version under the terms of this License, in the form shown in - the Addendum below. - - G. Preserve in that license notice the full lists of Invariant - Sections and required Cover Texts given in the Document's - license notice. - - H. Include an unaltered copy of this License. - - I. Preserve the section Entitled "History", Preserve its Title, - and add to it an item stating at least the title, year, new - authors, and publisher of the Modified Version as given on the - Title Page. If there is no section Entitled "History" in the - Document, create one stating the title, year, authors, and - publisher of the Document as given on its Title Page, then add - an item describing the Modified Version as stated in the - previous sentence. - - J. Preserve the network location, if any, given in the Document - for public access to a Transparent copy of the Document, and - likewise the network locations given in the Document for - previous versions it was based on. These may be placed in the - "History" section. You may omit a network location for a work - that was published at least four years before the Document - itself, or if the original publisher of the version it refers - to gives permission. - - K. For any section Entitled "Acknowledgements" or "Dedications", - Preserve the Title of the section, and preserve in the section - all the substance and tone of each of the contributor - acknowledgements and/or dedications given therein. - - L. Preserve all the Invariant Sections of the Document, unaltered - in their text and in their titles. Section numbers or the - equivalent are not considered part of the section titles. - - M. Delete any section Entitled "Endorsements". Such a section - may not be included in the Modified Version. - - N. Do not retitle any existing section to be Entitled - "Endorsements" or to conflict in title with any Invariant - Section. - - O. Preserve any Warranty Disclaimers. - - If the Modified Version includes new front-matter sections or - appendices that qualify as Secondary Sections and contain no - material copied from the Document, you may at your option designate - some or all of these sections as invariant. To do this, add their - titles to the list of Invariant Sections in the Modified Version's - license notice. These titles must be distinct from any other - section titles. - - You may add a section Entitled "Endorsements", provided it contains - nothing but endorsements of your Modified Version by various - parties--for example, statements of peer review or that the text - has been approved by an organization as the authoritative - definition of a standard. - - You may add a passage of up to five words as a Front-Cover Text, - and a passage of up to 25 words as a Back-Cover Text, to the end of - the list of Cover Texts in the Modified Version. Only one passage - of Front-Cover Text and one of Back-Cover Text may be added by (or - through arrangements made by) any one entity. If the Document - already includes a cover text for the same cover, previously added - by you or by arrangement made by the same entity you are acting on - behalf of, you may not add another; but you may replace the old - one, on explicit permission from the previous publisher that added - the old one. - - The author(s) and publisher(s) of the Document do not by this - License give permission to use their names for publicity for or to - assert or imply endorsement of any Modified Version. - - 5. COMBINING DOCUMENTS - - You may combine the Document with other documents released under - this License, under the terms defined in section 4 above for - modified versions, provided that you include in the combination all - of the Invariant Sections of all of the original documents, - unmodified, and list them all as Invariant Sections of your - combined work in its license notice, and that you preserve all - their Warranty Disclaimers. - - The combined work need only contain one copy of this License, and - multiple identical Invariant Sections may be replaced with a single - copy. If there are multiple Invariant Sections with the same name - but different contents, make the title of each such section unique - by adding at the end of it, in parentheses, the name of the - original author or publisher of that section if known, or else a - unique number. Make the same adjustment to the section titles in - the list of Invariant Sections in the license notice of the - combined work. - - In the combination, you must combine any sections Entitled - "History" in the various original documents, forming one section - Entitled "History"; likewise combine any sections Entitled - "Acknowledgements", and any sections Entitled "Dedications". You - must delete all sections Entitled "Endorsements." - - 6. COLLECTIONS OF DOCUMENTS - - You may make a collection consisting of the Document and other - documents released under this License, and replace the individual - copies of this License in the various documents with a single copy - that is included in the collection, provided that you follow the - rules of this License for verbatim copying of each of the documents - in all other respects. - - You may extract a single document from such a collection, and - distribute it individually under this License, provided you insert - a copy of this License into the extracted document, and follow this - License in all other respects regarding verbatim copying of that - document. - - 7. AGGREGATION WITH INDEPENDENT WORKS - - A compilation of the Document or its derivatives with other - separate and independent documents or works, in or on a volume of a - storage or distribution medium, is called an "aggregate" if the - copyright resulting from the compilation is not used to limit the - legal rights of the compilation's users beyond what the individual - works permit. When the Document is included in an aggregate, this - License does not apply to the other works in the aggregate which - are not themselves derivative works of the Document. - - If the Cover Text requirement of section 3 is applicable to these - copies of the Document, then if the Document is less than one half - of the entire aggregate, the Document's Cover Texts may be placed - on covers that bracket the Document within the aggregate, or the - electronic equivalent of covers if the Document is in electronic - form. Otherwise they must appear on printed covers that bracket - the whole aggregate. - - 8. TRANSLATION - - Translation is considered a kind of modification, so you may - distribute translations of the Document under the terms of section - 4. Replacing Invariant Sections with translations requires special - permission from their copyright holders, but you may include - translations of some or all Invariant Sections in addition to the - original versions of these Invariant Sections. You may include a - translation of this License, and all the license notices in the - Document, and any Warranty Disclaimers, provided that you also - include the original English version of this License and the - original versions of those notices and disclaimers. In case of a - disagreement between the translation and the original version of - this License or a notice or disclaimer, the original version will - prevail. - - If a section in the Document is Entitled "Acknowledgements", - "Dedications", or "History", the requirement (section 4) to - Preserve its Title (section 1) will typically require changing the - actual title. - - 9. TERMINATION - - You may not copy, modify, sublicense, or distribute the Document - except as expressly provided under this License. Any attempt - otherwise to copy, modify, sublicense, or distribute it is void, - and will automatically terminate your rights under this License. - - However, if you cease all violation of this License, then your - license from a particular copyright holder is reinstated (a) - provisionally, unless and until the copyright holder explicitly and - finally terminates your license, and (b) permanently, if the - copyright holder fails to notify you of the violation by some - reasonable means prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is - reinstated permanently if the copyright holder notifies you of the - violation by some reasonable means, this is the first time you have - received notice of violation of this License (for any work) from - that copyright holder, and you cure the violation prior to 30 days - after your receipt of the notice. - - Termination of your rights under this section does not terminate - the licenses of parties who have received copies or rights from you - under this License. If your rights have been terminated and not - permanently reinstated, receipt of a copy of some or all of the - same material does not give you any rights to use it. - - 10. FUTURE REVISIONS OF THIS LICENSE - - The Free Software Foundation may publish new, revised versions of - the GNU Free Documentation License from time to time. Such new - versions will be similar in spirit to the present version, but may - differ in detail to address new problems or concerns. See - <http://www.gnu.org/copyleft/>. - - Each version of the License is given a distinguishing version - number. If the Document specifies that a particular numbered - version of this License "or any later version" applies to it, you - have the option of following the terms and conditions either of - that specified version or of any later version that has been - published (not as a draft) by the Free Software Foundation. If the - Document does not specify a version number of this License, you may - choose any version ever published (not as a draft) by the Free - Software Foundation. If the Document specifies that a proxy can - decide which future versions of this License can be used, that - proxy's public statement of acceptance of a version permanently - authorizes you to choose that version for the Document. - - 11. RELICENSING - - "Massive Multiauthor Collaboration Site" (or "MMC Site") means any - World Wide Web server that publishes copyrightable works and also - provides prominent facilities for anybody to edit those works. A - public wiki that anybody can edit is an example of such a server. - A "Massive Multiauthor Collaboration" (or "MMC") contained in the - site means any set of copyrightable works thus published on the MMC - site. - - "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 - license published by Creative Commons Corporation, a not-for-profit - corporation with a principal place of business in San Francisco, - California, as well as future copyleft versions of that license - published by that same organization. - - "Incorporate" means to publish or republish a Document, in whole or - in part, as part of another Document. - - An MMC is "eligible for relicensing" if it is licensed under this - License, and if all works that were first published under this - License somewhere other than this MMC, and subsequently - incorporated in whole or in part into the MMC, (1) had no cover - texts or invariant sections, and (2) were thus incorporated prior - to November 1, 2008. - - The operator of an MMC Site may republish an MMC contained in the - site under CC-BY-SA on the same site at any time before August 1, - 2009, provided the MMC is eligible for relicensing. - -ADDENDUM: How to use this License for your documents -==================================================== - -To use this License in a document you have written, include a copy of -the License in the document and put the following copyright and license -notices just after the title page: - - Copyright (C) YEAR YOUR NAME. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.3 - or any later version published by the Free Software Foundation; - with no Invariant Sections, no Front-Cover Texts, and no Back-Cover - Texts. A copy of the license is included in the section entitled ``GNU - Free Documentation License''. - - If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, -replace the "with...Texts." line with this: - - with the Invariant Sections being LIST THEIR TITLES, with - the Front-Cover Texts being LIST, and with the Back-Cover Texts - being LIST. - - If you have Invariant Sections without Cover Texts, or some other -combination of the three, merge those two alternatives to suit the -situation. - - If your document contains nontrivial examples of program code, we -recommend releasing these examples in parallel under your choice of free -software license, such as the GNU General Public License, to permit -their use in free software. - - -File: gcc.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top - -Contributors to GCC -******************* - -The GCC project would like to thank its many contributors. Without them -the project would not have been nearly as successful as it has been. -Any omissions in this list are accidental. Feel free to contact -<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or -some of your contributions are not listed. Please keep this list in -alphabetical order. - - * Analog Devices helped implement the support for complex data types - and iterators. - - * John David Anglin for threading-related fixes and improvements to - libstdc++-v3, and the HP-UX port. - - * James van Artsdalen wrote the code that makes efficient use of the - Intel 80387 register stack. - - * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta - Series port. - - * Alasdair Baird for various bug fixes. - - * Giovanni Bajo for analyzing lots of complicated C++ problem - reports. - - * Peter Barada for his work to improve code generation for new - ColdFire cores. - - * Gerald Baumgartner added the signature extension to the C++ front - end. - - * Godmar Back for his Java improvements and encouragement. - - * Scott Bambrough for help porting the Java compiler. - - * Wolfgang Bangerth for processing tons of bug reports. - - * Jon Beniston for his Microsoft Windows port of Java and port to - Lattice Mico32. - - * Daniel Berlin for better DWARF2 support, faster/better - optimizations, improved alias analysis, plus migrating GCC to - Bugzilla. - - * Geoff Berry for his Java object serialization work and various - patches. - - * David Binderman tests weekly snapshots of GCC trunk against Fedora - Rawhide for several architectures. - - * Uros Bizjak for the implementation of x87 math built-in functions - and for various middle end and i386 back end improvements and bug - fixes. - - * Eric Blake for helping to make GCJ and libgcj conform to the - specifications. - - * Janne Blomqvist for contributions to GNU Fortran. - - * Segher Boessenkool for various fixes. - - * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and - other Java work. - - * Neil Booth for work on cpplib, lang hooks, debug hooks and other - miscellaneous clean-ups. - - * Steven Bosscher for integrating the GNU Fortran front end into GCC - and for contributing to the tree-ssa branch. - - * Eric Botcazou for fixing middle- and backend bugs left and right. - - * Per Bothner for his direction via the steering committee and - various improvements to the infrastructure for supporting new - languages. Chill front end implementation. Initial - implementations of cpplib, fix-header, config.guess, libio, and - past C++ library (libg++) maintainer. Dreaming up, designing and - implementing much of GCJ. - - * Devon Bowen helped port GCC to the Tahoe. - - * Don Bowman for mips-vxworks contributions. - - * Dave Brolley for work on cpplib and Chill. - - * Paul Brook for work on the ARM architecture and maintaining GNU - Fortran. - - * Robert Brown implemented the support for Encore 32000 systems. - - * Christian Bruel for improvements to local store elimination. - - * Herman A.J. ten Brugge for various fixes. - - * Joerg Brunsmann for Java compiler hacking and help with the GCJ - FAQ. - - * Joe Buck for his direction via the steering committee. - - * Craig Burley for leadership of the G77 Fortran effort. - - * Stephan Buys for contributing Doxygen notes for libstdc++. - - * Paolo Carlini for libstdc++ work: lots of efficiency improvements - to the C++ strings, streambufs and formatted I/O, hard detective - work on the frustrating localization issues, and keeping up with - the problem reports. - - * John Carr for his alias work, SPARC hacking, infrastructure - improvements, previous contributions to the steering committee, - loop optimizations, etc. - - * Stephane Carrez for 68HC11 and 68HC12 ports. - - * Steve Chamberlain for support for the Renesas SH and H8 processors - and the PicoJava processor, and for GCJ config fixes. - - * Glenn Chambers for help with the GCJ FAQ. - - * John-Marc Chandonia for various libgcj patches. - - * Denis Chertykov for contributing and maintaining the AVR port, the - first GCC port for an 8-bit architecture. - - * Scott Christley for his Objective-C contributions. - - * Eric Christopher for his Java porting help and clean-ups. - - * Branko Cibej for more warning contributions. - - * The GNU Classpath project for all of their merged runtime code. - - * Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work, - '--help', and other random hacking. - - * Michael Cook for libstdc++ cleanup patches to reduce warnings. - - * R. Kelley Cook for making GCC buildable from a read-only directory - as well as other miscellaneous build process and documentation - clean-ups. - - * Ralf Corsepius for SH testing and minor bug fixing. - - * Stan Cox for care and feeding of the x86 port and lots of behind - the scenes hacking. - - * Alex Crain provided changes for the 3b1. - - * Ian Dall for major improvements to the NS32k port. - - * Paul Dale for his work to add uClinux platform support to the m68k - backend. - - * Dario Dariol contributed the four varieties of sample programs that - print a copy of their source. - - * Russell Davidson for fstream and stringstream fixes in libstdc++. - - * Bud Davis for work on the G77 and GNU Fortran compilers. - - * Mo DeJong for GCJ and libgcj bug fixes. - - * DJ Delorie for the DJGPP port, build and libiberty maintenance, - various bug fixes, and the M32C, MeP, MSP430, and RL78 ports. - - * Arnaud Desitter for helping to debug GNU Fortran. - - * Gabriel Dos Reis for contributions to G++, contributions and - maintenance of GCC diagnostics infrastructure, libstdc++-v3, - including 'valarray<>', 'complex<>', maintaining the numerics - library (including that pesky '<limits>' :-) and keeping up-to-date - anything to do with numbers. - - * Ulrich Drepper for his work on glibc, testing of GCC using glibc, - ISO C99 support, CFG dumping support, etc., plus support of the C++ - runtime libraries including for all kinds of C interface issues, - contributing and maintaining 'complex<>', sanity checking and - disbursement, configuration architecture, libio maintenance, and - early math work. - - * Franc,ois Dumont for his work on libstdc++-v3, especially - maintaining and improving 'debug-mode' and associative and - unordered containers. - - * Zdenek Dvorak for a new loop unroller and various fixes. - - * Michael Eager for his work on the Xilinx MicroBlaze port. - - * Richard Earnshaw for his ongoing work with the ARM. - - * David Edelsohn for his direction via the steering committee, - ongoing work with the RS6000/PowerPC port, help cleaning up Haifa - loop changes, doing the entire AIX port of libstdc++ with his bare - hands, and for ensuring GCC properly keeps working on AIX. - - * Kevin Ediger for the floating point formatting of num_put::do_put - in libstdc++. - - * Phil Edwards for libstdc++ work including configuration hackery, - documentation maintainer, chief breaker of the web pages, the - occasional iostream bug fix, and work on shared library symbol - versioning. - - * Paul Eggert for random hacking all over GCC. - - * Mark Elbrecht for various DJGPP improvements, and for libstdc++ - configuration support for locales and fstream-related fixes. - - * Vadim Egorov for libstdc++ fixes in strings, streambufs, and - iostreams. - - * Christian Ehrhardt for dealing with bug reports. - - * Ben Elliston for his work to move the Objective-C runtime into its - own subdirectory and for his work on autoconf. - - * Revital Eres for work on the PowerPC 750CL port. - - * Marc Espie for OpenBSD support. - - * Doug Evans for much of the global optimization framework, arc, - m32r, and SPARC work. - - * Christopher Faylor for his work on the Cygwin port and for caring - and feeding the gcc.gnu.org box and saving its users tons of spam. - - * Fred Fish for BeOS support and Ada fixes. - - * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. - - * Peter Gerwinski for various bug fixes and the Pascal front end. - - * Kaveh R. Ghazi for his direction via the steering committee, - amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC - on a plethora of platforms. Kaveh extends his gratitude to the - CAIP Center at Rutgers University for providing him with computing - resources to work on Free Software from the late 1980s to 2010. - - * John Gilmore for a donation to the FSF earmarked improving GNU - Java. - - * Judy Goldberg for c++ contributions. - - * Torbjorn Granlund for various fixes and the c-torture testsuite, - multiply- and divide-by-constant optimization, improved long long - support, improved leaf function register allocation, and his - direction via the steering committee. - - * Anthony Green for his '-Os' contributions, the moxie port, and Java - front end work. - - * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java - code. - - * Michael K. Gschwind contributed the port to the PDP-11. - - * Richard Biener for his ongoing middle-end contributions and bug - fixes and for release management. - - * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools, - the support for Dwarf symbolic debugging information, and much of - the support for System V Release 4. He has also worked heavily on - the Intel 386 and 860 support. - - * Sumanth Gundapaneni for contributing the CR16 port. - - * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload - GCSE. - - * Bruno Haible for improvements in the runtime overhead for EH, new - warnings and assorted bug fixes. - - * Andrew Haley for his amazing Java compiler and library efforts. - - * Chris Hanson assisted in making GCC work on HP-UX for the 9000 - series 300. - - * Michael Hayes for various thankless work he's done trying to get - the c30/c40 ports functional. Lots of loop and unroll improvements - and fixes. - - * Dara Hazeghi for wading through myriads of target-specific bug - reports. - - * Kate Hedstrom for staking the G77 folks with an initial testsuite. - - * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 - work, loop opts, and generally fixing lots of old problems we've - ignored for years, flow rewrite and lots of further stuff, - including reviewing tons of patches. - - * Aldy Hernandez for working on the PowerPC port, SIMD support, and - various fixes. - - * Nobuyuki Hikichi of Software Research Associates, Tokyo, - contributed the support for the Sony NEWS machine. - - * Kazu Hirata for caring and feeding the Renesas H8/300 port and - various fixes. - - * Katherine Holcomb for work on GNU Fortran. - - * Manfred Hollstein for his ongoing work to keep the m88k alive, lots - of testing and bug fixing, particularly of GCC configury code. - - * Steve Holmgren for MachTen patches. - - * Mat Hostetter for work on the TILE-Gx and TILEPro ports. - - * Jan Hubicka for his x86 port improvements. - - * Falk Hueffner for working on C and optimization bug reports. - - * Bernardo Innocenti for his m68k work, including merging of ColdFire - improvements and uClinux support. - - * Christian Iseli for various bug fixes. - - * Kamil Iskra for general m68k hacking. - - * Lee Iverson for random fixes and MIPS testing. - - * Andreas Jaeger for testing and benchmarking of GCC and various bug - fixes. - - * Jakub Jelinek for his SPARC work and sibling call optimizations as - well as lots of bug fixes and test cases, and for improving the - Java build system. - - * Janis Johnson for ia64 testing and fixes, her quality improvement - sidetracks, and web page maintenance. - - * Kean Johnston for SCO OpenServer support and various fixes. - - * Tim Josling for the sample language treelang based originally on - Richard Kenner's "toy" language. - - * Nicolai Josuttis for additional libstdc++ documentation. - - * Klaus Kaempf for his ongoing work to make alpha-vms a viable - target. - - * Steven G. Kargl for work on GNU Fortran. - - * David Kashtan of SRI adapted GCC to VMS. - - * Ryszard Kabatek for many, many libstdc++ bug fixes and - optimizations of strings, especially member functions, and for - auto_ptr fixes. - - * Geoffrey Keating for his ongoing work to make the PPC work for - GNU/Linux and his automatic regression tester. - - * Brendan Kehoe for his ongoing work with G++ and for a lot of early - work in just about every part of libstdc++. - - * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the - MIL-STD-1750A. - - * Richard Kenner of the New York University Ultracomputer Research - Laboratory wrote the machine descriptions for the AMD 29000, the - DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the - support for instruction attributes. He also made changes to better - support RISC processors including changes to common subexpression - elimination, strength reduction, function calling sequence - handling, and condition code support, in addition to generalizing - the code for frame pointer elimination and delay slot scheduling. - Richard Kenner was also the head maintainer of GCC for several - years. - - * Mumit Khan for various contributions to the Cygwin and Mingw32 - ports and maintaining binary releases for Microsoft Windows hosts, - and for massive libstdc++ porting work to Cygwin/Mingw32. - - * Robin Kirkham for cpu32 support. - - * Mark Klein for PA improvements. - - * Thomas Koenig for various bug fixes. - - * Bruce Korb for the new and improved fixincludes code. - - * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 - effort. - - * Charles LaBrec contributed the support for the Integrated Solutions - 68020 system. - - * Asher Langton and Mike Kumbera for contributing Cray pointer - support to GNU Fortran, and for other GNU Fortran improvements. - - * Jeff Law for his direction via the steering committee, coordinating - the entire egcs project and GCC 2.95, rolling out snapshots and - releases, handling merges from GCC2, reviewing tons of patches that - might have fallen through the cracks else, and random but extensive - hacking. - - * Walter Lee for work on the TILE-Gx and TILEPro ports. - - * Marc Lehmann for his direction via the steering committee and - helping with analysis and improvements of x86 performance. - - * Victor Leikehman for work on GNU Fortran. - - * Ted Lemon wrote parts of the RTL reader and printer. - - * Kriang Lerdsuwanakij for C++ improvements including template as - template parameter support, and many C++ fixes. - - * Warren Levy for tremendous work on libgcj (Java Runtime Library) - and random work on the Java front end. - - * Alain Lichnewsky ported GCC to the MIPS CPU. - - * Oskar Liljeblad for hacking on AWT and his many Java bug reports - and patches. - - * Robert Lipe for OpenServer support, new testsuites, testing, etc. - - * Chen Liqin for various S+core related fixes/improvement, and for - maintaining the S+core port. - - * Weiwen Liu for testing and various bug fixes. - - * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other - diagnostics fixes and improvements. - - * Dave Love for his ongoing work with the Fortran front end and - runtime libraries. - - * Martin von Lo"wis for internal consistency checking infrastructure, - various C++ improvements including namespace support, and tons of - assistance with libstdc++/compiler merges. - - * H.J. Lu for his previous contributions to the steering committee, - many x86 bug reports, prototype patches, and keeping the GNU/Linux - ports working. - - * Greg McGary for random fixes and (someday) bounded pointers. - - * Andrew MacLeod for his ongoing work in building a real EH system, - various code generation improvements, work on the global optimizer, - etc. - - * Vladimir Makarov for hacking some ugly i960 problems, PowerPC - hacking improvements to compile-time performance, overall knowledge - and direction in the area of instruction scheduling, and design and - implementation of the automaton based instruction scheduler. - - * Bob Manson for his behind the scenes work on dejagnu. - - * Philip Martin for lots of libstdc++ string and vector iterator - fixes and improvements, and string clean up and testsuites. - - * All of the Mauve project contributors, for Java test code. - - * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. - - * Adam Megacz for his work on the Microsoft Windows port of GCJ. - - * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, - powerpc, haifa, ECOFF debug support, and other assorted hacking. - - * Jason Merrill for his direction via the steering committee and - leading the G++ effort. - - * Martin Michlmayr for testing GCC on several architectures using the - entire Debian archive. - - * David Miller for his direction via the steering committee, lots of - SPARC work, improvements in jump.c and interfacing with the Linux - kernel developers. - - * Gary Miller ported GCC to Charles River Data Systems machines. - - * Alfred Minarik for libstdc++ string and ios bug fixes, and turning - the entire libstdc++ testsuite namespace-compatible. - - * Mark Mitchell for his direction via the steering committee, - mountains of C++ work, load/store hoisting out of loops, alias - analysis improvements, ISO C 'restrict' support, and serving as - release manager from 2000 to 2011. - - * Alan Modra for various GNU/Linux bits and testing. - - * Toon Moene for his direction via the steering committee, Fortran - maintenance, and his ongoing work to make us make Fortran run fast. - - * Jason Molenda for major help in the care and feeding of all the - services on the gcc.gnu.org (formerly egcs.cygnus.com) - machine--mail, web services, ftp services, etc etc. Doing all this - work on scrap paper and the backs of envelopes would have been... - difficult. - - * Catherine Moore for fixing various ugly problems we have sent her - way, including the haifa bug which was killing the Alpha & PowerPC - Linux kernels. - - * Mike Moreton for his various Java patches. - - * David Mosberger-Tang for various Alpha improvements, and for the - initial IA-64 port. - - * Stephen Moshier contributed the floating point emulator that - assists in cross-compilation and permits support for floating point - numbers wider than 64 bits and for ISO C99 support. - - * Bill Moyer for his behind the scenes work on various issues. - - * Philippe De Muyter for his work on the m68k port. - - * Joseph S. Myers for his work on the PDP-11 port, format checking - and ISO C99 support, and continuous emphasis on (and contributions - to) documentation. - - * Nathan Myers for his work on libstdc++-v3: architecture and - authorship through the first three snapshots, including - implementation of locale infrastructure, string, shadow C headers, - and the initial project documentation (DESIGN, CHECKLIST, and so - forth). Later, more work on MT-safe string and shadow headers. - - * Felix Natter for documentation on porting libstdc++. - - * Nathanael Nerode for cleaning up the configuration/build process. - - * NeXT, Inc. donated the front end that supports the Objective-C - language. - - * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the - search engine setup, various documentation fixes and other small - fixes. - - * Geoff Noer for his work on getting cygwin native builds working. - - * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance - tracking web pages, GIMPLE tuples, and assorted fixes. - - * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, - FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related - infrastructure improvements. - - * Alexandre Oliva for various build infrastructure improvements, - scripts and amazing testing work, including keeping libtool issues - sane and happy. - - * Stefan Olsson for work on mt_alloc. - - * Melissa O'Neill for various NeXT fixes. - - * Rainer Orth for random MIPS work, including improvements to GCC's - o32 ABI support, improvements to dejagnu's MIPS support, Java - configuration clean-ups and porting work, and maintaining the IRIX, - Solaris 2, and Tru64 UNIX ports. - - * Hartmut Penner for work on the s390 port. - - * Paul Petersen wrote the machine description for the Alliant FX/8. - - * Alexandre Petit-Bianco for implementing much of the Java compiler - and continued Java maintainership. - - * Matthias Pfaller for major improvements to the NS32k port. - - * Gerald Pfeifer for his direction via the steering committee, - pointing out lots of problems we need to solve, maintenance of the - web pages, and taking care of documentation maintenance in general. - - * Andrew Pinski for processing bug reports by the dozen. - - * Ovidiu Predescu for his work on the Objective-C front end and - runtime libraries. - - * Jerry Quinn for major performance improvements in C++ formatted - I/O. - - * Ken Raeburn for various improvements to checker, MIPS ports and - various cleanups in the compiler. - - * Rolf W. Rasmussen for hacking on AWT. - - * David Reese of Sun Microsystems contributed to the Solaris on - PowerPC port. - - * Volker Reichelt for keeping up with the problem reports. - - * Joern Rennecke for maintaining the sh port, loop, regmove & reload - hacking and developing and maintaining the Epiphany port. - - * Loren J. Rittle for improvements to libstdc++-v3 including the - FreeBSD port, threading fixes, thread-related configury changes, - critical threading documentation, and solutions to really tricky - I/O problems, as well as keeping GCC properly working on FreeBSD - and continuous testing. - - * Craig Rodrigues for processing tons of bug reports. - - * Ola Ro"nnerup for work on mt_alloc. - - * Gavin Romig-Koch for lots of behind the scenes MIPS work. - - * David Ronis inspired and encouraged Craig to rewrite the G77 - documentation in texinfo format by contributing a first pass at a - translation of the old 'g77-0.5.16/f/DOC' file. - - * Ken Rose for fixes to GCC's delay slot filling code. - - * Paul Rubin wrote most of the preprocessor. - - * Pe'tur Runo'lfsson for major performance improvements in C++ - formatted I/O and large file support in C++ filebuf. - - * Chip Salzenberg for libstdc++ patches and improvements to locales, - traits, Makefiles, libio, libtool hackery, and "long long" support. - - * Juha Sarlin for improvements to the H8 code generator. - - * Greg Satz assisted in making GCC work on HP-UX for the 9000 series - 300. - - * Roger Sayle for improvements to constant folding and GCC's RTL - optimizers as well as for fixing numerous bugs. - - * Bradley Schatz for his work on the GCJ FAQ. - - * Peter Schauer wrote the code to allow debugging to work on the - Alpha. - - * William Schelter did most of the work on the Intel 80386 support. - - * Tobias Schlu"ter for work on GNU Fortran. - - * Bernd Schmidt for various code generation improvements and major - work in the reload pass, serving as release manager for GCC 2.95.3, - and work on the Blackfin and C6X ports. - - * Peter Schmid for constant testing of libstdc++--especially - application testing, going above and beyond what was requested for - the release criteria--and libstdc++ header file tweaks. - - * Jason Schroeder for jcf-dump patches. - - * Andreas Schwab for his work on the m68k port. - - * Lars Segerlund for work on GNU Fortran. - - * Dodji Seketeli for numerous C++ bug fixes and debug info - improvements. - - * Tim Shen for major work on '<regex>'. - - * Joel Sherrill for his direction via the steering committee, RTEMS - contributions and RTEMS testing. - - * Nathan Sidwell for many C++ fixes/improvements. - - * Jeffrey Siegal for helping RMS with the original design of GCC, - some code which handles the parse tree and RTL data structures, - constant folding and help with the original VAX & m68k ports. - - * Kenny Simpson for prompting libstdc++ fixes due to defect reports - from the LWG (thereby keeping GCC in line with updates from the - ISO). - - * Franz Sirl for his ongoing work with making the PPC port stable for - GNU/Linux. - - * Andrey Slepuhin for assorted AIX hacking. - - * Trevor Smigiel for contributing the SPU port. - - * Christopher Smith did the port for Convex machines. - - * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. - - * Randy Smith finished the Sun FPA support. - - * Ed Smith-Rowland for his continuous work on libstdc++-v3, special - functions, '<random>', and various improvements to C++11 features. - - * Scott Snyder for queue, iterator, istream, and string fixes and - libstdc++ testsuite entries. Also for providing the patch to G77 - to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and - 'LOGICAL*1'. - - * Zdenek Sojka for running automated regression testing of GCC and - reporting numerous bugs. - - * Jayant Sonar for contributing the CR16 port. - - * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. - - * Richard Stallman, for writing the original GCC and launching the - GNU project. - - * Jan Stein of the Chalmers Computer Society provided support for - Genix, as well as part of the 32000 machine description. - - * Nigel Stephens for various mips16 related fixes/improvements. - - * Jonathan Stone wrote the machine description for the Pyramid - computer. - - * Graham Stott for various infrastructure improvements. - - * John Stracke for his Java HTTP protocol fixes. - - * Mike Stump for his Elxsi port, G++ contributions over the years and - more recently his vxworks contributions - - * Jeff Sturm for Java porting help, bug fixes, and encouragement. - - * Shigeya Suzuki for this fixes for the bsdi platforms. - - * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64 - support, general configury hacking, fixincludes, etc. - - * Holger Teutsch provided the support for the Clipper CPU. - - * Gary Thomas for his ongoing work to make the PPC work for - GNU/Linux. - - * Philipp Thomas for random bug fixes throughout the compiler - - * Jason Thorpe for thread support in libstdc++ on NetBSD. - - * Kresten Krab Thorup wrote the run time support for the Objective-C - language and the fantastic Java bytecode interpreter. - - * Michael Tiemann for random bug fixes, the first instruction - scheduler, initial C++ support, function integration, NS32k, SPARC - and M88k machine description work, delay slot scheduling. - - * Andreas Tobler for his work porting libgcj to Darwin. - - * Teemu Torma for thread safe exception handling support. - - * Leonard Tower wrote parts of the parser, RTL generator, and RTL - definitions, and of the VAX machine description. - - * Daniel Towner and Hariharan Sandanagobalane contributed and - maintain the picoChip port. - - * Tom Tromey for internationalization support and for his many Java - contributions and libgcj maintainership. - - * Lassi Tuura for improvements to config.guess to determine HP - processor types. - - * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. - - * Andy Vaught for the design and initial implementation of the GNU - Fortran front end. - - * Brent Verner for work with the libstdc++ cshadow files and their - associated configure steps. - - * Todd Vierling for contributions for NetBSD ports. - - * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML - guidance. - - * Dean Wakerley for converting the install documentation from HTML to - texinfo in time for GCC 3.0. - - * Krister Walfridsson for random bug fixes. - - * Feng Wang for contributions to GNU Fortran. - - * Stephen M. Webb for time and effort on making libstdc++ shadow - files work with the tricky Solaris 8+ headers, and for pushing the - build-time header tree. Also, for starting and driving the - '<regex>' effort. - - * John Wehle for various improvements for the x86 code generator, - related infrastructure improvements to help x86 code generation, - value range propagation and other work, WE32k port. - - * Ulrich Weigand for work on the s390 port. - - * Zack Weinberg for major work on cpplib and various other bug fixes. - - * Matt Welsh for help with Linux Threads support in GCJ. - - * Urban Widmark for help fixing java.io. - - * Mark Wielaard for new Java library code and his work integrating - with Classpath. - - * Dale Wiles helped port GCC to the Tahoe. - - * Bob Wilson from Tensilica, Inc. for the Xtensa port. - - * Jim Wilson for his direction via the steering committee, tackling - hard problems in various places that nobody else wanted to work on, - strength reduction and other loop optimizations. - - * Paul Woegerer and Tal Agmon for the CRX port. - - * Carlo Wood for various fixes. - - * Tom Wood for work on the m88k port. - - * Chung-Ju Wu for his work on the Andes NDS32 port. - - * Canqun Yang for work on GNU Fortran. - - * Masanobu Yuhara of Fujitsu Laboratories implemented the machine - description for the Tron architecture (specifically, the Gmicro). - - * Kevin Zachmann helped port GCC to the Tahoe. - - * Ayal Zaks for Swing Modulo Scheduling (SMS). - - * Xiaoqiang Zhang for work on GNU Fortran. - - * Gilles Zunino for help porting Java to Irix. - - The following people are recognized for their contributions to GNAT, -the Ada front end of GCC: - * Bernard Banner - - * Romain Berrendonner - - * Geert Bosch - - * Emmanuel Briot - - * Joel Brobecker - - * Ben Brosgol - - * Vincent Celier - - * Arnaud Charlet - - * Chien Chieng - - * Cyrille Comar - - * Cyrille Crozes - - * Robert Dewar - - * Gary Dismukes - - * Robert Duff - - * Ed Falis - - * Ramon Fernandez - - * Sam Figueroa - - * Vasiliy Fofanov - - * Michael Friess - - * Franco Gasperoni - - * Ted Giering - - * Matthew Gingell - - * Laurent Guerby - - * Jerome Guitton - - * Olivier Hainque - - * Jerome Hugues - - * Hristian Kirtchev - - * Jerome Lambourg - - * Bruno Leclerc - - * Albert Lee - - * Sean McNeil - - * Javier Miranda - - * Laurent Nana - - * Pascal Obry - - * Dong-Ik Oh - - * Laurent Pautet - - * Brett Porter - - * Thomas Quinot - - * Nicolas Roche - - * Pat Rogers - - * Jose Ruiz - - * Douglas Rupp - - * Sergey Rybin - - * Gail Schenker - - * Ed Schonberg - - * Nicolas Setton - - * Samuel Tardieu - - The following people are recognized for their contributions of new -features, bug reports, testing and integration of classpath/libgcj for -GCC version 4.1: - * Lillian Angel for 'JTree' implementation and lots Free Swing - additions and bug fixes. - - * Wolfgang Baer for 'GapContent' bug fixes. - - * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse - event fixes, lots of Free Swing work including 'JTable' editing. - - * Stuart Ballard for RMI constant fixes. - - * Goffredo Baroncelli for 'HTTPURLConnection' fixes. - - * Gary Benson for 'MessageFormat' fixes. - - * Daniel Bonniot for 'Serialization' fixes. - - * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX' - and 'DOM xml:id' support. - - * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes. - - * Archie Cobbs for build fixes, VM interface updates, - 'URLClassLoader' updates. - - * Kelley Cook for build fixes. - - * Martin Cordova for Suggestions for better 'SocketTimeoutException'. - - * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and - improvements. - - * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo - 2D support. Lots of imageio framework additions, lots of AWT and - Free Swing bug fixes. - - * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization - fixes, better 'Proxy' support, bug fixes and IKVM integration. - - * Santiago Gala for 'AccessControlContext' fixes. - - * Nicolas Geoffray for 'VMClassLoader' and 'AccessController' - improvements. - - * David Gilbert for 'basic' and 'metal' icon and plaf support and - lots of documenting, Lots of Free Swing and metal theme additions. - 'MetalIconFactory' implementation. - - * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers. - - * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj - build speedups. - - * Kim Ho for 'JFileChooser' implementation. - - * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates, - 'Serialization' fixes, 'Properties' XML support and generic branch - work, VMIntegration guide update. - - * Bastiaan Huisman for 'TimeZone' bug fixing. - - * Andreas Jaeger for mprec updates. - - * Paul Jenner for better '-Werror' support. - - * Ito Kazumitsu for 'NetworkInterface' implementation and updates. - - * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus - bug fixes all over. Lots of Free Swing work including styled text. - - * Simon Kitching for 'String' cleanups and optimization suggestions. - - * Michael Koch for configuration fixes, 'Locale' updates, bug and - build fixes. - - * Guilhem Lavaux for configuration, thread and channel fixes and - Kaffe integration. JCL native 'Pointer' updates. Logger bug - fixes. - - * David Lichteblau for JCL support library global/local reference - cleanups. - - * Aaron Luchko for JDWP updates and documentation fixes. - - * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex - features. - - * Sven de Marothy for BMP imageio support, CSS and 'TextLayout' - fixes. 'GtkImage' rewrite, 2D, awt, free swing and date/time fixes - and implementing the Qt4 peers. - - * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock, - 'SystemLogger' and 'FileHandler' rotate implementations, NIO - 'FileChannel.map' support, security and policy updates. - - * Bryce McKinlay for RMI work. - - * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus - testing and documenting. - - * Kalle Olavi Niemitalo for build fixes. - - * Rainer Orth for build fixes. - - * Andrew Overholt for 'File' locking fixes. - - * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates. - - * Olga Rodimina for 'MenuSelectionManager' implementation. - - * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes. - - * Julian Scheid for documentation updates and gjdoc support. - - * Christian Schlichtherle for zip fixes and cleanups. - - * Robert Schuster for documentation updates and beans fixes, - 'TreeNode' enumerations and 'ActionCommand' and various fixes, XML - and URL, AWT and Free Swing bug fixes. - - * Keith Seitz for lots of JDWP work. - - * Christian Thalinger for 64-bit cleanups, Configuration and VM - interface fixes and 'CACAO' integration, 'fdlibm' updates. - - * Gael Thomas for 'VMClassLoader' boot packages support suggestions. - - * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4' - support for Darwin/OS X, 'Graphics2D' support, 'gtk+' updates. - - * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe - integration. 'Qt4' build infrastructure, 'SHA1PRNG' and - 'GdkPixbugDecoder' updates. - - * Tom Tromey for Eclipse integration, generics work, lots of bug - fixes and gcj integration including coordinating The Big Merge. - - * Mark Wielaard for bug fixes, packaging and release management, - 'Clipboard' implementation, system call interrupts and network - timeouts and 'GdkPixpufDecoder' fixes. - - In addition to the above, all of which also contributed time and energy -in testing GCC, we would like to thank the following for their -contributions to testing: - - * Michael Abd-El-Malek - - * Thomas Arend - - * Bonzo Armstrong - - * Steven Ashe - - * Chris Baldwin - - * David Billinghurst - - * Jim Blandy - - * Stephane Bortzmeyer - - * Horst von Brand - - * Frank Braun - - * Rodney Brown - - * Sidney Cadot - - * Bradford Castalia - - * Robert Clark - - * Jonathan Corbet - - * Ralph Doncaster - - * Richard Emberson - - * Levente Farkas - - * Graham Fawcett - - * Mark Fernyhough - - * Robert A. French - - * Jo"rgen Freyh - - * Mark K. Gardner - - * Charles-Antoine Gauthier - - * Yung Shing Gene - - * David Gilbert - - * Simon Gornall - - * Fred Gray - - * John Griffin - - * Patrik Hagglund - - * Phil Hargett - - * Amancio Hasty - - * Takafumi Hayashi - - * Bryan W. Headley - - * Kevin B. Hendricks - - * Joep Jansen - - * Christian Joensson - - * Michel Kern - - * David Kidd - - * Tobias Kuipers - - * Anand Krishnaswamy - - * A. O. V. Le Blanc - - * llewelly - - * Damon Love - - * Brad Lucier - - * Matthias Klose - - * Martin Knoblauch - - * Rick Lutowski - - * Jesse Macnish - - * Stefan Morrell - - * Anon A. Mous - - * Matthias Mueller - - * Pekka Nikander - - * Rick Niles - - * Jon Olson - - * Magnus Persson - - * Chris Pollard - - * Richard Polton - - * Derk Reefman - - * David Rees - - * Paul Reilly - - * Tom Reilly - - * Torsten Rueger - - * Danny Sadinoff - - * Marc Schifer - - * Erik Schnetter - - * Wayne K. Schroll - - * David Schuler - - * Vin Shelton - - * Tim Souder - - * Adam Sulmicki - - * Bill Thorson - - * George Talbot - - * Pedro A. M. Vazquez - - * Gregory Warnes - - * Ian Watson - - * David E. Young - - * And many others - - And finally we'd like to thank everyone who uses the compiler, provides -feedback and generally reminds us why we're doing this work in the first -place. - - -File: gcc.info, Node: Option Index, Next: Keyword Index, Prev: Contributors, Up: Top - -Option Index -************ - -GCC's command line options are indexed here without any initial '-' or -'--'. Where an option has both positive and negative forms (such as -'-fOPTION' and '-fno-OPTION'), relevant entries in the manual are -indexed under the most appropriate form; it may sometimes be useful to -look up both forms. - - -* Menu: - -* ###: Overall Options. (line 209) -* (fvtv-debug): C++ Dialect Options. - (line 362) -* -fno-keep-inline-dllexport: Optimize Options. (line 309) -* -mcpu: RX Options. (line 30) -* -mcpu=: MSP430 Options. (line 35) -* -mpointer-size=SIZE: VMS Options. (line 20) -* 8bit-idiv: i386 and x86-64 Options. - (line 917) -* A: Preprocessor Options. - (line 596) -* allowable_client: Darwin Options. (line 196) -* all_load: Darwin Options. (line 110) -* ansi: Standards. (line 16) -* ansi <1>: C Dialect Options. (line 11) -* ansi <2>: Preprocessor Options. - (line 340) -* ansi <3>: Other Builtins. (line 21) -* ansi <4>: Non-bugs. (line 107) -* arch_errors_fatal: Darwin Options. (line 114) -* aux-info: C Dialect Options. (line 173) -* avx256-split-unaligned-load: i386 and x86-64 Options. - (line 925) -* avx256-split-unaligned-store: i386 and x86-64 Options. - (line 925) -* B: Directory Options. (line 44) -* Bdynamic: VxWorks Options. (line 22) -* bind_at_load: Darwin Options. (line 118) -* Bstatic: VxWorks Options. (line 22) -* bundle: Darwin Options. (line 123) -* bundle_loader: Darwin Options. (line 127) -* c: Overall Options. (line 164) -* C: Preprocessor Options. - (line 653) -* c <1>: Link Options. (line 20) -* client_name: Darwin Options. (line 196) -* compatibility_version: Darwin Options. (line 196) -* coverage: Debugging Options. (line 491) -* current_version: Darwin Options. (line 196) -* d: Debugging Options. (line 622) -* D: Preprocessor Options. - (line 46) -* da: Debugging Options. (line 825) -* dA: Debugging Options. (line 828) -* dD: Debugging Options. (line 832) -* dD <1>: Preprocessor Options. - (line 627) -* dead_strip: Darwin Options. (line 196) -* dependency-file: Darwin Options. (line 196) -* dH: Debugging Options. (line 836) -* dI: Preprocessor Options. - (line 636) -* dM: Preprocessor Options. - (line 612) -* dN: Preprocessor Options. - (line 633) -* dp: Debugging Options. (line 839) -* dP: Debugging Options. (line 844) -* dU: Preprocessor Options. - (line 640) -* dumpmachine: Debugging Options. (line 1410) -* dumpspecs: Debugging Options. (line 1418) -* dumpversion: Debugging Options. (line 1414) -* dx: Debugging Options. (line 848) -* dylib_file: Darwin Options. (line 196) -* dylinker_install_name: Darwin Options. (line 196) -* dynamic: Darwin Options. (line 196) -* dynamiclib: Darwin Options. (line 131) -* E: Overall Options. (line 185) -* E <1>: Link Options. (line 20) -* EB: ARC Options. (line 345) -* EB <1>: MIPS Options. (line 7) -* EL: ARC Options. (line 354) -* EL <1>: MIPS Options. (line 10) -* exported_symbols_list: Darwin Options. (line 196) -* F: Darwin Options. (line 31) -* fabi-version: C++ Dialect Options. - (line 19) -* fada-spec-parent: Overall Options. (line 367) -* faggressive-loop-optimizations: Optimize Options. (line 478) -* falign-functions: Optimize Options. (line 1472) -* falign-jumps: Optimize Options. (line 1521) -* falign-labels: Optimize Options. (line 1490) -* falign-loops: Optimize Options. (line 1508) -* fallow-parameterless-variadic-functions: C Dialect Options. - (line 189) -* fassociative-math: Optimize Options. (line 2000) -* fasynchronous-unwind-tables: Code Gen Options. (line 145) -* fauto-inc-dec: Optimize Options. (line 502) -* fbounds-check: Code Gen Options. (line 15) -* fbranch-probabilities: Optimize Options. (line 2128) -* fbranch-target-load-optimize: Optimize Options. (line 2243) -* fbranch-target-load-optimize2: Optimize Options. (line 2249) -* fbtr-bb-exclusive: Optimize Options. (line 2253) -* fcall-saved: Code Gen Options. (line 355) -* fcall-used: Code Gen Options. (line 341) -* fcaller-saves: Optimize Options. (line 810) -* fcheck-data-deps: Optimize Options. (line 1089) -* fcheck-new: C++ Dialect Options. - (line 54) -* fcilkplus: C Dialect Options. (line 276) -* fcombine-stack-adjustments: Optimize Options. (line 822) -* fcommon: Variable Attributes. - (line 104) -* fcompare-debug: Debugging Options. (line 282) -* fcompare-debug-second: Debugging Options. (line 308) -* fcompare-elim: Optimize Options. (line 1836) -* fcond-mismatch: C Dialect Options. (line 339) -* fconserve-stack: Optimize Options. (line 828) -* fconstant-string-class: Objective-C and Objective-C++ Dialect Options. - (line 30) -* fconstexpr-depth: C++ Dialect Options. - (line 64) -* fcprop-registers: Optimize Options. (line 1854) -* fcrossjumping: Optimize Options. (line 495) -* fcse-follow-jumps: Optimize Options. (line 414) -* fcse-skip-blocks: Optimize Options. (line 423) -* fcx-fortran-rules: Optimize Options. (line 2115) -* fcx-limited-range: Optimize Options. (line 2103) -* fdata-sections: Optimize Options. (line 2224) -* fdbg-cnt: Debugging Options. (line 543) -* fdbg-cnt-list: Debugging Options. (line 540) -* fdce: Optimize Options. (line 508) -* fdebug-cpp: Preprocessor Options. - (line 527) -* fdebug-prefix-map: Debugging Options. (line 402) -* fdebug-types-section: Debugging Options. (line 79) -* fdeclone-ctor-dtor: Optimize Options. (line 531) -* fdeduce-init-list: C++ Dialect Options. - (line 70) -* fdelayed-branch: Optimize Options. (line 657) -* fdelete-dead-exceptions: Code Gen Options. (line 130) -* fdelete-null-pointer-checks: Optimize Options. (line 542) -* fdevirtualize: Optimize Options. (line 560) -* fdevirtualize-speculatively: Optimize Options. (line 567) -* fdiagnostics-color: Language Independent Options. - (line 35) -* fdiagnostics-show-caret: Language Independent Options. - (line 92) -* fdiagnostics-show-location: Language Independent Options. - (line 20) -* fdiagnostics-show-option: Language Independent Options. - (line 86) -* fdirectives-only: Preprocessor Options. - (line 475) -* fdisable-: Debugging Options. (line 553) -* fdollars-in-identifiers: Preprocessor Options. - (line 496) -* fdollars-in-identifiers <1>: Interoperation. (line 141) -* fdse: Optimize Options. (line 512) -* fdump-ada-spec: Overall Options. (line 362) -* fdump-class-hierarchy: Debugging Options. (line 879) -* fdump-final-insns: Debugging Options. (line 276) -* fdump-go-spec: Overall Options. (line 371) -* fdump-ipa: Debugging Options. (line 887) -* fdump-noaddr: Debugging Options. (line 852) -* fdump-passes: Debugging Options. (line 904) -* fdump-rtl-alignments: Debugging Options. (line 643) -* fdump-rtl-all: Debugging Options. (line 825) -* fdump-rtl-asmcons: Debugging Options. (line 646) -* fdump-rtl-auto_inc_dec: Debugging Options. (line 650) -* fdump-rtl-barriers: Debugging Options. (line 654) -* fdump-rtl-bbpart: Debugging Options. (line 657) -* fdump-rtl-bbro: Debugging Options. (line 660) -* fdump-rtl-btl2: Debugging Options. (line 664) -* fdump-rtl-btl2 <1>: Debugging Options. (line 664) -* fdump-rtl-bypass: Debugging Options. (line 668) -* fdump-rtl-ce1: Debugging Options. (line 679) -* fdump-rtl-ce2: Debugging Options. (line 679) -* fdump-rtl-ce3: Debugging Options. (line 679) -* fdump-rtl-combine: Debugging Options. (line 671) -* fdump-rtl-compgotos: Debugging Options. (line 674) -* fdump-rtl-cprop_hardreg: Debugging Options. (line 683) -* fdump-rtl-csa: Debugging Options. (line 686) -* fdump-rtl-cse1: Debugging Options. (line 690) -* fdump-rtl-cse2: Debugging Options. (line 690) -* fdump-rtl-dbr: Debugging Options. (line 697) -* fdump-rtl-dce: Debugging Options. (line 694) -* fdump-rtl-dce1: Debugging Options. (line 701) -* fdump-rtl-dce2: Debugging Options. (line 701) -* fdump-rtl-dfinish: Debugging Options. (line 821) -* fdump-rtl-dfinit: Debugging Options. (line 821) -* fdump-rtl-eh: Debugging Options. (line 705) -* fdump-rtl-eh_ranges: Debugging Options. (line 708) -* fdump-rtl-expand: Debugging Options. (line 711) -* fdump-rtl-fwprop1: Debugging Options. (line 715) -* fdump-rtl-fwprop2: Debugging Options. (line 715) -* fdump-rtl-gcse1: Debugging Options. (line 720) -* fdump-rtl-gcse2: Debugging Options. (line 720) -* fdump-rtl-init-regs: Debugging Options. (line 724) -* fdump-rtl-initvals: Debugging Options. (line 727) -* fdump-rtl-into_cfglayout: Debugging Options. (line 730) -* fdump-rtl-ira: Debugging Options. (line 733) -* fdump-rtl-jump: Debugging Options. (line 736) -* fdump-rtl-loop2: Debugging Options. (line 739) -* fdump-rtl-mach: Debugging Options. (line 743) -* fdump-rtl-mode_sw: Debugging Options. (line 747) -* fdump-rtl-outof_cfglayout: Debugging Options. (line 753) -* fdump-rtl-PASS: Debugging Options. (line 622) -* fdump-rtl-peephole2: Debugging Options. (line 756) -* fdump-rtl-postreload: Debugging Options. (line 759) -* fdump-rtl-pro_and_epilogue: Debugging Options. (line 762) -* fdump-rtl-ree: Debugging Options. (line 770) -* fdump-rtl-regclass: Debugging Options. (line 821) -* fdump-rtl-rnreg: Debugging Options. (line 750) -* fdump-rtl-sched1: Debugging Options. (line 766) -* fdump-rtl-sched2: Debugging Options. (line 766) -* fdump-rtl-seqabstr: Debugging Options. (line 773) -* fdump-rtl-shorten: Debugging Options. (line 776) -* fdump-rtl-sibling: Debugging Options. (line 779) -* fdump-rtl-sms: Debugging Options. (line 791) -* fdump-rtl-split1: Debugging Options. (line 786) -* fdump-rtl-split2: Debugging Options. (line 786) -* fdump-rtl-split3: Debugging Options. (line 786) -* fdump-rtl-split4: Debugging Options. (line 786) -* fdump-rtl-split5: Debugging Options. (line 786) -* fdump-rtl-stack: Debugging Options. (line 795) -* fdump-rtl-subreg1: Debugging Options. (line 801) -* fdump-rtl-subreg2: Debugging Options. (line 801) -* fdump-rtl-subregs_of_mode_finish: Debugging Options. (line 821) -* fdump-rtl-subregs_of_mode_init: Debugging Options. (line 821) -* fdump-rtl-unshare: Debugging Options. (line 805) -* fdump-rtl-vartrack: Debugging Options. (line 808) -* fdump-rtl-vregs: Debugging Options. (line 811) -* fdump-rtl-web: Debugging Options. (line 814) -* fdump-statistics: Debugging Options. (line 908) -* fdump-translation-unit: Debugging Options. (line 870) -* fdump-tree: Debugging Options. (line 920) -* fdump-tree-alias: Debugging Options. (line 1042) -* fdump-tree-all: Debugging Options. (line 1126) -* fdump-tree-ccp: Debugging Options. (line 1046) -* fdump-tree-cfg: Debugging Options. (line 1030) -* fdump-tree-ch: Debugging Options. (line 1034) -* fdump-tree-copyprop: Debugging Options. (line 1062) -* fdump-tree-copyrename: Debugging Options. (line 1102) -* fdump-tree-dce: Debugging Options. (line 1070) -* fdump-tree-dom: Debugging Options. (line 1083) -* fdump-tree-dse: Debugging Options. (line 1088) -* fdump-tree-forwprop: Debugging Options. (line 1097) -* fdump-tree-fre: Debugging Options. (line 1058) -* fdump-tree-gimple: Debugging Options. (line 1025) -* fdump-tree-nrv: Debugging Options. (line 1107) -* fdump-tree-optimized: Debugging Options. (line 1022) -* fdump-tree-original: Debugging Options. (line 1019) -* fdump-tree-phiopt: Debugging Options. (line 1092) -* fdump-tree-pre: Debugging Options. (line 1054) -* fdump-tree-sink: Debugging Options. (line 1079) -* fdump-tree-slp: Debugging Options. (line 1117) -* fdump-tree-sra: Debugging Options. (line 1074) -* fdump-tree-ssa: Debugging Options. (line 1038) -* fdump-tree-storeccp: Debugging Options. (line 1050) -* fdump-tree-store_copyprop: Debugging Options. (line 1066) -* fdump-tree-vect: Debugging Options. (line 1112) -* fdump-tree-vrp: Debugging Options. (line 1122) -* fdump-unnumbered: Debugging Options. (line 858) -* fdump-unnumbered-links: Debugging Options. (line 864) -* fdwarf2-cfi-asm: Debugging Options. (line 406) -* fearly-inlining: Optimize Options. (line 268) -* feliminate-dwarf2-dups: Debugging Options. (line 321) -* feliminate-unused-debug-symbols: Debugging Options. (line 67) -* feliminate-unused-debug-types: Debugging Options. (line 1422) -* femit-struct-debug-baseonly: Debugging Options. (line 326) -* femit-struct-debug-reduced: Debugging Options. (line 339) -* fenable-: Debugging Options. (line 553) -* fexceptions: Code Gen Options. (line 108) -* fexcess-precision: Optimize Options. (line 1927) -* fexec-charset: Preprocessor Options. - (line 554) -* fexpensive-optimizations: Optimize Options. (line 576) -* fext-numeric-literals: C++ Dialect Options. - (line 587) -* fextended-identifiers: Preprocessor Options. - (line 499) -* fextern-tls-init: C++ Dialect Options. - (line 120) -* ffast-math: Optimize Options. (line 1950) -* ffat-lto-objects: Optimize Options. (line 1818) -* ffinite-math-only: Optimize Options. (line 2027) -* ffix-and-continue: Darwin Options. (line 104) -* ffixed: Code Gen Options. (line 329) -* ffloat-store: Optimize Options. (line 1913) -* ffloat-store <1>: Disappointments. (line 77) -* ffor-scope: C++ Dialect Options. - (line 141) -* fforward-propagate: Optimize Options. (line 178) -* ffp-contract: Optimize Options. (line 187) -* ffreestanding: Standards. (line 92) -* ffreestanding <1>: C Dialect Options. (line 252) -* ffreestanding <2>: Warning Options. (line 252) -* ffreestanding <3>: Function Attributes. - (line 493) -* ffriend-injection: C++ Dialect Options. - (line 91) -* ffunction-sections: Optimize Options. (line 2224) -* fgcse: Optimize Options. (line 437) -* fgcse-after-reload: Optimize Options. (line 473) -* fgcse-las: Optimize Options. (line 466) -* fgcse-lm: Optimize Options. (line 448) -* fgcse-sm: Optimize Options. (line 457) -* fgnu-runtime: Objective-C and Objective-C++ Dialect Options. - (line 39) -* fgnu-tm: C Dialect Options. (line 286) -* fgnu89-inline: C Dialect Options. (line 152) -* fgraphite-identity: Optimize Options. (line 1069) -* fhosted: C Dialect Options. (line 244) -* fif-conversion: Optimize Options. (line 516) -* fif-conversion2: Optimize Options. (line 525) -* filelist: Darwin Options. (line 196) -* findirect-data: Darwin Options. (line 104) -* findirect-inlining: Optimize Options. (line 241) -* finhibit-size-directive: Code Gen Options. (line 250) -* finline-functions: Optimize Options. (line 249) -* finline-functions-called-once: Optimize Options. (line 260) -* finline-limit: Optimize Options. (line 284) -* finline-small-functions: Optimize Options. (line 232) -* finput-charset: Preprocessor Options. - (line 567) -* finstrument-functions: Code Gen Options. (line 385) -* finstrument-functions <1>: Function Attributes. - (line 1085) -* finstrument-functions-exclude-file-list: Code Gen Options. (line 420) -* finstrument-functions-exclude-function-list: Code Gen Options. - (line 441) -* fipa-cp: Optimize Options. (line 894) -* fipa-cp-clone: Optimize Options. (line 902) -* fipa-profile: Optimize Options. (line 886) -* fipa-pta: Optimize Options. (line 880) -* fipa-pure-const: Optimize Options. (line 872) -* fipa-reference: Optimize Options. (line 876) -* fipa-sra: Optimize Options. (line 277) -* fira-hoist-pressure: Optimize Options. (line 624) -* fira-loop-pressure: Optimize Options. (line 631) -* fira-verbose: Optimize Options. (line 651) -* fivopts: Optimize Options. (line 1165) -* fkeep-inline-functions: Optimize Options. (line 315) -* fkeep-inline-functions <1>: Inline. (line 51) -* fkeep-static-consts: Optimize Options. (line 322) -* flat_namespace: Darwin Options. (line 196) -* flax-vector-conversions: C Dialect Options. (line 344) -* fleading-underscore: Code Gen Options. (line 523) -* flive-range-shrinkage: Optimize Options. (line 590) -* floop-block: Optimize Options. (line 1040) -* floop-interchange: Optimize Options. (line 995) -* floop-nest-optimize: Optimize Options. (line 1077) -* floop-parallelize-all: Optimize Options. (line 1083) -* floop-strip-mine: Optimize Options. (line 1019) -* flto: Optimize Options. (line 1575) -* flto-partition: Optimize Options. (line 1769) -* fmax-errors: Warning Options. (line 18) -* fmem-report: Debugging Options. (line 430) -* fmem-report-wpa: Debugging Options. (line 434) -* fmerge-all-constants: Optimize Options. (line 341) -* fmerge-constants: Optimize Options. (line 331) -* fmerge-debug-strings: Debugging Options. (line 395) -* fmessage-length: Language Independent Options. - (line 14) -* fmodulo-sched: Optimize Options. (line 352) -* fmodulo-sched-allow-regmoves: Optimize Options. (line 357) -* fmove-loop-invariants: Optimize Options. (line 2214) -* fms-extensions: C Dialect Options. (line 301) -* fms-extensions <1>: C++ Dialect Options. - (line 175) -* fms-extensions <2>: Unnamed Fields. (line 36) -* fnext-runtime: Objective-C and Objective-C++ Dialect Options. - (line 43) -* fno-access-control: C++ Dialect Options. - (line 50) -* fno-asm: C Dialect Options. (line 196) -* fno-branch-count-reg: Optimize Options. (line 364) -* fno-builtin: C Dialect Options. (line 210) -* fno-builtin <1>: Warning Options. (line 252) -* fno-builtin <2>: Function Attributes. - (line 493) -* fno-builtin <3>: Other Builtins. (line 14) -* fno-canonical-system-headers: Preprocessor Options. - (line 504) -* fno-common: Code Gen Options. (line 228) -* fno-common <1>: Variable Attributes. - (line 104) -* fno-compare-debug: Debugging Options. (line 282) -* fno-debug-types-section: Debugging Options. (line 79) -* fno-default-inline: Inline. (line 71) -* fno-defer-pop: Optimize Options. (line 170) -* fno-diagnostics-show-caret: Language Independent Options. - (line 92) -* fno-diagnostics-show-option: Language Independent Options. - (line 86) -* fno-dwarf2-cfi-asm: Debugging Options. (line 406) -* fno-elide-constructors: C++ Dialect Options. - (line 104) -* fno-eliminate-unused-debug-types: Debugging Options. (line 1422) -* fno-enforce-eh-specs: C++ Dialect Options. - (line 110) -* fno-ext-numeric-literals: C++ Dialect Options. - (line 587) -* fno-extern-tls-init: C++ Dialect Options. - (line 120) -* fno-for-scope: C++ Dialect Options. - (line 141) -* fno-function-cse: Optimize Options. (line 374) -* fno-gnu-keywords: C++ Dialect Options. - (line 153) -* fno-gnu-unique: Code Gen Options. (line 151) -* fno-guess-branch-probability: Optimize Options. (line 1342) -* fno-ident: Code Gen Options. (line 247) -* fno-implement-inlines: C++ Dialect Options. - (line 170) -* fno-implement-inlines <1>: C++ Interface. (line 75) -* fno-implicit-inline-templates: C++ Dialect Options. - (line 164) -* fno-implicit-templates: C++ Dialect Options. - (line 158) -* fno-implicit-templates <1>: Template Instantiation. - (line 78) -* fno-inline: Optimize Options. (line 224) -* fno-ira-share-save-slots: Optimize Options. (line 639) -* fno-ira-share-spill-slots: Optimize Options. (line 645) -* fno-jump-tables: Code Gen Options. (line 321) -* fno-math-errno: Optimize Options. (line 1964) -* fno-merge-debug-strings: Debugging Options. (line 395) -* fno-nil-receivers: Objective-C and Objective-C++ Dialect Options. - (line 49) -* fno-nonansi-builtins: C++ Dialect Options. - (line 180) -* fno-operator-names: C++ Dialect Options. - (line 196) -* fno-optional-diags: C++ Dialect Options. - (line 200) -* fno-peephole: Optimize Options. (line 1333) -* fno-peephole2: Optimize Options. (line 1333) -* fno-pretty-templates: C++ Dialect Options. - (line 210) -* fno-rtti: C++ Dialect Options. - (line 227) -* fno-sched-interblock: Optimize Options. (line 683) -* fno-sched-spec: Optimize Options. (line 688) -* fno-set-stack-executable: i386 and x86-64 Windows Options. - (line 46) -* fno-show-column: Preprocessor Options. - (line 591) -* fno-signed-bitfields: C Dialect Options. (line 377) -* fno-signed-zeros: Optimize Options. (line 2039) -* fno-stack-limit: Code Gen Options. (line 491) -* fno-threadsafe-statics: C++ Dialect Options. - (line 264) -* fno-toplevel-reorder: Optimize Options. (line 1541) -* fno-trapping-math: Optimize Options. (line 2049) -* fno-unsigned-bitfields: C Dialect Options. (line 377) -* fno-use-cxa-get-exception-ptr: C++ Dialect Options. - (line 277) -* fno-var-tracking-assignments: Debugging Options. (line 1330) -* fno-var-tracking-assignments-toggle: Debugging Options. (line 1339) -* fno-weak: C++ Dialect Options. - (line 389) -* fno-working-directory: Preprocessor Options. - (line 577) -* fno-writable-relocated-rdata: i386 and x86-64 Windows Options. - (line 53) -* fno-zero-initialized-in-bss: Optimize Options. (line 385) -* fnon-call-exceptions: Code Gen Options. (line 122) -* fnothrow-opt: C++ Dialect Options. - (line 185) -* fobjc-abi-version: Objective-C and Objective-C++ Dialect Options. - (line 56) -* fobjc-call-cxx-cdtors: Objective-C and Objective-C++ Dialect Options. - (line 67) -* fobjc-direct-dispatch: Objective-C and Objective-C++ Dialect Options. - (line 92) -* fobjc-exceptions: Objective-C and Objective-C++ Dialect Options. - (line 96) -* fobjc-gc: Objective-C and Objective-C++ Dialect Options. - (line 105) -* fobjc-nilcheck: Objective-C and Objective-C++ Dialect Options. - (line 111) -* fobjc-std: Objective-C and Objective-C++ Dialect Options. - (line 120) -* fomit-frame-pointer: Optimize Options. (line 198) -* fopenmp: C Dialect Options. (line 263) -* fopenmp-simd: C Dialect Options. (line 272) -* fopt-info: Debugging Options. (line 1132) -* foptimize-sibling-calls: Optimize Options. (line 219) -* force_cpusubtype_ALL: Darwin Options. (line 135) -* force_flat_namespace: Darwin Options. (line 196) -* fpack-struct: Code Gen Options. (line 372) -* fpartial-inlining: Optimize Options. (line 1308) -* fpcc-struct-return: Code Gen Options. (line 164) -* fpcc-struct-return <1>: Incompatibilities. (line 170) -* fpch-deps: Preprocessor Options. - (line 296) -* fpch-preprocess: Preprocessor Options. - (line 304) -* fpeel-loops: Optimize Options. (line 2206) -* fpermissive: C++ Dialect Options. - (line 205) -* fpic: Code Gen Options. (line 278) -* fPIC: Code Gen Options. (line 299) -* fpie: Code Gen Options. (line 312) -* fPIE: Code Gen Options. (line 312) -* fplan9-extensions: Unnamed Fields. (line 43) -* fplugin: Overall Options. (line 351) -* fplugin-arg: Overall Options. (line 358) -* fpost-ipa-mem-report: Debugging Options. (line 439) -* fpre-ipa-mem-report: Debugging Options. (line 438) -* fpredictive-commoning: Optimize Options. (line 1315) -* fprefetch-loop-arrays: Optimize Options. (line 1322) -* fpreprocessed: Preprocessor Options. - (line 508) -* fprofile-arcs: Debugging Options. (line 476) -* fprofile-arcs <1>: Other Builtins. (line 253) -* fprofile-correction: Optimize Options. (line 1861) -* fprofile-dir: Optimize Options. (line 1868) -* fprofile-generate: Optimize Options. (line 1879) -* fprofile-reorder-functions: Optimize Options. (line 2156) -* fprofile-report: Debugging Options. (line 443) -* fprofile-use: Optimize Options. (line 1893) -* fprofile-values: Optimize Options. (line 2147) -* fpu: RX Options. (line 17) -* frandom-seed: Debugging Options. (line 1224) -* freciprocal-math: Optimize Options. (line 2017) -* frecord-gcc-switches: Code Gen Options. (line 266) -* free: Optimize Options. (line 582) -* freg-struct-return: Code Gen Options. (line 182) -* frename-registers: Optimize Options. (line 2173) -* freorder-blocks: Optimize Options. (line 1359) -* freorder-blocks-and-partition: Optimize Options. (line 1365) -* freorder-functions: Optimize Options. (line 1378) -* freplace-objc-classes: Objective-C and Objective-C++ Dialect Options. - (line 131) -* frepo: C++ Dialect Options. - (line 222) -* frepo <1>: Template Instantiation. - (line 54) -* frerun-cse-after-loop: Optimize Options. (line 431) -* freschedule-modulo-scheduled-loops: Optimize Options. (line 782) -* frounding-math: Optimize Options. (line 2064) -* fsanitize=address: Debugging Options. (line 187) -* fsanitize=integer-divide-by-zero: Debugging Options. (line 228) -* fsanitize=leak: Debugging Options. (line 206) -* fsanitize=null: Debugging Options. (line 247) -* fsanitize=return: Debugging Options. (line 255) -* fsanitize=shift: Debugging Options. (line 221) -* fsanitize=signed-integer-overflow: Debugging Options. (line 262) -* fsanitize=thread: Debugging Options. (line 197) -* fsanitize=undefined: Debugging Options. (line 216) -* fsanitize=unreachable: Debugging Options. (line 233) -* fsanitize=vla-bound: Debugging Options. (line 240) -* fsched-critical-path-heuristic: Optimize Options. (line 748) -* fsched-dep-count-heuristic: Optimize Options. (line 775) -* fsched-group-heuristic: Optimize Options. (line 742) -* fsched-last-insn-heuristic: Optimize Options. (line 768) -* fsched-pressure: Optimize Options. (line 693) -* fsched-rank-heuristic: Optimize Options. (line 761) -* fsched-spec-insn-heuristic: Optimize Options. (line 754) -* fsched-spec-load: Optimize Options. (line 702) -* fsched-spec-load-dangerous: Optimize Options. (line 707) -* fsched-stalled-insns: Optimize Options. (line 713) -* fsched-stalled-insns-dep: Optimize Options. (line 723) -* fsched-verbose: Debugging Options. (line 1234) -* fsched2-use-superblocks: Optimize Options. (line 732) -* fschedule-insns: Optimize Options. (line 664) -* fschedule-insns2: Optimize Options. (line 674) -* fsection-anchors: Optimize Options. (line 2274) -* fsel-sched-pipelining: Optimize Options. (line 795) -* fsel-sched-pipelining-outer-loops: Optimize Options. (line 800) -* fselective-scheduling: Optimize Options. (line 787) -* fselective-scheduling2: Optimize Options. (line 791) -* fshort-double: Code Gen Options. (line 210) -* fshort-enums: Code Gen Options. (line 200) -* fshort-enums <1>: Structures unions enumerations and bit-fields implementation. - (line 48) -* fshort-enums <2>: Type Attributes. (line 113) -* fshort-enums <3>: Non-bugs. (line 42) -* fshort-wchar: Code Gen Options. (line 218) -* fshrink-wrap: Optimize Options. (line 805) -* fsignaling-nans: Optimize Options. (line 2084) -* fsigned-bitfields: C Dialect Options. (line 377) -* fsigned-bitfields <1>: Non-bugs. (line 57) -* fsigned-char: C Dialect Options. (line 367) -* fsigned-char <1>: Characters implementation. - (line 31) -* fsimd-cost-model: Optimize Options. (line 1256) -* fsingle-precision-constant: Optimize Options. (line 2099) -* fsplit-ivs-in-unroller: Optimize Options. (line 1289) -* fsplit-stack: Code Gen Options. (line 505) -* fsplit-stack <1>: Function Attributes. - (line 1090) -* fsplit-wide-types: Optimize Options. (line 406) -* fstack-check: Code Gen Options. (line 453) -* fstack-limit-register: Code Gen Options. (line 491) -* fstack-limit-symbol: Code Gen Options. (line 491) -* fstack-protector: Optimize Options. (line 2257) -* fstack-protector-all: Optimize Options. (line 2266) -* fstack-protector-strong: Optimize Options. (line 2269) -* fstack-usage: Debugging Options. (line 447) -* fstack_reuse: Code Gen Options. (line 21) -* fstats: C++ Dialect Options. - (line 237) -* fstrict-aliasing: Optimize Options. (line 1391) -* fstrict-enums: C++ Dialect Options. - (line 242) -* fstrict-overflow: Optimize Options. (line 1437) -* fstrict-volatile-bitfields: Code Gen Options. (line 611) -* fsync-libcalls: Code Gen Options. (line 643) -* fsyntax-only: Warning Options. (line 14) -* ftabstop: Preprocessor Options. - (line 521) -* ftemplate-backtrace-limit: C++ Dialect Options. - (line 251) -* ftemplate-depth: C++ Dialect Options. - (line 255) -* ftest-coverage: Debugging Options. (line 531) -* fthread-jumps: Optimize Options. (line 397) -* ftime-report: Debugging Options. (line 426) -* ftls-model: Code Gen Options. (line 534) -* ftracer: Optimize Options. (line 1272) -* ftracer <1>: Optimize Options. (line 2183) -* ftrack-macro-expansion: Preprocessor Options. - (line 536) -* ftrapv: Code Gen Options. (line 96) -* ftree-bit-ccp: Optimize Options. (line 930) -* ftree-builtin-call-dce: Optimize Options. (line 958) -* ftree-ccp: Optimize Options. (line 936) -* ftree-ch: Optimize Options. (line 978) -* ftree-coalesce-inlined-vars: Optimize Options. (line 1196) -* ftree-coalesce-vars: Optimize Options. (line 1206) -* ftree-copy-prop: Optimize Options. (line 867) -* ftree-copyrename: Optimize Options. (line 1189) -* ftree-dce: Optimize Options. (line 954) -* ftree-dominator-opts: Optimize Options. (line 964) -* ftree-dse: Optimize Options. (line 971) -* ftree-forwprop: Optimize Options. (line 846) -* ftree-fre: Optimize Options. (line 850) -* ftree-loop-im: Optimize Options. (line 1150) -* ftree-loop-ivcanon: Optimize Options. (line 1159) -* ftree-loop-linear: Optimize Options. (line 989) -* ftree-loop-optimize: Optimize Options. (line 985) -* ftree-loop-vectorize: Optimize Options. (line 1234) -* ftree-parallelize-loops: Optimize Options. (line 1170) -* ftree-partial-pre: Optimize Options. (line 842) -* ftree-phiprop: Optimize Options. (line 857) -* ftree-pre: Optimize Options. (line 838) -* ftree-pta: Optimize Options. (line 1179) -* ftree-reassoc: Optimize Options. (line 834) -* ftree-sink: Optimize Options. (line 926) -* ftree-slp-vectorize: Optimize Options. (line 1238) -* ftree-slsr: Optimize Options. (line 1223) -* ftree-sra: Optimize Options. (line 1183) -* ftree-ter: Optimize Options. (line 1215) -* ftree-vectorize: Optimize Options. (line 1229) -* ftree-vrp: Optimize Options. (line 1263) -* funit-at-a-time: Optimize Options. (line 1534) -* funroll-all-loops: Optimize Options. (line 1283) -* funroll-all-loops <1>: Optimize Options. (line 2200) -* funroll-loops: Optimize Options. (line 1277) -* funroll-loops <1>: Optimize Options. (line 2190) -* funsafe-loop-optimizations: Optimize Options. (line 487) -* funsafe-math-optimizations: Optimize Options. (line 1982) -* funsigned-bitfields: C Dialect Options. (line 377) -* funsigned-bitfields <1>: Structures unions enumerations and bit-fields implementation. - (line 17) -* funsigned-bitfields <2>: Non-bugs. (line 57) -* funsigned-char: C Dialect Options. (line 349) -* funsigned-char <1>: Characters implementation. - (line 31) -* funswitch-loops: Optimize Options. (line 2218) -* funwind-tables: Code Gen Options. (line 138) -* fuse-cxa-atexit: C++ Dialect Options. - (line 270) -* fuse-ld=bfd: Optimize Options. (line 1848) -* fuse-ld=gold: Optimize Options. (line 1851) -* fvar-tracking: Debugging Options. (line 1320) -* fvar-tracking-assignments: Debugging Options. (line 1330) -* fvar-tracking-assignments-toggle: Debugging Options. (line 1339) -* fvariable-expansion-in-unroller: Optimize Options. (line 1303) -* fvect-cost-model: Optimize Options. (line 1242) -* fverbose-asm: Code Gen Options. (line 257) -* fvisibility: Code Gen Options. (line 545) -* fvisibility-inlines-hidden: C++ Dialect Options. - (line 282) -* fvisibility-ms-compat: C++ Dialect Options. - (line 310) -* fvpt: Optimize Options. (line 2163) -* fvtable-verify: C++ Dialect Options. - (line 339) -* fvtv-counts: C++ Dialect Options. - (line 374) -* fweb: Optimize Options. (line 1553) -* fwhole-program: Optimize Options. (line 1564) -* fwide-exec-charset: Preprocessor Options. - (line 559) -* fworking-directory: Preprocessor Options. - (line 577) -* fwrapv: Code Gen Options. (line 100) -* fzero-link: Objective-C and Objective-C++ Dialect Options. - (line 141) -* g: Debugging Options. (line 10) -* G: M32R/D Options. (line 57) -* G <1>: MIPS Options. (line 393) -* G <2>: Nios II Options. (line 9) -* G <3>: RS/6000 and PowerPC Options. - (line 739) -* G <4>: System V Options. (line 10) -* gcoff: Debugging Options. (line 94) -* gdwarf-VERSION: Debugging Options. (line 112) -* gen-decls: Objective-C and Objective-C++ Dialect Options. - (line 153) -* gfull: Darwin Options. (line 69) -* ggdb: Debugging Options. (line 45) -* ggnu-pubnames: Debugging Options. (line 54) -* gno-record-gcc-switches: Debugging Options. (line 132) -* gno-strict-dwarf: Debugging Options. (line 142) -* gpubnames: Debugging Options. (line 51) -* grecord-gcc-switches: Debugging Options. (line 123) -* gsplit-dwarf: Debugging Options. (line 38) -* gstabs: Debugging Options. (line 59) -* gstabs+: Debugging Options. (line 88) -* gstrict-dwarf: Debugging Options. (line 136) -* gtoggle: Debugging Options. (line 179) -* gused: Darwin Options. (line 64) -* gvms: Debugging Options. (line 146) -* gxcoff: Debugging Options. (line 99) -* gxcoff+: Debugging Options. (line 104) -* H: Preprocessor Options. - (line 707) -* headerpad_max_install_names: Darwin Options. (line 196) -* help: Overall Options. (line 221) -* help <1>: Preprocessor Options. - (line 699) -* hoist-adjacent-loads: Optimize Options. (line 861) -* I: Preprocessor Options. - (line 77) -* I <1>: Directory Options. (line 10) -* I-: Preprocessor Options. - (line 389) -* I- <1>: Directory Options. (line 116) -* idirafter: Preprocessor Options. - (line 431) -* iframework: Darwin Options. (line 57) -* imacros: Preprocessor Options. - (line 422) -* image_base: Darwin Options. (line 196) -* imultilib: Preprocessor Options. - (line 456) -* include: Preprocessor Options. - (line 411) -* init: Darwin Options. (line 196) -* install_name: Darwin Options. (line 196) -* iplugindir=: Directory Options. (line 29) -* iprefix: Preprocessor Options. - (line 438) -* iquote: Preprocessor Options. - (line 468) -* iquote <1>: Directory Options. (line 34) -* isysroot: Preprocessor Options. - (line 450) -* isystem: Preprocessor Options. - (line 460) -* iwithprefix: Preprocessor Options. - (line 444) -* iwithprefixbefore: Preprocessor Options. - (line 444) -* keep_private_externs: Darwin Options. (line 196) -* l: Link Options. (line 26) -* L: Directory Options. (line 40) -* lobjc: Link Options. (line 53) -* M: Preprocessor Options. - (line 185) -* m: RS/6000 and PowerPC Options. - (line 581) -* m1: SH Options. (line 9) -* m10: PDP-11 Options. (line 29) -* m128bit-long-double: i386 and x86-64 Options. - (line 381) -* m16: i386 and x86-64 Options. - (line 940) -* m16-bit: CRIS Options. (line 64) -* m16-bit <1>: NDS32 Options. (line 39) -* m1reg-: Adapteva Epiphany Options. - (line 131) -* m2: SH Options. (line 12) -* m210: MCore Options. (line 43) -* m2a: SH Options. (line 30) -* m2a-nofpu: SH Options. (line 18) -* m2a-single: SH Options. (line 26) -* m2a-single-only: SH Options. (line 22) -* m3: SH Options. (line 34) -* m31: S/390 and zSeries Options. - (line 86) -* m32: i386 and x86-64 Options. - (line 940) -* m32 <1>: RS/6000 and PowerPC Options. - (line 274) -* m32 <2>: SPARC Options. (line 250) -* m32 <3>: TILE-Gx Options. (line 23) -* m32 <4>: TILEPro Options. (line 13) -* m32-bit: CRIS Options. (line 64) -* m32bit-doubles: RX Options. (line 10) -* m32r: M32R/D Options. (line 15) -* m32r2: M32R/D Options. (line 9) -* m32rx: M32R/D Options. (line 12) -* m340: MCore Options. (line 43) -* m3dnow: i386 and x86-64 Options. - (line 629) -* m3e: SH Options. (line 37) -* m4: SH Options. (line 51) -* m4-nofpu: SH Options. (line 40) -* m4-single: SH Options. (line 47) -* m4-single-only: SH Options. (line 43) -* m40: PDP-11 Options. (line 23) -* m45: PDP-11 Options. (line 26) -* m4a: SH Options. (line 66) -* m4a-nofpu: SH Options. (line 54) -* m4a-single: SH Options. (line 62) -* m4a-single-only: SH Options. (line 58) -* m4al: SH Options. (line 69) -* m4byte-functions: MCore Options. (line 27) -* m5200: M680x0 Options. (line 144) -* m5206e: M680x0 Options. (line 153) -* m528x: M680x0 Options. (line 157) -* m5307: M680x0 Options. (line 161) -* m5407: M680x0 Options. (line 165) -* m64: i386 and x86-64 Options. - (line 940) -* m64 <1>: RS/6000 and PowerPC Options. - (line 274) -* m64 <2>: S/390 and zSeries Options. - (line 86) -* m64 <3>: SPARC Options. (line 250) -* m64 <4>: TILE-Gx Options. (line 23) -* m64bit-doubles: RX Options. (line 10) -* m68000: M680x0 Options. (line 93) -* m68010: M680x0 Options. (line 101) -* m68020: M680x0 Options. (line 107) -* m68020-40: M680x0 Options. (line 175) -* m68020-60: M680x0 Options. (line 184) -* m68030: M680x0 Options. (line 112) -* m68040: M680x0 Options. (line 117) -* m68060: M680x0 Options. (line 126) -* m68881: M680x0 Options. (line 194) -* m8-bit: CRIS Options. (line 64) -* m8byte-align: V850 Options. (line 170) -* m96bit-long-double: i386 and x86-64 Options. - (line 381) -* mA6: ARC Options. (line 19) -* mA7: ARC Options. (line 26) -* mabi: AArch64 Options. (line 9) -* mabi <1>: ARM Options. (line 10) -* mabi <2>: i386 and x86-64 Options. - (line 799) -* mabi <3>: RS/6000 and PowerPC Options. - (line 608) -* mabi=32: MIPS Options. (line 138) -* mabi=64: MIPS Options. (line 138) -* mabi=eabi: MIPS Options. (line 138) -* mabi=elfv1: RS/6000 and PowerPC Options. - (line 629) -* mabi=elfv2: RS/6000 and PowerPC Options. - (line 635) -* mabi=gnu: MMIX Options. (line 20) -* mabi=ibmlongdouble: RS/6000 and PowerPC Options. - (line 621) -* mabi=ieeelongdouble: RS/6000 and PowerPC Options. - (line 625) -* mabi=mmixware: MMIX Options. (line 20) -* mabi=n32: MIPS Options. (line 138) -* mabi=no-spe: RS/6000 and PowerPC Options. - (line 618) -* mabi=o64: MIPS Options. (line 138) -* mabi=spe: RS/6000 and PowerPC Options. - (line 613) -* mabicalls: MIPS Options. (line 162) -* mabort-on-noreturn: ARM Options. (line 196) -* mabs=2008: MIPS Options. (line 260) -* mabs=legacy: MIPS Options. (line 260) -* mabsdiff: MeP Options. (line 7) -* mabshi: PDP-11 Options. (line 55) -* mac0: PDP-11 Options. (line 16) -* macc-4: FRV Options. (line 139) -* macc-8: FRV Options. (line 143) -* maccumulate-args: AVR Options. (line 137) -* maccumulate-outgoing-args: i386 and x86-64 Options. - (line 822) -* maccumulate-outgoing-args <1>: SH Options. (line 325) -* maddress-mode=long: i386 and x86-64 Options. - (line 987) -* maddress-mode=short: i386 and x86-64 Options. - (line 992) -* maddress-space-conversion: SPU Options. (line 68) -* mads: RS/6000 and PowerPC Options. - (line 663) -* maix-struct-return: RS/6000 and PowerPC Options. - (line 601) -* maix32: RS/6000 and PowerPC Options. - (line 312) -* maix64: RS/6000 and PowerPC Options. - (line 312) -* malign-300: H8/300 Options. (line 41) -* malign-call: ARC Options. (line 192) -* malign-double: i386 and x86-64 Options. - (line 366) -* malign-int: M680x0 Options. (line 263) -* malign-labels: FRV Options. (line 128) -* malign-loops: M32R/D Options. (line 73) -* malign-natural: RS/6000 and PowerPC Options. - (line 350) -* malign-power: RS/6000 and PowerPC Options. - (line 350) -* mall-opts: MeP Options. (line 11) -* malloc-cc: FRV Options. (line 31) -* maltivec: RS/6000 and PowerPC Options. - (line 132) -* maltivec=be: RS/6000 and PowerPC Options. - (line 148) -* maltivec=le: RS/6000 and PowerPC Options. - (line 158) -* mam33: MN10300 Options. (line 17) -* mam33-2: MN10300 Options. (line 24) -* mam34: MN10300 Options. (line 27) -* mandroid: GNU/Linux Options. (line 21) -* mannotate-align: ARC Options. (line 133) -* mapcs: ARM Options. (line 22) -* mapcs-frame: ARM Options. (line 14) -* mapp-regs: SPARC Options. (line 10) -* mapp-regs <1>: V850 Options. (line 181) -* mARC600: ARC Options. (line 19) -* mARC601: ARC Options. (line 23) -* mARC700: ARC Options. (line 26) -* march: AArch64 Options. (line 66) -* march <1>: ARM Options. (line 75) -* march <2>: C6X Options. (line 7) -* march <3>: CRIS Options. (line 10) -* march <4>: HPPA Options. (line 9) -* march <5>: HPPA Options. (line 156) -* march <6>: i386 and x86-64 Options. - (line 10) -* march <7>: M680x0 Options. (line 12) -* march <8>: MIPS Options. (line 14) -* march <9>: NDS32 Options. (line 58) -* march <10>: S/390 and zSeries Options. - (line 114) -* marclinux: ARC Options. (line 139) -* marclinux_prof: ARC Options. (line 146) -* margonaut: ARC Options. (line 341) -* marm: ARM Options. (line 266) -* mas100-syntax: RX Options. (line 76) -* masm-hex: MSP430 Options. (line 9) -* masm=DIALECT: i386 and x86-64 Options. - (line 322) -* matomic-model=MODEL: SH Options. (line 144) -* matomic-updates: SPU Options. (line 83) -* mauto-modify-reg: ARC Options. (line 195) -* mauto-pic: IA-64 Options. (line 50) -* maverage: MeP Options. (line 16) -* mavoid-indexed-addresses: RS/6000 and PowerPC Options. - (line 420) -* max-vect-align: Adapteva Epiphany Options. - (line 119) -* mb: SH Options. (line 74) -* mbackchain: S/390 and zSeries Options. - (line 35) -* mbarrel-shift-enabled: LM32 Options. (line 9) -* mbarrel-shifter: ARC Options. (line 10) -* mbarrel_shifter: ARC Options. (line 361) -* mbase-addresses: MMIX Options. (line 53) -* mbased=: MeP Options. (line 20) -* mbbit-peephole: ARC Options. (line 198) -* mbcopy: PDP-11 Options. (line 36) -* mbcopy-builtin: PDP-11 Options. (line 32) -* mbig: RS/6000 and PowerPC Options. - (line 500) -* mbig-endian: AArch64 Options. (line 20) -* mbig-endian <1>: ARC Options. (line 344) -* mbig-endian <2>: ARM Options. (line 62) -* mbig-endian <3>: C6X Options. (line 13) -* mbig-endian <4>: IA-64 Options. (line 9) -* mbig-endian <5>: MCore Options. (line 39) -* mbig-endian <6>: MicroBlaze Options. (line 57) -* mbig-endian <7>: NDS32 Options. (line 9) -* mbig-endian <8>: RS/6000 and PowerPC Options. - (line 500) -* mbig-endian <9>: TILE-Gx Options. (line 29) -* mbig-endian-data: RX Options. (line 42) -* mbig-switch: V850 Options. (line 176) -* mbigtable: SH Options. (line 89) -* mbionic: GNU/Linux Options. (line 17) -* mbit-align: RS/6000 and PowerPC Options. - (line 452) -* mbit-ops: CR16 Options. (line 25) -* mbitfield: M680x0 Options. (line 231) -* mbitops: MeP Options. (line 26) -* mbitops <1>: SH Options. (line 93) -* mblock-move-inline-limit: RS/6000 and PowerPC Options. - (line 733) -* mbranch-cheap: PDP-11 Options. (line 65) -* mbranch-cost: Adapteva Epiphany Options. - (line 18) -* mbranch-cost <1>: AVR Options. (line 152) -* mbranch-cost <2>: MIPS Options. (line 701) -* mbranch-cost=NUM: SH Options. (line 389) -* mbranch-cost=NUMBER: M32R/D Options. (line 82) -* mbranch-expensive: PDP-11 Options. (line 61) -* mbranch-hints: SPU Options. (line 29) -* mbranch-likely: MIPS Options. (line 708) -* mbranch-predict: MMIX Options. (line 48) -* mbss-plt: RS/6000 and PowerPC Options. - (line 185) -* mbuild-constants: DEC Alpha Options. (line 141) -* mbwx: DEC Alpha Options. (line 163) -* mbypass-cache: Nios II Options. (line 34) -* mc68000: M680x0 Options. (line 93) -* mc68020: M680x0 Options. (line 107) -* mc=: MeP Options. (line 31) -* mcache-block-size: NDS32 Options. (line 54) -* mcache-size: SPU Options. (line 75) -* mcache-volatile: Nios II Options. (line 40) -* mcall-eabi: RS/6000 and PowerPC Options. - (line 575) -* mcall-freebsd: RS/6000 and PowerPC Options. - (line 589) -* mcall-linux: RS/6000 and PowerPC Options. - (line 585) -* mcall-netbsd: RS/6000 and PowerPC Options. - (line 593) -* mcall-netbsd <1>: RS/6000 and PowerPC Options. - (line 597) -* mcall-prologues: AVR Options. (line 157) -* mcall-sysv: RS/6000 and PowerPC Options. - (line 567) -* mcall-sysv-eabi: RS/6000 and PowerPC Options. - (line 575) -* mcall-sysv-noeabi: RS/6000 and PowerPC Options. - (line 578) -* mcallee-super-interworking: ARM Options. (line 285) -* mcaller-super-interworking: ARM Options. (line 292) -* mcallgraph-data: MCore Options. (line 31) -* mcase-vector-pcrel: ARC Options. (line 206) -* mcbcond: SPARC Options. (line 217) -* mcc-init: CRIS Options. (line 42) -* mcfv4e: M680x0 Options. (line 169) -* mcheck-zero-division: MIPS Options. (line 503) -* mcix: DEC Alpha Options. (line 163) -* mcld: i386 and x86-64 Options. - (line 672) -* mclip: MeP Options. (line 35) -* mcmodel: SPARC Options. (line 255) -* mcmodel=kernel: i386 and x86-64 Options. - (line 971) -* mcmodel=large: AArch64 Options. (line 44) -* mcmodel=large <1>: i386 and x86-64 Options. - (line 983) -* mcmodel=large <2>: RS/6000 and PowerPC Options. - (line 126) -* mcmodel=large <3>: TILE-Gx Options. (line 14) -* mcmodel=medium: i386 and x86-64 Options. - (line 976) -* mcmodel=medium <1>: RS/6000 and PowerPC Options. - (line 122) -* mcmodel=small: AArch64 Options. (line 38) -* mcmodel=small <1>: i386 and x86-64 Options. - (line 965) -* mcmodel=small <2>: RS/6000 and PowerPC Options. - (line 118) -* mcmodel=small <3>: TILE-Gx Options. (line 9) -* mcmodel=tiny: AArch64 Options. (line 31) -* mcmov: NDS32 Options. (line 21) -* mcmove: Adapteva Epiphany Options. - (line 23) -* mcmpb: RS/6000 and PowerPC Options. - (line 27) -* mcode-readable: MIPS Options. (line 463) -* mcompact-casesi: ARC Options. (line 210) -* mcompat-align-parm: RS/6000 and PowerPC Options. - (line 889) -* mcond-exec: FRV Options. (line 187) -* mcond-move: FRV Options. (line 159) -* mconfig=: MeP Options. (line 39) -* mconsole: i386 and x86-64 Windows Options. - (line 9) -* mconst-align: CRIS Options. (line 55) -* mconst16: Xtensa Options. (line 10) -* mconstant-gp: IA-64 Options. (line 46) -* mcop: MeP Options. (line 48) -* mcop32: MeP Options. (line 53) -* mcop64: MeP Options. (line 56) -* mcorea: Blackfin Options. (line 156) -* mcoreb: Blackfin Options. (line 163) -* mcpu: AArch64 Options. (line 98) -* mcpu <1>: ARC Options. (line 14) -* mcpu <2>: ARM Options. (line 136) -* mcpu <3>: CRIS Options. (line 10) -* mcpu <4>: DEC Alpha Options. (line 215) -* mcpu <5>: FRV Options. (line 258) -* mcpu <6>: i386 and x86-64 Options. - (line 270) -* mcpu <7>: M680x0 Options. (line 28) -* mcpu <8>: picoChip Options. (line 9) -* mcpu <9>: RS/6000 and PowerPC Options. - (line 68) -* mcpu <10>: SPARC Options. (line 95) -* mcpu <11>: TILE-Gx Options. (line 18) -* mcpu <12>: TILEPro Options. (line 9) -* mcpu32: M680x0 Options. (line 135) -* mcpu=: Blackfin Options. (line 7) -* mcpu= <1>: M32C Options. (line 7) -* mcpu= <2>: MicroBlaze Options. (line 20) -* mcr16c: CR16 Options. (line 14) -* mcr16cplus: CR16 Options. (line 14) -* mcrc32: i386 and x86-64 Options. - (line 719) -* mcrypto: RS/6000 and PowerPC Options. - (line 220) -* mcsync-anomaly: Blackfin Options. (line 59) -* mctor-dtor: NDS32 Options. (line 73) -* mcustom-fpu-cfg: Nios II Options. (line 175) -* mcustom-INSN: Nios II Options. (line 61) -* mcx16: i386 and x86-64 Options. - (line 696) -* MD: Preprocessor Options. - (line 276) -* mdalign: SH Options. (line 80) -* mdata-align: CRIS Options. (line 55) -* mdata-model: CR16 Options. (line 28) -* mdc: MeP Options. (line 62) -* mdebug: M32R/D Options. (line 69) -* mdebug <1>: S/390 and zSeries Options. - (line 110) -* mdebug-main=PREFIX: VMS Options. (line 13) -* mdec-asm: PDP-11 Options. (line 72) -* mdirect-move: RS/6000 and PowerPC Options. - (line 226) -* mdisable-callt: V850 Options. (line 92) -* mdisable-fpregs: HPPA Options. (line 28) -* mdisable-indexing: HPPA Options. (line 34) -* mdiv: M680x0 Options. (line 206) -* mdiv <1>: MCore Options. (line 15) -* mdiv <2>: MeP Options. (line 65) -* mdiv=STRATEGY: SH Options. (line 236) -* mdivide-breaks: MIPS Options. (line 509) -* mdivide-enabled: LM32 Options. (line 12) -* mdivide-traps: MIPS Options. (line 509) -* mdivsi3_libfunc=NAME: SH Options. (line 331) -* mdll: i386 and x86-64 Windows Options. - (line 16) -* mdlmzb: RS/6000 and PowerPC Options. - (line 445) -* mdmx: MIPS Options. (line 336) -* mdouble: FRV Options. (line 48) -* mdouble-float: MIPS Options. (line 255) -* mdouble-float <1>: RS/6000 and PowerPC Options. - (line 368) -* mdpfp: ARC Options. (line 30) -* mdpfp-compact: ARC Options. (line 31) -* mdpfp-fast: ARC Options. (line 35) -* mdpfp_compact: ARC Options. (line 364) -* mdpfp_fast: ARC Options. (line 367) -* mdsp: MIPS Options. (line 313) -* mdsp-packa: ARC Options. (line 88) -* mdspr2: MIPS Options. (line 319) -* mdsp_packa: ARC Options. (line 370) -* mdual-nops: SPU Options. (line 95) -* mdump-tune-features: i386 and x86-64 Options. - (line 653) -* mdvbf: ARC Options. (line 92) -* mdwarf2-asm: IA-64 Options. (line 94) -* mdword: FRV Options. (line 40) -* mdynamic-no-pic: RS/6000 and PowerPC Options. - (line 505) -* mea: ARC Options. (line 43) -* mEA: ARC Options. (line 373) -* mea32: SPU Options. (line 60) -* mea64: SPU Options. (line 60) -* meabi: RS/6000 and PowerPC Options. - (line 682) -* mearly-cbranchsi: ARC Options. (line 229) -* mearly-stop-bits: IA-64 Options. (line 100) -* meb: MeP Options. (line 68) -* meb <1>: Moxie Options. (line 7) -* meb <2>: Nios II Options. (line 29) -* meb <3>: Score Options. (line 9) -* mel: MeP Options. (line 71) -* mel <1>: Moxie Options. (line 11) -* mel <2>: Nios II Options. (line 29) -* mel <3>: Score Options. (line 12) -* melf: CRIS Options. (line 87) -* melf <1>: MMIX Options. (line 43) -* memb: RS/6000 and PowerPC Options. - (line 677) -* membedded-data: MIPS Options. (line 450) -* memregs=: M32C Options. (line 21) -* mep: V850 Options. (line 16) -* mepilogue-cfi: ARC Options. (line 155) -* mepsilon: MMIX Options. (line 15) -* merror-reloc: SPU Options. (line 10) -* mesa: S/390 and zSeries Options. - (line 94) -* metrax100: CRIS Options. (line 27) -* metrax4: CRIS Options. (line 27) -* meva: MIPS Options. (line 363) -* mex9: NDS32 Options. (line 70) -* mexpand-adddi: ARC Options. (line 232) -* mexplicit-relocs: DEC Alpha Options. (line 176) -* mexplicit-relocs <1>: MIPS Options. (line 494) -* mexr: H8/300 Options. (line 28) -* mextern-sdata: MIPS Options. (line 413) -* MF: Preprocessor Options. - (line 220) -* mfast-fp: Blackfin Options. (line 132) -* mfast-indirect-calls: HPPA Options. (line 46) -* mfast-sw-div: Nios II Options. (line 46) -* mfaster-structs: SPARC Options. (line 85) -* mfdpic: FRV Options. (line 72) -* mfentry: i386 and x86-64 Options. - (line 910) -* mfix: DEC Alpha Options. (line 163) -* mfix-24k: MIPS Options. (line 567) -* mfix-and-continue: Darwin Options. (line 104) -* mfix-at697f: SPARC Options. (line 237) -* mfix-cortex-m3-ldrd: ARM Options. (line 325) -* mfix-r10000: MIPS Options. (line 589) -* mfix-r4000: MIPS Options. (line 573) -* mfix-r4400: MIPS Options. (line 583) -* mfix-rm7000: MIPS Options. (line 600) -* mfix-sb1: MIPS Options. (line 625) -* mfix-ut699: SPARC Options. (line 242) -* mfix-vr4120: MIPS Options. (line 605) -* mfix-vr4130: MIPS Options. (line 618) -* mfixed-cc: FRV Options. (line 35) -* mfixed-range: HPPA Options. (line 53) -* mfixed-range <1>: IA-64 Options. (line 105) -* mfixed-range <2>: SH Options. (line 338) -* mfixed-range <3>: SPU Options. (line 52) -* mflat: SPARC Options. (line 22) -* mflip-mips16: MIPS Options. (line 110) -* mfloat-abi: ARM Options. (line 42) -* mfloat-gprs: RS/6000 and PowerPC Options. - (line 257) -* mfloat-ieee: DEC Alpha Options. (line 171) -* mfloat-vax: DEC Alpha Options. (line 171) -* mfloat32: PDP-11 Options. (line 52) -* mfloat64: PDP-11 Options. (line 48) -* mflush-func: MIPS Options. (line 692) -* mflush-func=NAME: M32R/D Options. (line 93) -* mflush-trap=NUMBER: M32R/D Options. (line 86) -* mfmaf: SPARC Options. (line 231) -* mfmovd: SH Options. (line 96) -* mforbid-fp-as-gp: NDS32 Options. (line 65) -* mforce-fp-as-gp: NDS32 Options. (line 61) -* mforce-no-pic: Xtensa Options. (line 41) -* mfp-exceptions: MIPS Options. (line 719) -* mfp-mode: Adapteva Epiphany Options. - (line 71) -* mfp-reg: DEC Alpha Options. (line 25) -* mfp-rounding-mode: DEC Alpha Options. (line 85) -* mfp-trap-mode: DEC Alpha Options. (line 63) -* mfp16-format: ARM Options. (line 176) -* mfp32: MIPS Options. (line 228) -* mfp64: MIPS Options. (line 231) -* mfpmath: Optimize Options. (line 1942) -* mfpmath <1>: i386 and x86-64 Options. - (line 273) -* mfpr-32: FRV Options. (line 15) -* mfpr-64: FRV Options. (line 19) -* mfprnd: RS/6000 and PowerPC Options. - (line 27) -* mfpu: ARM Options. (line 156) -* mfpu <1>: PDP-11 Options. (line 9) -* mfpu <2>: RS/6000 and PowerPC Options. - (line 376) -* mfpu <3>: SPARC Options. (line 34) -* mfriz: RS/6000 and PowerPC Options. - (line 860) -* mfsca: SH Options. (line 414) -* mfsrra: SH Options. (line 423) -* mfull-regs: NDS32 Options. (line 18) -* mfull-toc: RS/6000 and PowerPC Options. - (line 285) -* mfused-madd: IA-64 Options. (line 88) -* mfused-madd <1>: MIPS Options. (line 550) -* mfused-madd <2>: RS/6000 and PowerPC Options. - (line 429) -* mfused-madd <3>: S/390 and zSeries Options. - (line 135) -* mfused-madd <4>: SH Options. (line 405) -* mfused-madd <5>: Xtensa Options. (line 19) -* MG: Preprocessor Options. - (line 229) -* mg: VAX Options. (line 17) -* mgas: HPPA Options. (line 69) -* mgcc-abi: V850 Options. (line 148) -* mgen-cell-microcode: RS/6000 and PowerPC Options. - (line 173) -* mgeneral-regs-only: AArch64 Options. (line 24) -* mgettrcost=NUMBER: SH Options. (line 355) -* mghs: V850 Options. (line 127) -* mglibc: GNU/Linux Options. (line 9) -* mgnu: VAX Options. (line 13) -* mgnu-as: IA-64 Options. (line 18) -* mgnu-ld: HPPA Options. (line 105) -* mgnu-ld <1>: IA-64 Options. (line 23) -* mgotplt: CRIS Options. (line 81) -* mgp-direct: NDS32 Options. (line 45) -* mgp32: MIPS Options. (line 222) -* mgp64: MIPS Options. (line 225) -* mgpopt: MIPS Options. (line 435) -* mgpopt <1>: Nios II Options. (line 15) -* mgpr-32: FRV Options. (line 7) -* mgpr-64: FRV Options. (line 11) -* mgprel-ro: FRV Options. (line 99) -* mh: H8/300 Options. (line 14) -* mhal: Nios II Options. (line 220) -* mhalf-reg-file: Adapteva Epiphany Options. - (line 9) -* mhard-dfp: RS/6000 and PowerPC Options. - (line 27) -* mhard-dfp <1>: S/390 and zSeries Options. - (line 20) -* mhard-float: FRV Options. (line 23) -* mhard-float <1>: M680x0 Options. (line 194) -* mhard-float <2>: MicroBlaze Options. (line 10) -* mhard-float <3>: MIPS Options. (line 234) -* mhard-float <4>: RS/6000 and PowerPC Options. - (line 362) -* mhard-float <5>: S/390 and zSeries Options. - (line 11) -* mhard-float <6>: SPARC Options. (line 34) -* mhard-float <7>: V850 Options. (line 113) -* mhard-quad-float: SPARC Options. (line 55) -* mhardlit: MCore Options. (line 10) -* mhint-max-distance: SPU Options. (line 107) -* mhint-max-nops: SPU Options. (line 101) -* mhitachi: SH Options. (line 100) -* mhitachi <1>: SH Options. (line 103) -* mhitachi <2>: SH Options. (line 106) -* mhotpatch: S/390 and zSeries Options. - (line 171) -* mhp-ld: HPPA Options. (line 117) -* mhw-div: Nios II Options. (line 55) -* mhw-mul: Nios II Options. (line 55) -* mhw-mulx: Nios II Options. (line 55) -* micplb: Blackfin Options. (line 177) -* mid-shared-library: Blackfin Options. (line 80) -* mieee: DEC Alpha Options. (line 39) -* mieee <1>: SH Options. (line 116) -* mieee-conformant: DEC Alpha Options. (line 134) -* mieee-fp: i386 and x86-64 Options. - (line 328) -* mieee-with-inexact: DEC Alpha Options. (line 52) -* milp32: IA-64 Options. (line 121) -* mimadd: MIPS Options. (line 543) -* mimpure-text: Solaris 2 Options. (line 9) -* mincoming-stack-boundary: i386 and x86-64 Options. - (line 535) -* mindexed-addressing: SH Options. (line 345) -* mindexed-loads: ARC Options. (line 236) -* minline-all-stringops: i386 and x86-64 Options. - (line 842) -* minline-float-divide-max-throughput: IA-64 Options. (line 58) -* minline-float-divide-min-latency: IA-64 Options. (line 54) -* minline-ic_invalidate: SH Options. (line 125) -* minline-int-divide-max-throughput: IA-64 Options. (line 69) -* minline-int-divide-min-latency: IA-64 Options. (line 65) -* minline-plt: Blackfin Options. (line 137) -* minline-plt <1>: FRV Options. (line 81) -* minline-sqrt-max-throughput: IA-64 Options. (line 80) -* minline-sqrt-min-latency: IA-64 Options. (line 76) -* minline-stringops-dynamically: i386 and x86-64 Options. - (line 849) -* minsert-sched-nops: RS/6000 and PowerPC Options. - (line 545) -* mint-register: RX Options. (line 100) -* mint16: PDP-11 Options. (line 40) -* mint32: CR16 Options. (line 22) -* mint32 <1>: H8/300 Options. (line 38) -* mint32 <2>: PDP-11 Options. (line 44) -* mint8: AVR Options. (line 161) -* minterlink-compressed: MIPS Options. (line 117) -* minterlink-mips16: MIPS Options. (line 129) -* minvalid-symbols: SH Options. (line 379) -* mio-volatile: MeP Options. (line 74) -* mips1: MIPS Options. (line 77) -* mips16: MIPS Options. (line 102) -* mips2: MIPS Options. (line 80) -* mips3: MIPS Options. (line 83) -* mips32: MIPS Options. (line 89) -* mips32r2: MIPS Options. (line 92) -* mips3d: MIPS Options. (line 342) -* mips4: MIPS Options. (line 86) -* mips64: MIPS Options. (line 95) -* mips64r2: MIPS Options. (line 98) -* misel: RS/6000 and PowerPC Options. - (line 191) -* misize: ARC Options. (line 130) -* misize <1>: SH Options. (line 137) -* misr-vector-size: NDS32 Options. (line 51) -* missue-rate=NUMBER: M32R/D Options. (line 79) -* mivc2: MeP Options. (line 59) -* mjump-in-delay: HPPA Options. (line 23) -* mkernel: Darwin Options. (line 82) -* mknuthdiv: MMIX Options. (line 32) -* ml: MeP Options. (line 78) -* ml <1>: SH Options. (line 77) -* mlarge: MSP430 Options. (line 45) -* mlarge-data: DEC Alpha Options. (line 187) -* mlarge-data-threshold: i386 and x86-64 Options. - (line 421) -* mlarge-mem: SPU Options. (line 38) -* mlarge-text: DEC Alpha Options. (line 205) -* mleadz: MeP Options. (line 81) -* mleaf-id-shared-library: Blackfin Options. (line 91) -* mlibfuncs: MMIX Options. (line 10) -* mlibrary-pic: FRV Options. (line 135) -* mlinked-fp: FRV Options. (line 116) -* mlinker-opt: HPPA Options. (line 79) -* mlinux: CRIS Options. (line 91) -* mlittle: RS/6000 and PowerPC Options. - (line 494) -* mlittle-endian: AArch64 Options. (line 27) -* mlittle-endian <1>: ARC Options. (line 353) -* mlittle-endian <2>: ARM Options. (line 58) -* mlittle-endian <3>: C6X Options. (line 16) -* mlittle-endian <4>: IA-64 Options. (line 13) -* mlittle-endian <5>: MCore Options. (line 39) -* mlittle-endian <6>: MicroBlaze Options. (line 60) -* mlittle-endian <7>: NDS32 Options. (line 12) -* mlittle-endian <8>: RS/6000 and PowerPC Options. - (line 494) -* mlittle-endian <9>: TILE-Gx Options. (line 29) -* mlittle-endian-data: RX Options. (line 42) -* mliw: MN10300 Options. (line 54) -* mllsc: MIPS Options. (line 299) -* mlocal-sdata: MIPS Options. (line 401) -* mlock: ARC Options. (line 96) -* mlong-calls: Adapteva Epiphany Options. - (line 55) -* mlong-calls <1>: ARC Options. (line 161) -* mlong-calls <2>: ARM Options. (line 201) -* mlong-calls <3>: Blackfin Options. (line 120) -* mlong-calls <4>: FRV Options. (line 122) -* mlong-calls <5>: MIPS Options. (line 529) -* mlong-calls <6>: V850 Options. (line 10) -* mlong-double-128: i386 and x86-64 Options. - (line 407) -* mlong-double-128 <1>: S/390 and zSeries Options. - (line 29) -* mlong-double-64: i386 and x86-64 Options. - (line 407) -* mlong-double-64 <1>: S/390 and zSeries Options. - (line 29) -* mlong-double-80: i386 and x86-64 Options. - (line 407) -* mlong-jumps: V850 Options. (line 108) -* mlong-load-store: HPPA Options. (line 60) -* mlong32: MIPS Options. (line 376) -* mlong64: MIPS Options. (line 371) -* mlongcall: RS/6000 and PowerPC Options. - (line 753) -* mlongcalls: Xtensa Options. (line 72) -* mloop: V850 Options. (line 121) -* mlow-64k: Blackfin Options. (line 69) -* mlp64: IA-64 Options. (line 121) -* mlra: ARC Options. (line 241) -* mlra-priority-compact: ARC Options. (line 249) -* mlra-priority-noncompact: ARC Options. (line 252) -* mlra-priority-none: ARC Options. (line 246) -* MM: Preprocessor Options. - (line 210) -* mm: MeP Options. (line 84) -* mmac: CR16 Options. (line 9) -* mmac <1>: Score Options. (line 21) -* mmac-24: ARC Options. (line 105) -* mmac-d16: ARC Options. (line 101) -* mmac_24: ARC Options. (line 376) -* mmac_d16: ARC Options. (line 379) -* mmad: MIPS Options. (line 538) -* mmalloc64: VMS Options. (line 17) -* mmax: DEC Alpha Options. (line 163) -* mmax-constant-size: RX Options. (line 82) -* mmax-stack-frame: CRIS Options. (line 23) -* mmcount-ra-address: MIPS Options. (line 768) -* mmcu: AVR Options. (line 9) -* mmcu <1>: MIPS Options. (line 359) -* mmcu=: MSP430 Options. (line 14) -* MMD: Preprocessor Options. - (line 292) -* mmedia: FRV Options. (line 56) -* mmedium-calls: ARC Options. (line 165) -* mmemcpy: MicroBlaze Options. (line 13) -* mmemcpy <1>: MIPS Options. (line 523) -* mmemcpy-strategy=STRATEGY: i386 and x86-64 Options. - (line 871) -* mmemory-latency: DEC Alpha Options. (line 268) -* mmemory-model: SPARC Options. (line 283) -* mmemset-strategy=STRATEGY: i386 and x86-64 Options. - (line 883) -* mmfcrf: RS/6000 and PowerPC Options. - (line 27) -* mmfpgpr: RS/6000 and PowerPC Options. - (line 27) -* mmicromips: MIPS Options. (line 347) -* mminimal-toc: RS/6000 and PowerPC Options. - (line 285) -* mminmax: MeP Options. (line 87) -* mmixed-code: ARC Options. (line 264) -* mmmx: i386 and x86-64 Options. - (line 629) -* mmodel=large: M32R/D Options. (line 33) -* mmodel=medium: M32R/D Options. (line 27) -* mmodel=small: M32R/D Options. (line 18) -* mmovbe: i386 and x86-64 Options. - (line 715) -* mmt: MIPS Options. (line 355) -* mmul: RL78 Options. (line 13) -* mmul-bug-workaround: CRIS Options. (line 32) -* mmul32x16: ARC Options. (line 51) -* mmul64: ARC Options. (line 54) -* mmuladd: FRV Options. (line 64) -* mmulhw: RS/6000 and PowerPC Options. - (line 438) -* mmult: MeP Options. (line 90) -* mmult-bug: MN10300 Options. (line 9) -* mmultcost: ARC Options. (line 326) -* mmulti-cond-exec: FRV Options. (line 215) -* mmulticore: Blackfin Options. (line 141) -* mmultiple: RS/6000 and PowerPC Options. - (line 388) -* mmvcle: S/390 and zSeries Options. - (line 104) -* mmvme: RS/6000 and PowerPC Options. - (line 658) -* mn: H8/300 Options. (line 20) -* mnan=2008: MIPS Options. (line 280) -* mnan=legacy: MIPS Options. (line 280) -* mneon-for-64bits: ARM Options. (line 345) -* mnested-cond-exec: FRV Options. (line 230) -* mnhwloop: Score Options. (line 15) -* mno-16-bit: NDS32 Options. (line 42) -* mno-3dnow: i386 and x86-64 Options. - (line 629) -* mno-4byte-functions: MCore Options. (line 27) -* mno-8byte-align: V850 Options. (line 170) -* mno-abicalls: MIPS Options. (line 162) -* mno-abshi: PDP-11 Options. (line 58) -* mno-ac0: PDP-11 Options. (line 20) -* mno-address-space-conversion: SPU Options. (line 68) -* mno-align-double: i386 and x86-64 Options. - (line 366) -* mno-align-int: M680x0 Options. (line 263) -* mno-align-loops: M32R/D Options. (line 76) -* mno-align-stringops: i386 and x86-64 Options. - (line 837) -* mno-altivec: RS/6000 and PowerPC Options. - (line 132) -* mno-am33: MN10300 Options. (line 20) -* mno-app-regs: SPARC Options. (line 10) -* mno-app-regs <1>: V850 Options. (line 185) -* mno-as100-syntax: RX Options. (line 76) -* mno-atomic-updates: SPU Options. (line 83) -* mno-avoid-indexed-addresses: RS/6000 and PowerPC Options. - (line 420) -* mno-backchain: S/390 and zSeries Options. - (line 35) -* mno-base-addresses: MMIX Options. (line 53) -* mno-bit-align: RS/6000 and PowerPC Options. - (line 452) -* mno-bitfield: M680x0 Options. (line 227) -* mno-branch-likely: MIPS Options. (line 708) -* mno-branch-predict: MMIX Options. (line 48) -* mno-brcc: ARC Options. (line 201) -* mno-bwx: DEC Alpha Options. (line 163) -* mno-bypass-cache: Nios II Options. (line 34) -* mno-cache-volatile: Nios II Options. (line 40) -* mno-callgraph-data: MCore Options. (line 31) -* mno-cbcond: SPARC Options. (line 217) -* mno-check-zero-division: MIPS Options. (line 503) -* mno-cix: DEC Alpha Options. (line 163) -* mno-clearbss: MicroBlaze Options. (line 16) -* mno-cmov: NDS32 Options. (line 24) -* mno-cmpb: RS/6000 and PowerPC Options. - (line 27) -* mno-cond-exec: ARC Options. (line 213) -* mno-cond-exec <1>: FRV Options. (line 194) -* mno-cond-move: FRV Options. (line 166) -* mno-const-align: CRIS Options. (line 55) -* mno-const16: Xtensa Options. (line 10) -* mno-crt0: MN10300 Options. (line 43) -* mno-crt0 <1>: Moxie Options. (line 14) -* mno-crypto: RS/6000 and PowerPC Options. - (line 220) -* mno-csync-anomaly: Blackfin Options. (line 65) -* mno-custom-INSN: Nios II Options. (line 61) -* mno-data-align: CRIS Options. (line 55) -* mno-debug: S/390 and zSeries Options. - (line 110) -* mno-default: i386 and x86-64 Options. - (line 668) -* mno-direct-move: RS/6000 and PowerPC Options. - (line 226) -* mno-disable-callt: V850 Options. (line 92) -* mno-div: M680x0 Options. (line 206) -* mno-div <1>: MCore Options. (line 15) -* mno-dlmzb: RS/6000 and PowerPC Options. - (line 445) -* mno-double: FRV Options. (line 52) -* mno-dpfp-lrsr: ARC Options. (line 39) -* mno-dsp: MIPS Options. (line 313) -* mno-dspr2: MIPS Options. (line 319) -* mno-dwarf2-asm: IA-64 Options. (line 94) -* mno-dword: FRV Options. (line 44) -* mno-eabi: RS/6000 and PowerPC Options. - (line 682) -* mno-early-stop-bits: IA-64 Options. (line 100) -* mno-eflags: FRV Options. (line 155) -* mno-embedded-data: MIPS Options. (line 450) -* mno-ep: V850 Options. (line 16) -* mno-epilogue-cfi: ARC Options. (line 158) -* mno-epsilon: MMIX Options. (line 15) -* mno-eva: MIPS Options. (line 363) -* mno-explicit-relocs: DEC Alpha Options. (line 176) -* mno-explicit-relocs <1>: MIPS Options. (line 494) -* mno-exr: H8/300 Options. (line 33) -* mno-extern-sdata: MIPS Options. (line 413) -* mno-fancy-math-387: i386 and x86-64 Options. - (line 356) -* mno-fast-sw-div: Nios II Options. (line 46) -* mno-faster-structs: SPARC Options. (line 85) -* mno-fix: DEC Alpha Options. (line 163) -* mno-fix-24k: MIPS Options. (line 567) -* mno-fix-r10000: MIPS Options. (line 589) -* mno-fix-r4000: MIPS Options. (line 573) -* mno-fix-r4400: MIPS Options. (line 583) -* mno-flat: SPARC Options. (line 22) -* mno-float: MIPS Options. (line 241) -* mno-float32: PDP-11 Options. (line 48) -* mno-float64: PDP-11 Options. (line 52) -* mno-flush-func: M32R/D Options. (line 98) -* mno-flush-trap: M32R/D Options. (line 90) -* mno-fmaf: SPARC Options. (line 231) -* mno-fp-in-toc: RS/6000 and PowerPC Options. - (line 285) -* mno-fp-regs: DEC Alpha Options. (line 25) -* mno-fp-ret-in-387: i386 and x86-64 Options. - (line 346) -* mno-fprnd: RS/6000 and PowerPC Options. - (line 27) -* mno-fpu: SPARC Options. (line 39) -* mno-fsca: SH Options. (line 414) -* mno-fsrra: SH Options. (line 423) -* mno-fused-madd: IA-64 Options. (line 88) -* mno-fused-madd <1>: MIPS Options. (line 550) -* mno-fused-madd <2>: RS/6000 and PowerPC Options. - (line 429) -* mno-fused-madd <3>: S/390 and zSeries Options. - (line 135) -* mno-fused-madd <4>: SH Options. (line 405) -* mno-fused-madd <5>: Xtensa Options. (line 19) -* mno-gnu-as: IA-64 Options. (line 18) -* mno-gnu-ld: IA-64 Options. (line 23) -* mno-gotplt: CRIS Options. (line 81) -* mno-gp-direct: NDS32 Options. (line 48) -* mno-gpopt: MIPS Options. (line 435) -* mno-gpopt <1>: Nios II Options. (line 15) -* mno-hard-dfp: RS/6000 and PowerPC Options. - (line 27) -* mno-hard-dfp <1>: S/390 and zSeries Options. - (line 20) -* mno-hardlit: MCore Options. (line 10) -* mno-hw-div: Nios II Options. (line 55) -* mno-hw-mul: Nios II Options. (line 55) -* mno-hw-mulx: Nios II Options. (line 55) -* mno-id-shared-library: Blackfin Options. (line 87) -* mno-ieee-fp: i386 and x86-64 Options. - (line 328) -* mno-imadd: MIPS Options. (line 543) -* mno-inline-float-divide: IA-64 Options. (line 62) -* mno-inline-int-divide: IA-64 Options. (line 73) -* mno-inline-sqrt: IA-64 Options. (line 84) -* mno-int16: PDP-11 Options. (line 44) -* mno-int32: PDP-11 Options. (line 40) -* mno-interlink-compressed: MIPS Options. (line 117) -* mno-interlink-mips16: MIPS Options. (line 129) -* mno-interrupts: AVR Options. (line 167) -* mno-isel: RS/6000 and PowerPC Options. - (line 191) -* mno-knuthdiv: MMIX Options. (line 32) -* mno-leaf-id-shared-library: Blackfin Options. (line 97) -* mno-libfuncs: MMIX Options. (line 10) -* mno-llsc: MIPS Options. (line 299) -* mno-local-sdata: MIPS Options. (line 401) -* mno-long-calls: ARM Options. (line 201) -* mno-long-calls <1>: Blackfin Options. (line 120) -* mno-long-calls <2>: HPPA Options. (line 130) -* mno-long-calls <3>: MIPS Options. (line 529) -* mno-long-calls <4>: V850 Options. (line 10) -* mno-long-jumps: V850 Options. (line 108) -* mno-longcall: RS/6000 and PowerPC Options. - (line 753) -* mno-longcalls: Xtensa Options. (line 72) -* mno-low-64k: Blackfin Options. (line 73) -* mno-lsim: FR30 Options. (line 14) -* mno-lsim <1>: MCore Options. (line 46) -* mno-mad: MIPS Options. (line 538) -* mno-max: DEC Alpha Options. (line 163) -* mno-mcount-ra-address: MIPS Options. (line 768) -* mno-mcu: MIPS Options. (line 359) -* mno-mdmx: MIPS Options. (line 336) -* mno-media: FRV Options. (line 60) -* mno-memcpy: MIPS Options. (line 523) -* mno-mfcrf: RS/6000 and PowerPC Options. - (line 27) -* mno-mfpgpr: RS/6000 and PowerPC Options. - (line 27) -* mno-millicode: ARC Options. (line 255) -* mno-mips16: MIPS Options. (line 102) -* mno-mips3d: MIPS Options. (line 342) -* mno-mmicromips: MIPS Options. (line 347) -* mno-mmx: i386 and x86-64 Options. - (line 629) -* mno-mpy: ARC Options. (line 48) -* mno-mt: MIPS Options. (line 355) -* mno-mul-bug-workaround: CRIS Options. (line 32) -* mno-muladd: FRV Options. (line 68) -* mno-mulhw: RS/6000 and PowerPC Options. - (line 438) -* mno-mult-bug: MN10300 Options. (line 13) -* mno-multi-cond-exec: FRV Options. (line 223) -* mno-multiple: RS/6000 and PowerPC Options. - (line 388) -* mno-mvcle: S/390 and zSeries Options. - (line 104) -* mno-nested-cond-exec: FRV Options. (line 237) -* mno-omit-leaf-frame-pointer: AArch64 Options. (line 54) -* mno-optimize-membar: FRV Options. (line 249) -* mno-opts: MeP Options. (line 93) -* mno-pack: FRV Options. (line 151) -* mno-packed-stack: S/390 and zSeries Options. - (line 54) -* mno-paired: RS/6000 and PowerPC Options. - (line 205) -* mno-paired-single: MIPS Options. (line 330) -* mno-perf-ext: NDS32 Options. (line 30) -* mno-pic: IA-64 Options. (line 26) -* mno-pid: RX Options. (line 117) -* mno-plt: MIPS Options. (line 189) -* mno-popc: SPARC Options. (line 224) -* mno-popcntb: RS/6000 and PowerPC Options. - (line 27) -* mno-popcntd: RS/6000 and PowerPC Options. - (line 27) -* mno-postinc: Adapteva Epiphany Options. - (line 109) -* mno-postmodify: Adapteva Epiphany Options. - (line 109) -* mno-power8-fusion: RS/6000 and PowerPC Options. - (line 232) -* mno-power8-vector: RS/6000 and PowerPC Options. - (line 238) -* mno-powerpc-gfxopt: RS/6000 and PowerPC Options. - (line 27) -* mno-powerpc-gpopt: RS/6000 and PowerPC Options. - (line 27) -* mno-powerpc64: RS/6000 and PowerPC Options. - (line 27) -* mno-prolog-function: V850 Options. (line 23) -* mno-prologue-epilogue: CRIS Options. (line 71) -* mno-prototype: RS/6000 and PowerPC Options. - (line 642) -* mno-push-args: i386 and x86-64 Options. - (line 815) -* mno-quad-memory: RS/6000 and PowerPC Options. - (line 245) -* mno-quad-memory-atomic: RS/6000 and PowerPC Options. - (line 251) -* mno-red-zone: i386 and x86-64 Options. - (line 957) -* mno-register-names: IA-64 Options. (line 37) -* mno-regnames: RS/6000 and PowerPC Options. - (line 747) -* mno-relax: V850 Options. (line 103) -* mno-relax-immediate: MCore Options. (line 19) -* mno-relocatable: RS/6000 and PowerPC Options. - (line 468) -* mno-relocatable-lib: RS/6000 and PowerPC Options. - (line 479) -* mno-round-nearest: Adapteva Epiphany Options. - (line 51) -* mno-rtd: M680x0 Options. (line 258) -* mno-scc: FRV Options. (line 180) -* mno-sched-ar-data-spec: IA-64 Options. (line 134) -* mno-sched-ar-in-data-spec: IA-64 Options. (line 155) -* mno-sched-br-data-spec: IA-64 Options. (line 128) -* mno-sched-br-in-data-spec: IA-64 Options. (line 148) -* mno-sched-control-spec: IA-64 Options. (line 140) -* mno-sched-count-spec-in-critical-path: IA-64 Options. (line 182) -* mno-sched-in-control-spec: IA-64 Options. (line 162) -* mno-sched-prefer-non-control-spec-insns: IA-64 Options. (line 175) -* mno-sched-prefer-non-data-spec-insns: IA-64 Options. (line 168) -* mno-sched-prolog: ARM Options. (line 33) -* mno-sdata: ARC Options. (line 174) -* mno-sdata <1>: IA-64 Options. (line 42) -* mno-sdata <2>: RS/6000 and PowerPC Options. - (line 728) -* mno-sep-data: Blackfin Options. (line 115) -* mno-serialize-volatile: Xtensa Options. (line 35) -* mno-short: M680x0 Options. (line 222) -* mno-side-effects: CRIS Options. (line 46) -* mno-sim: RX Options. (line 71) -* mno-single-exit: MMIX Options. (line 65) -* mno-slow-bytes: MCore Options. (line 35) -* mno-small-exec: S/390 and zSeries Options. - (line 79) -* mno-smartmips: MIPS Options. (line 326) -* mno-soft-cmpsf: Adapteva Epiphany Options. - (line 29) -* mno-soft-float: DEC Alpha Options. (line 10) -* mno-space-regs: HPPA Options. (line 39) -* mno-spe: RS/6000 and PowerPC Options. - (line 200) -* mno-specld-anomaly: Blackfin Options. (line 55) -* mno-split-addresses: MIPS Options. (line 488) -* mno-sse: i386 and x86-64 Options. - (line 629) -* mno-stack-align: CRIS Options. (line 55) -* mno-stack-bias: SPARC Options. (line 307) -* mno-strict-align: M680x0 Options. (line 283) -* mno-strict-align <1>: RS/6000 and PowerPC Options. - (line 463) -* mno-string: RS/6000 and PowerPC Options. - (line 399) -* mno-sum-in-toc: RS/6000 and PowerPC Options. - (line 285) -* mno-sym32: MIPS Options. (line 386) -* mno-target-align: Xtensa Options. (line 59) -* mno-text-section-literals: Xtensa Options. (line 47) -* mno-tls-markers: RS/6000 and PowerPC Options. - (line 785) -* mno-toc: RS/6000 and PowerPC Options. - (line 488) -* mno-toplevel-symbols: MMIX Options. (line 39) -* mno-tpf-trace: S/390 and zSeries Options. - (line 129) -* mno-unaligned-access: ARM Options. (line 332) -* mno-unaligned-doubles: SPARC Options. (line 73) -* mno-uninit-const-in-rodata: MIPS Options. (line 458) -* mno-update: RS/6000 and PowerPC Options. - (line 410) -* mno-v3push: NDS32 Options. (line 36) -* mno-v8plus: SPARC Options. (line 188) -* mno-vect-double: Adapteva Epiphany Options. - (line 115) -* mno-virt: MIPS Options. (line 367) -* mno-vis: SPARC Options. (line 195) -* mno-vis2: SPARC Options. (line 201) -* mno-vis3: SPARC Options. (line 209) -* mno-vliw-branch: FRV Options. (line 208) -* mno-volatile-asm-stop: IA-64 Options. (line 32) -* mno-volatile-cache: ARC Options. (line 188) -* mno-vrsave: RS/6000 and PowerPC Options. - (line 170) -* mno-vsx: RS/6000 and PowerPC Options. - (line 214) -* mno-warn-multiple-fast-interrupts: RX Options. (line 143) -* mno-wide-bitfields: MCore Options. (line 23) -* mno-xgot: M680x0 Options. (line 315) -* mno-xgot <1>: MIPS Options. (line 199) -* mno-xl-compat: RS/6000 and PowerPC Options. - (line 320) -* mno-zdcbranch: SH Options. (line 396) -* mno-zero-extend: MMIX Options. (line 26) -* mnobitfield: M680x0 Options. (line 227) -* mnoieee: SH Options. (line 116) -* mnoliw: MN10300 Options. (line 59) -* mnomacsave: SH Options. (line 111) -* mnop-fun-dllimport: i386 and x86-64 Windows Options. - (line 22) -* mnops: Adapteva Epiphany Options. - (line 26) -* mnorm: ARC Options. (line 58) -* mnosetlb: MN10300 Options. (line 69) -* mnosplit-lohi: Adapteva Epiphany Options. - (line 109) -* momit-leaf-frame-pointer: AArch64 Options. (line 54) -* momit-leaf-frame-pointer <1>: Blackfin Options. (line 43) -* momit-leaf-frame-pointer <2>: i386 and x86-64 Options. - (line 887) -* mone-byte-bool: Darwin Options. (line 90) -* moptimize-membar: FRV Options. (line 244) -* MP: Preprocessor Options. - (line 239) -* mpa-risc-1-0: HPPA Options. (line 19) -* mpa-risc-1-1: HPPA Options. (line 19) -* mpa-risc-2-0: HPPA Options. (line 19) -* mpack: FRV Options. (line 147) -* mpacked-stack: S/390 and zSeries Options. - (line 54) -* mpadstruct: SH Options. (line 140) -* mpaired: RS/6000 and PowerPC Options. - (line 205) -* mpaired-single: MIPS Options. (line 330) -* mpc32: i386 and x86-64 Options. - (line 484) -* mpc64: i386 and x86-64 Options. - (line 484) -* mpc80: i386 and x86-64 Options. - (line 484) -* mpcrel: M680x0 Options. (line 275) -* mpdebug: CRIS Options. (line 36) -* mpe: RS/6000 and PowerPC Options. - (line 339) -* mpe-aligned-commons: i386 and x86-64 Windows Options. - (line 59) -* mperf-ext: NDS32 Options. (line 27) -* mpic-data-is-text-relative: ARM Options. (line 238) -* mpic-register: ARM Options. (line 231) -* mpid: RX Options. (line 117) -* mplt: MIPS Options. (line 189) -* mpointers-to-nested-functions: RS/6000 and PowerPC Options. - (line 868) -* mpoke-function-name: ARM Options. (line 244) -* mpopc: SPARC Options. (line 224) -* mpopcntb: RS/6000 and PowerPC Options. - (line 27) -* mpopcntd: RS/6000 and PowerPC Options. - (line 27) -* mportable-runtime: HPPA Options. (line 65) -* mpower8-fusion: RS/6000 and PowerPC Options. - (line 232) -* mpower8-vector: RS/6000 and PowerPC Options. - (line 238) -* mpowerpc-gfxopt: RS/6000 and PowerPC Options. - (line 27) -* mpowerpc-gpopt: RS/6000 and PowerPC Options. - (line 27) -* mpowerpc64: RS/6000 and PowerPC Options. - (line 27) -* mprefer-avx128: i386 and x86-64 Options. - (line 692) -* mprefer-short-insn-regs: Adapteva Epiphany Options. - (line 13) -* mprefergot: SH Options. (line 223) -* mpreferred-stack-boundary: i386 and x86-64 Options. - (line 514) -* mpretend-cmove: SH Options. (line 432) -* mprioritize-restricted-insns: RS/6000 and PowerPC Options. - (line 517) -* mprolog-function: V850 Options. (line 23) -* mprologue-epilogue: CRIS Options. (line 71) -* mprototype: RS/6000 and PowerPC Options. - (line 642) -* mpt-fixed: SH Options. (line 359) -* mpush-args: i386 and x86-64 Options. - (line 815) -* MQ: Preprocessor Options. - (line 266) -* mq-class: ARC Options. (line 269) -* mquad-memory: RS/6000 and PowerPC Options. - (line 245) -* mquad-memory-atomic: RS/6000 and PowerPC Options. - (line 251) -* mr10k-cache-barrier: MIPS Options. (line 630) -* mRcq: ARC Options. (line 273) -* mRcw: ARC Options. (line 277) -* mrecip: i386 and x86-64 Options. - (line 725) -* mrecip <1>: RS/6000 and PowerPC Options. - (line 797) -* mrecip-precision: RS/6000 and PowerPC Options. - (line 832) -* mrecip=opt: i386 and x86-64 Options. - (line 747) -* mrecip=opt <1>: RS/6000 and PowerPC Options. - (line 810) -* mreduced-regs: NDS32 Options. (line 15) -* mregister-names: IA-64 Options. (line 37) -* mregnames: RS/6000 and PowerPC Options. - (line 747) -* mregparm: i386 and x86-64 Options. - (line 451) -* mrelax: AVR Options. (line 171) -* mrelax <1>: H8/300 Options. (line 9) -* mrelax <2>: MN10300 Options. (line 46) -* mrelax <3>: MSP430 Options. (line 51) -* mrelax <4>: NDS32 Options. (line 76) -* mrelax <5>: RX Options. (line 95) -* mrelax <6>: SH Options. (line 85) -* mrelax <7>: V850 Options. (line 103) -* mrelax-immediate: MCore Options. (line 19) -* mrelax-pic-calls: MIPS Options. (line 755) -* mrelocatable: RS/6000 and PowerPC Options. - (line 468) -* mrelocatable-lib: RS/6000 and PowerPC Options. - (line 479) -* mrepeat: MeP Options. (line 96) -* mrestrict-it: ARM Options. (line 356) -* mreturn-pointer-on-d0: MN10300 Options. (line 36) -* mrh850-abi: V850 Options. (line 127) -* mrtd: i386 and x86-64 Options. - (line 427) -* mrtd <1>: M680x0 Options. (line 236) -* mrtd <2>: Function Attributes. - (line 209) -* mrtp: VxWorks Options. (line 11) -* mrtsc: ARC Options. (line 109) -* ms: H8/300 Options. (line 17) -* ms <1>: MeP Options. (line 100) -* ms2600: H8/300 Options. (line 24) -* msafe-dma: SPU Options. (line 18) -* msafe-hints: SPU Options. (line 112) -* msahf: i386 and x86-64 Options. - (line 705) -* msatur: MeP Options. (line 105) -* msave-acc-in-interrupts: RX Options. (line 109) -* msave-toc-indirect: RS/6000 and PowerPC Options. - (line 880) -* mscc: FRV Options. (line 173) -* msched-ar-data-spec: IA-64 Options. (line 134) -* msched-ar-in-data-spec: IA-64 Options. (line 155) -* msched-br-data-spec: IA-64 Options. (line 128) -* msched-br-in-data-spec: IA-64 Options. (line 148) -* msched-control-spec: IA-64 Options. (line 140) -* msched-costly-dep: RS/6000 and PowerPC Options. - (line 524) -* msched-count-spec-in-critical-path: IA-64 Options. (line 182) -* msched-fp-mem-deps-zero-cost: IA-64 Options. (line 198) -* msched-in-control-spec: IA-64 Options. (line 162) -* msched-max-memory-insns: IA-64 Options. (line 207) -* msched-max-memory-insns-hard-limit: IA-64 Options. (line 213) -* msched-prefer-non-control-spec-insns: IA-64 Options. (line 175) -* msched-prefer-non-data-spec-insns: IA-64 Options. (line 168) -* msched-spec-ldc: IA-64 Options. (line 187) -* msched-spec-ldc <1>: IA-64 Options. (line 190) -* msched-stop-bits-after-every-cycle: IA-64 Options. (line 194) -* mschedule: HPPA Options. (line 72) -* mscore5: Score Options. (line 25) -* mscore5u: Score Options. (line 28) -* mscore7: Score Options. (line 31) -* mscore7d: Score Options. (line 35) -* msda: V850 Options. (line 40) -* msdata: IA-64 Options. (line 42) -* msdata <1>: RS/6000 and PowerPC Options. - (line 715) -* msdata=all: C6X Options. (line 30) -* msdata=data: RS/6000 and PowerPC Options. - (line 720) -* msdata=default: C6X Options. (line 22) -* msdata=default <1>: RS/6000 and PowerPC Options. - (line 715) -* msdata=eabi: RS/6000 and PowerPC Options. - (line 696) -* msdata=none: C6X Options. (line 35) -* msdata=none <1>: M32R/D Options. (line 40) -* msdata=none <2>: RS/6000 and PowerPC Options. - (line 728) -* msdata=sdata: M32R/D Options. (line 49) -* msdata=sysv: RS/6000 and PowerPC Options. - (line 706) -* msdata=use: M32R/D Options. (line 53) -* msdram: Blackfin Options. (line 171) -* msdram <1>: MeP Options. (line 110) -* msecure-plt: RS/6000 and PowerPC Options. - (line 180) -* msel-sched-dont-check-control-spec: IA-64 Options. (line 203) -* msep-data: Blackfin Options. (line 109) -* mserialize-volatile: Xtensa Options. (line 35) -* msetlb: MN10300 Options. (line 64) -* mshared-library-id: Blackfin Options. (line 102) -* mshort: M680x0 Options. (line 216) -* msign-extend-enabled: LM32 Options. (line 18) -* msim: Blackfin Options. (line 36) -* msim <1>: C6X Options. (line 19) -* msim <2>: CR16 Options. (line 18) -* msim <3>: M32C Options. (line 13) -* msim <4>: MeP Options. (line 114) -* msim <5>: MSP430 Options. (line 40) -* msim <6>: RL78 Options. (line 7) -* msim <7>: RS/6000 and PowerPC Options. - (line 652) -* msim <8>: RX Options. (line 71) -* msim <9>: Xstormy16 Options. (line 9) -* msimd: ARC Options. (line 71) -* msimnovec: MeP Options. (line 117) -* msimple-fpu: RS/6000 and PowerPC Options. - (line 372) -* msingle-exit: MMIX Options. (line 65) -* msingle-float: MIPS Options. (line 251) -* msingle-float <1>: RS/6000 and PowerPC Options. - (line 368) -* msingle-pic-base: ARM Options. (line 225) -* msingle-pic-base <1>: RS/6000 and PowerPC Options. - (line 511) -* msio: HPPA Options. (line 99) -* msize-level: ARC Options. (line 281) -* mslow-bytes: MCore Options. (line 35) -* mslow-flash-data: ARM Options. (line 350) -* msmall: MSP430 Options. (line 48) -* msmall-data: DEC Alpha Options. (line 187) -* msmall-data-limit: RX Options. (line 47) -* msmall-divides: MicroBlaze Options. (line 39) -* msmall-exec: S/390 and zSeries Options. - (line 79) -* msmall-mem: SPU Options. (line 38) -* msmall-model: FR30 Options. (line 9) -* msmall-text: DEC Alpha Options. (line 205) -* msmall16: Adapteva Epiphany Options. - (line 66) -* msmallc: Nios II Options. (line 226) -* msmartmips: MIPS Options. (line 326) -* msoft-float: ARC Options. (line 75) -* msoft-float <1>: DEC Alpha Options. (line 10) -* msoft-float <2>: FRV Options. (line 27) -* msoft-float <3>: HPPA Options. (line 85) -* msoft-float <4>: i386 and x86-64 Options. - (line 333) -* msoft-float <5>: M680x0 Options. (line 200) -* msoft-float <6>: MicroBlaze Options. (line 7) -* msoft-float <7>: MIPS Options. (line 237) -* msoft-float <8>: PDP-11 Options. (line 13) -* msoft-float <9>: RS/6000 and PowerPC Options. - (line 362) -* msoft-float <10>: S/390 and zSeries Options. - (line 11) -* msoft-float <11>: SPARC Options. (line 39) -* msoft-float <12>: V850 Options. (line 113) -* msoft-quad-float: SPARC Options. (line 59) -* msp8: AVR Options. (line 185) -* mspace: SH Options. (line 220) -* mspace <1>: V850 Options. (line 30) -* mspe: RS/6000 and PowerPC Options. - (line 200) -* mspecld-anomaly: Blackfin Options. (line 50) -* mspfp: ARC Options. (line 62) -* mspfp-compact: ARC Options. (line 63) -* mspfp-fast: ARC Options. (line 67) -* mspfp_compact: ARC Options. (line 382) -* mspfp_fast: ARC Options. (line 385) -* msplit-addresses: MIPS Options. (line 488) -* msplit-vecmove-early: Adapteva Epiphany Options. - (line 126) -* msse: i386 and x86-64 Options. - (line 629) -* msse2avx: i386 and x86-64 Options. - (line 905) -* msseregparm: i386 and x86-64 Options. - (line 462) -* mstack-align: CRIS Options. (line 55) -* mstack-bias: SPARC Options. (line 307) -* mstack-check-l1: Blackfin Options. (line 76) -* mstack-guard: S/390 and zSeries Options. - (line 154) -* mstack-increment: MCore Options. (line 50) -* mstack-offset: Adapteva Epiphany Options. - (line 37) -* mstack-protector-guard=GUARD: i386 and x86-64 Options. - (line 928) -* mstack-size: S/390 and zSeries Options. - (line 154) -* mstackrealign: i386 and x86-64 Options. - (line 505) -* mstdmain: SPU Options. (line 44) -* mstrict-align: AArch64 Options. (line 49) -* mstrict-align <1>: M680x0 Options. (line 283) -* mstrict-align <2>: RS/6000 and PowerPC Options. - (line 463) -* mstrict-X: AVR Options. (line 198) -* mstring: RS/6000 and PowerPC Options. - (line 399) -* mstringop-strategy=ALG: i386 and x86-64 Options. - (line 853) -* mstructure-size-boundary: ARM Options. (line 182) -* msvr4-struct-return: RS/6000 and PowerPC Options. - (line 604) -* mswap: ARC Options. (line 82) -* mswape: ARC Options. (line 114) -* msym32: MIPS Options. (line 386) -* msynci: MIPS Options. (line 740) -* msys-crt0: Nios II Options. (line 230) -* msys-lib: Nios II Options. (line 234) -* MT: Preprocessor Options. - (line 251) -* mtarget-align: Xtensa Options. (line 59) -* mtas: SH Options. (line 211) -* mtda: V850 Options. (line 34) -* mtelephony: ARC Options. (line 119) -* mtext-section-literals: Xtensa Options. (line 47) -* mtf: MeP Options. (line 121) -* mthread: i386 and x86-64 Windows Options. - (line 26) -* mthreads: i386 and x86-64 Options. - (line 830) -* mthumb: ARM Options. (line 266) -* mthumb-interwork: ARM Options. (line 25) -* mtiny-stack: AVR Options. (line 212) -* mtiny=: MeP Options. (line 125) -* mTLS: FRV Options. (line 90) -* mtls: FRV Options. (line 94) -* mtls-dialect: ARM Options. (line 308) -* mtls-dialect <1>: i386 and x86-64 Options. - (line 808) -* mtls-dialect=desc: AArch64 Options. (line 58) -* mtls-dialect=traditional: AArch64 Options. (line 62) -* mtls-direct-seg-refs: i386 and x86-64 Options. - (line 895) -* mtls-markers: RS/6000 and PowerPC Options. - (line 785) -* mtls-size: IA-64 Options. (line 112) -* mtoc: RS/6000 and PowerPC Options. - (line 488) -* mtomcat-stats: FRV Options. (line 254) -* mtoplevel-symbols: MMIX Options. (line 39) -* mtp: ARM Options. (line 300) -* mtpcs-frame: ARM Options. (line 273) -* mtpcs-leaf-frame: ARM Options. (line 279) -* mtpf-trace: S/390 and zSeries Options. - (line 129) -* mtrap-precision: DEC Alpha Options. (line 109) -* mtune: AArch64 Options. (line 83) -* mtune <1>: ARC Options. (line 302) -* mtune <2>: ARC Options. (line 388) -* mtune <3>: ARM Options. (line 97) -* mtune <4>: CRIS Options. (line 17) -* mtune <5>: DEC Alpha Options. (line 259) -* mtune <6>: i386 and x86-64 Options. - (line 216) -* mtune <7>: IA-64 Options. (line 116) -* mtune <8>: M680x0 Options. (line 68) -* mtune <9>: MIPS Options. (line 63) -* mtune <10>: MN10300 Options. (line 30) -* mtune <11>: RS/6000 and PowerPC Options. - (line 110) -* mtune <12>: S/390 and zSeries Options. - (line 122) -* mtune <13>: SPARC Options. (line 174) -* mtune-ctrl=FEATURE-LIST: i386 and x86-64 Options. - (line 658) -* mucb-mcount: ARC Options. (line 179) -* muclibc: GNU/Linux Options. (line 13) -* muls: Score Options. (line 18) -* multcost: ARC Options. (line 393) -* multcost=NUMBER: SH Options. (line 233) -* multilib-library-pic: FRV Options. (line 110) -* multiply-enabled: LM32 Options. (line 15) -* multiply_defined: Darwin Options. (line 196) -* multiply_defined_unused: Darwin Options. (line 196) -* multi_module: Darwin Options. (line 196) -* munalign-prob-threshold: ARC Options. (line 330) -* munaligned-access: ARM Options. (line 332) -* munaligned-doubles: SPARC Options. (line 73) -* municode: i386 and x86-64 Windows Options. - (line 30) -* muninit-const-in-rodata: MIPS Options. (line 458) -* munix: VAX Options. (line 9) -* munix-asm: PDP-11 Options. (line 68) -* munsafe-dma: SPU Options. (line 18) -* mupdate: RS/6000 and PowerPC Options. - (line 410) -* muser-enabled: LM32 Options. (line 21) -* musermode: SH Options. (line 228) -* mv3push: NDS32 Options. (line 33) -* mv850: V850 Options. (line 49) -* mv850e: V850 Options. (line 79) -* mv850e1: V850 Options. (line 70) -* mv850e2: V850 Options. (line 66) -* mv850e2v3: V850 Options. (line 61) -* mv850e2v4: V850 Options. (line 57) -* mv850e3v5: V850 Options. (line 52) -* mv850es: V850 Options. (line 75) -* mv8plus: SPARC Options. (line 188) -* mveclibabi: i386 and x86-64 Options. - (line 776) -* mveclibabi <1>: RS/6000 and PowerPC Options. - (line 841) -* mvect8-ret-in-mem: i386 and x86-64 Options. - (line 472) -* mvirt: MIPS Options. (line 367) -* mvis: SPARC Options. (line 195) -* mvis2: SPARC Options. (line 201) -* mvis3: SPARC Options. (line 209) -* mvliw-branch: FRV Options. (line 201) -* mvms-return-codes: VMS Options. (line 9) -* mvolatile-asm-stop: IA-64 Options. (line 32) -* mvolatile-cache: ARC Options. (line 184) -* mvr4130-align: MIPS Options. (line 729) -* mvrsave: RS/6000 and PowerPC Options. - (line 170) -* mvsx: RS/6000 and PowerPC Options. - (line 214) -* mvxworks: RS/6000 and PowerPC Options. - (line 673) -* mvzeroupper: i386 and x86-64 Options. - (line 686) -* mwarn-cell-microcode: RS/6000 and PowerPC Options. - (line 176) -* mwarn-dynamicstack: S/390 and zSeries Options. - (line 148) -* mwarn-framesize: S/390 and zSeries Options. - (line 140) -* mwarn-multiple-fast-interrupts: RX Options. (line 143) -* mwarn-reloc: SPU Options. (line 10) -* mwide-bitfields: MCore Options. (line 23) -* mwin32: i386 and x86-64 Windows Options. - (line 35) -* mwindows: i386 and x86-64 Windows Options. - (line 41) -* mword-relocations: ARM Options. (line 319) -* mwords-little-endian: ARM Options. (line 66) -* mx32: i386 and x86-64 Options. - (line 940) -* mxgot: M680x0 Options. (line 315) -* mxgot <1>: MIPS Options. (line 199) -* mxilinx-fpu: RS/6000 and PowerPC Options. - (line 383) -* mxl-barrel-shift: MicroBlaze Options. (line 33) -* mxl-compat: RS/6000 and PowerPC Options. - (line 320) -* mxl-float-convert: MicroBlaze Options. (line 51) -* mxl-float-sqrt: MicroBlaze Options. (line 54) -* mxl-gp-opt: MicroBlaze Options. (line 45) -* mxl-multiply-high: MicroBlaze Options. (line 48) -* mxl-pattern-compare: MicroBlaze Options. (line 36) -* mxl-reorder: MicroBlaze Options. (line 63) -* mxl-soft-div: MicroBlaze Options. (line 30) -* mxl-soft-mul: MicroBlaze Options. (line 27) -* mxl-stack-check: MicroBlaze Options. (line 42) -* mxy: ARC Options. (line 124) -* myellowknife: RS/6000 and PowerPC Options. - (line 668) -* mzarch: S/390 and zSeries Options. - (line 94) -* mzda: V850 Options. (line 45) -* mzdcbranch: SH Options. (line 396) -* mzero-extend: MMIX Options. (line 26) -* no-canonical-prefixes: Overall Options. (line 334) -* no-integrated-cpp: Preprocessor Options. - (line 34) -* no-sysroot-suffix: Directory Options. (line 109) -* noall_load: Darwin Options. (line 196) -* nocpp: MIPS Options. (line 562) -* nodefaultlibs: Link Options. (line 62) -* nofixprebinding: Darwin Options. (line 196) -* nofpu: RX Options. (line 17) -* nolibdld: HPPA Options. (line 182) -* nomultidefs: Darwin Options. (line 196) -* non-static: VxWorks Options. (line 16) -* noprebind: Darwin Options. (line 196) -* noseglinkedit: Darwin Options. (line 196) -* nostartfiles: Link Options. (line 57) -* nostdinc: Preprocessor Options. - (line 401) -* nostdinc++: C++ Dialect Options. - (line 396) -* nostdinc++ <1>: Preprocessor Options. - (line 406) -* nostdlib: Link Options. (line 74) -* no_dead_strip_inits_and_terms: Darwin Options. (line 196) -* o: Overall Options. (line 192) -* O: Optimize Options. (line 39) -* o <1>: Preprocessor Options. - (line 87) -* O0: Optimize Options. (line 129) -* O1: Optimize Options. (line 39) -* O2: Optimize Options. (line 83) -* O3: Optimize Options. (line 121) -* Ofast: Optimize Options. (line 143) -* Og: Optimize Options. (line 149) -* Os: Optimize Options. (line 133) -* p: Debugging Options. (line 410) -* P: Preprocessor Options. - (line 647) -* pagezero_size: Darwin Options. (line 196) -* param: Optimize Options. (line 2298) -* pass-exit-codes: Overall Options. (line 150) -* pedantic: Standards. (line 16) -* pedantic <1>: Warning Options. (line 71) -* pedantic <2>: Preprocessor Options. - (line 175) -* pedantic <3>: C Extensions. (line 6) -* pedantic <4>: Alternate Keywords. (line 30) -* pedantic <5>: Warnings and Errors. - (line 25) -* pedantic-errors: Standards. (line 16) -* pedantic-errors <1>: Warning Options. (line 112) -* pedantic-errors <2>: Preprocessor Options. - (line 180) -* pedantic-errors <3>: Non-bugs. (line 216) -* pedantic-errors <4>: Warnings and Errors. - (line 25) -* pg: Debugging Options. (line 416) -* pie: Link Options. (line 99) -* pipe: Overall Options. (line 215) -* prebind: Darwin Options. (line 196) -* prebind_all_twolevel_modules: Darwin Options. (line 196) -* print-file-name: Debugging Options. (line 1343) -* print-libgcc-file-name: Debugging Options. (line 1377) -* print-multi-directory: Debugging Options. (line 1349) -* print-multi-lib: Debugging Options. (line 1354) -* print-multi-os-directory: Debugging Options. (line 1361) -* print-multiarch: Debugging Options. (line 1370) -* print-objc-runtime-info: Objective-C and Objective-C++ Dialect Options. - (line 203) -* print-prog-name: Debugging Options. (line 1374) -* print-search-dirs: Debugging Options. (line 1385) -* print-sysroot: Debugging Options. (line 1398) -* print-sysroot-headers-suffix: Debugging Options. (line 1405) -* private_bundle: Darwin Options. (line 196) -* pthread: RS/6000 and PowerPC Options. - (line 792) -* pthread <1>: Solaris 2 Options. (line 30) -* pthreads: Solaris 2 Options. (line 24) -* Q: Debugging Options. (line 422) -* Qn: System V Options. (line 18) -* Qy: System V Options. (line 14) -* rdynamic: Link Options. (line 105) -* read_only_relocs: Darwin Options. (line 196) -* remap: Preprocessor Options. - (line 694) -* S: Overall Options. (line 175) -* S <1>: Link Options. (line 20) -* s: Link Options. (line 112) -* save-temps: Debugging Options. (line 1252) -* save-temps=obj: Debugging Options. (line 1278) -* sectalign: Darwin Options. (line 196) -* sectcreate: Darwin Options. (line 196) -* sectobjectsymbols: Darwin Options. (line 196) -* sectobjectsymbols <1>: Darwin Options. (line 196) -* sectorder: Darwin Options. (line 196) -* seg1addr: Darwin Options. (line 196) -* segaddr: Darwin Options. (line 196) -* seglinkedit: Darwin Options. (line 196) -* segprot: Darwin Options. (line 196) -* segs_read_only_addr: Darwin Options. (line 196) -* segs_read_only_addr <1>: Darwin Options. (line 196) -* segs_read_write_addr: Darwin Options. (line 196) -* segs_read_write_addr <1>: Darwin Options. (line 196) -* seg_addr_table: Darwin Options. (line 196) -* seg_addr_table_filename: Darwin Options. (line 196) -* shared: Link Options. (line 120) -* shared-libgcc: Link Options. (line 128) -* short-calls: Adapteva Epiphany Options. - (line 61) -* sim: CRIS Options. (line 95) -* sim2: CRIS Options. (line 101) -* single_module: Darwin Options. (line 196) -* specs: Directory Options. (line 86) -* static: Link Options. (line 116) -* static <1>: Darwin Options. (line 196) -* static <2>: HPPA Options. (line 186) -* static-libasan: Link Options. (line 163) -* static-libgcc: Link Options. (line 128) -* static-liblsan: Link Options. (line 179) -* static-libstdc++: Link Options. (line 196) -* static-libtsan: Link Options. (line 171) -* static-libubsan: Link Options. (line 187) -* std: Standards. (line 16) -* std <1>: C Dialect Options. (line 46) -* std <2>: Other Builtins. (line 21) -* std <3>: Non-bugs. (line 107) -* std=: Preprocessor Options. - (line 340) -* sub_library: Darwin Options. (line 196) -* sub_umbrella: Darwin Options. (line 196) -* symbolic: Link Options. (line 207) -* sysroot: Directory Options. (line 94) -* T: Link Options. (line 213) -* target-help: Overall Options. (line 230) -* target-help <1>: Preprocessor Options. - (line 699) -* threads: HPPA Options. (line 199) -* time: Debugging Options. (line 1293) -* tno-android-cc: GNU/Linux Options. (line 31) -* tno-android-ld: GNU/Linux Options. (line 35) -* traditional: C Dialect Options. (line 333) -* traditional <1>: Incompatibilities. (line 6) -* traditional-cpp: C Dialect Options. (line 333) -* traditional-cpp <1>: Preprocessor Options. - (line 677) -* trigraphs: C Dialect Options. (line 328) -* trigraphs <1>: Preprocessor Options. - (line 681) -* twolevel_namespace: Darwin Options. (line 196) -* U: Preprocessor Options. - (line 69) -* u: Link Options. (line 245) -* umbrella: Darwin Options. (line 196) -* undef: Preprocessor Options. - (line 73) -* undefined: Darwin Options. (line 196) -* unexported_symbols_list: Darwin Options. (line 196) -* v: Overall Options. (line 203) -* v <1>: Preprocessor Options. - (line 703) -* version: Overall Options. (line 338) -* version <1>: Preprocessor Options. - (line 715) -* w: Warning Options. (line 25) -* W: Warning Options. (line 166) -* W <1>: Warning Options. (line 1265) -* W <2>: Warning Options. (line 1349) -* w <1>: Preprocessor Options. - (line 171) -* W <3>: Incompatibilities. (line 64) -* Wa: Assembler Options. (line 9) -* Wabi: C++ Dialect Options. - (line 404) -* Waddr-space-convert: AVR Options. (line 215) -* Waddress: Warning Options. (line 1182) -* Waggregate-return: Warning Options. (line 1200) -* Waggressive-loop-optimizations: Warning Options. (line 1205) -* Wall: Warning Options. (line 116) -* Wall <1>: Preprocessor Options. - (line 93) -* Wall <2>: Standard Libraries. (line 6) -* Warray-bounds: Warning Options. (line 824) -* Wassign-intercept: Objective-C and Objective-C++ Dialect Options. - (line 157) -* Wattributes: Warning Options. (line 1210) -* Wbad-function-cast: Warning Options. (line 1039) -* Wbuiltin-macro-redefined: Warning Options. (line 1216) -* Wcast-align: Warning Options. (line 1070) -* Wcast-qual: Warning Options. (line 1054) -* Wchar-subscripts: Warning Options. (line 204) -* Wclobbered: Warning Options. (line 1089) -* Wcomment: Warning Options. (line 209) -* Wcomment <1>: Preprocessor Options. - (line 101) -* Wcomments: Preprocessor Options. - (line 101) -* Wconditionally-supported: Warning Options. (line 1093) -* Wconversion: Warning Options. (line 1096) -* Wconversion-null: Warning Options. (line 1114) -* Wctor-dtor-privacy: C++ Dialect Options. - (line 511) -* Wdate-time: Warning Options. (line 1122) -* Wdeclaration-after-statement: Warning Options. (line 956) -* Wdelete-incomplete: Warning Options. (line 1127) -* Wdelete-non-virtual-dtor: C++ Dialect Options. - (line 518) -* Wdeprecated: Warning Options. (line 1331) -* Wdeprecated-declarations: Warning Options. (line 1335) -* Wdisabled-optimization: Warning Options. (line 1495) -* Wdiv-by-zero: Warning Options. (line 829) -* Wdouble-promotion: Warning Options. (line 233) -* weak_reference_mismatches: Darwin Options. (line 196) -* Weffc++: C++ Dialect Options. - (line 598) -* Wempty-body: Warning Options. (line 1134) -* Wendif-labels: Warning Options. (line 966) -* Wendif-labels <1>: Preprocessor Options. - (line 148) -* Wenum-compare: Warning Options. (line 1138) -* Werror: Warning Options. (line 28) -* Werror <1>: Preprocessor Options. - (line 161) -* Werror=: Warning Options. (line 31) -* Wextra: Warning Options. (line 166) -* Wextra <1>: Warning Options. (line 1265) -* Wextra <2>: Warning Options. (line 1349) -* Wfatal-errors: Warning Options. (line 48) -* Wfloat-conversion: Warning Options. (line 1168) -* Wfloat-equal: Warning Options. (line 856) -* Wformat: Warning Options. (line 252) -* Wformat <1>: Warning Options. (line 277) -* Wformat <2>: Warning Options. (line 803) -* Wformat <3>: Function Attributes. - (line 453) -* Wformat-contains-nul: Warning Options. (line 286) -* Wformat-extra-args: Warning Options. (line 290) -* Wformat-nonliteral: Warning Options. (line 314) -* Wformat-nonliteral <1>: Function Attributes. - (line 518) -* Wformat-security: Warning Options. (line 319) -* Wformat-y2k: Warning Options. (line 331) -* Wformat-zero-length: Warning Options. (line 304) -* Wformat=: Warning Options. (line 252) -* Wformat=1: Warning Options. (line 277) -* Wformat=2: Warning Options. (line 309) -* Wframe-larger-than: Warning Options. (line 980) -* Wfree-nonheap-object: Warning Options. (line 989) -* whatsloaded: Darwin Options. (line 196) -* whyload: Darwin Options. (line 196) -* Wignored-qualifiers: Warning Options. (line 371) -* Wimplicit: Warning Options. (line 367) -* Wimplicit-function-declaration: Warning Options. (line 361) -* Wimplicit-int: Warning Options. (line 357) -* Winherited-variadic-ctor: Warning Options. (line 1405) -* Winit-self: Warning Options. (line 342) -* Winline: Warning Options. (line 1410) -* Winline <1>: Inline. (line 63) -* Wint-to-pointer-cast: Warning Options. (line 1437) -* Winvalid-offsetof: Warning Options. (line 1423) -* Winvalid-pch: Warning Options. (line 1446) -* Wjump-misses-init: Warning Options. (line 1144) -* Wl: Link Options. (line 237) -* Wlarger-than-LEN: Warning Options. (line 977) -* Wlarger-than=LEN: Warning Options. (line 977) -* Wliteral-suffix: C++ Dialect Options. - (line 525) -* Wlogical-op: Warning Options. (line 1195) -* Wlong-long: Warning Options. (line 1450) -* Wmain: Warning Options. (line 382) -* Wmaybe-uninitialized: Warning Options. (line 640) -* Wmissing-braces: Warning Options. (line 389) -* Wmissing-declarations: Warning Options. (line 1255) -* Wmissing-field-initializers: Warning Options. (line 1265) -* Wmissing-format-attribute: Warning Options. (line 803) -* Wmissing-include-dirs: Warning Options. (line 400) -* Wmissing-parameter-type: Warning Options. (line 1237) -* Wmissing-prototypes: Warning Options. (line 1245) -* Wmultichar: Warning Options. (line 1283) -* Wnarrowing: C++ Dialect Options. - (line 546) -* Wnested-externs: Warning Options. (line 1402) -* Wno-abi: C++ Dialect Options. - (line 404) -* Wno-address: Warning Options. (line 1182) -* Wno-aggregate-return: Warning Options. (line 1200) -* Wno-aggressive-loop-optimizations: Warning Options. (line 1205) -* Wno-all: Warning Options. (line 116) -* Wno-array-bounds: Warning Options. (line 824) -* Wno-assign-intercept: Objective-C and Objective-C++ Dialect Options. - (line 157) -* Wno-attributes: Warning Options. (line 1210) -* Wno-bad-function-cast: Warning Options. (line 1039) -* Wno-builtin-macro-redefined: Warning Options. (line 1216) -* Wno-cast-align: Warning Options. (line 1070) -* Wno-cast-qual: Warning Options. (line 1054) -* Wno-char-subscripts: Warning Options. (line 204) -* Wno-clobbered: Warning Options. (line 1089) -* Wno-comment: Warning Options. (line 209) -* Wno-conditionally-supported: Warning Options. (line 1093) -* Wno-conversion: Warning Options. (line 1096) -* Wno-conversion-null: Warning Options. (line 1114) -* Wno-coverage-mismatch: Warning Options. (line 214) -* Wno-ctor-dtor-privacy: C++ Dialect Options. - (line 511) -* Wno-date-time: Warning Options. (line 1122) -* Wno-declaration-after-statement: Warning Options. (line 956) -* Wno-delete-incomplete: Warning Options. (line 1127) -* Wno-delete-non-virtual-dtor: C++ Dialect Options. - (line 518) -* Wno-deprecated: Warning Options. (line 1331) -* Wno-deprecated-declarations: Warning Options. (line 1335) -* Wno-disabled-optimization: Warning Options. (line 1495) -* Wno-div-by-zero: Warning Options. (line 829) -* Wno-double-promotion: Warning Options. (line 233) -* Wno-effc++: C++ Dialect Options. - (line 598) -* Wno-empty-body: Warning Options. (line 1134) -* Wno-endif-labels: Warning Options. (line 966) -* Wno-enum-compare: Warning Options. (line 1138) -* Wno-error: Warning Options. (line 28) -* Wno-error=: Warning Options. (line 31) -* Wno-extra: Warning Options. (line 166) -* Wno-extra <1>: Warning Options. (line 1265) -* Wno-extra <2>: Warning Options. (line 1349) -* Wno-fatal-errors: Warning Options. (line 48) -* Wno-float-conversion: Warning Options. (line 1168) -* Wno-float-equal: Warning Options. (line 856) -* Wno-format: Warning Options. (line 252) -* Wno-format <1>: Warning Options. (line 803) -* Wno-format-contains-nul: Warning Options. (line 286) -* Wno-format-extra-args: Warning Options. (line 290) -* Wno-format-nonliteral: Warning Options. (line 314) -* Wno-format-security: Warning Options. (line 319) -* Wno-format-y2k: Warning Options. (line 331) -* Wno-format-zero-length: Warning Options. (line 304) -* Wno-free-nonheap-object: Warning Options. (line 989) -* Wno-ignored-qualifiers: Warning Options. (line 371) -* Wno-implicit: Warning Options. (line 367) -* Wno-implicit-function-declaration: Warning Options. (line 361) -* Wno-implicit-int: Warning Options. (line 357) -* Wno-inherited-variadic-ctor: Warning Options. (line 1405) -* Wno-init-self: Warning Options. (line 342) -* Wno-inline: Warning Options. (line 1410) -* Wno-int-to-pointer-cast: Warning Options. (line 1437) -* Wno-invalid-offsetof: Warning Options. (line 1423) -* Wno-invalid-pch: Warning Options. (line 1446) -* Wno-jump-misses-init: Warning Options. (line 1144) -* Wno-literal-suffix: C++ Dialect Options. - (line 525) -* Wno-logical-op: Warning Options. (line 1195) -* Wno-long-long: Warning Options. (line 1450) -* Wno-main: Warning Options. (line 382) -* Wno-maybe-uninitialized: Warning Options. (line 640) -* Wno-missing-braces: Warning Options. (line 389) -* Wno-missing-declarations: Warning Options. (line 1255) -* Wno-missing-field-initializers: Warning Options. (line 1265) -* Wno-missing-format-attribute: Warning Options. (line 803) -* Wno-missing-include-dirs: Warning Options. (line 400) -* Wno-missing-parameter-type: Warning Options. (line 1237) -* Wno-missing-prototypes: Warning Options. (line 1245) -* Wno-multichar: Warning Options. (line 1283) -* Wno-narrowing: C++ Dialect Options. - (line 546) -* Wno-nested-externs: Warning Options. (line 1402) -* Wno-noexcept: C++ Dialect Options. - (line 559) -* Wno-non-template-friend: C++ Dialect Options. - (line 633) -* Wno-non-virtual-dtor: C++ Dialect Options. - (line 565) -* Wno-nonnull: Warning Options. (line 335) -* Wno-old-style-cast: C++ Dialect Options. - (line 649) -* Wno-old-style-declaration: Warning Options. (line 1227) -* Wno-old-style-definition: Warning Options. (line 1233) -* Wno-overflow: Warning Options. (line 1341) -* Wno-overlength-strings: Warning Options. (line 1515) -* Wno-overloaded-virtual: C++ Dialect Options. - (line 655) -* Wno-override-init: Warning Options. (line 1349) -* Wno-packed: Warning Options. (line 1357) -* Wno-packed-bitfield-compat: Warning Options. (line 1374) -* Wno-padded: Warning Options. (line 1391) -* Wno-parentheses: Warning Options. (line 403) -* Wno-pedantic-ms-format: Warning Options. (line 1019) -* Wno-pmf-conversions: C++ Dialect Options. - (line 674) -* Wno-pmf-conversions <1>: Bound member functions. - (line 35) -* Wno-pointer-arith: Warning Options. (line 1025) -* Wno-pointer-sign: Warning Options. (line 1504) -* Wno-pointer-to-int-cast: Warning Options. (line 1442) -* Wno-pragmas: Warning Options. (line 690) -* Wno-protocol: Objective-C and Objective-C++ Dialect Options. - (line 161) -* Wno-redundant-decls: Warning Options. (line 1398) -* Wno-reorder: C++ Dialect Options. - (line 573) -* Wno-return-local-addr: Warning Options. (line 498) -* Wno-return-type: Warning Options. (line 502) -* Wno-selector: Objective-C and Objective-C++ Dialect Options. - (line 171) -* Wno-sequence-point: Warning Options. (line 452) -* Wno-shadow: Warning Options. (line 970) -* Wno-sign-compare: Warning Options. (line 1155) -* Wno-sign-conversion: Warning Options. (line 1162) -* Wno-sign-promo: C++ Dialect Options. - (line 678) -* Wno-sizeof-pointer-memaccess: Warning Options. (line 1174) -* Wno-stack-protector: Warning Options. (line 1510) -* Wno-strict-aliasing: Warning Options. (line 695) -* Wno-strict-null-sentinel: C++ Dialect Options. - (line 626) -* Wno-strict-overflow: Warning Options. (line 734) -* Wno-strict-prototypes: Warning Options. (line 1221) -* Wno-strict-selector-match: Objective-C and Objective-C++ Dialect Options. - (line 183) -* Wno-suggest-attribute=: Warning Options. (line 783) -* Wno-suggest-attribute=const: Warning Options. (line 789) -* Wno-suggest-attribute=format: Warning Options. (line 803) -* Wno-suggest-attribute=noreturn: Warning Options. (line 789) -* Wno-suggest-attribute=pure: Warning Options. (line 789) -* Wno-switch: Warning Options. (line 516) -* Wno-switch-default: Warning Options. (line 524) -* Wno-switch-enum: Warning Options. (line 527) -* Wno-sync-nand: Warning Options. (line 536) -* Wno-system-headers: Warning Options. (line 834) -* Wno-traditional: Warning Options. (line 871) -* Wno-traditional-conversion: Warning Options. (line 948) -* Wno-trampolines: Warning Options. (line 845) -* Wno-trigraphs: Warning Options. (line 541) -* Wno-type-limits: Warning Options. (line 1032) -* Wno-undeclared-selector: Objective-C and Objective-C++ Dialect Options. - (line 191) -* Wno-undef: Warning Options. (line 963) -* Wno-uninitialized: Warning Options. (line 618) -* Wno-unknown-pragmas: Warning Options. (line 683) -* Wno-unsafe-loop-optimizations: Warning Options. (line 1013) -* Wno-unused: Warning Options. (line 611) -* Wno-unused-but-set-parameter: Warning Options. (line 546) -* Wno-unused-but-set-variable: Warning Options. (line 555) -* Wno-unused-function: Warning Options. (line 565) -* Wno-unused-label: Warning Options. (line 570) -* Wno-unused-parameter: Warning Options. (line 581) -* Wno-unused-result: Warning Options. (line 588) -* Wno-unused-value: Warning Options. (line 601) -* Wno-unused-variable: Warning Options. (line 593) -* Wno-useless-cast: Warning Options. (line 1131) -* Wno-varargs: Warning Options. (line 1461) -* Wno-variadic-macros: Warning Options. (line 1455) -* Wno-vector-operation-performance: Warning Options. (line 1466) -* Wno-virtual-move-assign: Warning Options. (line 1476) -* Wno-vla: Warning Options. (line 1485) -* Wno-volatile-register-var: Warning Options. (line 1489) -* Wno-write-strings: Warning Options. (line 1076) -* Wno-zero-as-null-pointer-constant: Warning Options. (line 1118) -* Wnoexcept: C++ Dialect Options. - (line 559) -* Wnon-template-friend: C++ Dialect Options. - (line 633) -* Wnon-virtual-dtor: C++ Dialect Options. - (line 565) -* Wnonnull: Warning Options. (line 335) -* Wnormalized=: Warning Options. (line 1289) -* Wold-style-cast: C++ Dialect Options. - (line 649) -* Wold-style-declaration: Warning Options. (line 1227) -* Wold-style-definition: Warning Options. (line 1233) -* Wopenm-simd: Warning Options. (line 1344) -* Woverflow: Warning Options. (line 1341) -* Woverlength-strings: Warning Options. (line 1515) -* Woverloaded-virtual: C++ Dialect Options. - (line 655) -* Woverride-init: Warning Options. (line 1349) -* Wp: Preprocessor Options. - (line 14) -* Wpacked: Warning Options. (line 1357) -* Wpacked-bitfield-compat: Warning Options. (line 1374) -* Wpadded: Warning Options. (line 1391) -* Wparentheses: Warning Options. (line 403) -* Wpedantic: Warning Options. (line 71) -* Wpedantic-ms-format: Warning Options. (line 1019) -* Wpmf-conversions: C++ Dialect Options. - (line 674) -* Wpointer-arith: Warning Options. (line 1025) -* Wpointer-arith <1>: Pointer Arith. (line 13) -* Wpointer-sign: Warning Options. (line 1504) -* Wpointer-to-int-cast: Warning Options. (line 1442) -* Wpragmas: Warning Options. (line 690) -* Wprotocol: Objective-C and Objective-C++ Dialect Options. - (line 161) -* wrapper: Overall Options. (line 341) -* Wredundant-decls: Warning Options. (line 1398) -* Wreorder: C++ Dialect Options. - (line 573) -* Wreturn-local-addr: Warning Options. (line 498) -* Wreturn-type: Warning Options. (line 502) -* Wselector: Objective-C and Objective-C++ Dialect Options. - (line 171) -* Wsequence-point: Warning Options. (line 452) -* Wshadow: Warning Options. (line 970) -* Wsign-compare: Warning Options. (line 1155) -* Wsign-conversion: Warning Options. (line 1162) -* Wsign-promo: C++ Dialect Options. - (line 678) -* Wsizeof-pointer-memaccess: Warning Options. (line 1174) -* Wstack-protector: Warning Options. (line 1510) -* Wstack-usage: Warning Options. (line 993) -* Wstrict-aliasing: Warning Options. (line 695) -* Wstrict-aliasing=n: Warning Options. (line 702) -* Wstrict-null-sentinel: C++ Dialect Options. - (line 626) -* Wstrict-overflow: Warning Options. (line 734) -* Wstrict-prototypes: Warning Options. (line 1221) -* Wstrict-selector-match: Objective-C and Objective-C++ Dialect Options. - (line 183) -* Wsuggest-attribute=: Warning Options. (line 783) -* Wsuggest-attribute=const: Warning Options. (line 789) -* Wsuggest-attribute=format: Warning Options. (line 803) -* Wsuggest-attribute=noreturn: Warning Options. (line 789) -* Wsuggest-attribute=pure: Warning Options. (line 789) -* Wswitch: Warning Options. (line 516) -* Wswitch-default: Warning Options. (line 524) -* Wswitch-enum: Warning Options. (line 527) -* Wsync-nand: Warning Options. (line 536) -* Wsystem-headers: Warning Options. (line 834) -* Wsystem-headers <1>: Preprocessor Options. - (line 165) -* Wtraditional: Warning Options. (line 871) -* Wtraditional <1>: Preprocessor Options. - (line 118) -* Wtraditional-conversion: Warning Options. (line 948) -* Wtrampolines: Warning Options. (line 845) -* Wtrigraphs: Warning Options. (line 541) -* Wtrigraphs <1>: Preprocessor Options. - (line 106) -* Wtype-limits: Warning Options. (line 1032) -* Wundeclared-selector: Objective-C and Objective-C++ Dialect Options. - (line 191) -* Wundef: Warning Options. (line 963) -* Wundef <1>: Preprocessor Options. - (line 124) -* Wuninitialized: Warning Options. (line 618) -* Wunknown-pragmas: Warning Options. (line 683) -* Wunsafe-loop-optimizations: Warning Options. (line 1013) -* Wunsuffixed-float-constants: Warning Options. (line 1530) -* Wunused: Warning Options. (line 611) -* Wunused-but-set-parameter: Warning Options. (line 546) -* Wunused-but-set-variable: Warning Options. (line 555) -* Wunused-function: Warning Options. (line 565) -* Wunused-label: Warning Options. (line 570) -* Wunused-local-typedefs: Warning Options. (line 577) -* Wunused-macros: Preprocessor Options. - (line 129) -* Wunused-parameter: Warning Options. (line 581) -* Wunused-result: Warning Options. (line 588) -* Wunused-value: Warning Options. (line 601) -* Wunused-variable: Warning Options. (line 593) -* Wuseless-cast: Warning Options. (line 1131) -* Wvarargs: Warning Options. (line 1461) -* Wvariadic-macros: Warning Options. (line 1455) -* Wvector-operation-performance: Warning Options. (line 1466) -* Wvirtual-move-assign: Warning Options. (line 1476) -* Wvla: Warning Options. (line 1485) -* Wvolatile-register-var: Warning Options. (line 1489) -* Wwrite-strings: Warning Options. (line 1076) -* Wzero-as-null-pointer-constant: Warning Options. (line 1118) -* x: Overall Options. (line 126) -* x <1>: Preprocessor Options. - (line 324) -* Xassembler: Assembler Options. (line 13) -* Xbind-lazy: VxWorks Options. (line 26) -* Xbind-now: VxWorks Options. (line 30) -* Xlinker: Link Options. (line 219) -* Xpreprocessor: Preprocessor Options. - (line 25) -* Ym: System V Options. (line 26) -* YP: System V Options. (line 22) - - -File: gcc.info, Node: Keyword Index, Prev: Option Index, Up: Top - -Keyword Index -************* - - -* Menu: - -* '!' in constraint: Multi-Alternative. (line 33) -* '#' in constraint: Modifiers. (line 57) -* '#pragma': Pragmas. (line 6) -* #pragma implementation: C++ Interface. (line 39) -* '#pragma implementation', implied: C++ Interface. (line 46) -* #pragma interface: C++ Interface. (line 20) -* '#pragma', reason for not using: Function Attributes. - (line 2055) -* $: Dollar Signs. (line 6) -* '%' in constraint: Modifiers. (line 45) -* '%include': Spec Files. (line 26) -* '%include_noerr': Spec Files. (line 30) -* '%rename': Spec Files. (line 34) -* '&' in constraint: Modifiers. (line 25) -* ''': Incompatibilities. (line 116) -* '*' in constraint: Modifiers. (line 62) -* *__builtin_assume_aligned: Other Builtins. (line 332) -* '+' in constraint: Modifiers. (line 12) -* '-lgcc', use with '-nodefaultlibs': Link Options. (line 85) -* '-lgcc', use with '-nostdlib': Link Options. (line 85) -* '-march' feature modifiers: AArch64 Options. (line 119) -* '-mcpu' feature modifiers: AArch64 Options. (line 119) -* '-nodefaultlibs' and unresolved references: Link Options. (line 85) -* '-nostdlib' and unresolved references: Link Options. (line 85) -* .sdata/.sdata2 references (PowerPC): RS/6000 and PowerPC Options. - (line 739) -* '//': C++ Comments. (line 6) -* '0' in constraint: Simple Constraints. (line 125) -* '<' in constraint: Simple Constraints. (line 47) -* '=' in constraint: Modifiers. (line 8) -* '>' in constraint: Simple Constraints. (line 59) -* '?' in constraint: Multi-Alternative. (line 27) -* '?:' extensions: Conditionals. (line 6) -* '?:' side effect: Conditionals. (line 20) -* '_' in variables in macros: Typeof. (line 46) -* '_Accum' data type: Fixed-Point. (line 6) -* '_Complex' keyword: Complex. (line 6) -* '_Decimal128' data type: Decimal Float. (line 6) -* '_Decimal32' data type: Decimal Float. (line 6) -* '_Decimal64' data type: Decimal Float. (line 6) -* _Exit: Other Builtins. (line 6) -* _exit: Other Builtins. (line 6) -* '_Fract' data type: Fixed-Point. (line 6) -* _HTM_FIRST_USER_ABORT_CODE: S/390 System z Built-in Functions. - (line 44) -* '_Sat' data type: Fixed-Point. (line 6) -* _xabort: X86 transactional memory intrinsics. - (line 61) -* _xbegin: X86 transactional memory intrinsics. - (line 19) -* _xend: X86 transactional memory intrinsics. - (line 52) -* _xtest: X86 transactional memory intrinsics. - (line 57) -* __atomic_add_fetch: __atomic Builtins. (line 153) -* __atomic_always_lock_free: __atomic Builtins. (line 230) -* __atomic_and_fetch: __atomic Builtins. (line 157) -* __atomic_clear: __atomic Builtins. (line 204) -* __atomic_compare_exchange: __atomic Builtins. (line 145) -* __atomic_compare_exchange_n: __atomic Builtins. (line 124) -* __atomic_exchange: __atomic Builtins. (line 118) -* __atomic_exchange_n: __atomic Builtins. (line 108) -* __atomic_fetch_add: __atomic Builtins. (line 172) -* __atomic_fetch_and: __atomic Builtins. (line 176) -* __atomic_fetch_nand: __atomic Builtins. (line 182) -* __atomic_fetch_or: __atomic Builtins. (line 180) -* __atomic_fetch_sub: __atomic Builtins. (line 174) -* __atomic_fetch_xor: __atomic Builtins. (line 178) -* __atomic_is_lock_free: __atomic Builtins. (line 244) -* __atomic_load: __atomic Builtins. (line 90) -* __atomic_load_n: __atomic Builtins. (line 83) -* __atomic_nand_fetch: __atomic Builtins. (line 163) -* __atomic_or_fetch: __atomic Builtins. (line 161) -* __atomic_signal_fence: __atomic Builtins. (line 223) -* __atomic_store: __atomic Builtins. (line 103) -* __atomic_store_n: __atomic Builtins. (line 95) -* __atomic_sub_fetch: __atomic Builtins. (line 155) -* __atomic_test_and_set: __atomic Builtins. (line 192) -* __atomic_thread_fence: __atomic Builtins. (line 216) -* __atomic_xor_fetch: __atomic Builtins. (line 159) -* __builtin_apply: Constructing Calls. (line 29) -* __builtin_apply_args: Constructing Calls. (line 19) -* __builtin_arc_aligned: ARC Built-in Functions. - (line 18) -* __builtin_arc_brk: ARC Built-in Functions. - (line 28) -* __builtin_arc_core_read: ARC Built-in Functions. - (line 32) -* __builtin_arc_core_write: ARC Built-in Functions. - (line 39) -* __builtin_arc_divaw: ARC Built-in Functions. - (line 46) -* __builtin_arc_flag: ARC Built-in Functions. - (line 53) -* __builtin_arc_lr: ARC Built-in Functions. - (line 57) -* __builtin_arc_mul64: ARC Built-in Functions. - (line 64) -* __builtin_arc_mulu64: ARC Built-in Functions. - (line 68) -* __builtin_arc_nop: ARC Built-in Functions. - (line 73) -* __builtin_arc_norm: ARC Built-in Functions. - (line 77) -* __builtin_arc_normw: ARC Built-in Functions. - (line 84) -* __builtin_arc_rtie: ARC Built-in Functions. - (line 91) -* __builtin_arc_sleep: ARC Built-in Functions. - (line 95) -* __builtin_arc_sr: ARC Built-in Functions. - (line 99) -* __builtin_arc_swap: ARC Built-in Functions. - (line 106) -* __builtin_arc_swi: ARC Built-in Functions. - (line 112) -* __builtin_arc_sync: ARC Built-in Functions. - (line 116) -* __builtin_arc_trap_s: ARC Built-in Functions. - (line 120) -* __builtin_arc_unimp_s: ARC Built-in Functions. - (line 124) -* __builtin_bswap16: Other Builtins. (line 599) -* __builtin_bswap32: Other Builtins. (line 603) -* __builtin_bswap64: Other Builtins. (line 607) -* __builtin_choose_expr: Other Builtins. (line 154) -* __builtin_clrsb: Other Builtins. (line 529) -* __builtin_clrsbl: Other Builtins. (line 551) -* __builtin_clrsbll: Other Builtins. (line 574) -* __builtin_clz: Other Builtins. (line 521) -* __builtin_clzl: Other Builtins. (line 543) -* __builtin_clzll: Other Builtins. (line 566) -* __builtin_complex: Other Builtins. (line 194) -* __builtin_constant_p: Other Builtins. (line 203) -* __builtin_cpu_init: X86 Built-in Functions. - (line 62) -* __builtin_cpu_is: X86 Built-in Functions. - (line 90) -* __builtin_cpu_supports: X86 Built-in Functions. - (line 162) -* __builtin_ctz: Other Builtins. (line 525) -* __builtin_ctzl: Other Builtins. (line 547) -* __builtin_ctzll: Other Builtins. (line 570) -* __builtin_expect: Other Builtins. (line 252) -* __builtin_extract_return_addr: Return Address. (line 35) -* __builtin_ffs: Other Builtins. (line 517) -* __builtin_ffsl: Other Builtins. (line 540) -* __builtin_ffsll: Other Builtins. (line 562) -* __builtin_FILE: Other Builtins. (line 361) -* __builtin_fpclassify: Other Builtins. (line 6) -* __builtin_fpclassify <1>: Other Builtins. (line 431) -* __builtin_frame_address: Return Address. (line 47) -* __builtin_frob_return_address: Return Address. (line 44) -* __builtin_FUNCTION: Other Builtins. (line 356) -* __builtin_huge_val: Other Builtins. (line 419) -* __builtin_huge_valf: Other Builtins. (line 424) -* __builtin_huge_vall: Other Builtins. (line 427) -* __builtin_huge_valq: X86 Built-in Functions. - (line 57) -* __builtin_inf: Other Builtins. (line 442) -* __builtin_infd128: Other Builtins. (line 452) -* __builtin_infd32: Other Builtins. (line 446) -* __builtin_infd64: Other Builtins. (line 449) -* __builtin_inff: Other Builtins. (line 456) -* __builtin_infl: Other Builtins. (line 461) -* __builtin_infq: X86 Built-in Functions. - (line 54) -* __builtin_isfinite: Other Builtins. (line 6) -* __builtin_isgreater: Other Builtins. (line 6) -* __builtin_isgreaterequal: Other Builtins. (line 6) -* __builtin_isinf_sign: Other Builtins. (line 6) -* __builtin_isinf_sign <1>: Other Builtins. (line 465) -* __builtin_isless: Other Builtins. (line 6) -* __builtin_islessequal: Other Builtins. (line 6) -* __builtin_islessgreater: Other Builtins. (line 6) -* __builtin_isnormal: Other Builtins. (line 6) -* __builtin_isunordered: Other Builtins. (line 6) -* __builtin_LINE: Other Builtins. (line 350) -* __builtin_nan: Other Builtins. (line 473) -* __builtin_nand128: Other Builtins. (line 495) -* __builtin_nand32: Other Builtins. (line 489) -* __builtin_nand64: Other Builtins. (line 492) -* __builtin_nanf: Other Builtins. (line 499) -* __builtin_nanl: Other Builtins. (line 502) -* __builtin_nans: Other Builtins. (line 506) -* __builtin_nansf: Other Builtins. (line 510) -* __builtin_nansl: Other Builtins. (line 513) -* __builtin_nds32_isb: NDS32 Built-in Functions. - (line 12) -* __builtin_nds32_isync: NDS32 Built-in Functions. - (line 8) -* __builtin_nds32_mfsr: NDS32 Built-in Functions. - (line 15) -* __builtin_nds32_mfusr: NDS32 Built-in Functions. - (line 18) -* __builtin_nds32_mtsr: NDS32 Built-in Functions. - (line 21) -* __builtin_nds32_mtusr: NDS32 Built-in Functions. - (line 24) -* __builtin_nds32_setgie_dis: NDS32 Built-in Functions. - (line 30) -* __builtin_nds32_setgie_en: NDS32 Built-in Functions. - (line 27) -* __builtin_non_tx_store: S/390 System z Built-in Functions. - (line 98) -* __builtin_object_size: Object Size Checking. - (line 6) -* __builtin_object_size <1>: Object Size Checking. - (line 9) -* __builtin_offsetof: Offsetof. (line 6) -* __builtin_parity: Other Builtins. (line 537) -* __builtin_parityl: Other Builtins. (line 558) -* __builtin_parityll: Other Builtins. (line 582) -* __builtin_popcount: Other Builtins. (line 534) -* __builtin_popcountl: Other Builtins. (line 554) -* __builtin_popcountll: Other Builtins. (line 578) -* __builtin_powi: Other Builtins. (line 6) -* __builtin_powi <1>: Other Builtins. (line 586) -* __builtin_powif: Other Builtins. (line 6) -* __builtin_powif <1>: Other Builtins. (line 591) -* __builtin_powil: Other Builtins. (line 6) -* __builtin_powil <1>: Other Builtins. (line 595) -* __builtin_prefetch: Other Builtins. (line 380) -* __builtin_return: Constructing Calls. (line 47) -* __builtin_return_address: Return Address. (line 9) -* __builtin_rx_brk: RX Built-in Functions. - (line 10) -* __builtin_rx_clrpsw: RX Built-in Functions. - (line 13) -* __builtin_rx_int: RX Built-in Functions. - (line 17) -* __builtin_rx_machi: RX Built-in Functions. - (line 21) -* __builtin_rx_maclo: RX Built-in Functions. - (line 26) -* __builtin_rx_mulhi: RX Built-in Functions. - (line 31) -* __builtin_rx_mullo: RX Built-in Functions. - (line 36) -* __builtin_rx_mvfachi: RX Built-in Functions. - (line 41) -* __builtin_rx_mvfacmi: RX Built-in Functions. - (line 45) -* __builtin_rx_mvfc: RX Built-in Functions. - (line 49) -* __builtin_rx_mvtachi: RX Built-in Functions. - (line 53) -* __builtin_rx_mvtaclo: RX Built-in Functions. - (line 57) -* __builtin_rx_mvtc: RX Built-in Functions. - (line 61) -* __builtin_rx_mvtipl: RX Built-in Functions. - (line 65) -* __builtin_rx_racw: RX Built-in Functions. - (line 69) -* __builtin_rx_revw: RX Built-in Functions. - (line 73) -* __builtin_rx_rmpa: RX Built-in Functions. - (line 78) -* __builtin_rx_round: RX Built-in Functions. - (line 82) -* __builtin_rx_sat: RX Built-in Functions. - (line 87) -* __builtin_rx_setpsw: RX Built-in Functions. - (line 91) -* __builtin_rx_wait: RX Built-in Functions. - (line 95) -* __builtin_set_thread_pointer: SH Built-in Functions. - (line 9) -* __builtin_tabort: S/390 System z Built-in Functions. - (line 82) -* __builtin_tbegin: S/390 System z Built-in Functions. - (line 6) -* __builtin_tbeginc: S/390 System z Built-in Functions. - (line 73) -* __builtin_tbegin_nofloat: S/390 System z Built-in Functions. - (line 54) -* __builtin_tbegin_retry: S/390 System z Built-in Functions. - (line 60) -* __builtin_tbegin_retry_nofloat: S/390 System z Built-in Functions. - (line 67) -* __builtin_tend: S/390 System z Built-in Functions. - (line 77) -* __builtin_thread_pointer: SH Built-in Functions. - (line 18) -* __builtin_trap: Other Builtins. (line 276) -* __builtin_tx_assist: S/390 System z Built-in Functions. - (line 87) -* __builtin_tx_nesting_depth: S/390 System z Built-in Functions. - (line 93) -* __builtin_types_compatible_p: Other Builtins. (line 109) -* __builtin_unreachable: Other Builtins. (line 283) -* __builtin_va_arg_pack: Constructing Calls. (line 52) -* __builtin_va_arg_pack_len: Constructing Calls. (line 75) -* __builtin___clear_cache: Other Builtins. (line 367) -* __builtin___fprintf_chk: Object Size Checking. - (line 6) -* __builtin___memcpy_chk: Object Size Checking. - (line 6) -* __builtin___memmove_chk: Object Size Checking. - (line 6) -* __builtin___mempcpy_chk: Object Size Checking. - (line 6) -* __builtin___memset_chk: Object Size Checking. - (line 6) -* __builtin___printf_chk: Object Size Checking. - (line 6) -* __builtin___snprintf_chk: Object Size Checking. - (line 6) -* __builtin___sprintf_chk: Object Size Checking. - (line 6) -* __builtin___stpcpy_chk: Object Size Checking. - (line 6) -* __builtin___strcat_chk: Object Size Checking. - (line 6) -* __builtin___strcpy_chk: Object Size Checking. - (line 6) -* __builtin___strncat_chk: Object Size Checking. - (line 6) -* __builtin___strncpy_chk: Object Size Checking. - (line 6) -* __builtin___vfprintf_chk: Object Size Checking. - (line 6) -* __builtin___vprintf_chk: Object Size Checking. - (line 6) -* __builtin___vsnprintf_chk: Object Size Checking. - (line 6) -* __builtin___vsprintf_chk: Object Size Checking. - (line 6) -* '__complex__' keyword: Complex. (line 6) -* '__declspec(dllexport)': Function Attributes. - (line 290) -* '__declspec(dllimport)': Function Attributes. - (line 323) -* '__ea' SPU Named Address Spaces: Named Address Spaces. - (line 155) -* __extension__: Alternate Keywords. (line 30) -* '__far' M32C Named Address Spaces: Named Address Spaces. - (line 138) -* '__far' RL78 Named Address Spaces: Named Address Spaces. - (line 147) -* '__flash' AVR Named Address Spaces: Named Address Spaces. - (line 31) -* '__flash1' AVR Named Address Spaces: Named Address Spaces. - (line 40) -* '__flash2' AVR Named Address Spaces: Named Address Spaces. - (line 40) -* '__flash3' AVR Named Address Spaces: Named Address Spaces. - (line 40) -* '__flash4' AVR Named Address Spaces: Named Address Spaces. - (line 40) -* '__flash5' AVR Named Address Spaces: Named Address Spaces. - (line 40) -* '__float128' data type: Floating Types. (line 6) -* '__float80' data type: Floating Types. (line 6) -* '__fp16' data type: Half-Precision. (line 6) -* '__FUNCTION__' identifier: Function Names. (line 6) -* '__func__' identifier: Function Names. (line 6) -* '__imag__' keyword: Complex. (line 27) -* '__int128' data types: __int128. (line 6) -* '__memx' AVR Named Address Spaces: Named Address Spaces. - (line 46) -* '__PRETTY_FUNCTION__' identifier: Function Names. (line 6) -* '__real__' keyword: Complex. (line 27) -* __STDC_HOSTED__: Standards. (line 13) -* __sync_add_and_fetch: __sync Builtins. (line 60) -* __sync_and_and_fetch: __sync Builtins. (line 60) -* __sync_bool_compare_and_swap: __sync Builtins. (line 71) -* __sync_fetch_and_add: __sync Builtins. (line 44) -* __sync_fetch_and_and: __sync Builtins. (line 44) -* __sync_fetch_and_nand: __sync Builtins. (line 44) -* __sync_fetch_and_or: __sync Builtins. (line 44) -* __sync_fetch_and_sub: __sync Builtins. (line 44) -* __sync_fetch_and_xor: __sync Builtins. (line 44) -* __sync_lock_release: __sync Builtins. (line 101) -* __sync_lock_test_and_set: __sync Builtins. (line 83) -* __sync_nand_and_fetch: __sync Builtins. (line 60) -* __sync_or_and_fetch: __sync Builtins. (line 60) -* __sync_sub_and_fetch: __sync Builtins. (line 60) -* __sync_synchronize: __sync Builtins. (line 80) -* __sync_val_compare_and_swap: __sync Builtins. (line 71) -* __sync_xor_and_fetch: __sync Builtins. (line 60) -* '__thread': Thread-Local. (line 6) -* AArch64 Options: AArch64 Options. (line 6) -* ABI: Compatibility. (line 6) -* 'abi_tag' attribute: C++ Attributes. (line 9) -* abort: Other Builtins. (line 6) -* abs: Other Builtins. (line 6) -* accessing volatiles: Volatiles. (line 6) -* accessing volatiles <1>: C++ Volatiles. (line 6) -* acos: Other Builtins. (line 6) -* acosf: Other Builtins. (line 6) -* acosh: Other Builtins. (line 6) -* acoshf: Other Builtins. (line 6) -* acoshl: Other Builtins. (line 6) -* acosl: Other Builtins. (line 6) -* Ada: G++ and GCC. (line 6) -* Ada <1>: G++ and GCC. (line 30) -* additional floating types: Floating Types. (line 6) -* address constraints: Simple Constraints. (line 152) -* address of a label: Labels as Values. (line 6) -* address_operand: Simple Constraints. (line 156) -* 'alias' attribute: Function Attributes. - (line 39) -* 'aligned' attribute: Function Attributes. - (line 52) -* 'aligned' attribute <1>: Variable Attributes. - (line 23) -* 'aligned' attribute <2>: Type Attributes. (line 31) -* alignment: Alignment. (line 6) -* alloca: Other Builtins. (line 6) -* 'alloca' vs variable-length arrays: Variable Length. (line 35) -* 'alloc_align' attribute: Function Attributes. - (line 93) -* 'alloc_size' attribute: Function Attributes. - (line 72) -* Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes. - (line 1068) -* Altera Nios II options: Nios II Options. (line 6) -* alternate keywords: Alternate Keywords. (line 6) -* 'always_inline' function attribute: Function Attributes. - (line 125) -* AMD x86-64 Options: i386 and x86-64 Options. - (line 6) -* AMD1: Standards. (line 13) -* ANSI C: Standards. (line 13) -* ANSI C standard: Standards. (line 13) -* ANSI C89: Standards. (line 13) -* ANSI support: C Dialect Options. (line 10) -* ANSI X3.159-1989: Standards. (line 13) -* apostrophes: Incompatibilities. (line 116) -* application binary interface: Compatibility. (line 6) -* ARC options: ARC Options. (line 6) -* ARM options: ARM Options. (line 6) -* ARM [Annotated C++ Reference Manual]: Backwards Compatibility. - (line 6) -* arrays of length zero: Zero Length. (line 6) -* arrays of variable length: Variable Length. (line 6) -* arrays, non-lvalue: Subscripting. (line 6) -* 'artificial' function attribute: Function Attributes. - (line 166) -* asin: Other Builtins. (line 6) -* asinf: Other Builtins. (line 6) -* asinh: Other Builtins. (line 6) -* asinhf: Other Builtins. (line 6) -* asinhl: Other Builtins. (line 6) -* asinl: Other Builtins. (line 6) -* 'asm' constraints: Constraints. (line 6) -* 'asm' expressions: Extended Asm. (line 6) -* assembler instructions: Extended Asm. (line 6) -* assembler names for identifiers: Asm Labels. (line 6) -* assembly code, invalid: Bug Criteria. (line 12) -* 'assume_aligned' attribute: Function Attributes. - (line 110) -* atan: Other Builtins. (line 6) -* atan2: Other Builtins. (line 6) -* atan2f: Other Builtins. (line 6) -* atan2l: Other Builtins. (line 6) -* atanf: Other Builtins. (line 6) -* atanh: Other Builtins. (line 6) -* atanhf: Other Builtins. (line 6) -* atanhl: Other Builtins. (line 6) -* atanl: Other Builtins. (line 6) -* attribute of types: Type Attributes. (line 6) -* attribute of variables: Variable Attributes. - (line 6) -* attribute syntax: Attribute Syntax. (line 6) -* autoincrement/decrement addressing: Simple Constraints. (line 30) -* automatic 'inline' for C++ member fns: Inline. (line 71) -* AVR Options: AVR Options. (line 6) -* Backwards Compatibility: Backwards Compatibility. - (line 6) -* base class members: Name lookup. (line 6) -* bcmp: Other Builtins. (line 6) -* 'below100' attribute: Variable Attributes. - (line 578) -* binary compatibility: Compatibility. (line 6) -* Binary constants using the '0b' prefix: Binary constants. (line 6) -* Blackfin Options: Blackfin Options. (line 6) -* bound pointer to member function: Bound member functions. - (line 6) -* bug criteria: Bug Criteria. (line 6) -* bugs: Bugs. (line 6) -* bugs, known: Trouble. (line 6) -* built-in functions: C Dialect Options. (line 210) -* built-in functions <1>: Other Builtins. (line 6) -* bzero: Other Builtins. (line 6) -* C compilation options: Invoking GCC. (line 17) -* C intermediate output, nonexistent: G++ and GCC. (line 35) -* C language extensions: C Extensions. (line 6) -* C language, traditional: C Dialect Options. (line 331) -* C standard: Standards. (line 13) -* C standards: Standards. (line 13) -* c++: Invoking G++. (line 14) -* C++: G++ and GCC. (line 30) -* C++ comments: C++ Comments. (line 6) -* C++ compilation options: Invoking GCC. (line 23) -* C++ interface and implementation headers: C++ Interface. (line 6) -* C++ language extensions: C++ Extensions. (line 6) -* C++ member fns, automatically 'inline': Inline. (line 71) -* C++ misunderstandings: C++ Misunderstandings. - (line 6) -* C++ options, command-line: C++ Dialect Options. - (line 6) -* C++ pragmas, effect on inlining: C++ Interface. (line 66) -* C++ source file suffixes: Invoking G++. (line 6) -* C++ static data, declaring and defining: Static Definitions. - (line 6) -* C11: Standards. (line 13) -* C1X: Standards. (line 13) -* C6X Options: C6X Options. (line 6) -* C89: Standards. (line 13) -* C90: Standards. (line 13) -* C94: Standards. (line 13) -* C95: Standards. (line 13) -* C99: Standards. (line 13) -* C9X: Standards. (line 13) -* cabs: Other Builtins. (line 6) -* cabsf: Other Builtins. (line 6) -* cabsl: Other Builtins. (line 6) -* cacos: Other Builtins. (line 6) -* cacosf: Other Builtins. (line 6) -* cacosh: Other Builtins. (line 6) -* cacoshf: Other Builtins. (line 6) -* cacoshl: Other Builtins. (line 6) -* cacosl: Other Builtins. (line 6) -* 'callee_pop_aggregate_return' attribute: Function Attributes. - (line 1016) -* calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes. - (line 564) -* calloc: Other Builtins. (line 6) -* caret GCC_COLORS capability: Language Independent Options. - (line 76) -* carg: Other Builtins. (line 6) -* cargf: Other Builtins. (line 6) -* cargl: Other Builtins. (line 6) -* case labels in initializers: Designated Inits. (line 6) -* case ranges: Case Ranges. (line 6) -* casin: Other Builtins. (line 6) -* casinf: Other Builtins. (line 6) -* casinh: Other Builtins. (line 6) -* casinhf: Other Builtins. (line 6) -* casinhl: Other Builtins. (line 6) -* casinl: Other Builtins. (line 6) -* cast to a union: Cast to Union. (line 6) -* catan: Other Builtins. (line 6) -* catanf: Other Builtins. (line 6) -* catanh: Other Builtins. (line 6) -* catanhf: Other Builtins. (line 6) -* catanhl: Other Builtins. (line 6) -* catanl: Other Builtins. (line 6) -* cbrt: Other Builtins. (line 6) -* cbrtf: Other Builtins. (line 6) -* cbrtl: Other Builtins. (line 6) -* ccos: Other Builtins. (line 6) -* ccosf: Other Builtins. (line 6) -* ccosh: Other Builtins. (line 6) -* ccoshf: Other Builtins. (line 6) -* ccoshl: Other Builtins. (line 6) -* ccosl: Other Builtins. (line 6) -* ceil: Other Builtins. (line 6) -* ceilf: Other Builtins. (line 6) -* ceill: Other Builtins. (line 6) -* cexp: Other Builtins. (line 6) -* cexpf: Other Builtins. (line 6) -* cexpl: Other Builtins. (line 6) -* character set, execution: Preprocessor Options. - (line 554) -* character set, input: Preprocessor Options. - (line 567) -* character set, input normalization: Warning Options. (line 1289) -* character set, wide execution: Preprocessor Options. - (line 559) -* cimag: Other Builtins. (line 6) -* cimagf: Other Builtins. (line 6) -* cimagl: Other Builtins. (line 6) -* 'cleanup' attribute: Variable Attributes. - (line 89) -* clog: Other Builtins. (line 6) -* clogf: Other Builtins. (line 6) -* clogl: Other Builtins. (line 6) -* COBOL: G++ and GCC. (line 23) -* code generation conventions: Code Gen Options. (line 6) -* code, mixed with declarations: Mixed Declarations. (line 6) -* 'cold' function attribute: Function Attributes. - (line 1307) -* 'cold' label attribute: Function Attributes. - (line 1325) -* command options: Invoking GCC. (line 6) -* comments, C++ style: C++ Comments. (line 6) -* 'common' attribute: Variable Attributes. - (line 104) -* comparison of signed and unsigned values, warning: Warning Options. - (line 1155) -* compiler bugs, reporting: Bug Reporting. (line 6) -* compiler compared to C++ preprocessor: G++ and GCC. (line 35) -* compiler options, C++: C++ Dialect Options. - (line 6) -* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. - (line 6) -* compiler version, specifying: Target Options. (line 6) -* COMPILER_PATH: Environment Variables. - (line 91) -* complex conjugation: Complex. (line 34) -* complex numbers: Complex. (line 6) -* compound literals: Compound Literals. (line 6) -* computed gotos: Labels as Values. (line 6) -* conditional expressions, extensions: Conditionals. (line 6) -* conflicting types: Disappointments. (line 21) -* conj: Other Builtins. (line 6) -* conjf: Other Builtins. (line 6) -* conjl: Other Builtins. (line 6) -* 'const' applied to function: Function Attributes. - (line 6) -* 'const' function attribute: Function Attributes. - (line 215) -* constants in constraints: Simple Constraints. (line 68) -* constraint modifier characters: Modifiers. (line 6) -* constraint, matching: Simple Constraints. (line 137) -* constraints, 'asm': Constraints. (line 6) -* constraints, machine specific: Machine Constraints. - (line 6) -* constructing calls: Constructing Calls. (line 6) -* constructor expressions: Compound Literals. (line 6) -* 'constructor' function attribute: Function Attributes. - (line 243) -* contributors: Contributors. (line 6) -* copysign: Other Builtins. (line 6) -* copysignf: Other Builtins. (line 6) -* copysignl: Other Builtins. (line 6) -* core dump: Bug Criteria. (line 9) -* cos: Other Builtins. (line 6) -* cosf: Other Builtins. (line 6) -* cosh: Other Builtins. (line 6) -* coshf: Other Builtins. (line 6) -* coshl: Other Builtins. (line 6) -* cosl: Other Builtins. (line 6) -* CPATH: Environment Variables. - (line 127) -* CPLUS_INCLUDE_PATH: Environment Variables. - (line 129) -* cpow: Other Builtins. (line 6) -* cpowf: Other Builtins. (line 6) -* cpowl: Other Builtins. (line 6) -* cproj: Other Builtins. (line 6) -* cprojf: Other Builtins. (line 6) -* cprojl: Other Builtins. (line 6) -* CR16 Options: CR16 Options. (line 6) -* creal: Other Builtins. (line 6) -* crealf: Other Builtins. (line 6) -* creall: Other Builtins. (line 6) -* CRIS Options: CRIS Options. (line 6) -* 'critical' attribute: Function Attributes. - (line 717) -* cross compiling: Target Options. (line 6) -* csin: Other Builtins. (line 6) -* csinf: Other Builtins. (line 6) -* csinh: Other Builtins. (line 6) -* csinhf: Other Builtins. (line 6) -* csinhl: Other Builtins. (line 6) -* csinl: Other Builtins. (line 6) -* csqrt: Other Builtins. (line 6) -* csqrtf: Other Builtins. (line 6) -* csqrtl: Other Builtins. (line 6) -* ctan: Other Builtins. (line 6) -* ctanf: Other Builtins. (line 6) -* ctanh: Other Builtins. (line 6) -* ctanhf: Other Builtins. (line 6) -* ctanhl: Other Builtins. (line 6) -* ctanl: Other Builtins. (line 6) -* C_INCLUDE_PATH: Environment Variables. - (line 128) -* Darwin options: Darwin Options. (line 6) -* dcgettext: Other Builtins. (line 6) -* 'dd' integer suffix: Decimal Float. (line 6) -* 'DD' integer suffix: Decimal Float. (line 6) -* deallocating variable length arrays: Variable Length. (line 22) -* debugging information options: Debugging Options. (line 6) -* decimal floating types: Decimal Float. (line 6) -* declaration scope: Incompatibilities. (line 80) -* declarations inside expressions: Statement Exprs. (line 6) -* declarations, mixed with code: Mixed Declarations. (line 6) -* declaring attributes of functions: Function Attributes. - (line 6) -* declaring static data in C++: Static Definitions. (line 6) -* defining static data in C++: Static Definitions. (line 6) -* dependencies for make as output: Environment Variables. - (line 155) -* dependencies for make as output <1>: Environment Variables. - (line 171) -* dependencies, 'make': Preprocessor Options. - (line 185) -* DEPENDENCIES_OUTPUT: Environment Variables. - (line 154) -* dependent name lookup: Name lookup. (line 6) -* 'deprecated' attribute: Variable Attributes. - (line 113) -* 'deprecated' attribute.: Function Attributes. - (line 265) -* designated initializers: Designated Inits. (line 6) -* designator lists: Designated Inits. (line 96) -* designators: Designated Inits. (line 64) -* 'destructor' function attribute: Function Attributes. - (line 243) -* 'df' integer suffix: Decimal Float. (line 6) -* 'DF' integer suffix: Decimal Float. (line 6) -* dgettext: Other Builtins. (line 6) -* diagnostic messages: Language Independent Options. - (line 6) -* dialect options: C Dialect Options. (line 6) -* digits in constraint: Simple Constraints. (line 125) -* directory options: Directory Options. (line 6) -* 'disinterrupt' attribute: Function Attributes. - (line 285) -* 'dl' integer suffix: Decimal Float. (line 6) -* 'DL' integer suffix: Decimal Float. (line 6) -* dollar signs in identifier names: Dollar Signs. (line 6) -* double-word arithmetic: Long Long. (line 6) -* downward funargs: Nested Functions. (line 6) -* drem: Other Builtins. (line 6) -* dremf: Other Builtins. (line 6) -* dreml: Other Builtins. (line 6) -* 'E' in constraint: Simple Constraints. (line 87) -* earlyclobber operand: Modifiers. (line 25) -* eight-bit data on the H8/300, H8/300H, and H8S: Function Attributes. - (line 375) -* 'EIND': AVR Options. (line 222) -* empty structures: Empty Structures. (line 6) -* Enable Cilk Plus: C Dialect Options. (line 276) -* environment variables: Environment Variables. - (line 6) -* erf: Other Builtins. (line 6) -* erfc: Other Builtins. (line 6) -* erfcf: Other Builtins. (line 6) -* erfcl: Other Builtins. (line 6) -* erff: Other Builtins. (line 6) -* erfl: Other Builtins. (line 6) -* 'error' function attribute: Function Attributes. - (line 185) -* error GCC_COLORS capability: Language Independent Options. - (line 67) -* error messages: Warnings and Errors. - (line 6) -* escaped newlines: Escaped Newlines. (line 6) -* exception handler functions: Function Attributes. - (line 385) -* exception handler functions on the Blackfin processor: Function Attributes. - (line 390) -* exclamation point: Multi-Alternative. (line 33) -* exit: Other Builtins. (line 6) -* exp: Other Builtins. (line 6) -* exp10: Other Builtins. (line 6) -* exp10f: Other Builtins. (line 6) -* exp10l: Other Builtins. (line 6) -* exp2: Other Builtins. (line 6) -* exp2f: Other Builtins. (line 6) -* exp2l: Other Builtins. (line 6) -* expf: Other Builtins. (line 6) -* expl: Other Builtins. (line 6) -* explicit register variables: Explicit Reg Vars. (line 6) -* expm1: Other Builtins. (line 6) -* expm1f: Other Builtins. (line 6) -* expm1l: Other Builtins. (line 6) -* expressions containing statements: Statement Exprs. (line 6) -* expressions, constructor: Compound Literals. (line 6) -* extended 'asm': Extended Asm. (line 6) -* extensible constraints: Simple Constraints. (line 161) -* extensions, '?:': Conditionals. (line 6) -* extensions, C language: C Extensions. (line 6) -* extensions, C++ language: C++ Extensions. (line 6) -* external declaration scope: Incompatibilities. (line 80) -* 'externally_visible' attribute.: Function Attributes. - (line 396) -* 'F' in constraint: Simple Constraints. (line 92) -* fabs: Other Builtins. (line 6) -* fabsf: Other Builtins. (line 6) -* fabsl: Other Builtins. (line 6) -* fatal signal: Bug Criteria. (line 9) -* fdim: Other Builtins. (line 6) -* fdimf: Other Builtins. (line 6) -* fdiml: Other Builtins. (line 6) -* FDL, GNU Free Documentation License: GNU Free Documentation License. - (line 6) -* ffs: Other Builtins. (line 6) -* file name suffix: Overall Options. (line 14) -* file names: Link Options. (line 10) -* fixed-point types: Fixed-Point. (line 6) -* 'flatten' function attribute: Function Attributes. - (line 178) -* flexible array members: Zero Length. (line 6) -* 'float' as function value type: Incompatibilities. (line 141) -* floating point precision: Disappointments. (line 68) -* floating-point precision: Optimize Options. (line 1917) -* floor: Other Builtins. (line 6) -* floorf: Other Builtins. (line 6) -* floorl: Other Builtins. (line 6) -* fma: Other Builtins. (line 6) -* fmaf: Other Builtins. (line 6) -* fmal: Other Builtins. (line 6) -* fmax: Other Builtins. (line 6) -* fmaxf: Other Builtins. (line 6) -* fmaxl: Other Builtins. (line 6) -* fmin: Other Builtins. (line 6) -* fminf: Other Builtins. (line 6) -* fminl: Other Builtins. (line 6) -* fmod: Other Builtins. (line 6) -* fmodf: Other Builtins. (line 6) -* fmodl: Other Builtins. (line 6) -* 'force_align_arg_pointer' attribute: Function Attributes. - (line 1384) -* 'format' function attribute: Function Attributes. - (line 453) -* 'format_arg' function attribute: Function Attributes. - (line 518) -* Fortran: G++ and GCC. (line 6) -* 'forwarder_section' attribute: Function Attributes. - (line 756) -* forwarding calls: Constructing Calls. (line 6) -* fprintf: Other Builtins. (line 6) -* fprintf_unlocked: Other Builtins. (line 6) -* fputs: Other Builtins. (line 6) -* fputs_unlocked: Other Builtins. (line 6) -* FR30 Options: FR30 Options. (line 6) -* freestanding environment: Standards. (line 13) -* freestanding implementation: Standards. (line 13) -* frexp: Other Builtins. (line 6) -* frexpf: Other Builtins. (line 6) -* frexpl: Other Builtins. (line 6) -* FRV Options: FRV Options. (line 6) -* fscanf: Other Builtins. (line 6) -* 'fscanf', and constant strings: Incompatibilities. (line 17) -* function addressability on the M32R/D: Function Attributes. - (line 974) -* function attributes: Function Attributes. - (line 6) -* function pointers, arithmetic: Pointer Arith. (line 6) -* function prototype declarations: Function Prototypes. - (line 6) -* function versions: Function Multiversioning. - (line 6) -* function without a prologue/epilogue code: Function Attributes. - (line 1046) -* function, size of pointer to: Pointer Arith. (line 6) -* functions called via pointer on the RS/6000 and PowerPC: Function Attributes. - (line 911) -* functions in arbitrary sections: Function Attributes. - (line 6) -* functions that are dynamically resolved: Function Attributes. - (line 6) -* functions that are passed arguments in registers on the 386: Function Attributes. - (line 6) -* functions that are passed arguments in registers on the 386 <1>: Function Attributes. - (line 1349) -* functions that behave like malloc: Function Attributes. - (line 6) -* functions that do not handle memory bank switching on 68HC11/68HC12: Function Attributes. - (line 1058) -* functions that do not pop the argument stack on the 386: Function Attributes. - (line 6) -* functions that do pop the argument stack on the 386: Function Attributes. - (line 209) -* functions that handle memory bank switching: Function Attributes. - (line 409) -* functions that have different compilation options on the 386: Function Attributes. - (line 6) -* functions that have different optimization options: Function Attributes. - (line 6) -* functions that have no side effects: Function Attributes. - (line 6) -* functions that never return: Function Attributes. - (line 6) -* functions that pop the argument stack on the 386: Function Attributes. - (line 6) -* functions that pop the argument stack on the 386 <1>: Function Attributes. - (line 435) -* functions that pop the argument stack on the 386 <2>: Function Attributes. - (line 443) -* functions that pop the argument stack on the 386 <3>: Function Attributes. - (line 1507) -* functions that return more than once: Function Attributes. - (line 6) -* functions with non-null pointer arguments: Function Attributes. - (line 6) -* functions with 'printf', 'scanf', 'strftime' or 'strfmon' style arguments: Function Attributes. - (line 6) -* 'G' in constraint: Simple Constraints. (line 96) -* 'g' in constraint: Simple Constraints. (line 118) -* g++: Invoking G++. (line 14) -* G++: G++ and GCC. (line 30) -* gamma: Other Builtins. (line 6) -* gammaf: Other Builtins. (line 6) -* gammaf_r: Other Builtins. (line 6) -* gammal: Other Builtins. (line 6) -* gammal_r: Other Builtins. (line 6) -* gamma_r: Other Builtins. (line 6) -* GCC: G++ and GCC. (line 6) -* GCC command options: Invoking GCC. (line 6) -* GCC_COLORS environment variable: Language Independent Options. - (line 35) -* GCC_COMPARE_DEBUG: Environment Variables. - (line 52) -* GCC_EXEC_PREFIX: Environment Variables. - (line 57) -* 'gcc_struct': Type Attributes. (line 323) -* 'gcc_struct' attribute: Variable Attributes. - (line 438) -* 'gcov': Debugging Options. (line 490) -* gettext: Other Builtins. (line 6) -* global offset table: Code Gen Options. (line 278) -* global register after 'longjmp': Global Reg Vars. (line 65) -* global register variables: Global Reg Vars. (line 6) -* GNAT: G++ and GCC. (line 30) -* GNU C Compiler: G++ and GCC. (line 6) -* GNU Compiler Collection: G++ and GCC. (line 6) -* 'gnu_inline' function attribute: Function Attributes. - (line 130) -* Go: G++ and GCC. (line 6) -* goto with computed label: Labels as Values. (line 6) -* 'gprof': Debugging Options. (line 415) -* grouping options: Invoking GCC. (line 26) -* 'H' in constraint: Simple Constraints. (line 96) -* half-precision floating point: Half-Precision. (line 6) -* hardware models and configurations, specifying: Submodel Options. - (line 6) -* hex floats: Hex Floats. (line 6) -* highlight, color, colour: Language Independent Options. - (line 35) -* 'hk' fixed-suffix: Fixed-Point. (line 6) -* 'HK' fixed-suffix: Fixed-Point. (line 6) -* hosted environment: Standards. (line 13) -* hosted environment <1>: C Dialect Options. (line 244) -* hosted environment <2>: C Dialect Options. (line 252) -* hosted implementation: Standards. (line 13) -* 'hot' function attribute: Function Attributes. - (line 1285) -* 'hot' label attribute: Function Attributes. - (line 1297) -* 'hotpatch' attribute: Function Attributes. - (line 1037) -* HPPA Options: HPPA Options. (line 6) -* 'hr' fixed-suffix: Fixed-Point. (line 6) -* 'HR' fixed-suffix: Fixed-Point. (line 6) -* hypot: Other Builtins. (line 6) -* hypotf: Other Builtins. (line 6) -* hypotl: Other Builtins. (line 6) -* 'i' in constraint: Simple Constraints. (line 68) -* 'I' in constraint: Simple Constraints. (line 79) -* i386 and x86-64 Windows Options: i386 and x86-64 Windows Options. - (line 6) -* i386 Options: i386 and x86-64 Options. - (line 6) -* IA-64 Options: IA-64 Options. (line 6) -* IBM RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. - (line 6) -* identifier names, dollar signs in: Dollar Signs. (line 6) -* identifiers, names in assembler code: Asm Labels. (line 6) -* 'ifunc' attribute: Function Attributes. - (line 625) -* ilogb: Other Builtins. (line 6) -* ilogbf: Other Builtins. (line 6) -* ilogbl: Other Builtins. (line 6) -* imaxabs: Other Builtins. (line 6) -* implementation-defined behavior, C language: C Implementation. - (line 6) -* implementation-defined behavior, C++ language: C++ Implementation. - (line 6) -* implied '#pragma implementation': C++ Interface. (line 46) -* incompatibilities of GCC: Incompatibilities. (line 6) -* increment operators: Bug Criteria. (line 17) -* index: Other Builtins. (line 6) -* indirect calls on ARC: Function Attributes. - (line 888) -* indirect calls on ARM: Function Attributes. - (line 888) -* indirect calls on Epiphany: Function Attributes. - (line 888) -* indirect calls on MIPS: Function Attributes. - (line 923) -* initializations in expressions: Compound Literals. (line 6) -* initializers with labeled elements: Designated Inits. (line 6) -* initializers, non-constant: Initializers. (line 6) -* 'init_priority' attribute: C++ Attributes. (line 35) -* 'inline' automatic for C++ member fns: Inline. (line 71) -* inline functions: Inline. (line 6) -* inline functions, omission of: Inline. (line 51) -* inlining and C++ pragmas: C++ Interface. (line 66) -* installation trouble: Trouble. (line 6) -* integrating function code: Inline. (line 6) -* Intel 386 Options: i386 and x86-64 Options. - (line 6) -* interface and implementation headers, C++: C++ Interface. (line 6) -* intermediate C version, nonexistent: G++ and GCC. (line 35) -* interrupt handler functions: Function Attributes. - (line 173) -* interrupt handler functions <1>: Function Attributes. - (line 429) -* interrupt handler functions <2>: Function Attributes. - (line 665) -* interrupt handler functions on the AVR processors: Function Attributes. - (line 1479) -* interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes. - (line 826) -* interrupt service routines on ARM: Function Attributes. - (line 840) -* interrupt thread functions on fido: Function Attributes. - (line 832) -* introduction: Top. (line 6) -* invalid assembly code: Bug Criteria. (line 12) -* invalid input: Bug Criteria. (line 42) -* invoking 'g++': Invoking G++. (line 22) -* isalnum: Other Builtins. (line 6) -* isalpha: Other Builtins. (line 6) -* isascii: Other Builtins. (line 6) -* isblank: Other Builtins. (line 6) -* iscntrl: Other Builtins. (line 6) -* isdigit: Other Builtins. (line 6) -* isgraph: Other Builtins. (line 6) -* islower: Other Builtins. (line 6) -* ISO 9899: Standards. (line 13) -* ISO C: Standards. (line 13) -* ISO C standard: Standards. (line 13) -* ISO C11: Standards. (line 13) -* ISO C1X: Standards. (line 13) -* ISO C90: Standards. (line 13) -* ISO C94: Standards. (line 13) -* ISO C95: Standards. (line 13) -* ISO C99: Standards. (line 13) -* ISO C9X: Standards. (line 13) -* ISO support: C Dialect Options. (line 10) -* ISO/IEC 9899: Standards. (line 13) -* isprint: Other Builtins. (line 6) -* ispunct: Other Builtins. (line 6) -* isspace: Other Builtins. (line 6) -* isupper: Other Builtins. (line 6) -* iswalnum: Other Builtins. (line 6) -* iswalpha: Other Builtins. (line 6) -* iswblank: Other Builtins. (line 6) -* iswcntrl: Other Builtins. (line 6) -* iswdigit: Other Builtins. (line 6) -* iswgraph: Other Builtins. (line 6) -* iswlower: Other Builtins. (line 6) -* iswprint: Other Builtins. (line 6) -* iswpunct: Other Builtins. (line 6) -* iswspace: Other Builtins. (line 6) -* iswupper: Other Builtins. (line 6) -* iswxdigit: Other Builtins. (line 6) -* isxdigit: Other Builtins. (line 6) -* j0: Other Builtins. (line 6) -* j0f: Other Builtins. (line 6) -* j0l: Other Builtins. (line 6) -* j1: Other Builtins. (line 6) -* j1f: Other Builtins. (line 6) -* j1l: Other Builtins. (line 6) -* Java: G++ and GCC. (line 6) -* 'java_interface' attribute: C++ Attributes. (line 56) -* jn: Other Builtins. (line 6) -* jnf: Other Builtins. (line 6) -* jnl: Other Builtins. (line 6) -* 'k' fixed-suffix: Fixed-Point. (line 6) -* 'K' fixed-suffix: Fixed-Point. (line 6) -* 'keep_interrupts_masked' attribute: Function Attributes. - (line 778) -* keywords, alternate: Alternate Keywords. (line 6) -* known causes of trouble: Trouble. (line 6) -* 'l1_data' variable attribute: Variable Attributes. - (line 352) -* 'l1_data_A' variable attribute: Variable Attributes. - (line 352) -* 'l1_data_B' variable attribute: Variable Attributes. - (line 352) -* 'l1_text' function attribute: Function Attributes. - (line 849) -* 'l2' function attribute: Function Attributes. - (line 855) -* 'l2' variable attribute: Variable Attributes. - (line 360) -* labeled elements in initializers: Designated Inits. (line 6) -* labels as values: Labels as Values. (line 6) -* labs: Other Builtins. (line 6) -* LANG: Environment Variables. - (line 21) -* LANG <1>: Environment Variables. - (line 106) -* language dialect options: C Dialect Options. (line 6) -* LC_ALL: Environment Variables. - (line 21) -* LC_CTYPE: Environment Variables. - (line 21) -* LC_MESSAGES: Environment Variables. - (line 21) -* ldexp: Other Builtins. (line 6) -* ldexpf: Other Builtins. (line 6) -* ldexpl: Other Builtins. (line 6) -* 'leaf' function attribute: Function Attributes. - (line 861) -* length-zero arrays: Zero Length. (line 6) -* lgamma: Other Builtins. (line 6) -* lgammaf: Other Builtins. (line 6) -* lgammaf_r: Other Builtins. (line 6) -* lgammal: Other Builtins. (line 6) -* lgammal_r: Other Builtins. (line 6) -* lgamma_r: Other Builtins. (line 6) -* Libraries: Link Options. (line 24) -* LIBRARY_PATH: Environment Variables. - (line 97) -* link options: Link Options. (line 6) -* linker script: Link Options. (line 213) -* 'lk' fixed-suffix: Fixed-Point. (line 6) -* 'LK' fixed-suffix: Fixed-Point. (line 6) -* 'LL' integer suffix: Long Long. (line 6) -* llabs: Other Builtins. (line 6) -* 'llk' fixed-suffix: Fixed-Point. (line 6) -* 'LLK' fixed-suffix: Fixed-Point. (line 6) -* 'llr' fixed-suffix: Fixed-Point. (line 6) -* 'LLR' fixed-suffix: Fixed-Point. (line 6) -* llrint: Other Builtins. (line 6) -* llrintf: Other Builtins. (line 6) -* llrintl: Other Builtins. (line 6) -* llround: Other Builtins. (line 6) -* llroundf: Other Builtins. (line 6) -* llroundl: Other Builtins. (line 6) -* LM32 options: LM32 Options. (line 6) -* load address instruction: Simple Constraints. (line 152) -* local labels: Local Labels. (line 6) -* local variables in macros: Typeof. (line 46) -* local variables, specifying registers: Local Reg Vars. (line 6) -* locale: Environment Variables. - (line 21) -* locale definition: Environment Variables. - (line 106) -* locus GCC_COLORS capability: Language Independent Options. - (line 79) -* log: Other Builtins. (line 6) -* log10: Other Builtins. (line 6) -* log10f: Other Builtins. (line 6) -* log10l: Other Builtins. (line 6) -* log1p: Other Builtins. (line 6) -* log1pf: Other Builtins. (line 6) -* log1pl: Other Builtins. (line 6) -* log2: Other Builtins. (line 6) -* log2f: Other Builtins. (line 6) -* log2l: Other Builtins. (line 6) -* logb: Other Builtins. (line 6) -* logbf: Other Builtins. (line 6) -* logbl: Other Builtins. (line 6) -* logf: Other Builtins. (line 6) -* logl: Other Builtins. (line 6) -* 'long long' data types: Long Long. (line 6) -* longjmp: Global Reg Vars. (line 65) -* 'longjmp' incompatibilities: Incompatibilities. (line 39) -* 'longjmp' warnings: Warning Options. (line 666) -* 'lr' fixed-suffix: Fixed-Point. (line 6) -* 'LR' fixed-suffix: Fixed-Point. (line 6) -* lrint: Other Builtins. (line 6) -* lrintf: Other Builtins. (line 6) -* lrintl: Other Builtins. (line 6) -* lround: Other Builtins. (line 6) -* lroundf: Other Builtins. (line 6) -* lroundl: Other Builtins. (line 6) -* 'm' in constraint: Simple Constraints. (line 17) -* M32C options: M32C Options. (line 6) -* M32R/D options: M32R/D Options. (line 6) -* M680x0 options: M680x0 Options. (line 6) -* machine dependent options: Submodel Options. (line 6) -* machine specific constraints: Machine Constraints. - (line 6) -* macro with variable arguments: Variadic Macros. (line 6) -* macros containing 'asm': Extended Asm. (line 237) -* macros, inline alternative: Inline. (line 6) -* macros, local labels: Local Labels. (line 6) -* macros, local variables in: Typeof. (line 46) -* macros, statements in expressions: Statement Exprs. (line 6) -* macros, types of arguments: Typeof. (line 6) -* 'make': Preprocessor Options. - (line 185) -* malloc: Other Builtins. (line 6) -* 'malloc' attribute: Function Attributes. - (line 933) -* matching constraint: Simple Constraints. (line 137) -* MCore options: MCore Options. (line 6) -* member fns, automatically 'inline': Inline. (line 71) -* memchr: Other Builtins. (line 6) -* memcmp: Other Builtins. (line 6) -* memcpy: Other Builtins. (line 6) -* memory references in constraints: Simple Constraints. (line 17) -* mempcpy: Other Builtins. (line 6) -* memset: Other Builtins. (line 6) -* MeP options: MeP Options. (line 6) -* Mercury: G++ and GCC. (line 23) -* message formatting: Language Independent Options. - (line 6) -* messages, warning: Warning Options. (line 6) -* messages, warning and error: Warnings and Errors. - (line 6) -* MicroBlaze Options: MicroBlaze Options. (line 6) -* 'micromips' attribute: Function Attributes. - (line 957) -* middle-operands, omitted: Conditionals. (line 6) -* MIPS options: MIPS Options. (line 6) -* 'mips16' attribute: Function Attributes. - (line 942) -* misunderstandings in C++: C++ Misunderstandings. - (line 6) -* mixed declarations and code: Mixed Declarations. (line 6) -* 'mktemp', and constant strings: Incompatibilities. (line 13) -* MMIX Options: MMIX Options. (line 6) -* MN10300 options: MN10300 Options. (line 6) -* 'mode' attribute: Variable Attributes. - (line 133) -* modf: Other Builtins. (line 6) -* modff: Other Builtins. (line 6) -* modfl: Other Builtins. (line 6) -* modifiers in constraints: Modifiers. (line 6) -* Moxie Options: Moxie Options. (line 6) -* MSP430 Options: MSP430 Options. (line 6) -* 'ms_abi' attribute: Function Attributes. - (line 1003) -* 'ms_hook_prologue' attribute: Function Attributes. - (line 1030) -* 'ms_struct': Type Attributes. (line 323) -* 'ms_struct' attribute: Variable Attributes. - (line 438) -* multiple alternative constraints: Multi-Alternative. (line 6) -* multiprecision arithmetic: Long Long. (line 6) -* 'n' in constraint: Simple Constraints. (line 73) -* Named Address Spaces: Named Address Spaces. - (line 6) -* names used in assembler code: Asm Labels. (line 6) -* naming convention, implementation headers: C++ Interface. (line 46) -* NDS32 Options: NDS32 Options. (line 6) -* nearbyint: Other Builtins. (line 6) -* nearbyintf: Other Builtins. (line 6) -* nearbyintl: Other Builtins. (line 6) -* 'nested' attribute: Function Attributes. - (line 806) -* nested functions: Nested Functions. (line 6) -* 'nested_ready' attribute: Function Attributes. - (line 810) -* newlines (escaped): Escaped Newlines. (line 6) -* nextafter: Other Builtins. (line 6) -* nextafterf: Other Builtins. (line 6) -* nextafterl: Other Builtins. (line 6) -* nexttoward: Other Builtins. (line 6) -* nexttowardf: Other Builtins. (line 6) -* nexttowardl: Other Builtins. (line 6) -* NFC: Warning Options. (line 1289) -* NFKC: Warning Options. (line 1289) -* Nios II options: Nios II Options. (line 6) -* 'nmi' attribute: Function Attributes. - (line 1371) -* NMI handler functions on the Blackfin processor: Function Attributes. - (line 1073) -* 'noclone' function attribute: Function Attributes. - (line 1107) -* 'nocommon' attribute: Variable Attributes. - (line 104) -* 'nocompression' attribute: Function Attributes. - (line 1079) -* 'noinline' function attribute: Function Attributes. - (line 1096) -* 'nomicromips' attribute: Function Attributes. - (line 957) -* 'nomips16' attribute: Function Attributes. - (line 942) -* non-constant initializers: Initializers. (line 6) -* non-static inline function: Inline. (line 85) -* 'nonnull' function attribute: Function Attributes. - (line 1113) -* 'noreturn' function attribute: Function Attributes. - (line 1147) -* 'nosave_low_regs' attribute: Function Attributes. - (line 1197) -* note GCC_COLORS capability: Language Independent Options. - (line 73) -* 'nothrow' function attribute: Function Attributes. - (line 1189) -* 'not_nested' attribute: Function Attributes. - (line 808) -* 'no_instrument_function' function attribute: Function Attributes. - (line 1085) -* 'no_sanitize_address' function attribute: Function Attributes. - (line 1335) -* 'no_sanitize_undefined' function attribute: Function Attributes. - (line 1343) -* 'no_split_stack' function attribute: Function Attributes. - (line 1090) -* 'o' in constraint: Simple Constraints. (line 23) -* OBJC_INCLUDE_PATH: Environment Variables. - (line 130) -* Objective-C: G++ and GCC. (line 6) -* Objective-C <1>: Standards. (line 162) -* Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options. - (line 6) -* Objective-C++: G++ and GCC. (line 6) -* Objective-C++ <1>: Standards. (line 162) -* offsettable address: Simple Constraints. (line 23) -* old-style function definitions: Function Prototypes. - (line 6) -* omitted middle-operands: Conditionals. (line 6) -* open coding: Inline. (line 6) -* OpenMP parallel: C Dialect Options. (line 263) -* OpenMP SIMD: C Dialect Options. (line 272) -* operand constraints, 'asm': Constraints. (line 6) -* 'optimize' function attribute: Function Attributes. - (line 1203) -* optimize options: Optimize Options. (line 6) -* options to control diagnostics formatting: Language Independent Options. - (line 6) -* options to control warnings: Warning Options. (line 6) -* options, C++: C++ Dialect Options. - (line 6) -* options, code generation: Code Gen Options. (line 6) -* options, debugging: Debugging Options. (line 6) -* options, dialect: C Dialect Options. (line 6) -* options, directory search: Directory Options. (line 6) -* options, GCC command: Invoking GCC. (line 6) -* options, grouping: Invoking GCC. (line 26) -* options, linking: Link Options. (line 6) -* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. - (line 6) -* options, optimization: Optimize Options. (line 6) -* options, order: Invoking GCC. (line 30) -* options, preprocessor: Preprocessor Options. - (line 6) -* order of evaluation, side effects: Non-bugs. (line 196) -* order of options: Invoking GCC. (line 30) -* 'OS_main' AVR function attribute: Function Attributes. - (line 1220) -* 'OS_task' AVR function attribute: Function Attributes. - (line 1220) -* other register constraints: Simple Constraints. (line 161) -* output file option: Overall Options. (line 191) -* overloaded virtual function, warning: C++ Dialect Options. - (line 655) -* 'p' in constraint: Simple Constraints. (line 152) -* 'packed' attribute: Variable Attributes. - (line 144) -* parameter forward declaration: Variable Length. (line 68) -* 'partial_save' attribute: Function Attributes. - (line 818) -* Pascal: G++ and GCC. (line 23) -* 'pcs' function attribute: Function Attributes. - (line 1244) -* PDP-11 Options: PDP-11 Options. (line 6) -* PIC: Code Gen Options. (line 278) -* picoChip options: picoChip Options. (line 6) -* pmf: Bound member functions. - (line 6) -* pointer arguments: Function Attributes. - (line 220) -* pointer to member function: Bound member functions. - (line 6) -* portions of temporary objects, pointers to: Temporaries. (line 6) -* pow: Other Builtins. (line 6) -* pow10: Other Builtins. (line 6) -* pow10f: Other Builtins. (line 6) -* pow10l: Other Builtins. (line 6) -* PowerPC options: PowerPC Options. (line 6) -* powf: Other Builtins. (line 6) -* powl: Other Builtins. (line 6) -* pragma GCC ivdep: Loop-Specific Pragmas. - (line 7) -* pragma GCC optimize: Function Specific Option Pragmas. - (line 20) -* pragma GCC pop_options: Function Specific Option Pragmas. - (line 34) -* pragma GCC push_options: Function Specific Option Pragmas. - (line 34) -* pragma GCC reset_options: Function Specific Option Pragmas. - (line 45) -* pragma GCC target: Function Specific Option Pragmas. - (line 7) -* pragma, address: M32C Pragmas. (line 15) -* pragma, align: Solaris Pragmas. (line 11) -* pragma, call: MeP Pragmas. (line 48) -* pragma, coprocessor available: MeP Pragmas. (line 13) -* pragma, coprocessor call_saved: MeP Pragmas. (line 20) -* pragma, coprocessor subclass: MeP Pragmas. (line 28) -* pragma, custom io_volatile: MeP Pragmas. (line 7) -* pragma, diagnostic: Diagnostic Pragmas. (line 14) -* pragma, diagnostic <1>: Diagnostic Pragmas. (line 57) -* pragma, disinterrupt: MeP Pragmas. (line 38) -* pragma, fini: Solaris Pragmas. (line 20) -* pragma, init: Solaris Pragmas. (line 26) -* pragma, longcall: RS/6000 and PowerPC Pragmas. - (line 14) -* pragma, long_calls: ARM Pragmas. (line 11) -* pragma, long_calls_off: ARM Pragmas. (line 17) -* pragma, mark: Darwin Pragmas. (line 11) -* pragma, memregs: M32C Pragmas. (line 7) -* pragma, no_long_calls: ARM Pragmas. (line 14) -* pragma, options align: Darwin Pragmas. (line 14) -* pragma, pop_macro: Push/Pop Macro Pragmas. - (line 15) -* pragma, push_macro: Push/Pop Macro Pragmas. - (line 11) -* pragma, reason for not using: Function Attributes. - (line 2055) -* pragma, redefine_extname: Symbol-Renaming Pragmas. - (line 12) -* pragma, segment: Darwin Pragmas. (line 21) -* pragma, unused: Darwin Pragmas. (line 24) -* pragma, visibility: Visibility Pragmas. (line 8) -* pragma, weak: Weak Pragmas. (line 10) -* pragmas: Pragmas. (line 6) -* pragmas in C++, effect on inlining: C++ Interface. (line 66) -* pragmas, interface and implementation: C++ Interface. (line 6) -* pragmas, warning of unknown: Warning Options. (line 683) -* precompiled headers: Precompiled Headers. - (line 6) -* preprocessing numbers: Incompatibilities. (line 173) -* preprocessing tokens: Incompatibilities. (line 173) -* preprocessor options: Preprocessor Options. - (line 6) -* printf: Other Builtins. (line 6) -* printf_unlocked: Other Builtins. (line 6) -* 'prof': Debugging Options. (line 409) -* 'progmem' AVR variable attribute: Variable Attributes. - (line 314) -* promotion of formal parameters: Function Prototypes. - (line 6) -* 'pure' function attribute: Function Attributes. - (line 1263) -* push address instruction: Simple Constraints. (line 152) -* putchar: Other Builtins. (line 6) -* puts: Other Builtins. (line 6) -* 'q' floating point suffix: Floating Types. (line 6) -* 'Q' floating point suffix: Floating Types. (line 6) -* 'qsort', and global register variables: Global Reg Vars. (line 41) -* question mark: Multi-Alternative. (line 27) -* quote GCC_COLORS capability: Language Independent Options. - (line 83) -* 'r' fixed-suffix: Fixed-Point. (line 6) -* 'R' fixed-suffix: Fixed-Point. (line 6) -* 'r' in constraint: Simple Constraints. (line 64) -* 'RAMPD': AVR Options. (line 333) -* 'RAMPX': AVR Options. (line 333) -* 'RAMPY': AVR Options. (line 333) -* 'RAMPZ': AVR Options. (line 333) -* ranges in case statements: Case Ranges. (line 6) -* read-only strings: Incompatibilities. (line 9) -* 'reentrant' attribute: Function Attributes. - (line 723) -* register variable after 'longjmp': Global Reg Vars. (line 65) -* registers: Extended Asm. (line 6) -* registers for local variables: Local Reg Vars. (line 6) -* registers in constraints: Simple Constraints. (line 64) -* registers, global allocation: Explicit Reg Vars. (line 6) -* registers, global variables in: Global Reg Vars. (line 6) -* 'regparm' attribute: Function Attributes. - (line 1349) -* relocation truncated to fit (ColdFire): M680x0 Options. (line 325) -* relocation truncated to fit (MIPS): MIPS Options. (line 207) -* remainder: Other Builtins. (line 6) -* remainderf: Other Builtins. (line 6) -* remainderl: Other Builtins. (line 6) -* remquo: Other Builtins. (line 6) -* remquof: Other Builtins. (line 6) -* remquol: Other Builtins. (line 6) -* 'renesas' attribute: Function Attributes. - (line 1392) -* reordering, warning: C++ Dialect Options. - (line 573) -* reporting bugs: Bugs. (line 6) -* 'resbank' attribute: Function Attributes. - (line 1396) -* reset handler functions: Function Attributes. - (line 1366) -* rest argument (in macro): Variadic Macros. (line 6) -* restricted pointers: Restricted Pointers. - (line 6) -* restricted references: Restricted Pointers. - (line 6) -* restricted this pointer: Restricted Pointers. - (line 6) -* 'returns_nonnull' function attribute: Function Attributes. - (line 1137) -* 'returns_twice' attribute: Function Attributes. - (line 1410) -* rindex: Other Builtins. (line 6) -* rint: Other Builtins. (line 6) -* rintf: Other Builtins. (line 6) -* rintl: Other Builtins. (line 6) -* RL78 Options: RL78 Options. (line 6) -* round: Other Builtins. (line 6) -* roundf: Other Builtins. (line 6) -* roundl: Other Builtins. (line 6) -* RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. - (line 6) -* RTTI: Vague Linkage. (line 42) -* run-time options: Code Gen Options. (line 6) -* RX Options: RX Options. (line 6) -* 's' in constraint: Simple Constraints. (line 100) -* S/390 and zSeries Options: S/390 and zSeries Options. - (line 6) -* save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes. - (line 1419) -* save volatile registers on the MicroBlaze: Function Attributes. - (line 1424) -* 'save_all' attribute: Function Attributes. - (line 815) -* scalb: Other Builtins. (line 6) -* scalbf: Other Builtins. (line 6) -* scalbl: Other Builtins. (line 6) -* scalbln: Other Builtins. (line 6) -* scalblnf: Other Builtins. (line 6) -* scalblnf <1>: Other Builtins. (line 6) -* scalbn: Other Builtins. (line 6) -* scalbnf: Other Builtins. (line 6) -* 'scanf', and constant strings: Incompatibilities. (line 17) -* scanfnl: Other Builtins. (line 6) -* scope of a variable length array: Variable Length. (line 22) -* scope of declaration: Disappointments. (line 21) -* scope of external declarations: Incompatibilities. (line 80) -* Score Options: Score Options. (line 6) -* search path: Directory Options. (line 6) -* 'section' function attribute: Function Attributes. - (line 1432) -* 'section' variable attribute: Variable Attributes. - (line 165) -* 'sentinel' function attribute: Function Attributes. - (line 1448) -* setjmp: Global Reg Vars. (line 65) -* 'setjmp' incompatibilities: Incompatibilities. (line 39) -* shared strings: Incompatibilities. (line 9) -* 'shared' variable attribute: Variable Attributes. - (line 210) -* side effect in '?:': Conditionals. (line 20) -* side effects, macro argument: Statement Exprs. (line 35) -* side effects, order of evaluation: Non-bugs. (line 196) -* signbit: Other Builtins. (line 6) -* signbitd128: Other Builtins. (line 6) -* signbitd32: Other Builtins. (line 6) -* signbitd64: Other Builtins. (line 6) -* signbitf: Other Builtins. (line 6) -* signbitl: Other Builtins. (line 6) -* signed and unsigned values, comparison warning: Warning Options. - (line 1155) -* significand: Other Builtins. (line 6) -* significandf: Other Builtins. (line 6) -* significandl: Other Builtins. (line 6) -* SIMD: C Dialect Options. (line 272) -* simple constraints: Simple Constraints. (line 6) -* sin: Other Builtins. (line 6) -* sincos: Other Builtins. (line 6) -* sincosf: Other Builtins. (line 6) -* sincosl: Other Builtins. (line 6) -* sinf: Other Builtins. (line 6) -* sinh: Other Builtins. (line 6) -* sinhf: Other Builtins. (line 6) -* sinhl: Other Builtins. (line 6) -* sinl: Other Builtins. (line 6) -* sizeof: Typeof. (line 6) -* smaller data references: M32R/D Options. (line 57) -* smaller data references <1>: Nios II Options. (line 9) -* smaller data references (PowerPC): RS/6000 and PowerPC Options. - (line 739) -* snprintf: Other Builtins. (line 6) -* Solaris 2 options: Solaris 2 Options. (line 6) -* SPARC options: SPARC Options. (line 6) -* Spec Files: Spec Files. (line 6) -* specified registers: Explicit Reg Vars. (line 6) -* specifying compiler version and target machine: Target Options. - (line 6) -* specifying hardware config: Submodel Options. (line 6) -* specifying machine version: Target Options. (line 6) -* specifying registers for local variables: Local Reg Vars. (line 6) -* speed of compilation: Precompiled Headers. - (line 6) -* sprintf: Other Builtins. (line 6) -* SPU options: SPU Options. (line 6) -* 'sp_switch' attribute: Function Attributes. - (line 1497) -* sqrt: Other Builtins. (line 6) -* sqrtf: Other Builtins. (line 6) -* sqrtl: Other Builtins. (line 6) -* sscanf: Other Builtins. (line 6) -* 'sscanf', and constant strings: Incompatibilities. (line 17) -* 'sseregparm' attribute: Function Attributes. - (line 1377) -* statements inside expressions: Statement Exprs. (line 6) -* static data in C++, declaring and defining: Static Definitions. - (line 6) -* stpcpy: Other Builtins. (line 6) -* stpncpy: Other Builtins. (line 6) -* strcasecmp: Other Builtins. (line 6) -* strcat: Other Builtins. (line 6) -* strchr: Other Builtins. (line 6) -* strcmp: Other Builtins. (line 6) -* strcpy: Other Builtins. (line 6) -* strcspn: Other Builtins. (line 6) -* strdup: Other Builtins. (line 6) -* strfmon: Other Builtins. (line 6) -* strftime: Other Builtins. (line 6) -* string constants: Incompatibilities. (line 9) -* strlen: Other Builtins. (line 6) -* strncasecmp: Other Builtins. (line 6) -* strncat: Other Builtins. (line 6) -* strncmp: Other Builtins. (line 6) -* strncpy: Other Builtins. (line 6) -* strndup: Other Builtins. (line 6) -* strpbrk: Other Builtins. (line 6) -* strrchr: Other Builtins. (line 6) -* strspn: Other Builtins. (line 6) -* strstr: Other Builtins. (line 6) -* 'struct': Unnamed Fields. (line 6) -* struct __htm_tdb: S/390 System z Built-in Functions. - (line 49) -* structures: Incompatibilities. (line 146) -* structures, constructor expression: Compound Literals. (line 6) -* submodel options: Submodel Options. (line 6) -* subscripting: Subscripting. (line 6) -* subscripting and function values: Subscripting. (line 6) -* suffixes for C++ source: Invoking G++. (line 6) -* SUNPRO_DEPENDENCIES: Environment Variables. - (line 170) -* suppressing warnings: Warning Options. (line 6) -* surprises in C++: C++ Misunderstandings. - (line 6) -* syntax checking: Warning Options. (line 13) -* 'syscall_linkage' attribute: Function Attributes. - (line 1512) -* system headers, warnings from: Warning Options. (line 834) -* 'sysv_abi' attribute: Function Attributes. - (line 1003) -* tan: Other Builtins. (line 6) -* tanf: Other Builtins. (line 6) -* tanh: Other Builtins. (line 6) -* tanhf: Other Builtins. (line 6) -* tanhl: Other Builtins. (line 6) -* tanl: Other Builtins. (line 6) -* 'target' function attribute: Function Attributes. - (line 1519) -* target machine, specifying: Target Options. (line 6) -* target options: Target Options. (line 6) -* 'target("abm")' attribute: Function Attributes. - (line 1552) -* 'target("aes")' attribute: Function Attributes. - (line 1557) -* 'target("align-stringops")' attribute: Function Attributes. - (line 1651) -* 'target("altivec")' attribute: Function Attributes. - (line 1677) -* 'target("arch=ARCH")' attribute: Function Attributes. - (line 1660) -* 'target("avoid-indexed-addresses")' attribute: Function Attributes. - (line 1798) -* 'target("cld")' attribute: Function Attributes. - (line 1622) -* 'target("cmpb")' attribute: Function Attributes. - (line 1683) -* 'target("cpu=CPU")' attribute: Function Attributes. - (line 1813) -* 'target("custom-fpu-cfg=NAME")' attribute: Function Attributes. - (line 1839) -* 'target("custom-INSN=N")' attribute: Function Attributes. - (line 1830) -* 'target("default")' attribute: Function Attributes. - (line 1560) -* 'target("dlmzb")' attribute: Function Attributes. - (line 1689) -* 'target("fancy-math-387")' attribute: Function Attributes. - (line 1626) -* 'target("fma4")' attribute: Function Attributes. - (line 1606) -* 'target("fpmath=FPMATH")' attribute: Function Attributes. - (line 1668) -* 'target("fprnd")' attribute: Function Attributes. - (line 1696) -* 'target("friz")' attribute: Function Attributes. - (line 1789) -* 'target("fused-madd")' attribute: Function Attributes. - (line 1631) -* 'target("hard-dfp")' attribute: Function Attributes. - (line 1702) -* 'target("ieee-fp")' attribute: Function Attributes. - (line 1636) -* 'target("inline-all-stringops")' attribute: Function Attributes. - (line 1641) -* 'target("inline-stringops-dynamically")' attribute: Function Attributes. - (line 1645) -* 'target("isel")' attribute: Function Attributes. - (line 1708) -* 'target("longcall")' attribute: Function Attributes. - (line 1808) -* 'target("lwp")' attribute: Function Attributes. - (line 1614) -* 'target("mfcrf")' attribute: Function Attributes. - (line 1712) -* 'target("mfpgpr")' attribute: Function Attributes. - (line 1719) -* 'target("mmx")' attribute: Function Attributes. - (line 1565) -* 'target("mulhw")' attribute: Function Attributes. - (line 1726) -* 'target("multiple")' attribute: Function Attributes. - (line 1733) -* 'target("no-custom-INSN")' attribute: Function Attributes. - (line 1830) -* 'target("paired")' attribute: Function Attributes. - (line 1803) -* 'target("pclmul")' attribute: Function Attributes. - (line 1569) -* 'target("popcnt")' attribute: Function Attributes. - (line 1573) -* 'target("popcntb")' attribute: Function Attributes. - (line 1744) -* 'target("popcntd")' attribute: Function Attributes. - (line 1751) -* 'target("powerpc-gfxopt")' attribute: Function Attributes. - (line 1757) -* 'target("powerpc-gpopt")' attribute: Function Attributes. - (line 1763) -* 'target("recip")' attribute: Function Attributes. - (line 1655) -* 'target("recip-precision")' attribute: Function Attributes. - (line 1769) -* 'target("sse")' attribute: Function Attributes. - (line 1577) -* 'target("sse2")' attribute: Function Attributes. - (line 1581) -* 'target("sse3")' attribute: Function Attributes. - (line 1585) -* 'target("sse4")' attribute: Function Attributes. - (line 1589) -* 'target("sse4.1")' attribute: Function Attributes. - (line 1594) -* 'target("sse4.2")' attribute: Function Attributes. - (line 1598) -* 'target("sse4a")' attribute: Function Attributes. - (line 1602) -* 'target("ssse3")' attribute: Function Attributes. - (line 1618) -* 'target("string")' attribute: Function Attributes. - (line 1775) -* 'target("tune=TUNE")' attribute: Function Attributes. - (line 1664) -* 'target("tune=TUNE")' attribute <1>: Function Attributes. - (line 1820) -* 'target("update")' attribute: Function Attributes. - (line 1738) -* 'target("vsx")' attribute: Function Attributes. - (line 1781) -* 'target("xop")' attribute: Function Attributes. - (line 1610) -* TC1: Standards. (line 13) -* TC2: Standards. (line 13) -* TC3: Standards. (line 13) -* Technical Corrigenda: Standards. (line 13) -* Technical Corrigendum 1: Standards. (line 13) -* Technical Corrigendum 2: Standards. (line 13) -* Technical Corrigendum 3: Standards. (line 13) -* template instantiation: Template Instantiation. - (line 6) -* temporaries, lifetime of: Temporaries. (line 6) -* tgamma: Other Builtins. (line 6) -* tgammaf: Other Builtins. (line 6) -* tgammal: Other Builtins. (line 6) -* Thread-Local Storage: Thread-Local. (line 6) -* thunks: Nested Functions. (line 6) -* TILE-Gx options: TILE-Gx Options. (line 6) -* TILEPro options: TILEPro Options. (line 6) -* tiny data section on the H8/300H and H8S: Function Attributes. - (line 1852) -* TLS: Thread-Local. (line 6) -* 'tls_model' attribute: Variable Attributes. - (line 233) -* TMPDIR: Environment Variables. - (line 45) -* toascii: Other Builtins. (line 6) -* tolower: Other Builtins. (line 6) -* toupper: Other Builtins. (line 6) -* towlower: Other Builtins. (line 6) -* towupper: Other Builtins. (line 6) -* traditional C language: C Dialect Options. (line 331) -* 'trapa_handler' attribute: Function Attributes. - (line 1864) -* 'trap_exit' attribute: Function Attributes. - (line 1859) -* trunc: Other Builtins. (line 6) -* truncf: Other Builtins. (line 6) -* truncl: Other Builtins. (line 6) -* two-stage name lookup: Name lookup. (line 6) -* type alignment: Alignment. (line 6) -* type attributes: Type Attributes. (line 6) -* typedef names as function parameters: Incompatibilities. (line 97) -* typeof: Typeof. (line 6) -* 'type_info': Vague Linkage. (line 42) -* 'uhk' fixed-suffix: Fixed-Point. (line 6) -* 'UHK' fixed-suffix: Fixed-Point. (line 6) -* 'uhr' fixed-suffix: Fixed-Point. (line 6) -* 'UHR' fixed-suffix: Fixed-Point. (line 6) -* 'uk' fixed-suffix: Fixed-Point. (line 6) -* 'UK' fixed-suffix: Fixed-Point. (line 6) -* 'ulk' fixed-suffix: Fixed-Point. (line 6) -* 'ULK' fixed-suffix: Fixed-Point. (line 6) -* 'ULL' integer suffix: Long Long. (line 6) -* 'ullk' fixed-suffix: Fixed-Point. (line 6) -* 'ULLK' fixed-suffix: Fixed-Point. (line 6) -* 'ullr' fixed-suffix: Fixed-Point. (line 6) -* 'ULLR' fixed-suffix: Fixed-Point. (line 6) -* 'ulr' fixed-suffix: Fixed-Point. (line 6) -* 'ULR' fixed-suffix: Fixed-Point. (line 6) -* undefined behavior: Bug Criteria. (line 17) -* undefined function value: Bug Criteria. (line 17) -* underscores in variables in macros: Typeof. (line 46) -* 'union': Unnamed Fields. (line 6) -* union, casting to a: Cast to Union. (line 6) -* unions: Incompatibilities. (line 146) -* unknown pragmas, warning: Warning Options. (line 683) -* unresolved references and '-nodefaultlibs': Link Options. (line 85) -* unresolved references and '-nostdlib': Link Options. (line 85) -* 'unused' attribute.: Function Attributes. - (line 1868) -* 'ur' fixed-suffix: Fixed-Point. (line 6) -* 'UR' fixed-suffix: Fixed-Point. (line 6) -* 'used' attribute.: Function Attributes. - (line 1873) -* User stack pointer in interrupts on the Blackfin: Function Attributes. - (line 844) -* 'use_debug_exception_return' attribute: Function Attributes. - (line 783) -* 'use_shadow_register_set' attribute: Function Attributes. - (line 774) -* 'V' in constraint: Simple Constraints. (line 43) -* V850 Options: V850 Options. (line 6) -* vague linkage: Vague Linkage. (line 6) -* value after 'longjmp': Global Reg Vars. (line 65) -* variable addressability on the IA-64: Function Attributes. - (line 974) -* variable addressability on the M32R/D: Variable Attributes. - (line 370) -* variable alignment: Alignment. (line 6) -* variable attributes: Variable Attributes. - (line 6) -* variable number of arguments: Variadic Macros. (line 6) -* variable-length array in a structure: Variable Length. (line 26) -* variable-length array scope: Variable Length. (line 22) -* variable-length arrays: Variable Length. (line 6) -* variables in specified registers: Explicit Reg Vars. (line 6) -* variables, local, in macros: Typeof. (line 46) -* variadic macros: Variadic Macros. (line 6) -* VAX options: VAX Options. (line 6) -* 'version_id' attribute: Function Attributes. - (line 1883) -* vfprintf: Other Builtins. (line 6) -* vfscanf: Other Builtins. (line 6) -* 'visibility' attribute: Function Attributes. - (line 1893) -* VLAs: Variable Length. (line 6) -* 'vliw' attribute: Function Attributes. - (line 1989) -* void pointers, arithmetic: Pointer Arith. (line 6) -* void, size of pointer to: Pointer Arith. (line 6) -* volatile access: Volatiles. (line 6) -* volatile access <1>: C++ Volatiles. (line 6) -* 'volatile' applied to function: Function Attributes. - (line 6) -* volatile read: Volatiles. (line 6) -* volatile read <1>: C++ Volatiles. (line 6) -* volatile write: Volatiles. (line 6) -* volatile write <1>: C++ Volatiles. (line 6) -* vprintf: Other Builtins. (line 6) -* vscanf: Other Builtins. (line 6) -* vsnprintf: Other Builtins. (line 6) -* vsprintf: Other Builtins. (line 6) -* vsscanf: Other Builtins. (line 6) -* vtable: Vague Linkage. (line 27) -* VxWorks Options: VxWorks Options. (line 6) -* 'w' floating point suffix: Floating Types. (line 6) -* 'W' floating point suffix: Floating Types. (line 6) -* 'wakeup' attribute: Function Attributes. - (line 729) -* 'warm' attribute: Function Attributes. - (line 1373) -* warning for comparison of signed and unsigned values: Warning Options. - (line 1155) -* warning for overloaded virtual function: C++ Dialect Options. - (line 655) -* warning for reordering of member initializers: C++ Dialect Options. - (line 573) -* warning for unknown pragmas: Warning Options. (line 683) -* 'warning' function attribute: Function Attributes. - (line 198) -* warning GCC_COLORS capability: Language Independent Options. - (line 70) -* warning messages: Warning Options. (line 6) -* warnings from system headers: Warning Options. (line 834) -* warnings vs errors: Warnings and Errors. - (line 6) -* 'warn_unused' attribute: C++ Attributes. (line 64) -* 'warn_unused_result' attribute: Function Attributes. - (line 1995) -* 'weak' attribute: Function Attributes. - (line 2012) -* 'weakref' attribute: Function Attributes. - (line 2021) -* whitespace: Incompatibilities. (line 112) -* 'X' in constraint: Simple Constraints. (line 122) -* X3.159-1989: Standards. (line 13) -* x86-64 Options: i386 and x86-64 Options. - (line 6) -* x86-64 options: x86-64 Options. (line 6) -* Xstormy16 Options: Xstormy16 Options. (line 6) -* Xtensa Options: Xtensa Options. (line 6) -* y0: Other Builtins. (line 6) -* y0f: Other Builtins. (line 6) -* y0l: Other Builtins. (line 6) -* y1: Other Builtins. (line 6) -* y1f: Other Builtins. (line 6) -* y1l: Other Builtins. (line 6) -* yn: Other Builtins. (line 6) -* ynf: Other Builtins. (line 6) -* ynl: Other Builtins. (line 6) -* zero-length arrays: Zero Length. (line 6) -* zero-size structures: Empty Structures. (line 6) -* zSeries options: zSeries Options. (line 6) - - - -Tag Table: -Node: Top1881 -Node: G++ and GCC3629 -Node: Standards5686 -Node: Invoking GCC17845 -Node: Option Summary21590 -Node: Overall Options63276 -Node: Invoking G++77463 -Node: C Dialect Options78986 -Node: C++ Dialect Options95984 -Node: Objective-C and Objective-C++ Dialect Options126529 -Node: Language Independent Options137036 -Node: Warning Options141536 -Node: Debugging Options211575 -Node: Optimize Options271636 -Ref: Type-punning331182 -Node: Preprocessor Options413934 -Ref: Wtrigraphs418717 -Ref: dashMF423467 -Ref: fdollars-in-identifiers434348 -Node: Assembler Options444573 -Node: Link Options445264 -Ref: Link Options-Footnote-1457404 -Node: Directory Options457740 -Node: Spec Files464284 -Node: Target Options486113 -Node: Submodel Options486512 -Node: AArch64 Options488278 -Node: Adapteva Epiphany Options493403 -Node: ARC Options499351 -Node: ARM Options511795 -Node: AVR Options529093 -Node: Blackfin Options549318 -Node: C6X Options557336 -Node: CRIS Options558879 -Node: CR16 Options562618 -Node: Darwin Options563529 -Node: DEC Alpha Options570963 -Node: FR30 Options582579 -Node: FRV Options583143 -Node: GNU/Linux Options589907 -Node: H8/300 Options591167 -Node: HPPA Options592619 -Node: i386 and x86-64 Options601921 -Node: i386 and x86-64 Windows Options643992 -Node: IA-64 Options646845 -Node: LM32 Options654911 -Node: M32C Options655434 -Node: M32R/D Options656707 -Node: M680x0 Options660252 -Node: MCore Options674287 -Node: MeP Options675789 -Node: MicroBlaze Options679749 -Node: MIPS Options682551 -Node: MMIX Options714436 -Node: MN10300 Options716913 -Node: Moxie Options719454 -Node: MSP430 Options719824 -Node: NDS32 Options721913 -Node: Nios II Options723793 -Node: PDP-11 Options732258 -Node: picoChip Options733952 -Node: PowerPC Options736090 -Node: RL78 Options736311 -Node: RS/6000 and PowerPC Options736972 -Node: RX Options775902 -Node: S/390 and zSeries Options783234 -Node: Score Options791781 -Node: SH Options792630 -Node: Solaris 2 Options811301 -Node: SPARC Options812531 -Node: SPU Options825566 -Node: System V Options830505 -Node: TILE-Gx Options831331 -Node: TILEPro Options832349 -Node: V850 Options832853 -Node: VAX Options839561 -Node: VMS Options840096 -Node: VxWorks Options840909 -Node: x86-64 Options842064 -Node: Xstormy16 Options842282 -Node: Xtensa Options842571 -Node: zSeries Options846882 -Node: Code Gen Options847078 -Node: Environment Variables877946 -Node: Precompiled Headers885949 -Node: C Implementation891952 -Node: Translation implementation893642 -Node: Environment implementation894233 -Node: Identifiers implementation894787 -Node: Characters implementation895873 -Node: Integers implementation899523 -Node: Floating point implementation901408 -Node: Arrays and pointers implementation904471 -Ref: Arrays and pointers implementation-Footnote-1905931 -Node: Hints implementation906057 -Node: Structures unions enumerations and bit-fields implementation907542 -Node: Qualifiers implementation909766 -Node: Declarators implementation911546 -Node: Statements implementation911887 -Node: Preprocessing directives implementation912213 -Node: Library functions implementation914534 -Node: Architecture implementation915183 -Node: Locale-specific behavior implementation916828 -Node: C++ Implementation917133 -Node: Conditionally-supported behavior918416 -Node: Exception handling918925 -Node: C Extensions919333 -Node: Statement Exprs924403 -Node: Local Labels928880 -Node: Labels as Values931853 -Ref: Labels as Values-Footnote-1934254 -Node: Nested Functions934439 -Node: Constructing Calls938397 -Node: Typeof943114 -Node: Conditionals947496 -Node: __int128948385 -Node: Long Long948910 -Node: Complex950386 -Node: Floating Types952974 -Node: Half-Precision954102 -Node: Decimal Float956287 -Node: Hex Floats958143 -Node: Fixed-Point959180 -Node: Named Address Spaces962440 -Ref: AVR Named Address Spaces963121 -Node: Zero Length968329 -Node: Empty Structures971616 -Node: Variable Length972022 -Node: Variadic Macros974878 -Node: Escaped Newlines977256 -Node: Subscripting978095 -Node: Pointer Arith978820 -Node: Initializers979388 -Node: Compound Literals979884 -Node: Designated Inits983245 -Node: Case Ranges986983 -Node: Cast to Union987664 -Node: Mixed Declarations988754 -Node: Function Attributes989264 -Node: Attribute Syntax1083847 -Node: Function Prototypes1094237 -Node: C++ Comments1096017 -Node: Dollar Signs1096536 -Node: Character Escapes1097001 -Node: Variable Attributes1097295 -Ref: AVR Variable Attributes1110970 -Ref: MeP Variable Attributes1113632 -Ref: i386 Variable Attributes1115568 -Node: Type Attributes1121229 -Ref: MeP Type Attributes1135117 -Ref: i386 Type Attributes1135391 -Ref: PowerPC Type Attributes1136083 -Ref: SPU Type Attributes1136945 -Node: Alignment1137236 -Node: Inline1138606 -Node: Volatiles1143582 -Node: Extended Asm1146463 -Ref: Example of asm with clobbered asm reg1152367 -Ref: Extended asm with goto1162080 -Node: Constraints1169930 -Node: Simple Constraints1171014 -Node: Multi-Alternative1178324 -Node: Modifiers1180041 -Node: Machine Constraints1183054 -Node: Asm Labels1240008 -Node: Explicit Reg Vars1241684 -Node: Global Reg Vars1243282 -Node: Local Reg Vars1247778 -Node: Alternate Keywords1250194 -Node: Incomplete Enums1251680 -Node: Function Names1252436 -Node: Return Address1254597 -Node: Vector Extensions1258104 -Node: Offsetof1265033 -Node: __sync Builtins1265838 -Node: __atomic Builtins1271307 -Node: x86 specific memory model extensions for transactional memory1282941 -Node: Object Size Checking1284203 -Node: Cilk Plus Builtins1289696 -Node: Other Builtins1290565 -Node: Target Builtins1319872 -Node: Alpha Built-in Functions1321291 -Node: Altera Nios II Built-in Functions1324304 -Node: ARC Built-in Functions1328291 -Node: ARC SIMD Built-in Functions1333503 -Node: ARM iWMMXt Built-in Functions1342399 -Node: ARM NEON Intrinsics1349382 -Node: ARM ACLE Intrinsics1566876 -Node: AVR Built-in Functions1568257 -Node: Blackfin Built-in Functions1571335 -Node: FR-V Built-in Functions1571952 -Node: Argument Types1572815 -Node: Directly-mapped Integer Functions1574569 -Node: Directly-mapped Media Functions1575653 -Node: Raw read/write Functions1583859 -Node: Other Built-in Functions1584767 -Node: X86 Built-in Functions1585953 -Node: X86 transactional memory intrinsics1645162 -Node: MIPS DSP Built-in Functions1647838 -Node: MIPS Paired-Single Support1660347 -Node: MIPS Loongson Built-in Functions1661846 -Node: Paired-Single Arithmetic1668361 -Node: Paired-Single Built-in Functions1669309 -Node: MIPS-3D Built-in Functions1671976 -Node: Other MIPS Built-in Functions1677354 -Node: MSP430 Built-in Functions1678359 -Node: NDS32 Built-in Functions1679263 -Node: picoChip Built-in Functions1680556 -Node: PowerPC Built-in Functions1681899 -Node: PowerPC AltiVec/VSX Built-in Functions1683314 -Node: PowerPC Hardware Transactional Memory Built-in Functions1815519 -Node: RX Built-in Functions1822060 -Node: S/390 System z Built-in Functions1826093 -Node: SH Built-in Functions1831322 -Node: SPARC VIS Built-in Functions1832714 -Node: SPU Built-in Functions1838317 -Node: TI C6X Built-in Functions1840134 -Node: TILE-Gx Built-in Functions1841158 -Node: TILEPro Built-in Functions1842275 -Node: Target Format Checks1843342 -Node: Solaris Format Checks1843774 -Node: Darwin Format Checks1844200 -Node: Pragmas1845018 -Node: ARM Pragmas1845754 -Node: M32C Pragmas1846357 -Node: MeP Pragmas1847429 -Node: RS/6000 and PowerPC Pragmas1849497 -Node: Darwin Pragmas1850238 -Node: Solaris Pragmas1851305 -Node: Symbol-Renaming Pragmas1852469 -Node: Structure-Packing Pragmas1854025 -Node: Weak Pragmas1855670 -Node: Diagnostic Pragmas1856404 -Node: Visibility Pragmas1859513 -Node: Push/Pop Macro Pragmas1860265 -Node: Function Specific Option Pragmas1861238 -Node: Loop-Specific Pragmas1863429 -Node: Unnamed Fields1864528 -Node: Thread-Local1866755 -Node: C99 Thread-Local Edits1868860 -Node: C++98 Thread-Local Edits1870858 -Node: Binary constants1874303 -Node: C++ Extensions1874974 -Node: C++ Volatiles1876685 -Node: Restricted Pointers1879033 -Node: Vague Linkage1880624 -Node: C++ Interface1884247 -Ref: C++ Interface-Footnote-11888535 -Node: Template Instantiation1888673 -Node: Bound member functions1895259 -Node: C++ Attributes1896791 -Node: Function Multiversioning1900370 -Node: Namespace Association1902187 -Node: Type Traits1903567 -Node: Java Exceptions1910050 -Node: Deprecated Features1911440 -Node: Backwards Compatibility1914407 -Node: Objective-C1915754 -Node: GNU Objective-C runtime API1916361 -Node: Modern GNU Objective-C runtime API1917368 -Node: Traditional GNU Objective-C runtime API1919804 -Node: Executing code before main1920531 -Node: What you can and what you cannot do in +load1923269 -Node: Type encoding1925657 -Node: Legacy type encoding1930684 -Node: @encode1931774 -Node: Method signatures1932315 -Node: Garbage Collection1934307 -Node: Constant string objects1936996 -Node: compatibility_alias1939504 -Node: Exceptions1940225 -Node: Synchronization1942935 -Node: Fast enumeration1944119 -Node: Using fast enumeration1944431 -Node: c99-like fast enumeration syntax1945642 -Node: Fast enumeration details1946345 -Node: Fast enumeration protocol1948685 -Node: Messaging with the GNU Objective-C runtime1951837 -Node: Dynamically registering methods1953209 -Node: Forwarding hook1954900 -Node: Compatibility1957940 -Node: Gcov1964496 -Node: Gcov Intro1965029 -Node: Invoking Gcov1967747 -Node: Gcov and Optimization1981987 -Node: Gcov Data Files1984989 -Node: Cross-profiling1986384 -Node: Trouble1988238 -Node: Actual Bugs1989650 -Node: Interoperation1990097 -Node: Incompatibilities1996988 -Node: Fixed Headers2005140 -Node: Standard Libraries2006798 -Node: Disappointments2008170 -Node: C++ Misunderstandings2012529 -Node: Static Definitions2013340 -Node: Name lookup2014393 -Ref: Name lookup-Footnote-12019173 -Node: Temporaries2019362 -Node: Copy Assignment2021338 -Node: Non-bugs2023145 -Node: Warnings and Errors2033651 -Node: Bugs2035413 -Node: Bug Criteria2035880 -Node: Bug Reporting2038090 -Node: Service2038311 -Node: Contributing2039130 -Node: Funding2039870 -Node: GNU Project2042360 -Node: Copying2043006 -Node: GNU Free Documentation License2080514 -Node: Contributors2105631 -Node: Option Index2143500 -Node: Keyword Index2353567 - -End Tag Table |